summaryrefslogtreecommitdiffstats
path: root/src/render/geometry/geometryrenderer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/render/geometry/geometryrenderer.cpp')
-rw-r--r--src/render/geometry/geometryrenderer.cpp89
1 files changed, 49 insertions, 40 deletions
diff --git a/src/render/geometry/geometryrenderer.cpp b/src/render/geometry/geometryrenderer.cpp
index 6f6227ba7..5a4bdcd9c 100644
--- a/src/render/geometry/geometryrenderer.cpp
+++ b/src/render/geometry/geometryrenderer.cpp
@@ -107,46 +107,55 @@ void GeometryRenderer::syncFromFrontEnd(const QNode *frontEnd, bool firstTime)
const QGeometryRenderer *node = qobject_cast<const QGeometryRenderer *>(frontEnd);
if (!node)
return;
-
- m_dirty |= m_instanceCount != node->instanceCount();
- m_instanceCount = node->instanceCount();
- m_dirty |= m_vertexCount != node->vertexCount();
- m_vertexCount = node->vertexCount();
- m_dirty |= m_indexOffset != node->indexOffset();
- m_indexOffset = node->indexOffset();
- m_dirty |= m_firstInstance != node->firstInstance();
- m_firstInstance = node->firstInstance();
- m_dirty |= m_firstVertex != node->firstVertex();
- m_firstVertex = node->firstVertex();
- m_dirty |= m_indexBufferByteOffset != node->indexBufferByteOffset();
- m_indexBufferByteOffset = node->indexBufferByteOffset();
- m_dirty |= m_restartIndexValue != node->restartIndexValue();
- m_restartIndexValue = node->restartIndexValue();
- m_dirty |= m_verticesPerPatch != node->verticesPerPatch();
- m_verticesPerPatch = node->verticesPerPatch();
- m_dirty |= m_primitiveRestartEnabled != node->primitiveRestartEnabled();
- m_primitiveRestartEnabled = node->primitiveRestartEnabled();
- m_dirty |= m_primitiveType != node->primitiveType();
- m_primitiveType = node->primitiveType();
- m_dirty |= (node->geometry() && m_geometryId != node->geometry()->id()) || (!node->geometry() && !m_geometryId.isNull());
- m_geometryId = node->geometry() ? node->geometry()->id() : Qt3DCore::QNodeId();
-
- const QGeometryRendererPrivate *dnode = static_cast<const QGeometryRendererPrivate *>(QNodePrivate::get(frontEnd));
- QGeometryFactoryPtr newFunctor = dnode->m_geometryFactory;
- const bool functorDirty = ((m_geometryFactory && !newFunctor)
- || (!m_geometryFactory && newFunctor)
- || (m_geometryFactory && newFunctor && !(*newFunctor == *m_geometryFactory)));
- if (functorDirty) {
- m_dirty = true;
- m_geometryFactory = newFunctor;
- if (m_geometryFactory && m_manager != nullptr) {
- m_manager->addDirtyGeometryRenderer(peerId());
-
- const bool isQMeshFunctor = m_geometryFactory->id() == Qt3DCore::functorTypeId<MeshLoaderFunctor>();
- if (isQMeshFunctor) {
- const QMesh *meshNode = static_cast<const QMesh *>(node);
- QMeshPrivate *dmeshNode = QMeshPrivate::get(const_cast<QMesh *>(meshNode));
- dmeshNode->setStatus(QMesh::Loading);
+ const Qt3DCore::QGeometryView *view = node->view();
+
+ auto propertyUpdater = [this](const auto *node) {
+ m_dirty |= m_instanceCount != node->instanceCount();
+ m_instanceCount = node->instanceCount();
+ m_dirty |= m_vertexCount != node->vertexCount();
+ m_vertexCount = node->vertexCount();
+ m_dirty |= m_indexOffset != node->indexOffset();
+ m_indexOffset = node->indexOffset();
+ m_dirty |= m_firstInstance != node->firstInstance();
+ m_firstInstance = node->firstInstance();
+ m_dirty |= m_firstVertex != node->firstVertex();
+ m_firstVertex = node->firstVertex();
+ m_dirty |= m_indexBufferByteOffset != node->indexBufferByteOffset();
+ m_indexBufferByteOffset = node->indexBufferByteOffset();
+ m_dirty |= m_restartIndexValue != node->restartIndexValue();
+ m_restartIndexValue = node->restartIndexValue();
+ m_dirty |= m_verticesPerPatch != node->verticesPerPatch();
+ m_verticesPerPatch = node->verticesPerPatch();
+ m_dirty |= m_primitiveRestartEnabled != node->primitiveRestartEnabled();
+ m_primitiveRestartEnabled = node->primitiveRestartEnabled();
+ m_dirty |= m_primitiveType != static_cast<QGeometryRenderer::PrimitiveType>(node->primitiveType());
+ m_primitiveType = static_cast<QGeometryRenderer::PrimitiveType>(node->primitiveType());
+ m_dirty |= (node->geometry() && m_geometryId != node->geometry()->id()) || (!node->geometry() && !m_geometryId.isNull());
+ m_geometryId = node->geometry() ? node->geometry()->id() : Qt3DCore::QNodeId();
+ };
+
+ if (view) {
+ propertyUpdater(view);
+ } else {
+ propertyUpdater(node);
+
+ const QGeometryRendererPrivate *dnode = static_cast<const QGeometryRendererPrivate *>(QNodePrivate::get(frontEnd));
+ QGeometryFactoryPtr newFunctor = dnode->m_geometryFactory;
+ const bool functorDirty = ((m_geometryFactory && !newFunctor)
+ || (!m_geometryFactory && newFunctor)
+ || (m_geometryFactory && newFunctor && !(*newFunctor == *m_geometryFactory)));
+ if (functorDirty) {
+ m_dirty = true;
+ m_geometryFactory = newFunctor;
+ if (m_geometryFactory && m_manager != nullptr) {
+ m_manager->addDirtyGeometryRenderer(peerId());
+
+ const bool isQMeshFunctor = m_geometryFactory->id() == Qt3DCore::functorTypeId<MeshLoaderFunctor>();
+ if (isQMeshFunctor) {
+ const QMesh *meshNode = static_cast<const QMesh *>(node);
+ QMeshPrivate *dmeshNode = QMeshPrivate::get(const_cast<QMesh *>(meshNode));
+ dmeshNode->setStatus(QMesh::Loading);
+ }
}
}
}