我正在尝试将一组点光源从对象类传递到Android上的OpenGL ES 2.0中的顶点着色器。
点光源存储为float[]
数组,并且着色器理想情况下会将浮点数读取为vec4[]
数组。
float []可以通过调用传递到顶点着色器,glUniform4fv(...floatArray, 0)
并在顶点着色器中声明为,uniform vec4 u_PointLights[990]
但这非常慢。
我正在尝试将浮点数放入GPU内存;首先想到的是VBO,但是在绑定数据并将其传递给着色器之后,我只能读取单个vec4而不是数组(即无法声明attribute vec4[] a_PointLights
)。
获得vec4[]
着色器第二名的最佳方法是什么?
谢谢,
理查德
在OpenGL ES 2.0中,您实际上不能做任何其他事情-客户端制服或属性,两者都会受到一定限制。
在OpenGL ES 3.0中,您可以使用“统一缓冲区对象”,但是请注意,非常大的制服数组总是相对昂贵的,尤其是在移动设备上。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句