私は Android とネイティブ C++ で Android 用のシーン描画を実装していegl 1.1
ます。glSurfaceView
現在、バックバッファとフロントバッファがスワップされているときに、「onDrawFrame」の最後に表示されるバックバッファに描画できるアンドロイドを使用しています。
私の問題はこれです-バックバッファーを表示し、スワップしていないかのように書き込みを続行できる必要があります。この要求の背後にある理由は、シーンが非常に大きく、各フレームを構築することは不可能であり、ユーザーが長時間待たなければならないため、描画の終了も待機していないためです。
つまり、段階的にシーンを構築する必要があります。レンダリング中の特定の時点で、時間だと判断しeglSwapBuffers
、バック バッファーから描画されたコンテンツを表示する を呼び出しますが、書き込みを続けると、明らかに同期していない「前のフロント バッファー」に書き込みます。 . (これまでに描いたものは含まれていません)。
私の唯一の選択肢は、スワップする前にバックバッファをコピーすることです。疑似:
- バックバッファに描画
- バックバッファを一時バッファにコピー
- スワップ
- 一時バッファを(新しい)バック バッファにコピーします
- より多くのものをバック バッファーに描画する
- 等々...
私の質問 - ステップ 2、4 を実行する方法はありますか?
glCopyPixels
この場合、役に立ちますか?例?- ですか
glBlitFramebuffer
?
それとも、私はこれにすべて間違って近づいていますか?
私がすでにやったこと:
- に設定
EGL_SWAP_BEHAVIOR
してみましEGL_BUFFER_PRESERVED
たが、特定のデバイスでしか動作しないようです ( khronos notesで説明されているように) :
一部のサーフェスでは、カラー バッファーの内容を保持するかどうかをアプリケーションで制御できます。
- 各フレームでシーンを再レンダリングする - 不可能。これが推奨されていることを何度も読みました。