diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2019-09-18 14:02:21 +0200 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2019-09-25 11:41:17 +0200 |
commit | 6ead5cfc2c7c971a4698e1ebf6b1973b1d8e2a78 (patch) | |
tree | ccf0784805d8ffb921bb2313d87e4b15f8a65c03 /src | |
parent | 20e42a2c2072ab99588566cd5ee67e0dd4efcc44 (diff) |
Update QRenderSettings to use direct sync
Change-Id: I610d06ac788f839653055a80f78c3f3be5ca68f8
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/extras/defaults/qt3dwindow.cpp | 8 | ||||
-rw-r--r-- | src/render/backend/rendersettings.cpp | 64 | ||||
-rw-r--r-- | src/render/backend/rendersettings_p.h | 4 | ||||
-rw-r--r-- | src/render/frontend/qrenderaspect.cpp | 2 | ||||
-rw-r--r-- | src/render/frontend/qrendersettings.cpp | 11 | ||||
-rw-r--r-- | src/render/frontend/qrendersettings.h | 1 | ||||
-rw-r--r-- | src/render/frontend/qrendersettings_p.h | 2 |
7 files changed, 54 insertions, 38 deletions
diff --git a/src/extras/defaults/qt3dwindow.cpp b/src/extras/defaults/qt3dwindow.cpp index a2b9ba4bb..ace40c3c1 100644 --- a/src/extras/defaults/qt3dwindow.cpp +++ b/src/extras/defaults/qt3dwindow.cpp @@ -61,6 +61,7 @@ #include <Qt3DLogic/qlogicaspect.h> #include <Qt3DRender/qcamera.h> #include <QtGui/qopenglcontext.h> +#include <private/qrendersettings_p.h> #include <QEvent> @@ -248,8 +249,11 @@ bool Qt3DWindow::event(QEvent *e) { Q_D(Qt3DWindow); const bool needsRedraw = (e->type() == QEvent::Expose || e->type() == QEvent::UpdateRequest); - if (needsRedraw && d->m_renderSettings->renderPolicy() == Qt3DRender::QRenderSettings::OnDemand) - d->m_renderSettings->sendCommand(QLatin1String("InvalidateFrame")); + if (needsRedraw && d->m_renderSettings->renderPolicy() == Qt3DRender::QRenderSettings::OnDemand) { + Qt3DRender::QRenderSettingsPrivate *p = static_cast<Qt3DRender::QRenderSettingsPrivate *>( + Qt3DCore::QNodePrivate::get(d->m_renderSettings)); + p->invalidateFrame(); + } return QWindow::event(e); } diff --git a/src/render/backend/rendersettings.cpp b/src/render/backend/rendersettings.cpp index 2b8067ce8..702be9c60 100644 --- a/src/render/backend/rendersettings.cpp +++ b/src/render/backend/rendersettings.cpp @@ -63,42 +63,42 @@ RenderSettings::RenderSettings() { } -void RenderSettings::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) +void RenderSettings::syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) { - const auto typedChange = qSharedPointerCast<Qt3DCore::QNodeCreatedChange<QRenderSettingsData>>(change); - const auto &data = typedChange->data; - m_activeFrameGraph = data.activeFrameGraphId; - m_renderPolicy = data.renderPolicy; - m_pickMethod = data.pickMethod; - m_pickResultMode = data.pickResultMode; - m_pickWorldSpaceTolerance = data.pickWorldSpaceTolerance; - m_faceOrientationPickingMode = data.faceOrientationPickingMode; -} + const QRenderSettings *node = qobject_cast<const QRenderSettings *>(frontEnd); + if (!node) + return; -void RenderSettings::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) -{ - if (e->type() == PropertyUpdated) { - QPropertyUpdatedChangePtr propertyChange = qSharedPointerCast<QPropertyUpdatedChange>(e); - if (propertyChange->propertyName() == QByteArrayLiteral("pickMethod")) - m_pickMethod = propertyChange->value().value<QPickingSettings::PickMethod>(); - else if (propertyChange->propertyName() == QByteArrayLiteral("pickResult")) - m_pickResultMode = propertyChange->value().value<QPickingSettings::PickResultMode>(); - else if (propertyChange->propertyName() == QByteArrayLiteral("faceOrientationPickingMode")) - m_faceOrientationPickingMode = propertyChange->value().value<QPickingSettings::FaceOrientationPickingMode>(); - else if (propertyChange->propertyName() == QByteArrayLiteral("pickWorldSpaceTolerance")) - m_pickWorldSpaceTolerance = propertyChange->value().toFloat(); - else if (propertyChange->propertyName() == QByteArrayLiteral("activeFrameGraph")) - m_activeFrameGraph = propertyChange->value().value<QNodeId>(); - else if (propertyChange->propertyName() == QByteArrayLiteral("renderPolicy")) - m_renderPolicy = propertyChange->value().value<QRenderSettings::RenderPolicy>(); - markDirty(AbstractRenderer::AllDirty); - } else if (e->type() == CommandRequested) { - QNodeCommandPtr command = qSharedPointerCast<QNodeCommand>(e); - if (command->name() == QLatin1String("InvalidateFrame")) - markDirty(AbstractRenderer::AllDirty); + BackendNode::syncFromFrontEnd(frontEnd, firstTime); + + const Qt3DCore::QNodeId activeFGId = Qt3DCore::qIdForNode(node->activeFrameGraph()); + if (activeFGId != m_activeFrameGraph) { + m_activeFrameGraph = activeFGId; + } + + if (node->renderPolicy() != m_renderPolicy) { + m_renderPolicy = node->renderPolicy(); + } + + if (node->pickingSettings()->pickMethod() != m_pickMethod) { + m_pickMethod = node->pickingSettings()->pickMethod(); + } + + if (node->pickingSettings()->pickResultMode() != m_pickResultMode) { + m_pickResultMode = node->pickingSettings()->pickResultMode(); + } + + if (node->pickingSettings()->worldSpaceTolerance() != m_pickWorldSpaceTolerance) { + m_pickWorldSpaceTolerance = node->pickingSettings()->worldSpaceTolerance(); + } + + if (node->pickingSettings()->faceOrientationPickingMode() != m_faceOrientationPickingMode) { + m_faceOrientationPickingMode = node->pickingSettings()->faceOrientationPickingMode(); } - BackendNode::sceneChangeEvent(e); + // Either because something above as changed or if QRenderSettingsPrivate::invalidFrame() + // was called + markDirty(AbstractRenderer::AllDirty); } RenderSettingsFunctor::RenderSettingsFunctor(AbstractRenderer *renderer) diff --git a/src/render/backend/rendersettings_p.h b/src/render/backend/rendersettings_p.h index d2880c134..1c8c0ca72 100644 --- a/src/render/backend/rendersettings_p.h +++ b/src/render/backend/rendersettings_p.h @@ -67,7 +67,7 @@ class Q_AUTOTEST_EXPORT RenderSettings : public BackendNode public: RenderSettings(); - void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) override; + void syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) override; Qt3DCore::QNodeId activeFrameGraphID() const { return m_activeFrameGraph; } QRenderSettings::RenderPolicy renderPolicy() const { return m_renderPolicy; } @@ -80,8 +80,6 @@ public: void setActiveFrameGraphId(Qt3DCore::QNodeId frameGraphNodeId) { m_activeFrameGraph = frameGraphNodeId; } private: - void initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) final; - QRenderSettings::RenderPolicy m_renderPolicy; QPickingSettings::PickMethod m_pickMethod; QPickingSettings::PickResultMode m_pickResultMode; diff --git a/src/render/frontend/qrenderaspect.cpp b/src/render/frontend/qrenderaspect.cpp index 2e90375ae..afe9cb1df 100644 --- a/src/render/frontend/qrenderaspect.cpp +++ b/src/render/frontend/qrenderaspect.cpp @@ -262,7 +262,7 @@ void QRenderAspectPrivate::registerBackendTypes() q->registerBackendType<QSceneLoader, true>(QSharedPointer<Render::RenderSceneFunctor>::create(m_renderer, m_nodeManagers->sceneManager())); q->registerBackendType<QRenderTarget, true>(QSharedPointer<Render::NodeFunctor<Render::RenderTarget, Render::RenderTargetManager> >::create(m_renderer)); q->registerBackendType<QRenderTargetOutput, true>(QSharedPointer<Render::NodeFunctor<Render::RenderTargetOutput, Render::AttachmentManager> >::create(m_renderer)); - q->registerBackendType<QRenderSettings>(QSharedPointer<Render::RenderSettingsFunctor>::create(m_renderer)); + q->registerBackendType<QRenderSettings, true>(QSharedPointer<Render::RenderSettingsFunctor>::create(m_renderer)); q->registerBackendType<QRenderState>(QSharedPointer<Render::NodeFunctor<Render::RenderStateNode, Render::RenderStateManager> >::create(m_renderer)); // Geometry + Compute diff --git a/src/render/frontend/qrendersettings.cpp b/src/render/frontend/qrendersettings.cpp index 6ddef6e8a..d106e4205 100644 --- a/src/render/frontend/qrendersettings.cpp +++ b/src/render/frontend/qrendersettings.cpp @@ -96,6 +96,11 @@ void QRenderSettingsPrivate::init() q, SLOT(_q_onWorldSpaceToleranceChanged(float))); } +void QRenderSettingsPrivate::invalidateFrame() +{ + update(); +} + /*! \internal */ void QRenderSettingsPrivate::_q_onPickingMethodChanged(QPickingSettings::PickMethod pickMethod) { @@ -156,6 +161,12 @@ QPickingSettings *QRenderSettings::pickingSettings() return &(d->m_pickingSettings); } +const QPickingSettings *QRenderSettings::pickingSettings() const +{ + Q_D(const QRenderSettings); + return &(d->m_pickingSettings); +} + /*! \qmlproperty FrameGraphNode RenderSettings::activeFrameGraph diff --git a/src/render/frontend/qrendersettings.h b/src/render/frontend/qrendersettings.h index 9d2baa58b..c8771a8fa 100644 --- a/src/render/frontend/qrendersettings.h +++ b/src/render/frontend/qrendersettings.h @@ -71,6 +71,7 @@ public: Q_ENUM(RenderPolicy) // LCOV_EXCL_LINE QPickingSettings* pickingSettings(); + const QPickingSettings* pickingSettings() const; QFrameGraphNode *activeFrameGraph() const; RenderPolicy renderPolicy() const; diff --git a/src/render/frontend/qrendersettings_p.h b/src/render/frontend/qrendersettings_p.h index f91397bd2..88f91810a 100644 --- a/src/render/frontend/qrendersettings_p.h +++ b/src/render/frontend/qrendersettings_p.h @@ -71,6 +71,8 @@ public: QFrameGraphNode *m_activeFrameGraph; QRenderSettings::RenderPolicy m_renderPolicy; + void invalidateFrame(); + void _q_onPickingMethodChanged(QPickingSettings::PickMethod pickMethod); void _q_onPickResultModeChanged(QPickingSettings::PickResultMode pickResultMode); void _q_onFaceOrientationPickingModeChanged(QPickingSettings::FaceOrientationPickingMode faceOrientationPickingMode); |