Only show overlay if textures have loaded

This commit is contained in:
NissimHadar 2018-07-18 15:02:02 -07:00
parent 99b95acada
commit a882931c6b
2 changed files with 15 additions and 12 deletions

View file

@ -27,6 +27,11 @@ ModelOverlay::ModelOverlay()
{ {
_model->setLoadingPriority(_loadPriority); _model->setLoadingPriority(_loadPriority);
_isLoaded = false; _isLoaded = false;
_scene = qApp->getMain3DScene();
// Don't show overlay until textures have loaded
_model->setVisibleInScene(false, _scene);
} }
ModelOverlay::ModelOverlay(const ModelOverlay* modelOverlay) : 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 // 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 // fix them up in the scene
render::ScenePointer scene = qApp->getMain3DScene();
render::Transaction transaction; render::Transaction transaction;
if (_model->needsFixupInScene()) { if (_model->needsFixupInScene()) {
emit DependencyManager::get<scriptable::ModelProviderFactory>()->modelRemovedFromScene(getID(), NestableType::Overlay, _model); emit DependencyManager::get<scriptable::ModelProviderFactory>()->modelRemovedFromScene(getID(), NestableType::Overlay, _model);
_model->removeFromScene(scene, transaction); _model->removeFromScene(_scene, transaction);
_model->addToScene(scene, transaction); _model->addToScene(_scene, transaction);
auto newRenderItemIDs{ _model->fetchRenderItemIDs() }; auto newRenderItemIDs{ _model->fetchRenderItemIDs() };
transaction.updateItem<Overlay>(getRenderItemID(), [newRenderItemIDs](Overlay& data) { transaction.updateItem<Overlay>(getRenderItemID(), [newRenderItemIDs](Overlay& data) {
@ -105,40 +109,38 @@ void ModelOverlay::update(float deltatime) {
_visibleDirty = false; _visibleDirty = false;
// don't show overlays in mirrors or spectator-cam unless _isVisibleInSecondaryCamera is true // 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); uint8_t modelRenderTagMask = (_isVisibleInSecondaryCamera ? render::hifi::TAG_ALL_VIEWS : render::hifi::TAG_MAIN_VIEW);
_model->setTagMask(modelRenderTagMask, scene); _model->setTagMask(modelRenderTagMask, _scene);
_model->setVisibleInScene(getVisible(), scene);
metaDirty = true; metaDirty = true;
} }
if (_drawInFrontDirty) { if (_drawInFrontDirty) {
_drawInFrontDirty = false; _drawInFrontDirty = false;
_model->setLayeredInFront(getDrawInFront(), scene); _model->setLayeredInFront(getDrawInFront(), _scene);
metaDirty = true; metaDirty = true;
} }
if (_drawInHUDDirty) { if (_drawInHUDDirty) {
_drawInHUDDirty = false; _drawInHUDDirty = false;
_model->setLayeredInHUD(getDrawHUDLayer(), scene); _model->setLayeredInHUD(getDrawHUDLayer(), _scene);
metaDirty = true; metaDirty = true;
} }
if (_groupCulledDirty) { if (_groupCulledDirty) {
_groupCulledDirty = false; _groupCulledDirty = false;
_model->setGroupCulled(_isGroupCulled, scene); _model->setGroupCulled(_isGroupCulled, _scene);
metaDirty = true; metaDirty = true;
} }
if (metaDirty) { if (metaDirty) {
transaction.updateItem<Overlay>(getRenderItemID(), [](Overlay& data) {}); transaction.updateItem<Overlay>(getRenderItemID(), [](Overlay& data) {});
} }
scene->enqueueTransaction(transaction); _scene->enqueueTransaction(transaction);
if (!_texturesLoaded && _model->getGeometry() && _model->getGeometry()->areTexturesLoaded()) { if (!_texturesLoaded && _model->getGeometry() && _model->getGeometry()->areTexturesLoaded()) {
_texturesLoaded = true; _texturesLoaded = true;
if (!_modelTextures.isEmpty()) { if (!_modelTextures.isEmpty()) {
_model->setTextures(_modelTextures); _model->setTextures(_modelTextures);
} }
_model->setVisibleInScene(true, _scene);
_model->updateRenderItems(); _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) { bool ModelOverlay::addToScene(Overlay::Pointer overlay, const render::ScenePointer& scene, render::Transaction& transaction) {

View file

@ -128,6 +128,7 @@ private:
void processMaterials(); void processMaterials();
render::ScenePointer _scene;
}; };
#endif // hifi_ModelOverlay_h #endif // hifi_ModelOverlay_h