diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 1d31a84ed4..e35b48baad 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -5348,6 +5348,7 @@ bool Application::nearbyEntitiesAreReadyForPhysics() { qCDebug(interfaceapp) << "Physics disabled until entity loads: " << entity->getID() << entity->getName(); // don't break here because we want all the relevant entities to start their downloads result = false; + break; } } return result; diff --git a/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp b/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp index 024b78b616..a27feb4c72 100644 --- a/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp @@ -36,15 +36,17 @@ void RenderableZoneEntityItem::changeProperties(Lambda setNewProperties) { QString oldShapeURL = getCompoundShapeURL(); glm::vec3 oldPosition = getPosition(), oldDimensions = getDimensions(); glm::quat oldRotation = getRotation(); - + setNewProperties(); - + if (oldShapeURL != getCompoundShapeURL()) { if (_model) { - delete _model; + _model.reset(); } - - _model = getModel(); + + _model = std::make_shared(); + _model->setIsWireframe(true); + _model->init(); _needsInitialSimulation = true; _model->setURL(getCompoundShapeURL()); } @@ -80,13 +82,6 @@ int RenderableZoneEntityItem::readEntitySubclassDataFromBuffer(const unsigned ch return bytesRead; } -Model* RenderableZoneEntityItem::getModel() { - Model* model = new Model(); - model->setIsWireframe(true); - model->init(); - return model; -} - void RenderableZoneEntityItem::initialSimulation() { _model->setScaleToFit(true, getDimensions()); _model->setSnapModelToRegistrationPoint(true, getRegistrationPoint()); @@ -108,7 +103,7 @@ void RenderableZoneEntityItem::updateGeometry() { void RenderableZoneEntityItem::render(RenderArgs* args) { Q_ASSERT(getType() == EntityTypes::Zone); - + if (_drawZoneBoundaries) { switch (getShapeType()) { case SHAPE_TYPE_COMPOUND: { @@ -123,9 +118,9 @@ void RenderableZoneEntityItem::render(RenderArgs* args) { render::Item::Status::Getters statusGetters; makeEntityItemStatusGetters(getThisPointer(), statusGetters); _model->addToScene(scene, transaction); - + scene->enqueueTransaction(transaction); - + _model->setVisibleInScene(getVisible(), scene); } break; @@ -134,7 +129,7 @@ void RenderableZoneEntityItem::render(RenderArgs* args) { case SHAPE_TYPE_SPHERE: { PerformanceTimer perfTimer("zone->renderPrimitive"); glm::vec4 DEFAULT_COLOR(1.0f, 1.0f, 1.0f, 1.0f); - + Q_ASSERT(args->_batch); gpu::Batch& batch = *args->_batch; @@ -159,7 +154,7 @@ void RenderableZoneEntityItem::render(RenderArgs* args) { break; } } - + if ((!_drawZoneBoundaries || getShapeType() != SHAPE_TYPE_COMPOUND) && _model && !_model->needsFixupInScene()) { // If the model is in the scene but doesn't need to be, remove it. @@ -175,11 +170,11 @@ bool RenderableZoneEntityItem::contains(const glm::vec3& point) const { return EntityItem::contains(point); } const_cast(this)->updateGeometry(); - + if (_model && _model->isActive() && EntityItem::contains(point)) { return _model->convexHullContains(point); } - + return false; } @@ -188,7 +183,7 @@ public: RenderableZoneEntityItemMeta(EntityItemPointer entity) : entity(entity){ } typedef render::Payload Payload; typedef Payload::DataPointer Pointer; - + EntityItemPointer entity; }; @@ -196,7 +191,7 @@ namespace render { template <> const ItemKey payloadGetKey(const RenderableZoneEntityItemMeta::Pointer& payload) { return ItemKey::Builder::opaqueShape(); } - + template <> const Item::Bound payloadGetBound(const RenderableZoneEntityItemMeta::Pointer& payload) { if (payload && payload->entity) { bool success; @@ -220,7 +215,7 @@ namespace render { bool RenderableZoneEntityItem::addToScene(EntityItemPointer self, const render::ScenePointer& scene, render::Transaction& transaction) { _myMetaItem = scene->allocateID(); - + auto renderData = std::make_shared(self); auto renderPayload = std::make_shared(renderData); diff --git a/libraries/entities-renderer/src/RenderableZoneEntityItem.h b/libraries/entities-renderer/src/RenderableZoneEntityItem.h index c81afdab08..3ebf472835 100644 --- a/libraries/entities-renderer/src/RenderableZoneEntityItem.h +++ b/libraries/entities-renderer/src/RenderableZoneEntityItem.h @@ -23,7 +23,7 @@ public: RenderableZoneEntityItem(const EntityItemID& entityItemID) : ZoneEntityItem(entityItemID), - _model(NULL), + _model(nullptr), _needsInitialSimulation(true) { } @@ -48,14 +48,13 @@ private: virtual void dimensionsChanged() override { EntityItem::dimensionsChanged(); notifyBoundChanged(); } void notifyBoundChanged(); - Model* getModel(); void initialSimulation(); void updateGeometry(); template void changeProperties(Lambda functor); - Model* _model; + ModelPointer _model; bool _needsInitialSimulation; render::ItemID _myMetaItem{ render::Item::INVALID_ITEM_ID };