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

Posted

技术标签:

【中文标题】为啥 glGetAttribLocation 为两个不同的属性返回相同的值?【英文标题】:Why glGetAttribLocation returns same value for two different attribute?为什么 glGetAttribLocation 为两个不同的属性返回相同的值? 【发布时间】:2016-07-28 02:00:14 【问题描述】:

我是 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

这是什么原因?

【问题讨论】:

见***.com/questions/29170900/…。不确定这是否足够接近以被标记为重复,但它基本上是相同的答案。 【参考方案1】:

其实glGetAttribLocation的返回类型不是GLuint而是GLint(带符号的)。

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

程序无效或链接错误 属性未使用 属性名称无效

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

【讨论】:

以上是关于为啥 glGetAttribLocation 为两个不同的属性返回相同的值?的主要内容,如果未能解决你的问题,请参考以下文章

检索现有着色器属性时,glGetAttribLocation 返回 -1

为啥找不到我的着色器属性?

为啥 Blender 不使用 GeForce RTX 2080 GPU 而只使用 Intel UHD Graphics 630?

MATLAB中定义的persistent变量为啥会显示两种颜色?

用arcgis加载tiff影像,加进去为啥是一个黑方块啊?

将有序列表拆分为两列