From 9df15e8b7de703c24a82a36872a2d4cf8021f830 Mon Sep 17 00:00:00 2001 From: Themaister Date: Fri, 7 Jan 2011 21:41:11 +0100 Subject: [PATCH] Add error message for failed GLSL compiles. Works on Win32. :) --- gfx/shader_glsl.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/gfx/shader_glsl.c b/gfx/shader_glsl.c index 7f62d40878..1b96dbd3af 100644 --- a/gfx/shader_glsl.c +++ b/gfx/shader_glsl.c @@ -45,6 +45,8 @@ static PFNGLGETUNIFORMLOCATIONPROC pglGetUniformLocation = NULL; static PFNGLUNIFORM1IPROC pglUniform1i = NULL; static PFNGLUNIFORM2FVPROC pglUniform2fv = NULL; static PFNGLUNIFORM4FVPROC pglUniform4fv = NULL; +static PFNGLGETSHADERIVPROC pglGetShaderiv = NULL; +static PFNGLGETSHADERINFOLOGPROC pglGetShaderInfoLog = NULL; static bool glsl_enable = false; static GLuint gl_program; @@ -136,6 +138,20 @@ error: return false; } +static void print_shader_log(GLuint obj) +{ + int info_len = 0; + int max_len; + + pglGetShaderiv(obj, GL_INFO_LOG_LENGTH, &max_len); + + char info_log[max_len]; + pglGetShaderInfoLog(obj, max_len, &info_len, info_log); + + if (info_len > 0) + SSNES_LOG("Shader log: %s\n", info_log); +} + bool gl_glsl_init(const char *path) { // Load shader functions. @@ -152,12 +168,15 @@ bool gl_glsl_init(const char *path) pglUniform1i = SDL_GL_GetProcAddress("glUniform1i"); pglUniform2fv = SDL_GL_GetProcAddress("glUniform2fv"); pglUniform4fv = SDL_GL_GetProcAddress("glUniform4fv"); + pglGetShaderiv = SDL_GL_GetProcAddress("glGetShaderiv"); + pglGetShaderInfoLog = SDL_GL_GetProcAddress("glGetShaderInfoLog"); SSNES_LOG("Checking GLSL shader support ...\n"); bool shader_support = pglCreateProgram && pglUseProgram && pglCreateShader && pglDeleteShader && pglShaderSource && pglCompileShader && pglAttachShader && pglDetachShader && pglLinkProgram && pglGetUniformLocation - && pglUniform1i && pglUniform2fv && pglUniform4fv; + && pglUniform1i && pglUniform2fv && pglUniform4fv + && pglGetShaderiv && pglGetShaderInfoLog; if (!shader_support) { @@ -177,6 +196,8 @@ bool gl_glsl_init(const char *path) vertex_shader = pglCreateShader(GL_VERTEX_SHADER); pglShaderSource(vertex_shader, 1, (const char**)&vertex_prog, 0); pglCompileShader(vertex_shader); + print_shader_log(vertex_shader); + pglAttachShader(gl_program, vertex_shader); free(vertex_prog); } @@ -185,6 +206,8 @@ bool gl_glsl_init(const char *path) fragment_shader = pglCreateShader(GL_FRAGMENT_SHADER); pglShaderSource(fragment_shader, 1, (const char**)&fragment_prog, 0); pglCompileShader(fragment_shader); + print_shader_log(fragment_shader); + pglAttachShader(gl_program, fragment_shader); free(fragment_prog); }