egldisplay: Support creating a window with sRGB framebuffer

This commit is contained in:
rdb 2020-09-06 10:14:28 +02:00
parent 24fb2a2c88
commit 005d187ac4
2 changed files with 32 additions and 1 deletions

View File

@ -223,6 +223,20 @@ choose_pixel_format(const FrameBufferProperties &properties,
int err = eglGetError();
if (_context && err == EGL_SUCCESS) {
if (_visual) {
// This is set during window creation, but for now we have to pretend
// that we can honor the request, if we support the extension.
if (properties.get_srgb_color()) {
const char *extensions = eglQueryString(_egl_display, EGL_EXTENSIONS);
if (extensions != nullptr) {
vector_string tokens;
extract_words(extensions, tokens);
if (std::find(tokens.begin(), tokens.end(), "EGL_KHR_gl_colorspace") != tokens.end()) {
best_props.set_srgb_color(true);
}
}
}
_fbprops = best_props;
delete[] configs;
return;

View File

@ -27,6 +27,14 @@
#include "nativeWindowHandle.h"
#include "get_x11.h"
#ifndef EGL_GL_COLORSPACE_KHR
#define EGL_GL_COLORSPACE_KHR 0x309D
#endif
#ifndef EGL_GL_COLORSPACE_SRGB_KHR
#define EGL_GL_COLORSPACE_SRGB_KHR 0x3089
#endif
TypeHandle eglGraphicsWindow::_type_handle;
/**
@ -233,7 +241,16 @@ open_window() {
return false;
}
_egl_surface = eglCreateWindowSurface(_egl_display, eglgsg->_fbconfig, (NativeWindowType) _xwindow, nullptr);
EGLint attribs[4];
EGLint *attribs_p = nullptr;
if (eglgsg->get_fb_properties().get_srgb_color()) {
attribs[0] = EGL_GL_COLORSPACE_KHR;
attribs[1] = EGL_GL_COLORSPACE_SRGB_KHR;
attribs[2] = EGL_NONE;
attribs[3] = EGL_NONE;
attribs_p = attribs;
}
_egl_surface = eglCreateWindowSurface(_egl_display, eglgsg->_fbconfig, (NativeWindowType) _xwindow, attribs_p);
if (eglGetError() != EGL_SUCCESS) {
egldisplay_cat.error()
<< "Failed to create window surface.\n";