/**************************************************************************** ** ** Copyright (C) 2022 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:COMM$ ** ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** $QT_END_LICENSE$ ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ******************************************************************************/ #include "qxcbglxwindow.h" #include "qxcbscreen.h" #include #include QT_BEGIN_NAMESPACE QXcbGlxWindow::QXcbGlxWindow(QWindow *window) : QXcbWindow(window) { } QXcbGlxWindow::~QXcbGlxWindow() { } const xcb_visualtype_t *QXcbGlxWindow::createVisual() { QXcbScreen *scr = xcbScreen(); if (!scr) return QXcbWindow::createVisual(); qCDebug(lcQpaGl) << "Requested format before FBConfig/Visual selection:" << m_format; Display *dpy = static_cast(scr->connection()->xlib_display()); const char *glxExts = glXQueryExtensionsString(dpy, scr->screenNumber()); int flags = 0; if (glxExts) { qCDebug(lcQpaGl, "Available GLX extensions: %s", glxExts); if (strstr(glxExts, "GLX_EXT_framebuffer_sRGB") || strstr(glxExts, "GLX_ARB_framebuffer_sRGB")) flags |= QGLX_SUPPORTS_SRGB; } const auto formatBackup = m_format; XVisualInfo *visualInfo = qglx_findVisualInfo(dpy, scr->screenNumber(), &m_format, GLX_WINDOW_BIT, flags); if (!visualInfo) { qCDebug(lcQpaGl) << "No XVisualInfo for format" << m_format; // restore initial format before requesting it again m_format = formatBackup; return QXcbWindow::createVisual(); } const xcb_visualtype_t *xcb_visualtype = scr->visualForId(visualInfo->visualid); XFree(visualInfo); qCDebug(lcQpaGl) << "Got format:" << m_format; return xcb_visualtype; } QT_END_NAMESPACE