From 0eca7c07eb095dd978112c522489817d3c5cd484 Mon Sep 17 00:00:00 2001 From: ExMix Date: Tue, 10 Sep 2013 13:07:55 +0300 Subject: [PATCH] simple refactoring to reduce code --- map/render_policy.cpp | 49 ++++++++++++++ map/render_policy.hpp | 15 +++++ map/simple_render_policy.cpp | 99 ++++------------------------ map/tiling_render_policy_mt.cpp | 109 +++--------------------------- map/tiling_render_policy_st.cpp | 113 ++++---------------------------- map/yopme_render_policy.cpp | 98 ++++++++------------------- map/yopme_render_policy.hpp | 2 +- 7 files changed, 126 insertions(+), 359 deletions(-) diff --git a/map/render_policy.cpp b/map/render_policy.cpp index bafa627751..7bed3f8ab1 100644 --- a/map/render_policy.cpp +++ b/map/render_policy.cpp @@ -252,6 +252,55 @@ shared_ptr const & RenderPolicy::GetCacheScreen() const return m_cacheScreen; } +void RenderPolicy::InitWindowsHandle(VideoTimer * timer, shared_ptr context) +{ + m_windowHandle.reset(new WindowHandle()); + m_windowHandle->setRenderPolicy(this); + m_windowHandle->setUpdatesEnabled(false); + m_windowHandle->setVideoTimer(timer); + m_windowHandle->setRenderContext(context); +} + +Drawer * RenderPolicy::CreateDrawer(bool isDefaultFB, + shared_ptr context, + graphics::EStorageType storageType, + graphics::ETextureType textureType) +{ + Drawer::Params dp; + + dp.m_frameBuffer = make_shared_ptr(new graphics::gl::FrameBuffer(isDefaultFB)); + dp.m_resourceManager = m_resourceManager; + dp.m_threadSlot = m_resourceManager->guiThreadSlot(); + dp.m_visualScale = VisualScale(); + dp.m_storageType = storageType; + dp.m_textureType = textureType; + dp.m_isSynchronized = false; + dp.m_doUnbindRT = false; + dp.m_renderContext = context; + + return new Drawer(dp); +} + +graphics::ResourceManager::StoragePoolParams RenderPolicy::GetStorageParam(size_t vertexCount, + size_t indexCount, + size_t batchSize, + graphics::EStorageType type) +{ + return graphics::ResourceManager::StoragePoolParams(vertexCount * sizeof(graphics::gl::Vertex), + sizeof(graphics::gl::Vertex), + indexCount * sizeof(unsigned short), + sizeof(unsigned short), + batchSize, type, false); +} + +graphics::ResourceManager::TexturePoolParams RenderPolicy::GetTextureParam(size_t size, + size_t initCount, + graphics::DataFormat format, + graphics::ETextureType type) +{ + return graphics::ResourceManager::TexturePoolParams(size, size, initCount, format, type, false); +} + RenderPolicy * CreateRenderPolicy(RenderPolicy::Params const & params) { #ifdef OMIM_OS_ANDROID diff --git a/map/render_policy.hpp b/map/render_policy.hpp index acb38498b3..1f7d29814d 100644 --- a/map/render_policy.hpp +++ b/map/render_policy.hpp @@ -168,6 +168,21 @@ public: graphics::Color const GetBgColor() const; shared_ptr const & GetCacheScreen() const; + +protected: + void InitWindowsHandle(VideoTimer * timer, shared_ptr context); + Drawer * CreateDrawer(bool isDefaultFB, + shared_ptr context, + graphics::EStorageType storageType, + graphics::ETextureType textureType); + graphics::ResourceManager::StoragePoolParams GetStorageParam(size_t vertexCount, + size_t indexCount, + size_t batchSize, + graphics::EStorageType type); + graphics::ResourceManager::TexturePoolParams GetTextureParam(size_t size, + size_t initCount, + graphics::DataFormat format, + graphics::ETextureType type); }; RenderPolicy * CreateRenderPolicy(RenderPolicy::Params const & params); diff --git a/map/simple_render_policy.cpp b/map/simple_render_policy.cpp index 4c7f17f98e..dc47633033 100644 --- a/map/simple_render_policy.cpp +++ b/map/simple_render_policy.cpp @@ -12,85 +12,24 @@ #include "../platform/platform.hpp" +using namespace graphics; + SimpleRenderPolicy::SimpleRenderPolicy(Params const & p) : RenderPolicy(p, false, 1) { graphics::ResourceManager::Params rmp = p.m_rmParams; rmp.checkDeviceCaps(); - - graphics::ResourceManager::TexturePoolParams tpp; - graphics::ResourceManager::StoragePoolParams spp; - double k = VisualScale(); - spp = graphics::ResourceManager::StoragePoolParams(50000 * sizeof(graphics::gl::Vertex), - sizeof(graphics::gl::Vertex), - 10000 * sizeof(unsigned short), - sizeof(unsigned short), - 15, - graphics::ELargeStorage, - false); + rmp.m_textureParams[ELargeTexture] = GetTextureParam(512, 10, rmp.m_texFormat, ELargeTexture); + rmp.m_textureParams[EMediumTexture] = GetTextureParam(256 * k, 5, rmp.m_texFormat, EMediumTexture); + rmp.m_textureParams[ESmallTexture] = GetTextureParam(128 * k, 4, rmp.m_texFormat, ESmallTexture); - rmp.m_storageParams[spp.m_storageType] = spp; - - spp = graphics::ResourceManager::StoragePoolParams(5000 * sizeof(graphics::gl::Vertex), - sizeof(graphics::gl::Vertex), - 10000 * sizeof(unsigned short), - sizeof(unsigned short), - 100, - graphics::EMediumStorage, - false); - - rmp.m_storageParams[spp.m_storageType] = spp; - - spp = graphics::ResourceManager::StoragePoolParams(2000 * sizeof(graphics::gl::Vertex), - sizeof(graphics::gl::Vertex), - 6000 * sizeof(unsigned short), - sizeof(unsigned short), - 10, - graphics::ESmallStorage, - false); - - rmp.m_storageParams[spp.m_storageType] = spp; - - spp = graphics::ResourceManager::StoragePoolParams(100 * sizeof(graphics::gl::Vertex), - sizeof(graphics::gl::Vertex), - 200 * sizeof(unsigned short), - sizeof(unsigned short), - 1, - graphics::ETinyStorage, - true); - - rmp.m_storageParams[spp.m_storageType] = spp; - - - tpp = graphics::ResourceManager::TexturePoolParams(512 * k, - 256 * k, - 10, - rmp.m_texFormat, - graphics::ELargeTexture, - false); - - rmp.m_textureParams[tpp.m_textureType] = tpp; - - tpp = graphics::ResourceManager::TexturePoolParams(512 * k, - 256 * k, - 5, - rmp.m_texFormat, - graphics::EMediumTexture, - false); - - rmp.m_textureParams[tpp.m_textureType] = tpp; - - tpp = graphics::ResourceManager::TexturePoolParams(128 * k, - 128 * k, - 4, - rmp.m_texFormat, - graphics::ESmallTexture, - false); - - rmp.m_textureParams[tpp.m_textureType] = tpp; + rmp.m_storageParams[ELargeStorage] = GetStorageParam(50000, 100000, 15, ELargeStorage); + rmp.m_storageParams[EMediumStorage] = GetStorageParam(5000, 10000, 100, EMediumStorage); + rmp.m_storageParams[ESmallStorage] = GetStorageParam(2000, 6000, 10, ESmallStorage); + rmp.m_storageParams[ETinyStorage] = GetStorageParam(100, 200, 1, ETinyStorage); rmp.m_glyphCacheParams = graphics::ResourceManager::GlyphCacheParams("unicode_blocks.txt", "fonts_whitelist.txt", @@ -112,25 +51,9 @@ SimpleRenderPolicy::SimpleRenderPolicy(Params const & p) GetPlatform().GetFontNames(fonts); m_resourceManager->addFonts(fonts); - Drawer::Params dp; - - dp.m_frameBuffer = make_shared_ptr(new graphics::gl::FrameBuffer(p.m_useDefaultFB)); - dp.m_resourceManager = m_resourceManager; - dp.m_threadSlot = m_resourceManager->guiThreadSlot(); - dp.m_visualScale = VisualScale(); - dp.m_isSynchronized = true; - dp.m_renderContext = m_primaryRC; - - m_drawer.reset(new Drawer(dp)); - + m_drawer.reset(CreateDrawer(p.m_useDefaultFB, p.m_primaryRC, ELargeStorage, ELargeTexture)); InitCacheScreen(); - - m_windowHandle.reset(new WindowHandle()); - - m_windowHandle->setUpdatesEnabled(false); - m_windowHandle->setRenderPolicy(this); - m_windowHandle->setVideoTimer(p.m_videoTimer); - m_windowHandle->setRenderContext(p.m_primaryRC); + InitWindowsHandle(p.m_videoTimer, p.m_primaryRC); } void SimpleRenderPolicy::DrawFrame(shared_ptr const & e, diff --git a/map/tiling_render_policy_mt.cpp b/map/tiling_render_policy_mt.cpp index 3c255505aa..5e54275fd8 100644 --- a/map/tiling_render_policy_mt.cpp +++ b/map/tiling_render_policy_mt.cpp @@ -18,88 +18,17 @@ TilingRenderPolicyMT::TilingRenderPolicyMT(Params const & p) graphics::ResourceManager::Params rmp = p.m_rmParams; rmp.checkDeviceCaps(); - - ResourceManager::TexturePoolParams tpp; - ResourceManager::StoragePoolParams spp; - int k = int(ceil(VisualScale())); - tpp = ResourceManager::TexturePoolParams(512, - 512, - 1, - rmp.m_texFormat, - ELargeTexture, - true); - - rmp.m_textureParams[tpp.m_textureType] = tpp; - - tpp = ResourceManager::TexturePoolParams(256 * k, - 256 * k, - 1, - rmp.m_texFormat, - EMediumTexture, - true); - - rmp.m_textureParams[tpp.m_textureType] = tpp; - - tpp = ResourceManager::TexturePoolParams(TileSize(), - TileSize(), - 1, - rmp.m_texRtFormat, - ERenderTargetTexture, - true); - - rmp.m_textureParams[tpp.m_textureType] = tpp; - - tpp = ResourceManager::TexturePoolParams(128 * k, - 128 * k, - 4, - rmp.m_texFormat, - ESmallTexture, - true); - - rmp.m_textureParams[tpp.m_textureType] = tpp; - - spp = ResourceManager::StoragePoolParams(50000 * sizeof(graphics::gl::Vertex), - sizeof(graphics::gl::Vertex), - 100000 * sizeof(unsigned short), - sizeof(unsigned short), - 5, - ELargeStorage, - true); - - rmp.m_storageParams[spp.m_storageType] = spp; - - spp = ResourceManager::StoragePoolParams(6000 * sizeof(graphics::gl::Vertex), - sizeof(graphics::gl::Vertex), - 9000 * sizeof(unsigned short), - sizeof(unsigned short), - 1, - EMediumStorage, - true); - - rmp.m_storageParams[spp.m_storageType] = spp; - - spp = ResourceManager::StoragePoolParams(2000 * sizeof(graphics::gl::Vertex), - sizeof(graphics::gl::Vertex), - 4000 * sizeof(unsigned short), - sizeof(unsigned short), - 5, - ESmallStorage, - true); - - rmp.m_storageParams[spp.m_storageType] = spp; - - spp = ResourceManager::StoragePoolParams(100 * sizeof(graphics::gl::Vertex), - sizeof(graphics::gl::Vertex), - 200 * sizeof(unsigned short), - sizeof(unsigned short), - 1, - ETinyStorage, - true); - - rmp.m_storageParams[spp.m_storageType] = spp; + rmp.m_textureParams[ELargeTexture] = GetTextureParam(512, 1, rmp.m_texFormat, ELargeTexture); + rmp.m_textureParams[EMediumTexture] = GetTextureParam(256 * k, 1, rmp.m_texFormat, EMediumTexture); + rmp.m_textureParams[ERenderTargetTexture] = GetTextureParam(TileSize(), 1, rmp.m_texRtFormat, ERenderTargetTexture); + rmp.m_textureParams[ESmallTexture] = GetTextureParam(128 * k, 4, rmp.m_texFormat, ESmallTexture); + rmp.m_storageParams[ELargeStorage] = GetStorageParam(50000, 100000, 5, ELargeStorage); + rmp.m_storageParams[EMediumStorage] = GetStorageParam(6000, 9000, 1, EMediumStorage); + rmp.m_storageParams[ESmallStorage] = GetStorageParam(2000, 4000, 5, ESmallStorage); + rmp.m_storageParams[ETinyStorage] = GetStorageParam(100, 200, 5, ETinyStorage); rmp.m_glyphCacheParams = graphics::ResourceManager::GlyphCacheParams("unicode_blocks.txt", "fonts_whitelist.txt", @@ -121,27 +50,9 @@ TilingRenderPolicyMT::TilingRenderPolicyMT(Params const & p) GetPlatform().GetFontNames(fonts); m_resourceManager->addFonts(fonts); - Drawer::Params dp; - - dp.m_frameBuffer = make_shared_ptr(new graphics::gl::FrameBuffer(p.m_useDefaultFB)); - dp.m_resourceManager = m_resourceManager; - dp.m_threadSlot = m_resourceManager->guiThreadSlot(); - dp.m_visualScale = VisualScale(); - dp.m_storageType = ESmallStorage; - dp.m_textureType = ESmallTexture; - dp.m_isSynchronized = false; - dp.m_renderContext = p.m_primaryRC; - - m_drawer.reset(new Drawer(dp)); - + m_drawer.reset(CreateDrawer(p.m_useDefaultFB, p.m_primaryRC, ESmallStorage, ESmallTexture)); InitCacheScreen(); - - m_windowHandle.reset(new WindowHandle()); - - m_windowHandle->setUpdatesEnabled(false); - m_windowHandle->setRenderPolicy(this); - m_windowHandle->setVideoTimer(p.m_videoTimer); - m_windowHandle->setRenderContext(p.m_primaryRC); + InitWindowsHandle(p.m_videoTimer, m_primaryRC); } TilingRenderPolicyMT::~TilingRenderPolicyMT() diff --git a/map/tiling_render_policy_st.cpp b/map/tiling_render_policy_st.cpp index c2b1896d48..a88a5f7542 100644 --- a/map/tiling_render_policy_st.cpp +++ b/map/tiling_render_policy_st.cpp @@ -10,96 +10,29 @@ #include "tile_renderer.hpp" #include "coverage_generator.hpp" +using namespace graphics; + TilingRenderPolicyST::TilingRenderPolicyST(Params const & p) : BasicTilingRenderPolicy(p, true) { int cpuCores = GetPlatform().CpuCores(); - graphics::ResourceManager::Params rmp = p.m_rmParams; + ResourceManager::Params rmp = p.m_rmParams; rmp.checkDeviceCaps(); - graphics::ResourceManager::TexturePoolParams tpp; - graphics::ResourceManager::StoragePoolParams spp; - int k = int(ceil(VisualScale())); - tpp = graphics::ResourceManager::TexturePoolParams(512, - 512, - 1, - rmp.m_texFormat, - graphics::ELargeTexture, - true); + rmp.m_textureParams[ELargeTexture] = GetTextureParam(512, 1, rmp.m_texFormat, ELargeTexture); + rmp.m_textureParams[EMediumTexture] = GetTextureParam(256 * k, 10, rmp.m_texFormat, EMediumTexture); + rmp.m_textureParams[ERenderTargetTexture] = GetTextureParam(TileSize(), 1, rmp.m_texRtFormat, ERenderTargetTexture); + rmp.m_textureParams[ESmallTexture] = GetTextureParam(128 * k, 2, rmp.m_texFormat, ESmallTexture); - rmp.m_textureParams[tpp.m_textureType] = tpp; - - tpp = graphics::ResourceManager::TexturePoolParams(256 * k, - 256 * k, - 10, - rmp.m_texFormat, - graphics::EMediumTexture, - true); - - rmp.m_textureParams[tpp.m_textureType] = tpp; - - tpp = graphics::ResourceManager::TexturePoolParams(TileSize(), - TileSize(), - 1, - rmp.m_texRtFormat, - graphics::ERenderTargetTexture, - true); - - rmp.m_textureParams[tpp.m_textureType] = tpp; - - tpp = graphics::ResourceManager::TexturePoolParams(128 * k, - 128 * k, - 2, - rmp.m_texFormat, - graphics::ESmallTexture, - true); - - rmp.m_textureParams[tpp.m_textureType] = tpp; - - spp = graphics::ResourceManager::StoragePoolParams(6000 * sizeof(graphics::gl::Vertex), - sizeof(graphics::gl::Vertex), - 9000 * sizeof(unsigned short), - sizeof(unsigned short), - 10, - graphics::ELargeStorage, - true); - - rmp.m_storageParams[spp.m_storageType] = spp; - - spp = graphics::ResourceManager::StoragePoolParams(6000 * sizeof(graphics::gl::Vertex), - sizeof(graphics::gl::Vertex), - 9000 * sizeof(unsigned short), - sizeof(unsigned short), - 1, - graphics::EMediumStorage, - true); - - rmp.m_storageParams[spp.m_storageType] = spp; - - spp = graphics::ResourceManager::StoragePoolParams(2000 * sizeof(graphics::gl::Vertex), - sizeof(graphics::gl::Vertex), - 4000 * sizeof(unsigned short), - sizeof(unsigned short), - 5, - graphics::ESmallStorage, - true); - - rmp.m_storageParams[spp.m_storageType] = spp; - - spp = graphics::ResourceManager::StoragePoolParams(100 * sizeof(graphics::gl::Vertex), - sizeof(graphics::gl::Vertex), - 200 * sizeof(unsigned short), - sizeof(unsigned short), - 5, - graphics::ETinyStorage, - true); - - rmp.m_storageParams[spp.m_storageType] = spp; + rmp.m_storageParams[ELargeStorage] = GetStorageParam(6000, 9000, 10, ELargeStorage); + rmp.m_storageParams[EMediumStorage] = GetStorageParam(6000, 9000, 1, EMediumStorage); + rmp.m_storageParams[ESmallStorage] = GetStorageParam(2000, 4000, 5, ESmallStorage); + rmp.m_storageParams[ETinyStorage] = GetStorageParam(100, 200, 5, ETinyStorage); rmp.m_glyphCacheParams = graphics::ResourceManager::GlyphCacheParams("unicode_blocks.txt", "fonts_whitelist.txt", @@ -123,29 +56,9 @@ TilingRenderPolicyST::TilingRenderPolicyST(Params const & p) GetPlatform().GetFontNames(fonts); m_resourceManager->addFonts(fonts); - Drawer::Params dp; - - dp.m_frameBuffer = make_shared_ptr(new graphics::gl::FrameBuffer(p.m_useDefaultFB)); - dp.m_resourceManager = m_resourceManager; - dp.m_threadSlot = m_resourceManager->guiThreadSlot(); - dp.m_visualScale = VisualScale(); - dp.m_storageType = graphics::ESmallStorage; - dp.m_textureType = graphics::ESmallTexture; - dp.m_isSynchronized = false; - dp.m_renderContext = p.m_primaryRC; - -// p.m_isDebugging = true; - - m_drawer.reset(new Drawer(dp)); - + m_drawer.reset(CreateDrawer(p.m_useDefaultFB, p.m_primaryRC, ESmallStorage, ESmallTexture)); InitCacheScreen(); - - m_windowHandle.reset(new WindowHandle()); - - m_windowHandle->setUpdatesEnabled(false); - m_windowHandle->setRenderPolicy(this); - m_windowHandle->setVideoTimer(p.m_videoTimer); - m_windowHandle->setRenderContext(p.m_primaryRC); + InitWindowsHandle(p.m_videoTimer, m_primaryRC); } TilingRenderPolicyST::~TilingRenderPolicyST() diff --git a/map/yopme_render_policy.cpp b/map/yopme_render_policy.cpp index 6774db3d10..0a3cb68863 100644 --- a/map/yopme_render_policy.cpp +++ b/map/yopme_render_policy.cpp @@ -13,53 +13,29 @@ #include "../std/vector.hpp" +using namespace graphics; + YopmeRP::YopmeRP(RenderPolicy::Params const & p) : RenderPolicy(p, false, 1) { LOG(LDEBUG, ("Yopme render policy created")); - graphics::ResourceManager::Params rmp = p.m_rmParams; + ResourceManager::Params rmp = p.m_rmParams; rmp.checkDeviceCaps(); - graphics::ResourceManager::TexturePoolParams tpp; - graphics::ResourceManager::StoragePoolParams spp; - double k = VisualScale(); - spp = graphics::ResourceManager::StoragePoolParams(50000 * sizeof(graphics::gl::Vertex), - sizeof(graphics::gl::Vertex), - 10000 * sizeof(unsigned short), - sizeof(unsigned short), - 15, - graphics::ELargeStorage, - false); + rmp.m_textureParams[ELargeTexture] = GetTextureParam(512, 1, rmp.m_texFormat, ELargeTexture); + rmp.m_textureParams[ESmallTexture] = GetTextureParam(128 * k, 2, rmp.m_texFormat, ESmallTexture); - rmp.m_storageParams[spp.m_storageType] = spp; - - spp = graphics::ResourceManager::StoragePoolParams(2000 * sizeof(graphics::gl::Vertex), - sizeof(graphics::gl::Vertex), - 6000 * sizeof(unsigned short), - sizeof(unsigned short), - 1, - graphics::ESmallStorage, - false); - - rmp.m_storageParams[spp.m_storageType] = spp; - - tpp = graphics::ResourceManager::TexturePoolParams(512 * k, - 256 * k, - 1, - rmp.m_texFormat, - graphics::ELargeTexture, - false); - - rmp.m_textureParams[tpp.m_textureType] = tpp; + rmp.m_storageParams[ELargeStorage] = GetStorageParam(50000, 100000, 15, ELargeStorage); + rmp.m_storageParams[ESmallStorage] = GetStorageParam(2000, 6000, 1, ESmallStorage); rmp.m_glyphCacheParams = graphics::ResourceManager::GlyphCacheParams("unicode_blocks.txt", - "fonts_whitelist.txt", - "fonts_blacklist.txt", - 2 * 1024 * 1024, - Density()); + "fonts_whitelist.txt", + "fonts_blacklist.txt", + 2 * 1024 * 1024, + Density()); rmp.m_renderThreadsCount = 0; rmp.m_threadSlotsCount = 1; @@ -74,63 +50,43 @@ YopmeRP::YopmeRP(RenderPolicy::Params const & p) GetPlatform().GetFontNames(fonts); m_resourceManager->addFonts(fonts); - // init main drawer. - Drawer::Params dp; - dp.m_frameBuffer = make_shared_ptr(new graphics::gl::FrameBuffer(p.m_useDefaultFB)); - dp.m_resourceManager = m_resourceManager; - dp.m_threadSlot = m_resourceManager->guiThreadSlot(); - dp.m_visualScale = VisualScale(); - dp.m_isSynchronized = true; - dp.m_renderContext = m_primaryRC; - m_drawer.reset(new Drawer(dp)); - m_drawer->onSize(p.m_screenWidth, p.m_screenHeight); + m_drawer.reset(CreateDrawer(p.m_useDefaultFB, p.m_primaryRC, ESmallStorage, ESmallTexture)); + m_offscreenDrawer.reset(CreateDrawer(false, p.m_primaryRC, ELargeStorage, ELargeTexture)); + m_offscreenDrawer->screen()->setDepthBuffer(make_shared_ptr(new graphics::gl::RenderBuffer(p.m_screenWidth, p.m_screenHeight, true))); - // init offscreen drawer - dp.m_frameBuffer = make_shared_ptr(new graphics::gl::FrameBuffer()); - dp.m_isSynchronized = false; - dp.m_doUnbindRT = false; - m_pDrawer.reset(new Drawer(dp)); - m_pDrawer->onSize(p.m_screenWidth, p.m_screenHeight); - m_pDrawer->screen()->setDepthBuffer(make_shared_ptr(new graphics::gl::RenderBuffer(p.m_screenWidth, p.m_screenHeight, true))); - - m_windowHandle.reset(new WindowHandle()); - m_windowHandle->setUpdatesEnabled(false); - m_windowHandle->setRenderPolicy(this); - m_windowHandle->setVideoTimer(p.m_videoTimer); - m_windowHandle->setRenderContext(p.m_primaryRC); + InitWindowsHandle(p.m_videoTimer, p.m_primaryRC); } void YopmeRP::DrawFrame(shared_ptr const & e, ScreenBase const & s) { shared_ptr renderTarget; - ASSERT(m_pDrawer->screen()->width() == GetDrawer()->screen()->width(), ()); - ASSERT(m_pDrawer->screen()->height() == GetDrawer()->screen()->height(), ()); - int width = 0; - int height = 0; + int width = m_offscreenDrawer->screen()->width(); + int height = m_offscreenDrawer->screen()->height(); + + ASSERT(width == GetDrawer()->screen()->width(), ()); + ASSERT(height == GetDrawer()->screen()->height(), ()); + shared_ptr overlay(new graphics::Overlay()); overlay->setCouldOverlap(true); { // offscreen rendering - graphics::Screen * pScreen = m_pDrawer->screen(); - width = pScreen->width(); - height = pScreen->height(); - m2::RectI renderRect(0, 0, width, height); - pScreen->setOverlay(overlay); + graphics::Screen * pScreen = m_offscreenDrawer->screen(); renderTarget = m_resourceManager->createRenderTarget(width, height); + + pScreen->setOverlay(overlay); pScreen->setRenderTarget(renderTarget); pScreen->beginFrame(); pScreen->setClipRect(renderRect); pScreen->clear(m_bgColor); - shared_ptr paintEvent(new PaintEvent(m_pDrawer.get())); + shared_ptr paintEvent(new PaintEvent(m_offscreenDrawer.get())); m_renderFn(paintEvent, s, m2::RectD(renderRect), scales::GetScaleLevel(s.GlobalRect().GetGlobalRect())); pScreen->endFrame(); pScreen->resetOverlay(); - pScreen->unbindRenderTarget(); } @@ -164,6 +120,6 @@ void YopmeRP::DrawFrame(shared_ptr const & e, ScreenBase const & s) void YopmeRP::OnSize(int w, int h) { RenderPolicy::OnSize(w, h); - m_pDrawer->onSize(w, h); - m_pDrawer->screen()->setDepthBuffer(make_shared_ptr(new graphics::gl::RenderBuffer(w, h, true))); + m_offscreenDrawer->onSize(w, h); + m_offscreenDrawer->screen()->setDepthBuffer(make_shared_ptr(new graphics::gl::RenderBuffer(w, h, true))); } diff --git a/map/yopme_render_policy.hpp b/map/yopme_render_policy.hpp index 5aef4ccc4c..406987015f 100644 --- a/map/yopme_render_policy.hpp +++ b/map/yopme_render_policy.hpp @@ -13,5 +13,5 @@ public: virtual void OnSize(int w, int h); private: - shared_ptr m_pDrawer; + shared_ptr m_offscreenDrawer; };