在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)
这种方式更适合面向对象的上下文。
那么为什么要使用第一个例子中的内容呢?我遇到的每个教程都使用了第一种方法,那么在“命名”方法中是否存在一些性能损失或类似的缺点?
答案 0 :(得分:3)
命名函数是OpenGL 4.5中引入的ARB_direct_state_access
扩展的一部分。在此之前,只有正常的方法存在。
使用旧版本的主要原因是针对OpenGL 4.5之前的硬件。大多数教程也是针对旧版OpenGL编写的。