曾经有人说“管理”OpenGL状态很有用(刚刚从2001年看到一篇文章)。像这样的(C++):缓存OpenGL状态还有意义吗?
void CStateManager::setCulling(bool enabled)
{
if (m_culling != enabled)
{
m_culling = enabled;
if (m_culling)
glEnable(GL_CULL_FACE);
else
glDisable(GL_CULL_FACE);
}
}
我可以看到,这可能是有用的还是在的情况下OpenGL的服务器不在同一个地方OpenGL的客户端。但是在我的'游戏'引擎中肯定不是这样,所以让我们假设OpenGL客户端总是与OpenGL服务器在同一台机器上。
它是否仍然(现在是2017年)值得让所有这些检查代码占用周期而不是总是调用驱动程序?
有人可能会说我应该自己介绍一下,但我不认为结果会很重要,因为有很多不同的图形适配器,驱动程序,CPU和操作系统,我的个人测试不足以代表。
编辑:怎么这样的事情绑定的缓冲区,帧缓存,纹理,...
这取决于。如果你正在做很多不必要的电话,那么是的,你会从中受益。但最终它会下达“衡量它”。这也是任何人都可以做的唯一的事情。 – BDL
缓冲区,你也可以使用直接状态访问的方式;) –