[iortcw] 93/152: All: Rend2: Fix shader error logs

Simon McVittie smcv at debian.org
Fri Sep 8 10:40:16 UTC 2017


This is an automated email from the git hooks/post-receive script.

smcv pushed a commit to annotated tag 1.5a
in repository iortcw.

commit 3b0c3ca95493e9cb3535ca6ec13a3aadbdeed002
Author: MAN-AT-ARMS <M4N4T4RMS at gmail.com>
Date:   Fri Aug 5 19:19:57 2016 -0400

    All: Rend2: Fix shader error logs
---
 MP/code/rend2/tr_glsl.c | 95 +++++++++++++++++++++++++++----------------------
 SP/code/rend2/tr_glsl.c | 95 +++++++++++++++++++++++++++----------------------
 2 files changed, 106 insertions(+), 84 deletions(-)

diff --git a/MP/code/rend2/tr_glsl.c b/MP/code/rend2/tr_glsl.c
index 6a5112c..a73fa1a 100644
--- a/MP/code/rend2/tr_glsl.c
+++ b/MP/code/rend2/tr_glsl.c
@@ -152,8 +152,15 @@ static uniformInfo_t uniformsInfo[] =
 	{ "u_ZFadeHighest", GLSL_FLOAT },
 };
 
+typedef enum
+{
+	GLSL_PRINTLOG_PROGRAM_INFO,
+	GLSL_PRINTLOG_SHADER_INFO,
+	GLSL_PRINTLOG_SHADER_SOURCE
+}
+glslPrintLog_t;
 
-static void GLSL_PrintInfoLog(GLuint program, qboolean developerOnly)
+static void GLSL_PrintLog(GLuint programOrShader, glslPrintLog_t type, qboolean developerOnly)
 {
 	char           *msg;
 	static char     msgPart[1024];
@@ -161,61 +168,70 @@ static void GLSL_PrintInfoLog(GLuint program, qboolean developerOnly)
 	int             i;
 	int             printLevel = developerOnly ? PRINT_DEVELOPER : PRINT_ALL;
 
-	qglGetProgramiv(program, GL_INFO_LOG_LENGTH, &maxLength);
+	switch (type)
+	{
+		case GLSL_PRINTLOG_PROGRAM_INFO:
+			ri.Printf(printLevel, "Program info log:\n");
+			qglGetProgramiv(programOrShader, GL_INFO_LOG_LENGTH, &maxLength);
+			break;
+
+		case GLSL_PRINTLOG_SHADER_INFO:
+			ri.Printf(printLevel, "Shader info log:\n");
+			qglGetShaderiv(programOrShader, GL_INFO_LOG_LENGTH, &maxLength);
+			break;
+
+		case GLSL_PRINTLOG_SHADER_SOURCE:
+			ri.Printf(printLevel, "Shader source:\n");
+			qglGetShaderiv(programOrShader, GL_SHADER_SOURCE_LENGTH, &maxLength);
+			break;
+	}
 
 	if (maxLength <= 0)
 	{
-		ri.Printf(printLevel, "No compile log.\n");
+		ri.Printf(printLevel, "None.\n");
 		return;
 	}
 
-	ri.Printf(printLevel, "compile log:\n");
-
 	if (maxLength < 1023)
+		msg = msgPart;
+	else
+		msg = ri.Z_Malloc(maxLength);
+
+	switch (type)
 	{
-		qglGetProgramInfoLog(program, maxLength, &maxLength, msgPart);
+		case GLSL_PRINTLOG_PROGRAM_INFO:
+			qglGetProgramInfoLog(programOrShader, maxLength, &maxLength, msg);
+			break;
+
+		case GLSL_PRINTLOG_SHADER_INFO:
+			qglGetShaderInfoLog(programOrShader, maxLength, &maxLength, msg);
+			break;
 
+		case GLSL_PRINTLOG_SHADER_SOURCE:
+			qglGetShaderSource(programOrShader, maxLength, &maxLength, msg);
+			break;
+	}
+
+	if (maxLength < 1023)
+	{
 		msgPart[maxLength + 1] = '\0';
 
 		ri.Printf(printLevel, "%s\n", msgPart);
 	}
 	else
 	{
-		msg = ri.Z_Malloc(maxLength);
-
-		qglGetProgramInfoLog(program, maxLength, &maxLength, msg);
-
-		for(i = 0; i < maxLength; i += 1024)
+		for(i = 0; i < maxLength; i += 1023)
 		{
 			Q_strncpyz(msgPart, msg + i, sizeof(msgPart));
 
-			ri.Printf(printLevel, "%s\n", msgPart);
+			ri.Printf(printLevel, "%s", msgPart);
 		}
 
-		ri.Free(msg);
-	}
-}
+		ri.Printf(printLevel, "\n");
 
