diff options
Diffstat (limited to 'src/api/studio3dqml/q3dsstudio3d.cpp')
-rw-r--r-- | src/api/studio3dqml/q3dsstudio3d.cpp | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/api/studio3dqml/q3dsstudio3d.cpp b/src/api/studio3dqml/q3dsstudio3d.cpp index deb4f04..38d32d4 100644 --- a/src/api/studio3dqml/q3dsstudio3d.cpp +++ b/src/api/studio3dqml/q3dsstudio3d.cpp @@ -152,6 +152,8 @@ Q3DSStudio3D::Q3DSStudio3D() connect(this, &Q3DSStudio3D::visibleChanged, this, &Q3DSStudio3D::handleVisibleChanged); updateEventMasks(); + m_startupTimer.reset(new QElapsedTimer()); + m_startupTimer->restart(); } Q3DSStudio3D::~Q3DSStudio3D() @@ -278,6 +280,10 @@ void Q3DSStudio3D::componentComplete() QQmlContext *ctx = QQmlEngine::contextForObject(this); m_presentation->d_ptr->streamProxy()->setEngine(ctx->engine()); + QObject::connect(m_presentation, &Q3DSPresentationItem::sourceChanged, [this]() { + m_startupTimer->restart(); + }); + QQuickFramebufferObject::componentComplete(); } @@ -296,6 +302,8 @@ void Q3DSStudio3D::handleWindowChanged(QQuickWindow *window) connect(window, &QQuickWindow::afterAnimating, this, &Q3DSStudio3D::tick); // Call update after the frame is handled to queue another frame connect(window, &QQuickWindow::afterSynchronizing, this, &Q3DSStudio3D::update); + + reset(); } /*! @@ -315,9 +323,9 @@ void Q3DSStudio3D::reset() { // Fake a source change to trigger a reloading of the presentation m_pendingCommands.m_sourceChanged = true; - m_pendingCommands.m_source = m_presentation->source(); + m_pendingCommands.m_source = m_presentation ? m_presentation->source() : QString(); m_pendingCommands.m_variantListChanged = true; - m_pendingCommands.m_variantList = m_presentation->variantList(); + m_pendingCommands.m_variantList = m_presentation ? m_presentation->variantList() : QStringList(); } /*! @@ -371,7 +379,8 @@ QQuickFramebufferObject::Renderer *Q3DSStudio3D::createRenderer() const // It is "illegal" to create a connection between the renderer // and the plugin, and vice-versa. The only valid time the two // may communicate is during Q3DSRenderer::synchronize(). - Q3DSRenderer *renderer = new Q3DSRenderer(isVisible(), m_presentation->d_ptr->streamProxy()); + Q3DSRenderer *renderer = new Q3DSRenderer(isVisible(), m_presentation->d_ptr->streamProxy(), + m_startupTimer.get()); connect(renderer, &Q3DSRenderer::enterSlide, m_presentation->d_ptr, &Q3DSPresentationPrivate::handleSlideEntered); |