簡體   English   中英

OpenGL Mac OSX頂點着色器未鏈接到片段着色器

[英]OpenGL Mac OSX vertex shader not linking to fragment 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;
}

謝謝!!

名稱必須匹配:

使頂點着色器的輸出名稱與片段着色器的輸入名稱相匹配:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM