mirror of
https://github.com/overte-org/overte.git
synced 2025-04-22 16:13:28 +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;
|
||||
});
|
||||
|
||||
if (_modelJustLoaded) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (model) {
|
||||
if (_needsJointSimulation || _moving || _animating) {
|
||||
return true;
|
||||
|
@ -1148,9 +1152,11 @@ void ModelEntityRenderer::doUpdateTyped(const ScenePointer& scene, Transaction&
|
|||
return;
|
||||
}
|
||||
|
||||
_modelJustLoaded = false;
|
||||
// Check for addition
|
||||
if (_hasModel && !(bool)_model) {
|
||||
model = std::make_shared<Model>(nullptr, entity.get());
|
||||
connect(model.get(), &Model::setURLFinished, this, &ModelEntityRenderer::handleModelLoaded);
|
||||
model->setLoadingPriority(EntityTreeRenderer::getEntityLoadingPriority(*entity));
|
||||
model->init();
|
||||
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
|
||||
void ModelEntityRenderer::doRender(RenderArgs* args) {
|
||||
PROFILE_RANGE(render_detail, "MetaModelRender");
|
||||
|
|
|
@ -151,6 +151,7 @@ private:
|
|||
// Transparency is handled in ModelMeshPartPayload
|
||||
virtual bool isTransparent() const override { return false; }
|
||||
|
||||
bool _modelJustLoaded { false };
|
||||
bool _hasModel { false };
|
||||
::ModelPointer _model;
|
||||
GeometryResource::Pointer _compoundShapeResource;
|
||||
|
@ -178,6 +179,9 @@ private:
|
|||
bool _animating { false };
|
||||
uint64_t _lastAnimated { 0 };
|
||||
float _currentFrame { 0 };
|
||||
|
||||
private slots:
|
||||
void handleModelLoaded(bool success);
|
||||
};
|
||||
|
||||
} } // namespace
|
||||
|
|
|
@ -328,10 +328,18 @@ ModelMeshPartPayload::ModelMeshPartPayload(ModelPointer model, int meshIndex, in
|
|||
assert(model && model->isLoaded());
|
||||
_model = model;
|
||||
auto& modelMesh = model->getGeometry()->getMeshes().at(_meshIndex);
|
||||
const Model::MeshState& state = model->getMeshState(_meshIndex);
|
||||
|
||||
updateMeshPart(modelMesh, partIndex);
|
||||
computeAdjustedLocalBound(state.clusterMatrices);
|
||||
|
||||
updateTransform(transform, offsetTransform);
|
||||
Transform renderTransform = transform;
|
||||
if (state.clusterMatrices.size() == 1) {
|
||||
renderTransform = transform.worldTransform(Transform(state.clusterMatrices[0]));
|
||||
}
|
||||
updateTransformForSkinnedMesh(renderTransform, transform, state.clusterBuffer);
|
||||
|
||||
initCache();
|
||||
}
|
||||
|
||||
|
|
|
@ -1265,7 +1265,6 @@ void Model::createVisibleRenderItemSet() {
|
|||
shapeID++;
|
||||
}
|
||||
}
|
||||
computeMeshPartLocalBounds();
|
||||
}
|
||||
|
||||
void Model::createCollisionRenderItemSet() {
|
||||
|
|
Loading…
Reference in a new issue