diff options
author | Gunnar Sletta <gunnar@sletta.org> | 2014-09-30 11:26:45 +0200 |
---|---|---|
committer | Gunnar Sletta <gunnar@sletta.org> | 2014-10-16 13:58:08 +0200 |
commit | 0ce63c97e6deee95c276214eb45b40244de82c7e (patch) | |
tree | 5651e0e811c74eeb935d050bf43caa3ba3beaa1e /src/quick/items/qquickwindow.cpp | |
parent | 4a83ef27d54d40d4224d8cee063447c9b1f7488a (diff) |
Introduced QQuickCustomRenderStage.
The purpose of this concept is to make it possible to plug in an
external rendering stage, like replacing the GL rendering with a
composition step performed by a hardware compositor in QtCompositor.
Change-Id: I994b93af443f68a77ca73cf310b5910c49e014c3
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
Diffstat (limited to 'src/quick/items/qquickwindow.cpp')
-rw-r--r-- | src/quick/items/qquickwindow.cpp | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/src/quick/items/qquickwindow.cpp b/src/quick/items/qquickwindow.cpp index bf79158442..59aae82e28 100644 --- a/src/quick/items/qquickwindow.cpp +++ b/src/quick/items/qquickwindow.cpp @@ -364,19 +364,22 @@ void QQuickWindowPrivate::renderSceneGraph(const QSize &size) animationController->advance(); emit q->beforeRendering(); runAndClearJobs(&beforeRenderingJobs); - int fboId = 0; - const qreal devicePixelRatio = q->devicePixelRatio(); - renderer->setDeviceRect(QRect(QPoint(0, 0), size * devicePixelRatio)); - if (renderTargetId) { - fboId = renderTargetId; - renderer->setViewportRect(QRect(QPoint(0, 0), renderTargetSize)); - } else { - renderer->setViewportRect(QRect(QPoint(0, 0), size * devicePixelRatio)); + if (!customRenderStage || !customRenderStage->render()) { + int fboId = 0; + const qreal devicePixelRatio = q->devicePixelRatio(); + renderer->setDeviceRect(QRect(QPoint(0, 0), size * devicePixelRatio)); + if (renderTargetId) { + fboId = renderTargetId; + renderer->setViewportRect(QRect(QPoint(0, 0), renderTargetSize)); + } else { + renderer->setViewportRect(QRect(QPoint(0, 0), size * devicePixelRatio)); + } + renderer->setProjectionMatrixToRect(QRect(QPoint(0, 0), size)); + renderer->setDevicePixelRatio(q->devicePixelRatio()); + + context->renderNextFrame(renderer, fboId); } - renderer->setProjectionMatrixToRect(QRect(QPoint(0, 0), size)); - renderer->setDevicePixelRatio(q->devicePixelRatio()); - context->renderNextFrame(renderer, fboId); emit q->afterRendering(); runAndClearJobs(&afterRenderingJobs); } @@ -399,6 +402,7 @@ QQuickWindowPrivate::QQuickWindowPrivate() , windowManager(0) , renderControl(0) , touchRecursionGuard(0) + , customRenderStage(0) , clearColor(Qt::white) , clearBeforeRendering(true) , persistentGLContext(true) @@ -418,6 +422,7 @@ QQuickWindowPrivate::QQuickWindowPrivate() QQuickWindowPrivate::~QQuickWindowPrivate() { + delete customRenderStage; } void QQuickWindowPrivate::init(QQuickWindow *c, QQuickRenderControl *control) |