// Copyright (C) 2015 Klaralvdalens Datakonsult AB (KDAB). // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include #include #include #include #include #include #include #include #include "testarbiter.h" class tst_QGeometryRenderer: public QObject { Q_OBJECT private Q_SLOTS: void checkPropertyUpdates() { // GIVEN TestArbiter arbiter; QScopedPointer geometryRenderer(new Qt3DRender::QGeometryRenderer()); arbiter.setArbiterOnNode(geometryRenderer.data()); // WHEN geometryRenderer->setInstanceCount(256); QCoreApplication::processEvents(); // THEN QCOMPARE(arbiter.dirtyNodes().size(), 1); QCOMPARE(arbiter.dirtyNodes().front(), geometryRenderer.data()); arbiter.clear(); // WHEN geometryRenderer->setVertexCount(1340); QCoreApplication::processEvents(); // THEN QCOMPARE(arbiter.dirtyNodes().size(), 1); QCOMPARE(arbiter.dirtyNodes().front(), geometryRenderer.data()); arbiter.clear(); // WHEN geometryRenderer->setIndexOffset(883); QCoreApplication::processEvents(); // THEN QCOMPARE(arbiter.dirtyNodes().size(), 1); QCOMPARE(arbiter.dirtyNodes().front(), geometryRenderer.data()); arbiter.clear(); // WHEN geometryRenderer->setFirstInstance(1200); QCoreApplication::processEvents(); // THEN QCOMPARE(arbiter.dirtyNodes().size(), 1); QCOMPARE(arbiter.dirtyNodes().front(), geometryRenderer.data()); arbiter.clear(); // WHEN geometryRenderer->setIndexBufferByteOffset(91); QCoreApplication::processEvents(); // THEN QCOMPARE(arbiter.dirtyNodes().size(), 1); QCOMPARE(arbiter.dirtyNodes().front(), geometryRenderer.data()); arbiter.clear(); // WHEN geometryRenderer->setRestartIndexValue(65535); QCoreApplication::processEvents(); // THEN QCOMPARE(arbiter.dirtyNodes().size(), 1); QCOMPARE(arbiter.dirtyNodes().front(), geometryRenderer.data()); arbiter.clear(); // WHEN geometryRenderer->setVerticesPerPatch(2); QCoreApplication::processEvents(); // THEN QCOMPARE(arbiter.dirtyNodes().size(), 1); QCOMPARE(arbiter.dirtyNodes().front(), geometryRenderer.data()); arbiter.clear(); // WHEN geometryRenderer->setPrimitiveRestartEnabled(true); QCoreApplication::processEvents(); // THEN QCOMPARE(arbiter.dirtyNodes().size(), 1); QCOMPARE(arbiter.dirtyNodes().front(), geometryRenderer.data()); arbiter.clear(); // WHEN geometryRenderer->setPrimitiveType(Qt3DRender::QGeometryRenderer::Patches); QCoreApplication::processEvents(); // THEN QCOMPARE(arbiter.dirtyNodes().size(), 1); QCOMPARE(arbiter.dirtyNodes().front(), geometryRenderer.data()); arbiter.clear(); // WHEN Qt3DCore::QGeometry geom; geometryRenderer->setGeometry(&geom); QCoreApplication::processEvents(); // THEN QCOMPARE(arbiter.dirtyNodes().size(), 1); QCOMPARE(arbiter.dirtyNodes().front(), geometryRenderer.data()); arbiter.clear(); // WHEN Qt3DCore::QGeometry geom2; geometryRenderer->setGeometry(&geom2); QCoreApplication::processEvents(); // THEN QCOMPARE(arbiter.dirtyNodes().size(), 1); QCOMPARE(arbiter.dirtyNodes().front(), geometryRenderer.data()); arbiter.clear(); // WHEN geometryRenderer->setSortIndex(42.f); QCoreApplication::processEvents(); // THEN QCOMPARE(arbiter.dirtyNodes().size(), 1); QCOMPARE(arbiter.dirtyNodes().front(), geometryRenderer.data()); arbiter.clear(); } void checkGeometryBookkeeping() { // GIVEN QScopedPointer geometryRenderer(new Qt3DRender::QGeometryRenderer); { // WHEN Qt3DCore::QGeometry geometry; geometryRenderer->setGeometry(&geometry); // THEN QCOMPARE(geometry.parent(), geometryRenderer.data()); QCOMPARE(geometryRenderer->geometry(), &geometry); } // THEN (Should not crash and parameter be unset) QVERIFY(geometryRenderer->geometry() == nullptr); { // WHEN Qt3DRender::QGeometryRenderer someOtherGeometryRenderer; QScopedPointer geometry(new Qt3DCore::QGeometry(&someOtherGeometryRenderer)); geometryRenderer->setGeometry(geometry.data()); // THEN QCOMPARE(geometry->parent(), &someOtherGeometryRenderer); QCOMPARE(geometryRenderer->geometry(), geometry.data()); // WHEN geometryRenderer.reset(); geometry.reset(); // THEN Should not crash when the geometry is destroyed (tests for failed removal of destruction helper) } } }; QTEST_MAIN(tst_QGeometryRenderer) #include "tst_qgeometryrenderer.moc"