mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 22:10:25 +02:00
Only show overlay if textures have loaded
This commit is contained in:
parent
99b95acada
commit
a882931c6b
2 changed files with 15 additions and 12 deletions
|
@ -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) {
|
||||||
|
|
|
@ -128,6 +128,7 @@ private:
|
||||||
|
|
||||||
void processMaterials();
|
void processMaterials();
|
||||||
|
|
||||||
|
render::ScenePointer _scene;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // hifi_ModelOverlay_h
|
#endif // hifi_ModelOverlay_h
|
||||||
|
|
Loading…
Reference in a new issue