glGetAttribLocation()返回-1,但变量是统一的,如何修复它

glGetAttribLocation() returns -1 but the variable is uniform, How to fix it?

本文关键字:何修复 变量 返回 glGetAttribLocation      更新时间:2023-10-16

这是我的着色器"三角形.vert":

#version 430 core
layout(location = 0) in vec4 vPosition;
layout(location = 1) in vec4 vColor;
uniform mat4 vRota;
out vec4 color;
void main()
{
    color = vColor;
    gl_Position = vRota * vPosition;
}

这是C++源代码的片段:

ShaderInfo shaders[] = 
{
    { GL_VERTEX_SHADER, "triangles.vert" },
    { GL_FRAGMENT_SHADER, "triangles.frag" },
    { GL_NONE, NULL }
};
GLuint program = LoadShaders(shaders);
glUseProgram(program);
//...
int vRota_loc = glGetAttribLocation(program, "vRota");
if (vRota_loc == -1)
{
    cout << "No uniform match for 'vRota'" << endl;
}

它返回-1,但我不知道为什么。

我是不是在着色器中做错了什么?

ps LoadShaders()是用于编译和链接着色器程序的函数。它是由我正在练习的一本书作为源文件提供的。所以我认为不会出现错误。

glGetAttribLocation用于顶点属性,即顶点着色器中的in变量(如vPosition)。您需要glGetUniformLocation

uniform不是属性。您需要使用glGetUniformLocation

CCD_ 8对于每个顶点是一致的,而CCD_。