diff options
author | Mike Krus <mike.krus@kdab.com> | 2019-10-07 17:40:30 +0100 |
---|---|---|
committer | Mike Krus <mike.krus@kdab.com> | 2019-10-11 07:22:55 +0100 |
commit | 4fde5ac2ee2f1a179b5591b19a20e611a486de2d (patch) | |
tree | c3c64a43cc91e81ebbe1d1c5ffe74de5d14f2394 /src/input | |
parent | 6af2f62e003833c788640a6e493865cfbbab03a3 (diff) |
Update AxisAccumulatorJob to use direct sync
Change-Id: I4e64fa9f94dad1392b80851c2a6d8d4e013147f7
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/input')
-rw-r--r-- | src/input/backend/axisaccumulator.cpp | 21 | ||||
-rw-r--r-- | src/input/backend/axisaccumulatorjob.cpp | 39 | ||||
-rw-r--r-- | src/input/backend/axisaccumulatorjob_p.h | 3 | ||||
-rw-r--r-- | src/input/frontend/qaxisaccumulator.cpp | 11 | ||||
-rw-r--r-- | src/input/frontend/qaxisaccumulator.h | 3 |
5 files changed, 40 insertions, 37 deletions
diff --git a/src/input/backend/axisaccumulator.cpp b/src/input/backend/axisaccumulator.cpp index fc66e02c9..8e93c120e 100644 --- a/src/input/backend/axisaccumulator.cpp +++ b/src/input/backend/axisaccumulator.cpp @@ -39,7 +39,6 @@ #include "axisaccumulator_p.h" -#include <Qt3DCore/qpropertyupdatedchange.h> #include <Qt3DInput/qaxis.h> #include <Qt3DInput/private/inputmanagers_p.h> #include <Qt3DInput/private/qaxisaccumulator_p.h> @@ -70,30 +69,14 @@ void AxisAccumulator::cleanup() void AxisAccumulator::setValue(float value) { - if (isEnabled() && value != m_value) { + if (isEnabled() && value != m_value) m_value = value; - - // Send a change to the frontend - auto e = Qt3DCore::QPropertyUpdatedChangePtr::create(peerId()); - e->setDeliveryFlags(Qt3DCore::QSceneChange::DeliverToAll); - e->setPropertyName("value"); - e->setValue(m_value); - notifyObservers(e); - } } void AxisAccumulator::setVelocity(float velocity) { - if (isEnabled() && velocity != m_velocity) { + if (isEnabled() && velocity != m_velocity) m_velocity = velocity; - - // Send a change to the frontend - auto e = Qt3DCore::QPropertyUpdatedChangePtr::create(peerId()); - e->setDeliveryFlags(Qt3DCore::QSceneChange::DeliverToAll); - e->setPropertyName("velocity"); - e->setValue(m_velocity); - notifyObservers(e); - } } void AxisAccumulator::syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) diff --git a/src/input/backend/axisaccumulatorjob.cpp b/src/input/backend/axisaccumulatorjob.cpp index cda8a5e26..16a68349e 100644 --- a/src/input/backend/axisaccumulatorjob.cpp +++ b/src/input/backend/axisaccumulatorjob.cpp @@ -38,7 +38,9 @@ ****************************************************************************/ #include "axisaccumulatorjob_p.h" - +#include <Qt3DCore/private/qaspectmanager_p.h> +#include <Qt3DInput/qaxisaccumulator.h> +#include <Qt3DInput/private/qaxisaccumulator_p.h> #include <Qt3DInput/private/axisaccumulator_p.h> #include <Qt3DInput/private/job_common_p.h> #include <Qt3DInput/private/inputmanagers_p.h> @@ -48,24 +50,53 @@ QT_BEGIN_NAMESPACE namespace Qt3DInput { namespace Input { +class AxisAccumulatorJobPrivate : public Qt3DCore::QAspectJobPrivate +{ +public: + AxisAccumulatorJobPrivate() { } + ~AxisAccumulatorJobPrivate() override { } + + void postFrame(Qt3DCore::QAspectManager *manager) override; + + QVector<AxisAccumulator *> updates; +}; + AxisAccumulatorJob::AxisAccumulatorJob(AxisAccumulatorManager *axisAccumulatormanager, AxisManager *axisManager) - : Qt3DCore::QAspectJob() + : Qt3DCore::QAspectJob(*new AxisAccumulatorJobPrivate) , m_axisAccumulatorManager(axisAccumulatormanager) , m_axisManager(axisManager) , m_dt(0.0f) { - SET_JOB_RUN_STAT_TYPE(this, JobTypes::AxisAccumulatorIntegration, 0); + SET_JOB_RUN_STAT_TYPE(this, JobTypes::AxisAccumulatorIntegration, 0) } void AxisAccumulatorJob::run() { + Q_D(AxisAccumulatorJob); // Iterate over the accumulators and ask each to step the integrations const auto activeHandles = m_axisAccumulatorManager->activeHandles(); + d->updates.reserve(activeHandles.size()); + for (const auto &accumulatorHandle : activeHandles) { AxisAccumulator *accumulator = m_axisAccumulatorManager->data(accumulatorHandle); - if (accumulator->isEnabled()) + if (accumulator->isEnabled()) { accumulator->stepIntegration(m_axisManager, m_dt); + d->updates.push_back(accumulator); + } + } +} + +void AxisAccumulatorJobPrivate::postFrame(Qt3DCore::QAspectManager *manager) +{ + for (auto backend: qAsConst(updates)) { + QAxisAccumulator *node = qobject_cast<QAxisAccumulator *>(manager->lookupNode(backend->peerId())); + if (!node) + continue; + + QAxisAccumulatorPrivate *dnode = static_cast<QAxisAccumulatorPrivate *>(QAxisAccumulatorPrivate::get(node)); + dnode->setValue(backend->value()); + dnode->setVelocity(backend->velocity()); } } diff --git a/src/input/backend/axisaccumulatorjob_p.h b/src/input/backend/axisaccumulatorjob_p.h index 4d38fd70f..702004dd2 100644 --- a/src/input/backend/axisaccumulatorjob_p.h +++ b/src/input/backend/axisaccumulatorjob_p.h @@ -62,6 +62,7 @@ namespace Input { class AxisAccumulatorManager; class AxisManager; +class AxisAccumulatorJobPrivate; class Q_AUTOTEST_EXPORT AxisAccumulatorJob : public Qt3DCore::QAspectJob { @@ -74,6 +75,8 @@ public: void run() override; private: + Q_DECLARE_PRIVATE(AxisAccumulatorJob) + AxisAccumulatorManager *m_axisAccumulatorManager; AxisManager *m_axisManager; float m_dt; diff --git a/src/input/frontend/qaxisaccumulator.cpp b/src/input/frontend/qaxisaccumulator.cpp index 0c156194b..7e9930f66 100644 --- a/src/input/frontend/qaxisaccumulator.cpp +++ b/src/input/frontend/qaxisaccumulator.cpp @@ -291,17 +291,6 @@ void QAxisAccumulator::setScale(float scale) } /*! \internal */ -void QAxisAccumulator::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &change) -{ - Q_D(QAxisAccumulator); - auto e = qSharedPointerCast<Qt3DCore::QPropertyUpdatedChange>(change); - if (e->type() == Qt3DCore::PropertyUpdated && e->propertyName() == QByteArrayLiteral("value")) - d->setValue(e->value().toFloat()); - else if (e->type() == Qt3DCore::PropertyUpdated && e->propertyName() == QByteArrayLiteral("velocity")) - d->setVelocity(e->value().toFloat()); -} - -/*! \internal */ Qt3DCore::QNodeCreatedChangeBasePtr QAxisAccumulator::createNodeCreationChange() const { auto creationChange = Qt3DCore::QNodeCreatedChangePtr<QAxisAccumulatorData>::create(this); diff --git a/src/input/frontend/qaxisaccumulator.h b/src/input/frontend/qaxisaccumulator.h index e5f35a32f..bb2e2696b 100644 --- a/src/input/frontend/qaxisaccumulator.h +++ b/src/input/frontend/qaxisaccumulator.h @@ -87,9 +87,6 @@ Q_SIGNALS: void velocityChanged(float value); void scaleChanged(float scale); -protected: - void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &change) override; - private: Q_DECLARE_PRIVATE(QAxisAccumulator) Qt3DCore::QNodeCreatedChangeBasePtr createNodeCreationChange() const override; |