V
VikingGe
Gast
Guten Abend,
folgendes Problem treibt mich gerade in den Wahnsinn: Ich möchte einfach nur gamma-korrekt rendern können.
Wenn ich das richtig verstanden habe, muss man lediglich seine Bild-Texturen in sRGB-Formaten laden (kein Problem) und am Schluss einfach in einen sRGB-Framebuffer rendern. So weit, so gut, nur habe ich keine Ahnung, wie man letzteres sinnvoll anstellt.
- Man kann ja eine sRGB-Textur an ein FBO binden und dann einfach das gerenderte Bild, das im Idealfall ohnehin in 16-Bit RGB vorliegt, dort hinein rendern. An sich ebenfalls kein Problem, aber wien bekommt man die dann auf den Bildschirm, ohne dass a) fälschlicherweise noch einmal Gamma-Korrektur angewendet wird und man b) keine Abstriche bei der Farbgenauigkeit macht?
- Man kann zumindest in der Theorie einen sRGB-Default-Framebuffer erzeugen, der einem das Geraffel eigentlich ersparen sollte. Der Punkt ist nur, das funktioniert nicht:
Bin unter Linux mit NVidia-Treiber 349.19 unterwegs. GL_ARB_framebuffer_srgb wird selbstredend unterstützt, aber das ganze scheitert in dem Fall ja schon an der Kontext-Erstellung.
Jemand Ideen?
folgendes Problem treibt mich gerade in den Wahnsinn: Ich möchte einfach nur gamma-korrekt rendern können.
Wenn ich das richtig verstanden habe, muss man lediglich seine Bild-Texturen in sRGB-Formaten laden (kein Problem) und am Schluss einfach in einen sRGB-Framebuffer rendern. So weit, so gut, nur habe ich keine Ahnung, wie man letzteres sinnvoll anstellt.
- Man kann ja eine sRGB-Textur an ein FBO binden und dann einfach das gerenderte Bild, das im Idealfall ohnehin in 16-Bit RGB vorliegt, dort hinein rendern. An sich ebenfalls kein Problem, aber wien bekommt man die dann auf den Bildschirm, ohne dass a) fälschlicherweise noch einmal Gamma-Korrektur angewendet wird und man b) keine Abstriche bei der Farbgenauigkeit macht?
- Man kann zumindest in der Theorie einen sRGB-Default-Framebuffer erzeugen, der einem das Geraffel eigentlich ersparen sollte. Der Punkt ist nur, das funktioniert nicht:
Code:
[EXCEPTION] Caught unhandled exception of type SDL2RenderContextCreationError
[EXCEPTION] In file ve_winsystem_sdl2_context_opengl.cpp, line 80:
[EXCEPTION] SDL2: Failed to create window:
[EXCEPTION] Couldn't find matching GLX visual <<< Problem
[EXCEPTION] Stack trace, most recent call first:
[...]
Code:
SDL2->SDL_GL_ResetAttributes();
SDL2->SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, this->_contextProperties->versionMajor);
SDL2->SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, this->_contextProperties->versionMinor);
SDL2->SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
// TODO Find out why this does not work
SDL2->SDL_GL_SetAttribute(SDL_GL_FRAMEBUFFER_SRGB_CAPABLE, 1);
if (this->_contextProperties->debugContext)
SDL2->SDL_GL_SetAttribute(SDL_GL_CONTEXT_FLAGS, SDL_GL_CONTEXT_DEBUG_FLAG);
this->_window = SDL2->SDL_CreateWindow(
"An SDL2 window",
SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED,
1024, 600,
SDL_WINDOW_OPENGL);
Bin unter Linux mit NVidia-Treiber 349.19 unterwegs. GL_ARB_framebuffer_srgb wird selbstredend unterstützt, aber das ganze scheitert in dem Fall ja schon an der Kontext-Erstellung.
Jemand Ideen?
Anhänge
Zuletzt bearbeitet: