我有大约 500 个 vec4 需要可用,但每个对象只有约 15 个,然后更改为这 500 个中的 15 个用于绘制下一个对象,依此类推。
起初,我尝试将所有内容一次存储在“统一 vec4 行 [500]”中,这在某些设备上效果很好,但例如在 Galaxy SII 上,这会导致即时崩溃,出现 outOfMemory 异常。比我尝试使用以下方法将每个对象从 CPU 端复制到 GPU 所需的 15 个:
GLES20.glUniform4f(GLES20.glGetformLocation(programHandle, "lines["+i/4+"]"),
lines[i], lines[i+1], lines[i+2], lines[i+3]);
因为有相当多的对象要绘制,这导致大量的 vec4 被传递给 GPU,并且垃圾收集器每 2 秒被调用一次。
“lines”是一个float[4*lineCount],也许上传整个float[]的调用会更快,内存效率更高,有人知道怎么做吗?
我相信 UBO 会很好地解决这个问题,但它们不能在 android 上使用,对吗?
有谁知道更好的解决方案?非常感谢!
Galaxy SII 用户就靠你了^_^