4

2D テクスチャが 2 つあります。最初の MSAA テクスチャは、 のターゲットを使用しGL_TEXTURE_2D_MULTISAMPLEます。2 番目の非 MSAA テクスチャは、 のターゲットを使用しGL_TEXTURE_2Dます。

ARB_texture_multisample に関するOpenGL の仕様によるとGL_NEAREST、MSAA テクスチャが描画されている場合にのみ有効なフィルタリング オプションです。

この場合、これらのテクスチャは両方ともGL_COLOR_ATTACHMENT0、個々の Framebuffer オブジェクトを介してアタッチされています。それらの解像度も同じサイズです (私の知る限り、これは MSAA を非 MSAA にブリットするときに必要です)。

したがって、現在の制約を考えると、MSAA 保持 FBO を非 MSAA 保持 FBO にブリットした場合、両方のテクスチャが既にレンダリングされているためGL_NEAREST、フィルタリング オプションとして使用する必要があるか、または有効ですか?GL_LINEAR

4

1 に答える 1

6

フィルタリング オプションは、テクスチャからサンプリングする場合にのみ機能します。テクスチャにレンダリングする間、それらは何の役割も果たしません。

マルチサンプル テクスチャからサンプリングする場合、GL_NEARESTサポートされている唯一のフィルタ オプションです。sampler2DMSまた、GLSL コードで特別なサンプラー タイプ ( ) を、対応するサンプリング命令と共に使用する必要があります。

GL_LINEARマルチサンプル テクスチャ用にフィルタを設定するのはエラーであると言っているスペックは実際には何も見つかりません。しかし、フィルターはまったく使用されていません。OpenGL 4.5 仕様から (強調を追加):

シェーダーでマルチサンプル テクスチャにアクセスすると、フェッチするテクセルを記述する整数の 1 つのベクトルと、フェッチするテクセル内のサンプルを決定するセクション 14.3.1 で説明されているサンプル番号に対応する整数が使用されます。マルチサンプル テクスチャ ターゲットでは、標準のサンプリング命令は許可されず、フェッチによるフィルタリングは実行されません。

を使用したマルチサンプル テクスチャと非マルチサンプル テクスチャ間のブリッティングでglBlitFramebuffer()は、フィルタ引数は または のいずれGL_LINEARGL_NEARESTですが、この場合は無視されます。4.5仕様から:

読み取りフレームバッファがマルチサンプリングされ (SAMPLE_BUFFERS の有効な値が 1)、描画フレームバッファがマルチサンプリングされていない (SAMPLE_BUFFERS の値が 0) 場合、ソース内の各ピクセル位置に対応するサンプルは、単一のサンプルに変換されてから、目的地。フィルタは無視されます。

この場合、ソースと宛先の四角形が同じサイズである必要があるという制限があるため、これは理にかなっています。

読み取りフレームバッファまたは描画フレームバッファのいずれかがマルチサンプリングされ、BlitFramebuffer に提供されたソースと宛先の長方形の寸法が同一でない場合、INVALID_OPERATION エラーが生成されます。

フィルタは画像が引き伸ばされたときにのみ適用されるため、この場合は問題になりません。

于 2015-06-09T02:49:41.503 に答える