summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire350@gmail.com>2015-08-10 14:30:40 +0200
committerSean Harmer <sean.harmer@kdab.com>2015-08-11 17:29:03 +0000
commitcaf63547ffa5cdc86dd7c71208bb030443c01a24 (patch)
tree1172673b0575bc85907db7307106f810a635856c
parent2a491e627162ed10ac0d64b8b48ce7195d5c828f (diff)
RenderGeometry: verticesPerPatch property added
Change-Id: I03a926e88299dae9b8e8b94d5daaaf87ce232320 Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
-rw-r--r--src/render/backend/rendergeometry.cpp12
-rw-r--r--src/render/backend/rendergeometry_p.h2
-rw-r--r--tests/auto/render/rendergeometry/tst_rendergeometry.cpp15
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());
}
};