-static void GLSL_PrintShaderSource(GLuint shader)
-{
-	char           *msg;
-	static char     msgPart[1024];
-	int             maxLength = 0;
-	int             i;
-
-	qglGetShaderiv(shader, GL_SHADER_SOURCE_LENGTH, &maxLength);
-
-	msg = ri.Z_Malloc(maxLength);
-
-	qglShaderSource(shader, 1, (const GLchar **)&msg, &maxLength);
-
-	for(i = 0; i < maxLength; i += 1024)
-	{
-		Q_strncpyz(msgPart, msg + i, sizeof(msgPart));
-		ri.Printf(PRINT_ALL, "%s\n", msgPart);
+		ri.Free(msg);
 	}
 
-	ri.Free(msg);
 }
 
 static void GLSL_GetShaderHeader( GLenum shaderType, const GLchar *extra, char *dest, int size )
@@ -371,15 +387,12 @@ static int GLSL_CompileGPUShader(GLuint program, GLuint *prevShader, const GLcha
 	qglGetShaderiv(shader, GL_COMPILE_STATUS, &compiled);
 	if(!compiled)
 	{
-		GLSL_PrintShaderSource(shader);
-		GLSL_PrintInfoLog(shader, qfalse);
+		GLSL_PrintLog(shader, GLSL_PRINTLOG_SHADER_SOURCE, qfalse);
+		GLSL_PrintLog(shader, GLSL_PRINTLOG_SHADER_INFO, qfalse);
 		ri.Error(ERR_DROP, "Couldn't compile shader");
 		return 0;
 	}
 
-	//GLSL_PrintInfoLog(shader, qtrue);
-	//GLSL_PrintShaderSource(shader);
-
 	if (*prevShader)
 	{
 		qglDetachShader(program, *prevShader);
@@ -466,8 +479,7 @@ static void GLSL_LinkProgram(GLuint program)
 	qglGetProgramiv(program, GL_LINK_STATUS, &linked);
 	if(!linked)
 	{
-		GLSL_PrintInfoLog(program, qfalse);
-		ri.Printf(PRINT_ALL, "\n");
+		GLSL_PrintLog(program, GLSL_PRINTLOG_PROGRAM_INFO, qfalse);
 		ri.Error(ERR_DROP, "shaders failed to link");
 	}
 }
@@ -481,8 +493,7 @@ static void GLSL_ValidateProgram(GLuint program)
 	qglGetProgramiv(program, GL_VALIDATE_STATUS, &validated);
 	if(!validated)
 	{
-		GLSL_PrintInfoLog(program, qfalse);
-		ri.Printf(PRINT_ALL, "\n");
+		GLSL_PrintLog(program, GLSL_PRINTLOG_PROGRAM_INFO, qfalse);
 		ri.Error(ERR_DROP, "shaders failed to validate");
 	}
 }
diff --git a/SP/code/rend2/tr_glsl.c b/SP/code/rend2/tr_glsl.c
index 6a5112c..a73fa1a 100644
--- a/SP/code/rend2/tr_glsl.c
+++ b/SP/code/rend2/tr_glsl.c
@@ -152,8 +152,15 @@ static uniformInfo_t uniformsInfo[] =
 	{ "u_ZFadeHighest", GLSL_FLOAT },
 };
 
+typedef enum
+{
+	GLSL_PRINTLOG_PROGRAM_INFO,
+	GLSL_PRINTLOG_SHADER_INFO,
+	GLSL_PRINTLOG_SHADER_SOURCE
+}
+glslPrintLog_t;
 
