summaryrefslogtreecommitdiffstats
path: root/src/render/geometry/geometryrenderer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/render/geometry/geometryrenderer.cpp')
-rw-r--r--src/render/geometry/geometryrenderer.cpp23
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;