From 266a3f19778dcf92c5387341192c31979604f968 Mon Sep 17 00:00:00 2001 From: taw27 Date: Wed, 6 Aug 2008 11:57:48 +0000 Subject: Check for shader linking errors git-svn-id: svn://cook.msm.cam.ac.uk:745/thrust3d/thrust3d@210 84d2e878-0bd5-11dd-ad15-13eda11d74c5 --- src/render.c | 42 +++++++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 9 deletions(-) (limited to 'src') 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); } -- cgit v1.2.3