diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index b6def4d35d..8640e9e8bf 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -302,10 +302,23 @@ void RenderableModelEntityItem::setShapeType(ShapeType type) { void RenderableModelEntityItem::setCompoundShapeURL(const QString& url) { auto currentCompoundShapeURL = getCompoundShapeURL(); ModelEntityItem::setCompoundShapeURL(url); - if (getCompoundShapeURL() != currentCompoundShapeURL || !getModel()) { + if (getCompoundShapeURL() != currentCompoundShapeURL) { auto shapeType = getShapeType(); if (shapeType == SHAPE_TYPE_COMPOUND || shapeType == SHAPE_TYPE_SIMPLE_COMPOUND) { fetchCollisionGeometryResource(); + markDirtyFlags(Simulation::DIRTY_SHAPE | Simulation::DIRTY_MASS); + } + } +} + +void RenderableModelEntityItem::setModelURL(const QString& url) { + auto currentModelURL = getModelURL(); + ModelEntityItem::setModelURL(url); + if (getModelURL() != currentModelURL) { + auto shapeType = getShapeType(); + if (shapeType == SHAPE_TYPE_COMPOUND || shapeType == SHAPE_TYPE_SIMPLE_COMPOUND) { + fetchCollisionGeometryResource(); + markDirtyFlags(Simulation::DIRTY_SHAPE | Simulation::DIRTY_MASS); } } } diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.h b/libraries/entities-renderer/src/RenderableModelEntityItem.h index 8d91d6c84b..b57ebd8056 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.h +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.h @@ -76,6 +76,7 @@ public: virtual void setShapeType(ShapeType type) override; virtual void setCompoundShapeURL(const QString& url) override; + virtual void setModelURL(const QString& url) override; virtual bool isReadyToComputeShape() const override; virtual void computeShapeInfo(ShapeInfo& shapeInfo) override; diff --git a/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp b/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp index 17cb3e87f1..ce2dae8d28 100644 --- a/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp @@ -199,7 +199,11 @@ void ZoneEntityRenderer::doRenderUpdateAsynchronousTyped(const TypedEntityPointe auto visible = entity->getVisible(); if (transformChanged || visible != _lastVisible) { _lastVisible = visible; - DependencyManager::get()->updateZone(entity->getID()); + void* key = (void*)this; + EntityItemID id = entity->getID(); + AbstractViewStateInterface::instance()->pushPostUpdateLambda(key, [id] { + DependencyManager::get()->updateZone(id); + }); } auto proceduralUserData = entity->getUserData(); diff --git a/libraries/entities/src/ModelEntityItem.cpp b/libraries/entities/src/ModelEntityItem.cpp index 65f21fd8c9..e841bf16dd 100644 --- a/libraries/entities/src/ModelEntityItem.cpp +++ b/libraries/entities/src/ModelEntityItem.cpp @@ -324,7 +324,6 @@ void ModelEntityItem::setCompoundShapeURL(const QString& url) { withWriteLock([&] { if (_compoundShapeURL.get() != url) { _compoundShapeURL.set(url); - _flags |= Simulation::DIRTY_SHAPE | Simulation::DIRTY_MASS; } }); }