From bb6e42b6159f0357bbcca89994d78f76ed9dee57 Mon Sep 17 00:00:00 2001 From: Anders Blomqvist Date: Mon, 11 Nov 2024 16:32:15 +0100 Subject: [PATCH 1/2] fix: linker error will now display correctly --- libs/gl_utils/computeshader.cpp | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/libs/gl_utils/computeshader.cpp b/libs/gl_utils/computeshader.cpp index 1298553..0fe4c69 100644 --- a/libs/gl_utils/computeshader.cpp +++ b/libs/gl_utils/computeshader.cpp @@ -46,22 +46,26 @@ namespace gl } glLinkProgram(shader_program); - glValidateProgram(shader_program); - - gl::ExitOnGLError("gl::ComputeShader >> Unable to link shaders."); // Check link status - int rvalue; - glGetProgramiv(shader_program, GL_LINK_STATUS, &rvalue); - if (!rvalue) { - fprintf(stderr, "Error in linking compute shader program\n"); - GLchar log[10240]; - GLsizei length; - glGetProgramInfoLog(shader_program, 10239, &length, log); - fprintf(stderr, "Linker log:\n%s\n", log); - exit(41); + int is_linked; + glGetProgramiv(shader_program, GL_LINK_STATUS, &is_linked); + if (!is_linked) { + GLint max_length = 0; + glGetProgramiv(shader_program, GL_INFO_LOG_LENGTH, &max_length); + std::vector info_log(max_length); + glGetProgramInfoLog(shader_program, max_length, &max_length, &info_log[0]); + std::string info_log_str(info_log.begin(), info_log.end()); + std::cout << info_log_str << std::endl; + + fprintf(stderr, "Error in linking compute shader program\n"); + exit(41); } + gl::ExitOnGLError("gl::ComputeShader >> Unable to link shaders."); + + glValidateProgram(shader_program); + gl::ExitOnGLError("gl::ComputeShader >> Unable to load and link shaders."); return true; From 6565d0226ed951c577a77481f6f21b66065ff089 Mon Sep 17 00:00:00 2001 From: Anders Blomqvist Date: Mon, 11 Nov 2024 17:07:12 +0100 Subject: [PATCH 2/2] fix: in case log is 0, dont try access it --- libs/gl_utils/computeshader.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/libs/gl_utils/computeshader.cpp b/libs/gl_utils/computeshader.cpp index 0fe4c69..5d13841 100644 --- a/libs/gl_utils/computeshader.cpp +++ b/libs/gl_utils/computeshader.cpp @@ -53,10 +53,16 @@ namespace gl if (!is_linked) { GLint max_length = 0; glGetProgramiv(shader_program, GL_INFO_LOG_LENGTH, &max_length); - std::vector info_log(max_length); - glGetProgramInfoLog(shader_program, max_length, &max_length, &info_log[0]); - std::string info_log_str(info_log.begin(), info_log.end()); - std::cout << info_log_str << std::endl; + + if (max_length != 0) { + std::vector info_log(max_length); + glGetProgramInfoLog(shader_program, max_length, &max_length, &info_log[0]); + std::string info_log_str(info_log.begin(), info_log.end()); + std::cout << info_log_str << std::endl; + } + else { + std::cout << "No info log from linking compute shader program" << std::endl; + } fprintf(stderr, "Error in linking compute shader program\n"); exit(41);