From aa038bac58a282619dceb35e1bbac5dfb86ecb99 Mon Sep 17 00:00:00 2001 From: Zach Pomerantz Date: Thu, 24 Mar 2016 14:26:03 -0700 Subject: [PATCH] Don't cache nested geometries --- .../src/model-networking/ModelCache.cpp | 12 ++++++++++-- .../src/model-networking/ModelCache.h | 6 +++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/libraries/model-networking/src/model-networking/ModelCache.cpp b/libraries/model-networking/src/model-networking/ModelCache.cpp index ce255f0b4e..dfb3cf60c1 100644 --- a/libraries/model-networking/src/model-networking/ModelCache.cpp +++ b/libraries/model-networking/src/model-networking/ModelCache.cpp @@ -67,7 +67,15 @@ void GeometryMappingResource::downloadFinished(const QByteArray& data) { // Get the raw GeometryResource, not the wrapped NetworkGeometry _geometryResource = modelCache->getResource(url, QUrl(), true, &extra).staticCast(); - connect(_geometryResource.data(), &Resource::finished, this, &GeometryMappingResource::onGeometryMappingLoaded); + + if (_geometryResource->isLoaded()) { + onGeometryMappingLoaded(!_geometryResource->getURL().isEmpty()); + } else { + connect(_geometryResource.data(), &Resource::finished, this, &GeometryMappingResource::onGeometryMappingLoaded); + } + + // Avoid caching nested resources - their references will be held by the parent + _geometryResource->_isCacheable = false; } } @@ -290,7 +298,7 @@ NetworkGeometry::NetworkGeometry(const GeometryResource::Pointer& networkGeometr connect(_resource.data(), &Resource::finished, this, &NetworkGeometry::resourceFinished); connect(_resource.data(), &Resource::onRefresh, this, &NetworkGeometry::resourceRefreshed); if (_resource->isLoaded()) { - resourceFinished(true); + resourceFinished(!_resource->getURL().isEmpty()); } } diff --git a/libraries/model-networking/src/model-networking/ModelCache.h b/libraries/model-networking/src/model-networking/ModelCache.h index 7da3e2894f..5f860e8990 100644 --- a/libraries/model-networking/src/model-networking/ModelCache.h +++ b/libraries/model-networking/src/model-networking/ModelCache.h @@ -101,7 +101,11 @@ public: virtual bool areTexturesLoaded() const { return isLoaded() && Geometry::areTexturesLoaded(); } protected: - virtual bool isCacheable() const override { return _loaded; } + friend class GeometryMappingResource; + + virtual bool isCacheable() const override { return _loaded && _isCacheable; } + + bool _isCacheable { true }; }; class NetworkGeometry : public QObject {