From fd5a4ee71ac483936bf8282b556b085a37d3fdd6 Mon Sep 17 00:00:00 2001 From: hrydgard Date: Mon, 8 Jun 2009 18:34:24 +0000 Subject: [PATCH] minor cleanup - don't leak so many fragment shaders :p also fix address range for the Generate Symbol Map feature git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@3379 8ced0084-cf51-0410-be5f-012b33b47a6e --- Source/Core/DebuggerWX/Src/CodeWindowSJP.cpp | 2 +- .../Plugin_VideoOGL/Src/PixelShaderCache.h | 15 +++++++++++---- Source/Plugins/Plugin_VideoOGL/Src/Render.cpp | 9 ++++++--- .../Plugin_VideoOGL/Src/TextureConverter.cpp | 13 +++++++++++-- 4 files changed, 29 insertions(+), 10 deletions(-) diff --git a/Source/Core/DebuggerWX/Src/CodeWindowSJP.cpp b/Source/Core/DebuggerWX/Src/CodeWindowSJP.cpp index c8c5449c06..30b07268f6 100644 --- a/Source/Core/DebuggerWX/Src/CodeWindowSJP.cpp +++ b/Source/Core/DebuggerWX/Src/CodeWindowSJP.cpp @@ -160,7 +160,7 @@ void CCodeWindow::OnSymbolsMenu(wxCommandEvent& event) break; case IDM_SCANFUNCTIONS: { - PPCAnalyst::FindFunctions(0x81300000, 0x81800000, &g_symbolDB); + PPCAnalyst::FindFunctions(0x80000000, 0x80400000, &g_symbolDB); SignatureDB db; if (db.Load((File::GetSysDirectory() + TOTALDB).c_str())) db.Apply(&g_symbolDB); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h index 33b92db313..f8ab778eab 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/PixelShaderCache.h @@ -27,6 +27,14 @@ struct FRAGMENTSHADER { FRAGMENTSHADER() : glprogid(0) { } + void Destroy() + { + if (glprogid) + { + glDeleteProgramsARB(1, &glprogid); + glprogid = 0; + } + } GLuint glprogid; // opengl program id #if defined(_DEBUG) || defined(DEBUGFAST) std::string strprog; @@ -41,10 +49,9 @@ class PixelShaderCache int frameCount; PSCacheEntry() : frameCount(0) {} ~PSCacheEntry() {} - void Destroy() { - // printf("Destroying ps %i\n", shader.glprogid); - glDeleteProgramsARB(1, &shader.glprogid); - shader.glprogid = 0; + void Destroy() + { + shader.Destroy(); } }; diff --git a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp index 1aa231ded5..7e9b6f48af 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp @@ -893,11 +893,12 @@ void Renderer::Swap(const TRectangle& rc) // Tell the OSD Menu about the current internal resolution OSDInternalW = rc.right; OSDInternalH = rc.bottom; - // --------------------------------------------------------------------- - // Apply AA - // ŻŻŻŻŻŻŻŻŻŻŻŻŻ + // Make sure that the wireframe setting doesn't screw up the screen copy. glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + // --------------------------------------------------------------------- + // Resolve the multisampled rendertarget into the normal one. + // ŻŻŻŻŻŻŻŻŻŻŻŻŻ if (/*s_bHaveFramebufferBlit*/ s_MSAASamples > 1) { // Use framebuffer blit to stretch screen. @@ -952,6 +953,8 @@ void Renderer::Swap(const TRectangle& rc) glTexCoordPointer(2, GL_FLOAT, 0, (void *)uv_data); glDrawArrays(GL_QUADS, 0, 4); */ + + // Here's an opportunity to bind a fragment shader to do post processing. glBegin(GL_QUADS); glTexCoord2f(0, v_min); glVertex2f(-1, -1); diff --git a/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp b/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp index b6b51b2321..6b17535689 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/TextureConverter.cpp @@ -40,13 +40,15 @@ const int renderBufferHeight = 1024; static FRAGMENTSHADER s_rgbToYuyvProgram; static FRAGMENTSHADER s_yuyvToRgbProgram; -// todo - store shaders in a smarter way - there are not 64 different copy texture formats +// Not all slots are taken - but who cares. const u32 NUM_ENCODING_PROGRAMS = 64; static FRAGMENTSHADER s_encodingPrograms[NUM_ENCODING_PROGRAMS]; void CreateRgbToYuyvProgram() { - // output is BGRA because that is slightly faster than RGBA + // Output is BGRA because that is slightly faster than RGBA. + + // TODO: Use the dot() function for faster dot products. Probably mostly helps ATI (nvidia is scalar anyway). const char *FProgram = "uniform samplerRECT samp0 : register(s0);\n" "void main(\n" @@ -152,6 +154,13 @@ void Shutdown() glDeleteTextures(1, &s_srcTexture); glDeleteRenderbuffersEXT(1, &s_dstRenderBuffer); glDeleteFramebuffersEXT(1, &s_texConvFrameBuffer); + + s_rgbToYuyvProgram.Destroy(); + s_yuyvToRgbProgram.Destroy(); + + for (int i = 0; i < NUM_ENCODING_PROGRAMS; i++) + s_encodingPrograms[i].Destroy(); + s_srcTexture = 0; s_dstRenderBuffer = 0; s_texConvFrameBuffer = 0;