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

在OpenGL中,一个通用的过程是绑定一个指定的缓冲区对象(或顶点数组对象,framebuffer,…),在当前绑定的对象上调用一些操作,然后绑定某种“默认”对象:

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) 

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

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

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

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

    Interesting Posts