4

SDL のドキュメントは、色空間についてあまり言及していないようです。SDL_SetVideoModeまたはの SRGB フラグ/パラメータが表示されませんSDL_GL_SetAttribute。FrameBuffer 0に書き込むときに、SDLがOpenGLに色補正を実行するように依頼することはまったく可能ですか? GLUT はその機能を提供できるようです

SDL がそれを実行できない場合、通常の回避策は何ですか? 有効にして sRGB テクスチャにGL_FRAMEBUFFER_SRGBレンダリングし、それを無効にして FrameBuffer 0 にレンダリングすることを検討していFRAMEBUFFER_SRGBます。もっと良いアイデアはありますか?

4

3 に答える 3

5

もう少し正確に言うと、呼び出しglEnable(GL_FRAMEBUFFER_SRGB)て Framebuffer 0 を SRGB フレームバッファにするだけです。

SDL2 を使用している場合は、init 中に呼び出して機能を要求する必要がありSDL_GL_SetAttribute(SDL_GL_FRAMEBUFFER_SRGB_CAPABLE, 1)ますが、以前のバージョンの SDL を使用している場合は、事前に要求してもグラフィックス ドライバーは気にしないようです。

于 2013-12-01T01:52:31.083 に答える
4

「通常の回避策」は「SDL を使用しない」ことです。ツールがサポートしていない場合、ツールはサポートしていません。それだけです。

内部sRGB画像にレンダリングするための提案された回避策は...あなたが思っているほど役に立ちません。

それはうまくいきますか?はい、色が適切にガンマ補正された画像を取得するという意味で (有効または無効にするためではありませんGL_FRAMEBUFFER_SRGB)。ただし、非線形の 24 ビット sRGB 色空間は線形の 24 ビット linearRGB 色空間にうまく変換されないため、画質がいくらか低下します。色の定義が失われます。

sRGB 画像を直接表示できるポイントは、その変換とその結果としての色定義の損失を回避することです。

それらのアーティファクトと一緒に暮らすことができるかどうかは、あなた次第です。SDL を使用したり、必要なことを実行させるために SDL をハッキングしたりすることはできるだけ避けたいと思います。

于 2013-05-03T11:05:22.760 に答える