在GLSL中使用glBindAttributeLocation的目的是什么?

Pat*_*ski 4 opengl shader glsl

可能重复:
OpenGL着色器的显式与自动属性位置绑定
为什么要使用glBindAttribLocation?

我试图调用glGetAttribLocation而不绑定任何attrib位置,它似乎工作.因此,如果我想要即时访问,我总是可以在数组中缓存attrib位置.那么使用glBindAttribLocation的目的是什么?

[OpenGL 2.0]

Jus*_*ers 8

glBindAttribLocation"绑定"索引到属性名称.这允许您在不同着色器中对相同属性使用相同的索引.例如:顶点坐标= 0,纹理坐标= 1,法线= 2.这通过使着色器符合您的代码而不是相反(请求属性位置)来简化绘图代码.

在我的代码中,我为常见的顶点属性创建了一个枚举:

enum
{
    GRAPHICS_ATTRIB_VERTEX = 0,
    GRAPHICS_ATTRIB_NORMAL,
    GRAPHICS_ATTRIB_TEXTURE,
};
Run Code Online (Sandbox Code Playgroud)

将它们绑定使用glBindAttribLocation,然后我可以像这样使用它们:

    glVertexAttribPointer(GRAPHICS_ATTRIB_VERTEX, ....);
Run Code Online (Sandbox Code Playgroud)

这将适用于我没有调用的所有着色器glGetAttribLocation.