2011-01-17 10 views
4

Можно создать дубликат:
Explicit vs Automatic attribute location binding for OpenGL shaders
Why should I use glBindAttribLocation?Какова цель использования функции glBindAttributeLocation в GLSL?

Я пытался позвонить glGetAttribLocation без привязки каких-либо мест ATTRIB и казалось, на работу. Поэтому я всегда могу кэшировать места атрибутов в массиве, если я хочу иметь мгновенный доступ. Какова цель использования glBindAttribLocation?

[OpenGL 2.0]

+1

См. Также [Явное vs автоматическое связывание атрибутов для шейдеров OpenGL] (http://stackoverflow.com/questions/4635913/explicit-vs-automatic-attribute-location-binding-for-opengl-shaders), который имеет хорошее обсуждение этого. –

ответ

7

glBindAttribLocation "связывает" индекс к имени атрибута. Это позволяет использовать одни и те же индексы для одних и тех же атрибутов в разных шейдерах. Например: координаты вершин = 0, координаты текстуры = 1, нормали = 2. Это упрощает код рисования, сопоставляя шейдер с вашим кодом, а не наоборот (запрашивая места для атрибутов).

В моем коде я создаю перечисление для общей вершины атрибутов:

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

Bind их с помощью glBindAttribLocation, то я могу использовать их как это:

glVertexAttribPointer(GRAPHICS_ATTRIB_VERTEX, ....); 

Это будет работать со всеми моими шейдерами без звонков на номер glGetAttribLocation.

Смежные вопросы