diff --git a/drape/glstate.cpp b/drape/glstate.cpp index e1887bc05d..76a5ed8289 100644 --- a/drape/glstate.cpp +++ b/drape/glstate.cpp @@ -56,6 +56,11 @@ GLState::GLState(uint32_t gpuProgramIndex, DepthLayer depthLayer) { } +const GLState::DepthLayer &GLState::GetDepthLayer() const +{ + return m_depthLayer; +} + void GLState::SetTextureSet(int32_t textureSet) { m_mask |= TEXTURE_BIT; diff --git a/drape/glstate.hpp b/drape/glstate.hpp index c1a6353b6f..5b0f8cb530 100644 --- a/drape/glstate.hpp +++ b/drape/glstate.hpp @@ -31,6 +31,8 @@ public: GLState(uint32_t gpuProgramIndex, DepthLayer depthLayer); + DepthLayer const & GetDepthLayer() const; + void SetTextureSet(int32_t textureSet); int32_t GetTextureSet() const; bool HasTextureSet() const; diff --git a/drape_frontend/frontend_renderer.cpp b/drape_frontend/frontend_renderer.cpp index 3e304b85b2..007db57888 100644 --- a/drape_frontend/frontend_renderer.cpp +++ b/drape_frontend/frontend_renderer.cpp @@ -186,6 +186,9 @@ namespace df GLFunctions::glDepthMask(true); GLFunctions::glClear(); + m_overlayTree.StartOverlayPlacing(m_view); + for_each(m_renderData.begin(), m_renderData.end(), bind(&FrontendRenderer::CollectOverlay, this, _1)); + m_overlayTree.EndOverlayPlacing(); for_each(m_renderData.begin(), m_renderData.end(), bind(&FrontendRenderer::RenderPartImpl, this, _1)); #ifdef DRAW_INFO @@ -216,6 +219,12 @@ namespace df m_generalUniforms.SetMatrix4x4Value("modelView", mv.m_data); } + void FrontendRenderer::CollectOverlay(pair > & node) + { + if (node.first.GetDepthLayer() == GLState::OverlayLayer) + node.second->CollectOverlayHandles(MakeStackRefPointer(&m_overlayTree)); + } + void FrontendRenderer::RenderPartImpl(pair > & node) { RefPointer program = m_gpuProgramManager->GetProgram(node.first.GetProgramIndex()); diff --git a/drape_frontend/frontend_renderer.hpp b/drape_frontend/frontend_renderer.hpp index 7b66de158c..ff5605f731 100644 --- a/drape_frontend/frontend_renderer.hpp +++ b/drape_frontend/frontend_renderer.hpp @@ -19,6 +19,7 @@ #include "../drape/gpu_program_manager.hpp" #include "../drape/oglcontextfactory.hpp" #include "../drape/texture_set_controller.hpp" +#include "../drape/overlay_tree.hpp" #include "../drape/uniform_values_storage.hpp" @@ -62,6 +63,7 @@ namespace df void RefreshProjection(); void RefreshModelView(); + void CollectOverlay(pair > & node); void RenderPartImpl(pair > & node); private: @@ -94,5 +96,6 @@ namespace df UniformValuesStorage m_generalUniforms; Viewport m_viewport; ScreenBase m_view; + OverlayTree m_overlayTree; }; }