aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortaw27 <taw27@84d2e878-0bd5-11dd-ad15-13eda11d74c5>2008-08-06 11:57:48 +0000
committertaw27 <taw27@84d2e878-0bd5-11dd-ad15-13eda11d74c5>2008-08-06 11:57:48 +0000
commit266a3f19778dcf92c5387341192c31979604f968 (patch)
tree82b24ff8e5f54f539e6db3c1bea83453b793905c
parent1b1daf15148bf836be116260e7ed7c79bbfa055b (diff)
Check for shader linking errors
git-svn-id: svn://cook.msm.cam.ac.uk:745/thrust3d/thrust3d@210 84d2e878-0bd5-11dd-ad15-13eda11d74c5
-rw-r--r--src/render.c42
1 files changed, 33 insertions, 9 deletions
diff --git a/src/render.c b/src/render.c
index bd4ef60..c554e8a 100644
--- a/src/render.c
+++ b/src/render.c
@@ -82,20 +82,44 @@ static GLuint render_load_shader(const char *filename, GLenum type) {
}
-static int render_validate_shader(GLuint shader) {
+static int render_link_program(GLuint program) {
+
+ int l;
+ GLint status;
+ char text[4096];
+
+ glLinkProgram(program);
+
+ glGetProgramiv(program, GL_LINK_STATUS, &status);
+ if ( status == GL_FALSE ) {
+ printf("Program linking errors:\n");
+ glGetProgramInfoLog(program, 4095, &l, text);
+ if ( l > 0 ) {
+ printf("%s\n", text); fflush(stdout);
+ } else {
+ printf("Program linking failed.\n");
+ }
+ }
+
+ return status;
+
+}
+
+static int render_validate_program(GLuint program) {
GLint status;
int l;
char text[4096];
- glValidateProgram(shader);
- glGetProgramiv(shader, GL_VALIDATE_STATUS, &status);
+ glValidateProgram(program);
+ glGetProgramiv(program, GL_VALIDATE_STATUS, &status);
if ( status == GL_FALSE ) {
- glGetProgramInfoLog(shader, 4095, &l, text);
+ printf("Program validation errors:\n");
+ glGetProgramInfoLog(program, 4095, &l, text);
if ( l > 0 ) {
printf("%s\n", text); fflush(stdout);
} else {
- printf("Shader did not validate successfully.\n");
+ printf("Program did not validate successfully.\n");
}
return 0;
}
@@ -112,8 +136,8 @@ static void render_load_shaders(RenderContext *r) {
r->lighting_program = glCreateProgram();
glAttachShader(r->lighting_program, r->lighting_vert);
glAttachShader(r->lighting_program, r->lighting_frag);
- glLinkProgram(r->lighting_program);
- render_validate_shader(r->lighting_program);
+ render_link_program(r->lighting_program);
+ render_validate_program(r->lighting_program);
/* Swirlyness */
r->swirly_vert = render_load_shader(DATADIR"/shaders/swirlytron.vert", GL_VERTEX_SHADER);
@@ -121,8 +145,8 @@ static void render_load_shaders(RenderContext *r) {
r->swirly_program = glCreateProgram();
glAttachShader(r->swirly_program, r->swirly_vert);
glAttachShader(r->swirly_program, r->swirly_frag);
- glLinkProgram(r->swirly_program);
- render_validate_shader(r->swirly_program);
+ render_link_program(r->swirly_program);
+ render_validate_program(r->swirly_program);
}