パフォーマンス上の理由から、2Dと3Dのレンダリングが分離されています。 QGLFramebufferはGL_TEXTURE_2D
を使ってマルチサンプリングをサポートしていないので、マルチサンプリングされたバッファに描画が行われると、ピクセル値が解決される '通常の' QGLFramebufferObjectにblittedされるため、各タイプに2つのQGLFramebufferObjectsがあります。これがレンダリングタイプの一方または両方に対して行われると、バッファは3D 'レイヤー'を3Dレイヤーにブレンドするシェーダーへのテクスチャー入力として使用されます。マルチサンプルのQGLFramebufferObjectでのsRGBカラーの使用
すべての2D作業にQPainterを使用し、QPainterがQtタイプにしかペイントできないため、私は純粋なOpenGLオブジェクトの代わりにQGLFramebufferObjectsを使用することに固執しています。
このプロセスが正常に動作し、アンチエイリアシングが暗すぎる除いて、それはほとんど暗いアウトラインのようになります。私はこれがダウンして代わりにリニアカラースペースを使用することにした発見されたいくつかの研究を行った後
sRGB(hereおよびhere)。そこで私はFBOのblittingにGL_FRAMEBUFFER_SRGB
を有効にし、すべてのFBOのテクスチャターゲット内部タイプをGL_SRGB8_ALPHA8
に設定し、シェーダのブレンド計算の前にsRGB-> Linearを実行しました。
しかし、動作していません。あまりにも明るく、暗すぎたり、まったく同じに見えます。フレーム全体が暗すぎる/明るい場合は、色空間変換が欠落していることがわかります。しかし、それがまったく同じに見えるとき - 何が起こっているのですか?
GL_FRAMEBUFFER_SRGB
状態を有効にするための操作の順序を説明する人物、blittingが色空間に影響を与える場合、アンチ・エイリアシングが正しく見えるようにするためにはどのFBOがsRGBにある必要があるのですか?あるいは、私は完全に間違っていますか?それは、これらのマルチサンプリング・アーティファクトを引き起こしているものですか?
あなたは本当に正しいです、私はより密接に、あなたが言ったことを述べているはずです。しかし、それはQtがビューポートのためのバッファストレージタイプを述べる能力を与えないように思われます - それは印象的ではありません。それだけでなく、Qtはそれぞれ異なる状態のコンポーネントをレンダリングしていますが、これは異なるSOの質問です...最後に、シェーダの出力を 'GL_FRAMEBUFFER_SRGB'を持たないバッファにレンダリングしようとすると、明るすぎたり暗すぎたりしますか? – cmannett85
@ cbamber85:シェーダーが線形値を書き込んでsRGBとして保存するとしたら、それは間違っています。シェーダが何を期待しているのか、それはすべてです。 –