From 55bb1c5475806b8e7bf4ea774c3b4d560a3a00c1 Mon Sep 17 00:00:00 2001 From: ExMix Date: Thu, 27 Nov 2014 17:58:07 +0300 Subject: [PATCH] [core] show new frame if it's ready. --- map/coverage_generator.cpp | 38 +++++++++++++++++++++++++++----------- map/coverage_generator.hpp | 2 ++ 2 files changed, 29 insertions(+), 11 deletions(-) diff --git a/map/coverage_generator.cpp b/map/coverage_generator.cpp index 6af7f1e7c5..3a8299f7b7 100644 --- a/map/coverage_generator.cpp +++ b/map/coverage_generator.cpp @@ -210,8 +210,12 @@ void CoverageGenerator::CoverScreenImpl(core::CommandsQueue::Environment const & bool const shouldSwap = !m_stateInfo.m_isPause && CacheCoverage(env); if (shouldSwap) { - threads::MutexGuard g(m_stateInfo.m_mutex); - swap(m_currentCoverage, m_backCoverage); + { + threads::MutexGuard g(m_stateInfo.m_mutex); + swap(m_currentCoverage, m_backCoverage); + } + + m_backCoverage->ResetDL(); } else { @@ -242,8 +246,11 @@ void CoverageGenerator::MergeTileImpl(core::CommandsQueue::Environment const & e bool const shouldSwap = !m_stateInfo.m_isPause && CacheCoverage(env); if (shouldSwap) { - threads::MutexGuard g(m_stateInfo.m_mutex); - swap(m_currentCoverage, m_backCoverage); + { + threads::MutexGuard g(m_stateInfo.m_mutex); + swap(m_currentCoverage, m_backCoverage); + } + m_backCoverage->ResetDL(); } m_benchmarkInfo.DecrementTileCount(sequenceID); @@ -472,8 +479,11 @@ namespace bool CoverageGenerator::CacheCoverage(core::CommandsQueue::Environment const & env) { - delete m_backCoverage->m_mainElements; - delete m_backCoverage->m_sharpElements; + if (m_cacheScreen->isCancelled()) + return false; + + ASSERT(m_backCoverage->m_mainElements == nullptr, ()); + ASSERT(m_backCoverage->m_sharpElements == nullptr, ()); m_backCoverage->m_mainElements = m_cacheScreen->createDisplayList(); m_backCoverage->m_sharpElements = m_cacheScreen->createDisplayList(); @@ -545,11 +555,9 @@ bool CoverageGenerator::CacheCoverage(core::CommandsQueue::Environment const & e m_cacheScreen->completeCommands(); - bool isCancelled = m_cacheScreen->isCancelled(); - m_cacheScreen->setEnvironment(0); - return !isCancelled; + return true; } void CoverageGenerator::ClearCoverage() @@ -684,8 +692,8 @@ CoverageGenerator::CoverageInfo::~CoverageInfo() } CoverageGenerator::CachedCoverageInfo::CachedCoverageInfo() - : m_mainElements(NULL) - , m_sharpElements(NULL) + : m_mainElements(nullptr) + , m_sharpElements(nullptr) , m_renderLeafTilesCount(0) , m_isEmptyDrawing(false) { @@ -696,3 +704,11 @@ CoverageGenerator::CachedCoverageInfo::~CachedCoverageInfo() delete m_mainElements; delete m_sharpElements; } + +void CoverageGenerator::CachedCoverageInfo::ResetDL() +{ + delete m_mainElements; + m_mainElements = nullptr; + delete m_sharpElements; + m_sharpElements = nullptr; +} diff --git a/map/coverage_generator.hpp b/map/coverage_generator.hpp index 6fcb0bf135..5625227390 100644 --- a/map/coverage_generator.hpp +++ b/map/coverage_generator.hpp @@ -166,6 +166,8 @@ private: CachedCoverageInfo(); ~CachedCoverageInfo(); + void ResetDL(); + graphics::DisplayList * m_mainElements; graphics::DisplayList * m_sharpElements; ScreenBase m_screen;