From 83e9d165761ad68730722aeb0bffb8fabe555d1f Mon Sep 17 00:00:00 2001 From: David Edmundson Date: Thu, 28 Sep 2017 14:05:50 +0100 Subject: Fix QQuickRenderControl software grabs on surface not rendered elsewhere The softwareRenderer is created in QQuickWindowPrivate::syncSceneGraph If a window is purely offscreen and only read with grabs() this never gets created as we check the software renderer too early. This can be fixed by reordering some code. Change-Id: I882a8c11ab5d285a54b32ab4f53abfbc8c50f449 Reviewed-by: Laszlo Agocs --- src/quick/items/qquickrendercontrol.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/quick/items/qquickrendercontrol.cpp b/src/quick/items/qquickrendercontrol.cpp index 7e995936af..58b76fa862 100644 --- a/src/quick/items/qquickrendercontrol.cpp +++ b/src/quick/items/qquickrendercontrol.cpp @@ -393,6 +393,8 @@ QImage QQuickRenderControl::grab() #endif } else if (d->window->rendererInterface()->graphicsApi() == QSGRendererInterface::Software) { QQuickWindowPrivate *cd = QQuickWindowPrivate::get(d->window); + cd->polishItems(); + cd->syncSceneGraph(); QSGSoftwareRenderer *softwareRenderer = static_cast(cd->renderer); if (softwareRenderer) { const qreal dpr = d->window->effectiveDevicePixelRatio(); @@ -402,8 +404,6 @@ QImage QQuickRenderControl::grab() QPaintDevice *prevDev = softwareRenderer->currentPaintDevice(); softwareRenderer->setCurrentPaintDevice(&grabContent); softwareRenderer->markDirty(); - cd->polishItems(); - cd->syncSceneGraph(); d->rc->endSync(); render(); softwareRenderer->setCurrentPaintDevice(prevDev); -- cgit v1.2.3