2017-01-15 43 views
1

私は、画面がCPUによってレンダリングされる純粋な2Dプロジェクトに取り組んでおり、テクスチャとして表示したいのですが、フレームごとに画像全体をアップロードしたくありません。どの部分が変更されたのか分からないので、画像全体が無効であると仮定します。OpenGL ES 3.0:テクスチャへのゼロコピーCPUレンダリング?

私はいくつかのblitを使って別のレイヤーを追加する必要があります。私の初期のテストではCPUだけでパフォーマンスの問題が発生する可能性があることがわかったので、GPUアクセラレーションが必要です(2Dは、最近では一般的ではありません...)。

私のターゲットプラットフォームは、GPUとCPUがメモリを共有する組み込みシステム(ARM)なので、理論的に私はコピーなしでこれを行うことができます。選択したプラットフォームは、OpenGL 2.1およびOpenGL ES 3.0をサポートしています。

私は、バッファオブジェクトがglMapBufferRange()によってマッピングできることを理解しています。

  • UNIFORM_BUFFER:

  • フルスクリーン画像を保存するには小さすぎるSHADER_STORAGE_BUFFER:サポートされている唯一のES 3.1

  • シェーダイメージのロードストア:サポートされている唯一の私は、以下の可能性の後に見てきましたESから3.1

  • バッファテクスチャ:ES 3.0はサポートしていません(サポートされていますか?)

  • ピクセルバッファオブジェクト:シェーダからそれらに到達できません。テクスチャを更新すると、になります。クライアントのメモリからコピーするよりも高速であるかどうかはわかりません(すべて同じRAMチップにあることを考慮しています:))

  • プレーンテクスチャ:バッファオブジェクトではなく、クライアントプロセスメモリにマップできません

私は何かお見逃しですか? ES 3.0に、CPUから書き込んでフラグメントシェーダーから読み取ることができる大量のデータを含むGPUとバッファを共有する方法はありませんか?

答えて

0

部分的にテクスチャを変更することができますGLES20.glTexSubImage2D

関連する問題