mirror of
https://github.com/overte-org/overte.git
synced 2025-04-20 03:44:02 +02:00
handle url reloading at the model level, this addresses avatars changing their models
This commit is contained in:
parent
3593afea3b
commit
56ac987c9b
2 changed files with 11 additions and 13 deletions
|
@ -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<NetworkMesh>& 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<int>& 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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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<render::Scene> scene, render::PendingChanges& pendingChanges);
|
||||
void removeFromScene(std::shared_ptr<render::Scene> scene, render::PendingChanges& pendingChanges);
|
||||
|
||||
|
@ -533,6 +533,7 @@ private:
|
|||
QSet<std::shared_ptr<OpaqueMeshPart>> _opaqueRenderItems;
|
||||
QSet<render::ItemID> _renderItems;
|
||||
bool _readyWhenAdded = false;
|
||||
bool _needsReload = true;
|
||||
|
||||
|
||||
private:
|
||||
|
|
Loading…
Reference in a new issue