From 9d92b985d48191481239385c8bbcf3b115655d0e Mon Sep 17 00:00:00 2001 From: rachytski Date: Thu, 25 Oct 2012 14:46:03 +0300 Subject: [PATCH] removed RenderPolicyMT, RenderPolicyST, and non-USING_GLSL code. --- iphone/Maps/Classes/RenderContext.mm | 2 - map/basic_render_policy.cpp | 173 -------- map/basic_render_policy.hpp | 56 --- map/map.pro | 10 - map/render_policy.cpp | 3 - map/render_policy_mt.cpp | 149 ------- map/render_policy_mt.hpp | 9 - map/render_policy_st.cpp | 169 ------- map/render_policy_st.hpp | 11 - map/render_queue.cpp | 147 ------- map/render_queue.hpp | 86 ---- map/render_queue_routine.cpp | 635 --------------------------- map/render_queue_routine.hpp | 156 ------- yg/blitter.cpp | 5 - yg/geometry_renderer.cpp | 12 - yg/internal/opengl.hpp | 21 +- yg/symbol_element.cpp | 13 - yg/text_element.cpp | 7 - yg/yg.pro | 24 +- 19 files changed, 10 insertions(+), 1678 deletions(-) delete mode 100644 map/basic_render_policy.cpp delete mode 100644 map/basic_render_policy.hpp delete mode 100644 map/render_policy_mt.cpp delete mode 100644 map/render_policy_mt.hpp delete mode 100644 map/render_policy_st.cpp delete mode 100644 map/render_policy_st.hpp delete mode 100644 map/render_queue.cpp delete mode 100644 map/render_queue.hpp delete mode 100644 map/render_queue_routine.cpp delete mode 100644 map/render_queue_routine.hpp diff --git a/iphone/Maps/Classes/RenderContext.mm b/iphone/Maps/Classes/RenderContext.mm index 1448dfedc3..6677de0a41 100644 --- a/iphone/Maps/Classes/RenderContext.mm +++ b/iphone/Maps/Classes/RenderContext.mm @@ -13,13 +13,11 @@ namespace iphone { RenderContext::RenderContext() { - //m_context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1]; m_context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]; } RenderContext::RenderContext(RenderContext * renderContext) { - //m_context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1 sharegroup:renderContext->m_context.sharegroup]; m_context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2 sharegroup:renderContext->m_context.sharegroup]; } diff --git a/map/basic_render_policy.cpp b/map/basic_render_policy.cpp deleted file mode 100644 index 7a16f00bab..0000000000 --- a/map/basic_render_policy.cpp +++ /dev/null @@ -1,173 +0,0 @@ -#include "basic_render_policy.hpp" - -#include "queued_renderer.hpp" -#include "render_queue.hpp" -#include "drawer_yg.hpp" -#include "events.hpp" - -#include "../yg/render_state.hpp" - -#include "../geometry/transformations.hpp" - -BasicRenderPolicy::BasicRenderPolicy(Params const & p, - bool doSupportRotation, - size_t idCacheSize, - shared_ptr const & queuedRenderer) - : RenderPolicy(p, doSupportRotation, idCacheSize), - m_QueuedRenderer(queuedRenderer), - m_DoAddCommand(true) -{ -} - -void BasicRenderPolicy::SetRenderFn(TRenderFn renderFn) -{ - RenderPolicy::SetRenderFn(renderFn); - m_RenderQueue->initializeGL(m_primaryRC, m_resourceManager); -} - -void BasicRenderPolicy::SetCountryNameFn(TCountryNameFn countryNameFn) -{ - RenderPolicy::SetCountryNameFn(countryNameFn); - m_RenderQueue->SetCountryNameFn(countryNameFn); -} - -m2::RectI const BasicRenderPolicy::OnSize(int w, int h) -{ - RenderPolicy::OnSize(w, h); - - m_RenderQueue->OnSize(w, h); - - m2::PointU pt = m_RenderQueue->renderState().coordSystemShift(); - - return m2::RectI(pt.x, pt.y, pt.x + w, pt.y + h); -} - -void BasicRenderPolicy::BeginFrame(shared_ptr const & e, - ScreenBase const & s) -{ - RenderPolicy::BeginFrame(e, s); - - if (m_QueuedRenderer) - m_QueuedRenderer->BeginFrame(); -} - -void BasicRenderPolicy::EndFrame(shared_ptr const & e, - ScreenBase const & s) -{ - m_RenderQueue->renderState().m_mutex->Unlock(); - - if (m_QueuedRenderer) - m_QueuedRenderer->EndFrame(); -} - -void BasicRenderPolicy::DrawFrame(shared_ptr const & e, - ScreenBase const & s) -{ - if (m_QueuedRenderer) - { - m_QueuedRenderer->DrawFrame(); - m_resourceManager->updatePoolState(); - } - - bool doForceUpdate = DoForceUpdate(); - bool doIntersectInvalidRect = s.GlobalRect().IsIntersect(GetInvalidRect()); - - m_RenderQueue->renderStatePtr()->m_doRepaintAll = doForceUpdate; - - if (m_DoAddCommand) - { - if (s != m_RenderQueue->renderState().m_actualScreen) - m_RenderQueue->AddCommand(m_renderFn, s); - else - if (doForceUpdate && doIntersectInvalidRect) - m_RenderQueue->AddCommand(m_renderFn, s); - } - - SetForceUpdate(false); - - DrawerYG * pDrawer = e->drawer(); - - e->drawer()->beginFrame(); - - e->drawer()->screen()->clear(m_bgColor); - - m_RenderQueue->renderState().m_mutex->Lock(); - - SetOverlay(m_RenderQueue->renderState().m_currentOverlay); - - if (m_RenderQueue->renderState().m_actualTarget.get() != 0) - { - m2::PointD const ptShift = m_RenderQueue->renderState().coordSystemShift(false); - - math::Matrix m = m_RenderQueue->renderState().m_actualScreen.PtoGMatrix() * s.GtoPMatrix(); - m = math::Shift(m, -ptShift); - - // rounding shift to pixel boundary to remove "blitting blurriness". - m(2, 0) = floor(m(2, 0)); - m(2, 1) = floor(m(2, 1)); - - pDrawer->screen()->blit(m_RenderQueue->renderState().m_actualTarget, m); - } - - e->drawer()->endFrame(); -} - -void BasicRenderPolicy::StartDrag() -{ - m_DoAddCommand = false; - RenderPolicy::StartDrag(); -} - -void BasicRenderPolicy::StopDrag() -{ - m_DoAddCommand = true; - RenderPolicy::StopDrag(); -} - -void BasicRenderPolicy::StartScale() -{ - m_DoAddCommand = false; - RenderPolicy::StartScale(); -} - -void BasicRenderPolicy::StopScale() -{ - m_DoAddCommand = true; - RenderPolicy::StopScale(); -} - -bool BasicRenderPolicy::IsEmptyModel() const -{ - return m_RenderQueue->renderStatePtr()->m_isEmptyModelActual; -} - -string const BasicRenderPolicy::GetCountryName() const -{ - return m_RenderQueue->renderStatePtr()->m_countryNameActual; -} - -RenderQueue & BasicRenderPolicy::GetRenderQueue() -{ - return *m_RenderQueue.get(); -} - -bool BasicRenderPolicy::NeedRedraw() const -{ - if (RenderPolicy::NeedRedraw()) - return true; - - if (m_QueuedRenderer && m_QueuedRenderer->NeedRedraw()) - return true; - - return false; -} - -int BasicRenderPolicy::InsertBenchmarkFence() -{ - return m_RenderQueue->InsertBenchmarkFence(); -} - -void BasicRenderPolicy::JoinBenchmarkFence(int fenceID) -{ - m_RenderQueue->JoinBenchmarkFence(fenceID); -} diff --git a/map/basic_render_policy.hpp b/map/basic_render_policy.hpp deleted file mode 100644 index b215307195..0000000000 --- a/map/basic_render_policy.hpp +++ /dev/null @@ -1,56 +0,0 @@ -#pragma once - -#include "../std/shared_ptr.hpp" - -#include "render_policy.hpp" - -class QueuedRenderer; -class RenderQueue; - -/// This is a base class for both multithreaded and singlethreaded rendering policies -/// that uses a double buffering scheme. -/// primary OpenGL thread only blits frontBuffer(RenderState::actualTarget), -/// while another thread renders scene on the backBuffer and swaps it -/// with frontBuffer periodically -class BasicRenderPolicy : public RenderPolicy -{ -protected: - - shared_ptr m_QueuedRenderer; - shared_ptr m_RenderQueue; - - bool m_DoAddCommand; - -public: - - BasicRenderPolicy(Params const & p, - bool doSupportRotation, - size_t idCacheSize, - shared_ptr const & queuedRenderer = shared_ptr()); - - void BeginFrame(shared_ptr const & e, ScreenBase const & s); - void DrawFrame(shared_ptr const & e, ScreenBase const & s); - void EndFrame(shared_ptr const & e, ScreenBase const & s); - - m2::RectI const OnSize(int w, int h); - - void StartDrag(); - void StopDrag(); - - void StartScale(); - void StopScale(); - - bool IsEmptyModel() const; - string const GetCountryName() const; - - RenderQueue & GetRenderQueue(); - - void SetRenderFn(TRenderFn renderFn); - void SetCountryNameFn(TCountryNameFn countryNameFn); - - bool NeedRedraw() const; - - /// benchmarking protocol - int InsertBenchmarkFence(); - void JoinBenchmarkFence(int fenceID); -}; diff --git a/map/map.pro b/map/map.pro index 020cd39eae..4b686c79af 100644 --- a/map/map.pro +++ b/map/map.pro @@ -27,15 +27,11 @@ HEADERS += \ tiling_render_policy_mt.hpp \ tiling_render_policy_st.hpp \ benchmark_engine.hpp \ - render_policy_st.hpp \ coverage_generator.hpp \ tiler.hpp \ tile.hpp \ tile_cache.hpp \ screen_coverage.hpp \ - basic_render_policy.hpp \ - render_queue.hpp \ - render_queue_routine.hpp \ ruler.hpp \ measurement_utils.hpp \ simple_render_policy.hpp \ @@ -43,7 +39,6 @@ HEADERS += \ test_render_policy.hpp \ queued_renderer.hpp \ basic_tiling_render_policy.hpp \ - render_policy_mt.hpp \ bookmark.hpp \ tile_set.hpp \ geourl_process.hpp \ @@ -69,15 +64,11 @@ SOURCES += \ tiling_render_policy_st.cpp \ tiling_render_policy_mt.cpp \ benchmark_engine.cpp \ - render_policy_st.cpp \ coverage_generator.cpp \ tiler.cpp \ tile_cache.cpp \ tile.cpp \ screen_coverage.cpp \ - basic_render_policy.cpp \ - render_queue_routine.cpp \ - render_queue.cpp \ ruler.cpp \ measurement_utils.cpp \ window_handle.cpp \ @@ -87,7 +78,6 @@ SOURCES += \ queued_renderer.cpp \ events.cpp \ basic_tiling_render_policy.cpp \ - render_policy_mt.cpp \ address_finder.cpp \ tile_set.cpp \ geourl_process.cpp \ diff --git a/map/render_policy.cpp b/map/render_policy.cpp index b7b503ab17..901493d805 100644 --- a/map/render_policy.cpp +++ b/map/render_policy.cpp @@ -3,10 +3,7 @@ #include "render_policy.hpp" #include "window_handle.hpp" #include "test_render_policy.hpp" -#include "basic_render_policy.hpp" #include "simple_render_policy.hpp" -#include "render_policy_st.hpp" -#include "render_policy_mt.hpp" #include "tiling_render_policy_st.hpp" #include "tiling_render_policy_mt.hpp" diff --git a/map/render_policy_mt.cpp b/map/render_policy_mt.cpp deleted file mode 100644 index 1dfc033df0..0000000000 --- a/map/render_policy_mt.cpp +++ /dev/null @@ -1,149 +0,0 @@ -#include "render_policy_mt.hpp" - -#include "../yg/internal/opengl.hpp" -#include "../yg/skin.hpp" - -#include "../platform/platform.hpp" - -#include "window_handle.hpp" -#include "render_queue.hpp" - -RenderPolicyMT::RenderPolicyMT(RenderPolicy::Params const & p) - : BasicRenderPolicy(p, false, 1) -{ - yg::ResourceManager::Params rmp = p.m_rmParams; - - rmp.checkDeviceCaps(); - - rmp.m_primaryStoragesParams = yg::ResourceManager::StoragePoolParams(5000 * sizeof(yg::gl::Vertex), - sizeof(yg::gl::Vertex), - 10000 * sizeof(unsigned short), - sizeof(unsigned short), - 1, - true, - true, - 10, - "primaryStorage", - false, - true); - - rmp.m_smallStoragesParams = yg::ResourceManager::StoragePoolParams(500 * sizeof(yg::gl::Vertex), - sizeof(yg::gl::Vertex), - 1000 * sizeof(unsigned short), - sizeof(unsigned short), - 5, - true, - true, - 5, - "smallStorage", - false, - true); - - rmp.m_blitStoragesParams = yg::ResourceManager::StoragePoolParams(10 * sizeof(yg::gl::Vertex), - sizeof(yg::gl::Vertex), - 10 * sizeof(unsigned short), - sizeof(unsigned short), - 1, - true, - true, - 1, - "blitStorage", - false, - true); - - rmp.m_guiThreadStoragesParams = yg::ResourceManager::StoragePoolParams(300 * sizeof(yg::gl::Vertex), - sizeof(yg::gl::Vertex), - 600 * sizeof(unsigned short), - sizeof(unsigned short), - 2, - true, - true, - 1, - "guiThreadStorage", - false, - true); - - rmp.m_primaryTexturesParams = yg::ResourceManager::TexturePoolParams(512, - 256, - 1, - rmp.m_texFormat, - true, - true, - true, - 1, - "primaryTexture", - false, - true); - - rmp.m_fontTexturesParams = yg::ResourceManager::TexturePoolParams(512, - 256, - 1, - rmp.m_texFormat, - true, - true, - true, - 1, - "fontTexture", - false, - true); - - rmp.m_guiThreadTexturesParams = yg::ResourceManager::TexturePoolParams(256, - 128, - 2, - rmp.m_texFormat, - true, - true, - true, - 1, - "guiThreadTexture", - false, - true); - - rmp.m_glyphCacheParams = yg::ResourceManager::GlyphCacheParams("unicode_blocks.txt", - "fonts_whitelist.txt", - "fonts_blacklist.txt", - 2 * 1024 * 1024, - 3, - 1); - - rmp.m_useSingleThreadedOGL = false; - - rmp.fitIntoLimits(); - - m_resourceManager.reset(new yg::ResourceManager(rmp)); - - Platform::FilesList fonts; - GetPlatform().GetFontNames(fonts); - m_resourceManager->addFonts(fonts); - - 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_visualScale = VisualScale(); - dp.m_isSynchronized = false; - dp.m_useGuiResources = true; - dp.m_fastSolidPath = true; - - m_drawer.reset(new DrawerYG(dp)); - - 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); - - m_RenderQueue.reset(new RenderQueue(SkinName(), - false, - true, - 0.1, - false, - ScaleEtalonSize(), - VisualScale(), - m_bgColor)); - - m_RenderQueue->AddWindowHandle(m_windowHandle); -} diff --git a/map/render_policy_mt.hpp b/map/render_policy_mt.hpp deleted file mode 100644 index 8efc25f69e..0000000000 --- a/map/render_policy_mt.hpp +++ /dev/null @@ -1,9 +0,0 @@ -#pragma once - -#include "basic_render_policy.hpp" - -class RenderPolicyMT : public BasicRenderPolicy -{ -public: - RenderPolicyMT(Params const & p); -}; diff --git a/map/render_policy_st.cpp b/map/render_policy_st.cpp deleted file mode 100644 index 2480dbc70e..0000000000 --- a/map/render_policy_st.cpp +++ /dev/null @@ -1,169 +0,0 @@ -#include "render_policy_st.hpp" - -#include "../platform/platform.hpp" - -#include "../yg/internal/opengl.hpp" -#include "../yg/skin.hpp" - -#include "queued_renderer.hpp" -#include "window_handle.hpp" -#include "render_queue.hpp" - -RenderPolicyST::RenderPolicyST(Params const & p) - : BasicRenderPolicy(p, false, 1, make_shared_ptr(new QueuedRenderer(1))) -{ - yg::ResourceManager::Params rmp = p.m_rmParams; - - rmp.checkDeviceCaps(); - - rmp.m_primaryStoragesParams = yg::ResourceManager::StoragePoolParams(5000 * sizeof(yg::gl::Vertex), - sizeof(yg::gl::Vertex), - 10000 * sizeof(unsigned short), - sizeof(unsigned short), - 4, - true, - false, - 2, - "primaryStorage", - false, - false); - - rmp.m_smallStoragesParams = yg::ResourceManager::StoragePoolParams(2000 * sizeof(yg::gl::Vertex), - sizeof(yg::gl::Vertex), - 4000 * sizeof(unsigned short), - sizeof(unsigned short), - 4, - true, - false, - 1, - "smallStorage", - false, - false); - - rmp.m_blitStoragesParams = yg::ResourceManager::StoragePoolParams(10 * sizeof(yg::gl::Vertex), - sizeof(yg::gl::Vertex), - 10 * sizeof(unsigned short), - sizeof(unsigned short), - 50, - true, - true, - 1, - "blitStorage", - false, - false); - - rmp.m_guiThreadStoragesParams = yg::ResourceManager::StoragePoolParams(300 * sizeof(yg::gl::Vertex), - sizeof(yg::gl::Vertex), - 600 * sizeof(unsigned short), - sizeof(unsigned short), - 20, - true, - true, - 1, - "guiThreadStorage", - false, - false); - - rmp.m_primaryTexturesParams = yg::ResourceManager::TexturePoolParams(512, - 256, - 6, - rmp.m_texFormat, - true, - true, - true, - 1, - "primaryTexture", - false, - false); - - rmp.m_fontTexturesParams = yg::ResourceManager::TexturePoolParams(512, - 256, - 6, - rmp.m_texFormat, - true, - true, - true, - 1, - "fontTextures", - false, - false); - - rmp.m_guiThreadTexturesParams = yg::ResourceManager::TexturePoolParams(256, - 128, - 4, - rmp.m_texFormat, - true, - true, - true, - 1, - "guiThreadTexture", - false, - false); - - rmp.m_glyphCacheParams = yg::ResourceManager::GlyphCacheParams("unicode_blocks.txt", - "fonts_whitelist.txt", - "fonts_blacklist.txt", - 2 * 1024 * 1024, - 2, - 1); - - rmp.m_useSingleThreadedOGL = true; - - rmp.fitIntoLimits(); - - m_resourceManager.reset(new yg::ResourceManager(rmp)); - m_QueuedRenderer->SetSinglePipelineProcessing(m_resourceManager->useReadPixelsToSynchronize()); - - Platform::FilesList fonts; - GetPlatform().GetFontNames(fonts); - m_resourceManager->addFonts(fonts); - - 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_visualScale = VisualScale(); - dp.m_isSynchronized = false; - dp.m_useGuiResources = true; - dp.m_fastSolidPath = false; - - m_drawer.reset(); - m_drawer.reset(new DrawerYG(dp)); - - m_windowHandle.reset(); - 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); - - m_RenderQueue.reset(); - m_RenderQueue.reset(new RenderQueue(SkinName(), - false, - false, - 0.1, - false, - ScaleEtalonSize(), - VisualScale(), - m_bgColor)); - - m_RenderQueue->AddWindowHandle(m_windowHandle); - - m_RenderQueue->SetGLQueue(m_QueuedRenderer->GetPacketsQueue(0)); -} - -RenderPolicyST::~RenderPolicyST() -{ - LOG(LINFO, ("destroying RenderPolicyST")); - - m_QueuedRenderer->CancelQueuedCommands(0); - - LOG(LINFO, ("shutting down renderQueue")); - - m_RenderQueue.reset(); - - LOG(LINFO, ("PartialRenderPolicy destroyed")); -} diff --git a/map/render_policy_st.hpp b/map/render_policy_st.hpp deleted file mode 100644 index eb2d13e829..0000000000 --- a/map/render_policy_st.hpp +++ /dev/null @@ -1,11 +0,0 @@ -#pragma once - -#include "basic_render_policy.hpp" - -class RenderPolicyST : public BasicRenderPolicy -{ -public: - RenderPolicyST(Params const & p); - - ~RenderPolicyST(); -}; diff --git a/map/render_queue.cpp b/map/render_queue.cpp deleted file mode 100644 index af8b5e4e0b..0000000000 --- a/map/render_queue.cpp +++ /dev/null @@ -1,147 +0,0 @@ -#include "../base/SRC_FIRST.hpp" - -#include "render_queue.hpp" - -#include "../yg/render_state.hpp" -#include "../yg/rendercontext.hpp" - -RenderQueue::RenderQueue( - string const & skinName, - bool isMultiSampled, - bool doPeriodicalUpdate, - double updateInterval, - bool isBenchmarking, - unsigned scaleEtalonSize, - double visualScale, - yg::Color const & bgColor - ) - : m_renderState(new yg::gl::RenderState()), - m_hasPendingResize(false) -{ - m_renderState->m_surfaceWidth = 100; - m_renderState->m_surfaceHeight = 100; - m_renderState->m_textureWidth = 256; - m_renderState->m_textureHeight = 256; - m_renderState->m_duration = 0; - m_renderState->m_isEmptyModelCurrent = false; - m_renderState->m_isEmptyModelActual = false; - - m_routine = new RenderQueueRoutine( - m_renderState, - skinName, - isMultiSampled, - doPeriodicalUpdate, - updateInterval, - isBenchmarking, - scaleEtalonSize, - visualScale, - bgColor); -} - -void RenderQueue::initializeGL(shared_ptr const & primaryContext, - shared_ptr const & resourceManager) -{ - m_resourceManager = resourceManager; - m_routine->initializeGL(primaryContext->createShared(), - m_resourceManager); - - if (m_hasPendingResize) - { - m_routine->onSize(m_savedWidth, m_savedHeight); - m_hasPendingResize = false; - } - m_renderQueueThread.Create(m_routine); - -} - -RenderQueue::~RenderQueue() -{ - m_renderQueueThread.Cancel(); - delete m_routine; -} - -void RenderQueue::AddCommand(RenderQueueRoutine::render_fn_t const & fn, ScreenBase const & frameScreen) -{ - m_routine->addCommand(fn, frameScreen); -} - -void RenderQueue::SetRedrawAll() -{ - m_renderState->m_doRepaintAll = true; -} - -void RenderQueue::SetCountryNameFn(RenderQueueRoutine::TCountryNameFn fn) -{ - m_routine->SetCountryNameFn(fn); -} - -void RenderQueue::AddWindowHandle(shared_ptr const & windowHandle) -{ - m_routine->addWindowHandle(windowHandle); -} - -void RenderQueue::OnSize(size_t w, size_t h) -{ - m_renderState->onSize(w, h); - if (!m_resourceManager) - { - m_hasPendingResize = true; - m_savedWidth = w; - m_savedHeight = h; - } - else - m_routine->onSize(w, h); -} - -yg::gl::RenderState const RenderQueue::CopyState() const -{ - yg::gl::RenderState state; - m_renderState->copyTo(state); - return state; -} - -yg::gl::RenderState const & RenderQueue::renderState() const -{ - return *m_renderState.get(); -} - -shared_ptr const & RenderQueue::renderStatePtr() const -{ - return m_renderState; -} - -void RenderQueue::memoryWarning() -{ - m_routine->memoryWarning(); -} - -void RenderQueue::enterBackground() -{ - m_routine->enterBackground(); -} - -void RenderQueue::enterForeground() -{ - m_routine->enterForeground(); -} - -void RenderQueue::WaitForEmptyAndFinished() -{ - m_routine->waitForEmptyAndFinished(); -} - -void RenderQueue::SetGLQueue(yg::gl::PacketsQueue * glQueue) -{ - m_routine->setGLQueue(glQueue); -} - -int RenderQueue::InsertBenchmarkFence() -{ - return m_routine->insertBenchmarkFence(); -} - -void RenderQueue::JoinBenchmarkFence(int id) -{ - return m_routine->joinBenchmarkFence(id); -} - diff --git a/map/render_queue.hpp b/map/render_queue.hpp deleted file mode 100644 index c227f804cb..0000000000 --- a/map/render_queue.hpp +++ /dev/null @@ -1,86 +0,0 @@ -#pragma once - -#include "../base/thread.hpp" -#include "../base/threaded_list.hpp" -#include "../yg/renderer.hpp" -#include "../geometry/screenbase.hpp" -#include "../std/shared_ptr.hpp" -#include "render_queue_routine.hpp" - -namespace yg -{ - class ResourceManager; - namespace gl - { - class RenderState; - class RenderContext; - } -} - -class WindowHandle; - -class RenderQueue -{ -private: - - friend class RenderQueueRoutine; - - threads::Thread m_renderQueueThread; - - shared_ptr m_renderState; - shared_ptr m_resourceManager; - RenderQueueRoutine * m_routine; - bool m_hasPendingResize; - int m_savedWidth; - int m_savedHeight; - -public: - /// constructor. - RenderQueue(string const & skinName, - bool isMultiSampled, - bool doPeriodicalUpdate, - double updateInterval, - bool isBenchmarking, - unsigned scaleEtalonSize, - double visualScale, - yg::Color const & bgColor); - /// destructor. - ~RenderQueue(); - /// set the primary context. it starts the rendering thread. - void initializeGL(shared_ptr const & primaryContext, - shared_ptr const & resourceManager); - /// add command to the commands queue. - void AddCommand(RenderQueueRoutine::render_fn_t const & fn, ScreenBase const & frameScreen); - - void SetRedrawAll(); - - void SetCountryNameFn(RenderQueueRoutine::TCountryNameFn fn); - - void SetVisualScale(double visualScale); - - /// add window handle to notify when rendering operation finishes - void AddWindowHandle(shared_ptr const & windowHandle); - /// process resize request - void OnSize(size_t w, size_t h); - /// copy primary render state - yg::gl::RenderState const CopyState() const; - - shared_ptr const & renderStatePtr() const; - - yg::gl::RenderState const & renderState() const; - - /// free all possible memory caches - void memoryWarning(); - /// free all possible memory caches, opengl resources, - /// and make sure no opengl call will be made in background - void enterBackground(); - /// load all necessary memory caches and opengl resources. - void enterForeground(); - - void WaitForEmptyAndFinished(); - - void SetGLQueue(yg::gl::PacketsQueue * glQueue); - - int InsertBenchmarkFence(); - void JoinBenchmarkFence(int id); -}; diff --git a/map/render_queue_routine.cpp b/map/render_queue_routine.cpp deleted file mode 100644 index cef1f62d09..0000000000 --- a/map/render_queue_routine.cpp +++ /dev/null @@ -1,635 +0,0 @@ -#include "../base/SRC_FIRST.hpp" -#include "../base/mutex.hpp" -#include "../base/timer.hpp" -#include "../base/logging.hpp" - -#include "../std/bind.hpp" - -#include "../yg/internal/opengl.hpp" -#include "../yg/render_state.hpp" -#include "../yg/rendercontext.hpp" -#include "../yg/framebuffer.hpp" -#include "../yg/renderbuffer.hpp" -#include "../yg/texture.hpp" -#include "../yg/resource_manager.hpp" -#include "../yg/screen.hpp" -#include "../yg/pen_info.hpp" -#include "../yg/skin.hpp" - -#include "../indexer/scales.hpp" - -#include "events.hpp" -#include "drawer_yg.hpp" -#include "window_handle.hpp" -#include "render_queue_routine.hpp" -RenderQueueRoutine::RenderModelCommand::RenderModelCommand(ScreenBase const & frameScreen, - render_fn_t renderFn) - : m_frameScreen(frameScreen), - m_renderFn(renderFn) -{} - -RenderQueueRoutine::RenderQueueRoutine(shared_ptr const & renderState, - string const & skinName, - bool isMultiSampled, - bool doPeriodicalUpdate, - double updateInterval, - bool isBenchmarking, - unsigned scaleEtalonSize, - double visualScale, - yg::Color const & bgColor) - : m_fenceManager(2) -{ - m_skinName = skinName; - m_visualScale = visualScale; - m_renderState = renderState; - m_renderState->addInvalidateFn(bind(&RenderQueueRoutine::invalidate, this)); - m_isMultiSampled = isMultiSampled; - m_doPeriodicalUpdate = doPeriodicalUpdate; - m_updateInterval = updateInterval; - m_isBenchmarking = isBenchmarking; - m_scaleEtalonSize = scaleEtalonSize; - m_bgColor = bgColor; - m_glQueue = 0; - m_currentFenceID = -1; -} - -void RenderQueueRoutine::Cancel() -{ - IRoutine::Cancel(); - - { - threads::ConditionGuard guard(m_hasRenderCommands); - - if (m_currentRenderCommand != 0) - { - LOG(LDEBUG, ("cancelling current renderCommand in progress")); - m_currentRenderCommand->m_paintEvent->cancel(); - } - - LOG(LDEBUG, ("waking up the sleeping thread...")); - - m_hasRenderCommands.Signal(); - } -} - -void RenderQueueRoutine::onSize(int w, int h) -{ - size_t texW = m_renderState->m_textureWidth; - size_t texH = m_renderState->m_textureHeight; - - m_newDepthBuffer.reset(); - m_newDepthBuffer.reset(new yg::gl::RenderBuffer(texW, texH, true)); - m_newActualTarget = m_resourceManager->createRenderTarget(texW, texH); - m_newBackBuffer = m_resourceManager->createRenderTarget(texW, texH); -} - -void RenderQueueRoutine::SetCountryNameFn(TCountryNameFn countryNameFn) -{ - m_countryNameFn = countryNameFn; -} - -void RenderQueueRoutine::processResize(ScreenBase const & frameScreen) -{ - if (m_renderState->m_isResized) - { - size_t texW = m_renderState->m_textureWidth; - size_t texH = m_renderState->m_textureHeight; - - m_threadDrawer->onSize(texW, texH); - - m_renderState->m_depthBuffer = m_newDepthBuffer; - m_threadDrawer->screen()->setDepthBuffer(m_renderState->m_depthBuffer); - m_newDepthBuffer.reset(); - - shared_ptr oldActualTarget = m_renderState->m_actualTarget; - - m_renderState->m_actualTarget.reset(); - m_renderState->m_actualTarget = m_newActualTarget; - m_newActualTarget.reset(); - - m_auxScreen->onSize(texW, texH); - m_auxScreen->setRenderTarget(m_renderState->m_actualTarget); - m_auxScreen->beginFrame(); - m_auxScreen->clear(m_bgColor); - - if (oldActualTarget != 0) - { - m_auxScreen->blit(oldActualTarget, - m_renderState->m_actualScreen, - frameScreen); - oldActualTarget.reset(); - } - m_auxScreen->endFrame(); - - shared_ptr oldBackBuffer = m_renderState->m_backBuffer; - m_renderState->m_backBuffer.reset(); - m_renderState->m_backBuffer = m_newBackBuffer; - m_newBackBuffer.reset(); - m_auxScreen->setRenderTarget(m_renderState->m_backBuffer); - m_auxScreen->beginFrame(); - m_auxScreen->clear(m_bgColor); - - if (oldBackBuffer != 0) - { - m_auxScreen->blit(oldBackBuffer, - m_renderState->m_actualScreen, - frameScreen); - oldBackBuffer.reset(); - } - m_auxScreen->endFrame(); - - /// TODO : make as a command - m_renderState->m_actualScreen = frameScreen; - - m_renderState->m_isResized = false; - } -} - -bool RenderQueueRoutine::getUpdateAreas( - ScreenBase const & oldScreen, - m2::RectI const & oldRect, - ScreenBase const & newScreen, - m2::RectI const & newRect, - vector & areas) -{ - areas.clear(); - - if (IsPanningAndRotate(oldScreen, newScreen)) - { - m2::RectD o(newScreen.GtoP(oldScreen.PtoG(m2::PointD(oldRect.minX(), oldRect.minY()))), - newScreen.GtoP(oldScreen.PtoG(m2::PointD(oldRect.maxX(), oldRect.maxY())))); - m2::RectD n(newRect); - - /// checking two corner cases - if (o.IsRectInside(n)) - return false; - if (!o.IsIntersect(n)) - { - areas.push_back(newRect); - return true; - } - - double leftBarMinX = 0; - double leftBarMaxX = 0; - double rightBarMinX = n.maxX(); - double rightBarMaxX = n.maxX(); - double topBarMinY = 0; - double topBarMaxY = 0; - double bottomBarMinY = n.maxY(); - double bottomBarMaxY = n.maxY(); - - if (o.minX() > n.minX()) - leftBarMaxX = ceil(o.minX()); - if (o.maxX() < n.maxX()) - rightBarMinX = floor(o.maxX()); - if (o.minY() > n.minY()) - topBarMaxY = ceil(o.minY()); - if (o.maxY() < n.maxY()) - bottomBarMinY = floor(o.maxY()); - - if ((int)leftBarMinX != (int)leftBarMaxX) - areas.push_back(m2::RectI((int)leftBarMinX, (int)topBarMinY, (int)leftBarMaxX, (int)bottomBarMinY)); - if ((int)topBarMinY != (int)topBarMaxY) - areas.push_back(m2::RectI((int)leftBarMaxX, (int)topBarMinY, (int)rightBarMaxX, (int)topBarMaxY)); - if ((int)rightBarMinX != (int)rightBarMaxX) - areas.push_back(m2::RectI((int)rightBarMinX, (int)topBarMaxY, (int)rightBarMaxX, (int)bottomBarMaxY)); - if ((int)bottomBarMinY != (int)bottomBarMaxY) - areas.push_back(m2::RectI((int)leftBarMinX, (int)bottomBarMinY, (int)rightBarMinX, (int)bottomBarMaxY)); - - return false; - } - else - { - if (m_doPeriodicalUpdate) - areas.push_back(newRect); - else - { - int sx = ( newRect.SizeX() + 4 ) / 5; - int sy = ( newRect.SizeY() + 4 ) / 5; - m2::RectI r(0, 0, sx, sy); - - areas.push_back(m2::Offset(r, 2 * sx, 2 * sy)); - areas.push_back(m2::Offset(r, 2 * sx, 1 * sy)); - areas.push_back(m2::Offset(r, 3 * sx, 1 * sy)); - areas.push_back(m2::Offset(r, 3 * sx, 2 * sy)); - areas.push_back(m2::Offset(r, 3 * sx, 3 * sy)); - areas.push_back(m2::Offset(r, 2 * sx, 3 * sy)); - areas.push_back(m2::Offset(r, 1 * sx, 3 * sy)); - areas.push_back(m2::Offset(r, 1 * sx, 2 * sy)); - areas.push_back(m2::Offset(r, 1 * sx, 1 * sy)); - areas.push_back(m2::Offset(r, 1 * sx, 0 * sy)); - areas.push_back(m2::Offset(r, 1 * sx, 0 * sy)); - areas.push_back(m2::Offset(r, 2 * sx, 0 * sy)); - areas.push_back(m2::Offset(r, 3 * sx, 0 * sy)); - areas.push_back(m2::Offset(r, 4 * sx, 0 * sy)); - areas.push_back(m2::Offset(r, 4 * sx, 1 * sy)); - areas.push_back(m2::Offset(r, 4 * sx, 2 * sy)); - areas.push_back(m2::Offset(r, 4 * sx, 3 * sy)); - areas.push_back(m2::Offset(r, 4 * sx, 4 * sy)); - areas.push_back(m2::Offset(r, 3 * sx, 4 * sy)); - areas.push_back(m2::Offset(r, 2 * sx, 4 * sy)); - areas.push_back(m2::Offset(r, 1 * sx, 4 * sy)); - areas.push_back(m2::Offset(r, 0 * sx, 4 * sy)); - areas.push_back(m2::Offset(r, 0 * sx, 3 * sy)); - areas.push_back(m2::Offset(r, 0 * sx, 2 * sy)); - areas.push_back(m2::Offset(r, 0 * sx, 1 * sy)); - areas.push_back(m2::Offset(r, 0 * sx, 0 * sy)); - } - return true; - } -} - -void RenderQueueRoutine::setVisualScale(double visualScale) -{ - m_visualScale = visualScale; -} - -void RenderQueueRoutine::waitForRenderCommand(list > & cmdList, - threads::ConditionGuard & guard) -{ - while (cmdList.empty()) - { - guard.Wait(); - if (IsCancelled()) - break; - } -} - -void RenderQueueRoutine::Do() -{ - if (!m_glQueue) - m_renderContext->makeCurrent(); - - DrawerYG::Params params; - - params.m_resourceManager = m_resourceManager; - params.m_frameBuffer = m_frameBuffer; - params.m_renderState = m_renderState; - params.m_doPeriodicalUpdate = m_doPeriodicalUpdate; - params.m_auxFrameBuffer = m_auxFrameBuffer; - params.m_updateInterval = m_updateInterval; - params.m_skin = make_shared_ptr(yg::loadSkin(m_resourceManager, m_skinName)); - params.m_visualScale = m_visualScale; - params.m_threadID = 0; - params.m_glyphCacheID = m_resourceManager->renderThreadGlyphCacheID(0); - params.m_renderQueue = m_glQueue; -/* params.m_isDebugging = true; - params.m_drawPathes = false; - params.m_drawAreas = false; - params.m_drawTexts = false; - params.m_drawSymbols = false;*/ - - m_threadDrawer = make_shared_ptr(new DrawerYG(params)); - - yg::gl::Screen::Params auxParams; - auxParams.m_frameBuffer = m_auxFrameBuffer; - auxParams.m_resourceManager = m_resourceManager; - auxParams.m_renderQueue = m_glQueue; - - m_auxScreen = make_shared_ptr(new yg::gl::Screen(auxParams)); - - bool isPanning = false; - bool doRedrawAll = false; - bool fullRectRepaint = false; - /// update areas in pixel coordinates. - vector areas; - - m2::RectI surfaceRect; - m2::RectI textureRect; - - shared_ptr overlay(new yg::Overlay()); - overlay->setCouldOverlap(false); - m_threadDrawer->screen()->setOverlay(overlay); - m_renderState->m_currentOverlay = overlay; - - while (!IsCancelled()) - { - { - threads::ConditionGuard guard(m_hasRenderCommands); - - waitForRenderCommand(m_renderCommands, guard); - - if (IsCancelled()) - { - LOG(LDEBUG, ("thread is cancelled while waiting for a render command")); - break; - } - - m_currentRenderCommand = m_renderCommands.front(); - m_renderCommands.erase(m_renderCommands.begin()); - - m_currentRenderCommand->m_paintEvent = make_shared_ptr(new PaintEvent(m_threadDrawer.get())); - - /// this prevents the framework from flooding us with a bunch of RenderCommands with the same screen. - { - threads::MutexGuard guard(*m_renderState->m_mutex.get()); - - m_renderState->m_currentScreen = m_currentRenderCommand->m_frameScreen; - - m2::RectI prevRect(0, 0, 0, 0); - ScreenBase prevScreen = m_renderState->m_actualScreen; - - if (m_renderState->m_actualTarget != 0) - prevRect = m2::RectI(0, 0, - m_renderState->m_actualTarget->width(), - m_renderState->m_actualTarget->height()); - - processResize(m_currentRenderCommand->m_frameScreen); - - /// saving parameters, which might be changed from the GUI thread for later use. - surfaceRect = m2::RectI(0, 0, m_renderState->m_surfaceWidth, m_renderState->m_surfaceHeight); - textureRect = m2::RectI(0, 0, m_renderState->m_textureWidth, m_renderState->m_textureHeight); - - m2::RectI curRect = textureRect; - - doRedrawAll = m_renderState->m_doRepaintAll; - - fullRectRepaint = false; - - if (m_renderState->m_doRepaintAll) - { - areas.clear(); - areas.push_back(curRect); - fullRectRepaint = true; - m_threadDrawer->screen()->overlay()->clear(); - m_renderState->m_doRepaintAll = false; - } - else - { - fullRectRepaint = getUpdateAreas(prevScreen, - prevRect, - m_currentRenderCommand->m_frameScreen, - curRect, - areas); -/* if ((areas.size() == 1) && (areas[0] == curRect)) - fullRectRepaint = true;*/ - } - - isPanning = IsPanningAndRotate(prevScreen, m_renderState->m_currentScreen); - - if (isPanning) - { - math::Matrix offsetM = prevScreen.PtoGMatrix() * m_renderState->m_currentScreen.GtoPMatrix(); - m2::RectD oldRect = m2::RectD(m2::PointD(prevRect.minX(), prevRect.minY()) * offsetM, - m2::PointD(prevRect.maxX(), prevRect.maxY()) * offsetM); - m2::RectD redrawTextRect(curRect); - - if (!redrawTextRect.Intersect(oldRect)) - redrawTextRect = m2::RectD(0, 0, 0, 0); - - m_threadDrawer->screen()->overlay()->offset( - m2::PointD(0, 0) * offsetM, - redrawTextRect - ); - } - else - { - m_threadDrawer->screen()->overlay()->clear(); - m_renderState->m_isEmptyModelCurrent = true; - } - } - } - - my::Timer timer; - - /// At this point renderQueue->mutex is released to allow - /// main thread to add new rendering tasks and blit already - /// rendered model while the current command is actually rendering. - - if (IsCancelled()) - { - LOG(LDEBUG, ("cancelled before processing currentRenderCommand")); - } - else if (m_currentRenderCommand != 0) - { - /// this fixes some strange issue with multisampled framebuffer. - /// setRenderTarget should be made here. - m_threadDrawer->screen()->setRenderTarget(m_renderState->m_backBuffer); - - m_threadDrawer->beginFrame(); - - m_threadDrawer->screen()->enableClipRect(true); - m_threadDrawer->screen()->setClipRect(textureRect); - m_threadDrawer->clear(m_bgColor); - - if ((isPanning) && (!doRedrawAll)) - { - m_threadDrawer->screen()->blit( - m_renderState->m_actualTarget, - m_renderState->m_actualScreen, - m_renderState->m_currentScreen); - } - - m_threadDrawer->endFrame(); - - //m_threadDrawer->screen()->setNeedTextRedraw(isPanning); - - ScreenBase const & frameScreen = m_currentRenderCommand->m_frameScreen; - m2::RectD glbRect; - frameScreen.PtoG(m2::RectD(m2::RectD(textureRect).Center() - m2::PointD(m_scaleEtalonSize / 2, m_scaleEtalonSize / 2), - m2::RectD(textureRect).Center() + m2::PointD(m_scaleEtalonSize / 2, m_scaleEtalonSize / 2)), - glbRect); -// frameScreen.PtoG(m2::RectD(surfaceRect), glbRect); - int scaleLevel = scales::GetScaleLevel(glbRect); - - bool cumulativeEmptyModelCurrent = true; - - for (size_t i = 0; i < areas.size(); ++i) - { - if ((areas[i].SizeX() != 0) && (areas[i].SizeY() != 0)) - { - frameScreen.PtoG(m2::Inflate(m2::RectD(areas[i]), 30 * m_visualScale, 30 * m_visualScale), glbRect); - if ((glbRect.SizeX() == 0) || (glbRect.SizeY() == 0)) - continue; - - m_threadDrawer->screen()->setClipRect(areas[i]); - m_threadDrawer->screen()->enableClipRect(true); - m_threadDrawer->screen()->beginFrame(); - - m_currentRenderCommand->m_renderFn( - m_currentRenderCommand->m_paintEvent, - m_currentRenderCommand->m_frameScreen, - glbRect, - glbRect, - scaleLevel, - false); - - /// all unprocessed commands should be cancelled - if (m_currentRenderCommand->m_paintEvent->isCancelled() && m_glQueue) - m_glQueue->cancelCommands(); - - if (!m_renderState->m_isEmptyModelCurrent) - cumulativeEmptyModelCurrent = m_renderState->m_isEmptyModelCurrent; - - m_threadDrawer->screen()->endFrame(); - - if (IsCancelled()) - break; - } - } - - if (IsCancelled()) - break; - - /// if something were actually drawn, or (exclusive or) we are repainting the whole rect - if (!cumulativeEmptyModelCurrent || fullRectRepaint) - { - m2::PointD centerPt = m_currentRenderCommand->m_frameScreen.GlobalRect().GetGlobalRect().Center(); - string countryName = m_countryNameFn(centerPt); - m_renderState->m_countryNameActual = countryName; - m_renderState->m_isEmptyModelActual = cumulativeEmptyModelCurrent && !countryName.empty(); - } - - /// setting the "whole texture" clip rect to render texts opened by panning. - m_threadDrawer->screen()->setClipRect(textureRect); - - m_threadDrawer->beginFrame(); - - m_threadDrawer->screen()->overlay()->draw(m_threadDrawer->screen().get(), math::Identity()); - - m_threadDrawer->endFrame(); - } - - double duration = timer.ElapsedSeconds(); - - if (!IsCancelled()) - { - { - threads::ConditionGuard g1(m_hasRenderCommands); - - { - threads::MutexGuard g2(*m_renderState->m_mutex.get()); - m_renderState->m_duration = duration; - } - - m_currentRenderCommand.reset(); - - if (m_renderCommands.empty()) - g1.Signal(); - } - - invalidate(); - - signalBenchmarkFence(); - } - } - - // By VNG: We can't destroy render context in drawing thread. - // Notify render context instead. - if (!m_glQueue) - m_renderContext->endThreadDrawing(); -} - -void RenderQueueRoutine::addWindowHandle(shared_ptr window) -{ - m_windowHandles.push_back(window); -} - -void RenderQueueRoutine::Invalidate::perform() -{ - if (isDebugging()) - LOG(LDEBUG, ("performing Invalidate command")); - for_each(m_windowHandles.begin(), - m_windowHandles.end(), - bind(&WindowHandle::invalidate, _1)); -} - -void RenderQueueRoutine::Invalidate::cancel() -{ - perform(); -} - -void RenderQueueRoutine::invalidate() -{ - for_each(m_windowHandles.begin(), - m_windowHandles.end(), - bind(&WindowHandle::invalidate, _1)); - - if (m_glQueue) - { - shared_ptr command(new Invalidate()); - command->m_windowHandles = m_windowHandles; - m_glQueue->processPacket(yg::gl::Packet(command, yg::gl::Packet::EFramePoint)); - } -} - -void RenderQueueRoutine::addCommand(render_fn_t const & fn, ScreenBase const & frameScreen) -{ - /// Command queue modification is syncronized by mutex - threads::ConditionGuard guard(m_hasRenderCommands); - - bool needToSignal = m_renderCommands.empty(); - - /// Clearing a list of commands. - m_renderCommands.clear(); - - /// pushing back new RenderCommand. - m_renderCommands.push_back(make_shared_ptr(new RenderModelCommand(frameScreen, fn))); - - /// if we are in benchmarking mode, we shouldn't cancel any render command - /// else, if we are not panning, we should cancel the render command in progress to start a new one - if ((m_currentRenderCommand != 0) - && (!IsPanningAndRotate(m_currentRenderCommand->m_frameScreen, frameScreen))) - m_currentRenderCommand->m_paintEvent->cancel(); - - if (needToSignal) - guard.Signal(); -} - -void RenderQueueRoutine::initializeGL(shared_ptr const & renderContext, - shared_ptr const & resourceManager) -{ - m_frameBuffer.reset(); - m_frameBuffer.reset(new yg::gl::FrameBuffer()); - m_auxFrameBuffer.reset(); - m_auxFrameBuffer.reset(new yg::gl::FrameBuffer()); - m_renderContext = renderContext; - m_resourceManager = resourceManager; -} - -void RenderQueueRoutine::memoryWarning() -{ - m_threadDrawer->screen()->memoryWarning(); -} - -void RenderQueueRoutine::enterBackground() -{ - m_threadDrawer->screen()->enterBackground(); -} - -void RenderQueueRoutine::enterForeground() -{ - m_threadDrawer->screen()->enterForeground(); -} - -void RenderQueueRoutine::waitForEmptyAndFinished() -{ - /// Command queue modification is syncronized by mutex - threads::ConditionGuard guard(m_hasRenderCommands); - - if (!m_renderCommands.empty() || (m_currentRenderCommand != 0)) - guard.Wait(); -} - -void RenderQueueRoutine::setGLQueue(yg::gl::PacketsQueue * glQueue) -{ - m_glQueue = glQueue; -} - -int RenderQueueRoutine::insertBenchmarkFence() -{ - m_currentFenceID = m_fenceManager.insertFence(); - return m_currentFenceID; -} - -void RenderQueueRoutine::joinBenchmarkFence(int id) -{ - CHECK(m_currentFenceID == id, ()); - m_fenceManager.joinFence(id); -} - -void RenderQueueRoutine::signalBenchmarkFence() -{ - if (m_currentFenceID != -1) - m_fenceManager.signalFence(m_currentFenceID); -} diff --git a/map/render_queue_routine.hpp b/map/render_queue_routine.hpp deleted file mode 100644 index 31d97cd9e0..0000000000 --- a/map/render_queue_routine.hpp +++ /dev/null @@ -1,156 +0,0 @@ -#pragma once - -#include "../base/thread.hpp" -#include "../base/condition.hpp" -#include "../base/commands_queue.hpp" -#include "../base/fence_manager.hpp" -#include "../geometry/rect2d.hpp" -#include "../geometry/screenbase.hpp" -#include "../std/list.hpp" -#include "../std/function.hpp" -#include "../yg/color.hpp" - -class DrawerYG; - -namespace threads -{ - class Condition; -} - -class PaintEvent; -class WindowHandle; - -namespace yg -{ - class ResourceManager; - - namespace gl - { - class RenderContext; - class FrameBuffer; - class RenderBuffer; - class BaseTexture; - class RenderState; - class Screen; - class PacketsQueue; - } -} - -class RenderQueueRoutine : public threads::IRoutine -{ -public: - - typedef function, ScreenBase const &, m2::RectD const &, m2::RectD const &, int, bool)> render_fn_t; - typedef function TCountryNameFn; - -private: - - struct RenderModelCommand - { - ScreenBase m_frameScreen; - shared_ptr m_paintEvent; - render_fn_t m_renderFn; - RenderModelCommand(ScreenBase const & frameScreen, - render_fn_t renderFn); - }; - - struct Invalidate : public yg::gl::Command - { - list > m_windowHandles; - void perform(); - void cancel(); - }; - - shared_ptr m_renderContext; - shared_ptr m_frameBuffer; - shared_ptr m_auxFrameBuffer; - shared_ptr m_threadDrawer; - shared_ptr m_auxScreen; - - shared_ptr m_newDepthBuffer; - shared_ptr m_newActualTarget; - shared_ptr m_newBackBuffer; - - threads::Condition m_hasRenderCommands; - threads::Condition * m_glCondition; - - shared_ptr m_currentRenderCommand; - list > m_renderCommands; - list > m_benchmarkRenderCommands; - - shared_ptr m_renderState; - - shared_ptr m_resourceManager; - - /// A list of window handles to notify about ending rendering operations. - list > m_windowHandles; - - FenceManager m_fenceManager; - int m_currentFenceID; - - bool m_isMultiSampled; - bool m_doPeriodicalUpdate; - double m_updateInterval; - double m_visualScale; - string m_skinName; - bool m_isBenchmarking; - unsigned m_scaleEtalonSize; - yg::Color m_bgColor; - yg::gl::PacketsQueue * m_glQueue; - - TCountryNameFn m_countryNameFn; - - void waitForRenderCommand(list > & cmdList, - threads::ConditionGuard & guard); - -public: - RenderQueueRoutine(shared_ptr const & renderState, - string const & skinName, - bool isMultiSampled, - bool doPeriodicalUpdate, - double updateInterval, - bool isBenchmarking, - unsigned scaleEtalonSize, - double visualScale, - yg::Color const & bgColor); - /// initialize GL rendering - /// this function is called just before the thread starts. - void initializeGL(shared_ptr const & renderContext, - shared_ptr const & resourceManager); - /// This function should always be called from the main thread. - void Cancel(); - - void onSize(int w, int h); - - void SetCountryNameFn(TCountryNameFn countryNameFn); - - /// Check, whether the resize command is queued, and resize accordingly. - void processResize(ScreenBase const & frameScreen); - /// Get update areas for the current render state - bool getUpdateAreas(ScreenBase const & oldScreen, m2::RectI const & oldRect, - ScreenBase const & newScreen, m2::RectI const & newRect, - vector & areas); - /// Thread procedure - void Do(); - /// invalidate all connected window handles - void invalidate(); - /// add monitoring window - void addWindowHandle(shared_ptr window); - /// add model rendering command to rendering queue - void addCommand(render_fn_t const & fn, ScreenBase const & frameScreen); - /// set the resolution scale factor to the main thread drawer; - void setVisualScale(double visualScale); - /// free all available memory - void memoryWarning(); - /// free all easily recreatable opengl resources and make sure that no opengl call will be made. - void enterBackground(); - /// recreate all necessary opengl resources and prepare to run in foreground. - void enterForeground(); - /// wait for all commands are processed. - void waitForEmptyAndFinished(); - void setGLQueue(yg::gl::PacketsQueue * glQueue); - - int insertBenchmarkFence(); - void signalBenchmarkFence(); - void joinBenchmarkFence(int id); -}; diff --git a/yg/blitter.cpp b/yg/blitter.cpp index b67f1e3e09..e2a8408701 100644 --- a/yg/blitter.cpp +++ b/yg/blitter.cpp @@ -329,12 +329,7 @@ namespace yg Vertex::setupLayout(blitStorage.m_vertices->glPtr()); if (m_texture) - { -#ifndef USING_GLSL - OGLCHECK(glEnable(GL_TEXTURE_2D)); -#endif m_texture->makeCurrent(); - } unsigned short idxData[4] = {0, 1, 2, 3}; memcpy(blitStorage.m_indices->data(), idxData, sizeof(idxData)); diff --git a/yg/geometry_renderer.cpp b/yg/geometry_renderer.cpp index ef1f661461..41e5962bf3 100644 --- a/yg/geometry_renderer.cpp +++ b/yg/geometry_renderer.cpp @@ -364,10 +364,6 @@ namespace yg OGLCHECK(glActiveTexture(GL_TEXTURE0)); -#ifndef USING_GLSL - OGLCHECK(glEnableFn(GL_TEXTURE_2D)); -#endif - OGLCHECK(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)); OGLCHECK(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)); @@ -389,9 +385,6 @@ namespace yg OGLCHECK(glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)); -#ifndef USING_GLSL - OGLCHECK(glColor4f(1.0f, 1.0f, 1.0f, 1.0f)); -#endif } void GeometryRenderer::ApplyStates::cancel() @@ -415,10 +408,6 @@ namespace yg if (isDebugging()) LOG(LINFO, ("performing ApplyBlitStates command")); -#ifndef USING_GLSL - OGLCHECK(glEnable(GL_TEXTURE_2D)); -#endif - OGLCHECK(glDisableFn(GL_ALPHA_TEST_MWM)); OGLCHECK(glDisableFn(GL_BLEND)); OGLCHECK(glDisableFn(GL_DEPTH_TEST)); @@ -439,6 +428,5 @@ namespace yg else processCommand(command); } - } } diff --git a/yg/internal/opengl.hpp b/yg/internal/opengl.hpp index 293e1a16a0..bcb242e15c 100644 --- a/yg/internal/opengl.hpp +++ b/yg/internal/opengl.hpp @@ -4,9 +4,6 @@ #include "../../base/logging.hpp" -// This define is set in yg.pro -// #define USING_GLSL - #if defined(OMIM_OS_WINDOWS) #include "../../std/windows.hpp" #include @@ -22,15 +19,9 @@ #include #ifdef OMIM_OS_IPHONE - #ifdef USING_GLSL - #define USE_OPENGLES20_IF_AVAILABLE 1 - #include - #define OMIM_GL_ES - #else - #define USE_OPENGLES20_IF_AVAILABLE 0 - #include - #define OMIM_GL_ES - #endif + #define USE_OPENGLES20_IF_AVAILABLE 1 + #include + #define OMIM_GL_ES #else #include #include @@ -38,11 +29,7 @@ #elif defined(OMIM_OS_ANDROID) - #ifdef USING_GLSL - #include - #else - #include - #endif + #include #define OMIM_GL_ES diff --git a/yg/symbol_element.cpp b/yg/symbol_element.cpp index 078052a979..ff5fc05617 100644 --- a/yg/symbol_element.cpp +++ b/yg/symbol_element.cpp @@ -78,8 +78,6 @@ namespace yg m2::PointD posPt = tieRect(m2::RectD(texRect), m); -#ifdef USING_GLSL - posPt -= pivot(); r->drawStraightTexturedPolygon(pivot(), @@ -87,17 +85,6 @@ namespace yg posPt.x, posPt.y, posPt.x + texRect.SizeX(), posPt.y + texRect.SizeY(), yg::maxDepth - 2, style->m_pipelineID); - -#else - - r->drawTexturedPolygon(m2::PointD(0.0, 0.0), 0.0, - texRect.minX(), texRect.minY(), texRect.maxX(), texRect.maxY(), - posPt.x, posPt.y, posPt.x + texRect.SizeX(), posPt.y + texRect.SizeY(), - yg::maxDepth - 2, - style->m_pipelineID); - -#endif - } int SymbolElement::visualRank() const diff --git a/yg/text_element.cpp b/yg/text_element.cpp index f937ef240f..fa6beb9efa 100644 --- a/yg/text_element.cpp +++ b/yg/text_element.cpp @@ -114,7 +114,6 @@ namespace yg if (doTransformPivotOnly) { -#ifdef USING_GLSL m2::PointD offsPt = offs + elem.m_pt; m2::PointD fullPt = pv + offs + elem.m_pt; @@ -122,12 +121,6 @@ namespace yg offsPt.y -= fullPt.y - floor(fullPt.y); screen->drawStraightGlyph(pv, offsPt, glyphStyle, depth); -#else - glyphPt = pv + offs + elem.m_pt; - glyphAngle = elem.m_angle; - - screen->drawGlyph(glyphPt, m2::PointD(0.0, 0.0), glyphAngle, 0, glyphStyle, depth); -#endif } else { diff --git a/yg/yg.pro b/yg/yg.pro index 9983db69af..1922e86d8e 100644 --- a/yg/yg.pro +++ b/yg/yg.pro @@ -120,28 +120,16 @@ HEADERS += \ display_list.hpp \ data_traits.hpp -CONFIG += glsl - win32* { SOURCES += internal/opengl_win32.cpp } else: android*|iphone* { - CONFIG(glsl) { - DEFINES += USING_GLSL - HEADERS += internal/opengl_glsl_impl.hpp - SOURCES += internal/opengl_glsl_es2.cpp \ - internal/opengl_glsl_impl.cpp - } else { - SOURCES += internal/opengl_es.cpp - } + HEADERS += internal/opengl_glsl_impl.hpp + SOURCES += internal/opengl_glsl_es2.cpp \ + internal/opengl_glsl_impl.cpp } else { - CONFIG(glsl) { - DEFINES += USING_GLSL - HEADERS += internal/opengl_glsl_impl.hpp - SOURCES += internal/opengl_glsl_ext.cpp \ - internal/opengl_glsl_impl.cpp - } else { - SOURCES += internal/opengl_ext.cpp - } + HEADERS += internal/opengl_glsl_impl.hpp + SOURCES += internal/opengl_glsl_ext.cpp \ + internal/opengl_glsl_impl.cpp }