summaryrefslogtreecommitdiffstats
path: root/src/render/geometry/geometryrenderer.cpp
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2018-01-19 10:36:58 +0100
committerPaul Lemire <paul.lemire@kdab.com>2018-01-22 06:09:16 +0000
commitf91ee783c5704b0d55da0d96dacf6eca8933e748 (patch)
treeb9b33a389609311e1f50f6c7b8c74c5ad9f2a5f3 /src/render/geometry/geometryrenderer.cpp
parent44aeb43834675a4d6b19bee88e267464ca7ad1f4 (diff)
QMesh: do not rely on QAspectEngine to create QGeometryFactory
- This would prevent QMesh created without parent/scene to have a proper geometry factory. - This avoid passing the engine around Change-Id: I5091970f96e87ab8b129475a1113ef84ce170388 Task-number: QTBUG-65506 Reviewed-by: Mike Krus <mike.krus@kdab.com>
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;