mirror of
https://github.com/overte-org/overte.git
synced 2025-08-06 12:54:30 +02:00
add _modelJustLoaded and updateTransforForSkinnedMesh on creation
This commit is contained in:
parent
be27376c52
commit
86198606e0
4 changed files with 24 additions and 1 deletions
|
@ -1032,6 +1032,10 @@ bool ModelEntityRenderer::needsUpdate() const {
|
||||||
model = _model;
|
model = _model;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (_modelJustLoaded) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if (model) {
|
if (model) {
|
||||||
if (_needsJointSimulation || _moving || _animating) {
|
if (_needsJointSimulation || _moving || _animating) {
|
||||||
return true;
|
return true;
|
||||||
|
@ -1148,9 +1152,11 @@ void ModelEntityRenderer::doUpdateTyped(const ScenePointer& scene, Transaction&
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_modelJustLoaded = false;
|
||||||
// Check for addition
|
// Check for addition
|
||||||
if (_hasModel && !(bool)_model) {
|
if (_hasModel && !(bool)_model) {
|
||||||
model = std::make_shared<Model>(nullptr, entity.get());
|
model = std::make_shared<Model>(nullptr, entity.get());
|
||||||
|
connect(model.get(), &Model::setURLFinished, this, &ModelEntityRenderer::handleModelLoaded);
|
||||||
model->setLoadingPriority(EntityTreeRenderer::getEntityLoadingPriority(*entity));
|
model->setLoadingPriority(EntityTreeRenderer::getEntityLoadingPriority(*entity));
|
||||||
model->init();
|
model->init();
|
||||||
entity->setModel(model);
|
entity->setModel(model);
|
||||||
|
@ -1241,6 +1247,12 @@ void ModelEntityRenderer::doUpdateTyped(const ScenePointer& scene, Transaction&
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ModelEntityRenderer::handleModelLoaded(bool success) {
|
||||||
|
if (success) {
|
||||||
|
_modelJustLoaded = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// NOTE: this only renders the "meta" portion of the Model, namely it renders debugging items
|
// NOTE: this only renders the "meta" portion of the Model, namely it renders debugging items
|
||||||
void ModelEntityRenderer::doRender(RenderArgs* args) {
|
void ModelEntityRenderer::doRender(RenderArgs* args) {
|
||||||
PROFILE_RANGE(render_detail, "MetaModelRender");
|
PROFILE_RANGE(render_detail, "MetaModelRender");
|
||||||
|
|
|
@ -151,6 +151,7 @@ private:
|
||||||
// Transparency is handled in ModelMeshPartPayload
|
// Transparency is handled in ModelMeshPartPayload
|
||||||
virtual bool isTransparent() const override { return false; }
|
virtual bool isTransparent() const override { return false; }
|
||||||
|
|
||||||
|
bool _modelJustLoaded { false };
|
||||||
bool _hasModel { false };
|
bool _hasModel { false };
|
||||||
::ModelPointer _model;
|
::ModelPointer _model;
|
||||||
GeometryResource::Pointer _compoundShapeResource;
|
GeometryResource::Pointer _compoundShapeResource;
|
||||||
|
@ -178,6 +179,9 @@ private:
|
||||||
bool _animating { false };
|
bool _animating { false };
|
||||||
uint64_t _lastAnimated { 0 };
|
uint64_t _lastAnimated { 0 };
|
||||||
float _currentFrame { 0 };
|
float _currentFrame { 0 };
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void handleModelLoaded(bool success);
|
||||||
};
|
};
|
||||||
|
|
||||||
} } // namespace
|
} } // namespace
|
||||||
|
|
|
@ -328,10 +328,18 @@ ModelMeshPartPayload::ModelMeshPartPayload(ModelPointer model, int meshIndex, in
|
||||||
assert(model && model->isLoaded());
|
assert(model && model->isLoaded());
|
||||||
_model = model;
|
_model = model;
|
||||||
auto& modelMesh = model->getGeometry()->getMeshes().at(_meshIndex);
|
auto& modelMesh = model->getGeometry()->getMeshes().at(_meshIndex);
|
||||||
|
const Model::MeshState& state = model->getMeshState(_meshIndex);
|
||||||
|
|
||||||
updateMeshPart(modelMesh, partIndex);
|
updateMeshPart(modelMesh, partIndex);
|
||||||
|
computeAdjustedLocalBound(state.clusterMatrices);
|
||||||
|
|
||||||
updateTransform(transform, offsetTransform);
|
updateTransform(transform, offsetTransform);
|
||||||
|
Transform renderTransform = transform;
|
||||||
|
if (state.clusterMatrices.size() == 1) {
|
||||||
|
renderTransform = transform.worldTransform(Transform(state.clusterMatrices[0]));
|
||||||
|
}
|
||||||
|
updateTransformForSkinnedMesh(renderTransform, transform, state.clusterBuffer);
|
||||||
|
|
||||||
initCache();
|
initCache();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1265,7 +1265,6 @@ void Model::createVisibleRenderItemSet() {
|
||||||
shapeID++;
|
shapeID++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
computeMeshPartLocalBounds();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Model::createCollisionRenderItemSet() {
|
void Model::createCollisionRenderItemSet() {
|
||||||
|
|
Loading…
Reference in a new issue