diff options
author | Daria Volvenkova <d.volvenkova@corp.mail.ru> | 2018-08-17 18:42:11 +0300 |
---|---|---|
committer | Roman Kuznetsov <r.kuznetsow@gmail.com> | 2018-08-19 20:49:12 +0300 |
commit | 45a35edf6d26cadaeb6e48bf1cec9b3253503b25 (patch) | |
tree | 46e0d1a254a85be02002cf516a9556c33b8a0857 /drape_frontend | |
parent | 515abeed2a658d13864d15c80463f53845738912 (diff) |
Refactoring of DebugRectRenderer.
Diffstat (limited to 'drape_frontend')
-rw-r--r-- | drape_frontend/debug_rect_renderer.cpp | 28 | ||||
-rw-r--r-- | drape_frontend/debug_rect_renderer.hpp | 7 | ||||
-rw-r--r-- | drape_frontend/drape_engine.cpp | 7 | ||||
-rw-r--r-- | drape_frontend/drape_engine.hpp | 1 | ||||
-rwxr-xr-x | drape_frontend/frontend_renderer.cpp | 29 | ||||
-rwxr-xr-x | drape_frontend/frontend_renderer.hpp | 4 | ||||
-rw-r--r-- | drape_frontend/message.hpp | 1 | ||||
-rw-r--r-- | drape_frontend/message_subclasses.hpp | 14 | ||||
-rwxr-xr-x | drape_frontend/render_group.cpp | 5 | ||||
-rwxr-xr-x | drape_frontend/render_group.hpp | 6 | ||||
-rw-r--r-- | drape_frontend/transit_scheme_renderer.cpp | 16 | ||||
-rw-r--r-- | drape_frontend/transit_scheme_renderer.hpp | 10 |
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; |