diff options
author | Paul Lemire <paul.lemire350@gmail.com> | 2015-08-02 19:12:57 +0200 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2015-08-07 09:38:53 +0000 |
commit | 62c8cb2488f7ea5b7df65cf33ba8f8236fc81c8a (patch) | |
tree | 1e10995b7c40f98207b5bf0db1fcb0694953b57c | |
parent | 0023bfecacc9eb71abefe2f325a09ebb2280f831 (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.cpp | 13 | ||||
-rw-r--r-- | src/render/backend/geometryrenderermanager_p.h | 7 | ||||
-rw-r--r-- | src/render/backend/rendergeometryrenderer.cpp | 4 |
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() |