サンプルの場所が一致しないために適切なダウンサンプリングが行われなかったため、同じ問題に遭遇しました。私にとってうまくいったのは:
- ダウンサンプリングのためにブリットし、これをウィンドウ バッファに描画/ブリットするための、同一のアタッチメント、形式、および寸法 (テクスチャまたはレンダ バッファがアタッチされたもの) を持つ別の「単一サンプル」FBO
- GLSL フラグメント シェーダーを使用してフラグメントごとに対応するすべてのサンプルを渡すことにより、入力と同じサンプル数を持つマルチサンプル テクスチャを使用して、マルチサンプル ウィンドウ バッファーにレンダリングします。これは、サンプル シェーディングを有効にして機能し、サンプルごとにライト、シャドウ、AO などを計算できるため、ディファード シェーディングの過剰なアプローチです。
- また、GLSL を使用してシングル サンプル フレームバッファへのずさんなマニュアル ダウンサンプリングも行いました
texelFetch()
。
マルチサンプリングで物事は本当に遅くなりました。CSAA は MSAA よりも優れたパフォーマンスを発揮しましたが、パフォーマンスが問題になる場合や、 ARB_texture_multisampleなどの新しい拡張機能が必要な場合は、代替手段として FXAA シェーダーを後処理に検討することをお勧めします。
GLSL でサンプルにアクセスする:
vec4 texelDownsampleAvg(sampler2DMS sampler,ivec2 texelCoord,const int sampleCount)
{
vec4 accum = texelFetch(sampler,texelCoord,0);
for(int sample = 1; sample < sampleCount; ++sample) {
accum += texelFetch(sampler,texelCoord,sample);
}
return accum / sampleCount;
}
11) 異なるビット サイズのバッファ間でブリットを許可する必要がありますか?
Resolved: Yes, for color buffers only. Attempting to blit
between depth or stencil buffers of different size generates
INVALID_OPERATION.
13) BlitFramebuffer の色空間変換はどのように指定する必要がありますか? コンテキスト クランプ状態がブリットに影響することを許可しますか?
Resolved: Blitting to a fixed point buffer always clamps,
blitting to a floating point buffer never clamps. The context
state is ignored.