android - 如何在 OpenGL ES 2.0 中将 float 组传递给着色器?

标签 android arrays opengl-es

我正在尝试将一组点光源从对象类传递到 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/

相关文章:

android - 从另一个 Android 应用程序启动 Xamarin Android 应用程序

Android MediaPlayer 文件的完整路径

python - 替换 numpy 数组中的值

android - 同线程情况下如何避免GLSurfaceView出现queueEvent

android - OpenGL ES Android 矩阵转换

android - 协调器布局在 AppbarLayout 的高度移动内容

java - Java 中的 NotNull 注解

arrays - STD_LOGIC_VECTOR 数组

javascript - 如何动态循环 json 字符串中的所有值

objective-c - 在Cocos2D、iOS中绘制填充的动态多边形