From add171b6faa52d29accf939521bc945aeeda73ba Mon Sep 17 00:00:00 2001 From: Hleb Valoshka <375gnu@gmail.com> Date: Sat, 9 Nov 2019 23:42:21 +0300 Subject: [PATCH] Fix error reporting when shader linking failed --- src/celengine/glshader.cpp | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/src/celengine/glshader.cpp b/src/celengine/glshader.cpp index 802af8b1..77647fe2 100644 --- a/src/celengine/glshader.cpp +++ b/src/celengine/glshader.cpp @@ -381,13 +381,36 @@ GetInfoLog(GLuint obj) GLint logLength = 0; GLsizei charsWritten = 0; - glGetShaderiv(obj, GL_INFO_LOG_LENGTH, &logLength); + enum { Unknown, Shader, Program } kind; + + if (glIsShader(obj)) + { + kind = Shader; + } + else if (glIsProgram(obj)) + { + kind = Program; + } + else + { + cerr << "Unknown object passed to GetInfoLog()!\n"; + return string(); + } + + if (kind == Shader) + glGetShaderiv(obj, GL_INFO_LOG_LENGTH, &logLength); + else + glGetProgramiv(obj, GL_INFO_LOG_LENGTH, &logLength); + if (logLength <= 0) return string(); auto* log = new char[logLength]; - glGetShaderInfoLog(obj, logLength, &charsWritten, log); + if (kind == Shader) + glGetShaderInfoLog(obj, logLength, &charsWritten, log); + else + glGetProgramInfoLog(obj, logLength, &charsWritten, log); string s(log, charsWritten); delete[] log;