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);
_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<scriptable::ModelProviderFactory>()->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<Overlay>(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<Overlay>(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) {

View file

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