制服的动态阵列(GLSL OpenGL ES 2.0)



在着色器(使用 OpenGL ES 2.0)中,我想拥有一个动态大小的数组。

我可以声明一个固定大小的数组:

uniform vec2 vertexPositions[4];

但是现在我想将大小动态设置为点数,我将传递该点数。

在编译之前,我想过在着色器源中进行字符串替换,但是每次绘制不同的元素时都必须对其进行编译。这似乎是CPU密集型的。

典型的方法是将统一数组的大小调整到您希望使用的最大元素数,然后仅更新您实际使用的元素子集。然后,您可以将数组的有效大小作为单独的统一传递。

uniform vec2 arr[MAX_SIZE];
uniform int arr_size;

最新更新