summaryrefslogtreecommitdiffstats
path: root/src/render/framegraph/framegraphvisitor.cpp
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire350@gmail.com>2016-05-13 19:55:51 +0200
committerPaul Lemire <paul.lemire@kdab.com>2016-06-27 10:51:58 +0000
commit718a66e2266b8e9dfa81a80efe073153c3e773b2 (patch)
tree824029bd518464cb3b48fce83252d567a0fb71b4 /src/render/framegraph/framegraphvisitor.cpp
parentfc1e70e36f38df32f0db0be78a75096b5c857e78 (diff)
QFrameGraphVisitor: avoid allocations of FrameGraphNode->children()
Change-Id: I221b30a5790ffd2d45ad8a145ceac7873a4735da Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/render/framegraph/framegraphvisitor.cpp')
-rw-r--r--src/render/framegraph/framegraphvisitor.cpp19
1 files changed, 11 insertions, 8 deletions
diff --git a/src/render/framegraph/framegraphvisitor.cpp b/src/render/framegraph/framegraphvisitor.cpp
index 7142d8df8..1ff26fba9 100644
--- a/src/render/framegraph/framegraphvisitor.cpp
+++ b/src/render/framegraph/framegraphvisitor.cpp
@@ -41,6 +41,7 @@
#include "framegraphnode_p.h"
#include <Qt3DRender/private/renderer_p.h>
+#include <Qt3DRender/private/managers_p.h>
QT_BEGIN_NAMESPACE
@@ -49,8 +50,10 @@ using namespace Qt3DCore;
namespace Qt3DRender {
namespace Render {
-FrameGraphVisitor::FrameGraphVisitor()
- : m_renderer(nullptr)
+FrameGraphVisitor::FrameGraphVisitor(Renderer *renderer,
+ const FrameGraphManager *manager)
+ : m_renderer(renderer)
+ , m_manager(manager)
, m_jobs(nullptr)
, m_renderviewIndex(0)
@@ -58,10 +61,8 @@ FrameGraphVisitor::FrameGraphVisitor()
}
void FrameGraphVisitor::traverse(FrameGraphNode *root,
- Renderer *renderer,
QVector<Qt3DCore::QAspectJobPtr> *jobs)
{
- m_renderer = renderer;
m_jobs = jobs;
m_renderviewIndex = 0;
@@ -85,13 +86,15 @@ void FrameGraphVisitor::visit(Render::FrameGraphNode *node)
// Recurse to children (if we have any), otherwise if this is a leaf node,
// initiate a rendering from the current camera
- const auto children = node->children();
- for (Render::FrameGraphNode *n : children)
- visit(n);
+ const QVector<Qt3DCore::QNodeId> fgChildIds = node->childrenIds();
+
+ for (const Qt3DCore::QNodeId fgChildId : fgChildIds)
+ visit(m_manager->lookupNode(fgChildId));
+
// Leaf node - create a RenderView ready to be populated
// TODO: Pass in only framegraph config that has changed from previous
// index RenderViewJob.
- if (node->childrenIds().empty()) {
+ if (fgChildIds.empty()) {
QAspectJobPtr job = m_renderer->createRenderViewJob(node, m_renderviewIndex++);
m_jobs->append(job);
}