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

时间:2017-10-21 19:23:00

标签: opengl 3d kotlin lwjgl

在OpenGL中,一般程序是绑定一个命名缓冲区对象(或顶点数组对象,帧缓冲区,...),在当前绑定的对象上调用一些操作,然后绑定某种“默认”对象:

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

(Kotlin的LWJGL)

我刚刚发现许多功能都有“命名”版本。上面的例子就像

glNamedBufferData(bufferObjectName, data, GL_STATIC_DRAW)

这种方式更适合面向对象的上下文。

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

1 个答案:

答案 0 :(得分:3)

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

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