一个典型的OpenGL调用可能如下所示:
GLuint buffer;
glGenBuffers(1, &buffer);
glBindBuffer(GL_SOME_BUFFER, buffer);
...
我读到绑定缓冲区和其他类似的函数可能会非常昂贵。是否值得在绑定之前保存当前绑定的缓冲区并进行检查?就像这样:
void StateManager::bindBuffer(GLenum bufType, GLuint bufID) {
if (this->m_currentBuffer[bufType] != bufID) {
glBindBuffer(bufType, bufID);
this->m_currentBuffer[bufType] = bufID;
}
}
这种方法的想法是,如果bufID
已经绑定,则不会执行昂贵的glBindBuffer
调用。这种方法是否值得一试?我认为OpenGL很可能已经实现了这样的优化,但我现在看到在几个项目中都使用了这种模式,所以我对此产生了疑问。我只是感兴趣,因为这将是一个很简单的实现,但如果它对性能没有太大/任何影响,那么我将跳过它(避免过早优化)。
bufType
都有自己的当前缓冲区。 - Nicol Bolas