mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-01 17:35:34 -04:00
egldisplay: Support creating a window with sRGB framebuffer
This commit is contained in:
parent
24fb2a2c88
commit
005d187ac4
@ -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;
|
||||
|
@ -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";
|
||||
|
Loading…
x
Reference in New Issue
Block a user