パフォーマンス上の理由から、2D レンダリングと 3D レンダリングを分離しました。QGLFramebuffer はターゲットとしてのマルチサンプリングをサポートしていないため、タイプごとに 2 つの QGLFramebufferObjects がありますGL_TEXTURE_2D
。マルチサンプリング バッファへの描画が完了すると、ピクセル値が解決される「通常の」QGLFramebufferObject にブリットされます。これがレンダー タイプの 1 つまたは両方に対して行われると、バッファは 2D の「レイヤ」を 3D のレイヤにブレンドするシェーダへのテクスチャ入力として使用されます。
私はすべての 2D 作業に QPainter を使用し、QPainter は Qt 型にしかペイントできないため、純粋な OpenGL オブジェクトの代わりに QGLFramebufferObjects を使用することに固執していることに言及する必要があります。
このプロセスは正常に機能しますが、アンチエイリアシングが暗すぎて、ほとんど暗いアウトラインのように見えます。
いくつかの調査を行った後、これは sRGB の代わりに線形色空間を使用することにあることがわかりました (こことここ)。そこで、FBO ブリッティングを有効GL_FRAMEBUFFER_SRGB
にし、すべての FBO のテクスチャ ターゲットの内部タイプを に設定GL_SRGB8_ALPHA8
し、シェーダーでのブレンド計算の前に sRGB->Linear を実行しました (最終出力の前に再び戻ってきました)。
しかし、それは機能していません。明るすぎる、暗すぎる、またはまったく同じに見えます。フレーム全体が暗すぎる/明るすぎる場合はいつでも、色空間の変換に失敗したことが原因であることがわかります. しかし、それがまったく同じに見えるとき - 何が起こっているのですか!?
GL_FRAMEBUFFER_SRGB
状態を有効にするための操作の順序、ブリッティングが色空間に影響を与えるかどうか、およびアンチエイリアシングが正しく見えるようにするためにどの FBO が sRGB にある必要があるかを誰かが説明することで、私は本当にやり遂げることができます。または、私は完全に間違っていますか?これらのマルチサンプリング アーティファクトを引き起こしているのは、まったく別のものですか?