From e9ebb4341944390d375b9516eed51a12a95f7952 Mon Sep 17 00:00:00 2001 From: Laszlo Agocs Date: Mon, 3 Mar 2014 18:20:51 +0100 Subject: Dynamic GL: Query gl handle and type via the native interface MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I7ca5beaeb57ee2e4e9c175f53ac32371d1f6b5ed Reviewed-by: Friedemann Kleint Reviewed-by: Jørgen Lind --- src/gui/kernel/qopenglcontext.cpp | 16 +++++++++++++++- src/gui/kernel/qplatformintegration.cpp | 24 ++++++++++++++++++++++++ src/gui/kernel/qplatformintegration.h | 6 ++++++ 3 files changed, 45 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/gui/kernel/qopenglcontext.cpp b/src/gui/kernel/qopenglcontext.cpp index 357beb4e24..005f716788 100644 --- a/src/gui/kernel/qopenglcontext.cpp +++ b/src/gui/kernel/qopenglcontext.cpp @@ -52,6 +52,7 @@ #include #include #include +#include #include #include @@ -969,13 +970,21 @@ void QOpenGLContext::deleteQGLContext() The library might be GL-only, meaning that windowing system interface functions (for example EGL) may live in another, separate library. + \note This function requires that the QGuiApplication instance is already created. + \sa openGLModuleType() \since 5.3 */ void *QOpenGLContext::openGLModuleHandle() { +#ifdef QT_OPENGL_DYNAMIC + QGuiApplication *app = qGuiApp; + Q_ASSERT(app); + return app->platformNativeInterface()->nativeResourceForIntegration(QByteArrayLiteral("glhandle")); +#else return 0; +#endif } /*! @@ -1001,11 +1010,16 @@ void *QOpenGLContext::openGLModuleHandle() appropriate to check QSurfaceFormat::renderableType() or using the the convenience function isES(). + \note This function requires that the QGuiApplication instance is already created. + \since 5.3 */ QOpenGLContext::OpenGLModuleType QOpenGLContext::openGLModuleType() { -#if defined(QT_OPENGL_ES_2) +#if defined(QT_OPENGL_DYNAMIC) + Q_ASSERT(qGuiApp); + return QGuiApplicationPrivate::instance()->platformIntegration()->openGLModuleType(); +#elif defined(QT_OPENGL_ES_2) return GLES2; #elif defined(QT_OPENGL_ES) return GLES1; diff --git a/src/gui/kernel/qplatformintegration.cpp b/src/gui/kernel/qplatformintegration.cpp index bec201f3f7..6c0130f4e4 100644 --- a/src/gui/kernel/qplatformintegration.cpp +++ b/src/gui/kernel/qplatformintegration.cpp @@ -465,7 +465,31 @@ QPlatformSessionManager *QPlatformIntegration::createPlatformSessionManager(cons */ void QPlatformIntegration::sync() { +} + +#ifndef QT_NO_OPENGL +/*! + Platform integration function for querying the OpenGL implementation type. + + Used only when dynamic OpenGL implementation loading is enabled. + + Subclasses should reimplement this function and return a value based on + the OpenGL implementation they have chosen to load. + \note The return value does not indicate or limit the types of + contexts that can be created by a given implementation. For example + a desktop OpenGL implementation may be capable of creating OpenGL + ES-compatible contexts too. + + \sa QOpenGLContext::openGLModuleType(), QOpenGLContext::isES() + + \since 5.3 + */ +QOpenGLContext::OpenGLModuleType QPlatformIntegration::openGLModuleType() +{ + qWarning("This plugin does not support dynamic OpenGL loading!"); + return QOpenGLContext::DesktopGL; } +#endif QT_END_NAMESPACE diff --git a/src/gui/kernel/qplatformintegration.h b/src/gui/kernel/qplatformintegration.h index 35ef88949f..c894813235 100644 --- a/src/gui/kernel/qplatformintegration.h +++ b/src/gui/kernel/qplatformintegration.h @@ -54,6 +54,7 @@ #include #include #include +#include QT_BEGIN_NAMESPACE @@ -169,6 +170,11 @@ public: #endif virtual void sync(); + +#ifndef QT_NO_OPENGL + virtual QOpenGLContext::OpenGLModuleType openGLModuleType(); +#endif + protected: void screenAdded(QPlatformScreen *screen); }; -- cgit v1.2.3