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

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

对每个着色器(顶点、片段、[几何])使用它。

【讨论】:

以上是关于运行可执行文件时编译着色器时出错的主要内容,如果未能解决你的问题,请参考以下文章

创建 python 文件可执行文件时出错

运行 VS2013 Express 项目可执行文件时出错

在 Ubuntu 上运行 Qt 创建的可执行文件时出错

在 Qt 中将 x 可执行文件作为按钮事件运行时出错

运行docker容器时出错:启动容器进程导致“exec:”python “:$ PATH中找不到可执行文件”:未知

(转载)(官方)UE4--图像编程----着色器开发