From 46bc819ca9ad65d01751f5644b01904ff64d7533 Mon Sep 17 00:00:00 2001 From: Xottab-DUTY Date: Sun, 30 Sep 2018 16:43:09 +0500 Subject: [PATCH] xrRenderDX10/dx10ResourceManager_Resources.cpp: removed code duplication --- src/Layers/xrRender/ResourceManager.h | 2 +- src/Layers/xrRender/ShaderResourceTraits.h | 8 ++++--- .../dx10ResourceManager_Resources.cpp | 22 +++++-------------- 3 files changed, 11 insertions(+), 21 deletions(-) diff --git a/src/Layers/xrRender/ResourceManager.h b/src/Layers/xrRender/ResourceManager.h index 308bb601b9f..4be2075307d 100644 --- a/src/Layers/xrRender/ResourceManager.h +++ b/src/Layers/xrRender/ResourceManager.h @@ -258,7 +258,7 @@ class ECORE_API CResourceManager T* CreateShader(const char* name, const char* filename = nullptr, const bool searchForEntryAndTarget = false); template - void DestroyShader(const T* sh); + bool DestroyShader(const T* sh); }; #endif // ResourceManagerH diff --git a/src/Layers/xrRender/ShaderResourceTraits.h b/src/Layers/xrRender/ShaderResourceTraits.h index f089c81bdf9..8aa93a20a37 100644 --- a/src/Layers/xrRender/ShaderResourceTraits.h +++ b/src/Layers/xrRender/ShaderResourceTraits.h @@ -426,10 +426,10 @@ inline T* CResourceManager::CreateShader(const char* name, const char* filename } template -inline void CResourceManager::DestroyShader(const T* sh) +bool CResourceManager::DestroyShader(const T* sh) { if (0 == (sh->dwFlags & xr_resource_flagged::RF_REGISTERED)) - return; + return false; ShaderTypeTraits::MapType& sh_map = GetShaderMap::MapType>(); @@ -439,7 +439,9 @@ inline void CResourceManager::DestroyShader(const T* sh) if (iterator != sh_map.end()) { sh_map.erase(iterator); - return; + return true; } + Msg("! ERROR: Failed to find compiled shader '%s'", sh->cName.c_str()); + return false; } diff --git a/src/Layers/xrRenderDX10/dx10ResourceManager_Resources.cpp b/src/Layers/xrRenderDX10/dx10ResourceManager_Resources.cpp index 409b9dba834..25843394a69 100644 --- a/src/Layers/xrRenderDX10/dx10ResourceManager_Resources.cpp +++ b/src/Layers/xrRenderDX10/dx10ResourceManager_Resources.cpp @@ -140,31 +140,19 @@ SVS* CResourceManager::_CreateVS(LPCSTR _name) void CResourceManager::_DeleteVS(const SVS* vs) { - // XXX: try to use code below - // DestroyShader(vs); - - if (0 == (vs->dwFlags & xr_resource_flagged::RF_REGISTERED)) - return; - LPSTR N = LPSTR(*vs->cName); - map_VS::iterator I = m_vs.find(N); - if (I != m_vs.end()) + if (DestroyShader(vs)) { - m_vs.erase(I); - xr_vector::iterator iDecl; - for (iDecl = v_declarations.begin(); iDecl != v_declarations.end(); ++iDecl) + for (const auto& iDecl : v_declarations) { - xr_map::iterator iLayout; - iLayout = (*iDecl)->vs_to_layout.find(vs->signature->signature); - if (iLayout != (*iDecl)->vs_to_layout.end()) + const auto iLayout = iDecl->vs_to_layout.find(vs->signature->signature); + if (iLayout != iDecl->vs_to_layout.end()) { // Release vertex layout _RELEASE(iLayout->second); - (*iDecl)->vs_to_layout.erase(iLayout); + iDecl->vs_to_layout.erase(iLayout); } } - return; } - Msg("! ERROR: Failed to find compiled vertex-shader '%s'", *vs->cName); } //--------------------------------------------------------------------------------------------------------------