我正在尝试将一个点光源数组从一个对象类传递到Android上的OpenGL ES 2.0中的顶点着色器。
点光源存储为float[]
数组,理想情况下着色器将浮点数作为vec4[]
数组读取。
float []可以通过调用glUniform4fv(...floatArray, 0)
传递给顶点着色器,并在顶点着色器中声明为uniform vec4 u_PointLights[990]
,但这非常慢。
我试图让浮动进入GPU内存;首先想到的是一个VBO,但是在绑定数据并将其传递给着色器之后,我只能读取一个vec4而不是一个数组(即不能声明attribute vec4[] a_PointLights
)。
将第二个vec4[]
加入着色器的最佳方法是什么?
谢谢,
理查德
答案 0 :(得分:1)
在OpenGL ES 2.0中,你无法做任何其他事情 - 无论是客户端制服还是属性,两者都会有所限制。
在OpenGL ES 3.0中,您可以使用统一缓冲区对象,但请注意,非常大的制服阵列总是相对昂贵,尤其是在移动设备上。