Browse Source

add extra logging for shader linking errors

main
cinnaboot 5 years ago
parent
commit
87f0523434
  1. 9
      src/GLDebug.h
  2. 11
      src/shader.cpp

9
src/GLDebug.h

@ -8,6 +8,7 @@
void dumpShader(GLuint prog_id); void dumpShader(GLuint prog_id);
const char* glEnumToString(GLenum e);
void openglDebugCallback(GLenum source, void openglDebugCallback(GLenum source,
GLenum type, GLenum type,
GLuint id, GLuint id,
@ -59,6 +60,14 @@ glEnumToString(GLenum e)
case GL_DEBUG_SEVERITY_NOTIFICATION: case GL_DEBUG_SEVERITY_NOTIFICATION:
return "GL_DEBUG_SEVERITY_NOTIFICATION"; return "GL_DEBUG_SEVERITY_NOTIFICATION";
case GL_NO_ERROR: return "GL_NO_ERROR";
case GL_INVALID_ENUM: return "GL_INVALID_ENUM";
case GL_INVALID_VALUE: return "GL_INVALID_VALUE";
case GL_INVALID_OPERATION: return "GL_INVALID_OPERATION";
case GL_INVALID_FRAMEBUFFER_OPERATION:
return "GL_INVALID_FRAMEBUFFER_OPERATION";
case GL_OUT_OF_MEMORY: return "GL_OUT_OF_MEMORY";
default: return "???"; default: return "???";
} }
} }

11
src/shader.cpp

@ -371,7 +371,6 @@ compileAndLinkShader(ShaderProgram* shader,
glShaderSource(vs_id, 1, &vert_src, NULL); glShaderSource(vs_id, 1, &vert_src, NULL);
glShaderSource(fs_id, 1, &frag_src, NULL); glShaderSource(fs_id, 1, &frag_src, NULL);
// TODO: add a glError to string function in GLDebug.h
glCompileShader(vs_id); glCompileShader(vs_id);
assert(glGetError() == GL_NO_ERROR); assert(glGetError() == GL_NO_ERROR);
glCompileShader(fs_id); glCompileShader(fs_id);
@ -385,6 +384,16 @@ compileAndLinkShader(ShaderProgram* shader,
GLint is_linked = 0; GLint is_linked = 0;
glGetProgramiv(shader->prog_id, GL_LINK_STATUS, &is_linked); glGetProgramiv(shader->prog_id, GL_LINK_STATUS, &is_linked);
// NOTE: log shader linking errors
if (is_linked != GL_TRUE) {
const u32 max_len = 512;
char err_str[max_len];
i32 write_len;
glGetProgramInfoLog(
shader->prog_id, max_len, &write_len, &err_str[0]);
LOGF(Error, "Info Log: %s\n", err_str);
}
return (is_linked == GL_TRUE); return (is_linked == GL_TRUE);
} }

Loading…
Cancel
Save