summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntti Määttä <antti.maatta@qt.io>2016-11-02 12:02:22 +0200
committerAntti Määttä <antti.maatta@qt.io>2017-01-27 08:33:24 +0000
commit01a3d94f2c96b67215bf376d6260c06f6dd84160 (patch)
tree03bf867650b77a28509ceb7df20cf4fd600e6175
parent7d4968bf04bdd86e5651763979c5e91699ca06a4 (diff)
Load render plugins
Change-Id: I035a4d1fa41988514551425917d6fd735a790b05 Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io> Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
-rw-r--r--src/core/aspects/qabstractaspect.cpp6
-rw-r--r--src/core/aspects/qabstractaspect.h9
-rw-r--r--src/render/frontend/qrenderaspect.cpp16
-rw-r--r--src/render/frontend/qrenderaspect.h2
-rw-r--r--src/render/frontend/qrenderaspect_p.h5
5 files changed, 37 insertions, 1 deletions
diff --git a/src/core/aspects/qabstractaspect.cpp b/src/core/aspects/qabstractaspect.cpp
index c049d3503..8f1afb30e 100644
--- a/src/core/aspects/qabstractaspect.cpp
+++ b/src/core/aspects/qabstractaspect.cpp
@@ -157,6 +157,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);
diff --git a/src/core/aspects/qabstractaspect.h b/src/core/aspects/qabstractaspect.h
index 86938d2d2..a4ad68c1d 100644
--- a/src/core/aspects/qabstractaspect.h
+++ b/src/core/aspects/qabstractaspect.h
@@ -76,6 +76,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 +102,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/render/frontend/qrenderaspect.cpp b/src/render/frontend/qrenderaspect.cpp
index e0a2e1469..3ab68dc0a 100644
--- a/src/render/frontend/qrenderaspect.cpp
+++ b/src/render/frontend/qrenderaspect.cpp
@@ -124,6 +124,9 @@
#include <Qt3DRender/private/technique_p.h>
#include <Qt3DRender/private/offscreensurfacehelper_p.h>
+#include <private/qrenderpluginfactory_p.h>
+#include <private/qrenderplugin_p.h>
+
#include <Qt3DCore/qentity.h>
#include <Qt3DCore/qtransform.h>
@@ -158,8 +161,8 @@ QRenderAspectPrivate::QRenderAspectPrivate(QRenderAspect::RenderType type)
, m_renderType(type)
, m_offscreenHelper(nullptr)
{
- // Load the scene parsers
loadSceneParsers();
+ loadRenderPlugins();
}
/*! \internal */
@@ -240,6 +243,7 @@ void QRenderAspectPrivate::registerBackendTypes()
/*! \internal */
void QRenderAspectPrivate::unregisterBackendTypes()
{
+ Q_Q(QRenderAspect);
unregisterBackendType<Qt3DCore::QEntity>();
unregisterBackendType<Qt3DCore::QTransform>();
@@ -525,6 +529,16 @@ void QRenderAspectPrivate::loadSceneParsers()
}
}
+void QRenderAspectPrivate::loadRenderPlugins()
+{
+ const QStringList keys = Render::QRenderPluginFactory::keys();
+ for (const QString &key : keys) {
+ Render::QRenderPlugin *plugin = Render::QRenderPluginFactory::create(key, QStringList());
+ if (plugin != nullptr)
+ m_renderPlugins.append(plugin);
+ }
+}
+
} // namespace Qt3DRender
QT_END_NAMESPACE
diff --git a/src/render/frontend/qrenderaspect.h b/src/render/frontend/qrenderaspect.h
index 72e8e4bdb..48ef5b164 100644
--- a/src/render/frontend/qrenderaspect.h
+++ b/src/render/frontend/qrenderaspect.h
@@ -56,6 +56,7 @@ class TestAspect;
namespace Render {
class Renderer;
+class QRenderPlugin;
}
class QRenderAspectPrivate;
@@ -92,6 +93,7 @@ private:
void onEngineStartup() Q_DECL_OVERRIDE;
friend class Render::Renderer;
+ friend class Render::QRenderPlugin;
#if defined(QT_BUILD_INTERNAL)
friend class QRenderAspectTester;
friend class TestAspect;
diff --git a/src/render/frontend/qrenderaspect_p.h b/src/render/frontend/qrenderaspect_p.h
index 72183ef87..1fa0b26df 100644
--- a/src/render/frontend/qrenderaspect_p.h
+++ b/src/render/frontend/qrenderaspect_p.h
@@ -62,9 +62,11 @@ class QSurface;
namespace Qt3DRender {
class QSceneImporter;
+
namespace Render {
class AbstractRenderer;
class NodeManagers;
+class QRenderPlugin;
}
namespace Render {
@@ -82,9 +84,11 @@ public:
void registerBackendTypes();
void unregisterBackendTypes();
void loadSceneParsers();
+ void loadRenderPlugins();
void renderInitialize(QOpenGLContext *context);
void renderSynchronous();
void renderShutdown();
+ void registerBackendType(const QMetaObject &, const Qt3DCore::QBackendNodeMapperPtr &functor);
QVector<Qt3DCore::QAspectJobPtr> createGeometryRendererJobs();
Render::NodeManagers *m_nodeManagers;
@@ -92,6 +96,7 @@ public:
bool m_initialized;
QList<QSceneImporter *> m_sceneImporter;
+ QVector<Render::QRenderPlugin *> m_renderPlugins;
QRenderAspect::RenderType m_renderType;
Render::OffscreenSurfaceHelper *m_offscreenHelper;
};