eglfs: Pass QSurfaceFormat to createNativeWindow() hook
authorJohannes Zellner <johannes.zellner@nokia.com>
Thu, 14 Jun 2012 01:21:35 +0000 (18:21 -0700)
committerQt by Nokia <qt-info@nokia.com>
Thu, 14 Jun 2012 14:12:31 +0000 (16:12 +0200)
Change-Id: Ib352d8591360a224359ef218b95cd27cdfaf81aa
Reviewed-by: Girish Ramakrishnan <girish.1.ramakrishnan@nokia.com>
mkspecs/devices/linux-arm-amlogic-8726M-g++/qeglfshooks_8726m.cpp
mkspecs/devices/linux-rasp-pi-g++/qeglfshooks_pi.cpp
src/plugins/platforms/eglfs/qeglfshooks.h
src/plugins/platforms/eglfs/qeglfshooks_stub.cpp
src/plugins/platforms/eglfs/qeglfshooks_x11.cpp
src/plugins/platforms/eglfs/qeglfswindow.cpp

index 9fa05a4..6037054 100644 (file)
@@ -54,7 +54,7 @@ class QEglFS8726MHooks : public QEglFSHooks
 {
 public:
     virtual QSize screenSize() const;
-    virtual EGLNativeWindowType createNativeWindow(const QSize &size);
+    virtual EGLNativeWindowType createNativeWindow(const QSize &size, const QSurfaceFormat &format);
     virtual void destroyNativeWindow(EGLNativeWindowType window);
 };
 
@@ -75,8 +75,10 @@ QSize QEglFS8726MHooks::screenSize() const
     return QSize(vinfo.xres, vinfo.yres);
 }
 
-EGLNativeWindowType QEglFS8726MHooks::createNativeWindow(const QSize &size)
+EGLNativeWindowType QEglFS8726MHooks::createNativeWindow(const QSize &size, const QSurfaceFormat &format)
 {
+    Q_UNUSED(format);
+
     fbdev_window *window = new fbdev_window;
     window->width = size.width();
     window->height = size.height();
index 62efa73..599b696 100644 (file)
@@ -241,7 +241,7 @@ public:
     virtual void platformDestroy();
     virtual EGLNativeDisplayType platformDisplay() const;
     virtual QSize screenSize() const;
-    virtual EGLNativeWindowType createNativeWindow(const QSize &size);
+    virtual EGLNativeWindowType createNativeWindow(const QSize &size, const QSurfaceFormat &format);
     virtual void destroyNativeWindow(EGLNativeWindowType window);
     virtual bool hasCapability(QPlatformIntegration::Capability cap) const;
 
@@ -293,9 +293,9 @@ QSize QEglFSPiHooks::screenSize() const
 #endif
 }
 
-EGLNativeWindowType QEglFSPiHooks::createNativeWindow(const QSize &size)
+EGLNativeWindowType QEglFSPiHooks::createNativeWindow(const QSize &size, const QSurfaceFormat &format)
 {
-    return createDispmanxLayer(QPoint(0, 0), size, 1, DISPMANX_FLAGS_ALPHA_FIXED_ALL_PIXELS);
+    return createDispmanxLayer(QPoint(0, 0), size, 1, format.hasAlpha() ? DISPMANX_FLAGS_ALPHA_FROM_SOURCE : DISPMANX_FLAGS_ALPHA_FIXED_ALL_PIXELS);
 }
 
 void QEglFSPiHooks::destroyNativeWindow(EGLNativeWindowType window)
index 3e40d16..72cf496 100644 (file)
@@ -62,7 +62,7 @@ public:
     virtual int screenDepth() const;
     virtual QImage::Format screenFormat() const;
     virtual QSurfaceFormat surfaceFormatFor(const QSurfaceFormat &inputFormat) const;
-    virtual EGLNativeWindowType createNativeWindow(const QSize &size);
+    virtual EGLNativeWindowType createNativeWindow(const QSize &size, const QSurfaceFormat &format);
     virtual void destroyNativeWindow(EGLNativeWindowType window);
     virtual bool hasCapability(QPlatformIntegration::Capability cap) const;
     virtual QEglFSCursor *createCursor(QEglFSScreen *screen) const;
index fe622e1..487e483 100644 (file)
@@ -77,9 +77,10 @@ QSurfaceFormat QEglFSHooks::surfaceFormatFor(const QSurfaceFormat &inputFormat)
     return inputFormat;
 }
 
-EGLNativeWindowType QEglFSHooks::createNativeWindow(const QSize &size)
+EGLNativeWindowType QEglFSHooks::createNativeWindow(const QSize &size, const QSurfaceFormat &format)
 {
     Q_UNUSED(size);
+    Q_UNUSED(format);
     return 0;
 }
 
index af750a7..cb91858 100644 (file)
@@ -52,7 +52,7 @@ public:
     virtual void platformDestroy();
     virtual EGLNativeDisplayType platformDisplay() const;
     virtual QSize screenSize() const;
-    virtual EGLNativeWindowType createNativeWindow(const QSize &size);
+    virtual EGLNativeWindowType createNativeWindow(const QSize &size, const QSurfaceFormat &format);
     virtual void destroyNativeWindow(EGLNativeWindowType window);
     virtual bool hasCapability(QPlatformIntegration::Capability cap) const;
 };
@@ -84,8 +84,10 @@ QSize QEglFSX11Hooks::screenSize() const
     return QSize(env.at(0).toInt(), env.at(1).toInt());
 }
 
-EGLNativeWindowType QEglFSX11Hooks::createNativeWindow(const QSize &size)
+EGLNativeWindowType QEglFSX11Hooks::createNativeWindow(const QSize &size, const QSurfaceFormat &format)
 {
+    Q_UNUSED(format);
+
     Window root = DefaultRootWindow(display);
     XSetWindowAttributes swa;
     memset(&swa, 0, sizeof(swa));
index 6cb9fc6..36089b5 100644 (file)
@@ -78,7 +78,7 @@ void QEglFSWindow::create()
     QSurfaceFormat platformFormat = hooks->surfaceFormatFor(window()->requestedFormat());
     EGLConfig config = q_configFromGLFormat(display, platformFormat);
     m_format = q_glFormatFromConfig(display, config);
-    m_window = hooks->createNativeWindow(hooks->screenSize());
+    m_window = hooks->createNativeWindow(hooks->screenSize(), m_format);
     m_surface = eglCreateWindowSurface(display, config, m_window, NULL);
     if (m_surface == EGL_NO_SURFACE) {
         eglTerminate(display);