diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2019-09-17 14:34:39 +0200 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2019-09-20 14:26:34 +0200 |
commit | 9547953642374c9df0f9153098bc936373093fba (patch) | |
tree | bcb4b1bc88139f230f338ec25bec2062ad25e8de /src/render/framegraph | |
parent | d9d07b81b670a0d526e4a659bbe434a9a6cddb07 (diff) |
Update QRenderCapture to use direct sync
Change-Id: I3a253af0ee11ad141c3dbcaf8b92e3f67797f05f
Reviewed-by: Mike Krus <mike.krus@kdab.com>
Diffstat (limited to 'src/render/framegraph')
-rw-r--r-- | src/render/framegraph/qrendercapture.cpp | 12 | ||||
-rw-r--r-- | src/render/framegraph/qrendercapture_p.h | 14 | ||||
-rw-r--r-- | src/render/framegraph/rendercapture.cpp | 23 | ||||
-rw-r--r-- | src/render/framegraph/rendercapture_p.h | 3 |
4 files changed, 28 insertions, 24 deletions
diff --git a/src/render/framegraph/qrendercapture.cpp b/src/render/framegraph/qrendercapture.cpp index 5bda569f9..2169f72dd 100644 --- a/src/render/framegraph/qrendercapture.cpp +++ b/src/render/framegraph/qrendercapture.cpp @@ -326,11 +326,9 @@ QRenderCaptureReply *QRenderCapture::requestCapture(int captureId) d->replyDestroyed(reply); }); - Qt3DCore::QPropertyUpdatedChangePtr change(new Qt3DCore::QPropertyUpdatedChange(id())); - change->setPropertyName(QByteArrayLiteral("renderCaptureRequest")); const QRenderCaptureRequest request = { captureId, QRect() }; - change->setValue(QVariant::fromValue(request)); - d->notifyObservers(change); + d->m_pendingRequests.push_back(request); + d->update(); return reply; } @@ -351,11 +349,9 @@ QRenderCaptureReply *QRenderCapture::requestCapture(const QRect &rect) d->replyDestroyed(reply); }); - Qt3DCore::QPropertyUpdatedChangePtr change(new Qt3DCore::QPropertyUpdatedChange(id())); - change->setPropertyName(QByteArrayLiteral("renderCaptureRequest")); const QRenderCaptureRequest request = { captureId, rect }; - change->setValue(QVariant::fromValue(request)); - d->notifyObservers(change); + d->m_pendingRequests.push_back(request); + d->update(); captureId++; diff --git a/src/render/framegraph/qrendercapture_p.h b/src/render/framegraph/qrendercapture_p.h index 4e509cc59..3dec4d280 100644 --- a/src/render/framegraph/qrendercapture_p.h +++ b/src/render/framegraph/qrendercapture_p.h @@ -57,6 +57,12 @@ QT_BEGIN_NAMESPACE namespace Qt3DRender { +struct QRenderCaptureRequest +{ + int captureId; + QRect rect; +}; + class QRenderCapturePrivate : public QFrameGraphNodePrivate { public: @@ -64,6 +70,7 @@ public: ~QRenderCapturePrivate(); QVector<QRenderCaptureReply *> m_waitingReplies; QMutex m_mutex; + mutable QVector<QRenderCaptureRequest> m_pendingRequests; QRenderCaptureReply *createReply(int captureId); QRenderCaptureReply *takeReply(int captureId); @@ -82,6 +89,7 @@ public: int m_captureId; bool m_complete; + Q_DECLARE_PUBLIC(QRenderCaptureReply) }; @@ -100,12 +108,6 @@ struct RenderCaptureData typedef QSharedPointer<RenderCaptureData> RenderCaptureDataPtr; -struct QRenderCaptureRequest -{ - int captureId; - QRect rect; -}; - } // Qt3DRender QT_END_NAMESPACE diff --git a/src/render/framegraph/rendercapture.cpp b/src/render/framegraph/rendercapture.cpp index 166294889..68d62b6a5 100644 --- a/src/render/framegraph/rendercapture.cpp +++ b/src/render/framegraph/rendercapture.cpp @@ -70,16 +70,23 @@ QRenderCaptureRequest RenderCapture::takeCaptureRequest() return m_requestedCaptures.takeFirst(); } -void RenderCapture::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) +void RenderCapture::syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) { - if (e->type() == Qt3DCore::PropertyUpdated) { - Qt3DCore::QPropertyUpdatedChangePtr propertyChange = qSharedPointerCast<Qt3DCore::QPropertyUpdatedChange>(e); - if (propertyChange->propertyName() == QByteArrayLiteral("renderCaptureRequest")) { - requestCapture(propertyChange->value().value<QRenderCaptureRequest>()); - markDirty(AbstractRenderer::FrameGraphDirty); - } + const QRenderCapture *node = qobject_cast<const QRenderCapture *>(frontEnd); + if (!node) + return; + + FrameGraphNode::syncFromFrontEnd(frontEnd, firstTime); + + const QRenderCapturePrivate *d = static_cast<const QRenderCapturePrivate *>(QFrameGraphNodePrivate::get(node)); + const auto newPendingsCaptures = std::move(d->m_pendingRequests); + if (newPendingsCaptures.size() > 0) { + m_requestedCaptures.append(newPendingsCaptures); + markDirty(AbstractRenderer::FrameGraphDirty); } - FrameGraphNode::sceneChangeEvent(e); + + if (firstTime) + markDirty(AbstractRenderer::FrameGraphDirty); } // called by render thread diff --git a/src/render/framegraph/rendercapture_p.h b/src/render/framegraph/rendercapture_p.h index 71fa01ec1..4560c525d 100644 --- a/src/render/framegraph/rendercapture_p.h +++ b/src/render/framegraph/rendercapture_p.h @@ -68,8 +68,7 @@ public: void addRenderCapture(int captureId, const QImage &image); void sendRenderCaptures(); -protected: - void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) final; + void syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) override; private: |