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 <robin.burchell@viroteck.net> Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
This commit is contained in:
parent
7b7322c497
commit
0d243a89ac
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue