From f21523d88bd5c9261f79d98d56da772d1705e659 Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Sat, 7 Aug 2021 00:25:17 -0500 Subject: [PATCH] Shader warnings --- .../source/scwx/qt/util/shader_program.cpp | 38 ++++++++++++++----- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/scwx-qt/source/scwx/qt/util/shader_program.cpp b/scwx-qt/source/scwx/qt/util/shader_program.cpp index a69578c1..a8d02ba6 100644 --- a/scwx-qt/source/scwx/qt/util/shader_program.cpp +++ b/scwx-qt/source/scwx/qt/util/shader_program.cpp @@ -11,6 +11,8 @@ namespace qt static const std::string logPrefix_ = "[scwx::qt::util::shader_program] "; +static constexpr GLsizei INFO_LOG_BUF_SIZE = 512; + class ShaderProgramImpl { public: @@ -49,12 +51,15 @@ GLuint ShaderProgram::id() const bool ShaderProgram::Load(const std::string& vertexPath, const std::string& fragmentPath) { - BOOST_LOG_TRIVIAL(debug) << logPrefix_ << "Load()"; + BOOST_LOG_TRIVIAL(debug) << logPrefix_ << "Load(\"" << vertexPath << "\", \"" + << fragmentPath << "\")"; OpenGLFunctions& gl = p->gl_; - GLint glSuccess; - bool success = true; + GLint glSuccess; + bool success = true; + char infoLog[INFO_LOG_BUF_SIZE]; + GLsizei logLength; QFile vertexFile(vertexPath.c_str()); QFile fragmentFile(fragmentPath.c_str()); @@ -98,14 +103,18 @@ bool ShaderProgram::Load(const std::string& vertexPath, // Check for errors gl.glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &glSuccess); + gl.glGetShaderInfoLog(vertexShader, INFO_LOG_BUF_SIZE, &logLength, infoLog); if (!glSuccess) { - char infoLog[512]; - gl.glGetShaderInfoLog(vertexShader, 512, NULL, infoLog); BOOST_LOG_TRIVIAL(error) - << logPrefix_ << "Vertex shader compilation failed"; + << logPrefix_ << "Vertex shader compilation failed: " << infoLog; success = false; } + else if (logLength > 0) + { + BOOST_LOG_TRIVIAL(error) + << logPrefix_ << "Vertex shader compiled with warnings: " << infoLog; + } // Create a fragment shader GLuint fragmentShader = gl.glCreateShader(GL_FRAGMENT_SHADER); @@ -116,14 +125,19 @@ bool ShaderProgram::Load(const std::string& vertexPath, // Check for errors gl.glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &glSuccess); + gl.glGetShaderInfoLog( + fragmentShader, INFO_LOG_BUF_SIZE, &logLength, infoLog); if (!glSuccess) { - char infoLog[512]; - gl.glGetShaderInfoLog(fragmentShader, 512, NULL, infoLog); BOOST_LOG_TRIVIAL(error) << logPrefix_ << "Fragment shader compilation failed: " << infoLog; success = false; } + else if (logLength > 0) + { + BOOST_LOG_TRIVIAL(error) + << logPrefix_ << "Fragment shader compiled with warnings: " << infoLog; + } if (success) { @@ -133,14 +147,18 @@ bool ShaderProgram::Load(const std::string& vertexPath, // Check for errors gl.glGetProgramiv(p->id_, GL_LINK_STATUS, &glSuccess); + gl.glGetProgramInfoLog(p->id_, INFO_LOG_BUF_SIZE, &logLength, infoLog); if (!glSuccess) { - char infoLog[512]; - gl.glGetProgramInfoLog(p->id_, 512, NULL, infoLog); BOOST_LOG_TRIVIAL(error) << logPrefix_ << "Shader program link failed: " << infoLog; success = false; } + else if (logLength > 0) + { + BOOST_LOG_TRIVIAL(error) + << logPrefix_ << "Shader program linked with warnings: " << infoLog; + } } // Delete shaders