【发布时间】:2012-04-29 19:41:05
【问题描述】:
我正在使用 gDEBugger 来尝试提高我的 openGL 代码的性能(目前它非常糟糕,我什至不会告诉你它的 fps 速率)。我正在逐步完成教程(使用调试器查找 openGL 错误等),现在我正在识别冗余状态更改。我有点不确定更改代码以避免它们是否真的是一个好主意。
例如:
- 我的代码通过调用
glClearAccum(0 , 0 , 0 , 0);和glClearColor(0.0, 0.0, 0.0, 0.0);进行“干净初始化”。这些是可以理解的多余的,但我可以在所有情况下依赖它吗?如果某些 OpenGL 实现不能保证这个初始状态,那么进行调用会更安全,即使它们在大多数情况下是多余的。 - 第一次绘制场景时,
glDrawBuffer(GL_BACK);遇到了同样的问题。 -
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL)也被报告为多余的。我意识到我用相同的参数反复调用它;这是因为调用是在glEnable(GL_TEXTURE_2D);和glDisable(GL_TEXTURE_2D);之间进行的,并且在纹理调用完成时仅短暂启用了纹理。永久启用纹理会影响性能吗?如果我坚持暂时启用纹理,是否可以在初始化期间只调用一次glTextEnvf,还是会因为此时禁用纹理而失败?还是这取决于 openGL 实现?
【问题讨论】:
-
您使用的是立即模式 (glBegin/glEnd) 还是顶点数组?
-
我正在使用 glBegin/glEnd。看起来我可能应该阅读那个顶点数组的东西...... +1
-
是的,glBegin/glEnd 很可能是您表现不佳的原因。
标签: performance opengl