glGetAttribLocation返回大且不可用的值

时间:2015-03-20 16:01:25

标签: opengl

我的glGetAttribLocation似乎返回4294967295的值,我不知道为什么。我见过很多人带着它返回-1,但对我的问题没那么多。问题是它返回的值大于GL_MAX_VERTEX_ATTRIBS,这意味着我无法使用glEnableVertexAttribArray将我的法线发送到着色器。有谁知道这个函数会返回如此高的值?

1 个答案:

答案 0 :(得分:2)

值4294967295是可以由无符号 32位数表示的最大值。如果将其转换为十六进制,则为0xFFFFFFFF。

glGetAttribLocation()返回GLint类型的值,这是签名 32位值。如果您将0xFFFFFFFF值解释为有符号值,则实际上为-1。 [*]

所以你得到的返回值为-1,这意味着找不到该属性。常见的原因是:

  1. 具有给定名称的属性不会出现在着色器代码中。
  2. 具有给定名称的属性已被优化掉,因为它未被使用。
  3. 您传入的程序无效。
  4. 您传入的程序未成功关联。
  5. 获得此返回值的惊喜通常是由原因2引起的。

    [*]至少在以2的补码形式表示签名值的机器上是正确的,这几天几乎都是这种情况。