Commit: 9d8aaf77ac2e43c29c4f9f8ef633b8b0e78bd1ea
Author: Campbell Barton
Date:   Tue Sep 8 19:40:47 2015 +1000
Branches: master
https://developer.blender.org/rB9d8aaf77ac2e43c29c4f9f8ef633b8b0e78bd1ea

Fix T45981: BGE, 2D filters leak memory

===================================================================

M       source/gameengine/Rasterizer/RAS_2DFilterManager.cpp

===================================================================

diff --git a/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp 
b/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp
index f1ce835..cedc27c 100644
--- a/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp
+++ b/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp
@@ -75,6 +75,12 @@ texturewidth(-1), textureheight(-1),
 RAS_2DFilterManager::~RAS_2DFilterManager()
 {
        FreeTextures();
+
+       for (int passindex = 0; passindex < MAX_RENDER_PASS; passindex++) {
+               if (m_filters[passindex]) {
+                       glDeleteObjectARB(m_filters[passindex]);
+               }
+       }
 }
 
 void RAS_2DFilterManager::PrintShaderErrors(unsigned int shader, const char 
*task, const char *code)
@@ -119,11 +125,10 @@ unsigned int 
RAS_2DFilterManager::CreateShaderProgram(const char* shadersource)
 
 
        glGetObjectParameterivARB(fShader, GL_COMPILE_STATUS, &success);
-       if (!success)
-       {
+       if (!success) {
                /*Shader Comile Error*/
                PrintShaderErrors(fShader, "compile", shadersource);
-               return 0;
+               goto fail;
        }
                
        program = glCreateProgramObjectARB();
@@ -131,23 +136,37 @@ unsigned int 
RAS_2DFilterManager::CreateShaderProgram(const char* shadersource)
 
        glLinkProgramARB(program);
        glGetObjectParameterivARB(program, GL_LINK_STATUS, &success);
-       if (!success)
-       {
+       if (!success) {
                /*Program Link Error*/
                PrintShaderErrors(fShader, "link", shadersource);
-               return 0;
+               goto fail;
        }
        
        glValidateProgramARB(program);
        glGetObjectParameterivARB(program, GL_VALIDATE_STATUS, &success);
-       if (!success)
-       {
+       if (!success) {
                /*Program Validation Error*/
                PrintShaderErrors(fShader, "validate", shadersource);
-               return 0;
+               goto fail;
+       }
+
+       /* owned by 'program' */
+       if (fShader) {
+               glDeleteObjectARB(fShader);
        }
 
        return program;
+
+
+fail:
+       if (fShader) {
+               glDeleteObjectARB(fShader);
+       }
+
+       if (program) {
+               glDeleteObjectARB(program);
+       }
+       return 0;
 }
 
 unsigned int RAS_2DFilterManager::CreateShaderProgram(int filtermode)

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to