Какво означава целта 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?


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's) един за връхна координата и друг да речем за текстурна координата, трябва ли да ги свържа и двата към 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