我想知道是否可以一直使用glPushAttrib(GL_ALL_ATTRIB_BITS)?
或者,由于某些性能问题,仅推送必要的位是否更好?
答案 0 :(得分:7)
attrib堆栈已从现代OpenGL版本中删除,因此我宁愿不在新代码中使用它。它的折旧是恕我直言的激励,足以不使用它而不管任何性能问题。
答案 1 :(得分:4)
(像其他用户所指出的那样 - 通常最好避免弃用功能,但是这个答案的其余部分假设您需要坚持使用它)
对此没有简单的答案,因为性能差异(如果有的话)将取决于GPU,驱动程序实现,程序中的推/弹数量以及可能的其他因素。测试是必需的,但请记住,仅仅因为您的配置和当前代码可能没有区别,在其他配置上或将来代码增长时可能会有很大不同。就个人而言,如果您担心性能,我建议您只推送实际需要保存的位。
编辑:我用13.4驱动程序对Radeon 5870进行了快速测试,使用GPU PerfStudio检查CPU的呼叫时间。似乎GL_ALL_ATTRIB_BITS需要大约30-40微秒的推动(并且弹出大约相同),其他位在1-8之间变化。所以有一个区别,而且,与其他调用相比,30-40 us是相当多的时间 - 在我的程序中只有glClear和一些glDrawArrays占用了更多。