From 0d243a89ac225f4080f16c93e4a6340d0ddc6f0e Mon Sep 17 00:00:00 2001 From: Filipe Azevedo Date: Tue, 13 Dec 2016 16:05:05 +0100 Subject: Fix wrong grabbing behavior QQuickWidget::grabFrameBuffer() was not polishing its items nor syncing the scene graph compared to standard QQuickWindow::grabWindow(). This lead to QQuickWidget grabbed content to be outdated (render the previous frame as a new frame). Task-number: QTBUG-57596 Change-Id: I94f5e0aa5b096fb9e21259267c0e50473e8ed5bd Reviewed-by: Robin Burchell Reviewed-by: Laszlo Agocs --- src/quick/items/qquickrendercontrol.cpp | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src/quick/items/qquickrendercontrol.cpp') diff --git a/src/quick/items/qquickrendercontrol.cpp b/src/quick/items/qquickrendercontrol.cpp index 13e13890b7..03d96aea1f 100644 --- a/src/quick/items/qquickrendercontrol.cpp +++ b/src/quick/items/qquickrendercontrol.cpp @@ -380,6 +380,9 @@ QImage QQuickRenderControl::grab() if (d->window->rendererInterface()->graphicsApi() == QSGRendererInterface::OpenGL) { #if QT_CONFIG(opengl) + QQuickWindowPrivate *cd = QQuickWindowPrivate::get(d->window); + cd->polishItems(); + cd->syncSceneGraph(); render(); grabContent = qt_gl_read_framebuffer(d->window->size() * d->window->effectiveDevicePixelRatio(), false, false); #endif @@ -394,6 +397,8 @@ QImage QQuickRenderControl::grab() QPaintDevice *prevDev = softwareRenderer->currentPaintDevice(); softwareRenderer->setCurrentPaintDevice(&grabContent); softwareRenderer->markDirty(); + cd->polishItems(); + cd->syncSceneGraph(); render(); softwareRenderer->setCurrentPaintDevice(prevDev); } -- cgit v1.2.3