add _modelJustLoaded and updateTransforForSkinnedMesh on creation

This commit is contained in:
SamGondelman 2017-09-22 11:46:24 -07:00
parent be27376c52
commit 86198606e0
4 changed files with 24 additions and 1 deletions

View file

@ -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");

View file

@ -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

View file

@ -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();
} }

View file

@ -1265,7 +1265,6 @@ void Model::createVisibleRenderItemSet() {
shapeID++; shapeID++;
} }
} }
computeMeshPartLocalBounds();
} }
void Model::createCollisionRenderItemSet() { void Model::createCollisionRenderItemSet() {