为什么 glGetAttribLocation returns 两个不同属性的值相同?
Why glGetAttribLocation returns same value for two different attribute?
我是 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;
结果很有趣,两个相同的位置:
vPosition location: 4294967295
vColor location: 4294967295
这是为什么?
实际上 glGetAttribLocation
的 return 类型不是 GLuint
而是 GLint
(已签名)。
所以4294967295
确实是-1
这意味着某处出现了问题。原因可能有很多:
- 程序无效或链接不正确
- 未使用属性
- 属性名称无效
很难说出原因,因为我们无法猜测您的代码,但问题出在其他地方。
我是 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;
结果很有趣,两个相同的位置:
vPosition location: 4294967295
vColor location: 4294967295
这是为什么?
实际上 glGetAttribLocation
的 return 类型不是 GLuint
而是 GLint
(已签名)。
所以4294967295
确实是-1
这意味着某处出现了问题。原因可能有很多:
- 程序无效或链接不正确
- 未使用属性
- 属性名称无效
很难说出原因,因为我们无法猜测您的代码,但问题出在其他地方。