diff --git a/map/framework.cpp b/map/framework.cpp index 0c578febbd..81da5e52e3 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -1285,7 +1285,7 @@ void Framework::SetRenderPolicy(RenderPolicy * renderPolicy) bind(&WindowHandle::invalidate, renderPolicy->GetWindowHandle().get()), m_renderPolicy->GetGlyphCache(), - m_renderPolicy->GetDrawer()->screen().get()); + m_renderPolicy->GetCacheScreen().get()); m_guiController->SetRenderParams(rp); diff --git a/map/render_policy.cpp b/map/render_policy.cpp index 901493d805..7c0370b22e 100644 --- a/map/render_policy.cpp +++ b/map/render_policy.cpp @@ -11,6 +11,7 @@ #include "../anim/task.hpp" #include "../yg/internal/opengl.hpp" +#include "../yg/skin.hpp" #include "../indexer/scales.hpp" #include "../indexer/drawing_rules.hpp" @@ -43,6 +44,21 @@ RenderPolicy::RenderPolicy(Params const & p, yg::gl::CheckExtensionSupport(); } +void RenderPolicy::InitCacheScreen() +{ + yg::gl::Screen::Params cp; + + cp.m_doUnbindRT = false; + cp.m_glyphCacheID = m_resourceManager->guiThreadGlyphCacheID(); + cp.m_useGuiResources = true; + cp.m_isSynchronized = false; + cp.m_resourceManager = m_resourceManager; + + m_cacheScreen = make_shared_ptr(new yg::gl::Screen(cp)); + + m_cacheScreen->setSkin(m_skin); +} + m2::RectI const RenderPolicy::OnSize(int w, int h) { m_drawer->onSize(w, h); @@ -233,6 +249,26 @@ shared_ptr const RenderPolicy::GetOverlay() const return m_overlay; } +yg::Color const RenderPolicy::GetBgColor() const +{ + return m_bgColor; +} + +shared_ptr const & RenderPolicy::GetCacheScreen() const +{ + return m_cacheScreen; +} + +void RenderPolicy::SetSkin(shared_ptr const & skin) +{ + m_skin = skin; +} + +shared_ptr const & RenderPolicy::GetSkin() const +{ + return m_skin; +} + RenderPolicy * CreateRenderPolicy(RenderPolicy::Params const & params) { #ifdef OMIM_OS_ANDROID diff --git a/map/render_policy.hpp b/map/render_policy.hpp index ae35a8f65c..d96a78692b 100644 --- a/map/render_policy.hpp +++ b/map/render_policy.hpp @@ -25,6 +25,7 @@ namespace yg class RenderContext; } + class Skin; class GlyphCache; class ResourceManager; } @@ -55,6 +56,8 @@ protected: yg::Color m_bgColor; shared_ptr m_resourceManager; + shared_ptr m_skin; + shared_ptr m_cacheScreen; shared_ptr m_primaryRC; shared_ptr m_windowHandle; shared_ptr m_drawer; @@ -70,6 +73,8 @@ protected: void SetOverlay(shared_ptr const & overlay); + void InitCacheScreen(); + public: struct Params @@ -148,6 +153,12 @@ public: virtual void JoinBenchmarkFence(int fenceID); virtual shared_ptr const GetOverlay() const; + yg::Color const GetBgColor() const; + + shared_ptr const & GetCacheScreen() const; + + virtual void SetSkin(shared_ptr const & skin); + shared_ptr const & GetSkin() const; }; RenderPolicy * CreateRenderPolicy(RenderPolicy::Params const & params); diff --git a/map/tiling_render_policy_mt.cpp b/map/tiling_render_policy_mt.cpp index 72a14cbe9b..c80ff369e5 100644 --- a/map/tiling_render_policy_mt.cpp +++ b/map/tiling_render_policy_mt.cpp @@ -130,12 +130,14 @@ TilingRenderPolicyMT::TilingRenderPolicyMT(Params const & p) GetPlatform().GetFontNames(fonts); m_resourceManager->addFonts(fonts); + SetSkin(make_shared_ptr(yg::loadSkin(m_resourceManager, SkinName()))); + DrawerYG::Params dp; dp.m_frameBuffer = make_shared_ptr(new yg::gl::FrameBuffer(p.m_useDefaultFB)); dp.m_resourceManager = m_resourceManager; dp.m_glyphCacheID = m_resourceManager->guiThreadGlyphCacheID(); - dp.m_skin = make_shared_ptr(yg::loadSkin(m_resourceManager, SkinName())); + dp.m_skin = GetSkin(); dp.m_visualScale = VisualScale(); dp.m_useGuiResources = true; dp.m_isSynchronized = false; @@ -143,6 +145,8 @@ TilingRenderPolicyMT::TilingRenderPolicyMT(Params const & p) m_drawer.reset(new DrawerYG(dp)); + InitCacheScreen(); + m_windowHandle.reset(new WindowHandle()); m_windowHandle->setUpdatesEnabled(false); diff --git a/map/tiling_render_policy_st.cpp b/map/tiling_render_policy_st.cpp index 25253fd1e8..02b7592cee 100644 --- a/map/tiling_render_policy_st.cpp +++ b/map/tiling_render_policy_st.cpp @@ -145,12 +145,14 @@ TilingRenderPolicyST::TilingRenderPolicyST(Params const & p) GetPlatform().GetFontNames(fonts); m_resourceManager->addFonts(fonts); + SetSkin(make_shared_ptr(yg::loadSkin(m_resourceManager, SkinName()))); + DrawerYG::Params dp; dp.m_frameBuffer = make_shared_ptr(new yg::gl::FrameBuffer(p.m_useDefaultFB)); dp.m_resourceManager = m_resourceManager; dp.m_glyphCacheID = m_resourceManager->guiThreadGlyphCacheID(); - dp.m_skin = make_shared_ptr(yg::loadSkin(m_resourceManager, SkinName())); + dp.m_skin = GetSkin(); dp.m_visualScale = VisualScale(); dp.m_useGuiResources = true; dp.m_isSynchronized = false; @@ -159,6 +161,8 @@ TilingRenderPolicyST::TilingRenderPolicyST(Params const & p) m_drawer.reset(new DrawerYG(dp)); + InitCacheScreen(); + m_windowHandle.reset(new WindowHandle()); m_windowHandle->setUpdatesEnabled(false);