diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2017-06-06 09:05:13 +0200 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2018-03-19 13:06:16 +0000 |
commit | 4c3f6cb3d396d45d0a463c1222bb4185b9a015ab (patch) | |
tree | 5698e4515eeb2d17fda101b8c8a140cb424a34dd | |
parent | 013be08f1b5b5884922ea5723c6dc34e27179ac7 (diff) |
SendRenderCaptureJob: remove hard dependency to Renderer
This will allow it to be reused by the various renderers
Change-Id: I5707496a40b91077a363734cc72af820ec5ca8c4
Task-number: QTBUG-61151
Reviewed-by: Mike Krus <mike.krus@kdab.com>
-rw-r--r-- | src/render/jobs/sendrendercapturejob.cpp | 12 | ||||
-rw-r--r-- | src/render/jobs/sendrendercapturejob_p.h | 7 | ||||
-rw-r--r-- | src/render/renderers/opengl/renderer/renderer.cpp | 11 | ||||
-rw-r--r-- | tests/auto/render/renderer/tst_renderer.cpp | 21 | ||||
-rw-r--r-- | tests/auto/render/sendrendercapturejob/tst_sendrendercapturejob.cpp | 3 |
5 files changed, 37 insertions, 17 deletions
diff --git a/src/render/jobs/sendrendercapturejob.cpp b/src/render/jobs/sendrendercapturejob.cpp index 6dd9387e0..5e1faaebd 100644 --- a/src/render/jobs/sendrendercapturejob.cpp +++ b/src/render/jobs/sendrendercapturejob.cpp @@ -47,9 +47,8 @@ namespace Qt3DRender { namespace Render { -SendRenderCaptureJob::SendRenderCaptureJob(Renderer *renderer) +SendRenderCaptureJob::SendRenderCaptureJob() : Qt3DCore::QAspectJob() - , m_renderer(renderer) { SET_JOB_RUN_STAT_TYPE(this, JobTypes::SendRenderCapture, 0); } @@ -59,6 +58,11 @@ SendRenderCaptureJob::~SendRenderCaptureJob() } +void SendRenderCaptureJob::setPendingCaptureRequests(const QVector<Qt3DCore::QNodeId> &requests) +{ + m_pendingCaptures = requests; +} + void SendRenderCaptureJob::setManagers(NodeManagers *managers) { m_managers = managers; @@ -66,12 +70,12 @@ void SendRenderCaptureJob::setManagers(NodeManagers *managers) void SendRenderCaptureJob::run() { - const auto pendingCaptures = m_renderer->takePendingRenderCaptureSendRequests(); - for (Qt3DCore::QNodeId id : pendingCaptures) { + for (const Qt3DCore::QNodeId id : qAsConst(m_pendingCaptures)) { auto *node = static_cast<Qt3DRender::Render::RenderCapture *> (m_managers->frameGraphManager()->lookupNode(id)); node->sendRenderCaptures(); } + m_pendingCaptures.clear(); } } // Render diff --git a/src/render/jobs/sendrendercapturejob_p.h b/src/render/jobs/sendrendercapturejob_p.h index 4ca54b483..53b111ba6 100644 --- a/src/render/jobs/sendrendercapturejob_p.h +++ b/src/render/jobs/sendrendercapturejob_p.h @@ -50,6 +50,7 @@ // #include <Qt3DCore/qaspectjob.h> +#include <Qt3DCore/qnodeid.h> #include <Qt3DRender/qt3drender_global.h> #include <Qt3DRender/private/qt3drender_global_p.h> @@ -61,21 +62,21 @@ namespace Render { class NodeManagers; class Entity; -class Renderer; class QT3DRENDERSHARED_PRIVATE_EXPORT SendRenderCaptureJob : public Qt3DCore::QAspectJob { public: - explicit SendRenderCaptureJob(Renderer *renderer); + SendRenderCaptureJob(); ~SendRenderCaptureJob(); + void setPendingCaptureRequests(const QVector<Qt3DCore::QNodeId> &requests); void setManagers(NodeManagers *managers); void run() final; private: - Renderer *m_renderer; NodeManagers *m_managers; + QVector<Qt3DCore::QNodeId> m_pendingCaptures; }; typedef QSharedPointer<SendRenderCaptureJob> SendRenderCaptureJobPtr; diff --git a/src/render/renderers/opengl/renderer/renderer.cpp b/src/render/renderers/opengl/renderer/renderer.cpp index 85ac4d2ec..5c99a3984 100644 --- a/src/render/renderers/opengl/renderer/renderer.cpp +++ b/src/render/renderers/opengl/renderer/renderer.cpp @@ -180,7 +180,7 @@ Renderer::Renderer(QRenderAspect::RenderType type) , m_calculateBoundingVolumeJob(Render::CalculateBoundingVolumeJobPtr::create()) , m_updateWorldBoundingVolumeJob(Render::UpdateWorldBoundingVolumeJobPtr::create()) , m_updateTreeEnabledJob(Render::UpdateTreeEnabledJobPtr::create()) - , m_sendRenderCaptureJob(Render::SendRenderCaptureJobPtr::create(this)) + , m_sendRenderCaptureJob(Render::SendRenderCaptureJobPtr::create()) , m_sendBufferCaptureJob(Render::SendBufferCaptureJobPtr::create()) , m_updateSkinningPaletteJob(Render::UpdateSkinningPaletteJobPtr::create()) , m_updateLevelOfDetailJob(Render::UpdateLevelOfDetailJobPtr::create()) @@ -1565,7 +1565,14 @@ QVector<Qt3DCore::QAspectJobPtr> Renderer::renderBinJobs() renderBinJobs.push_back(m_updateSkinningPaletteJob); renderBinJobs.push_back(m_updateLevelOfDetailJob); renderBinJobs.push_back(m_cleanupJob); - renderBinJobs.push_back(m_sendRenderCaptureJob); + + const QVector<Qt3DCore::QNodeId> pendingCaptureIds = takePendingRenderCaptureSendRequests(); + if (pendingCaptureIds.size() > 0) { + m_sendRenderCaptureJob->setPendingCaptureRequests(pendingCaptureIds); + renderBinJobs.push_back(m_sendRenderCaptureJob); + } + + renderBinJobs.push_back(m_sendBufferCaptureJob); renderBinJobs.append(bufferJobs); diff --git a/tests/auto/render/renderer/tst_renderer.cpp b/tests/auto/render/renderer/tst_renderer.cpp index 9a435da28..d5961e9fd 100644 --- a/tests/auto/render/renderer/tst_renderer.cpp +++ b/tests/auto/render/renderer/tst_renderer.cpp @@ -90,12 +90,25 @@ private Q_SLOTS: QCOMPARE(jobs.size(), 1 + // updateLevelOfDetailJob 1 + // cleanupJob - 1 + // sendRenderCaptureJob 1 + // sendBufferCaptureJob 1 + // VAOGatherer 1 + // updateSkinningPaletteJob singleRenderViewJobCount); // Only valid for the first call to renderBinJobs(), since subsequent calls won't have the renderqueue reset + renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty); + + // WHEN + renderer.addRenderCaptureSendRequest(Qt3DCore::QNodeId::createId()); + jobs = renderer.renderBinJobs(); + + // THEN + QCOMPARE(jobs.size(), + 1 + // updateLevelOfDetailJob + 1 + // cleanupJob + 1 + // sendBufferCaptureJob + 1 + // sendRenderCaptureJob + 1 + // VAOGatherer + 1); // updateSkinningPaletteJob // WHEN renderer.markDirty(Qt3DRender::Render::AbstractRenderer::EntityEnabledDirty, nullptr); @@ -105,7 +118,6 @@ private Q_SLOTS: QCOMPARE(jobs.size(), 1 + // updateLevelOfDetailJob 1 + // cleanupJob - 1 + // sendRenderCaptureJob 1 + // sendBufferCaptureJob 1 + // VAOGatherer 1 + // updateSkinningPaletteJob @@ -121,7 +133,6 @@ private Q_SLOTS: QCOMPARE(jobs.size(), 1 + // updateLevelOfDetailJob 1 + // cleanupJob - 1 + // sendRenderCaptureJob 1 + // sendBufferCaptureJob 1 + // VAOGatherer 1 + // WorldTransformJob @@ -140,7 +151,6 @@ private Q_SLOTS: QCOMPARE(jobs.size(), 1 + // updateLevelOfDetailJob 1 + // cleanupJob - 1 + // sendRenderCaptureJob 1 + // sendBufferCaptureJob 1 + // VAOGatherer 1 + // CalculateBoundingVolumeJob @@ -158,7 +168,6 @@ private Q_SLOTS: QCOMPARE(jobs.size(), 1 + // updateLevelOfDetailJob 1 + // cleanupJob - 1 + // sendRenderCaptureJob 1 + // sendBufferCaptureJob 1 + // VAOGatherer 1 + // updateSkinningPaletteJob @@ -174,7 +183,6 @@ private Q_SLOTS: QCOMPARE(jobs.size(), 1 + // updateLevelOfDetailJob 1 + // cleanupJob - 1 + // sendRenderCaptureJob 1 + // sendBufferCaptureJob 1 + // VAOGatherer 1 + // TexturesGathererJob @@ -200,7 +208,6 @@ private Q_SLOTS: 1 + // updateSkinningPaletteJob 1 + // updateLevelOfDetailJob 1 + // cleanupJob - 1 + // sendRenderCaptureJob 1 + // sendBufferCaptureJob 1 + // VAOGatherer 1 + // BufferGathererJob diff --git a/tests/auto/render/sendrendercapturejob/tst_sendrendercapturejob.cpp b/tests/auto/render/sendrendercapturejob/tst_sendrendercapturejob.cpp index c6bd65324..9cd2054d6 100644 --- a/tests/auto/render/sendrendercapturejob/tst_sendrendercapturejob.cpp +++ b/tests/auto/render/sendrendercapturejob/tst_sendrendercapturejob.cpp @@ -48,7 +48,7 @@ private Q_SLOTS: QImage image(10, 10, QImage::Format_ARGB32); Qt3DRender::Render::Renderer renderer(Qt3DRender::QRenderAspect::Synchronous); - Qt3DRender::Render::SendRenderCaptureJob job(&renderer); + Qt3DRender::Render::SendRenderCaptureJob job; Qt3DRender::Render::NodeManagers nodeManagers; nodeManagers.frameGraphManager()->appendNode(renderCapture->peerId(), renderCapture); @@ -59,6 +59,7 @@ private Q_SLOTS: auto request = renderCapture->takeCaptureRequest(); renderCapture->addRenderCapture(request.captureId, image); renderer.addRenderCaptureSendRequest(renderCapture->peerId()); + job.setPendingCaptureRequests(renderer.takePendingRenderCaptureSendRequests()); //WHEN job.run(); |