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