android - glGetUniformLocation 为所有程序返回相同的值

标签 android c++ ios opengl-es-2.0

我们有几个不同的 opengles2.0 着色器,每个着色器都使用不同的制服。我们使用 glGetUniformLocation 来获取为每个制服写入数据的位置。然而,这意味着当我们切换着色器程序时,例如,有时我们将 cameramatrix 写入一个位置,有时写入另一个位置,所有这些都取决于为该着色器定义的制服。这意味着我们无法通过检查要上传的值是否已更改来轻松减少冗余着色器统一上传,因为我们很可能需要重新上传它以覆盖由不同着色器为不同统一写入的值。

虽然我知道可以在每个着色器程序中包含相同的制服,但无论是否使用它们,glGetUniformLocation 都会为每个程序返回相同的位置吗?或者,例如,着色器编译器可能会删除未引用的制服并将其余部分 bundle 在一起,从而导致每个着色器在不同的位置拥有其制服。这适用于 IOS 和 Android。

谢谢

肖恩

最佳答案

制服是每个项目的状态,所以它们的位置是否因不同的项目而不同并不重要,因为如果你想避免冗余的制服变化,那么你需要在每个项目的基础上而不是在全局范围内跟踪制服就像您可能对 DirectX9 所做的那样。

是的,OpenGL 可能会删除未使用的制服或以其他方式重新排列它们,即使您在每个编译单元中都有完全相同的制服。

关于android - glGetUniformLocation 为所有程序返回相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37224941/

相关文章:

ios - 如何围绕其中心旋转 SwiftUI Path?

c++ - 基于 OpenCV 标识识别的 ICPR 2010 文章

C++令人困惑的状态变量行为

ios - MKMapViewDelegate map View :didUpdateUserLocation: method not called on iOS5

java - Android Java 中的 TreeSet 定制

android - 有没有一种有效的方法来进行 "continuous"自动对焦?

安卓版本及其内核

android - 如果我更改了设备时间,如何以编程方式获取 Android 中的实际时间

c++ - 如何在正则表达式中匹配 "["和 "]"?

ios - CoreData 与否与 Restkit