GL_ARRAY_BUFFER目标在glBindBuffer中的含义是什么?

时间:2013-02-10 21:36:38

标签: opengl graphics opengl-es glsl shader

我对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中的含义是什么?

2 个答案:

答案 0 :(得分:47)

一般

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

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

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

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

GL_ARRAY_BUFFER

buffer objectsGL_ARRAY_BUFFER目标表示use that buffer object for vertex attribute data的意图。但是,单独绑定这个目标并没有做任何事情;它只是对glVertexAttribPointer (or equivalent functions)的调用,它使用绑定到该目标的任何缓冲区作为该属性的属性数据。

答案 1 :(得分:3)

  

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

OpenGL 2.1 spec, page 38, section 2.9.1: "Vertex Arrays In Buffer Objects"

  

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

不,他们只是像unsigned int一样enum使用了。