diff options
author | Mike Krus <mike.krus@kdab.com> | 2019-12-06 15:49:36 +0000 |
---|---|---|
committer | Mike Krus <mike.krus@kdab.com> | 2019-12-13 21:06:38 +0000 |
commit | 22eccf3a95279b85c849c6a49a0a804beb58e2c5 (patch) | |
tree | a287d7996a098501de2b167338994853cd7878df /src/render/framegraph | |
parent | 7d62c1448721a261c053a3d8adabc21787f1d955 (diff) |
Use jobsDone to sync render capture back to frontend
Removes the jobs who's only purpose was to send a message to the frontend.
Now added a jobsDone() call to render which is called from main thread
when jobs are completed, so it's safe to sync data to frontend.
Added a task trace for the backend to front end synching.
Change-Id: I587462bea353c5d5a0065b542adcacef4dedb05f
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/render/framegraph')
-rw-r--r-- | src/render/framegraph/rendercapture.cpp | 26 | ||||
-rw-r--r-- | src/render/framegraph/rendercapture_p.h | 2 |
2 files changed, 19 insertions, 9 deletions
diff --git a/src/render/framegraph/rendercapture.cpp b/src/render/framegraph/rendercapture.cpp index 68d62b6a5..73d8770a7 100644 --- a/src/render/framegraph/rendercapture.cpp +++ b/src/render/framegraph/rendercapture.cpp @@ -37,6 +37,8 @@ #include <Qt3DRender/private/qrendercapture_p.h> #include <Qt3DRender/private/rendercapture_p.h> #include <Qt3DCore/qpropertyupdatedchange.h> +#include <Qt3DCore/private/qaspectmanager_p.h> +#include <Qt3DCore/private/qaspectjobmanager_p.h> QT_BEGIN_NAMESPACE @@ -99,17 +101,25 @@ void RenderCapture::addRenderCapture(int captureId, const QImage &image) m_renderCaptureData.push_back(data); } -// called by send render capture job thread -void RenderCapture::sendRenderCaptures() +// called to send render capture in main thread +void RenderCapture::syncRenderCapturesToFrontend(Qt3DCore::QAspectManager *manager) { - QMutexLocker lock(&m_mutex); + auto *frontend = manager->lookupNode(peerId()); + if (!frontend) + return; + QRenderCapturePrivate *dfrontend = static_cast<QRenderCapturePrivate *>(Qt3DCore::QNodePrivate::get(frontend)); + QMutexLocker lock(&m_mutex); for (const RenderCaptureDataPtr &data : qAsConst(m_renderCaptureData)) { - auto e = Qt3DCore::QPropertyUpdatedChangePtr::create(peerId()); - e->setDeliveryFlags(Qt3DCore::QSceneChange::DeliverToAll); - e->setPropertyName("renderCaptureData"); - e->setValue(QVariant::fromValue(data)); - notifyObservers(e); + QPointer<QRenderCaptureReply> reply = dfrontend->takeReply(data.data()->captureId); + if (reply) { + dfrontend->setImage(reply, data.data()->image); + emit reply->completed(); +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED + emit reply->completeChanged(true); +QT_WARNING_POP + } } m_renderCaptureData.clear(); } diff --git a/src/render/framegraph/rendercapture_p.h b/src/render/framegraph/rendercapture_p.h index 4560c525d..5714fb44d 100644 --- a/src/render/framegraph/rendercapture_p.h +++ b/src/render/framegraph/rendercapture_p.h @@ -66,9 +66,9 @@ public: bool wasCaptureRequested() const; QRenderCaptureRequest takeCaptureRequest(); void addRenderCapture(int captureId, const QImage &image); - void sendRenderCaptures(); void syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) override; + void syncRenderCapturesToFrontend(Qt3DCore::QAspectManager *manager); private: |