diff --git a/interface/src/ui/overlays/ModelOverlay.cpp b/interface/src/ui/overlays/ModelOverlay.cpp index 67fa94f7e5..3bd4f84cd6 100644 --- a/interface/src/ui/overlays/ModelOverlay.cpp +++ b/interface/src/ui/overlays/ModelOverlay.cpp @@ -97,6 +97,11 @@ void ModelOverlay::update(float deltatime) { _model->setLayeredInHUD(getDrawHUDLayer(), scene); } scene->enqueueTransaction(transaction); + + if (!_texturesLoaded && _model->getGeometry() && _model->getGeometry()->areTexturesLoaded()) { + _texturesLoaded = true; + _model->updateRenderItems(); + } } bool ModelOverlay::addToScene(Overlay::Pointer overlay, const render::ScenePointer& scene, render::Transaction& transaction) { @@ -170,10 +175,12 @@ void ModelOverlay::setProperties(const QVariantMap& properties) { _url = urlValue.toString(); _updateModel = true; _isLoaded = false; + _texturesLoaded = false; } auto texturesValue = properties["textures"]; if (texturesValue.isValid() && texturesValue.canConvert(QVariant::Map)) { + _texturesLoaded = false; QVariantMap textureMap = texturesValue.toMap(); QMetaObject::invokeMethod(_model.get(), "setTextures", Qt::AutoConnection, Q_ARG(const QVariantMap&, textureMap)); diff --git a/interface/src/ui/overlays/ModelOverlay.h b/interface/src/ui/overlays/ModelOverlay.h index 4f7f1e0cae..a39f762210 100644 --- a/interface/src/ui/overlays/ModelOverlay.h +++ b/interface/src/ui/overlays/ModelOverlay.h @@ -79,6 +79,7 @@ private: ModelPointer _model; QVariantMap _modelTextures; + bool _texturesLoaded { false }; render::ItemIDs _subRenderItemIDs; diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index 79fe36d88f..245366cfc1 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -1080,6 +1080,10 @@ bool ModelEntityRenderer::needsRenderUpdate() const { return true; } + if (!_texturesLoaded && _model->getGeometry() && _model->getGeometry()->areTexturesLoaded()) { + return true; + } + if (model->needsReload()) { return true; } @@ -1216,6 +1220,7 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce // From here on, we are guaranteed a populated model withWriteLock([&] { if (_parsedModelURL != model->getURL()) { + _texturesLoaded = false; model->setURL(_parsedModelURL); } }); @@ -1247,6 +1252,7 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce } if (_lastTextures != entity->getTextures()) { + _texturesLoaded = false; _lastTextures = entity->getTextures(); auto newTextures = parseTexturesToMap(_lastTextures, entity->_originalTextures); if (newTextures != _currentTextures) { @@ -1301,12 +1307,17 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce } } + if (!_texturesLoaded && model->getGeometry() && model->getGeometry()->areTexturesLoaded()) { + _texturesLoaded = true; + model->updateRenderItems(); + } + // When the individual mesh parts of a model finish fading, they will mark their Model as needing updating // we will watch for that and ask the model to update it's render items if (model->getRenderItemsNeedUpdate()) { model->updateRenderItems(); } - + // The code to deal with the change of properties is now in ModelEntityItem.cpp // That is where _currentFrame and _lastAnimated were updated. if (_animating) { diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.h b/libraries/entities-renderer/src/RenderableModelEntityItem.h index 7af10b09fd..b7a339e1e1 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.h +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.h @@ -158,10 +158,11 @@ private: virtual bool isTransparent() const override { return false; } bool _hasModel { false }; - ::ModelPointer _model; + ModelPointer _model; GeometryResource::Pointer _compoundShapeResource; QString _lastTextures; QVariantMap _currentTextures; + bool _texturesLoaded { false }; AnimationPropertyGroup _renderAnimationProperties; int _lastKnownCurrentFrame { -1 }; #ifdef MODEL_ENTITY_USE_FADE_EFFECT