summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/aspects/qabstractaspect.cpp5
-rw-r--r--src/core/aspects/qabstractaspect.h1
-rw-r--r--src/core/aspects/qaspectengine.cpp22
-rw-r--r--src/core/aspects/qaspectengine.h1
-rw-r--r--src/core/aspects/qaspectmanager.cpp7
-rw-r--r--src/core/aspects/qaspectmanager_p.h1
6 files changed, 33 insertions, 4 deletions
diff --git a/src/core/aspects/qabstractaspect.cpp b/src/core/aspects/qabstractaspect.cpp
index f01124e19..3217d10b3 100644
--- a/src/core/aspects/qabstractaspect.cpp
+++ b/src/core/aspects/qabstractaspect.cpp
@@ -422,6 +422,11 @@ void QAbstractAspect::scheduleSingleShotJob(const Qt3DCore::QAspectJobPtr &job)
d->m_singleShotJobs.push_back(job);
}
+QStringList QAbstractAspect::dependencies() const
+{
+ return {};
+}
+
namespace Debug {
AsynchronousCommandReply::AsynchronousCommandReply(const QString &commandName, QObject *parent)
diff --git a/src/core/aspects/qabstractaspect.h b/src/core/aspects/qabstractaspect.h
index 4dcc59cec..144f267cf 100644
--- a/src/core/aspects/qabstractaspect.h
+++ b/src/core/aspects/qabstractaspect.h
@@ -69,6 +69,7 @@ public:
~QAbstractAspect();
void scheduleSingleShotJob(const Qt3DCore::QAspectJobPtr &job);
+ virtual QStringList dependencies() const;
protected:
explicit QAbstractAspect(QAbstractAspectPrivate &dd, QObject *parent = nullptr);
diff --git a/src/core/aspects/qaspectengine.cpp b/src/core/aspects/qaspectengine.cpp
index 946355d05..8ede0905d 100644
--- a/src/core/aspects/qaspectengine.cpp
+++ b/src/core/aspects/qaspectengine.cpp
@@ -296,10 +296,13 @@ void QAspectEnginePrivate::exitSimulationLoop()
void QAspectEngine::registerAspect(QAbstractAspect *aspect)
{
Q_D(QAspectEngine);
- // The aspect is moved to the AspectThread
- // AspectManager::registerAspect is called in the context
- // of the AspectThread. This is turns call aspect->onInitialize
- // still in the same AspectThread context
+
+ const QStringList dependencies = aspect->dependencies();
+ for (const auto &name: dependencies) {
+ if (!d->m_namedAspects.contains(name))
+ registerAspect(name);
+ }
+
d->m_aspects << aspect;
d->m_aspectManager->registerAspect(aspect);
}
@@ -378,6 +381,17 @@ QVector<QAbstractAspect *> QAspectEngine::aspects() const
}
/*!
+ * \return the asepect matching the \a name
+ *
+ * \note Required that the aspect was registered by name
+ */
+QAbstractAspect *QAspectEngine::aspect(const QString &name) const
+{
+ Q_D(const QAspectEngine);
+ return d->m_namedAspects.value(name, nullptr);
+}
+
+/*!
* Executes the given \a command on aspect engine. Valid commands are:
* \list
* \li "list aspects"
diff --git a/src/core/aspects/qaspectengine.h b/src/core/aspects/qaspectengine.h
index ac34e0c54..71662a27e 100644
--- a/src/core/aspects/qaspectengine.h
+++ b/src/core/aspects/qaspectengine.h
@@ -82,6 +82,7 @@ public:
void unregisterAspect(const QString &name);
QVector<QAbstractAspect*> aspects() const;
+ QAbstractAspect *aspect(const QString &name) const;
QVariant executeCommand(const QString &command);
diff --git a/src/core/aspects/qaspectmanager.cpp b/src/core/aspects/qaspectmanager.cpp
index aac209588..a327ddaf8 100644
--- a/src/core/aspects/qaspectmanager.cpp
+++ b/src/core/aspects/qaspectmanager.cpp
@@ -51,6 +51,7 @@
#include <Qt3DCore/private/qabstractaspect_p.h>
#include <Qt3DCore/private/qabstractaspectjobmanager_p.h>
#include <Qt3DCore/private/qabstractframeadvanceservice_p.h>
+#include <Qt3DCore/private/qaspectengine_p.h>
// TODO Make the kind of job manager configurable (e.g. ThreadWeaver vs Intel TBB)
#include <Qt3DCore/private/qaspectjobmanager_p.h>
#include <Qt3DCore/private/qaspectjob_p.h>
@@ -395,6 +396,12 @@ const QVector<QAbstractAspect *> &QAspectManager::aspects() const
return m_aspects;
}
+QAbstractAspect *QAspectManager::aspect(const QString &name) const
+{
+ auto dengine = QAspectEnginePrivate::get(m_engine);
+ return dengine->m_namedAspects.value(name, nullptr);
+}
+
QAbstractAspectJobManager *QAspectManager::jobManager() const
{
return m_jobManager;
diff --git a/src/core/aspects/qaspectmanager_p.h b/src/core/aspects/qaspectmanager_p.h
index d3b3992fe..9633149f6 100644
--- a/src/core/aspects/qaspectmanager_p.h
+++ b/src/core/aspects/qaspectmanager_p.h
@@ -110,6 +110,7 @@ public Q_SLOTS:
public:
const QVector<QAbstractAspect *> &aspects() const;
+ QAbstractAspect *aspect(const QString &name) const;
QAbstractAspectJobManager *jobManager() const;
QChangeArbiter *changeArbiter() const;
QServiceLocator *serviceLocator() const;