web-dev-qa-db-ja.com

glTexImage2Dを使用してOpenGLのテクスチャを更新する

あります glTexImage2D そして glTexSubImage2D ピクセルのバッファをテクスチャに渡す唯一の方法は?

現時点ではセットアップ機能で使用しています glTexImage2D nullをバッファとして渡し、レンダリングループで呼び出します glTexSubImage2D 反復ごとに新しいバッファデータを使用します。

しかし、テクスチャが寸法などのプロパティを変更しないことを知っているので、実際のピクセルデータをレンダリングテクスチャに渡すためのより効率的な方法はありますか?

15
PerracoLabs

最新のOpenGLには、2Dテクスチャを更新するための4つの異なる方法があります。

  1. glTexImage2D-最も遅いもので、内部データ構造を再作成します。

  2. glTexSubImage2D-少し高速ですが、画像のパラメータ(サイズ、ピクセル形式)を変更することはできません。

  3. FBOを使用したテクスチャへのレンダリング-GPU上でテクスチャを完全に更新します。非常に高速です。詳細については、この回答を参照してください: https://stackoverflow.com/a/10702468/106519

  4. ピクセルバッファオブジェクトPBO-CPUからGPUへの高速アップロード用。OpenGLESでは(まだ)サポートされていません。

28
Sergey K.