From a1e5040d578e55f9fccdfc1347d417508a91bd58 Mon Sep 17 00:00:00 2001 From: Paul Lemire Date: Wed, 18 Sep 2019 10:57:54 +0200 Subject: Update QCameraLens to use direct sync Change-Id: I5b1af685c640c218d3720d5339b14dfc913e01c5 Reviewed-by: Paul Lemire --- src/render/frontend/qcameralens.cpp | 15 +++++++++++---- src/render/frontend/qcameralens_p.h | 21 ++++++++++++++++++++- src/render/frontend/qrenderaspect.cpp | 2 +- 3 files changed, 32 insertions(+), 6 deletions(-) (limited to 'src/render/frontend') diff --git a/src/render/frontend/qcameralens.cpp b/src/render/frontend/qcameralens.cpp index 296421031..cf30b714a 100644 --- a/src/render/frontend/qcameralens.cpp +++ b/src/render/frontend/qcameralens.cpp @@ -228,13 +228,17 @@ QCameraLensPrivate::QCameraLensPrivate() { } + void QCameraLens::viewAll(Qt3DCore::QNodeId cameraId) { Q_D(QCameraLens); if (d->m_projectionType == PerspectiveProjection) { QVariant v; v.setValue(cameraId); - d->m_pendingViewAllCommand = sendCommand(QLatin1String("QueryRootBoundingVolume"), v); + d->m_pendingViewAllCommand = {QLatin1String("QueryRootBoundingVolume"), + v, + id()}; + d->update(); } } @@ -245,7 +249,10 @@ void QCameraLens::viewEntity(Qt3DCore::QNodeId entityId, Qt3DCore::QNodeId camer QVector ids = {entityId, cameraId}; QVariant v; v.setValue(ids); - d->m_pendingViewAllCommand = sendCommand(QLatin1String("QueryEntityBoundingVolume"), v); + d->m_pendingViewAllCommand = {QLatin1String("QueryEntityBoundingVolume"), + v, + id()}; + d->update(); } } @@ -253,7 +260,7 @@ void QCameraLensPrivate::processViewAllCommand(Qt3DCore::QNodeCommand::CommandId const QVariant &data) { Q_Q(QCameraLens); - if (m_pendingViewAllCommand != commandId) + if (!m_pendingViewAllCommand || m_pendingViewAllCommand.commandId != commandId) return; QVector boundingVolumeData = data.value< QVector >(); @@ -262,7 +269,7 @@ void QCameraLensPrivate::processViewAllCommand(Qt3DCore::QNodeCommand::CommandId QVector3D center(boundingVolumeData[0], boundingVolumeData[1], boundingVolumeData[2]); float radius = boundingVolumeData[3]; Q_EMIT q->viewSphere(center, radius); - m_pendingViewAllCommand = Qt3DCore::QNodeCommand::CommandId(); + m_pendingViewAllCommand = {}; } /*! diff --git a/src/render/frontend/qcameralens_p.h b/src/render/frontend/qcameralens_p.h index 111ab6522..01fcac0e5 100644 --- a/src/render/frontend/qcameralens_p.h +++ b/src/render/frontend/qcameralens_p.h @@ -65,6 +65,25 @@ QT_BEGIN_NAMESPACE namespace Qt3DRender { +struct CameraLensCommand +{ + QString name; + QVariant data; + Qt3DCore::QNodeCommand::CommandId commandId; + + inline operator bool() const { return !name.isEmpty(); } +}; + +inline bool operator ==(const CameraLensCommand &a, const CameraLensCommand &b) noexcept +{ + return a.name == b.name && a.data == b.data && a.commandId == b.commandId; +} + +inline bool operator !=(const CameraLensCommand &a, const CameraLensCommand &b) noexcept +{ + return !(a == b); +} + class Q_3DRENDERSHARED_PRIVATE_EXPORT QCameraLensPrivate : public Qt3DCore::QComponentPrivate { public: @@ -106,7 +125,7 @@ public: float m_exposure; - Qt3DCore::QNodeCommand::CommandId m_pendingViewAllCommand; + CameraLensCommand m_pendingViewAllCommand; void processViewAllCommand(Qt3DCore::QNodeCommand::CommandId commandId, const QVariant &data); private: diff --git a/src/render/frontend/qrenderaspect.cpp b/src/render/frontend/qrenderaspect.cpp index 67bcb6c02..08a85368f 100644 --- a/src/render/frontend/qrenderaspect.cpp +++ b/src/render/frontend/qrenderaspect.cpp @@ -255,7 +255,7 @@ void QRenderAspectPrivate::registerBackendTypes() q->registerBackendType(QSharedPointer::create(m_renderer, m_nodeManagers)); q->registerBackendType(QSharedPointer >::create(m_renderer)); - q->registerBackendType(QSharedPointer::create(m_renderer, q)); + q->registerBackendType(QSharedPointer::create(m_renderer, q)); q->registerBackendType(QSharedPointer >::create(m_renderer)); q->registerBackendType(QSharedPointer >::create(m_renderer)); q->registerBackendType(QSharedPointer >::create(m_renderer)); -- cgit v1.2.3