From 60ff6b65778244543ee5b5b7a7d974bd772854f4 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Wed, 17 Jun 2020 15:54:41 +0300 Subject: QmlDesigner: Improve usage of QML items as quick3d textures Quick3D Texture elements require some window signals to show QML item as texture, so we fake them to make textures appear in form editor and state preview. To prevent texture mirroring, flipV value is force set at proxy creation. To keep state preview up to date, we trigger multiple render passes if there are any QML items used as texture sources in quick3D textures. Task-number: QDS-2290 Change-Id: I16c34aad943213c0b737fdb073333be3bbd40f2d Reviewed-by: Thomas Hartmann Reviewed-by: Mahmoud Badri --- .../qml2puppet/instances/quickitemnodeinstance.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.cpp') diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.cpp index cfa1b1eac0..6e67d58b92 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.cpp @@ -386,8 +386,14 @@ QImage QuickItemNodeInstance::renderImage() const static double devicePixelRatio = qgetenv("FORMEDITOR_DEVICE_PIXEL_RATIO").toDouble(); size *= devicePixelRatio; + // Fake render loop signaling to update things like QML items as 3D textures + nodeInstanceServer()->quickView()->beforeSynchronizing(); + nodeInstanceServer()->quickView()->beforeRendering(); + QImage renderImage = designerSupport()->renderImageForItem(quickItem(), renderBoundingRect, size); + nodeInstanceServer()->quickView()->afterRendering(); + renderImage.setDevicePixelRatio(devicePixelRatio); return renderImage; @@ -401,7 +407,15 @@ QImage QuickItemNodeInstance::renderPreviewImage(const QSize &previewImageSize) static double devicePixelRatio = qgetenv("FORMEDITOR_DEVICE_PIXEL_RATIO").toDouble(); const QSize size = previewImageSize * devicePixelRatio; if (quickItem()->isVisible()) { - return designerSupport()->renderImageForItem(quickItem(), previewItemBoundingRect, size); + // Fake render loop signaling to update things like QML items as 3D textures + nodeInstanceServer()->quickView()->beforeSynchronizing(); + nodeInstanceServer()->quickView()->beforeRendering(); + + QImage image = designerSupport()->renderImageForItem(quickItem(), previewItemBoundingRect, size); + + nodeInstanceServer()->quickView()->afterRendering(); + + return image; } else { QImage transparentImage(size, QImage::Format_ARGB32_Premultiplied); transparentImage.fill(Qt::transparent); -- cgit v1.2.3