diff options
author | Gunnar Sletta <gunnar.sletta@digia.com> | 2013-10-17 14:53:33 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-10-30 08:29:49 +0100 |
commit | 906d5c5c40183468f9521277c6244a6c46730de6 (patch) | |
tree | 0eb46a8f88d59993ab659e2dc07970d1ce2f0d73 /src/quick/scenegraph/coreapi | |
parent | c084d32d92b2df55532fa1599e590c29bf2b5bfb (diff) |
Use one render loop per QQuickWindow
See the task for the full reasoning behind this patch.
The threaded renderloop has been refactored to have one window per
thread. This is mostly a simplification of the current code path where
for loops over multiple windows are turned into if (window).
The QSGContext has been split into two classes, QSGRenderContext
for which there is one per OpenGLContext.
The rest of the patch is name changes and a couple of cleanups
in the hopes of simplifying this change.
Task-number: QTBUG-33993
Change-Id: I31c81f9694d7da7474a72333169be38de62613c4
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/quick/scenegraph/coreapi')
-rw-r--r-- | src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp | 3 | ||||
-rw-r--r-- | src/quick/scenegraph/coreapi/qsgbatchrenderer_p.h | 2 | ||||
-rw-r--r-- | src/quick/scenegraph/coreapi/qsgmaterial.cpp | 2 | ||||
-rw-r--r-- | src/quick/scenegraph/coreapi/qsgnodeupdater_p.h | 5 | ||||
-rw-r--r-- | src/quick/scenegraph/coreapi/qsgrenderer.cpp | 17 | ||||
-rw-r--r-- | src/quick/scenegraph/coreapi/qsgrenderer_p.h | 8 |
6 files changed, 7 insertions, 30 deletions
diff --git a/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp b/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp index bf31b94e46..8514203f57 100644 --- a/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp +++ b/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp @@ -283,7 +283,6 @@ Updater::Updater(Renderer *r) void Updater::updateStates(QSGNode *n) { - m_toplevel_alpha = 1; m_current_clip = 0; m_added = 0; @@ -683,7 +682,7 @@ static int qsg_countNodesInBatches(const QDataBuffer<Batch *> &batches) return sum; } -Renderer::Renderer(QSGContext *ctx) +Renderer::Renderer(QSGRenderContext *ctx) : QSGRenderer(ctx) , m_opaqueRenderList(64) , m_alphaRenderList(64) diff --git a/src/quick/scenegraph/coreapi/qsgbatchrenderer_p.h b/src/quick/scenegraph/coreapi/qsgbatchrenderer_p.h index 94e8ba5d96..a205306b77 100644 --- a/src/quick/scenegraph/coreapi/qsgbatchrenderer_p.h +++ b/src/quick/scenegraph/coreapi/qsgbatchrenderer_p.h @@ -389,7 +389,7 @@ public: class Q_QUICK_PRIVATE_EXPORT Renderer : public QSGRenderer { public: - Renderer(QSGContext *); + Renderer(QSGRenderContext *); ~Renderer(); protected: diff --git a/src/quick/scenegraph/coreapi/qsgmaterial.cpp b/src/quick/scenegraph/coreapi/qsgmaterial.cpp index 25d256158e..d186823958 100644 --- a/src/quick/scenegraph/coreapi/qsgmaterial.cpp +++ b/src/quick/scenegraph/coreapi/qsgmaterial.cpp @@ -478,7 +478,7 @@ QRect QSGMaterialShader::RenderState::deviceRect() const QOpenGLContext *QSGMaterialShader::RenderState::context() const { - return static_cast<const QSGRenderer *>(m_data)->glContext(); + return static_cast<const QSGRenderer *>(m_data)->context()->openglContext(); } diff --git a/src/quick/scenegraph/coreapi/qsgnodeupdater_p.h b/src/quick/scenegraph/coreapi/qsgnodeupdater_p.h index d0adbc5dd2..4c3be61a76 100644 --- a/src/quick/scenegraph/coreapi/qsgnodeupdater_p.h +++ b/src/quick/scenegraph/coreapi/qsgnodeupdater_p.h @@ -64,9 +64,6 @@ public: virtual void updateStates(QSGNode *n); virtual bool isNodeBlocked(QSGNode *n, QSGNode *root) const; - void setToplevelOpacity(qreal alpha) { m_opacity_stack.last() = alpha; } - qreal toplevelOpacity() const { return m_opacity_stack.last(); } - protected: virtual void enterTransformNode(QSGTransformNode *); virtual void leaveTransformNode(QSGTransformNode *); @@ -88,8 +85,6 @@ protected: const QSGClipNode *m_current_clip; int m_force_update; - - qreal m_toplevel_alpha; }; QT_END_NAMESPACE diff --git a/src/quick/scenegraph/coreapi/qsgrenderer.cpp b/src/quick/scenegraph/coreapi/qsgrenderer.cpp index 216c32f027..7d982cee36 100644 --- a/src/quick/scenegraph/coreapi/qsgrenderer.cpp +++ b/src/quick/scenegraph/coreapi/qsgrenderer.cpp @@ -133,7 +133,7 @@ void QSGBindableFboId::bind() const */ -QSGRenderer::QSGRenderer(QSGContext *context) +QSGRenderer::QSGRenderer(QSGRenderContext *context) : QObject() , m_clear_color(Qt::transparent) , m_clear_mode(ClearColorBuffer | ClearDepthBuffer) @@ -162,20 +162,6 @@ QSGRenderer::~QSGRenderer() } /*! - Returns the scene graph context for this renderer. - - \internal - */ - -QSGContext *QSGRenderer::context() -{ - return m_context; -} - - - - -/*! Returns the node updater that this renderer uses to update states in the scene graph. @@ -398,7 +384,6 @@ void QSGRenderer::preprocess() preprocessTime = frameTimer.nsecsElapsed(); #endif - nodeUpdater()->setToplevelOpacity(context()->renderAlpha()); nodeUpdater()->updateStates(m_root_node); #ifndef QSG_NO_RENDER_TIMING diff --git a/src/quick/scenegraph/coreapi/qsgrenderer_p.h b/src/quick/scenegraph/coreapi/qsgrenderer_p.h index a1ebfa0946..43811e6d5e 100644 --- a/src/quick/scenegraph/coreapi/qsgrenderer_p.h +++ b/src/quick/scenegraph/coreapi/qsgrenderer_p.h @@ -84,7 +84,7 @@ public: }; Q_DECLARE_FLAGS(ClearMode, ClearModeBit) - QSGRenderer(QSGContext *context); + QSGRenderer(QSGRenderContext *context); virtual ~QSGRenderer(); void setRootNode(QSGRootNode *node); @@ -117,9 +117,7 @@ public: void setClearColor(const QColor &color); QColor clearColor() const { return m_clear_color; } - QOpenGLContext *glContext() const { Q_ASSERT(m_context); return m_context->glContext(); } - - QSGContext *context(); + QSGRenderContext *context() const { return m_context; } void renderScene(); void renderScene(const QSGBindable &bindable); @@ -161,7 +159,7 @@ protected: QRect m_current_scissor_rect; int m_current_stencil_value; - QSGContext *m_context; + QSGRenderContext *m_context; private: QSGRootNode *m_root_node; |