如何在OpenGL ES 2.0中将float数组传递给Shader?

时间:2016-04-14 11:33:20

标签: android arrays opengl-es

我正在尝试将一个点光源数组从一个对象类传递到Android上的OpenGL ES 2.0中的顶点着色器。

点光源存储为float[]数组,理想情况下着色器将浮点数作为vec4[]数组读取。

float []可以通过调用glUniform4fv(...floatArray, 0)传递给顶点着色器,并在顶点着色器中声明为uniform vec4 u_PointLights[990],但这非常慢。

我试图让浮动进入GPU内存;首先想到的是一个VBO,但是在绑定数据并将其传递给着色器之后,我只能读取一个vec4而不是一个数组(即不能声明attribute vec4[] a_PointLights)。

将第二个vec4[]加入着色器的最佳方法是什么?

谢谢,

理查德

1 个答案:

答案 0 :(得分:1)

在OpenGL ES 2.0中,你无法做任何其他事情 - 无论是客户端制服还是属性,两者都会有所限制。

在OpenGL ES 3.0中,您可以使用统一缓冲区对象,但请注意,非常大的制服阵列总是相对昂贵,尤其是在移动设备上。