summaryrefslogtreecommitdiffstats
path: root/src/input
diff options
context:
space:
mode:
authorMike Krus <mike.krus@kdab.com>2019-10-07 17:40:30 +0100
committerMike Krus <mike.krus@kdab.com>2019-10-11 07:22:55 +0100
commit4fde5ac2ee2f1a179b5591b19a20e611a486de2d (patch)
treec3c64a43cc91e81ebbe1d1c5ffe74de5d14f2394 /src/input
parent6af2f62e003833c788640a6e493865cfbbab03a3 (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.cpp21
-rw-r--r--src/input/backend/axisaccumulatorjob.cpp39
-rw-r--r--src/input/backend/axisaccumulatorjob_p.h3
-rw-r--r--src/input/frontend/qaxisaccumulator.cpp11
-rw-r--r--src/input/frontend/qaxisaccumulator.h3
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;