aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/scenegraph/qsgrenderloop_p.h
diff options
context:
space:
mode:
authorGunnar Sletta <gunnar.sletta@digia.com>2012-12-05 06:27:47 -0800
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-01-18 12:26:55 +0100
commitebe8b9408cfcd953fae80514aa67e49221541bed (patch)
treea9728a64f5f462dc45dabce591f67140738b0edc /src/quick/scenegraph/qsgrenderloop_p.h
parent9c54d0ef8f6442e32d5762edccef46db80b68681 (diff)
Complete rewrite of threaded render loop.
This change starts using the superior implementation of the scene graph render loop which has been worked on in the scenegraph-playground project for a while. It uses a far more straightforward locking/sync paradigm compared to the existing one and is less deadlock and error prone. It also enables the scene graph thread to run on its own when the GUI thread is blocked, enabling threaded animations. This changes also introduces a naming change inside Qt Quick from "Window Manager" -> "Render Loop" as that fits better to what the code does. Change-Id: I1c2170ee04fcbef79660bd7dae6cace647cdb276 Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
Diffstat (limited to 'src/quick/scenegraph/qsgrenderloop_p.h')
-rw-r--r--src/quick/scenegraph/qsgrenderloop_p.h91
1 files changed, 91 insertions, 0 deletions
diff --git a/src/quick/scenegraph/qsgrenderloop_p.h b/src/quick/scenegraph/qsgrenderloop_p.h
new file mode 100644
index 0000000000..fc705f48e8
--- /dev/null
+++ b/src/quick/scenegraph/qsgrenderloop_p.h
@@ -0,0 +1,91 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtQml module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QSGRenderLoop_P_H
+#define QSGRenderLoop_P_H
+
+#include <QtGui/QImage>
+#include <private/qtquickglobal_p.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class QQuickWindow;
+class QSGContext;
+class QAnimationDriver;
+
+class Q_QUICK_PRIVATE_EXPORT QSGRenderLoop
+{
+public:
+ virtual ~QSGRenderLoop();
+
+ virtual void show(QQuickWindow *window) = 0;
+ virtual void hide(QQuickWindow *window) = 0;
+
+ virtual void windowDestroyed(QQuickWindow *window) = 0;
+
+ virtual void exposureChanged(QQuickWindow *window) = 0;
+ virtual QImage grab(QQuickWindow *window) = 0;
+ virtual void resize(QQuickWindow *window, const QSize &size) = 0;
+
+ virtual void update(QQuickWindow *window) = 0;
+ virtual void maybeUpdate(QQuickWindow *window) = 0;
+
+ virtual QAnimationDriver *animationDriver() const = 0;
+
+ virtual QSGContext *sceneGraphContext() const = 0;
+
+ virtual void releaseResources(QQuickWindow *window) = 0;
+
+ // ### make this less of a singleton
+ static QSGRenderLoop *instance();
+ static void setInstance(QSGRenderLoop *instance);
+
+private:
+ static QSGRenderLoop *s_instance;
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QSGRenderLoop_P_H