From f079b04a5daafc1def25bb26c1111c4b02039666 Mon Sep 17 00:00:00 2001 From: degasus Date: Thu, 7 Feb 2013 12:47:41 +0100 Subject: also check for glsl errors on linking, activation GLSL_DEBUG again (slowdown on shader compilation) --- .../Plugin_VideoOGL/Src/ProgramShaderCache.cpp | 42 ++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp') diff --git a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp index b56bb8919d..5481f26541 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/ProgramShaderCache.cpp @@ -184,6 +184,48 @@ void ProgramShaderCache::SetBothShaders(GLuint PS, GLuint VS) SetProgramBindings(entry); glLinkProgram(entry.prog_id); + +#if defined(_DEBUG) || defined(DEBUGFAST) || defined(DEBUG_GLSL) + GLsizei length = 0; + glGetProgramiv(entry.prog_id, GL_INFO_LOG_LENGTH, &length); + if (length > 1) + { + GLsizei charsWritten; + GLchar* infoLog = new GLchar[length]; + glGetProgramInfoLog(entry.prog_id, length, &charsWritten, infoLog); + ERROR_LOG(VIDEO, "Program info log:\n%s", infoLog); + char szTemp[MAX_PATH]; + sprintf(szTemp, "p_%d.txt", entry.prog_id); + FILE *fp = fopen(szTemp, "wb"); + fwrite(infoLog, length, 1, fp); + delete[] infoLog; + + glGetShaderiv(VS, GL_SHADER_SOURCE_LENGTH, &length); + GLchar* src = new GLchar[length]; + glGetShaderSource(VS, length, &charsWritten, src); + fwrite(src, strlen(src), 1, fp); + delete [] src; + + glGetShaderiv(PS, GL_SHADER_SOURCE_LENGTH, &length); + src = new GLchar[length]; + glGetShaderSource(PS, length, &charsWritten, src); + fwrite(src, strlen(src), 1, fp); + delete [] src; + fclose(fp); + } + + GLint linkStatus; + glGetProgramiv(entry.prog_id, GL_LINK_STATUS, &linkStatus); + if (linkStatus != GL_TRUE) + { + // Compile failed + ERROR_LOG(VIDEO, "Program linking failed; see info log"); + + // Don't try to use this shader + glDeleteProgram(entry.prog_id); + return; + } +#endif glUseProgram(entry.prog_id); -- cgit v1.2.3