Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaria Volvenkova <d.volvenkova@corp.mail.ru>2018-08-17 18:42:11 +0300
committerRoman Kuznetsov <r.kuznetsow@gmail.com>2018-08-19 20:49:12 +0300
commit45a35edf6d26cadaeb6e48bf1cec9b3253503b25 (patch)
tree46e0d1a254a85be02002cf516a9556c33b8a0857 /drape_frontend
parent515abeed2a658d13864d15c80463f53845738912 (diff)
Refactoring of DebugRectRenderer.
Diffstat (limited to 'drape_frontend')
-rw-r--r--drape_frontend/debug_rect_renderer.cpp28
-rw-r--r--drape_frontend/debug_rect_renderer.hpp7
-rw-r--r--drape_frontend/drape_engine.cpp7
-rw-r--r--drape_frontend/drape_engine.hpp1
-rwxr-xr-xdrape_frontend/frontend_renderer.cpp29
-rwxr-xr-xdrape_frontend/frontend_renderer.hpp4
-rw-r--r--drape_frontend/message.hpp1
-rw-r--r--drape_frontend/message_subclasses.hpp14
-rwxr-xr-xdrape_frontend/render_group.cpp5
-rwxr-xr-xdrape_frontend/render_group.hpp6
-rw-r--r--drape_frontend/transit_scheme_renderer.cpp16
-rw-r--r--drape_frontend/transit_scheme_renderer.hpp10
12 files changed, 70 insertions, 58 deletions
diff --git a/drape_frontend/debug_rect_renderer.cpp b/drape_frontend/debug_rect_renderer.cpp
index 83e56c7497..0602e30ff0 100644
--- a/drape_frontend/debug_rect_renderer.cpp
+++ b/drape_frontend/debug_rect_renderer.cpp
@@ -17,14 +17,10 @@ void PixelPointToScreenSpace(ScreenBase const & screen, m2::PointF const & pt, s
}
} // namespace
-ref_ptr<DebugRectRenderer> DebugRectRenderer::Instance()
-{
- static DebugRectRenderer renderer;
- return make_ref(&renderer);
-}
-
-DebugRectRenderer::DebugRectRenderer()
+DebugRectRenderer::DebugRectRenderer(ref_ptr<dp::GpuProgram> program, ref_ptr<gpu::ProgramParamsSetter> paramsSetter)
: Base(DrawPrimitive::LineStrip)
+ , m_program(program)
+ , m_paramsSetter(paramsSetter)
, m_state(CreateRenderState(gpu::Program::DebugRect, DepthLayer::OverlayLayer))
{
m_state.SetDepthTestEnabled(false);
@@ -33,24 +29,6 @@ DebugRectRenderer::DebugRectRenderer()
Base::SetAttribute("a_position", 0 /* bufferInd */, 0.0f /* offset */, 2 /* componentsCount */);
}
-DebugRectRenderer::~DebugRectRenderer()
-{
- ASSERT(!IsInitialized(), ());
-}
-
-void DebugRectRenderer::Init(ref_ptr<dp::GpuProgram> program, ref_ptr<gpu::ProgramParamsSetter> paramsSetter)
-{
- m_program = program;
- m_paramsSetter = paramsSetter;
-}
-
-void DebugRectRenderer::Destroy()
-{
- m_program = nullptr;
- m_paramsSetter = nullptr;
- Base::Reset();
-}
-
bool DebugRectRenderer::IsEnabled() const
{
return m_isEnabled;
diff --git a/drape_frontend/debug_rect_renderer.hpp b/drape_frontend/debug_rect_renderer.hpp
index bd62fe016e..39eb57fc30 100644
--- a/drape_frontend/debug_rect_renderer.hpp
+++ b/drape_frontend/debug_rect_renderer.hpp
@@ -16,10 +16,8 @@ class DebugRectRenderer: public dp::MeshObject, public dp::DebugRenderer
{
using Base = dp::MeshObject;
public:
- static ref_ptr<DebugRectRenderer> Instance();
+ DebugRectRenderer(ref_ptr<dp::GpuProgram> program, ref_ptr<gpu::ProgramParamsSetter> paramsSetter);
- void Init(ref_ptr<dp::GpuProgram> program, ref_ptr<gpu::ProgramParamsSetter> paramsSetter);
- void Destroy();
void SetEnabled(bool enabled);
bool IsEnabled() const override;
@@ -29,9 +27,6 @@ public:
dp::OverlayTree::DisplacementData const & data) override;
private:
- DebugRectRenderer();
- ~DebugRectRenderer() override;
-
void SetArrow(m2::PointF const & arrowStart, m2::PointF const & arrowEnd, ScreenBase const & screen);
void SetRect(m2::RectF const & rect, ScreenBase const & screen);
diff --git a/drape_frontend/drape_engine.cpp b/drape_frontend/drape_engine.cpp
index 960ef88b2d..448c2753e2 100644
--- a/drape_frontend/drape_engine.cpp
+++ b/drape_frontend/drape_engine.cpp
@@ -829,6 +829,13 @@ void DrapeEngine::ShowDebugInfo(bool shown)
MessagePriority::Normal);
}
+void DrapeEngine::EnableDebugRectRendering(bool enabled)
+{
+ m_threadCommutator->PostMessage(ThreadsCommutator::RenderThread,
+ make_unique_dp<EnableDebugRectRenderingMessage>(enabled),
+ MessagePriority::Normal);
+}
+
drape_ptr<UserMarkRenderParams> DrapeEngine::GenerateMarkRenderInfo(UserPointMark const * mark)
{
auto renderInfo = make_unique_dp<UserMarkRenderParams>();
diff --git a/drape_frontend/drape_engine.hpp b/drape_frontend/drape_engine.hpp
index db1320367a..8e6edbca16 100644
--- a/drape_frontend/drape_engine.hpp
+++ b/drape_frontend/drape_engine.hpp
@@ -222,6 +222,7 @@ public:
void SetPosteffectEnabled(PostprocessRenderer::Effect effect, bool enabled);
void EnableUGCRendering(bool enabled);
+ void EnableDebugRectRendering(bool enabled);
void RunFirstLaunchAnimation();
diff --git a/drape_frontend/frontend_renderer.cpp b/drape_frontend/frontend_renderer.cpp
index 899bff567c..3f05daa6c3 100755
--- a/drape_frontend/frontend_renderer.cpp
+++ b/drape_frontend/frontend_renderer.cpp
@@ -789,6 +789,14 @@ void FrontendRenderer::AcceptMessage(ref_ptr<Message> message)
break;
}
+ case Message::EnableDebugRectRendering:
+ {
+ ref_ptr<EnableDebugRectRenderingMessage> msg = message;
+ m_isDebugRectRenderingEnabled = msg->IsEnabled();
+ m_debugRectRenderer->SetEnabled(msg->IsEnabled());
+ }
+ break;
+
case Message::InvalidateUserMarks:
{
m_forceUpdateUserMarks = true;
@@ -1281,7 +1289,7 @@ void FrontendRenderer::RenderScene(ScreenBase const & modelView, bool activeFram
m_drapeApiRenderer->Render(context, make_ref(m_gpuProgramManager), modelView, m_frameValues);
for (auto const & arrow : m_overlayTree->GetDisplacementInfo())
- DebugRectRenderer::Instance()->DrawArrow(context, modelView, arrow);
+ m_debugRectRenderer->DrawArrow(context, modelView, arrow);
}
if (!m_postprocessRenderer->EndFrame(context, make_ref(m_gpuProgramManager)))
@@ -1385,7 +1393,8 @@ void FrontendRenderer::RenderTransitSchemeLayer(ScreenBase const & modelView)
{
RenderTransitBackground();
m_transitSchemeRenderer->RenderTransit(context, make_ref(m_gpuProgramManager), modelView,
- make_ref(m_postprocessRenderer), m_frameValues);
+ make_ref(m_postprocessRenderer), m_frameValues,
+ make_ref(m_debugRectRenderer));
}
}
@@ -1503,7 +1512,7 @@ void FrontendRenderer::RenderSingleGroup(ref_ptr<dp::GraphicsContext> context, S
ref_ptr<BaseRenderGroup> group)
{
group->UpdateAnimation();
- group->Render(context, make_ref(m_gpuProgramManager), modelView, m_frameValues);
+ group->Render(context, make_ref(m_gpuProgramManager), modelView, m_frameValues, make_ref(m_debugRectRenderer));
}
void FrontendRenderer::RefreshProjection(ScreenBase const & screen)
@@ -1854,9 +1863,7 @@ void FrontendRenderer::OnContextDestroy()
m_transitSchemeRenderer->ClearGLDependentResources(nullptr /* overlayTree */);
m_transitBackground.reset();
-
- DebugRectRenderer::Instance()->Destroy();
-
+ m_debugRectRenderer.reset();
m_gpuProgramManager.reset();
m_contextFactory->GetDrawContext()->DoneCurrent();
@@ -1889,13 +1896,11 @@ void FrontendRenderer::OnContextCreate()
dp::AlphaBlendingState::Apply();
- DebugRectRenderer::Instance()->Init(m_gpuProgramManager->GetProgram(gpu::Program::DebugRect),
- m_gpuProgramManager->GetParamsSetter());
- m_overlayTree->SetDebugRectRenderer(DebugRectRenderer::Instance());
+ m_debugRectRenderer = make_unique<DebugRectRenderer>(m_gpuProgramManager->GetProgram(gpu::Program::DebugRect),
+ m_gpuProgramManager->GetParamsSetter());
+ m_debugRectRenderer->SetEnabled(m_isDebugRectRenderingEnabled);
-#ifdef RENDER_DEBUG_DISPLACEMENT
- DebugRectRenderer::Instance()->SetEnabled(true);
-#endif
+ m_overlayTree->SetDebugRectRenderer(make_ref(m_debugRectRenderer));
// Resources recovering.
m_screenQuadRenderer = make_unique_dp<ScreenQuadRenderer>();
diff --git a/drape_frontend/frontend_renderer.hpp b/drape_frontend/frontend_renderer.hpp
index 3aa45cbaec..4a19358193 100755
--- a/drape_frontend/frontend_renderer.hpp
+++ b/drape_frontend/frontend_renderer.hpp
@@ -48,6 +48,7 @@ class RenderBucket;
namespace df
{
+class DebugRectRenderer;
class DrapeNotifier;
class ScenarioManager;
class ScreenQuadRenderer;
@@ -333,6 +334,9 @@ private:
bool m_isAntialiasingEnabled = false;
drape_ptr<PostprocessRenderer> m_postprocessRenderer;
+ bool m_isDebugRectRenderingEnabled = false;
+ drape_ptr<DebugRectRenderer> m_debugRectRenderer;
+
drape_ptr<ScenarioManager> m_scenarioManager;
bool m_firstTilesReady = false;
diff --git a/drape_frontend/message.hpp b/drape_frontend/message.hpp
index a6a85e3f6c..3f3657e679 100644
--- a/drape_frontend/message.hpp
+++ b/drape_frontend/message.hpp
@@ -85,6 +85,7 @@ public:
PostUserEvent,
FinishTexturesInitialization,
EnableUGCRendering,
+ EnableDebugRectRendering,
EnableTransitScheme,
UpdateTransitScheme,
ClearTransitSchemeData,
diff --git a/drape_frontend/message_subclasses.hpp b/drape_frontend/message_subclasses.hpp
index df100e3177..5c76e0d3c3 100644
--- a/drape_frontend/message_subclasses.hpp
+++ b/drape_frontend/message_subclasses.hpp
@@ -1207,6 +1207,20 @@ private:
bool const m_enabled;
};
+class EnableDebugRectRenderingMessage : public Message
+{
+public:
+ explicit EnableDebugRectRenderingMessage(bool enabled)
+ : m_enabled(enabled)
+ {}
+
+ Type GetType() const override { return Message::EnableDebugRectRendering; }
+ bool IsEnabled() const { return m_enabled; }
+
+private:
+ bool const m_enabled;
+};
+
class RunFirstLaunchAnimationMessage : public Message
{
public:
diff --git a/drape_frontend/render_group.cpp b/drape_frontend/render_group.cpp
index ec7b5cde14..8791b15235 100755
--- a/drape_frontend/render_group.cpp
+++ b/drape_frontend/render_group.cpp
@@ -70,7 +70,8 @@ void RenderGroup::SetOverlayVisibility(bool isVisible)
}
void RenderGroup::Render(ref_ptr<dp::GraphicsContext> context, ref_ptr<gpu::ProgramManager> mng,
- ScreenBase const & screen, FrameValues const & frameValues)
+ ScreenBase const & screen, FrameValues const & frameValues,
+ ref_ptr<DebugRectRenderer> debugRectRenderer)
{
auto programPtr = mng->GetProgram(screen.isPerspective() ? m_state.GetProgram3d<gpu::Program>()
: m_state.GetProgram<gpu::Program>());
@@ -126,7 +127,7 @@ void RenderGroup::Render(ref_ptr<dp::GraphicsContext> context, ref_ptr<gpu::Prog
}
for(auto const & renderBucket : m_renderBuckets)
- renderBucket->RenderDebug(context, screen, DebugRectRenderer::Instance());
+ renderBucket->RenderDebug(context, screen, debugRectRenderer);
}
void RenderGroup::AddBucket(drape_ptr<dp::RenderBucket> && bucket)
diff --git a/drape_frontend/render_group.hpp b/drape_frontend/render_group.hpp
index 9c71d04a1d..be14aa9d26 100755
--- a/drape_frontend/render_group.hpp
+++ b/drape_frontend/render_group.hpp
@@ -21,6 +21,8 @@ namespace gpu { class ProgramManager; }
namespace df
{
+class DebugRectRenderer;
+
class BaseRenderGroup
{
public:
@@ -36,7 +38,7 @@ public:
virtual void UpdateAnimation();
virtual void Render(ref_ptr<dp::GraphicsContext> context, ref_ptr<gpu::ProgramManager> mng, ScreenBase const & screen,
- FrameValues const & frameValues) = 0;
+ FrameValues const & frameValues, ref_ptr<DebugRectRenderer> debugRectRenderer) = 0;
protected:
dp::RenderState m_state;
@@ -60,7 +62,7 @@ public:
void RemoveOverlay(ref_ptr<dp::OverlayTree> tree);
void SetOverlayVisibility(bool isVisible);
void Render(ref_ptr<dp::GraphicsContext> context, ref_ptr<gpu::ProgramManager> mng, ScreenBase const & screen,
- FrameValues const & frameValues) override;
+ FrameValues const & frameValues, ref_ptr<DebugRectRenderer> debugRectRenderer) override;
void AddBucket(drape_ptr<dp::RenderBucket> && bucket);
diff --git a/drape_frontend/transit_scheme_renderer.cpp b/drape_frontend/transit_scheme_renderer.cpp
index dd8582cda2..a97f4be48e 100644
--- a/drape_frontend/transit_scheme_renderer.cpp
+++ b/drape_frontend/transit_scheme_renderer.cpp
@@ -131,7 +131,7 @@ void TransitSchemeRenderer::PrepareRenderData(ref_ptr<gpu::ProgramManager> mng,
void TransitSchemeRenderer::RenderTransit(ref_ptr<dp::GraphicsContext> context, ref_ptr<gpu::ProgramManager> mng,
ScreenBase const & screen, ref_ptr<PostprocessRenderer> postprocessRenderer,
- FrameValues const & frameValues)
+ FrameValues const & frameValues, ref_ptr<DebugRectRenderer> debugRectRenderer)
{
auto const zoomLevel = GetDrawTileScale(screen);
if (!IsSchemeVisible(zoomLevel) || !HasRenderData())
@@ -144,10 +144,10 @@ void TransitSchemeRenderer::RenderTransit(ref_ptr<dp::GraphicsContext> context,
RenderMarkers(context, mng, screen, frameValues, pixelHalfWidth);
{
StencilWriterGuard guard(postprocessRenderer, context);
- RenderText(context, mng, screen, frameValues);
+ RenderText(context, mng, screen, frameValues, debugRectRenderer);
}
// Render only for debug purpose.
- //RenderStubs(context, mng, screen, frameValues);
+ //RenderStubs(context, mng, screen, frameValues, debugRectRenderer);
}
void TransitSchemeRenderer::CollectOverlays(ref_ptr<dp::OverlayTree> tree, ScreenBase const & modelView)
@@ -243,7 +243,8 @@ void TransitSchemeRenderer::RenderMarkers(ref_ptr<dp::GraphicsContext> context,
}
void TransitSchemeRenderer::RenderText(ref_ptr<dp::GraphicsContext> context, ref_ptr<gpu::ProgramManager> mng,
- ScreenBase const & screen, FrameValues const & frameValues)
+ ScreenBase const & screen, FrameValues const & frameValues,
+ ref_ptr<DebugRectRenderer> debugRectRenderer)
{
auto const & glyphParams = df::VisualParams::Instance().GetGlyphVisualParams();
for (auto & renderData : m_textRenderData)
@@ -268,12 +269,13 @@ void TransitSchemeRenderer::RenderText(ref_ptr<dp::GraphicsContext> context, ref
renderData.m_bucket->Render(false /* draw as line */);
- renderData.m_bucket->RenderDebug(context, screen, DebugRectRenderer::Instance());
+ renderData.m_bucket->RenderDebug(context, screen, debugRectRenderer);
}
}
void TransitSchemeRenderer::RenderStubs(ref_ptr<dp::GraphicsContext> context, ref_ptr<gpu::ProgramManager> mng,
- ScreenBase const & screen, FrameValues const & frameValues)
+ ScreenBase const & screen, FrameValues const & frameValues,
+ ref_ptr<DebugRectRenderer> debugRectRenderer)
{
for (auto & renderData : m_colorSymbolRenderData)
{
@@ -289,7 +291,7 @@ void TransitSchemeRenderer::RenderStubs(ref_ptr<dp::GraphicsContext> context, re
renderData.m_bucket->Render(false /* draw as line */);
- renderData.m_bucket->RenderDebug(context, screen, DebugRectRenderer::Instance());
+ renderData.m_bucket->RenderDebug(context, screen, debugRectRenderer);
}
}
} // namespace df
diff --git a/drape_frontend/transit_scheme_renderer.hpp b/drape_frontend/transit_scheme_renderer.hpp
index 56926201b2..59e1057ad4 100644
--- a/drape_frontend/transit_scheme_renderer.hpp
+++ b/drape_frontend/transit_scheme_renderer.hpp
@@ -18,8 +18,9 @@ namespace dp
namespace df
{
-class PostprocessRenderer;
+class DebugRectRenderer;
class OverlayTree;
+class PostprocessRenderer;
class TransitSchemeRenderer
{
@@ -29,7 +30,8 @@ public:
bool IsSchemeVisible(int zoomLevel) const;
void RenderTransit(ref_ptr<dp::GraphicsContext> context, ref_ptr<gpu::ProgramManager> mng, ScreenBase const & screen,
- ref_ptr<PostprocessRenderer> postprocessRenderer, FrameValues const & frameValues);
+ ref_ptr<PostprocessRenderer> postprocessRenderer, FrameValues const & frameValues,
+ ref_ptr<DebugRectRenderer> debugRectRenderer);
void CollectOverlays(ref_ptr<dp::OverlayTree> tree, ScreenBase const & modelView);
@@ -60,9 +62,9 @@ private:
void RenderMarkers(ref_ptr<dp::GraphicsContext> context, ref_ptr<gpu::ProgramManager> mng, ScreenBase const & screen,
FrameValues const & frameValues, float pixelHalfWidth);
void RenderText(ref_ptr<dp::GraphicsContext> context, ref_ptr<gpu::ProgramManager> mng, ScreenBase const & screen,
- FrameValues const & frameValues);
+ FrameValues const & frameValues, ref_ptr<DebugRectRenderer> debugRectRenderer);
void RenderStubs(ref_ptr<dp::GraphicsContext> context, ref_ptr<gpu::ProgramManager> mng, ScreenBase const & screen,
- FrameValues const & frameValues);
+ FrameValues const & frameValues, ref_ptr<DebugRectRenderer> debugRectRenderer);
bool HasRenderData() const;