mirror of
https://github.com/overte-org/overte.git
synced 2025-04-24 03:13:32 +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);
|
||||
_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) {
|
||||
|
|
|
@ -128,6 +128,7 @@ private:
|
|||
|
||||
void processMaterials();
|
||||
|
||||
render::ScenePointer _scene;
|
||||
};
|
||||
|
||||
#endif // hifi_ModelOverlay_h
|
||||
|
|
Loading…
Reference in a new issue