From e5deb10714b2486caa42dcdcd9733487c9083821 Mon Sep 17 00:00:00 2001 From: hrydgard Date: Sat, 30 Aug 2008 23:15:11 +0000 Subject: [PATCH] bugfix the texcache bugfixes :P git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@395 8ced0084-cf51-0410-be5f-012b33b47a6e --- .../Plugin_VideoDX9/Src/TextureCache.cpp | 29 ++++++++++--------- .../Plugin_VideoOGL/Src/TextureMngr.cpp | 8 +++-- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/Source/Plugins/Plugin_VideoDX9/Src/TextureCache.cpp b/Source/Plugins/Plugin_VideoDX9/Src/TextureCache.cpp index 5868b90b1b..f2ba9d9fd5 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/TextureCache.cpp +++ b/Source/Plugins/Plugin_VideoDX9/Src/TextureCache.cpp @@ -24,9 +24,12 @@ void TextureCache::TCacheEntry::Destroy() { if (texture) texture->Release(); - u32 *ptr = (u32*)g_VideoInitialize.pGetMemoryPointer(addr + hashoffset*4); - if (*ptr == hash) - *ptr = oldpixel; + texture = 0; + if (!isRenderTarget) { + u32 *ptr = (u32*)g_VideoInitialize.pGetMemoryPointer(addr + hashoffset*4); + if (*ptr == hash) + *ptr = oldpixel; + } } void TextureCache::Init() @@ -38,10 +41,10 @@ void TextureCache::Init() void TextureCache::Invalidate() { TexCache::iterator iter = textures.begin(); - for (;iter!=textures.end();iter++) + for (; iter != textures.end(); iter++) iter->second.Destroy(); textures.clear(); - TexDecoder_SetTexFmtOverlayOptions(g_Config.bTexFmtOverlayEnable,g_Config.bTexFmtOverlayCenter); + TexDecoder_SetTexFmtOverlayOptions(g_Config.bTexFmtOverlayEnable, g_Config.bTexFmtOverlayCenter); } void TextureCache::Shutdown() @@ -54,9 +57,9 @@ void TextureCache::Shutdown() void TextureCache::Cleanup() { - TexCache::iterator iter=textures.begin(); + TexCache::iterator iter=textures.begin(); - while(iter!=textures.end()) + while(iter != textures.end()) { if (frameCount>20+iter->second.frameCount) { @@ -65,13 +68,13 @@ void TextureCache::Cleanup() iter->second.Destroy(); iter = textures.erase(iter); } - else - { - iter++; - } + else + { + iter++; + } } - else - { + else + { iter++; } } diff --git a/Source/Plugins/Plugin_VideoOGL/Src/TextureMngr.cpp b/Source/Plugins/Plugin_VideoOGL/Src/TextureMngr.cpp index 5aea8eab86..3163cabc66 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/TextureMngr.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/TextureMngr.cpp @@ -82,9 +82,11 @@ void TextureMngr::TCacheEntry::SetTextureParameters(TexMode0& newmode) void TextureMngr::TCacheEntry::Destroy() { glDeleteTextures(1, &texture); - u32 *ptr = (u32*)g_VideoInitialize.pGetMemoryPointer(addr + hashoffset*4); - if (*ptr == hash) - *ptr = oldpixel; + if (!isRenderTarget) { + u32 *ptr = (u32*)g_VideoInitialize.pGetMemoryPointer(addr + hashoffset*4); + if (*ptr == hash) + *ptr = oldpixel; + } texture = 0; }