diff options
author | Paul Lemire <paul.lemire350@gmail.com> | 2016-05-13 19:55:51 +0200 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2016-06-27 10:51:58 +0000 |
commit | 718a66e2266b8e9dfa81a80efe073153c3e773b2 (patch) | |
tree | 824029bd518464cb3b48fce83252d567a0fb71b4 /src/render/framegraph/framegraphvisitor.cpp | |
parent | fc1e70e36f38df32f0db0be78a75096b5c857e78 (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.cpp | 19 |
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); } |