glBindBuffer 中的 GL_ARRAY_BUFFER 目标是什么意思?

问题描述 投票:0回答:3

我对 VBO 感到困惑,

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

除了GL_ARRAY_BUFFER,还有其他target类型:GL_ATOMIC_COUNTER_BUFFER, GL_COPY_READ_BUFFER...

然而,Opengl 手册并没有提到这些目标是什么意思。我检查了 glew.h:

#define GL_ARRAY_BUFFER 0x8892

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

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

opengl graphics opengl-es glsl shader
3个回答
52
投票

一般

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

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

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

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

GL_ARRAY_BUFFER

GL_ARRAY_BUFFER
buffer objects 的目标表示 use that buffer object for vertex attribute data 的意图。然而,单独绑定到这个目标并没有做任何事情;它只是对
glVertexAttribPointer
(或等效函数)
的调用,它使用绑定到该目标的任何缓冲区来获取该属性的属性数据。


4
投票

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

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

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

不,它们只是

unsigned int
s 像
enum
s 一样使用。


0
投票

OpenGL中的target是一个特殊的interface,它可以处理它当时类型的一个对象。每个目标都有一组影响其类型的所有对象的参数。 OpenGL 中的对象存储在内部,为用户提供一个对象 ID。您必须在处理之前将您的对象 ID 绑定到目标,然后解除绑定以处理相同类型的其他对象。这是 API 的基本概念。希望有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.