[Bf-blender-cvs] [9d8aaf7] master: Fix T45981: BGE, 2D filters leak memory

Campbell Barton noreply at git.blender.org
Tue Sep 8 11:48:35 CEST 2015


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)




More information about the Bf-blender-cvs mailing list