summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Olav Tvete <paul.tvete@nokia.com>2011-09-22 14:30:40 +0200
committerQt by Nokia <qt-info@nokia.com>2011-09-23 10:37:49 +0200
commit75009fb135da74f879dfced74c9a0c52cc6290dc (patch)
tree7674857890efc4d897460a3b90f94a78dc2264e2
parent2af41a655a1ceca13dd495e16ff5c1ab104dd7f9 (diff)
Page flipping API for QPlatformScreen
Adding a page flipping API for platform plugins. This enables Wayland compositors to show full-screen client windows directly without copying any data - if supported by the platform. Change-Id: I19abe366434140f9e20a0655fe7cd41ea9264fca Reviewed-on: http://codereview.qt-project.org/5385 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Jørgen Lind <jorgen.lind@nokia.com>
-rw-r--r--src/gui/kernel/qplatformscreen_qpa.cpp38
-rw-r--r--src/gui/kernel/qplatformscreen_qpa.h13
2 files changed, 51 insertions, 0 deletions
diff --git a/src/gui/kernel/qplatformscreen_qpa.cpp b/src/gui/kernel/qplatformscreen_qpa.cpp
index 8fb42595b8..e25e3f33d3 100644
--- a/src/gui/kernel/qplatformscreen_qpa.cpp
+++ b/src/gui/kernel/qplatformscreen_qpa.cpp
@@ -181,3 +181,41 @@ QPlatformScreen * QPlatformScreen::platformScreenForWindow(const QWindow *window
Reimplement in subclass to return the image format which corresponds to the screen format
*/
+
+/*!
+ \class QPlatformScreenPageFlipper
+ \since 5.0
+ \internal
+ \preliminary
+ \ingroup qpa
+
+ \brief The QPlatformScreenPageFlipper class provides an abstract interface for display buffer swapping
+
+ Implement the displayBuffer() function to initiate a buffer swap. The
+ bufferDisplayed() signal should be emitted once the buffer is actually displayed on
+ the screen. The bufferReleased() signal should be emitted when the buffer data is no
+ longer owned by the display hardware.
+*/
+
+/*! \fn bool QPlatformScreenPageFlipper::displayBuffer(void *bufferHandle)
+
+Implemented in subclasses to display the buffer referenced by \a bufferHandle directly on
+the screen. Returns \c true if it is possible to display the buffer, and \c false if the
+buffer cannot be displayed.
+
+If this function returns true, the buffer must not be modified or destroyed before the
+bufferReleased() signal is emitted. The signal bufferDisplayed() is emitted when the buffer
+is displayed on the screen. The two signals may be emitted in either order.
+
+This function is allowed to block.
+*/
+
+
+/*!
+ Implemented in subclasses to return a page flipper object for the screen, or 0 if the
+ hardware does not support page flipping. The default implementation returns 0.
+ */
+QPlatformScreenPageFlipper *QPlatformScreen::pageFlipper() const
+{
+ return 0;
+}
diff --git a/src/gui/kernel/qplatformscreen_qpa.h b/src/gui/kernel/qplatformscreen_qpa.h
index 3851b1821a..9919ca5ca8 100644
--- a/src/gui/kernel/qplatformscreen_qpa.h
+++ b/src/gui/kernel/qplatformscreen_qpa.h
@@ -67,6 +67,17 @@ class QPlatformWindow;
class QScreen;
class QSurfaceFormat;
+class QPlatformScreenPageFlipper : public QObject
+{
+ Q_OBJECT
+public:
+ virtual bool displayBuffer(void *bufferHandle) = 0;
+
+ signals:
+ void bufferDisplayed(void *bufferHandle);
+ void bufferReleased(void *bufferHandle);
+};
+
class Q_GUI_EXPORT QPlatformScreen
{
Q_DECLARE_PRIVATE(QPlatformScreen)
@@ -95,6 +106,8 @@ public:
virtual QString name() const { return QString(); }
+ virtual QPlatformScreenPageFlipper *pageFlipper() const;
+
protected:
QScopedPointer<QPlatformScreenPrivate> d_ptr;