diff options
author | Sean Harmer <sean.harmer@kdab.com> | 2016-11-25 12:09:51 +0000 |
---|---|---|
committer | Jani Heikkinen <jani.heikkinen@qt.io> | 2016-12-07 05:53:54 +0000 |
commit | 22f6718ec4da3851de913d2de18dc0375574a458 (patch) | |
tree | 090c6d0c4baeabc91b16ddc2a721e1e4e8577a61 /src/input/frontend/qinputaspect.cpp | |
parent | 073664d6d7cc5b2081c32c4a75b7a6d8030de859 (diff) |
Add plumbing and process AxisAccumulators each frame
Change-Id: I91a0f9384c7ef2ba642db1a2becdba1d2e374d87
Reviewed-by: Kevin Ottens <kevin.ottens@kdab.com>
Diffstat (limited to 'src/input/frontend/qinputaspect.cpp')
-rw-r--r-- | src/input/frontend/qinputaspect.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/input/frontend/qinputaspect.cpp b/src/input/frontend/qinputaspect.cpp index 5ad5c644c..066d2381a 100644 --- a/src/input/frontend/qinputaspect.cpp +++ b/src/input/frontend/qinputaspect.cpp @@ -61,6 +61,7 @@ #include <QPluginLoader> #include <Qt3DInput/qaxis.h> +#include <Qt3DInput/qaxisaccumulator.h> #include <Qt3DInput/qaction.h> #include <Qt3DInput/qaxissetting.h> #include <Qt3DInput/qactioninput.h> @@ -72,6 +73,7 @@ #include <Qt3DInput/qabstractphysicaldevice.h> #include <Qt3DInput/private/qabstractphysicaldeviceproxy_p.h> #include <Qt3DInput/private/axis_p.h> +#include <Qt3DInput/private/axisaccumulator_p.h> #include <Qt3DInput/private/action_p.h> #include <Qt3DInput/private/axissetting_p.h> #include <Qt3DInput/private/actioninput_p.h> @@ -86,6 +88,7 @@ #include <Qt3DInput/private/inputsettings_p.h> #include <Qt3DInput/private/eventsourcesetterhelper_p.h> #include <Qt3DInput/private/loadproxydevicejob_p.h> +#include <Qt3DInput/private/axisaccumulatorjob_p.h> #ifdef HAVE_QGAMEPAD # include <Qt3DInput/private/qgamepadinput_p.h> @@ -101,6 +104,7 @@ QInputAspectPrivate::QInputAspectPrivate() : QAbstractAspectPrivate() , m_inputHandler(new Input::InputHandler()) , m_keyboardMouseIntegration(new Input::KeyboardMouseGenericDeviceIntegration(m_inputHandler.data())) + , m_time(0) { } @@ -134,6 +138,7 @@ QInputAspect::QInputAspect(QInputAspectPrivate &dd, QObject *parent) registerBackendType<QMouseDevice>(QBackendNodeMapperPtr(new Input::MouseDeviceFunctor(this, d_func()->m_inputHandler.data()))); registerBackendType<QMouseHandler>(QBackendNodeMapperPtr(new Input::MouseHandlerFunctor(d_func()->m_inputHandler.data()))); registerBackendType<QAxis>(QBackendNodeMapperPtr(new Input::InputNodeFunctor<Input::Axis, Input::AxisManager>(d_func()->m_inputHandler->axisManager()))); + registerBackendType<QAxisAccumulator>(QBackendNodeMapperPtr(new Input::InputNodeFunctor<Input::AxisAccumulator, Input::AxisAccumulatorManager>(d_func()->m_inputHandler->axisAccumulatorManager()))); registerBackendType<QAnalogAxisInput>(QBackendNodeMapperPtr(new Input::InputNodeFunctor<Input::AnalogAxisInput, Input::AnalogAxisInputManager>(d_func()->m_inputHandler->analogAxisInputManager()))); registerBackendType<QButtonAxisInput>(QBackendNodeMapperPtr(new Input::InputNodeFunctor<Input::ButtonAxisInput, Input::ButtonAxisInputManager>(d_func()->m_inputHandler->buttonAxisInputManager()))); registerBackendType<QAxisSetting>(QBackendNodeMapperPtr(new Input::InputNodeFunctor<Input::AxisSetting, Input::AxisSettingManager>(d_func()->m_inputHandler->axisSettingManager()))); @@ -213,6 +218,10 @@ QStringList QInputAspect::availablePhysicalDevices() const QVector<QAspectJobPtr> QInputAspect::jobsToExecute(qint64 time) { Q_D(QInputAspect); + const qint64 deltaTime = time - d->m_time; + const float dt = static_cast<const float>(deltaTime) / 1.0e9; + d->m_time = time; + QVector<QAspectJobPtr> jobs; d->m_inputHandler->updateEventSource(); @@ -240,6 +249,8 @@ QVector<QAspectJobPtr> QInputAspect::jobsToExecute(qint64 time) // Jobs that update Axis/Action (store combined axis/action value) const auto devHandles = d->m_inputHandler->logicalDeviceManager()->activeDevices(); + QVector<QAspectJobPtr> axisActionJobs; + axisActionJobs.reserve(devHandles.size()); for (Input::HLogicalDevice devHandle : devHandles) { const auto device = d->m_inputHandler->logicalDeviceManager()->data(devHandle); if (!device->isEnabled()) @@ -247,10 +258,20 @@ QVector<QAspectJobPtr> QInputAspect::jobsToExecute(qint64 time) QAspectJobPtr updateAxisActionJob(new Input::UpdateAxisActionJob(time, d->m_inputHandler.data(), devHandle)); jobs += updateAxisActionJob; + axisActionJobs.push_back(updateAxisActionJob); for (const QAspectJobPtr &job : dependsOnJobs) updateAxisActionJob->addDependency(job); } + // Once all the axes have been updated we can step the integrations on + // the AxisAccumulators + auto accumulateJob = Input::AxisAccumulatorJobPtr::create(d->m_inputHandler->axisAccumulatorManager(), + d->m_inputHandler->axisManager()); + accumulateJob->setDeltaTime(dt); + for (const QAspectJobPtr &job : qAsConst(axisActionJobs)) + accumulateJob->addDependency(job); + jobs.push_back(accumulateJob); + return jobs; } |