summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/QtExtras/qmlstreamer/q3dsqmlstreamrenderer.cpp20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/QtExtras/qmlstreamer/q3dsqmlstreamrenderer.cpp b/src/QtExtras/qmlstreamer/q3dsqmlstreamrenderer.cpp
index d431aa12..38cd63b4 100644
--- a/src/QtExtras/qmlstreamer/q3dsqmlstreamrenderer.cpp
+++ b/src/QtExtras/qmlstreamer/q3dsqmlstreamrenderer.cpp
@@ -327,7 +327,25 @@ void Q3DSQmlStreamRenderer::uninitialize()
void Q3DSQmlStreamRenderer::setItem(QQuickItem *item)
{
- m_rootItem = item;
+ if (item && m_rootItem && m_initialized) {
+ QMutexLocker lock(&m_renderMutex);
+ m_rootItem->setParentItem(nullptr);
+ m_rootItem = item;
+ m_rootItem->setParentItem(m_quickWindow->contentItem());
+ updateSizes();
+ } else {
+ if (item && m_rootItem != item) {
+ m_rootItem = item;
+
+ m_rootItem->setParentItem(m_quickWindow->contentItem());
+ updateSizes();
+
+ connect(m_renderControl, &QQuickRenderControl::renderRequested,
+ this, &Q3DSQmlStreamRenderer::requestUpdate);
+ connect(m_renderControl, &QQuickRenderControl::sceneChanged,
+ this, &Q3DSQmlStreamRenderer::requestUpdate);
+ }
+ }
}
bool Q3DSQmlStreamRenderer::event(QEvent *event)