2

これまでのところ、私は使用しました:

テクスチャの作成:

glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, texture[1]);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 0);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 4);
glTexImage2D(GL_TEXTURE_2D, 0,GL_COMPRESSED_RGBA_S3TC_DXT5_EXT  , tWidth,Height, 0, GL_RGBA, GL_UNSIGNED_BYTE,Data);
glGenerateMipmap(GL_TEXTURE_2D);

テクスチャの使用法:

glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, texture[1]);

テクスチャをメモリに保持し、シェーダーで使用するための効率的なソリューションを探しています。PBO と TBO (およびその他のいくつかのソリューション) について少し読んだことがありますが、圧縮とミップマップの例を見つけることができませんでした。何を選択することをお勧めしますか? どちらが速いですか?また、圧縮やミップマップとどのように連携していますか?

4

1 に答える 1

3

バッファーを使用することで、ドライバーはデータ テクスチャに直接アクセスできるため、すべてが高速になると考えました。

これが問題の根本です。

を呼び出すと、テクスチャ オブジェクトにストレージを割り当てるglTexImage2Dように OpenGL に指示されます。この呼び出しの後、テクスチャにはその画像データ用のストレージがあります。を呼び出すようなもので、テクスチャ メモリのみを対象としています。テクスチャは、提供されたメモリ ポインターから読み取ろうとしていません (呼び出し後ではありません)。削除できます (通常は削除する必要があります)。テクスチャは現在、そのデータを内部的に持っています。malloc

そして、テクスチャを変更するのはどうですか?(たとえば、すべてがメモリに収まらない場合は?)

より多くのメモリ (あなたが話しているバッファ オブジェクト) を割り当てても、メモリに収まる可能性は高くなりません。メモリが不足している場合は、メモリが不足しています。より多くの割り当てを行うことは役に立ちません。

さらに重要なことに、バッファ オブジェクトはテクスチャと同じメモリの問題を抱えています。ドライバーがそのように感じた場合、GPU メモリからそれらを削除します。だから、あなたは何も得ていません。したがって、バッファ オブジェクト ストレージはテクスチャ オブジェクト ストレージと同じです。

最も重要なのは、PBO と TBO がそのように機能しないことです。

「ピクセル バッファ オブジェクト」は、テクスチャのストレージにピクセル データ非同期的にコピーする方法にすぎません。コピーが完了すると、バッファはテクスチャと関連付けられなくなります。テクスチャのコンテンツを動的に変更しない限り、PBO は全体的なテクスチャ パフォーマンスとはほとんど関係ありません。

バッファ テクスチャは、バッファ オブジェクトをテクスチャのストレージとして使用する方法です。しかし、バッファ テクスチャは別のテクスチャタイプです。2D テクスチャが 3D テクスチャと異なるのと同じように、それらは 2D テクスチャとは異なります。バッファ テクスチャはミップマップできず、配列レイヤを持つことも、フィルタリングやサンプリング パラメータを持つこともできず、非常に限られた一連の画像フォーマットしか使用できず (圧縮されているものもありません)、 および でのみアクセスできますtexelFetch。その同類。それらは 1 次元です (1D テクスチャではありません)。

バッファー テクスチャは、シェーダーが GPU メモリの線形配列から直接読み取る方法にすぎません。2D テクスチャを単純にバッファ テクスチャに置き換えることはできません。シェーダーとすべてを再設計する必要があります。

全体として、OpenGL について多くの誤解をしているようです。

于 2012-12-01T15:59:28.657 に答える