运行可执行文件时编译着色器时出错



我的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);
}

CompileShader函数:

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;
}

尝试使用此代码为我们提供有关错误的更多信息,并帮助您应对未来的着色器编译错误

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%sn" , shaderError ) ;

将其用于每个着色器(顶点、片段、[geometry](。

最新更新