运行可执行文件时编译着色器时出错
Posted
技术标签:
【中文标题】运行可执行文件时编译着色器时出错【英文标题】:Error Compiling Shader when running executable 【发布时间】:2020-08-04 14:31:10 【问题描述】:我的 OpenGl 代码在 Visual Studio 2019 中以调试模式构建和运行,没有任何错误。
当我从输出目录运行可执行文件时,我在控制台中收到以下错误,但应用程序运行时好像没有发生错误(所有纹理、制服、事件似乎都按预期工作):
SHADER_ID_COMPILE error has been generated. GLSL compile failed for shader 5, "":
Failed to compile: 35633
我还遇到了几个统一和绘制调用错误,我认为这是着色器无法编译的结果。
我的着色器路径使用了绝对路径。
着色器编译代码:
Shader(const std::string& vertexShaderPath, const std::string& fragmentShaderPath)
: m_id(glCreateProgram())
const GLuint vs = CompileShader(GL_VERTEX_SHADER, getShaderSource(vertexShaderPath));
const GLuint fs = CompileShader(GL_FRAGMENT_SHADER, getShaderSource(fragmentShaderPath));
glAttachShader(m_id, vs);
glAttachShader(m_id, fs);
glLinkProgram(m_id);
glValidateProgram(m_id);
glDeleteShader(vs);
glDeleteShader(fs);
编译着色器函数:
unsigned int CompileShader(GLenum type, const std::string& source)
GLuint shader = glCreateShader(type);
const GLchar* src = source.c_str();
glShaderSource(shader, 1, &src, nullptr);
glCompileShader(shader);
return shader;
【问题讨论】:
引用此link 进行着色器编译并使用glGetShaderInfoLog
获取错误
@gamercodeman 我用过glGetShaderInfoLog
,它只告诉我编译失败。请注意,仅当我直接运行可执行文件时才会发生此错误。当我在 Visual Studio 中运行程序时,着色器编译得很好
尝试打印着色器源并检查它们是否从外部视觉工作室正确加载。
【参考方案1】:
尝试使用此代码向我们提供有关错误的更多信息,并帮助您自己应对未来的着色器编译错误
GLint result = GL_FALSE ;
int logLength ;
glCompileShader ( SHADER_ID ) ;
// Check vertex shader
glGetShaderiv ( SHADER_ID , GL_COMPILE_STATUS , &result );
glGetShaderiv ( SHADER_ID , GL_INFO_LOG_LENGTH , &logLength );
GLchar *shaderError = new GLchar [ ( logLength > 1 ) ? logLength : 1 ] ;
glGetShaderInfoLog ( SHADER_ID , logLength , NULL , shaderError );
if ( logLength ) printf ( "Compiling Shader Error : \n%s\n" , shaderError ) ;
对每个着色器(顶点、片段、[几何])使用它。
【讨论】:
以上是关于运行可执行文件时编译着色器时出错的主要内容,如果未能解决你的问题,请参考以下文章