これらの値をテクスチャに書き込んで使用する最も効率的な方法 (ogl 関数) は何ですか?
良い方法は、不要な余分なコピーを避けることです。したがって、アドレス空間にマップするPixel Buffer Objectsを使用し、それを使用してデータを直接生成できます。
フレームごとにこのデータを更新する必要があるため、CPU と GPU 間の暗黙的な同期を強制しないように、効率的なバッファー オブジェクト ストリーミングも探す必要があります。シナリオでこれを行う簡単な方法は、フレームごとに進める 3 つの PBO のリング バッファーを使用することです。
他の場所で提案されたもので、使用したくないと思います (間違っている場合はお知らせください):
- glDrawPixels() - これを呼び出すたびに割り込みが発生し、特に高解像度では遅くなるという印象を受けました。
ドライバーが行うことは、完全に実装固有です。「毎回割り込みを発生させる」というのは、ここでは有用なイメージではないと思います。GL 実装が背後で行う作業を完全に過小評価しているようです。GL 呼び出しは、GPU に送信される一部のコマンドに対応しません。
しかし、使用しないことglDrawPixels
は依然として良い選択です。これはあまり効率的ではなく、非推奨になり、最新の GL から削除されました。
- シェーダーを使用する - シェーダーがフレームごとに配列内のデータ量を受け入れて処理できるとは思わない (受け入れられるデータ量の上限が低すぎると他の場所で言及された)
あなたはこれを完全に間違っています。シェーダーを使用しない方法はありません。自分で作成しない場合 (GL の古い「固定機能パイプライン」を使用するなど)、GPU ドライバーがシェーダーを提供します。これらの以前の固定関数ステージのハードウェア実装は、プログラマブル ユニットによって完全に置き換えられました。したがって、シェーダーで実行できない場合は、GPU で実行できません。また、独自のシェーダーを作成することを強くお勧めします (最新の GL ではこれが唯一のオプションです)。