为什么glGetAttribLocation为两个不同的属性返回相同的值?

Ibr*_*pek -2 c++ opengl opengl-3

我是OpenGL的初学者,我编写了一个顶点着色器并执行其他操作,例如编译着色器.

顶点着色器:

in vec4 vPosition;
in vec4 vColor;

out vec4 Color;

void main(void){
    gl_Position = vPosition;
    Color = vColor;
}
Run Code Online (Sandbox Code Playgroud)

用C++编写这段代码之后:

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

cout << "vPosition location: " << PositionID << endl << "vColor location: " << ColorID << endl;
Run Code Online (Sandbox Code Playgroud)

结果非常有趣,两个相同的位置:

vPosition location: 4294967295
vColor location: 4294967295
Run Code Online (Sandbox Code Playgroud)

那是什么原因?

Jac*_*ack 5

事实上的返回类型glGetAttribLocation是不是GLuint,但GLint(这是签字).

所以4294967295这确实-1意味着问题发生在某个地方.原因可能很多:

  • 程序无效或链接不正确
  • 属性未使用
  • 属性名称无效

由于我们无法猜测您的代码,但很难说出原因,但问题出在其他地方.