From 97813a2f725f842ba143a8f4a07921f9d0b952c5 Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Fri, 12 Sep 2014 15:34:49 -0700 Subject: [PATCH] Make sure we note that the blender finished even if the geometry changed. --- interface/src/renderer/GeometryCache.cpp | 4 ++-- interface/src/renderer/Model.cpp | 19 ++++++++++--------- interface/src/renderer/Model.h | 3 ++- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/interface/src/renderer/GeometryCache.cpp b/interface/src/renderer/GeometryCache.cpp index 3cfc5efd5f..2b0af384b0 100644 --- a/interface/src/renderer/GeometryCache.cpp +++ b/interface/src/renderer/GeometryCache.cpp @@ -298,8 +298,8 @@ QSharedPointer GeometryCache::getGeometry(const QUrl& url, cons void GeometryCache::setBlendedVertices(const QPointer& model, const QWeakPointer& geometry, const QVector& vertices, const QVector& normals) { - if (!model.isNull() && model->getGeometry() == geometry) { - model->setBlendedVertices(vertices, normals); + if (!model.isNull()) { + model->setBlendedVertices(geometry, vertices, normals); } } diff --git a/interface/src/renderer/Model.cpp b/interface/src/renderer/Model.cpp index 0b16688056..85e4e9c94f 100644 --- a/interface/src/renderer/Model.cpp +++ b/interface/src/renderer/Model.cpp @@ -848,8 +848,8 @@ Blender::Blender(Model* model, const QWeakPointer& geometry, } void Blender::run() { - // make sure the model/geometry still exists - if (_model.isNull() || _geometry.isNull()) { + // make sure the model still exists + if (_model.isNull()) { return; } QVector vertices, normals; @@ -1272,24 +1272,25 @@ void Model::renderJointCollisionShapes(float alpha) { // implement this when we have shapes for regular models } -void Model::setBlendedVertices(const QVector& vertices, const QVector& normals) { +void Model::setBlendedVertices(const QWeakPointer& geometry, const QVector& vertices, + const QVector& normals) { _blenderPending = false; // start the next blender if required - const FBXGeometry& geometry = _geometry->getFBXGeometry(); + const FBXGeometry& fbxGeometry = _geometry->getFBXGeometry(); if (_blendRequired) { _blendRequired = false; - if (geometry.hasBlendedMeshes()) { + if (fbxGeometry.hasBlendedMeshes()) { _blenderPending = true; - QThreadPool::globalInstance()->start(new Blender(this, _geometry, geometry.meshes, _blendshapeCoefficients)); + QThreadPool::globalInstance()->start(new Blender(this, _geometry, fbxGeometry.meshes, _blendshapeCoefficients)); } } - if (_blendedVertexBuffers.isEmpty()) { + if (_geometry != geometry || _blendedVertexBuffers.isEmpty()) { return; } int index = 0; - for (int i = 0; i < geometry.meshes.size(); i++) { - const FBXMesh& mesh = geometry.meshes.at(i); + for (int i = 0; i < fbxGeometry.meshes.size(); i++) { + const FBXMesh& mesh = fbxGeometry.meshes.at(i); if (mesh.blendshapes.isEmpty()) { continue; } diff --git a/interface/src/renderer/Model.h b/interface/src/renderer/Model.h index 396a3e576c..c41fd7d5de 100644 --- a/interface/src/renderer/Model.h +++ b/interface/src/renderer/Model.h @@ -166,7 +166,8 @@ public: virtual void renderJointCollisionShapes(float alpha); /// Sets blended vertices computed in a separate thread. - void setBlendedVertices(const QVector& vertices, const QVector& normals); + void setBlendedVertices(const QWeakPointer& geometry, const QVector& vertices, + const QVector& normals); class LocalLight { public: