OpenGL Mac OSX顶点着色器未链接到片段着色器

时间:2014-06-17 14:57:03

标签: c++ macos opengl fragment-shader vertex-shader

我在Mac OSX 10.9中编译和执行简单的OpenGL应用程序时遇到问题。它在Windows中运行得很好。但是在Mac中,我在将顶点着色器链接到shaderProgram中的片段着色器时遇到了一些错误。

这是我的控制台输出。

4.1 INTEL-8.26.34

ERROR! could not link the shader program
WARNING: Output of vertex shader 'outColor' not read by fragment shader
ERROR: Input of fragment shader 'inColor' not written by vertex shader
Program ended with exit code: 0

以下是我用来将两者链接在一起的方法。

GLuint createShaderProgram(GLuint vertexShader, GLuint fragmentShader)
{
    // Create and link the shader program
    GLuint shaderProgram = glCreateProgram(); // create handle
    if (!shaderProgram) {
    ERROR("could not create the shader program", false);
    return NULL_HANDLE;
    }
    glAttachShader(shaderProgram, vertexShader);    // attach vertex shader
    glAttachShader(shaderProgram, fragmentShader);  // attach fragment shader
    glLinkProgram(shaderProgram);



    // check to see if the linking was successful
    int linked;
    glGetProgramiv(shaderProgram, GL_LINK_STATUS, &linked); // get link status
    if (!linked) {
        ERROR("could not link the shader program", false);
        int maxLength;
        int length;
        glGetProgramiv(shaderProgram, GL_INFO_LOG_LENGTH, &maxLength);
        char* log = new char[maxLength];
        glGetProgramInfoLog(shaderProgram, maxLength,&length,log);
        printf(log);

        return NULL_HANDLE;
    }

    return shaderProgram;
}

这是我的顶点着色器。

#version 410 core
layout (location = 0) in vec3 inPosition;
layout (location = 3) in vec3 inColor;
layout (location = 3) smooth out vec4 outColor;
void main()
{   
    gl_Position = vec4(inPosition, 1.0);
    outColor = vec4(inColor, 1.0);
}

这是fragShader

#version 410 core
layout (location = 3) smooth in vec4 inColor;
layout (location = 0) out vec4 outColor;
void main()
{
    outColor = inColor;
}

谢谢!

1 个答案:

答案 0 :(得分:1)

名称需要匹配:

使顶点着色器的输出名称与片段着色器的输入名称相匹配:

#version 410 core
layout (location = 0) in vec3 inPosition;
layout (location = 3) in vec3 inColor;
smooth out vec4 vertOutColor;
void main()
{   
    gl_Position = vec4(inPosition, 1.0);
    vertOutColor = vec4(inColor, 1.0);
}

片段着色器:

#version 410 core
smooth in vec4 vertOutColor;
layout (location = 0) out vec4 outColor;
void main()
{
    outColor = vertOutColor;
}