#include <crtdbg.h>
#endif
+/* report GL errors, if any, to stderr */
+void checkError(const char *functionName)
+{
+ GLenum error;
+ while (( error = glGetError() ) != GL_NO_ERROR) {
+ fprintf (stderr, "GL error 0x%X detected in %s\n", error, functionName);
+ }
+}
+
/*
* OpenGL 2+ shader mode needs some function and macro definitions,
* avoiding a dependency on additional libraries like GLEW or the
return uniform;
}
+ checkError ("getAttribOrUniformLocation");
}
GLuint program;
fprintf (stderr, "compile log: %s\n", infoLog);
free (infoLog);
}
+ checkError ("compileAndCheck");
}
GLuint compileShaderSource(GLenum type, GLsizei count, const ourGLchar **string)
{
GLuint shader = gl_CreateShader (type);
gl_ShaderSource (shader, count, string, NULL);
+
+ checkError ("compileShaderSource");
+
compileAndCheck (shader);
return shader;
}
fprintf (stderr, "link log: %s\n", infoLog);
free (infoLog);
}
+ checkError ("linkAndCheck");
}
void createProgram(GLuint vertexShader, GLuint fragmentShader)
if (fragmentShader != 0) {
gl_AttachShader (program, fragmentShader);
}
+
+ checkError ("createProgram");
+
linkAndCheck (program);
}
GLuint fragmentShader =
compileShaderSource (GL_FRAGMENT_SHADER, fragmentShaderLines, fragmentShaderSource);
+ checkError ("initShader - 1");
+
createProgram (vertexShader, fragmentShader);
gl_UseProgram (program);
- attribute_fg_coord = getAttribOrUniformLocation("fg_coord" , program, TRUE);
- attribute_fg_normal = getAttribOrUniformLocation("fg_normal" , program, TRUE);
- uniform_m = getAttribOrUniformLocation("m" , program, FALSE);
- uniform_p = getAttribOrUniformLocation("p" , program, FALSE);
- uniform_m_3x3_inv_transp= getAttribOrUniformLocation("m_3x3_inv_transp" , program, FALSE);
+ attribute_fg_coord = getAttribOrUniformLocation("fg_coord" , program, GL_TRUE);
+ attribute_fg_normal = getAttribOrUniformLocation("fg_normal" , program, GL_TRUE);
+ uniform_m = getAttribOrUniformLocation("m" , program, GL_FALSE);
+ uniform_p = getAttribOrUniformLocation("p" , program, GL_FALSE);
+ uniform_m_3x3_inv_transp= getAttribOrUniformLocation("m_3x3_inv_transp" , program, GL_FALSE);
gl_UseProgram (0);
shaderReady = -1;
else
shaderReady = 1;
+
+ checkError ("initShader - 2");
}
/*
gl_load_identity();
gl_push_matrix();
- /* Not in reverse order like normal OpenGL, matrices are multiplied in in order specified in our util library */
+ /* Not in reverse order like normal OpenGL, our util library multiplies the matrices in the order they are specified in */
gl_rotatef((float)a,0,0,1);
gl_rotatef((float)b,1,0,0);
gl_translatef(0,1.2f,-6);
gl_UseProgram (0);
glutSetVertexAttribCoord3(-1);
glutSetVertexAttribNormal(-1);
+
+ checkError ("display");
}
else
{