diff options
Diffstat (limited to 'src/render/geometry/geometryrenderer.cpp')
-rw-r--r-- | src/render/geometry/geometryrenderer.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/render/geometry/geometryrenderer.cpp b/src/render/geometry/geometryrenderer.cpp index 270380e14..00b53fd8d 100644 --- a/src/render/geometry/geometryrenderer.cpp +++ b/src/render/geometry/geometryrenderer.cpp @@ -41,11 +41,13 @@ #include <Qt3DRender/private/geometryrenderermanager_p.h> #include <Qt3DRender/private/qboundingvolume_p.h> #include <Qt3DRender/private/qgeometryrenderer_p.h> +#include <Qt3DRender/private/qmesh_p.h> #include <Qt3DCore/qpropertyupdatedchange.h> #include <Qt3DCore/qpropertynodeaddedchange.h> #include <Qt3DCore/qpropertynoderemovedchange.h> #include <Qt3DCore/private/qnode_p.h> #include <Qt3DCore/private/qtypedpropertyupdatechange_p.h> +#include <Qt3DCore/private/qservicelocator_p.h> #include <QtCore/qcoreapplication.h> #include <memory> @@ -197,7 +199,28 @@ void GeometryRenderer::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) void GeometryRenderer::executeFunctor() { Q_ASSERT(m_geometryFactory); + + // What kind of functor are we dealing with? + const bool isQMeshFunctor = m_geometryFactory->id() == Qt3DRender::functorTypeId<MeshLoaderFunctor>(); + + if (isQMeshFunctor) { + QSharedPointer<MeshLoaderFunctor> meshLoader = qSharedPointerCast<MeshLoaderFunctor>(m_geometryFactory); + + // Set the aspect engine to allow remote downloads + if (meshLoader->nodeManagers() == nullptr) + meshLoader->setNodeManagers(m_renderer->nodeManagers()); + + if (meshLoader->downloaderService() == nullptr) { + Qt3DCore::QServiceLocator *services = m_renderer->services(); + meshLoader->setDownloaderService(services->service<Qt3DCore::QDownloadHelperService>(Qt3DCore::QServiceLocator::DownloadHelperService)); + }; + } + + // Load geometry std::unique_ptr<QGeometry> geometry((*m_geometryFactory)()); + + // If the geometry is null, then we were either unable to load it (Error) + // or the mesh is located at a remote url and needs to be downloaded first (Loading) if (!geometry) return; |