目前我的管道中有大约 15 个渲染 channel 。对于每一遍,我都会在绘图前设置正确的设置,然后再重新设置。这些设置包括视口(viewport)大小、打开或关闭深度测试、混合功能或关闭、模板功能、模板操作等。
我想知道 OpenGL 是否足够聪明,可以忽略设置已存在状态的 API 调用。因为否则我会用很多标志跟踪状态,并且在渲染过程之前只在实际需要时设置状态。
最佳答案
简短的回答:这取决于驱动程序。
OpenGL 本身并没有做很多事情。供应商可以按照他们认为合适的方式实现标准规定的功能。他们通常会测试现有状态以避免不必要地拖延管道吗?也许吧,但如果没有阅读供应商的建议或自己衡量性能,就无法确定。
我所看到的建议(没有引用,因为它到处都是)的共识是,您应该避免调用带有冗余状态更改的 OpenGL。它不会造成太大伤害,而且可能会带来一些好处。
在您的情况下(在传递之间每帧更改几次状态),它可能不会有太大区别。
关于c++ - OpenGL 会阻止不必要的 API 调用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17143308/