From a882931c6bf2728c7a557d5b63ebe6166d1915f4 Mon Sep 17 00:00:00 2001 From: NissimHadar Date: Wed, 18 Jul 2018 15:02:02 -0700 Subject: [PATCH] Only show overlay if textures have loaded --- interface/src/ui/overlays/ModelOverlay.cpp | 26 ++++++++++++---------- interface/src/ui/overlays/ModelOverlay.h | 1 + 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/interface/src/ui/overlays/ModelOverlay.cpp b/interface/src/ui/overlays/ModelOverlay.cpp index f47172eb55..dbb0b23558 100644 --- a/interface/src/ui/overlays/ModelOverlay.cpp +++ b/interface/src/ui/overlays/ModelOverlay.cpp @@ -27,6 +27,11 @@ ModelOverlay::ModelOverlay() { _model->setLoadingPriority(_loadPriority); _isLoaded = false; + + _scene = qApp->getMain3DScene(); + + // Don't show overlay until textures have loaded + _model->setVisibleInScene(false, _scene); } ModelOverlay::ModelOverlay(const ModelOverlay* modelOverlay) : @@ -85,12 +90,11 @@ void ModelOverlay::update(float deltatime) { // check to see if when we added our model to the scene they were ready, if they were not ready, then // fix them up in the scene - render::ScenePointer scene = qApp->getMain3DScene(); render::Transaction transaction; if (_model->needsFixupInScene()) { emit DependencyManager::get()->modelRemovedFromScene(getID(), NestableType::Overlay, _model); - _model->removeFromScene(scene, transaction); - _model->addToScene(scene, transaction); + _model->removeFromScene(_scene, transaction); + _model->addToScene(_scene, transaction); auto newRenderItemIDs{ _model->fetchRenderItemIDs() }; transaction.updateItem(getRenderItemID(), [newRenderItemIDs](Overlay& data) { @@ -105,40 +109,38 @@ void ModelOverlay::update(float deltatime) { _visibleDirty = false; // don't show overlays in mirrors or spectator-cam unless _isVisibleInSecondaryCamera is true uint8_t modelRenderTagMask = (_isVisibleInSecondaryCamera ? render::hifi::TAG_ALL_VIEWS : render::hifi::TAG_MAIN_VIEW); - _model->setTagMask(modelRenderTagMask, scene); - _model->setVisibleInScene(getVisible(), scene); + _model->setTagMask(modelRenderTagMask, _scene); metaDirty = true; } if (_drawInFrontDirty) { _drawInFrontDirty = false; - _model->setLayeredInFront(getDrawInFront(), scene); + _model->setLayeredInFront(getDrawInFront(), _scene); metaDirty = true; } if (_drawInHUDDirty) { _drawInHUDDirty = false; - _model->setLayeredInHUD(getDrawHUDLayer(), scene); + _model->setLayeredInHUD(getDrawHUDLayer(), _scene); metaDirty = true; } if (_groupCulledDirty) { _groupCulledDirty = false; - _model->setGroupCulled(_isGroupCulled, scene); + _model->setGroupCulled(_isGroupCulled, _scene); metaDirty = true; } if (metaDirty) { transaction.updateItem(getRenderItemID(), [](Overlay& data) {}); } - scene->enqueueTransaction(transaction); + _scene->enqueueTransaction(transaction); if (!_texturesLoaded && _model->getGeometry() && _model->getGeometry()->areTexturesLoaded()) { _texturesLoaded = true; if (!_modelTextures.isEmpty()) { _model->setTextures(_modelTextures); } + + _model->setVisibleInScene(true, _scene); _model->updateRenderItems(); } - - // Only show overlay if textures have loaded - _model->setVisibleInScene(_texturesLoaded, scene); } bool ModelOverlay::addToScene(Overlay::Pointer overlay, const render::ScenePointer& scene, render::Transaction& transaction) { diff --git a/interface/src/ui/overlays/ModelOverlay.h b/interface/src/ui/overlays/ModelOverlay.h index f7a79c5615..9b5a8e2ec1 100644 --- a/interface/src/ui/overlays/ModelOverlay.h +++ b/interface/src/ui/overlays/ModelOverlay.h @@ -128,6 +128,7 @@ private: void processMaterials(); + render::ScenePointer _scene; }; #endif // hifi_ModelOverlay_h