GLSL - 程序链接错误:插槽 0 在布局位置请求中不可用

GLSL - program link error: Slot 0 unavailable from layout location request

本文关键字:请求 位置 布局 程序 链接 错误 插槽 GLSL      更新时间:2023-10-16

我正在尝试绘制一个带纹理的四边形,从教程中复制一些代码,但恐怕着色器有问题。

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

错误:活动属性别名。插槽 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 以外的其他东西。出于显而易见的原因,属性位置在单个程序中必须是唯一的。您从任何地方复制的代码都是无效的。