-static void GLSL_PrintInfoLog(GLuint program, qboolean developerOnly)
+static void GLSL_PrintLog(GLuint programOrShader, glslPrintLog_t type, qboolean developerOnly)
 {
 	char           *msg;
 	static char     msgPart[1024];
@@ -161,61 +168,70 @@ static void GLSL_PrintInfoLog(GLuint program, qboolean developerOnly)
 	int             i;
 	int             printLevel = developerOnly ? PRINT_DEVELOPER : PRINT_ALL;
 
-	qglGetProgramiv(program, GL_INFO_LOG_LENGTH, &maxLength);
+	switch (type)
+	{
+		case GLSL_PRINTLOG_PROGRAM_INFO:
+			ri.Printf(printLevel, "Program info log:\n");
+			qglGetProgramiv(programOrShader, GL_INFO_LOG_LENGTH, &maxLength);
+			break;
+
+		case GLSL_PRINTLOG_SHADER_INFO:
+			ri.Printf(printLevel, "Shader info log:\n");
+			qglGetShaderiv(programOrShader, GL_INFO_LOG_LENGTH, &maxLength);
+			break;
+
+		case GLSL_PRINTLOG_SHADER_SOURCE:
+			ri.Printf(printLevel, "Shader source:\n");
+			qglGetShaderiv(programOrShader, GL_SHADER_SOURCE_LENGTH, &maxLength);
+			break;
+	}
 
 	if (maxLength <= 0)
 	{
-		ri.Printf(printLevel, "No compile log.\n");
+		ri.Printf(printLevel, "None.\n");
 		return;
 	}
 
-	ri.Printf(printLevel, "compile log:\n");
-
 	if (maxLength < 1023)
+		msg = msgPart;
+	else
+		msg = ri.Z_Malloc(maxLength);
+
+	switch (type)
 	{
-		qglGetProgramInfoLog(program, maxLength, &maxLength, msgPart);
+		case GLSL_PRINTLOG_PROGRAM_INFO:
+			qglGetProgramInfoLog(programOrShader, maxLength, &maxLength, msg);
+			break;
+
+		case GLSL_PRINTLOG_SHADER_INFO:
+			qglGetShaderInfoLog(programOrShader, maxLength, &maxLength, msg);
+			break;
 
+		case GLSL_PRINTLOG_SHADER_SOURCE:
+			qglGetShaderSource(programOrShader, maxLength, &maxLength, msg);
+			break;
+	}
+
+	if (maxLength < 1023)
+	{
 		msgPart[maxLength + 1] = '\0';
 
 		ri.Printf(printLevel, "%s\n", msgPart);
 	}
 	else
 	{
-		msg = ri.Z_Malloc(maxLength);
-
-		qglGetProgramInfoLog(program, maxLength, &maxLength, msg);
-
-		for(i = 0; i < maxLength; i += 1024)
+		for(i = 0; i < maxLength; i += 1023)
 		{
 			Q_strncpyz(msgPart, msg + i, sizeof(msgPart));
 
-			ri.Printf(printLevel, "%s\n", msgPart);
+			ri.Printf(printLevel, "%s", msgPart);
 		}
 
-		ri.Free(msg);
-	}
-}
+		ri.Printf(printLevel, "\n");
 
-static void GLSL_PrintShaderSource(GLuint shader)
-{
-	char           *msg;
-	static char     msgPart[1024];
-	int             maxLength = 0;
-	int             i;
-
-	qglGetShaderiv(shader, GL_SHADER_SOURCE_LENGTH, &maxLength);
-
-	msg = ri.Z_Malloc(maxLength);
-
-	qglShaderSource(shader, 1, (const GLchar **)&msg, &maxLength);
-
-	for(i = 0; i < maxLength; i += 1024)
-	{
-		Q_strncpyz(msgPart, msg + i, sizeof(msgPart));
-		ri.Printf(PRINT_ALL, "%s\n", msgPart);
+		ri.Free(msg);
 	}
 
-	ri.Free(msg);
 }
 
 static void GLSL_GetShaderHeader( GLenum shaderType, const GLchar *extra, char *dest, int size )
@@ -371,15 +387,12 @@ static int GLSL_CompileGPUShader(GLuint program, GLuint *prevShader, const GLcha
 	qglGetShaderiv(shader, GL_COMPILE_STATUS, &compiled);
 	if(!compiled)
 	{
-		GLSL_PrintShaderSource(shader);
-		GLSL_PrintInfoLog(shader, qfalse);
+		GLSL_PrintLog(shader, GLSL_PRINTLOG_SHADER_SOURCE, qfalse);
+		GLSL_PrintLog(shader, GLSL_PRINTLOG_SHADER_INFO, qfalse);
 		ri.Error(ERR_DROP, "Couldn't compile shader");
 		return 0;
 	}
 
-	//GLSL_PrintInfoLog(shader, qtrue);
-	//GLSL_PrintShaderSource(shader);
-
 	if (*prevShader)
 	{
 		qglDetachShader(program, *prevShader);
@@ -466,8 +479,7 @@ static void GLSL_LinkProgram(GLuint program)
 	qglGetProgramiv(program, GL_LINK_STATUS, &linked);
 	if(!linked)
 	{
-		GLSL_PrintInfoLog(program, qfalse);
-		ri.Printf(PRINT_ALL, "\n");
+		GLSL_PrintLog(program, GLSL_PRINTLOG_PROGRAM_INFO, qfalse);
 		ri.Error(ERR_DROP, "shaders failed to link");
 	}
 }
@@ -481,8 +493,7 @@ static void GLSL_ValidateProgram(GLuint program)
 	qglGetProgramiv(program, GL_VALIDATE_STATUS, &validated);
 	if(!validated)
 	{
-		GLSL_PrintInfoLog(program, qfalse);
-		ri.Printf(PRINT_ALL, "\n");
+		GLSL_PrintLog(program, GLSL_PRINTLOG_PROGRAM_INFO, qfalse);
 		ri.Error(ERR_DROP, "shaders failed to validate");
 	}
 }

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/iortcw.git



More information about the Pkg-games-commits mailing list