25

我对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)是地址?

glBindBuffer 中的 target--GL_ARRAY_BUFFER 是什么意思?

4

2 回答 2

51

一般来说

大多数OpenGL 对象必须绑定到 OpenGL 上下文中称为“目标”的位置才能使用。目标只不过是绑定对象的上下文中的一个地方。

不同的对象类型(缓冲区、纹理等)具有不同的目标集。一般来说,每个目标都有特定的含义:将一个对象绑定到一个目标意味着您希望以目标使用绑定到它的对象的任何方式使用该对象。

将对象绑定到一个目标不会影响对象是否绑定到另一个目标(除非它是纹理对象;它们以不同方式对待目标)。

有一些函数可以修改对象或从绑定对象中查询数据。他们采用一个目标,他们正在修改/查询的对象已绑定到该目标。

GL_ARRAY_BUFFER

The GL_ARRAY_BUFFER target for buffer objects represents the intent to use that buffer object for vertex attribute data. However, binding to this target alone doesn't do anything; it's only the call to glVertexAttribPointer (or equivalent functions) that uses whatever buffer was bound to that target for the attribute data for that attribute.

于 2013-02-10T22:39:24.137 回答
4

但是,Opengl 手册没有提到这些目标的含义。

OpenGL 2.1 规范,第 38 页,第 2.9.1 节:“缓冲区对象中的顶点数组”

这是否意味着目标(如 GL_ARRAY_BUFFER)是地址?

不,它们只是unsigned intenums 一样使用。

于 2013-02-10T22:08:28.493 回答