diff options
author | Paul Lemire <paul.lemire350@gmail.com> | 2015-08-10 14:30:40 +0200 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2015-08-11 17:29:03 +0000 |
commit | caf63547ffa5cdc86dd7c71208bb030443c01a24 (patch) | |
tree | 1172673b0575bc85907db7307106f810a635856c | |
parent | 2a491e627162ed10ac0d64b8b48ce7195d5c828f (diff) |
RenderGeometry: verticesPerPatch property added
Change-Id: I03a926e88299dae9b8e8b94d5daaaf87ce232320
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
-rw-r--r-- | src/render/backend/rendergeometry.cpp | 12 | ||||
-rw-r--r-- | src/render/backend/rendergeometry_p.h | 2 | ||||
-rw-r--r-- | tests/auto/render/rendergeometry/tst_rendergeometry.cpp | 15 |
3 files changed, 29 insertions, 0 deletions
diff --git a/src/render/backend/rendergeometry.cpp b/src/render/backend/rendergeometry.cpp index 5ca72a10f..026a8146e 100644 --- a/src/render/backend/rendergeometry.cpp +++ b/src/render/backend/rendergeometry.cpp @@ -47,6 +47,7 @@ namespace Render { RenderGeometry::RenderGeometry() : QBackendNode(ReadOnly) + , m_verticesPerPatch(0) , m_geometryDirty(false) { } @@ -57,6 +58,7 @@ RenderGeometry::~RenderGeometry() void RenderGeometry::cleanup() { + m_verticesPerPatch = 0; m_attributes.clear(); m_geometryDirty = false; } @@ -68,6 +70,7 @@ void RenderGeometry::updateFromPeer(QNode *peer) m_attributes.reserve(geometry->attributes().size()); Q_FOREACH (QAbstractAttribute *attribute, geometry->attributes()) m_attributes.push_back(attribute->id()); + m_verticesPerPatch = geometry->verticesPerPatch(); m_geometryDirty = true; } } @@ -94,6 +97,15 @@ void RenderGeometry::sceneChangeEvent(const QSceneChangePtr &e) break; } + case NodeUpdated: + if (propertyName == QByteArrayLiteral("verticesPerPatch")) { + m_verticesPerPatch = propertyChange->value().value<int>(); + break; + + // Note: doesn't set dirtyness as this parameter changing doesn't need + // a new VAO update. + } + default: break; } diff --git a/src/render/backend/rendergeometry_p.h b/src/render/backend/rendergeometry_p.h index 636cba773..01381dc01 100644 --- a/src/render/backend/rendergeometry_p.h +++ b/src/render/backend/rendergeometry_p.h @@ -59,10 +59,12 @@ public: inline QVector<QNodeId> attributes() const { return m_attributes; } inline bool isDirty() const { return m_geometryDirty; } + inline int verticesPerPatch() const { return m_verticesPerPatch; } void unsetDirty(); private: QVector<QNodeId> m_attributes; + int m_verticesPerPatch; bool m_geometryDirty; }; diff --git a/tests/auto/render/rendergeometry/tst_rendergeometry.cpp b/tests/auto/render/rendergeometry/tst_rendergeometry.cpp index d0f8f9985..df48997d9 100644 --- a/tests/auto/render/rendergeometry/tst_rendergeometry.cpp +++ b/tests/auto/render/rendergeometry/tst_rendergeometry.cpp @@ -60,6 +60,7 @@ private Q_SLOTS: geometry.addAttribute(&attr2); geometry.addAttribute(&attr3); geometry.addAttribute(&attr4); + geometry.setVerticesPerPatch(4); // WHEN renderGeometry.setPeer(&geometry); @@ -68,6 +69,7 @@ private Q_SLOTS: QCOMPARE(renderGeometry.peerUuid(), geometry.id()); QCOMPARE(renderGeometry.isDirty(), true); QCOMPARE(renderGeometry.attributes().count(), 4); + QCOMPARE(renderGeometry.verticesPerPatch(), 4); for (int i = 0; i < 4; ++i) QCOMPARE(geometry.attributes().at(i)->id(), renderGeometry.attributes().at(i)); @@ -82,6 +84,7 @@ private Q_SLOTS: QCOMPARE(renderGeometry.isDirty(), false); QVERIFY(renderGeometry.attributes().isEmpty()); QVERIFY(renderGeometry.peerUuid().isNull()); + QCOMPARE(renderGeometry.verticesPerPatch(), 0); // GIVEN Qt3D::QGeometry geometry; @@ -94,6 +97,7 @@ private Q_SLOTS: geometry.addAttribute(&attr2); geometry.addAttribute(&attr3); geometry.addAttribute(&attr4); + geometry.setVerticesPerPatch(4); // WHEN renderGeometry.updateFromPeer(&geometry); @@ -102,6 +106,7 @@ private Q_SLOTS: // THEN QCOMPARE(renderGeometry.isDirty(), false); QVERIFY(renderGeometry.attributes().isEmpty()); + QCOMPARE(renderGeometry.verticesPerPatch(), 0); } void checkPropertyChanges() @@ -135,6 +140,16 @@ private Q_SLOTS: renderGeometry.unsetDirty(); QVERIFY(!renderGeometry.isDirty()); + + // WHEN + updateChange.reset(new Qt3D::QScenePropertyChange(Qt3D::NodeUpdated, Qt3D::QSceneChange::Node, Qt3D::QNodeId())); + updateChange->setValue(QVariant::fromValue(3)); + updateChange->setPropertyName("verticesPerPatch"); + renderGeometry.sceneChangeEvent(updateChange); + + // THEN + QCOMPARE(renderGeometry.verticesPerPatch(), 3); + QVERIFY(!renderGeometry.isDirty()); } }; |