在opengl ES中,我可以将顶点缓冲区阵列缓冲区等用于着色器共享矩阵吗?

时间:2018-12-11 08:11:27

标签: opengl-es vertex-shader vertex-buffer

由于OpenGL ES不支持共享的“统一块”,我想知道是否有一种方法可以放置可以被许多不同的着色器引用的矩阵,所以一个简单的示例是worldToViewport或worldToEye,它们不会改变整个框架,所有着色器都将参考该框架。我看到一个帖子,其中有人在一个顶点上使用3或4个点调用将其从4个“列向量”进行转换,但是想知道是否有一种方法可以将缓冲区数据分配给着色器中的“ mat4”。

是的,需要webGL,目前看来它仅支持openGLES 2.0。

我想知道它是否支持索引属性缓冲区,因为我假设它们不需要相对于位置顶点数组的大小为任何指定的大小。

然后,如果一个人可以对属性缓冲区(在着色器中)使用硬编码或计算的索引,并且一次可以绑定多个属性缓冲区,并同时访问所有“绑定到着色器”的缓冲区,着色器...

我知道所有正确的方法是否都可行。我需要有关着色器的良好语言/体系结构参考,因为我对着色器编程有些陌生,因为我试图在不知道砖块形状的情况下设计墙:)

1 个答案:

答案 0 :(得分:2)

顶点属性是每个顶点的,因此无法在多个顶点之间共享顶点属性。

OpenGL ES 2.0以上版本具有CPU侧制服,必须在绘制时从CPU单独上载。制服属于程序对象,因此对于一帧恒定的制服,您只需修改每个程序一次,因此成本不一定与绘制数成正比。

OpenGL ES 3.0及更高版本具有统一缓冲区对象(UBO),使您可以从内存中的缓冲区加载统一。

我不确定“不支持共享的统一块”是什么意思,因为这几乎与UBO差不多,尽管它不能在仅支持OpenGL ES 2.x的旧硬件上运行。 / p>