SDL: Initialize compile status variable and check also program link status

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);