2017-02-01 82 views
1

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

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

uniform vec2 vertexPositions[4]; 

但现在我想设置的大小动态到的点的数量,这是我将通过。

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

回答

1

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

uniform vec2 arr[MAX_SIZE]; 
uniform int arr_size; 
+0

我也想过这个解决方案,但我认为这可能是太渴望存储? –

+0

它在编译着色器时也会引发异常:'错误C1307:数组大小的非常量表达式' –

+0

正确的是,您将需要最大数量的存储 - 无需使用它即可保存任何内容作为框架的一部分。 –