0

私は約 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ユーザーはあなた次第です^_^

4

2 に答える 2