OpenGL Shader无法编译

apparatus_icarus

我目前正在尝试使用OpenGL。不幸的是,我的着色器总是无法编译。存储着色器的文本文件已成功读取到字符串中,并传递给glShaderSource-函数。既然到目前为止一切正常,我认为我的错误在着色器文件本身中(顶点着色器,片段着色器)。我试图输出错误代码,但是我只得到奇怪的符号。

    void GLSLProgram::compileShaders(const std::string& vertexShaderFilePath, const std::string& fragmentShaderFilepath)
{
    _programID = glCreateProgram();
    _vertexShaderID = glCreateShader(GL_VERTEX_SHADER);
    _fragmentShaderID = glCreateShader(GL_FRAGMENT_SHADER);

    if (_vertexShaderID == 0){
        fatalError("Vertex shader failed to be created !");
    }
    _fragmentShaderID = glCreateShader(GL_FRAGMENT_SHADER);
    if (_fragmentShaderID == 0){
        fatalError("Fragment shader failed to be created !");
    }

    compileShader(vertexShaderFilePath, _vertexShaderID);
    compileShader(fragmentShaderFilepath, _fragmentShaderID);

    return;
}

void GLSLProgram::compileShader(const std::string& filePath, GLuint& id)
{
    std::ifstream vertexFile(filePath); 

    if (vertexFile.fail()){
        fatalError("Failed to open " + filePath);
        perror(filePath.c_str());
    }

    std::string fileContents = "";
    std::string line;

    while (std::getline(vertexFile, line)){
        fileContents.append(line + '\n');
    }

    vertexFile.close();
    const GLchar* contentsPtr = fileContents.c_str();
    glShaderSource(id, 1, &contentsPtr, nullptr); 

    glCompileShader(id);

    GLint success = 0;
    glGetShaderiv(id, GL_COMPILE_STATUS, &success); //returns success of most recent compilation
    if (success == GL_FALSE)
    {
        GLint maxLength = 0;
        glGetShaderiv(id, GL_INFO_LOG_LENGTH, &maxLength);

        // The maxLength includes the NULL character
        std::vector<char> errorLog(maxLength);
        glGetShaderInfoLog(id, maxLength, &maxLength, &errorLog[0]);

        // Provide the infolog in whatever manor you deem best.
        // Exit with failure.
        glDeleteShader(id); // Don't leak the shader.

        std::printf("%s\n", errorLog);
        fatalError("shader " + filePath + "failed to compile");

    }
}

片段着色器:

#version 130

out vec3 color;

void main(){
    color = vec3(1.0, 0.0, 0.0);
}

顶点着色器:

#version 130

in vec2 vertexPosition;

void main() {
    gl_Position.xy = vertexPosition;
    gl_Positionsition.z = 0.0;
    gl_Position.w = 1.0;
}
安德烈亚斯(Andreas)

您的printf损坏了。errorLog是作为vector <char>类型传递的,当您在格式字符串中写入“%s”时,该类型不是有效类型。

代替:

std::printf("%s\n", errorLog);

...写:

std::printf("%s\n", &(errorLog[0]));

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

OpenGL无法编译GLSL Shader。缺少扩展程序?

来自分类Dev

OpenGL Shader无法正常工作

来自分类Dev

无法编译OpenGL代码

来自分类Dev

软件构架:OpenGL Shader的创建和编译

来自分类Dev

ios opengl 3.0无法编译版本

来自分类Dev

ios opengl 3.0无法编译版本

来自分类Dev

用OpenGL编译OpenCV

来自分类Dev

Vncviewer中的OpenGL Shader异常

来自分类Dev

OpenGL着色器无法在设备上编译

来自分类Dev

无法编译任何opengl / freeglut / glut源代码

来自分类Dev

无法与Mesa一起使用OpenGL ARB_gpu_shader_int64扩展名

来自分类Dev

OpenGL-Compute Shader-iOS-选项?

来自分类Dev

Shader在Opengl Shader Builder上工作,但不在我的OpenGL应用程序中

来自分类Dev

opengl glrotatef无法正确旋转

来自分类Dev

opengl 3.1纹理无法加载

来自分类Dev

OpenGL PyQt对象无法缩放

来自分类Dev

纹理无法填充图形-OpenGL

来自分类Dev

OpenGL对象无法正确渲染?

来自分类Dev

opengl 3.1纹理无法加载

来自分类Dev

Android OpenGL ES无法绘图

来自分类Dev

OpenGL纹理无法正确加载

来自分类Dev

android opengl无法正确渲染

来自分类Dev

OpenGL GLfloat 无法识别 Java

来自分类Dev

无法在Mac OS X El Capitan上编译CUDA + OpenGL程序

来自分类Dev

OpenGL 3.2:缓存编译的着色器?

来自分类Dev

OpenGL编译的着色器损坏

来自分类Dev

使用g ++的OpenGL代码中的编译问题

来自分类Dev

OpenGL ES版本在编译时

来自分类Dev

在Netbeans上编译和运行OpenGL代码