diff options
author | Laszlo Agocs <laszlo.agocs@qt.io> | 2021-09-10 21:03:34 +0200 |
---|---|---|
committer | Laszlo Agocs <laszlo.agocs@qt.io> | 2021-09-13 18:31:56 +0200 |
commit | e346b9524c12c988ba5b95a4bc39d23fd2620cf2 (patch) | |
tree | 387550f0560f5d53e8eddd93789ee1968bd92bc3 /src | |
parent | 7c1230d9a80bea444d560c44b7a9e0d1fbea44e8 (diff) |
Expose the config and display for EGL-based QOpenGLContexts
...in the native interface.
Using OpenXR is impossible on some platforms (for example, Android)
without knowing all three. The EGLContext alone is not enough, and
EGL offers no way to query the EGLConfig a context was created with.
https://www.khronos.org/registry/OpenXR/specs/1.0/html/xrspec.html#XR_KHR_opengl_es_enable
Therefore, expose all three so libs/apps can use the new way to query
these native resource without resorting to the old-style
nativeResourceFor* queries.
Change-Id: I7efb0a26b858150da55e711752af99426e744322
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/kernel/qopenglcontext_platform.h | 3 | ||||
-rw-r--r-- | src/gui/opengl/platform/egl/qeglplatformcontext_p.h | 2 | ||||
-rw-r--r-- | src/gui/platform/unix/qunixnativeinterface.cpp | 12 |
3 files changed, 17 insertions, 0 deletions
diff --git a/src/gui/kernel/qopenglcontext_platform.h b/src/gui/kernel/qopenglcontext_platform.h index 7627e34c20..efe219c055 100644 --- a/src/gui/kernel/qopenglcontext_platform.h +++ b/src/gui/kernel/qopenglcontext_platform.h @@ -58,6 +58,7 @@ struct __GLXcontextRec; typedef struct __GLXcontextRec *GLXContext; #if QT_CONFIG(egl) typedef void *EGLContext; typedef void *EGLDisplay; +typedef void *EGLConfig; #endif #if !defined(Q_OS_MACOS) && defined(Q_CLANG_QDOC) @@ -103,6 +104,8 @@ struct Q_GUI_EXPORT QEGLContext QT_DECLARE_NATIVE_INTERFACE(QEGLContext, 1, QOpenGLContext) static QOpenGLContext *fromNative(EGLContext context, EGLDisplay display, QOpenGLContext *shareContext = nullptr); virtual EGLContext nativeContext() const = 0; + virtual EGLConfig config() const = 0; + virtual EGLDisplay display() const = 0; }; #endif diff --git a/src/gui/opengl/platform/egl/qeglplatformcontext_p.h b/src/gui/opengl/platform/egl/qeglplatformcontext_p.h index 5f399c6994..6bddd18108 100644 --- a/src/gui/opengl/platform/egl/qeglplatformcontext_p.h +++ b/src/gui/opengl/platform/egl/qeglplatformcontext_p.h @@ -108,6 +108,8 @@ public: bool isValid() const override { return m_eglContext != EGL_NO_CONTEXT; } EGLContext nativeContext() const override { return eglContext(); } + EGLConfig config() const override { return eglConfig(); } + EGLDisplay display() const override { return eglDisplay(); } EGLContext eglContext() const; EGLDisplay eglDisplay() const; diff --git a/src/gui/platform/unix/qunixnativeinterface.cpp b/src/gui/platform/unix/qunixnativeinterface.cpp index c4a3ad37d3..6cd8de6e9a 100644 --- a/src/gui/platform/unix/qunixnativeinterface.cpp +++ b/src/gui/platform/unix/qunixnativeinterface.cpp @@ -143,6 +143,18 @@ QOpenGLContext *QNativeInterface::QGLXContext::fromNative(GLXContext visualBased \return the underlying EGLContext. */ +/*! + \fn EGLConfig QNativeInterface::QEGLContext::config() const + \since 6.3 + \return the EGLConfig associated with the underlying EGLContext. +*/ + +/*! + \fn EGLDisplay QNativeInterface::QEGLContext::display() const + \since 6.3 + \return the EGLDisplay associated with the underlying EGLContext. +*/ + QT_DEFINE_NATIVE_INTERFACE(QEGLContext); QT_DEFINE_PRIVATE_NATIVE_INTERFACE(QEGLIntegration); |