diff options
author | Laszlo Agocs <laszlo.agocs@qt.io> | 2020-04-29 17:11:31 +0200 |
---|---|---|
committer | Laszlo Agocs <laszlo.agocs@qt.io> | 2020-04-30 18:56:19 +0200 |
commit | db7bfdc06bf68d5e4a78f293033024a60fb92464 (patch) | |
tree | b55374fea993ca0c1b8a0e3fefe1e63c41a230b4 /src/quick/scenegraph/qsgrenderloop.cpp | |
parent | 93e0e671e9eeef679024fe3e2e4534f2f10533cb (diff) |
Add beforeFrameBegin() and afterFrameEnd() to QQuickWindow
New additions to the QQuickWindow signal family. Out of the three stages
of the (modern) frame generation process, only two are covered by the
existing beforeRendering, beforeRenderPassRecording -
afterRenderPassRecording, afterRendering pairs.
With the new ones, the rendering of a simple Qt Quick scene looks like
the following:
emit beforeFrameBegin
QRhi::beginFrame()
emit beforeRendering
... (additional render passes targeting textures when layers or View3D are involved)
QRhi::beginPass()
emit beforeRenderPassRecording
...
emit afterRenderPassRecording
QRhi::endPass()
emit afterRendering
QRhi::endFrame()
emit afterFrameEnd
This fits very well the revised QQuickRenderControl API, which has
explicit beginFrame-endFrame points as well. So now we can make both
QQuickRenderControl and the render loops to emit these signals at the
appropriate points.
Task-number: QTBUG-83883
Change-Id: Ib385b29393f3b39b0700432d14ea3976cf337fa0
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
Diffstat (limited to 'src/quick/scenegraph/qsgrenderloop.cpp')
-rw-r--r-- | src/quick/scenegraph/qsgrenderloop.cpp | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/quick/scenegraph/qsgrenderloop.cpp b/src/quick/scenegraph/qsgrenderloop.cpp index a49f4a2263..cb9f7f331f 100644 --- a/src/quick/scenegraph/qsgrenderloop.cpp +++ b/src/quick/scenegraph/qsgrenderloop.cpp @@ -704,6 +704,8 @@ void QSGGuiThreadRenderLoop::renderWindow(QQuickWindow *window) emit window->afterAnimating(); + emit window->beforeFrameBegin(); + // Begin the frame before syncing -> sync is where we may invoke // updatePaintNode() on the items and they may want to do resource updates. // Also relevant for applications that connect to the before/afterSynchronizing @@ -799,6 +801,8 @@ void QSGGuiThreadRenderLoop::renderWindow(QQuickWindow *window) if (needsPresent) cd->fireFrameSwapped(); + emit window->afterFrameEnd(); + qint64 swapTime = 0; if (profileFrames) swapTime = renderTimer.nsecsElapsed(); |