我们有几个不同的 opengles2.0 着色器,每个着色器都使用不同的制服。我们使用 glGetUniformLocation 来获取为每个制服写入数据的位置。然而,这意味着当我们切换着色器程序时,例如,有时我们将 cameramatrix 写入一个位置,有时写入另一个位置,所有这些都取决于为该着色器定义的制服。这意味着我们无法通过检查要上传的值是否已更改来轻松减少冗余着色器统一上传,因为我们很可能需要重新上传它以覆盖由不同着色器为不同统一写入的值。
虽然我知道可以在每个着色器程序中包含相同的制服,但无论是否使用它们,glGetUniformLocation 都会为每个程序返回相同的位置吗?或者,例如,着色器编译器可能会删除未引用的制服并将其余部分 bundle 在一起,从而导致每个着色器在不同的位置拥有其制服。这适用于 IOS 和 Android。
谢谢
肖恩
最佳答案
制服是每个项目的状态,所以它们的位置是否因不同的项目而不同并不重要,因为如果你想避免冗余的制服变化,那么你需要在每个项目的基础上而不是在全局范围内跟踪制服就像您可能对 DirectX9 所做的那样。
是的,OpenGL 可能会删除未使用的制服或以其他方式重新排列它们,即使您在每个编译单元中都有完全相同的制服。
关于android - glGetUniformLocation 为所有程序返回相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37224941/