Showing the changes to libraries/render-utils/src/Model.cpp (1 of 2 files). Show all
Unified · Split
| @@ -218,7 +218,6 @@ void Model::updateRenderItems() { · 217 unmodified lines | ||
| 218 | 218 | _needsUpdateClusterMatrices = true; |
| 219 | 219 | _renderItemsNeedUpdate = false; |
| 220 | 220 | |
| 221 | − | |
| 222 | 221 | // queue up this work for later processing, at the end of update and just before rendering. |
| 223 | 222 | // the application will ensure only the last lambda is actually invoked. |
| 224 | 223 | void* key = (void*)this; |
| @@ -227,7 +226,7 @@ void Model::updateRenderItems() { · 2 unmodified lines | ||
| 227 | 226 | |
| 228 | 227 | // do nothing, if the model has already been destroyed. |
| 229 | 228 | auto self = weakSelf.lock(); |
| 230 | − if (!self) { | |
| 229 | + if (!self || !self->isLoaded()) { | |
| 231 | 230 | return; |
| 232 | 231 | } |
| 233 | 232 | |
| @@ -238,26 +237,21 @@ void Model::updateRenderItems() { · 4 unmodified lines | ||
| 238 | 237 | Transform modelTransform = self->getTransform(); |
| 239 | 238 | modelTransform.setScale(glm::vec3(1.0f)); |
| 240 | 239 | |
| 241 | − uint32_t deleteGeometryCounter = self->_deleteGeometryCounter; | |
| 242 | − | |
| 243 | 240 | render::Transaction transaction; |
| 244 | 241 | for (int i = 0; i < self->_modelMeshRenderItemIDs.size(); i++) { |
| 242 | + | |
| 245 | 243 | auto itemID = self->_modelMeshRenderItemIDs[i]; |
| 246 | 244 | auto meshIndex = self->_modelMeshRenderItemShapes[i].meshIndex; |
| 247 | − if (self && self->isLoaded()) { | |
| 248 | − const Model::MeshState& state = self->getMeshState(meshIndex); | |
| 249 | − auto clusterMatrices(state.clusterMatrices); | |
| 250 | − | |
| 251 | − transaction.updateItem<ModelMeshPartPayload>(itemID, [deleteGeometryCounter, modelTransform, clusterMatrices](ModelMeshPartPayload& data) { | |
| 252 | − data.updateClusterBuffer(clusterMatrices); | |
| 253 | − | |
| 254 | − Transform renderTransform = modelTransform; | |
| 255 | − if (clusterMatrices.size() == 1) { | |
| 256 | − renderTransform = modelTransform.worldTransform(Transform(clusterMatrices[0])); | |
| 257 | − } | |
| 258 | − data.updateTransformForSkinnedMesh(renderTransform, modelTransform); | |
| 259 | − }); | |
| 260 | − } | |
| 245 | + auto clusterMatrices(self->getMeshState(meshIndex).clusterMatrices); | |
| 246 | + | |
| 247 | + transaction.updateItem<ModelMeshPartPayload>(itemID, [modelTransform, clusterMatrices](ModelMeshPartPayload& data) { | |
| 248 | + data.updateClusterBuffer(clusterMatrices); | |
| 249 | + Transform renderTransform = modelTransform; | |
| 250 | + if (clusterMatrices.size() == 1) { | |
| 251 | + renderTransform = modelTransform.worldTransform(Transform(clusterMatrices[0])); | |
| 252 | + } | |
| 253 | + data.updateTransformForSkinnedMesh(renderTransform, modelTransform); | |
| 254 | + }); | |
| 261 | 255 | } |
| 262 | 256 | |
| 263 | 257 | Transform collisionMeshOffset; |