summaryrefslogtreecommitdiffstats
path: root/src/core/aspects
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/aspects')
-rw-r--r--src/core/aspects/aspectcommanddebugger.cpp12
-rw-r--r--src/core/aspects/aspectcommanddebugger_p.h4
-rw-r--r--src/core/aspects/aspects.pri13
-rw-r--r--src/core/aspects/qabstractaspect.cpp39
-rw-r--r--src/core/aspects/qabstractaspect.h15
-rw-r--r--src/core/aspects/qabstractaspect_p.h20
-rw-r--r--src/core/aspects/qaspectengine.cpp41
-rw-r--r--src/core/aspects/qaspectengine.h5
-rw-r--r--src/core/aspects/qaspectengine_p.h6
-rw-r--r--src/core/aspects/qaspectfactory.cpp6
-rw-r--r--src/core/aspects/qaspectfactory_p.h4
-rw-r--r--src/core/aspects/qaspectmanager.cpp32
-rw-r--r--src/core/aspects/qaspectmanager_p.h11
-rw-r--r--src/core/aspects/qaspectthread.cpp5
-rw-r--r--src/core/aspects/qaspectthread_p.h4
15 files changed, 130 insertions, 87 deletions
diff --git a/src/core/aspects/aspectcommanddebugger.cpp b/src/core/aspects/aspectcommanddebugger.cpp
index 6bb93c827..eceec1bbd 100644
--- a/src/core/aspects/aspectcommanddebugger.cpp
+++ b/src/core/aspects/aspectcommanddebugger.cpp
@@ -37,14 +37,14 @@
**
****************************************************************************/
-#ifdef QT3D_JOBS_RUN_STATS
-
#include "aspectcommanddebugger_p.h"
+
#include <Qt3DCore/qaspectengine.h>
+#include <QtNetwork/QTcpSocket>
+#include <QtCore/QJsonDocument>
+#include <QtCore/QJsonObject>
+
#include <Qt3DCore/private/qabstractaspect_p.h>
-#include <QTcpSocket>
-#include <QJsonDocument>
-#include <QJsonObject>
QT_BEGIN_NAMESPACE
@@ -216,5 +216,3 @@ void AspectCommandDebugger::executeCommand(const QString &command,
} // Qt3DCore
QT_END_NAMESPACE
-
-#endif
diff --git a/src/core/aspects/aspectcommanddebugger_p.h b/src/core/aspects/aspectcommanddebugger_p.h
index b173a5c09..bb6100df5 100644
--- a/src/core/aspects/aspectcommanddebugger_p.h
+++ b/src/core/aspects/aspectcommanddebugger_p.h
@@ -37,7 +37,7 @@
**
****************************************************************************/
-#ifdef QT3D_JOBS_RUN_STATS
+#include <Qt3DCore/qt3dcore-config.h>
#ifndef QT3DCORE_DEBUG_ASPECTCOMMANDDEBUGGER_H
#define QT3DCORE_DEBUG_ASPECTCOMMANDDEBUGGER_H
@@ -108,5 +108,3 @@ private:
QT_END_NAMESPACE
#endif // QT3DCORE_DEBUG_ASPECTCOMMANDDEBUGGER_H
-
-#endif // QT3D_JOBS_RUN_STATS
diff --git a/src/core/aspects/aspects.pri b/src/core/aspects/aspects.pri
index 773c736a3..54d939138 100644
--- a/src/core/aspects/aspects.pri
+++ b/src/core/aspects/aspects.pri
@@ -5,8 +5,7 @@ SOURCES += \
$$PWD/qaspectengine.cpp \
$$PWD/qaspectfactory.cpp \
$$PWD/qaspectmanager.cpp \
- $$PWD/qaspectthread.cpp \
- $$PWD/aspectcommanddebugger.cpp
+ $$PWD/qaspectthread.cpp
HEADERS += \
$$PWD/qabstractaspect.h \
@@ -15,7 +14,13 @@ HEADERS += \
$$PWD/qaspectengine_p.h \
$$PWD/qaspectfactory_p.h \
$$PWD/qaspectmanager_p.h \
- $$PWD/qaspectthread_p.h \
- $$PWD/aspectcommanddebugger_p.h
+ $$PWD/qaspectthread_p.h
INCLUDEPATH += $$PWD
+
+include($$OUT_PWD/../core/qt3dcore-config.pri)
+QT_FOR_CONFIG += 3dcore-private
+qtConfig(qt3d-profile-jobs): {
+ HEADERS += $$PWD/aspectcommanddebugger_p.h
+ SOURCES += $$PWD/aspectcommanddebugger.cpp
+}
diff --git a/src/core/aspects/qabstractaspect.cpp b/src/core/aspects/qabstractaspect.cpp
index c049d3503..d7e62db68 100644
--- a/src/core/aspects/qabstractaspect.cpp
+++ b/src/core/aspects/qabstractaspect.cpp
@@ -38,15 +38,17 @@
****************************************************************************/
#include "qabstractaspect.h"
-#include "qentity.h"
-#include <Qt3DCore/private/qaspectmanager_p.h>
-#include <private/qabstractaspect_p.h>
-#include <Qt3DCore/private/qaspectjobmanager_p.h>
-#include <private/qchangearbiter_p.h>
-#include <Qt3DCore/private/qscene_p.h>
-#include <Qt3DCore/private/qnodevisitor_p.h>
+#include "qabstractaspect_p.h"
+
+#include <Qt3DCore/qentity.h>
#include <Qt3DCore/qpropertyupdatedchange.h>
+
#include <Qt3DCore/private/corelogging_p.h>
+#include <Qt3DCore/private/qaspectjobmanager_p.h>
+#include <Qt3DCore/private/qaspectmanager_p.h>
+#include <Qt3DCore/private/qchangearbiter_p.h>
+#include <Qt3DCore/private/qnodevisitor_p.h>
+#include <Qt3DCore/private/qscene_p.h>
QT_BEGIN_NAMESPACE
@@ -157,6 +159,12 @@ void QAbstractAspect::registerBackendType(const QMetaObject &obj, const QBackend
d->m_backendCreatorFunctors.insert(&obj, functor);
}
+void QAbstractAspect::unregisterBackendType(const QMetaObject &obj)
+{
+ Q_D(QAbstractAspect);
+ d->m_backendCreatorFunctors.remove(&obj);
+}
+
void QAbstractAspectPrivate::sceneNodeAdded(QSceneChangePtr &change)
{
QNodeCreatedChangeBasePtr creationChange = qSharedPointerCast<QNodeCreatedChangeBase>(change);
@@ -282,7 +290,15 @@ QAbstractAspectJobManager *QAbstractAspectPrivate::jobManager() const
QVector<QAspectJobPtr> QAbstractAspectPrivate::jobsToExecute(qint64 time)
{
Q_Q(QAbstractAspect);
- return q->jobsToExecute(time);
+ auto res = q->jobsToExecute(time);
+
+ {
+ QMutexLocker lock(&m_singleShotMutex);
+ res << m_singleShotJobs;
+ m_singleShotJobs.clear();
+ }
+
+ return res;
}
/*!
@@ -324,6 +340,13 @@ void QAbstractAspect::onEngineShutdown()
{
}
+void QAbstractAspect::scheduleSingleShotJob(const Qt3DCore::QAspectJobPtr &job)
+{
+ Q_D(QAbstractAspect);
+ QMutexLocker lock(&d->m_singleShotMutex);
+ d->m_singleShotJobs.push_back(job);
+}
+
namespace Debug {
AsynchronousCommandReply::AsynchronousCommandReply(const QString &commandName, QObject *parent)
diff --git a/src/core/aspects/qabstractaspect.h b/src/core/aspects/qabstractaspect.h
index 86938d2d2..8ac1b251f 100644
--- a/src/core/aspects/qabstractaspect.h
+++ b/src/core/aspects/qabstractaspect.h
@@ -40,10 +40,10 @@
#ifndef QT3DCORE_QABSTRACTASPECT_H
#define QT3DCORE_QABSTRACTASPECT_H
-#include <QObject>
-#include <QSharedPointer>
#include <Qt3DCore/qt3dcore_global.h>
#include <Qt3DCore/qnodeid.h>
+#include <QtCore/QObject>
+#include <QtCore/QSharedPointer>
QT_BEGIN_NAMESPACE
@@ -68,6 +68,8 @@ public:
explicit QAbstractAspect(QObject *parent = nullptr);
~QAbstractAspect();
+ void scheduleSingleShotJob(const Qt3DCore::QAspectJobPtr &job);
+
protected:
explicit QAbstractAspect(QAbstractAspectPrivate &dd, QObject *parent = nullptr);
@@ -76,6 +78,9 @@ protected:
template<class Frontend>
void registerBackendType(const QBackendNodeMapperPtr &functor);
void registerBackendType(const QMetaObject &, const QBackendNodeMapperPtr &functor);
+ template<class Frontend>
+ void unregisterBackendType();
+ void unregisterBackendType(const QMetaObject &);
private:
virtual QVariant executeCommand(const QStringList &args);
@@ -99,6 +104,12 @@ void QAbstractAspect::registerBackendType(const QBackendNodeMapperPtr &functor)
registerBackendType(Frontend::staticMetaObject, functor);
}
+template<class Frontend>
+void QAbstractAspect::unregisterBackendType()
+{
+ unregisterBackendType(Frontend::staticMetaObject);
+}
+
} // namespace Qt3DCore
QT_END_NAMESPACE
diff --git a/src/core/aspects/qabstractaspect_p.h b/src/core/aspects/qabstractaspect_p.h
index 53b01cc40..a6c47c494 100644
--- a/src/core/aspects/qabstractaspect_p.h
+++ b/src/core/aspects/qabstractaspect_p.h
@@ -51,14 +51,18 @@
// We mean it.
//
-#include <private/qobject_p.h>
-#include <private/qaspectjobproviderinterface_p.h>
-#include <private/qbackendnode_p.h>
-#include <private/qbackendnodefactory_p.h>
-#include <private/qsceneobserverinterface_p.h>
-#include <private/qt3dcore_global_p.h>
-#include <Qt3DCore/qnodedestroyedchange.h>
#include <Qt3DCore/qabstractaspect.h>
+#include <Qt3DCore/qnodedestroyedchange.h>
+
+#include <Qt3DCore/private/qaspectjobproviderinterface_p.h>
+#include <Qt3DCore/private/qbackendnode_p.h>
+#include <Qt3DCore/private/qbackendnodefactory_p.h>
+#include <Qt3DCore/private/qsceneobserverinterface_p.h>
+#include <Qt3DCore/private/qt3dcore_global_p.h>
+#include <QtCore/private/qobject_p.h>
+
+#include <QMutex>
+#include <QVector>
QT_BEGIN_NAMESPACE
@@ -136,6 +140,8 @@ public:
QAbstractAspectJobManager *m_jobManager;
QChangeArbiter *m_arbiter;
QHash<const QMetaObject*, QBackendNodeMapperPtr> m_backendCreatorFunctors;
+ QMutex m_singleShotMutex;
+ QVector<QAspectJobPtr> m_singleShotJobs;
static QAbstractAspectPrivate *get(QAbstractAspect *aspect);
};
diff --git a/src/core/aspects/qaspectengine.cpp b/src/core/aspects/qaspectengine.cpp
index 15f975332..b9c9d2283 100644
--- a/src/core/aspects/qaspectengine.cpp
+++ b/src/core/aspects/qaspectengine.cpp
@@ -38,27 +38,30 @@
****************************************************************************/
#include "qaspectengine.h"
+#include "qaspectengine_p.h"
+
+#include <Qt3DCore/qabstractaspect.h>
+#include <Qt3DCore/qcomponent.h>
+#include <Qt3DCore/qentity.h>
+#include <Qt3DCore/qnode.h>
+#include <QtCore/QMetaObject>
-#include "qabstractaspect.h"
-#include "qaspectthread_p.h"
-#include "qaspectmanager_p.h"
-#include "qchangearbiter_p.h"
-#include "qabstractaspect.h"
-#include "qnode.h"
#include <Qt3DCore/private/corelogging_p.h>
-#include <QMetaObject>
-#include <private/qpostman_p.h>
-#include <private/qscene_p.h>
-#include <private/qaspectengine_p.h>
-#include <private/qnode_p.h>
-#include <private/qnodevisitor_p.h>
-#include <private/qscene_p.h>
-#include "qentity.h"
-#include "qcomponent.h"
+#include <Qt3DCore/private/qaspectthread_p.h>
+#include <Qt3DCore/private/qaspectmanager_p.h>
+#include <Qt3DCore/private/qchangearbiter_p.h>
#include <Qt3DCore/private/qeventfilterservice_p.h>
+#include <Qt3DCore/private/qnode_p.h>
+#include <Qt3DCore/private/qnodevisitor_p.h>
#include <Qt3DCore/private/qnodecreatedchangegenerator_p.h>
+#include <Qt3DCore/private/qpostman_p.h>
+#include <Qt3DCore/private/qscene_p.h>
#include <Qt3DCore/private/qservicelocator_p.h>
+#include <Qt3DCore/qt3dcore-config.h>
+
+#if defined(QT3D_JOBS_RUN_STATS)
#include <Qt3DCore/private/aspectcommanddebugger_p.h>
+#endif
QT_BEGIN_NAMESPACE
@@ -100,8 +103,8 @@ QAspectEnginePrivate::~QAspectEnginePrivate()
*/
void QAspectEnginePrivate::initNode(QNode *node)
{
- QNodePrivate::get(node)->setScene(m_scene);
m_scene->addObservable(node);
+ QNodePrivate::get(node)->setScene(m_scene);
}
void QAspectEnginePrivate::initEntity(QEntity *entity)
@@ -177,10 +180,6 @@ void QAspectEnginePrivate::generateCreationChanges(QNode *root)
QAspectEngine::QAspectEngine(QObject *parent)
: QObject(*new QAspectEnginePrivate, parent)
{
- // Don't show any debug output from Qt3D. If you need to enable additional logging
- // for debugging use a rules file as explained in the QLoggingCategory documentation.
- QLoggingCategory::setFilterRules(QString::fromUtf8("Qt3D.*.debug=false\n"));
-
qCDebug(Aspects) << Q_FUNC_INFO;
Q_D(QAspectEngine);
d->m_scene = new QScene(this);
@@ -218,6 +217,8 @@ QAspectEngine::~QAspectEngine()
void QAspectEnginePrivate::initNodeTree(QNode *node)
{
+ // Set the root entity on the scene
+ m_scene->setRootNode(node);
QNodeVisitor visitor;
visitor.traverse(node, this, &QAspectEnginePrivate::initNode, &QAspectEnginePrivate::initEntity);
}
diff --git a/src/core/aspects/qaspectengine.h b/src/core/aspects/qaspectengine.h
index 6de5df42c..28b15046b 100644
--- a/src/core/aspects/qaspectengine.h
+++ b/src/core/aspects/qaspectengine.h
@@ -40,10 +40,9 @@
#ifndef QT3DCORE_QASPECTENGINE_H
#define QT3DCORE_QASPECTENGINE_H
-#include <QObject>
-#include <QVector>
-
#include <Qt3DCore/qt3dcore_global.h>
+#include <QtCore/QObject>
+#include <QtCore/QVector>
QT_BEGIN_NAMESPACE
diff --git a/src/core/aspects/qaspectengine_p.h b/src/core/aspects/qaspectengine_p.h
index 10b3536df..a7311d054 100644
--- a/src/core/aspects/qaspectengine_p.h
+++ b/src/core/aspects/qaspectengine_p.h
@@ -51,11 +51,13 @@
// We mean it.
//
-#include <private/qobject_p.h>
+#include <Qt3DCore/qt3dcore-config.h>
#include <Qt3DCore/qnodecreatedchange.h>
-#include <Qt3DCore/private/qaspectfactory_p.h>
#include <QtCore/qsharedpointer.h>
+#include <Qt3DCore/private/qaspectfactory_p.h>
+#include <QtCore/private/qobject_p.h>
+
QT_BEGIN_NAMESPACE
namespace Qt3DCore {
diff --git a/src/core/aspects/qaspectfactory.cpp b/src/core/aspects/qaspectfactory.cpp
index 3135e1653..94e04b34d 100644
--- a/src/core/aspects/qaspectfactory.cpp
+++ b/src/core/aspects/qaspectfactory.cpp
@@ -39,11 +39,9 @@
#include "qaspectfactory_p.h"
-#include <QtGlobal>
-
-#include <QDebug>
-
#include <Qt3DCore/QAbstractAspect>
+#include <QtCore/QDebug>
+#include <QtCore/QtGlobal>
QT_BEGIN_NAMESPACE
diff --git a/src/core/aspects/qaspectfactory_p.h b/src/core/aspects/qaspectfactory_p.h
index 9e2bedaaa..67b5e0b9d 100644
--- a/src/core/aspects/qaspectfactory_p.h
+++ b/src/core/aspects/qaspectfactory_p.h
@@ -51,8 +51,8 @@
// We mean it.
//
-#include <QHash>
-#include <QStringList>
+#include <QtCore/QHash>
+#include <QtCore/QStringList>
#include <Qt3DCore/private/qt3dcore_global_p.h>
diff --git a/src/core/aspects/qaspectmanager.cpp b/src/core/aspects/qaspectmanager.cpp
index 98fb982df..5ccc89b9e 100644
--- a/src/core/aspects/qaspectmanager.cpp
+++ b/src/core/aspects/qaspectmanager.cpp
@@ -38,27 +38,27 @@
****************************************************************************/
#include "qaspectmanager_p.h"
-#include "qabstractaspect.h"
-#include "qabstractaspect_p.h"
-#include "qchangearbiter_p.h"
-// TODO Make the kind of job manager configurable (e.g. ThreadWeaver vs Intel TBB)
-#include "qaspectjobmanager_p.h"
-#include "qabstractaspectjobmanager_p.h"
-#include "qentity.h"
-#include <Qt3DCore/private/qservicelocator_p.h>
+#include <Qt3DCore/qabstractaspect.h>
+#include <Qt3DCore/qentity.h>
+#include <QtCore/QEventLoop>
+#include <QtCore/QThread>
+#include <QtCore/QWaitCondition>
+#include <QtGui/QSurface>
-#include <Qt3DCore/private/qaspectjob_p.h>
-#include <Qt3DCore/private/qthreadpooler_p.h>
-#include <Qt3DCore/private/qtickclockservice_p.h>
#include <Qt3DCore/private/corelogging_p.h>
+#include <Qt3DCore/private/qabstractaspect_p.h>
+#include <Qt3DCore/private/qabstractaspectjobmanager_p.h>
+#include <Qt3DCore/private/qabstractframeadvanceservice_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>
+#include <Qt3DCore/private/qchangearbiter_p.h>
#include <Qt3DCore/private/qscheduler_p.h>
+#include <Qt3DCore/private/qservicelocator_p.h>
+#include <Qt3DCore/private/qthreadpooler_p.h>
#include <Qt3DCore/private/qtickclock_p.h>
-#include <Qt3DCore/private/qabstractframeadvanceservice_p.h>
-#include <QEventLoop>
-#include <QThread>
-#include <QWaitCondition>
-#include <QSurface>
+#include <Qt3DCore/private/qtickclockservice_p.h>
#if defined(QT3D_CORE_JOB_TIMING)
#include <QElapsedTimer>
diff --git a/src/core/aspects/qaspectmanager_p.h b/src/core/aspects/qaspectmanager_p.h
index e4795516c..1c87738ed 100644
--- a/src/core/aspects/qaspectmanager_p.h
+++ b/src/core/aspects/qaspectmanager_p.h
@@ -51,13 +51,14 @@
// We mean it.
//
-#include <QObject>
#include <Qt3DCore/qnodecreatedchange.h>
+#include <QtCore/QObject>
+#include <QtCore/QScopedPointer>
+#include <QtCore/QSemaphore>
+#include <QtCore/QVariant>
+#include <QtCore/QVector>
+
#include <Qt3DCore/private/qt3dcore_global_p.h>
-#include <QVector>
-#include <QScopedPointer>
-#include <QVariant>
-#include <QSemaphore>
QT_BEGIN_NAMESPACE
diff --git a/src/core/aspects/qaspectthread.cpp b/src/core/aspects/qaspectthread.cpp
index 9e6961901..31715b04e 100644
--- a/src/core/aspects/qaspectthread.cpp
+++ b/src/core/aspects/qaspectthread.cpp
@@ -38,10 +38,11 @@
****************************************************************************/
#include "qaspectthread_p.h"
-#include "qaspectmanager_p.h"
+#include <QtCore/QMutexLocker>
+
+#include <Qt3DCore/private/qaspectmanager_p.h>
#include <Qt3DCore/private/corelogging_p.h>
-#include <QMutexLocker>
QT_BEGIN_NAMESPACE
diff --git a/src/core/aspects/qaspectthread_p.h b/src/core/aspects/qaspectthread_p.h
index dc508b271..91fb363c5 100644
--- a/src/core/aspects/qaspectthread_p.h
+++ b/src/core/aspects/qaspectthread_p.h
@@ -51,10 +51,10 @@
// We mean it.
//
-#include <QThread>
#include <Qt3DCore/qt3dcore_global.h>
-
#include <QtCore/QSemaphore>
+#include <QtCore/QThread>
+
QT_BEGIN_NAMESPACE