C++ 为什么GLGetAttributeLocation为两个不同的属性返回相同的值?

C++ 为什么GLGetAttributeLocation为两个不同的属性返回相同的值?,c++,opengl,opengl-3,C++,Opengl,Opengl 3,我是OpenGL的初学者,我写了一个顶点着色器,还做了其他事情,比如编译着色器 顶点着色器: in vec4 vPosition; in vec4 vColor; out vec4 Color; void main(void){ gl_Position = vPosition; Color = vColor; } 在我用C++编写此代码之后: GLuint PositionID = glGetAttribLocation(SProgram, "vPosition"); GL

我是OpenGL的初学者,我写了一个顶点着色器,还做了其他事情,比如编译着色器

顶点着色器:

in vec4 vPosition;
in vec4 vColor;

out vec4 Color;

void main(void){
    gl_Position = vPosition;
    Color = vColor;
}
在我用C++编写此代码之后:

GLuint PositionID = glGetAttribLocation(SProgram, "vPosition");
GLuint ColorID = glGetAttribLocation(SProgram, "vColor");

cout << "vPosition location: " << PositionID << endl << "vColor location: " << ColorID << endl;

这是为什么?

实际上的返回类型不是
GLuint
,而是
GLint
(带符号)

所以
4294967295
确实是
-1
,这意味着某个地方发生了问题。原因可能有很多:

  • 程序无效或链接不正确
  • 属性未被使用
  • 属性名称无效
很难说出原因,因为我们猜不出您的代码,但问题出在其他地方。

请参阅。不确定这是否足够接近,可以标记为重复,但基本上是相同的答案。
vPosition location: 4294967295
vColor location: 4294967295