From 103257493c801ecd9715e5950a49bfe76df754f9 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Wed, 30 Mar 2016 14:24:28 -0700 Subject: [PATCH] Model: fix for crash when displaying collision mesh. This was due to a default constructed PayloadPointer being sent to the scene via resetItem. The fix is to A) not do that anymore, B) make resetItem more robust and not crash if this happens. --- libraries/render-utils/src/Model.cpp | 2 +- libraries/render/src/render/Scene.cpp | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index 8d59d5f736..83433d24cb 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -536,7 +536,7 @@ void Model::setVisibleInScene(bool newValue, std::shared_ptr scen pendingChanges.resetItem(item, _modelMeshRenderItems[item]); } foreach (auto item, _collisionRenderItems.keys()) { - pendingChanges.resetItem(item, _modelMeshRenderItems[item]); + pendingChanges.resetItem(item, _collisionRenderItems[item]); } scene->enqueuePendingChanges(pendingChanges); } diff --git a/libraries/render/src/render/Scene.cpp b/libraries/render/src/render/Scene.cpp index 79f4b2a269..e091b4842c 100644 --- a/libraries/render/src/render/Scene.cpp +++ b/libraries/render/src/render/Scene.cpp @@ -16,8 +16,13 @@ using namespace render; void PendingChanges::resetItem(ItemID id, const PayloadPointer& payload) { - _resetItems.push_back(id); - _resetPayloads.push_back(payload); + if (payload) { + _resetItems.push_back(id); + _resetPayloads.push_back(payload); + } else { + qDebug() << "WARNING: PendingChanges::resetItem with a null payload!"; + removeItem(id); + } } void PendingChanges::removeItem(ItemID id) {