Handle EglDisplay and EglContext in the native interface of eglfs.
authorSamuel Rødal <samuel.rodal@nokia.com>
Tue, 15 May 2012 06:12:45 +0000 (08:12 +0200)
committerQt by Nokia <qt-info@nokia.com>
Wed, 16 May 2012 17:36:27 +0000 (19:36 +0200)
Change-Id: I793176204f12eea9d915fb7fe489bd3450a283cd
Reviewed-by: Girish Ramakrishnan <girish.1.ramakrishnan@nokia.com>
src/plugins/platforms/eglfs/qeglfsintegration.cpp
src/plugins/platforms/eglfs/qeglfsintegration.h
src/plugins/platforms/eglfs/qeglfsscreen.h

index 257c3cd..a62d3bd 100644 (file)
@@ -47,6 +47,7 @@
 
 #include <QtPlatformSupport/private/qgenericunixfontdatabase_p.h>
 #include <QtPlatformSupport/private/qgenericunixeventdispatcher_p.h>
+#include <QtPlatformSupport/private/qeglplatformcontext_p.h>
 
 #include <qpa/qplatformwindow.h>
 #include <QtGui/QSurfaceFormat>
@@ -130,4 +131,34 @@ QVariant QEglFSIntegration::styleHint(QPlatformIntegration::StyleHint hint) cons
     return QPlatformIntegration::styleHint(hint);
 }
 
+QPlatformNativeInterface *QEglFSIntegration::nativeInterface() const
+{
+    return const_cast<QEglFSIntegration *>(this);
+}
+
+void *QEglFSIntegration::nativeResourceForIntegration(const QByteArray &resource)
+{
+    QByteArray lowerCaseResource = resource.toLower();
+
+    if (lowerCaseResource == "egldisplay")
+        return static_cast<QEglFSScreen *>(mScreen)->display();
+
+    return 0;
+}
+
+void *QEglFSIntegration::nativeResourceForContext(const QByteArray &resource, QOpenGLContext *context)
+{
+    QByteArray lowerCaseResource = resource.toLower();
+
+    QEGLPlatformContext *handle = static_cast<QEGLPlatformContext *>(context->handle());
+
+    if (!handle)
+        return 0;
+
+    if (lowerCaseResource == "eglcontext")
+        return handle->eglContext();
+
+    return 0;
+}
+
 QT_END_NAMESPACE
index b7cb715..04d77a5 100644 (file)
 #include "qeglfsscreen.h"
 
 #include <qpa/qplatformintegration.h>
+#include <qpa/qplatformnativeinterface.h>
 #include <qpa/qplatformscreen.h>
 
 QT_BEGIN_HEADER
 
 QT_BEGIN_NAMESPACE
 
-class QEglFSIntegration : public QPlatformIntegration
+class QEglFSIntegration : public QPlatformIntegration, public QPlatformNativeInterface
 {
 public:
     QEglFSIntegration();
@@ -62,6 +63,7 @@ public:
     QPlatformWindow *createPlatformWindow(QWindow *window) const;
     QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const;
     QPlatformOpenGLContext *createPlatformOpenGLContext(QOpenGLContext *context) const;
+    QPlatformNativeInterface *nativeInterface() const;
 
     QPlatformFontDatabase *fontDatabase() const;
 
@@ -69,6 +71,10 @@ public:
 
     QVariant styleHint(QPlatformIntegration::StyleHint hint) const;
 
+    // QPlatformNativeInterface
+    void *nativeResourceForIntegration(const QByteArray &resource);
+    void *nativeResourceForContext(const QByteArray &resource, QOpenGLContext *context);
+
 private:
     QPlatformFontDatabase *mFontDb;
     QPlatformScreen *mScreen;
index ca1a3ef..ba5db65 100644 (file)
@@ -68,6 +68,7 @@ public:
     QPlatformOpenGLContext *platformContext() const;
 
     EGLSurface surface() const { return m_surface; }
+    EGLDisplay display() const { return m_dpy; }
 
 private:
     void createAndSetPlatformContext() const;