Fix errors on destruction when the GLSL shader failed to link

This commit is contained in:
rdb 2010-03-23 13:23:34 +00:00
parent 6132cfcadc
commit e9234408c0

View File

@ -391,24 +391,30 @@ release_resources(GSG *gsg) {
return; return;
} }
if (_glsl_program != 0) { if (_glsl_program != 0) {
if (!_glsl_vshader != 0) { if (_glsl_vshader != 0) {
gsg->_glDetachShader(_glsl_program, _glsl_vshader); 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->_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->_glDetachShader(_glsl_program, _glsl_gshader);
gsg->_glDeleteShader(_glsl_gshader);
_glsl_gshader = 0;
} }
gsg->_glDeleteProgram(_glsl_program); gsg->_glDeleteProgram(_glsl_program);
_glsl_program = 0; _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(); gsg->report_my_gl_errors();
} }
@ -873,7 +879,7 @@ glsl_report_shader_errors(GSG *gsg, unsigned int shader) {
info_log = (char *) malloc(length); info_log = (char *) malloc(length);
gsg->_glGetShaderInfoLog(shader, length, &num_chars, info_log); gsg->_glGetShaderInfoLog(shader, length, &num_chars, info_log);
if (strcmp(info_log, "Success.\n") != 0) { if (strcmp(info_log, "Success.\n") != 0) {
GLCAT.error(false) << info_log; GLCAT.error(false) << info_log << "\n";
} }
} }
delete[] info_log; delete[] info_log;
@ -896,7 +902,7 @@ glsl_report_program_errors(GSG *gsg, unsigned int program) {
info_log = (char *) malloc(length); info_log = (char *) malloc(length);
gsg->_glGetProgramInfoLog(program, length, &num_chars, info_log); gsg->_glGetProgramInfoLog(program, length, &num_chars, info_log);
if (strcmp(info_log, "Success.\n") != 0) { if (strcmp(info_log, "Success.\n") != 0) {
GLCAT.error(false) << info_log; GLCAT.error(false) << info_log << "\n";
} }
} }
delete[] info_log; delete[] info_log;