5

の方法 glReadPixelsで定期的にスナップショットを撮るために使用しています。アプリの要件に従ってデータを保存し続けるために、定期的にこのスナップショットを作成する必要があります。drawFrameGLSurfaceView.Renderer

ただしglReadPixels、パフォーマンスは非常に遅く、ラグが発生します。メソッドの使用方法は次のとおりです。

gl.glReadPixels(0, 0, 1280, 752, GL10.GL_RGBA,GL10.GL_UNSIGNED_BYTE, bb);

使用する代替手段はありますglReadPixelsか? ラグを発生させずに画像を保存するにはどうすればよいですか?

4

1 に答える 1

10

それがAndroidで利用できるかどうかはわかりませんが、おそらくPBO(ピクセルバッファーオブジェクト)によってパフォーマンスが向上します。このOpenGL.orgスレッドを参照してください。

しかし、奇跡を期待しないでください!1280 * 752 RGBA画像では、フレームごとに3.67MBのデータを転送します。Androidの数値はわかりませんが、メモリ帯域幅またはハードドライブの書き込みのボトルネックに直面していると思います。readPixelのサイズを小さくしてパフォーマンスを大幅に向上させると、それが問題であることがわかります。

また、「A」コンポーネントが必要ですか?たぶんRGBの読み返しの方が速いでしょう。さまざまな形式で読み返してみてください。OpenGLメモリ表現によりよくマッピングされるため、他のものよりもはるかに高速なものもあります。たとえば、BGRAはRGBAよりも高速である可能性があります。OpenGLの形式と一致しない形式を要求する場合は、操作中に各ピクセルを変換する必要があります。

于 2011-11-22T06:16:06.133 に答える