summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@qt.io>2019-05-22 11:51:14 +0300
committerMiikka Heikkinen <miikka.heikkinen@qt.io>2019-05-23 16:48:54 +0300
commit08f021f7fa01ab0a458c939ee2af110e410a841a (patch)
tree0205a4aedcbd38d7c6946f48bd965c3a1cad23bd
parent1cc2c2fa919c6f2cf2e1ac836248184258fe779e (diff)
Support deleting dynamically created meshes and materials
Task-number: QT3DS-3513 Task-number: QT3DS-3514 Change-Id: Iba9168e40e20b534256a6e53c959dd981027fb37 Reviewed-by: Jere Tuliniemi <jere.tuliniemi@qt.io> Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io> Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io> Reviewed-by: Antti Määttä <antti.maatta@qt.io> Reviewed-by: Jari Karppinen <jari.karppinen@qt.io>
-rw-r--r--src/Runtime/Source/engine/Qt3DSRuntimeView.cpp22
-rw-r--r--src/Runtime/Source/engine/Qt3DSRuntimeView.h2
-rw-r--r--src/Runtime/Source/runtime/Qt3DSIScriptBridge.h4
-rw-r--r--src/Runtime/Source/runtime/Qt3DSQmlEngine.cpp53
-rw-r--r--src/Runtime/Source/viewer/Qt3DSViewerApp.cpp16
-rw-r--r--src/Runtime/Source/viewer/Qt3DSViewerApp.h2
-rw-r--r--src/Runtime/api/studio3d/q3dscommandqueue.cpp4
-rw-r--r--src/Runtime/api/studio3d/q3dscommandqueue_p.h2
-rw-r--r--src/Runtime/api/studio3d/q3dspresentation.cpp37
-rw-r--r--src/Runtime/api/studio3d/q3dspresentation.h4
-rw-r--r--src/Runtime/api/studio3dqml/q3dsrenderer.cpp16
-rw-r--r--tests/auto/viewer/tst_qt3dsviewer.cpp44
-rw-r--r--tests/auto/viewer/tst_qt3dsviewer.h4
13 files changed, 205 insertions, 5 deletions
diff --git a/src/Runtime/Source/engine/Qt3DSRuntimeView.cpp b/src/Runtime/Source/engine/Qt3DSRuntimeView.cpp
index 2849cd39..fc6c3cac 100644
--- a/src/Runtime/Source/engine/Qt3DSRuntimeView.cpp
+++ b/src/Runtime/Source/engine/Qt3DSRuntimeView.cpp
@@ -218,7 +218,9 @@ public:
void deleteElements(const QStringList &elementPaths) override;
void createMaterials(const QString &elementPath,
const QStringList &materialDefinitions) override;
+ void deleteMaterials(const QString &elementPath, const QStringList &materialNames) override;
void createMesh(const QString &name, qt3dsimp::Mesh *mesh) override;
+ void deleteMeshes(const QStringList &meshNames) override;
void SetAttribute(const char *elementPath, const char *attributeName,
const char *value) override;
bool GetAttribute(const char *elementPath, const char *attributeName, void *value) override;
@@ -670,6 +672,16 @@ void CRuntimeView::createMaterials(const QString &elementPath,
}
}
+void CRuntimeView::deleteMaterials(const QString &elementPath, const QStringList &materialNames)
+{
+ if (m_Application) {
+ Q3DStudio::CQmlEngine &theBridgeEngine
+ = static_cast<Q3DStudio::CQmlEngine &>(m_RuntimeFactoryCore->GetScriptEngineQml());
+ theBridgeEngine.deleteMaterials(elementPath, materialNames,
+ &m_RuntimeFactory->GetQt3DSRenderContext().GetRenderer());
+ }
+}
+
void CRuntimeView::createMesh(const QString &name, qt3dsimp::Mesh *mesh)
{
if (m_Application) {
@@ -680,6 +692,16 @@ void CRuntimeView::createMesh(const QString &name, qt3dsimp::Mesh *mesh)
}
}
+void CRuntimeView::deleteMeshes(const QStringList &meshNames)
+{
+ if (m_Application) {
+ Q3DStudio::CQmlEngine &theBridgeEngine
+ = static_cast<Q3DStudio::CQmlEngine &>(m_RuntimeFactoryCore->GetScriptEngineQml());
+ theBridgeEngine.deleteMeshes(
+ meshNames, &m_RuntimeFactory->GetQt3DSRenderContext().GetBufferManager());
+ }
+}
+
void CRuntimeView::SetAttribute(const char *elementPath, const char *attributeName,
const char *value)
{
diff --git a/src/Runtime/Source/engine/Qt3DSRuntimeView.h b/src/Runtime/Source/engine/Qt3DSRuntimeView.h
index 5273d635..9ade9c7f 100644
--- a/src/Runtime/Source/engine/Qt3DSRuntimeView.h
+++ b/src/Runtime/Source/engine/Qt3DSRuntimeView.h
@@ -205,7 +205,9 @@ public:
virtual void deleteElements(const QStringList &elementPaths) = 0;
virtual void createMaterials(const QString &elementPath,
const QStringList &materialDefinitions) = 0;
+ virtual void deleteMaterials(const QString &elementPath, const QStringList &materialNames) = 0;
virtual void createMesh(const QString &name, qt3dsimp::Mesh *mesh) = 0;
+ virtual void deleteMeshes(const QStringList &meshNames) = 0;
virtual void SetAttribute(const char *elementPath, const char *attributeName,
const char *value) = 0;
virtual bool GetAttribute(const char *elementPath, const char *attributeName, void *value) = 0;
diff --git a/src/Runtime/Source/runtime/Qt3DSIScriptBridge.h b/src/Runtime/Source/runtime/Qt3DSIScriptBridge.h
index d570a392..abbfcd5b 100644
--- a/src/Runtime/Source/runtime/Qt3DSIScriptBridge.h
+++ b/src/Runtime/Source/runtime/Qt3DSIScriptBridge.h
@@ -177,8 +177,12 @@ public: // Elements
qt3ds::render::ICustomMaterialSystem *customMaterialSystem,
qt3ds::render::IDynamicObjectSystem *dynamicObjectSystem,
qt3ds::render::IQt3DSRenderer *renderer) = 0;
+ virtual void deleteMaterials(const QString &elementPath, const QStringList &materialNames,
+ qt3ds::render::IQt3DSRenderer *renderer) = 0;
virtual void createMesh(const QString &name, qt3dsimp::Mesh *mesh,
qt3ds::render::IBufferManager *bufferManager) = 0;
+ virtual void deleteMeshes(const QStringList &elementPath,
+ qt3ds::render::IBufferManager *bufferManager) = 0;
public: // Components
virtual void GotoSlide(const char *component, const char *slideName,
diff --git a/src/Runtime/Source/runtime/Qt3DSQmlEngine.cpp b/src/Runtime/Source/runtime/Qt3DSQmlEngine.cpp
index 02bfbd5b..3249c6d4 100644
--- a/src/Runtime/Source/runtime/Qt3DSQmlEngine.cpp
+++ b/src/Runtime/Source/runtime/Qt3DSQmlEngine.cpp
@@ -437,8 +437,12 @@ public:
qt3ds::render::ICustomMaterialSystem *customMaterialSystem,
IDynamicObjectSystem *dynamicObjectSystem,
qt3ds::render::IQt3DSRenderer *renderer) override;
+ void deleteMaterials(const QString &elementPath, const QStringList &materialNames,
+ qt3ds::render::IQt3DSRenderer *renderer) override;
void createMesh(const QString &name, qt3dsimp::Mesh *mesh,
qt3ds::render::IBufferManager *bufferManager) override;
+ void deleteMeshes(const QStringList &meshNames,
+ qt3ds::render::IBufferManager *bufferManager) override;
void GotoSlide(const char *component, const char *slideName,
const SScriptEngineGotoSlideArgs &inArgs) override;
@@ -1645,6 +1649,44 @@ void CQmlEngineImpl::createMaterials(const QString &elementPath,
handleError();
}
+void CQmlEngineImpl::deleteMaterials(const QString &elementPath,
+ const QStringList &materialNames,
+ IQt3DSRenderer *renderer)
+{
+ // Material class (i.e. the shader) is not deleted as those can be shared between materials,
+ // so we just delete the material elements from the container and the related render objects
+
+ QByteArray thePath = elementPath.toUtf8();
+ TElement *element = getTarget(thePath.constData());
+ Q_ASSERT_X(element, __FUNCTION__, QStringLiteral("Invalid element path: '%1'")
+ .arg(elementPath).toUtf8());
+ CPresentation *presentation = static_cast<CPresentation *>(element->GetBelongedPresentation());
+
+ // Find material container
+ auto &strTable = presentation->GetStringTable();
+ TElement *rootElement = presentation->GetRoot();
+ const auto containerName = strTable.RegisterStr("__Container");
+ TElement *container = rootElement->FindChild(CHash::HashString(containerName.c_str()));
+ Q_ASSERT_X(container, __FUNCTION__,
+ QStringLiteral("No material container found for element: '%1'")
+ .arg(elementPath).toUtf8());
+
+ QVector<TElement *> elementsToDelete;
+ for (const auto &materialName : materialNames) {
+ TElement *firstChild = nullptr;
+ TElement *nextChild = container->GetChild();
+ firstChild = nextChild;
+ while (nextChild) {
+ QString childName = QString::fromUtf8(nextChild->m_Name);
+ if (childName == materialName)
+ elementsToDelete << nextChild;
+ nextChild = nextChild->GetSibling();
+ }
+ }
+
+ deleteElements(elementsToDelete, renderer);
+}
+
void CQmlEngineImpl::createMesh(const QString &name, qt3dsimp::Mesh *mesh,
qt3ds::render::IBufferManager *bufferManager)
{
@@ -1652,6 +1694,17 @@ void CQmlEngineImpl::createMesh(const QString &name, qt3dsimp::Mesh *mesh,
bufferManager->loadCustomMesh(name, mesh);
}
+void CQmlEngineImpl::deleteMeshes(const QStringList &meshNames,
+ qt3ds::render::IBufferManager *bufferManager)
+{
+ for (const auto &meshName : meshNames) {
+ if (!meshName.isEmpty()) {
+ CRegisteredString regName = bufferManager->GetStringTable().RegisterStr(meshName);
+ bufferManager->InvalidateBuffer(regName);
+ }
+ }
+}
+
void CQmlEngineImpl::GotoSlide(const char *component, const char *slideName,
const SScriptEngineGotoSlideArgs &inArgs)
{
diff --git a/src/Runtime/Source/viewer/Qt3DSViewerApp.cpp b/src/Runtime/Source/viewer/Qt3DSViewerApp.cpp
index b58849aa..094f140f 100644
--- a/src/Runtime/Source/viewer/Qt3DSViewerApp.cpp
+++ b/src/Runtime/Source/viewer/Qt3DSViewerApp.cpp
@@ -936,6 +936,14 @@ void Q3DSViewerApp::createMaterials(const QString &elementPath,
m_Impl.m_view->createMaterials(elementPath, materialDefinitions);
}
+void Q3DSViewerApp::deleteMaterials(const QString &elementPath, const QStringList &materialNames)
+{
+ if (!m_Impl.m_view)
+ return;
+
+ m_Impl.m_view->deleteMaterials(elementPath, materialNames);
+}
+
void Q3DSViewerApp::createMeshes(const QHash<QString, Q3DSViewer::MeshData> &meshData)
{
if (!m_Impl.m_view)
@@ -962,6 +970,14 @@ void Q3DSViewerApp::createMeshes(const QHash<QString, Q3DSViewer::MeshData> &mes
SigMeshesCreated(meshData.keys(), error);
}
+void Q3DSViewerApp::deleteMeshes(const QStringList &meshNames)
+{
+ if (!m_Impl.m_view)
+ return;
+
+ m_Impl.m_view->deleteMeshes(meshNames);
+}
+
Q3DSViewerApp &Q3DSViewerApp::Create(void *glContext, Q3DStudio::IAudioPlayer *inAudioPlayer,
QElapsedTimer *startupTimer)
{
diff --git a/src/Runtime/Source/viewer/Qt3DSViewerApp.h b/src/Runtime/Source/viewer/Qt3DSViewerApp.h
index f20244f3..975e3b12 100644
--- a/src/Runtime/Source/viewer/Qt3DSViewerApp.h
+++ b/src/Runtime/Source/viewer/Qt3DSViewerApp.h
@@ -466,7 +466,9 @@ public:
const QVector<QHash<QString, QVariant>> &properties);
void deleteElements(const QStringList &elementPaths);
void createMaterials(const QString &elementPath, const QStringList &materialDefinitions);
+ void deleteMaterials(const QString &elementPath, const QStringList &materialNames);
void createMeshes(const QHash<QString, Q3DSViewer::MeshData> &meshData);
+ void deleteMeshes(const QStringList &meshNames);
QString error();
diff --git a/src/Runtime/api/studio3d/q3dscommandqueue.cpp b/src/Runtime/api/studio3d/q3dscommandqueue.cpp
index e7a02073..550dc24f 100644
--- a/src/Runtime/api/studio3d/q3dscommandqueue.cpp
+++ b/src/Runtime/api/studio3d/q3dscommandqueue.cpp
@@ -268,11 +268,13 @@ void CommandQueue::copyCommands(CommandQueue &fromQueue)
fromQueue.commandAt(i).m_data = nullptr; // This queue takes ownership of data
break;
case CommandType_DeleteElements:
+ case CommandType_DeleteMeshes:
case CommandType_CreateMeshes:
queueCommand(source.m_commandType, source.m_data);
fromQueue.commandAt(i).m_data = nullptr; // This queue takes ownership of data
break;
case CommandType_CreateMaterials:
+ case CommandType_DeleteMaterials:
queueCommand(source.m_elementPath, source.m_commandType, source.m_data);
fromQueue.commandAt(i).m_data = nullptr; // This queue takes ownership of data
break;
@@ -313,6 +315,8 @@ void CommandQueue::clear(bool deleteCommandData)
break;
case CommandType_DeleteElements:
case CommandType_CreateMaterials:
+ case CommandType_DeleteMaterials:
+ case CommandType_DeleteMeshes:
delete static_cast<QStringList *>(cmd.m_data);
break;
case CommandType_CreateMeshes: {
diff --git a/src/Runtime/api/studio3d/q3dscommandqueue_p.h b/src/Runtime/api/studio3d/q3dscommandqueue_p.h
index b27f5ae7..12d1b7e3 100644
--- a/src/Runtime/api/studio3d/q3dscommandqueue_p.h
+++ b/src/Runtime/api/studio3d/q3dscommandqueue_p.h
@@ -71,7 +71,9 @@ enum CommandType {
CommandType_CreateElements,
CommandType_DeleteElements,
CommandType_CreateMaterials,
+ CommandType_DeleteMaterials,
CommandType_CreateMeshes,
+ CommandType_DeleteMeshes,
// Requests
CommandType_RequestSlideInfo,
diff --git a/src/Runtime/api/studio3d/q3dspresentation.cpp b/src/Runtime/api/studio3d/q3dspresentation.cpp
index 0633050e..9d2247df 100644
--- a/src/Runtime/api/studio3d/q3dspresentation.cpp
+++ b/src/Runtime/api/studio3d/q3dspresentation.cpp
@@ -389,6 +389,25 @@ void Q3DSPresentation::createMaterials(const QString &elementPath,
}
}
+void Q3DSPresentation::deleteMaterial(const QString &elementPath, const QString &materialName)
+{
+ QStringList materialNames;
+ materialNames << materialName;
+ deleteMaterials(elementPath, materialNames);
+}
+
+void Q3DSPresentation::deleteMaterials(const QString &elementPath, const QStringList &materialNames)
+{
+ if (d_ptr->m_viewerApp) {
+ d_ptr->m_viewerApp->deleteMaterials(elementPath, materialNames);
+ } else if (d_ptr->m_commandQueue) {
+ // We need to copy the list as queue takes ownership of it
+ QStringList *theMaterialNames = new QStringList(materialNames);
+ d_ptr->m_commandQueue->queueCommand(elementPath, CommandType_DeleteMaterials,
+ theMaterialNames);
+ }
+}
+
/**
Creates a mesh specified by given geometry. The given meshName can be used as sourcepath
property value for model elements created with future createElement calls.
@@ -420,6 +439,24 @@ void Q3DSPresentation::createMeshes(const QHash<QString, const Q3DSGeometry *> &
}
}
+void Q3DSPresentation::deleteMesh(const QString &meshName)
+{
+ QStringList meshNames;
+ meshNames << meshName;
+ deleteMeshes(meshNames);
+}
+
+void Q3DSPresentation::deleteMeshes(const QStringList &meshNames)
+{
+ if (d_ptr->m_viewerApp) {
+ d_ptr->m_viewerApp->deleteMeshes(meshNames);
+ } else if (d_ptr->m_commandQueue) {
+ // We need to copy the list as queue takes ownership of it
+ QStringList *theMeshNames = new QStringList(meshNames);
+ d_ptr->m_commandQueue->queueCommand(CommandType_DeleteMeshes, theMeshNames);
+ }
+}
+
void Q3DSPresentation::mousePressEvent(QMouseEvent *e)
{
if (d_ptr->m_viewerApp) {
diff --git a/src/Runtime/api/studio3d/q3dspresentation.h b/src/Runtime/api/studio3d/q3dspresentation.h
index 4b02ffe5..60191be2 100644
--- a/src/Runtime/api/studio3d/q3dspresentation.h
+++ b/src/Runtime/api/studio3d/q3dspresentation.h
@@ -101,8 +101,12 @@ public:
void deleteElements(const QStringList &elementPaths);
void createMaterial(const QString &elementPath, const QString &materialDefinition);
void createMaterials(const QString &elementPath, const QStringList &materialDefinitions);
+ void deleteMaterial(const QString &elementPath, const QString &materialName);
+ void deleteMaterials(const QString &elementPath, const QStringList &materialNames);
void createMesh(const QString &meshName, const Q3DSGeometry &geometry);
void createMeshes(const QHash<QString, const Q3DSGeometry *> &meshData);
+ void deleteMesh(const QString &meshName);
+ void deleteMeshes(const QStringList &meshNames);
public Q_SLOTS:
void setSource(const QUrl &source);
diff --git a/src/Runtime/api/studio3dqml/q3dsrenderer.cpp b/src/Runtime/api/studio3dqml/q3dsrenderer.cpp
index 9ecf5c33..0452bf14 100644
--- a/src/Runtime/api/studio3dqml/q3dsrenderer.cpp
+++ b/src/Runtime/api/studio3dqml/q3dsrenderer.cpp
@@ -367,6 +367,14 @@ void Q3DSRenderer::processCommands()
command.m_data = nullptr;
break;
}
+ case CommandType_DeleteMaterials: {
+ m_runtime->deleteMaterials(cmd.m_elementPath, *static_cast<QStringList *>(cmd.m_data));
+ // Runtime makes copy of the data in its own format, so we can delete it now
+ auto &command = m_commands.commandAt(i);
+ delete reinterpret_cast<QStringList *>(command.m_data);
+ command.m_data = nullptr;
+ break;
+ }
case CommandType_CreateMeshes: {
m_runtime->createMeshes(*static_cast<QHash<QString, Q3DSViewer::MeshData> *>(
cmd.m_data));
@@ -378,6 +386,14 @@ void Q3DSRenderer::processCommands()
command.m_data = nullptr;
break;
}
+ case CommandType_DeleteMeshes: {
+ m_runtime->deleteMeshes(*static_cast<QStringList *>(cmd.m_data));
+ // Runtime makes copy of the data in its own format, so we can delete it now
+ auto &command = m_commands.commandAt(i);
+ delete reinterpret_cast<QStringList *>(command.m_data);
+ command.m_data = nullptr;
+ break;
+ }
case CommandType_RequestSlideInfo: {
int current = 0;
int previous = 0;
diff --git a/tests/auto/viewer/tst_qt3dsviewer.cpp b/tests/auto/viewer/tst_qt3dsviewer.cpp
index 4f4b58de..97429039 100644
--- a/tests/auto/viewer/tst_qt3dsviewer.cpp
+++ b/tests/auto/viewer/tst_qt3dsviewer.cpp
@@ -103,7 +103,7 @@ void tst_qt3dsviewer::init()
void tst_qt3dsviewer::cleanup()
{
- deleteCreatedElements();
+ deleteCreated();
if (!m_ignoreError)
QCOMPARE(m_studio3DItem->property("error").toString(), {});
m_studio3DItem = nullptr;
@@ -388,7 +388,7 @@ void tst_qt3dsviewer::testCreateElement()
QTest::qWait(500);
QCOMPARE(spyElemCreated.count(), 9);
- deleteCreatedElements();
+ deleteCreated();
// Switch to slide 1
QVERIFY(spyExited.wait(20000));
@@ -430,6 +430,9 @@ void tst_qt3dsviewer::testCreateMaterial()
materialDefinitions << matDef;
m_presentation->createMaterials(QStringLiteral("Scene"), materialDefinitions);
+ m_createdMaterials << QStringLiteral("materials/Basic Blue")
+ << QStringLiteral("materials/Basic Texture")
+ << QStringLiteral("materials/Copper");
QObject::connect(m_presentation, &Q3DSPresentation::materialsCreated,
[this](const QStringList &materialNames, const QString &error) {
@@ -480,11 +483,30 @@ void tst_qt3dsviewer::testCreateMaterial()
md.replace(QRegularExpression(QStringLiteral("\"diffuse\">.*<")),
QStringLiteral("\"diffuse\">1 1 0 1<"));
m_presentation->createMaterial(QStringLiteral("Scene"), md);
+ m_createdMaterials << QStringLiteral("materials/Just Yellow");
+ });
+
+ // Delete material
+ QTimer::singleShot(2500, [&]() {
+ // Material not removed from m_createdMaterials purposefully to ensure deleting already
+ // deleted material is handled properly later
+ m_presentation->deleteElement(QStringLiteral("Scene.Layer.Textured Cone"));
+ m_presentation->deleteMaterial(QStringLiteral("Scene"), "materials/Basic Texture");
+
+ // Try to use the deleted material - should find a fallback material
+ QHash<QString, QVariant> data;
+ data.insert(QStringLiteral("name"), QStringLiteral("Textured Cone 2"));
+ data.insert(QStringLiteral("sourcepath"), QStringLiteral("#Cone"));
+ data.insert(QStringLiteral("material"), QStringLiteral("materials/Basic Texture"));
+ data.insert(QStringLiteral("position"),
+ QVariant::fromValue<QVector3D>(QVector3D(-100, -300, 200)));
+ createElement(QStringLiteral("Scene.Layer"), QStringLiteral("Slide1"), data);
});
QVERIFY(spyExited.wait(20000));
QCOMPARE(spyMatCreated.count(), 2);
- QCOMPARE(spyElemCreated.count(), 4);
+ QCOMPARE(spyElemCreated.count(), 5);
+ deleteCreated();
QTest::qWait(200); // Extra wait to verify slide change visually
}
@@ -523,6 +545,7 @@ void tst_qt3dsviewer::testCreateMesh()
QStringLiteral("Scene"),
QStringLiteral(":/scenes/simple_cube_animation/materials/Basic Texture.materialdef"));
m_presentation->createMesh(QStringLiteral("Pyramid"), pyramid);
+ m_createdMeshes << QStringLiteral("Pyramid");
QObject::connect(m_presentation, &Q3DSPresentation::meshesCreated,
[&](const QStringList &meshNames, const QString &error) {
@@ -553,18 +576,31 @@ void tst_qt3dsviewer::testCreateMesh()
// Create mesh after start
QTimer::singleShot(1000, [&]() {
m_presentation->createMesh(QStringLiteral("Star"), star);
+ m_createdMeshes << QStringLiteral("Star");
+ });
+
+ QTimer::singleShot(3000, [&]() {
+ m_presentation->deleteElement(QStringLiteral("Scene.Layer.Star"));
+ m_presentation->deleteMesh(QStringLiteral("Star"));
+ // Mesh nor removed from m_createdMeshes purposefully to ensure deleting already deleted
+ // mesh is handled properly later
});
QVERIFY(spyExited.wait(20000));
QCOMPARE(spyMeshCreated.count(), 2);
QCOMPARE(spyElemCreated.count(), 2);
+ deleteCreated();
QTest::qWait(200); // Extra wait to verify slide change visually
}
-void tst_qt3dsviewer::deleteCreatedElements()
+void tst_qt3dsviewer::deleteCreated()
{
m_presentation->deleteElements(m_createdElements);
+ m_presentation->deleteMaterials(QStringLiteral("Scene"), m_createdMaterials);
+ m_presentation->deleteMeshes(m_createdMeshes);
m_createdElements.clear();
+ m_createdMaterials.clear();
+ m_createdMeshes.clear();
}
void tst_qt3dsviewer::createElement(const QString &parentElementPath, const QString &slideName,
diff --git a/tests/auto/viewer/tst_qt3dsviewer.h b/tests/auto/viewer/tst_qt3dsviewer.h
index 4cb8063c..e6fae709 100644
--- a/tests/auto/viewer/tst_qt3dsviewer.h
+++ b/tests/auto/viewer/tst_qt3dsviewer.h
@@ -60,7 +60,7 @@ private Q_SLOTS:
void testCreateMesh();
private:
- void deleteCreatedElements();
+ void deleteCreated();
void createElement(const QString &parentElementPath, const QString &slideName,
const QHash<QString, QVariant> &properties);
void createGeometries(Q3DSGeometry &pyramid, Q3DSGeometry &star);
@@ -70,6 +70,8 @@ private:
Q3DSPresentation *m_presentation = nullptr;
Q3DSViewerSettings *m_settings = nullptr;
QStringList m_createdElements;
+ QStringList m_createdMaterials;
+ QStringList m_createdMeshes;
bool m_ignoreError = false;
};