2

ビデオシーケンス用のビューアを開発しています。各行の同時計算 (フェッチ) によるスキャンライン ベースのアプローチを使用します。私が取得するすべての行は、R、G、B、A などの複数のバッファ (チャンネル) で区切られています。

すべてのチャンネルを 1 つのテクスチャに結合したいと考えています。複数のコンポーネントをアップロードできる一時バッファを割り当て、それを glTexSubImage2D(...) で openGL に渡すことで、自分でやろうと考えましたが、ソリューションは非常に高価です...特に画像ストリーミングの場合!

次に、マルチテクスチャリングについて考えました。要するに、チャンネルごとに個別のテクスチャ (GL_LUMINANCE?) を作成し、それを GLSL シェーダーと組み合わせます。残念ながら、マルチテクスチャリングの経験はありません。マルチテクスチャリングの完全なチュートリアルへのリンクを教えてください。

私がインターネットから掘り出すことができる最後のことは、バッファ テクスチャで FBO を使用することです。バッファ テクスチャでは、複数のインデックスを持つバッファ オブジェクトを使用します。しかし、バッファ オブジェクト内のインデックスに関する詳細と、それが私のニーズを満たすかどうかについては、これ以上の詳細を得ることができませんでした。

とにかく、ここで最後の質問です。4 つの別個のコンポーネント (バッファ) から 1 つのテクスチャを作成することは可能ですか? またはより正確に:ビデオシーケンスのコンテキストで、4つの結合されたバッファーを効率的に描画する方法は?

4

1 に答える 1

2

マルチテクスチャリングは確かに進むべき道です。最も重要なことは、チャンネルごとに異なるフォーマットを使用できることです。これにより、4:2:2 サブサンプリングなどが可能になります。

FBO はイメージ ソースではなく描画ターゲットであるため、適切な方法とは言えません。

マルチテクスチャリングの背後にある基本的な考え方は、多くのいわゆるテクスチャ ユニットがあり、そこで OpenGL 呼び出しglActiveTextureが次の呼び出しで機能するユニットを選択するglBindTextureことです。どのテクスチャがどこにバインドされているかを記録する必要がありますが、それほど難しくはありません。

フラグメント シェーダーでは、いわゆるsampler uniformを介してテクスチャからサンプルを取得できます。サンプラ ユニフォームは、テクスチャ ユニットにバインドされます。glActiveTexture重要な落とし穴は、GL_TEXTURE0 + nサンプラーに渡されるユニット番号glUniformiがちょうどn.

データのアップロードのみに関心がある場合は、テクスチャがどのテクスチャ ユニットにバインドされているかは問題ではありません。(個人的には、OpenGL の新しいバージョンには、ソースとして使用できず、画像アップロード用のテクスチャのバインドのみを許可し、テクスチャ ターゲットの優先順位がない場合にのみ、特別なテクスチャリング ユニットが必要です。)

于 2012-11-19T10:48:14.073 に答える