C++ GLSL-程序链接错误:无法从布局位置请求获得插槽0

C++ GLSL-程序链接错误:无法从布局位置请求获得插槽0,c++,opengl,glsl,C++,Opengl,Glsl,我试图复制教程中的一些代码来绘制一个带纹理的四边形,但我担心着色器有问题 顶点着色器和片段着色器编译都可以工作,但在链接程序时,我得到错误: 错误:活动属性别名。插槽0不适用于来自的“顶点” 布局位置请求 第二个向量的位置不应该是(位置=1)吗 我使用SDL2窗口-OpengGL上下文:OpenGL版本:4.1 INTEL-10.6.20(MAC OSX) 以下是着色器文件: vertex.glsl #version 330 core layout(location = 0) in vec3

我试图复制教程中的一些代码来绘制一个带纹理的四边形,但我担心着色器有问题

顶点着色器和片段着色器编译都可以工作,但在链接程序时,我得到错误:

错误:活动属性别名。插槽0不适用于来自的“顶点” 布局位置请求

第二个向量的位置不应该是(位置=1)吗

我使用SDL2窗口-OpengGL上下文:OpenGL版本:4.1 INTEL-10.6.20(MAC OSX)

以下是着色器文件:

vertex.glsl

#version 330 core

layout(location = 0) in vec3 vertex;
layout(location = 0) in vec2 uv;

// will be used in fragment shader
out vec2 uv_frag;

void main(){
    uv_frag = uv;
    gl_Position = vec4(vertex, 1.0);
}
fragment.glsl

#version 330 core

// has to have same name as vertex shader
in vec2 uv_frag;

// our texture
uniform sampler2D tex;

// actual output
// gl_FragColor is deprecated
out vec4 frag_color;

void main(){
    frag_color = texture(tex, uv_frag);
}

那么情况很清楚。你自己已经给出了答案

第二个向量的位置不应该是(位置=1)吗


对。或者不太具体:它应该不是0。显然,属性位置在单个程序中必须是唯一的。您从任何地方复制的代码都是无效的。

谢谢,关于着色器,我还没有读足够的书来确定该位置的确切含义。