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

时间:2011-01-17 16:14:24

标签: opengl glsl shader

  

可能重复:
  Explicit vs Automatic attribute location binding for OpenGL shaders
  Why should I use glBindAttribLocation?

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

[OpenGL 2.0]

1 个答案:

答案 0 :(得分:8)

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

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

enum
{
    GRAPHICS_ATTRIB_VERTEX = 0,
    GRAPHICS_ATTRIB_NORMAL,
    GRAPHICS_ATTRIB_TEXTURE,
};

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

    glVertexAttribPointer(GRAPHICS_ATTRIB_VERTEX, ....);

这适用于我的所有着色器,但没有调用glGetAttribLocation