From 6812b25242636132bb29ff6fc2143876faa98469 Mon Sep 17 00:00:00 2001 From: rachytski Date: Tue, 7 Feb 2012 17:49:04 +0400 Subject: [PATCH] should delete DrawerYG on OpenGL thread as there could be OpenGL calls. --- map/tile_renderer.cpp | 11 +++++++---- map/tile_renderer.hpp | 2 ++ 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/map/tile_renderer.cpp b/map/tile_renderer.cpp index bffb3ff21e..751e2fafcc 100644 --- a/map/tile_renderer.cpp +++ b/map/tile_renderer.cpp @@ -25,6 +25,7 @@ TileRenderer::TileRenderer( double visualScale, yg::gl::PacketsQueue ** packetsQueues ) : m_queue(executorsCount), + m_executorsCount(executorsCount), m_tileCache(maxTilesCount - executorsCount - 1), m_renderFn(renderFn), m_skinName(skinName), @@ -42,7 +43,7 @@ TileRenderer::TileRenderer( int tileWidth = m_resourceManager->params().m_renderTargetTexturesParams.m_texWidth; int tileHeight = m_resourceManager->params().m_renderTargetTexturesParams.m_texHeight; - for (unsigned i = 0; i < m_queue.ExecutorsCount(); ++i) + for (unsigned i = 0; i < m_executorsCount; ++i) { DrawerYG::params_t params; @@ -81,7 +82,12 @@ TileRenderer::TileRenderer( TileRenderer::~TileRenderer() { m_isExiting = true; + m_queue.Cancel(); + + for (size_t i = 0; i < m_executorsCount; ++i) + if (m_threadData[i].m_drawer) + delete m_threadData[i].m_drawer; } void TileRenderer::InitializeThreadGL(core::CommandsQueue::Environment const & env) @@ -102,9 +108,6 @@ void TileRenderer::FinalizeThreadGL(core::CommandsQueue::Environment const & env { ThreadData & threadData = m_threadData[env.threadNum()]; - - if (threadData.m_drawer != 0) - delete threadData.m_drawer; if (threadData.m_renderContext) threadData.m_renderContext->endThreadDrawing(); } diff --git a/map/tile_renderer.hpp b/map/tile_renderer.hpp index 265a712d37..5bbfd8ec09 100644 --- a/map/tile_renderer.hpp +++ b/map/tile_renderer.hpp @@ -34,6 +34,8 @@ protected: core::CommandsQueue m_queue; + size_t m_executorsCount; + shared_ptr m_resourceManager; struct ThreadData