为什么绑定OpenGL缓冲区对象?

问题描述:

在OpenGL中的一般方法是结合一个命名缓冲对象(或顶点数组对象,帧缓冲器,...),调用当前绑定对象的某些操作,然后结合某种“默认”的对象:为什么绑定OpenGL缓冲区对象?

glBindBufferObject(GL_ARRAY_BUFFER, bufferObjectName) 
glBufferData(GL_ARRAY_BUFFER, data, GL_STATIC_DRAW) 
glBindBufferObject(GL_ARRAY_BUFFER, 0) 

(KTlin的LWJGL)

我刚刚发现有很多函数的“named”版本。从上面的例子将变得像

glNamedBufferData(bufferObjectName, data, GL_STATIC_DRAW) 

这是更适合在面向对象的上下文。

那么为什么要用第一个例子中的东西呢?我遇到的每个教程都使用了第一种方法,那么“命名”方法中是否存在性能下降或类似缺点?

+2

“命名”函数仅适用于较新版本的OpenGL,如4.5。他们以前不存在。要使用什么取决于您是否要确保与旧硬件的兼容性。 – Rabbid76

命名函数是在OpenGL 4.5中引入的ARB_direct_state_access扩展的一部分。在此之前,只有正常的方法存在。

使用旧版本的主要原因是针对OpenGL 4.5之前的硬件。大多数教程也是针对较早版本的OpenGL编写的。

+0

已经是4.6版本的核心。 – Hitokage

+1

@Hitokage:你究竟是什么意思?这是自4.5以来的核心。 – BDL

+0

对不起,我的错。 – Hitokage