summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire350@gmail.com>2015-08-06 18:44:54 +0200
committerPaul Lemire <paul.lemire@kdab.com>2015-08-07 19:43:10 +0000
commit0cad18e837850451d1edff57dc4007016b2ae872 (patch)
treeb1b8681435993e6b1d74d3f9ac4626e1b7814e7d
parentff586343815af05d9afe456053773b66d5aa70bb (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.cpp15
-rw-r--r--src/render/backend/renderer_p.h1
-rw-r--r--src/render/backend/rendergeometryrenderer.cpp5
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;
}