Что означает цель 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) являются адресами?

Что означает target---GL_ARRAY_BUFFER в glBindBuffer?


person lightrek    schedule 10.02.2013    source источник
comment
Об этом рассказывается на странице OpenGL Wiki, посвященной буферным объектам.   -  person Nicol Bolas    schedule 11.02.2013


Ответы (2)


В основном

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

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

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

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

GL_ARRAY_BUFFER

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

person Nicol Bolas    schedule 10.02.2013
comment
но если я хочу использовать НЕСКОЛЬКО буферов (vbo), один для координаты вершины, а другой, скажем, для координаты текстуры, должен ли я привязывать их оба к GL_ARRAY_BUFFER?? - person barney; 15.09.2016
comment
Один связанный объект на цель в данный момент времени. Если вы хотите работать со вторым, первый заменяется, когда вы связываете второй — думайте о целях как об адресах, которые хранят значение. - person BadZen; 25.01.2019

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

Спецификация OpenGL 2.1, стр. 38, раздел 2.9.1: "Массивы вершин в объектах буфера"

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

Нет, они просто unsigned int используются как enum.

person genpfault    schedule 10.02.2013
comment
Спасибо, очень ценю это. - person lightrek; 11.02.2013
comment
Вы можете абсолютно точно думать об этом как об адресах; сама спецификация GL явно поощряет эту метафору. - person BadZen; 25.01.2019