从我读过的关于GLSL ES 2.0的invariant
关键字,它听起来有点像可以被认为是统一缓冲区对象提供的功能的同义词,在多个着色器程序的意义上可以“共享”为各种输入提供的数据。我想知道的是,这是否可以用作任何方式的UBO替代品。由于OpenGL ES 2.0似乎不支持UBO,并且如果invariant
关键字不能作为替代方案,是否可以使用扩展或其他方式获得类似的功能?
答案 0 :(得分:2)
invariant
与统一缓冲区完全无关。 invariant
表示如果两个单独的着色器具有相同的输入值并使用相同的表达式来计算invariant
- 限定输出,那么输出将保证产生相同的值在两个着色器中。没有该限定符,就不存在这样的保证。
invariant
无关,将分享“为各种输入提供的数据”。 invariant
是关于输出的限定和计算方式。
至于你提出的其余问题,不,OpenGL ES 2.0与UBO没什么相似之处。你必须在不同的程序上将不同的制服设置为相同的值。