1

この時点で、テクスチャを 2 回レンダリングしたいと考えていますが、異なるフィルターを使用しています。異なるフィルターでテクスチャを 2 回保存するのは非常に悪い考えのように思えます。それで、外出先でフィルターを変更するだけのアイデアを思いつきましたが、どれくらい速いですか?

私はこのようにすることを考えています:

// First render call
BindTexture(...);
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
RenderObject( ... );

BindTexture(...);
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
RenderObject( ... );

最後の質問は、実行時にテクスチャ パラメータを更新する速度はどのくらいかということです。

4

2 に答える 2

2

これは、使用している GL の実装に大きく依存します。パフォーマンス関連のものと同様に、ターゲット ハードウェア上の特定のアプリケーションに対して十分に高速かどうかをテストして確認してください。

GL の比較的最近のバージョンには、さまざまなテクスチャ パラメータで作成できるオブジェクトであるサンプラと呼ばれる機能が含まれています。多数の異なるサンプラーを作成し、既存のテクスチャを再構成するのではなく、必要に応じてこれらを交換できます。これにより、必要に応じて、同じテクスチャに対して 2 つの異なるテクスチャ サンプリング状態を使用することもできます。これは一般的に高速である必要がありますが、繰り返しになりますが、特定の状況で何が最適に機能するかをテストして確認してください.

于 2013-06-12T00:05:21.590 に答える
2

それで、外出先でフィルターを変更するだけのアイデアを思いつきましたが、どれくらい速いですか?

GPU にとっては、値が変化するのは 1 つのレジスタにすぎません。なのでかなり安いです。しかし、あなたの書き方はあまり意味がありません。

フィルタリング パラメータはテクスチャ オブジェクトの一部であるため、問題のテクスチャ オブジェクトの glBindTextureに設定します。

異なるフィルタリング パラメータで同じテクスチャを使用したい場合は、その間に再バインドする必要はありません。

また、OpenGL-3.3 以降では、サンプラーと呼ばれるデータのないオブジェクト (データのないオブジェクトは共有できません) のクラスがあります。サンプラはテクスチャ サンプリング パラメータ (フィルタリングなど) を収集し、テクスチャはデータを提供します。したがって、フィルタリング パラメータを頻繁に切り替えたい場合、または大量のテクスチャ セットに共通のサンプリング パラメータ モードがある場合は、複数のテクスチャを提供する単一のサンプラーを使用してこれを行うことができます。

http://www.opengl.org/wiki/Sampler_Objectを参照してください

于 2013-06-12T10:05:43.350 に答える