0

我想知道总是使用 glPushAttrib(GL_ALL_ATTRIB_BITS) 是否可以?
还是由于某些性能问题而只推送必要的位更好?

4

2 回答 2

7

属性堆栈已从现代 OpenGL 版本中删除,因此我宁愿不在新代码中使用它。恕我直言,它的折旧是足够的激励,无论是否存在任何性能问题都不要使用它。

于 2013-09-22T23:05:08.313 回答
4

(就像其他用户指出的那样 - 通常最好避免弃用的功能,但是这个答案的其余部分假设您出于某种原因需要坚持使用它)

对此没有简单的答案,因为性能差异(如果有)将取决于 GPU、驱动程序实现、程序中的推送/弹出次数以及可能的其他因素。需要进行测试,但请记住,仅仅因为您的配置和当前代码可能没有区别,其他配置或将来代码增长时可能会有很大不同。就个人而言,如果您担心性能,我建议您只推送实际需要保存的位。

编辑:我在 Radeon 5870 上使用 13.4 驱动程序进行了快速测试,使用 GPU PerfStudio 检查调用的 CPU 时间。似乎 GL_ALL_ATTRIB_BITS 需要大约 30-40 微秒来推送(并且弹出大约相同),其他位在 1-8 之间变化。所以有区别,而且,与其他调用相比,30-40 us 是相当多的时间 - 在我的程序中只有 glClear 和一些 glDrawArrays 比这更多。

于 2013-09-22T22:01:49.210 回答