diff options
author | Laszlo Agocs <laszlo.agocs@digia.com> | 2013-09-13 13:02:20 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-09-20 12:05:08 +0200 |
commit | f89f099c55576992b39a8021aace64ff32747624 (patch) | |
tree | edefe8cefb81d63ef60440608112ee67ad837960 /src/plugins/platforms/eglfs/qeglfsbackingstore.h | |
parent | cfd52842492d12af26d897e0f893c80b2df5945a (diff) |
eglfs: Support multiple raster windows
Allow widget apps with popups and multiple top-level widgets to
function on the eglfs platform. GL and Quick2 apps are not affected.
Instead of trying to create a native window and EGL surface for each
window, do it only for the window that is created first. This first
window is forced to fullscreen as usual. Later windows however are
treated differently: These will not have a native window, surface or
context, and keep their normal size. All the textures belonging to the
raster windows are then rendered in one step, using a stacking order
maintained based on visibility changes and window activation.
Note that this will only help apps that create a main window first and
have everything else inside that window or on top of it as menus,
dialogs, popups, etc.
Change-Id: Ia435458ba81bf3c35cc8f61bcb2d2a50cf17f0e3
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
Reviewed-by: Andy Nichols <andy.nichols@digia.com>
Diffstat (limited to 'src/plugins/platforms/eglfs/qeglfsbackingstore.h')
-rw-r--r-- | src/plugins/platforms/eglfs/qeglfsbackingstore.h | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/plugins/platforms/eglfs/qeglfsbackingstore.h b/src/plugins/platforms/eglfs/qeglfsbackingstore.h index 5d86814df9..39bdab1563 100644 --- a/src/plugins/platforms/eglfs/qeglfsbackingstore.h +++ b/src/plugins/platforms/eglfs/qeglfsbackingstore.h @@ -46,12 +46,35 @@ #include <QImage> #include <QRegion> +#include <QTimer> QT_BEGIN_NAMESPACE class QOpenGLContext; class QOpenGLPaintDevice; class QOpenGLShaderProgram; +class QEglFSWindow; + +class QEglFSCompositor : public QObject +{ + Q_OBJECT + +public: + QEglFSCompositor(); + + void schedule(QEglFSWindow *rootWindow); + + static QEglFSCompositor *instance(); + +private slots: + void renderAll(); + +private: + void render(QEglFSWindow *window, QEglFSWindow *rootWindow); + + QEglFSWindow *m_rootWindow; + QTimer m_updateTimer; +}; class QEglFSBackingStore : public QPlatformBackingStore { @@ -68,7 +91,10 @@ public: private: void makeCurrent(); + static QOpenGLContext *makeRootCurrent(QEglFSWindow *rootWin); + void updateTexture(); + QEglFSWindow *m_window; QOpenGLContext *m_context; QImage m_image; uint m_texture; @@ -76,6 +102,8 @@ private: QOpenGLShaderProgram *m_program; int m_vertexCoordEntry; int m_textureCoordEntry; + + friend class QEglFSCompositor; }; QT_END_NAMESPACE |