summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2017-06-06 09:05:13 +0200
committerPaul Lemire <paul.lemire@kdab.com>2018-03-19 13:06:16 +0000
commit4c3f6cb3d396d45d0a463c1222bb4185b9a015ab (patch)
tree5698e4515eeb2d17fda101b8c8a140cb424a34dd
parent013be08f1b5b5884922ea5723c6dc34e27179ac7 (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.cpp12
-rw-r--r--src/render/jobs/sendrendercapturejob_p.h7
-rw-r--r--src/render/renderers/opengl/renderer/renderer.cpp11
-rw-r--r--tests/auto/render/renderer/tst_renderer.cpp21
-rw-r--r--tests/auto/render/sendrendercapturejob/tst_sendrendercapturejob.cpp3
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();