From e9234408c037f2fe59f897b0f60a43422eacd8af Mon Sep 17 00:00:00 2001 From: rdb Date: Tue, 23 Mar 2010 13:23:34 +0000 Subject: [PATCH] Fix errors on destruction when the GLSL shader failed to link --- panda/src/glstuff/glShaderContext_src.cxx | 28 ++++++++++++++--------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/panda/src/glstuff/glShaderContext_src.cxx b/panda/src/glstuff/glShaderContext_src.cxx index 390714fefc..f438015fad 100755 --- a/panda/src/glstuff/glShaderContext_src.cxx +++ b/panda/src/glstuff/glShaderContext_src.cxx @@ -391,24 +391,30 @@ release_resources(GSG *gsg) { return; } if (_glsl_program != 0) { - if (!_glsl_vshader != 0) { + if (_glsl_vshader != 0) { gsg->_glDetachShader(_glsl_program, _glsl_vshader); - gsg->_glDeleteShader(_glsl_vshader); - _glsl_vshader = 0; } - if (!_glsl_fshader != 0) { + if (_glsl_fshader != 0) { gsg->_glDetachShader(_glsl_program, _glsl_fshader); - gsg->_glDeleteShader(_glsl_fshader); - _glsl_fshader = 0; } - if (!_glsl_gshader != 0) { + if (_glsl_gshader != 0) { gsg->_glDetachShader(_glsl_program, _glsl_gshader); - gsg->_glDeleteShader(_glsl_gshader); - _glsl_gshader = 0; } gsg->_glDeleteProgram(_glsl_program); _glsl_program = 0; } + if (_glsl_vshader != 0) { + gsg->_glDeleteShader(_glsl_vshader); + _glsl_vshader = 0; + } + if (_glsl_fshader != 0) { + gsg->_glDeleteShader(_glsl_fshader); + _glsl_fshader = 0; + } + if (_glsl_gshader != 0) { + gsg->_glDeleteShader(_glsl_gshader); + _glsl_gshader = 0; + } gsg->report_my_gl_errors(); } @@ -873,7 +879,7 @@ glsl_report_shader_errors(GSG *gsg, unsigned int shader) { info_log = (char *) malloc(length); gsg->_glGetShaderInfoLog(shader, length, &num_chars, info_log); if (strcmp(info_log, "Success.\n") != 0) { - GLCAT.error(false) << info_log; + GLCAT.error(false) << info_log << "\n"; } } delete[] info_log; @@ -896,7 +902,7 @@ glsl_report_program_errors(GSG *gsg, unsigned int program) { info_log = (char *) malloc(length); gsg->_glGetProgramInfoLog(program, length, &num_chars, info_log); if (strcmp(info_log, "Success.\n") != 0) { - GLCAT.error(false) << info_log; + GLCAT.error(false) << info_log << "\n"; } } delete[] info_log;