diff options
author | Antti Määttä <antti.maatta@qt.io> | 2016-11-02 12:02:22 +0200 |
---|---|---|
committer | Antti Määttä <antti.maatta@qt.io> | 2017-01-27 08:33:24 +0000 |
commit | 01a3d94f2c96b67215bf376d6260c06f6dd84160 (patch) | |
tree | 03bf867650b77a28509ceb7df20cf4fd600e6175 | |
parent | 7d4968bf04bdd86e5651763979c5e91699ca06a4 (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.cpp | 6 | ||||
-rw-r--r-- | src/core/aspects/qabstractaspect.h | 9 | ||||
-rw-r--r-- | src/render/frontend/qrenderaspect.cpp | 16 | ||||
-rw-r--r-- | src/render/frontend/qrenderaspect.h | 2 | ||||
-rw-r--r-- | src/render/frontend/qrenderaspect_p.h | 5 |
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; }; |