这是我的着色器“triangles.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()
是编译链接shader程序的函数。我正在练习的一本书将其作为源文件给出。所以我想不会有错误。
最佳答案
glGetAttribLocation
用于顶点属性,即顶点着色器中的in
变量(例如vPosition
)。您需要 glGetUniformLocation
。
关于c++ - glGetAttribLocation() 返回 -1 但变量是统一的,如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28677239/