2

我在编译一个简单的顶点着色器时遇到了问题。我正在使用此函数进行编译:

GLuint TShaderManager::loadShaderFromFile(const std::string& fName, GLenum shaderType)
{
    string path = fName;

    //Open file 
    GLuint shaderID = 0; 
    string shaderString; 
    ifstream sourceFile(path.c_str()); 

    //Source file loaded 
    if(sourceFile) 
    { 
        shaderString.assign(istreambuf_iterator<char>(sourceFile), 
                            istreambuf_iterator<char>());                                           // Get shader source

        shaderID = glCreateShader(shaderType);                                                      // Create shader ID 

        const GLchar* shaderSource = shaderString.c_str(); 
        glShaderSource(shaderID, 1, (const GLchar**)&shaderSource, NULL);                           // Set shader source 

        glCompileShader(shaderID);                                                              // Compile shader source 

        GLint shaderCompiled = GL_FALSE; 
        glGetShaderiv(shaderID, GL_COMPILE_STATUS, &shaderCompiled);                                //Check shader for errors 
        if(shaderCompiled != GL_TRUE) 
        { 
            TError::showMessage("Failed to compile shader"); // I'm getting this error 
            glDeleteShader(shaderID); 
            shaderID = 0; 
        } 
    } 
    else 
    { 
        TError::showMessage(string("Unable to open file ").append(path.c_str())); 
    } 

    return shaderID;
}

这是我没有编译的顶点着色器:

#version 330

layout(location = 0) in vec4 position;
void main()
{
    gl_Position = position;
}

所以基本上shaderCompiled仍然存在GL_FALSE

我在调试模式下检查 - 着色器在我的函数中正确加载string,所以问题不存在。

另外我不知道这是否有必要,但我也将我的片段着色器放在这里,它可以正确编译:

#version 330

out vec4 outputColor;
void main()
{
    float lerpValue = gl_FragCoord.y / 800.0f;

    outputColor = mix(vec4(1.0f, 1.0f, 1.0f, 1.0f),
                      vec4(0.2f, 0.2f, 0.2f, 1.0f), lerpValue);
}

编辑:

glGetShaderInfoLog显示此消息:

错误:0:3 '位置':语法错误解析错误

4

0 回答 0