可能重复:
Explicit vs Automatic attribute location binding for OpenGL shaders
Why should I use glBindAttribLocation?
我试图调用glGetAttribLocation而不绑定任何attrib位置,它似乎工作。因此,如果我想要即时访问,我总是可以在数组中缓存attrib位置。那么使用glBindAttribLocation的目的是什么?
[OpenGL 2.0]
答案 0 :(得分:8)
glBindAttribLocation
“绑定”属性名称的索引。这允许您在不同着色器中对相同属性使用相同的索引。例如:顶点坐标= 0,纹理坐标= 1,法线= 2.这通过使着色器符合您的代码而不是相反(请求属性位置)来简化绘图代码。
在我的代码中,我为常见的顶点属性创建了一个枚举:
enum
{
GRAPHICS_ATTRIB_VERTEX = 0,
GRAPHICS_ATTRIB_NORMAL,
GRAPHICS_ATTRIB_TEXTURE,
};
使用glBindAttribLocation
绑定它们,然后我可以像这样使用它们:
glVertexAttribPointer(GRAPHICS_ATTRIB_VERTEX, ....);
这适用于我的所有着色器,但没有调用glGetAttribLocation
。