我正在尝试将一组点光源从对象类传递到 Android 上 OpenGL ES 2.0 中的顶点着色器。
点光源存储为 float[]
数组,理想情况下着色器会将 float 读取为 vec4[]
数组。
可以通过调用 glUniform4fv(...floatArray, 0)
将 float[] 传递给顶点着色器,并在顶点着色器中声明为 uniform vec4 u_PointLights[990]
但这非常慢。
我正在尝试将 float 放入 GPU 内存中;首先想到的是 VBO,但在绑定(bind)数据并将其传递给着色器后,我只能读取单个 vec4 而不是数组(即无法声明 attribute vec4[] a_PointLights
)。
将第二个 vec4[]
放入着色器的最佳方法是什么?
最佳答案
在 OpenGL ES 2.0 中,您实际上不能做任何其他事情 - 无论是客户端制服还是属性,这两者都会受到一定程度的限制。
在 OpenGL ES 3.0 中,您可以使用统一缓冲区对象,但请注意,非常大的统一数组总是相对昂贵,尤其是在移动设备上。
关于android - 如何在 OpenGL ES 2.0 中将 float 组传递给着色器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36621823/