diff options
author | Laszlo Agocs <laszlo.agocs@digia.com> | 2014-03-03 18:20:51 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-03-06 12:21:14 +0100 |
commit | e9ebb4341944390d375b9516eed51a12a95f7952 (patch) | |
tree | f25b22e6f96244f72e264ea5c1929e4179fc5df1 | |
parent | 2bac49265efcf8faabc3756d1a3e405a3d336f68 (diff) |
Dynamic GL: Query gl handle and type via the native interface
Change-Id: I7ca5beaeb57ee2e4e9c175f53ac32371d1f6b5ed
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
-rw-r--r-- | src/gui/kernel/qopenglcontext.cpp | 16 | ||||
-rw-r--r-- | src/gui/kernel/qplatformintegration.cpp | 24 | ||||
-rw-r--r-- | src/gui/kernel/qplatformintegration.h | 6 |
3 files changed, 45 insertions, 1 deletions
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 <QtGui/private/qopengl_p.h> #include <QtGui/private/qwindow_p.h> #include <QtGui/QScreen> +#include <qpa/qplatformnativeinterface.h> #include <private/qopenglextensions_p.h> #include <private/qopenglversionfunctionsfactory_p.h> @@ -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 <QtGui/qwindowdefs.h> #include <qpa/qplatformscreen.h> #include <QtGui/qsurfaceformat.h> +#include <QtGui/qopenglcontext.h> 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); }; |