目前,我的管道中大约有15个渲染 channel 。对于每次通过,我在绘制之前都设置了正确的设置,然后再进行设置。这些设置包括视口(viewport)大小,打开或关闭深度测试,混合功能或关闭,模板功能,模板操作等。
我想知道OpenGL是否足够聪明,可以忽略设置状态的API调用。因为否则,我将使用很多标志来跟踪状态,并且在渲染过程之前,仅在确实需要时才设置状态。
最佳答案
简短的答案:这取决于驱动程序。
OpenGL本身不做任何事情。供应商应根据他们认为合适的方式实现标准规定的功能。他们通常会测试现有状态以避免不必要地使管道停滞吗?也许,但是缺少阅读供应商的建议或自己评估性能的方法,所以无法确定。
我所看到的建议的共识(因为它遍布各地,因此没有引用),您应该避免使用冗余状态更改来调用OpenGL。它不会造成太大的伤害,并且可能会有所帮助。
在您的情况下(通过之间每帧更改状态几次),可能不会有太大的不同。
关于c++ - OpenGL是否可以防止不必要的API调用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17143308/