Подтвердить что ты не робот

Что означает цель GL_ARRAY_BUFFER в glBindBuffer?

Я был в замешательстве относительно VBO,

glGenBuffers(1, &positionBufferObject);
glBindBuffer(GL_ARRAY_BUFFER, positionBufferObject);

Помимо GL_ARRAY_BUFFER, существуют другие целевые типы: GL_ATOMIC_COUNTER_BUFFER, GL_COPY_READ_BUFFER...

Однако руководство Opengl не упоминает, что означают эти цели. Я проверил glew.h:

#define GL_ARRAY_BUFFER 0x8892

Означает ли это, что цели (например, GL_ARRAY_BUFFER) являются адресами?

Что означает цель - GL_ARRAY_BUFFER в glBindBuffer?

4b9b3361

Ответ 1

В целом

Большинство объекты OpenGL должны быть привязаны к местоположениям в контексте OpenGL, которые называются "целевые" для их использования. Цель - не что иное, как место в контексте привязки объектов.

Различные типы объектов (буферы, текстуры и т.д.) имеют разные наборы целей. Вообще говоря, каждая цель имеет конкретное значение: привязать один объект к одной цели означает, что вы хотите использовать этот объект любым способом, который использует объекты, привязанные к нему.

Связывание объекта с одной целью не влияет на то, привязан ли объект к другой цели (если только он не является объектом текстуры, они обрабатывают объекты по-разному).

Существуют функции, которые изменяют объекты или данные запроса от связанных объектов. Они берут цель, к которой объект, который они изменяют/запрашивают, был связан.

GL_ARRAY_BUFFER

Цель GL_ARRAY_BUFFER для объектов буфера представляет собой намерение использовать этот буферный объект для данных атрибута вершины. Однако привязка к этой цели сама по себе не делает ничего; это только вызов glVertexAttribPointer (или эквивалентных функций), который использует любой буфер, привязанный к этой цели для данных атрибута для этого атрибута.