From 7266bd459e7cf8d4f4e3ad67b4ff23dea4fbfd0e Mon Sep 17 00:00:00 2001 From: Niclas Rosenvik Date: Tue, 23 Mar 2021 11:26:21 +0000 Subject: [PATCH] Fix GLX on non-linux X11 systems Some parts of the GLX code is only enabled for Linux. This makes builds on other X11 supported platforms break when GLX is found. To fix this enable these parts of the code when Qt feature xcb-glx-plugin is enabled. xcb-glx-plugin has to be made public in order for QT_CONFIG(xcb_glx_plugin) to work correctly in these parts of the code. Change-Id: I6bf78b6a64787ed88c8e2fae40675244c9198c37 Reviewed-by: Laszlo Agocs Reviewed-by: Liang Qi --- src/gui/configure.cmake | 2 +- src/gui/configure.json | 2 +- src/gui/kernel/qopenglcontext_platform.h | 4 ++-- src/gui/kernel/qplatformopenglcontext.h | 2 +- src/gui/platform/unix/qunixnativeinterface.cpp | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/gui/configure.cmake b/src/gui/configure.cmake index 449bd838b7a..50063ea84d6 100644 --- a/src/gui/configure.cmake +++ b/src/gui/configure.cmake @@ -874,7 +874,7 @@ qt_feature("xcb" PRIVATE AUTODETECT NOT APPLE CONDITION QT_FEATURE_thread AND TARGET XCB::XCB AND TEST_xcb_syslibs AND QT_FEATURE_xkbcommon_x11 ) -qt_feature("xcb-glx-plugin" PRIVATE +qt_feature("xcb-glx-plugin" PUBLIC LABEL "GLX Plugin" CONDITION QT_FEATURE_xcb_xlib AND QT_FEATURE_opengl AND NOT QT_FEATURE_opengles2 EMIT_IF QT_FEATURE_xcb diff --git a/src/gui/configure.json b/src/gui/configure.json index d5816c59683..ad53dca292f 100644 --- a/src/gui/configure.json +++ b/src/gui/configure.json @@ -1371,7 +1371,7 @@ "label": "GLX Plugin", "emitIf": "features.xcb", "condition": "features.xcb-xlib && features.opengl && !features.opengles2", - "output": [ "privateFeature" ] + "output": [ "publicFeature" ] }, "xcb-glx": { "label": " XCB GLX", diff --git a/src/gui/kernel/qopenglcontext_platform.h b/src/gui/kernel/qopenglcontext_platform.h index c0e1c59fdfc..8275416f422 100644 --- a/src/gui/kernel/qopenglcontext_platform.h +++ b/src/gui/kernel/qopenglcontext_platform.h @@ -50,7 +50,7 @@ Q_FORWARD_DECLARE_OBJC_CLASS(NSOpenGLContext); #endif -#if defined(Q_OS_LINUX) +#if QT_CONFIG(xcb_glx_plugin) struct __GLXcontextRec; typedef struct __GLXcontextRec *GLXContext; #endif #if QT_CONFIG(egl) @@ -85,7 +85,7 @@ struct Q_GUI_EXPORT QWGLContext }; #endif -#if defined(Q_OS_LINUX) || defined(Q_CLANG_QDOC) +#if QT_CONFIG(xcb_glx_plugin) || defined(Q_CLANG_QDOC) struct Q_GUI_EXPORT QGLXContext { QT_DECLARE_NATIVE_INTERFACE(QGLXContext) diff --git a/src/gui/kernel/qplatformopenglcontext.h b/src/gui/kernel/qplatformopenglcontext.h index f5d74613946..eefe93111d8 100644 --- a/src/gui/kernel/qplatformopenglcontext.h +++ b/src/gui/kernel/qplatformopenglcontext.h @@ -127,7 +127,7 @@ struct Q_GUI_EXPORT QWindowsGLIntegration }; #endif -#if defined(Q_OS_LINUX) +#if QT_CONFIG(xcb_glx_plugin) struct Q_GUI_EXPORT QGLXIntegration { QT_DECLARE_NATIVE_INTERFACE(QGLXIntegration) diff --git a/src/gui/platform/unix/qunixnativeinterface.cpp b/src/gui/platform/unix/qunixnativeinterface.cpp index a182fce1822..0ef88b4c918 100644 --- a/src/gui/platform/unix/qunixnativeinterface.cpp +++ b/src/gui/platform/unix/qunixnativeinterface.cpp @@ -55,7 +55,7 @@ using namespace QNativeInterface::Private; #ifndef QT_NO_OPENGL -#if defined(Q_OS_LINUX) +#if QT_CONFIG(xcb_glx_plugin) /*! \class QNativeInterface::QGLXContext @@ -110,7 +110,7 @@ QOpenGLContext *QNativeInterface::QGLXContext::fromNative(GLXContext visualBased return QGuiApplicationPrivate::platformIntegration()->call< &QGLXIntegration::createOpenGLContext>(visualBasedContext, visualInfo, shareContext); } -#endif // defined(Q_OS_LINUX) +#endif // QT_CONFIG(xcb_glx_plugin) #if QT_CONFIG(egl)