首页 > 解决方案 > OpenGL中非状态改变纹理重新绑定的惩罚

问题描述

在 OpenGL 中更改活动纹理是一项昂贵的操作。我正在通过按所需纹理对绘制的对象进行批处理来优化一些代码。我已经在应用程序端实现了针对此问题的修复,但我想要一个在我这样做时弹出的问题的答案。

假设我有以下代码:

bindTexture(tex1);
draw();

changeSomeUniforms();
bindTexture(tex1);    // I rebind the same texture as used above! 
draw();

bindTexture(tex2);
draw();

假设所有纹理都绑定到,OpenGL 是否能够在没有我干预的情况GL_TEXTURE0下忽略不必要的重新绑定?tex1既然调用不会改变 OpenGL 的状态,那么 OpenGL 会忽略它吗?

我目前通过类似的纹理批量处理,所以上面在我的应用程序中是这样的:

bindTexture(tex1);
draw();

changeSomeUniforms();
draw();

bindTexture(tex2);
draw();

我想知道 OpenGL 是否比我更聪明,并且在没有我干预的情况下没有重新绑定相同的纹理?

标签: openglgraphics

解决方案


推荐阅读