2012-03-25 48 views
11

glTexImage2DglTexSubImage2Dピクセルのバッファをテクスチャに渡す唯一の方法はありますか?セットアップ機能では、私が使用して瞬間glTexImage2DでOpenGLのテクスチャを更新する

glTexImage2Dバッファとしてnullを渡し、その後、私は、各反復で新しいバッファのデータをglTexSubImage2D呼び出すレンダリングループ上。

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

答えて

23

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

1)glTexImage2D - 最も遅い一つは、内部データ構造を再作成。

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

3)レンダリングテクスチャFBO - GPU上で完全にテクスチャを非常に高速に更新します。 https://stackoverflow.com/a/10702468/1065190

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

+0

私はFBOが最良の選択肢だと見ていますが、私のテクスチャはGL_LUMINANCEパラメータを使用する必要があり、FBOがそのような機能をサポートしていないことがわかりました。 glTexSubImage2Dを使用する唯一のオプションはありますか? – PerracoLabs

+0

デスクトップOpenGLまたはOpenGL ESを使用していますか? AndroidでOpenGL ESを使用する –

+0

GL_LUMINANCEを使う理由は、YUV420spデータをシェーダに渡さなければならないということです。そこでは、glTexSubImage2Dを呼び出して2つのプレーンを渡す必要があります.1つはY、もう1つはUVです。したがってGL_LUMINANCEを使用する必要があります。データをシェーダに渡す前にYUVをRGBに変換するオプションは、スピードの理由からオプションではありません。 – PerracoLabs

関連する問題