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

时间:2016-07-28 02:00:15

标签: c++ opengl opengl-3

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

顶点着色器:

<user table>

|user_id    | int (unique)
|name       | int (ref to alias.alias_id)

<user_alias table>

|user_id    | int (ref to user.user_id)
|alias_id   | int (ref to alias.alias_id)

unique constraint (user_id, alias_id)

<alias table>

|alias_id   | int (unique)
|alias      | varchar

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

in vec4 vPosition;
in vec4 vColor;

out vec4 Color;

void main(void){
    gl_Position = vPosition;
    Color = vColor;
}

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

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

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

这是为什么?

1 个答案:

答案 0 :(得分:5)

实际上glGetAttribLocation的返回类型不是GLuint而是GLint(已签名)。

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

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

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