diff --git a/map/tile_renderer.cpp b/map/tile_renderer.cpp index 7f1cf7d8e9..4c0d5da6f3 100644 --- a/map/tile_renderer.cpp +++ b/map/tile_renderer.cpp @@ -23,7 +23,7 @@ TileRenderer::TileRenderer( shared_ptr const & primaryRC, shared_ptr const & rm, double visualScale, - yg::gl::PacketsQueue * packetsQueue + yg::gl::PacketsQueue ** packetsQueues ) : m_queue(executorsCount), m_tileCache(maxTilesCount - executorsCount - 1), m_renderFn(renderFn), @@ -54,7 +54,8 @@ TileRenderer::TileRenderer( params.m_threadID = i; params.m_visualScale = visualScale; params.m_skinName = m_skinName; - params.m_renderQueue = packetsQueue; + if (packetsQueues != 0) + params.m_renderQueue = packetsQueues[i]; params.m_doUnbindRT = true; params.m_isSynchronized = true; /* params.m_isDebugging = true; diff --git a/map/tile_renderer.hpp b/map/tile_renderer.hpp index abae9d4e46..5e1a8d7d6c 100644 --- a/map/tile_renderer.hpp +++ b/map/tile_renderer.hpp @@ -77,7 +77,7 @@ public: shared_ptr const & primaryRC, shared_ptr const & rm, double visualScale, - yg::gl::PacketsQueue * packetsQueue); + yg::gl::PacketsQueue ** packetsQueue); /// destructor. virtual ~TileRenderer(); /// add command to the commands queue. diff --git a/map/tiling_render_policy_mt.cpp b/map/tiling_render_policy_mt.cpp index 453ed1f912..845b31ca40 100644 --- a/map/tiling_render_policy_mt.cpp +++ b/map/tiling_render_policy_mt.cpp @@ -22,6 +22,16 @@ TilingRenderPolicyMT::TilingRenderPolicyMT(VideoTimer * videoTimer, { yg::ResourceManager::Params rmp = rmParams; + rmp.m_primaryTexturesParams = yg::ResourceManager::TexturePoolParams(512, + 256, + 10, + rmp.m_texFormat, + true, + true, + true, + 1, + "primaryTexture"); + rmp.m_primaryStoragesParams = yg::ResourceManager::StoragePoolParams(50000 * sizeof(yg::gl::Vertex), sizeof(yg::gl::Vertex), 100000 * sizeof(unsigned short), @@ -32,7 +42,6 @@ TilingRenderPolicyMT::TilingRenderPolicyMT(VideoTimer * videoTimer, 1, "primaryStorage"); - rmp.m_multiBlitStoragesParams = yg::ResourceManager::StoragePoolParams(500 * sizeof(yg::gl::Vertex), sizeof(yg::gl::Vertex), 500 * sizeof(unsigned short), @@ -43,36 +52,6 @@ TilingRenderPolicyMT::TilingRenderPolicyMT(VideoTimer * videoTimer, 1, "multiBlitStorage"); - rmp.m_guiThreadStoragesParams = yg::ResourceManager::StoragePoolParams(5000 * sizeof(yg::gl::Vertex), - sizeof(yg::gl::Vertex), - 10000 * sizeof(unsigned short), - sizeof(unsigned short), - 10, - true, - true, - 1, - "guiThreadStorage"); - - rmp.m_primaryTexturesParams = yg::ResourceManager::TexturePoolParams(512, - 256, - 10, - rmp.m_texFormat, - true, - true, - true, - 1, - "primaryTexture"); - - rmp.m_fontTexturesParams = yg::ResourceManager::TexturePoolParams(512, - 256, - 2, - rmp.m_texFormat, - true, - true, - true, - 1, - "fontTexture"); - rmp.m_renderTargetTexturesParams = yg::ResourceManager::TexturePoolParams(GetPlatform().TileSize(), GetPlatform().TileSize(), GetPlatform().MaxTilesCount(), @@ -83,8 +62,8 @@ TilingRenderPolicyMT::TilingRenderPolicyMT(VideoTimer * videoTimer, 5, "renderTargetTexture"); - rmp.m_styleCacheTexturesParams = yg::ResourceManager::TexturePoolParams(rmp.m_fontTexturesParams.m_texWidth, - rmp.m_fontTexturesParams.m_texHeight * 4, + rmp.m_styleCacheTexturesParams = yg::ResourceManager::TexturePoolParams(512, + 1024, 2, rmp.m_texFormat, true, @@ -93,6 +72,16 @@ TilingRenderPolicyMT::TilingRenderPolicyMT(VideoTimer * videoTimer, 1, "styleCacheTexture"); + rmp.m_guiThreadStoragesParams = yg::ResourceManager::StoragePoolParams(5000 * sizeof(yg::gl::Vertex), + sizeof(yg::gl::Vertex), + 10000 * sizeof(unsigned short), + sizeof(unsigned short), + 10, + true, + true, + 1, + "guiThreadStorage"); + rmp.m_guiThreadTexturesParams = yg::ResourceManager::TexturePoolParams(256, 128, 4, @@ -108,7 +97,8 @@ TilingRenderPolicyMT::TilingRenderPolicyMT(VideoTimer * videoTimer, "fonts_blacklist.txt", 2 * 1024 * 1024, GetPlatform().CpuCores() + 2, - GetPlatform().CpuCores()); + GetPlatform().CpuCores(), + false); rmp.m_useSingleThreadedOGL = false; rmp.m_useVA = !yg::gl::g_isBufferObjectsSupported; @@ -147,7 +137,7 @@ void TilingRenderPolicyMT::SetRenderFn(TRenderFn renderFn) m_tileRenderer.reset(new TileRenderer(GetPlatform().SkinName(), GetPlatform().MaxTilesCount(), - 1, //GetPlatform().CpuCores(), + GetPlatform().CpuCores(), m_bgColor, renderFn, m_primaryRC, diff --git a/map/tiling_render_policy_st.cpp b/map/tiling_render_policy_st.cpp index 687ba3e66f..f36e43c5c2 100644 --- a/map/tiling_render_policy_st.cpp +++ b/map/tiling_render_policy_st.cpp @@ -34,41 +34,32 @@ TilingRenderPolicyST::TilingRenderPolicyST(VideoTimer * videoTimer, bool useDefaultFB, yg::ResourceManager::Params const & rmParams, shared_ptr const & primaryRC) - : QueuedRenderPolicy(2, primaryRC, false) + : QueuedRenderPolicy(GetPlatform().CpuCores() + 1, primaryRC, false) { yg::ResourceManager::Params rmp = rmParams; + rmp.m_primaryTexturesParams = yg::ResourceManager::TexturePoolParams(512, + 256, + 4 * GetPlatform().CpuCores(), + rmp.m_texFormat, + true, + true, + true, + 1, + "primaryTexture", + true); + rmp.m_primaryStoragesParams = yg::ResourceManager::StoragePoolParams(5000 * sizeof(yg::gl::Vertex), sizeof(yg::gl::Vertex), 10000 * sizeof(unsigned short), sizeof(unsigned short), - 60, + 40 * GetPlatform().CpuCores(), + true, true, - false, 2, "primaryStorage", true); -/* rmp.m_smallStoragesParams = yg::ResourceManager::StoragePoolParams(2000 * sizeof(yg::gl::Vertex), - sizeof(yg::gl::Vertex), - 4000 * sizeof(unsigned short), - sizeof(unsigned short), - 100, - true, - false, - 1, - "smallStorage"); - - 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"); -*/ rmp.m_multiBlitStoragesParams = yg::ResourceManager::StoragePoolParams(1500 * sizeof(yg::gl::Vertex), sizeof(yg::gl::Vertex), 3000 * sizeof(unsigned short), @@ -79,36 +70,6 @@ TilingRenderPolicyST::TilingRenderPolicyST(VideoTimer * videoTimer, 1, "multiBlitStorage"); - rmp.m_guiThreadStoragesParams = yg::ResourceManager::StoragePoolParams(300 * sizeof(yg::gl::Vertex), - sizeof(yg::gl::Vertex), - 600 * sizeof(unsigned short), - sizeof(unsigned short), - 200, - true, - true, - 1, - "guiThreadStorage"); - - rmp.m_primaryTexturesParams = yg::ResourceManager::TexturePoolParams(512, - 256, - 10, - rmp.m_texFormat, - true, - true, - true, - 1, - "primaryTexture"); - - rmp.m_fontTexturesParams = yg::ResourceManager::TexturePoolParams(512, - 256, - 5, - rmp.m_texFormat, - true, - true, - true, - 1, - "fontTexture"); - rmp.m_renderTargetTexturesParams = yg::ResourceManager::TexturePoolParams(GetPlatform().TileSize(), GetPlatform().TileSize(), GetPlatform().MaxTilesCount(), @@ -119,8 +80,8 @@ TilingRenderPolicyST::TilingRenderPolicyST(VideoTimer * videoTimer, 4, "renderTargetTexture"); - rmp.m_styleCacheTexturesParams = yg::ResourceManager::TexturePoolParams(rmp.m_fontTexturesParams.m_texWidth * 2, - rmp.m_fontTexturesParams.m_texHeight * 2, + rmp.m_styleCacheTexturesParams = yg::ResourceManager::TexturePoolParams(1024, + 512, 2, rmp.m_texFormat, true, @@ -129,6 +90,17 @@ TilingRenderPolicyST::TilingRenderPolicyST(VideoTimer * videoTimer, 1, "styleCacheTexture"); + rmp.m_guiThreadStoragesParams = yg::ResourceManager::StoragePoolParams(2000 * sizeof(yg::gl::Vertex), + sizeof(yg::gl::Vertex), + 4000 * sizeof(unsigned short), + sizeof(unsigned short), + 20, + true, + true, + 1, + "guiThreadStorage", + true); + rmp.m_guiThreadTexturesParams = yg::ResourceManager::TexturePoolParams(256, 128, 4, @@ -144,7 +116,8 @@ TilingRenderPolicyST::TilingRenderPolicyST(VideoTimer * videoTimer, "fonts_blacklist.txt", 2 * 1024 * 1024, GetPlatform().CpuCores() + 2, - GetPlatform().CpuCores()); + GetPlatform().CpuCores(), + false); rmp.m_useSingleThreadedOGL = true; rmp.m_useVA = !yg::gl::g_isBufferObjectsSupported; @@ -190,12 +163,13 @@ TilingRenderPolicyST::~TilingRenderPolicyST() LOG(LINFO, ("deleting TilingRenderPolicyST")); - base_t::CancelQueuedCommands(1); + base_t::CancelQueuedCommands(GetPlatform().CpuCores()); LOG(LINFO, ("reseting coverageGenerator")); m_coverageGenerator.reset(); - base_t::CancelQueuedCommands(0); + for (unsigned i = 0; i < GetPlatform().CpuCores(); ++i) + base_t::CancelQueuedCommands(i); LOG(LINFO, ("reseting tileRenderer")); m_tileRenderer.reset(); @@ -205,15 +179,22 @@ void TilingRenderPolicyST::SetRenderFn(TRenderFn renderFn) { RenderPolicy::SetRenderFn(renderFn); + yg::gl::PacketsQueue ** queues = new yg::gl::PacketsQueue*[GetPlatform().CpuCores()]; + + for (unsigned i = 0; i < GetPlatform().CpuCores(); ++i) + queues[i] = base_t::GetPacketsQueue(i); + m_tileRenderer.reset(new TileRenderer(GetPlatform().SkinName(), m_maxTilesCount, - 1, //GetPlatform().CpuCores(), + GetPlatform().CpuCores(), m_bgColor, renderFn, m_primaryRC, m_resourceManager, GetPlatform().VisualScale(), - base_t::GetPacketsQueue(0))); + queues)); + + delete [] queues; m_coverageGenerator.reset(new CoverageGenerator(GetPlatform().TileSize(), GetPlatform().ScaleEtalonSize(), @@ -221,8 +202,10 @@ void TilingRenderPolicyST::SetRenderFn(TRenderFn renderFn) m_windowHandle, m_primaryRC, m_resourceManager, - base_t::GetPacketsQueue(1) + base_t::GetPacketsQueue(GetPlatform().CpuCores()) )); + + } void TilingRenderPolicyST::EndFrame(shared_ptr const & e, ScreenBase const & s) diff --git a/yg/blitter.cpp b/yg/blitter.cpp index 1ff118b56a..01dcb3538b 100644 --- a/yg/blitter.cpp +++ b/yg/blitter.cpp @@ -351,9 +351,6 @@ namespace yg OGLCHECK(glEnable(GL_BLEND)); OGLCHECK(glEnable(GL_ALPHA_TEST)); -// /// This call is necessary to avoid parasite blitting in updateActualTarget() on IPhone. -// OGLCHECK(glFinish()); - blitStorage.m_vertices->discard(); blitStorage.m_indices->discard();