私は約 500 の vec4 を利用できるようにする必要がありますが、オブジェクトごとに ~15 しかなく、次に描画するオブジェクトなどのために、これらの 500 のうちの 15 に変更しました。
最初に、「uniform vec4 lines[500]」にすべてを一度に保存しようとしましたが、これは一部のデバイスではうまく機能しましたが、たとえば、Galaxy SII では outOfMemory 例外で即座にクラッシュします。以下を使用して、すべてのオブジェクトフォーム CPU 側に必要な 15 を GPU にコピーしようとしたよりも:
GLES20.glUniform4f(GLES20.glGetformLocation(programHandle, "lines["+i/4+"]"),
lines[i], lines[i+1], lines[i+2], lines[i+3]);
描画するオブジェクトがかなりあるため、多くの vec4 が GPU に渡され、ガベージ コレクターが ~2 秒ごとに呼び出されます。
「行」はfloat [4 * lineCount]です。おそらく、float []全体をアップロードする1つの呼び出しがより高速になり、メモリ効率が向上します。その方法を知っている人はいますか?
UBOはこの問題に最適だと思いますが、Androidでは使用できませんか?
これに対するより良い解決策を知っている人はいますか?どうもありがとう!
Galaxy SIIユーザーはあなた次第です^_^