私は、画面が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とバッファを共有する方法はありませんか?