diff options
author | Paul Lemire <paul.lemire350@gmail.com> | 2015-08-06 18:44:54 +0200 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2015-08-07 19:43:10 +0000 |
commit | 0cad18e837850451d1edff57dc4007016b2ae872 (patch) | |
tree | b1b8681435993e6b1d74d3f9ac4626e1b7814e7d | |
parent | ff586343815af05d9afe456053773b66d5aa70bb (diff) |
RendererGeometryRenderer: add to manager dirty list when functor changes
Change-Id: I6c12090f47fdbc290c025e4b3e4eda40f7052a99
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
-rw-r--r-- | src/render/backend/renderer.cpp | 15 | ||||
-rw-r--r-- | src/render/backend/renderer_p.h | 1 | ||||
-rw-r--r-- | src/render/backend/rendergeometryrenderer.cpp | 5 |
3 files changed, 20 insertions, 1 deletions
diff --git a/src/render/backend/renderer.cpp b/src/render/backend/renderer.cpp index adf388027..1249e16e5 100644 --- a/src/render/backend/renderer.cpp +++ b/src/render/backend/renderer.cpp @@ -785,6 +785,21 @@ QVector<QAspectJobPtr> Renderer::createRenderBufferJobs() return dirtyBuffersJobs; } +QVector<QAspectJobPtr> Renderer::createGeometryRendererJobs() +{ + const QVector<QNodeId> dirtyGeometryRenderers = m_geometryRendererManager->dirtyGeometryRenderers(); + QVector<QAspectJobPtr> dirtyGeometryRendererJobs; + + Q_FOREACH (const QNodeId &geoRendererId, dirtyGeometryRenderers) { + HGeometryRenderer geometryRendererHandle = m_geometryRendererManager->lookupHandle(geoRendererId); + if (!geometryRendererHandle.isNull()) { + // TO DO: Create new job + } + } + + return dirtyGeometryRendererJobs; +} + // Called during while traversing the FrameGraph for each leaf node context of QAspectThread QAspectJobPtr Renderer::createRenderViewJob(FrameGraphNode *node, int submitOrderIndex) { diff --git a/src/render/backend/renderer_p.h b/src/render/backend/renderer_p.h index a5350fac1..a188acfaf 100644 --- a/src/render/backend/renderer_p.h +++ b/src/render/backend/renderer_p.h @@ -150,6 +150,7 @@ public: QVector<QAspectJobPtr> createRenderBinJobs(); QVector<QAspectJobPtr> createRenderBufferJobs(); + QVector<QAspectJobPtr> createGeometryRendererJobs(); QAspectJobPtr createRenderViewJob(FrameGraphNode *node, int submitOrderIndex); void executeCommands(const QVector<RenderCommand *> &commands); RenderAttribute *updateBuffersAndAttributes(RenderGeometry *geometry, RenderCommand *command, GLsizei &count, bool forceUpdate); diff --git a/src/render/backend/rendergeometryrenderer.cpp b/src/render/backend/rendergeometryrenderer.cpp index 1b46f3abf..cac9aa8c9 100644 --- a/src/render/backend/rendergeometryrenderer.cpp +++ b/src/render/backend/rendergeometryrenderer.cpp @@ -95,8 +95,9 @@ void RenderGeometryRenderer::updateFromPeer(QNode *peer) if (geometryRenderer->geometry() != Q_NULLPTR) m_geometryId = geometryRenderer->geometry()->id(); m_functor = geometryRenderer->geometryFunctor(); + if (m_functor && m_manager != Q_NULLPTR) + m_manager->addDirtyGeometryRenderer(peerUuid()); m_dirty = true; - // Add to dirty list in the manager } } @@ -133,6 +134,8 @@ void RenderGeometryRenderer::sceneChangeEvent(const QSceneChangePtr &e) QGeometryFunctorPtr newFunctor = propertyChange->value().value<QGeometryFunctorPtr>(); m_dirty |= !(newFunctor && m_functor && *newFunctor == *m_functor); m_functor = newFunctor; + if (m_functor && m_manager != Q_NULLPTR) + m_manager->addDirtyGeometryRenderer(peerUuid()); } break; } |