From ae3d5c148ae3882d74628994cbf3cd68c945f52c Mon Sep 17 00:00:00 2001 From: sam gateau Date: Mon, 15 Oct 2018 17:48:16 -0700 Subject: [PATCH] Debugging the tablet disappearing in hmd --- interface/src/ui/overlays/ModelOverlay.cpp | 20 ++++++++++++++++++-- libraries/render-utils/src/Model.cpp | 20 ++++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/interface/src/ui/overlays/ModelOverlay.cpp b/interface/src/ui/overlays/ModelOverlay.cpp index 2379685252..5040842b3b 100644 --- a/interface/src/ui/overlays/ModelOverlay.cpp +++ b/interface/src/ui/overlays/ModelOverlay.cpp @@ -571,8 +571,24 @@ void ModelOverlay::locationChanged(bool tellPhysics) { // FIXME Start using the _renderTransform instead of calling for Transform and Dimensions from here, do the custom things needed in evalRenderTransform() if (_model && _model->isActive()) { - _model->setRotation(getWorldOrientation()); - _model->setTranslation(getWorldPosition()); + if (!_isLODEnabled) { + auto rot = _model->getRotation(); + auto tra = _model->getTranslation(); + + auto nrot = getWorldOrientation(); + auto ntra = getWorldPosition(); + if (glm::any(glm::notEqual(rot, nrot))) { + rot = nrot; + _model->setRotation(rot); + } + if (glm::any(glm::notEqual(tra, ntra))) { + tra = ntra; + _model->setTranslation(tra); + } + } else { + _model->setRotation(getWorldOrientation()); + _model->setTranslation(getWorldPosition()); + } } } diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index 8b50f2e420..2bc9d25aff 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -228,6 +228,10 @@ void Model::updateRenderItems() { bool isWireframe = self->isWireframe(); auto renderItemKeyGlobalFlags = self->getRenderItemKeyGlobalFlags(); + if (renderItemKeyGlobalFlags.isLODDisabled()) { + modelTransform.setScale(glm::vec3(1.0f)); + } + render::Transaction transaction; for (int i = 0; i < (int) self->_modelMeshRenderItemIDs.size(); i++) { @@ -247,6 +251,8 @@ void Model::updateRenderItems() { data.updateClusterBuffer(meshState.clusterMatrices); } + auto bound = data.getBound(); + Transform renderTransform = modelTransform; if (useDualQuaternionSkinning) { @@ -264,6 +270,15 @@ void Model::updateRenderItems() { } data.updateTransformForSkinnedMesh(renderTransform, modelTransform); + if (renderItemKeyGlobalFlags.isLODDisabled()) { + auto newBound = data.getBound(); + if (bound != newBound) { + data.updateTransformForSkinnedMesh(renderTransform, modelTransform); + } else { + data.updateTransformForSkinnedMesh(renderTransform, modelTransform); + } + } + data.updateKey(renderItemKeyGlobalFlags); data.setShapeKey(invalidatePayloadShapeKey, isWireframe, useDualQuaternionSkinning); }); @@ -893,7 +908,12 @@ void Model::updateRenderItemsKey(const render::ScenePointer& scene) { _needsFixupInScene = true; return; } + auto prevVal = _needsFixupInScene; auto renderItemsKey = _renderItemKeyGlobalFlags; + if (renderItemsKey.isLODDisabled()) { + _needsFixupInScene = true; + _needsFixupInScene = prevVal; + } render::Transaction transaction; foreach(auto item, _modelMeshRenderItemsMap.keys()) { transaction.updateItem(item, [renderItemsKey](ModelMeshPartPayload& data) {