From d6122704e8c2380cd036721957ac7914ec6b8dad Mon Sep 17 00:00:00 2001
From: capehill <[EMAIL REDACTED]>
Date: Sat, 26 Mar 2022 12:40:08 +0200
Subject: [PATCH] Initialize compile status variable and check also program
link status
---
test/testshader.c | 33 +++++++++++++++++++++++++++++----
1 file changed, 29 insertions(+), 4 deletions(-)
diff --git a/test/testshader.c b/test/testshader.c
index 2cee7d9b31d..9e81bf55ca0 100644
--- a/test/testshader.c
+++ b/test/testshader.c
@@ -126,7 +126,7 @@ static PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB;
static SDL_bool CompileShader(GLhandleARB shader, const char *source)
{
- GLint status;
+ GLint status = 0;
glShaderSourceARB(shader, 1, &source, NULL);
glCompileShaderARB(shader);
@@ -147,6 +147,31 @@ static SDL_bool CompileShader(GLhandleARB shader, const char *source)
}
}
+static SDL_bool LinkProgram(ShaderData *data)
+{
+ GLint status = 0;
+
+ glAttachObjectARB(data->program, data->vert_shader);
+ glAttachObjectARB(data->program, data->frag_shader);
+ glLinkProgramARB(data->program);
+
+ glGetObjectParameterivARB(data->program, GL_OBJECT_LINK_STATUS_ARB, &status);
+ if (status == 0) {
+ GLint length;
+ char *info;
+
+ glGetObjectParameterivARB(data->program, GL_OBJECT_INFO_LOG_LENGTH_ARB, &length);
+ info = SDL_stack_alloc(char, length+1);
+ glGetInfoLogARB(data->program, length, NULL, info);
+ SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to link program:\n%s", info);
+ SDL_stack_free(info);
+
+ return SDL_FALSE;
+ } else {
+ return SDL_TRUE;
+ }
+}
+
static SDL_bool CompileShaderProgram(ShaderData *data)
{
const int num_tmus_bound = 4;
@@ -171,9 +196,9 @@ static SDL_bool CompileShaderProgram(ShaderData *data)
}
/* ... and in the darkness bind them */
- glAttachObjectARB(data->program, data->vert_shader);
- glAttachObjectARB(data->program, data->frag_shader);
- glLinkProgramARB(data->program);
+ if (!LinkProgram(data)) {
+ return SDL_FALSE;
+ }
/* Set up some uniform variables */
glUseProgramObjectARB(data->program);