forked from bartvdbraak/blender
Fix T45981: BGE, 2D filters leak memory
This commit is contained in:
parent
d1d0f8eb1a
commit
9d8aaf77ac
@ -75,6 +75,12 @@ texturewidth(-1), textureheight(-1),
|
|||||||
RAS_2DFilterManager::~RAS_2DFilterManager()
|
RAS_2DFilterManager::~RAS_2DFilterManager()
|
||||||
{
|
{
|
||||||
FreeTextures();
|
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)
|
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);
|
glGetObjectParameterivARB(fShader, GL_COMPILE_STATUS, &success);
|
||||||
if (!success)
|
if (!success) {
|
||||||
{
|
|
||||||
/*Shader Comile Error*/
|
/*Shader Comile Error*/
|
||||||
PrintShaderErrors(fShader, "compile", shadersource);
|
PrintShaderErrors(fShader, "compile", shadersource);
|
||||||
return 0;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
program = glCreateProgramObjectARB();
|
program = glCreateProgramObjectARB();
|
||||||
@ -131,23 +136,37 @@ unsigned int RAS_2DFilterManager::CreateShaderProgram(const char* shadersource)
|
|||||||
|
|
||||||
glLinkProgramARB(program);
|
glLinkProgramARB(program);
|
||||||
glGetObjectParameterivARB(program, GL_LINK_STATUS, &success);
|
glGetObjectParameterivARB(program, GL_LINK_STATUS, &success);
|
||||||
if (!success)
|
if (!success) {
|
||||||
{
|
|
||||||
/*Program Link Error*/
|
/*Program Link Error*/
|
||||||
PrintShaderErrors(fShader, "link", shadersource);
|
PrintShaderErrors(fShader, "link", shadersource);
|
||||||
return 0;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
glValidateProgramARB(program);
|
glValidateProgramARB(program);
|
||||||
glGetObjectParameterivARB(program, GL_VALIDATE_STATUS, &success);
|
glGetObjectParameterivARB(program, GL_VALIDATE_STATUS, &success);
|
||||||
if (!success)
|
if (!success) {
|
||||||
{
|
|
||||||
/*Program Validation Error*/
|
/*Program Validation Error*/
|
||||||
PrintShaderErrors(fShader, "validate", shadersource);
|
PrintShaderErrors(fShader, "validate", shadersource);
|
||||||
return 0;
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* owned by 'program' */
|
||||||
|
if (fShader) {
|
||||||
|
glDeleteObjectARB(fShader);
|
||||||
}
|
}
|
||||||
|
|
||||||
return program;
|
return program;
|
||||||
|
|
||||||
|
|
||||||
|
fail:
|
||||||
|
if (fShader) {
|
||||||
|
glDeleteObjectARB(fShader);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (program) {
|
||||||
|
glDeleteObjectARB(program);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int RAS_2DFilterManager::CreateShaderProgram(int filtermode)
|
unsigned int RAS_2DFilterManager::CreateShaderProgram(int filtermode)
|
||||||
|
Loading…
Reference in New Issue
Block a user