diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index cb8217d465..6bb5d298f1 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -407,6 +407,7 @@ void Model::reset() { _meshGroupsKnown = false; _readyWhenAdded = false; // in case any of our users are using scenes + _needsReload = true; } bool Model::updateGeometry() { @@ -458,6 +459,7 @@ bool Model::updateGeometry() { _geometry = geometry; _meshGroupsKnown = false; _readyWhenAdded = false; // in case any of our users are using scenes + _needsReload = true; initJointStates(newJointStates); needToRebuild = true; } else if (_jointStates.isEmpty()) { @@ -1319,6 +1321,10 @@ void Model::setURL(const QUrl& url, const QUrl& fallback, bool retainCurrent, bo if (_url == url && _geometry && _geometry->getURL() == url) { return; } + + _readyWhenAdded = false; // reset out render items. + _needsReload = true; + _url = url; // if so instructed, keep the current geometry until the new one is loaded @@ -1971,6 +1977,7 @@ void Model::applyNextGeometry() { _geometry = _nextGeometry; _meshGroupsKnown = false; _readyWhenAdded = false; // in case any of our users are using scenes + _needsReload = false; // we are loaded now! _nextBaseGeometry.reset(); _nextGeometry.reset(); } @@ -2049,18 +2056,6 @@ void Model::renderPart(RenderArgs* args, int meshIndex, int partIndex, bool tran _transforms.push_back(Transform()); } - // _transforms[0] = _viewState->getViewTransform(); - // args->_viewFrustum->evalViewTransform(_transforms[0]); - - // apply entity translation offset to the viewTransform in one go (it's a preTranslate because viewTransform goes from world to eye space) - // _transforms[0].setTranslation(_translation); - - // batch.setViewTransform(_transforms[0]); - - - // const float OPAQUE_ALPHA_THRESHOLD = 0.5f; - // const float TRANSPARENT_ALPHA_THRESHOLD = 0.0f; - // auto alphaThreshold = translucent ? TRANSPARENT_ALPHA_THRESHOLD : OPAQUE_ALPHA_THRESHOLD; // FIX ME auto alphaThreshold = args->_alphaThreshold; //translucent ? TRANSPARENT_ALPHA_THRESHOLD : OPAQUE_ALPHA_THRESHOLD; // FIX ME const FBXGeometry& geometry = _geometry->getFBXGeometry(); const QVector& networkMeshes = _geometry->getMeshes(); @@ -2099,6 +2094,7 @@ void Model::renderPart(RenderArgs* args, int meshIndex, int partIndex, bool tran if (meshIndex < 0 || meshIndex >= networkMeshes.size() || meshIndex > geometry.meshes.size()) { _meshGroupsKnown = false; // regenerate these lists next time around. _readyWhenAdded = false; // in case any of our users are using scenes + _needsReload = true; return; // FIXME! } @@ -2414,6 +2410,7 @@ int Model::renderMeshesFromList(QVector& list, gpu::Batch& batch, RenderMod if (i < 0 || i >= networkMeshes.size() || i > geometry.meshes.size()) { _meshGroupsKnown = false; // regenerate these lists next time around. _readyWhenAdded = false; // in case any of our users are using scenes + _needsReload = true; continue; } diff --git a/libraries/render-utils/src/Model.h b/libraries/render-utils/src/Model.h index 85d0022cbc..ad2d725027 100644 --- a/libraries/render-utils/src/Model.h +++ b/libraries/render-utils/src/Model.h @@ -118,7 +118,7 @@ public: // new Scene/Engine rendering support bool needsFixupInScene() { return !_readyWhenAdded && readyToAddToScene(); } - bool readyToAddToScene(RenderArgs* renderArgs = nullptr) { return isRenderable() && isActive() && isLoadedWithTextures(); } + bool readyToAddToScene(RenderArgs* renderArgs = nullptr) { return !_needsReload && isRenderable() && isActive() && isLoadedWithTextures(); } bool addToScene(std::shared_ptr scene, render::PendingChanges& pendingChanges); void removeFromScene(std::shared_ptr scene, render::PendingChanges& pendingChanges); @@ -533,6 +533,7 @@ private: QSet> _opaqueRenderItems; QSet _renderItems; bool _readyWhenAdded = false; + bool _needsReload = true; private: