From 63f32ba2b102af8c897755785a3c05f273738423 Mon Sep 17 00:00:00 2001 From: rachytski Date: Mon, 18 Feb 2013 13:42:17 +0300 Subject: [PATCH] fixes according to code review. --- graphics/display_list.cpp | 10 ++-------- graphics/display_list_renderer.cpp | 26 +++++++++++++++++--------- graphics/display_list_renderer.hpp | 10 +++++++--- 3 files changed, 26 insertions(+), 20 deletions(-) diff --git a/graphics/display_list.cpp b/graphics/display_list.cpp index d37a75af66..96d43d1b74 100644 --- a/graphics/display_list.cpp +++ b/graphics/display_list.cpp @@ -52,19 +52,13 @@ namespace graphics TextureRef tref(texture.get()); - if (texture && (m_textures.find(tref) == m_textures.end())) - { - m_textures.insert(tref); + if (texture && m_textures.insert(tref).second) m_parent->addTextureRef(tref); - } StorageRef sref(storage.m_vertices.get(), storage.m_indices.get()); - if (storage.isValid() && (m_storages.find(sref) == m_storages.end())) - { - m_storages.insert(sref); + if (storage.isValid() && m_storages.insert(sref).second) m_parent->addStorageRef(sref); - } m_commands.push_back(cmd); } diff --git a/graphics/display_list_renderer.cpp b/graphics/display_list_renderer.cpp index ae7038d612..0f5f3b1bfb 100644 --- a/graphics/display_list_renderer.cpp +++ b/graphics/display_list_renderer.cpp @@ -17,22 +17,28 @@ namespace graphics void DisplayListRenderer::removeStorageRef(StorageRef const & storage) { - CHECK(m_discardStorageCmds.find(storage) != m_discardStorageCmds.end(), ()); - pair > & dval = m_discardStorageCmds[storage]; + DelayedDiscardStorageMap::iterator dit = m_discardStorageCmds.find(storage); + ASSERT(dit != m_discardStorageCmds.end(), ()); + + pair > & dval = dit->second; --dval.first; + if ((dval.first == 0) && dval.second) { dval.second->perform(); - dval.second.reset(); + m_discardStorageCmds.erase(dit); } - CHECK(m_freeStorageCmds.find(storage) != m_freeStorageCmds.end(), ()); - pair > & fval = m_freeStorageCmds[storage]; + DelayedFreeStorageMap::iterator fit = m_freeStorageCmds.find(storage); + ASSERT(fit != m_freeStorageCmds.end(), ()); + + pair > & fval = fit->second; --fval.first; + if ((fval.first == 0) && fval.second) { fval.second->perform(); - fval.second.reset(); + m_freeStorageCmds.erase(fit); } } @@ -44,14 +50,16 @@ namespace graphics void DisplayListRenderer::removeTextureRef(TextureRef const & texture) { - CHECK(m_freeTextureCmds.find(texture) != m_freeTextureCmds.end(), ()); - pair > & val = m_freeTextureCmds[texture]; + DelayedFreeTextureMap::iterator tit = m_freeTextureCmds.find(texture); + ASSERT(tit != m_freeTextureCmds.end(), ()); + pair > & val = tit->second; --val.first; + if ((val.first == 0) && val.second) { val.second->perform(); - val.second.reset(); + m_freeTextureCmds.erase(tit); } } diff --git a/graphics/display_list_renderer.hpp b/graphics/display_list_renderer.hpp index 61e80cb719..db32af2c5a 100644 --- a/graphics/display_list_renderer.hpp +++ b/graphics/display_list_renderer.hpp @@ -28,9 +28,13 @@ namespace graphics typedef gl::BaseTexture const * TextureRef; typedef pair StorageRef; - map > > m_freeTextureCmds; - map > > m_freeStorageCmds; - map > > m_discardStorageCmds; + typedef map > > DelayedFreeTextureMap; + typedef map > > DelayedFreeStorageMap; + typedef map > > DelayedDiscardStorageMap; + + DelayedFreeTextureMap m_freeTextureCmds; + DelayedFreeStorageMap m_freeStorageCmds; + DelayedDiscardStorageMap m_discardStorageCmds; void addStorageRef(StorageRef const & storage); void removeStorageRef(StorageRef const & storage);