summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire350@gmail.com>2015-08-02 19:12:57 +0200
committerPaul Lemire <paul.lemire@kdab.com>2015-08-07 09:38:53 +0000
commit62c8cb2488f7ea5b7df65cf33ba8f8236fc81c8a (patch)
tree1e10995b7c40f98207b5bf0db1fcb0694953b57c
parent0023bfecacc9eb71abefe2f325a09ebb2280f831 (diff)
GeometryRendererManager: contains list of dirty GeometryRenderer
Whenever a GeometryRenderer gets dirty, it add itself to the GeometryRendererManager so that it can be processed and updated by an aspect job. Change-Id: Idb19dfd20d4add8d5fe47c7a76534ff7b10153a7 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
-rw-r--r--src/render/backend/geometryrenderermanager.cpp13
-rw-r--r--src/render/backend/geometryrenderermanager_p.h7
-rw-r--r--src/render/backend/rendergeometryrenderer.cpp4
3 files changed, 24 insertions, 0 deletions
diff --git a/src/render/backend/geometryrenderermanager.cpp b/src/render/backend/geometryrenderermanager.cpp
index ffefe7141..dc8e43faf 100644
--- a/src/render/backend/geometryrenderermanager.cpp
+++ b/src/render/backend/geometryrenderermanager.cpp
@@ -51,6 +51,19 @@ GeometryRendererManager::~GeometryRendererManager()
{
}
+void GeometryRendererManager::addDirtyGeometryRenderer(const QNodeId &geometryRendererId)
+{
+ if (!m_geometryRendererDirty.contains(geometryRendererId))
+ m_geometryRendererDirty.push_back(geometryRendererId);
+}
+
+QVector<QNodeId> GeometryRendererManager::dirtyGeometryRenderers()
+{
+ QVector<QNodeId> vector(m_geometryRendererDirty);
+ m_geometryRendererDirty.clear();
+ return vector;
+}
+
} // Render
} // Qt3D
diff --git a/src/render/backend/geometryrenderermanager_p.h b/src/render/backend/geometryrenderermanager_p.h
index cbeb5c6c4..1f6c4437b 100644
--- a/src/render/backend/geometryrenderermanager_p.h
+++ b/src/render/backend/geometryrenderermanager_p.h
@@ -56,6 +56,13 @@ class GeometryRendererManager : public QResourceManager<
public:
GeometryRendererManager();
~GeometryRendererManager();
+
+ // Aspect Thread
+ void addDirtyGeometryRenderer(const QNodeId &geometryRendererId);
+ QVector<QNodeId> dirtyGeometryRenderers();
+
+private:
+ QVector<QNodeId> m_geometryRendererDirty;
};
} // Render
diff --git a/src/render/backend/rendergeometryrenderer.cpp b/src/render/backend/rendergeometryrenderer.cpp
index 6b75410d5..fc06f8632 100644
--- a/src/render/backend/rendergeometryrenderer.cpp
+++ b/src/render/backend/rendergeometryrenderer.cpp
@@ -93,6 +93,8 @@ void RenderGeometryRenderer::updateFromPeer(QNode *peer)
m_geometryId = geometryRenderer->geometry()->id();
m_dirty = true;
// Add to dirty list in the manager
+ if (m_manager != Q_NULLPTR)
+ m_manager->addDirtyGeometryRenderer(peerUuid());
}
}
@@ -147,6 +149,8 @@ void RenderGeometryRenderer::sceneChangeEvent(const QSceneChangePtr &e)
}
// Add to dirty list in manager
+ if (m_dirty && m_manager != Q_NULLPTR)
+ m_manager->addDirtyGeometryRenderer(peerUuid());
}
void RenderGeometryRenderer::unsetDirty()