我们有几个不同的opengles2.0着色器,每个着色器都使用不同的制服。我们使用glGetUniformLocation来获取为每个制服写入数据的位置。但是,这意味着当我们切换着色器程序时,有时候例如,我们将相机矩阵写入一个位置,有时写入另一个位置,所有这些都取决于为该着色器定义的制服。这意味着我们无法通过检查上传值是否已经更改来轻松减少冗余着色器统一上传,因为我们可能需要重新上载它以覆盖由不同着色器为不同的统一编写的值。
虽然我知道可以在每个着色器程序中包含相同的制服,但无论是否使用它们,glGetUniformLocation会为每个程序返回相同的位置吗?或者,例如,着色器编译器可能会删除未引用的制服并将其余部分组合在一起,从而导致每个着色器将其制服放在不同的位置。这适用于IOS和Android。
由于
肖恩
答案 0 :(得分:1)
制服是按程序状态,因此不同程序的位置是否不同并不重要,因为如果要避免多余的统一更改,则需要按程序而不是全局跟踪制服就像你可能使用DirectX9一样。
是的,即使你在每个编译单元中都有完全相同的制服,OpenGL也可能删除未使用的制服或重新排列它们。