Showing the changes to libraries/render-utils/src/Model.cpp (1 of 81 files). Show all
Unified · Split
| @@ -232,6 +232,8 @@ void Model::updateRenderItems() { · 231 unmodified lines | |||
| 232 | auto renderWithZones = self->getRenderWithZones(); | 232 | auto renderWithZones = self->getRenderWithZones(); |
| 233 | auto renderItemKeyGlobalFlags = self->getRenderItemKeyGlobalFlags(); | 233 | auto renderItemKeyGlobalFlags = self->getRenderItemKeyGlobalFlags(); |
| 234 | bool cauterized = self->isCauterized(); | 234 | bool cauterized = self->isCauterized(); |
| 235 | auto mirrorMode = self->getMirrorMode(); | ||
| 236 | const QUuid& portalExitID = self->getPortalExitID(); | ||
| 235 | 237 | ||
| 236 | render::Transaction transaction; | 238 | render::Transaction transaction; |
| 237 | for (int i = 0; i < (int) self->_modelMeshRenderItemIDs.size(); i++) { | 239 | for (int i = 0; i < (int) self->_modelMeshRenderItemIDs.size(); i++) { |
| @@ -246,7 +248,7 @@ void Model::updateRenderItems() { · 8 unmodified lines | |||
| 246 | 248 | ||
| 247 | transaction.updateItem<ModelMeshPartPayload>(itemID, [modelTransform, meshState, useDualQuaternionSkinning, | 249 | transaction.updateItem<ModelMeshPartPayload>(itemID, [modelTransform, meshState, useDualQuaternionSkinning, |
| 248 | invalidatePayloadShapeKey, primitiveMode, billboardMode, renderItemKeyGlobalFlags, | 250 | invalidatePayloadShapeKey, primitiveMode, billboardMode, renderItemKeyGlobalFlags, |
| 249 | cauterized, renderWithZones](ModelMeshPartPayload& data) { | 251 | cauterized, renderWithZones, mirrorMode, portalExitID](ModelMeshPartPayload& data) { |
| 250 | if (useDualQuaternionSkinning) { | 252 | if (useDualQuaternionSkinning) { |
| 251 | data.updateClusterBuffer(meshState.clusterDualQuaternions); | 253 | data.updateClusterBuffer(meshState.clusterDualQuaternions); |
| 252 | data.computeAdjustedLocalBound(meshState.clusterDualQuaternions); | 254 | data.computeAdjustedLocalBound(meshState.clusterDualQuaternions); |
| @@ -260,6 +262,8 @@ void Model::updateRenderItems() { · 7 unmodified lines | |||
| 260 | data.setCauterized(cauterized); | 262 | data.setCauterized(cauterized); |
| 261 | data.setRenderWithZones(renderWithZones); | 263 | data.setRenderWithZones(renderWithZones); |
| 262 | data.setBillboardMode(billboardMode); | 264 | data.setBillboardMode(billboardMode); |
| 265 | data.setMirrorMode(mirrorMode); | ||
| 266 | data.setPortalExitID(portalExitID); | ||
| 263 | data.updateKey(renderItemKeyGlobalFlags); | 267 | data.updateKey(renderItemKeyGlobalFlags); |
| 264 | data.setShapeKey(invalidatePayloadShapeKey, primitiveMode, useDualQuaternionSkinning); | 268 | data.setShapeKey(invalidatePayloadShapeKey, primitiveMode, useDualQuaternionSkinning); |
| 265 | }); | 269 | }); |
| @@ -1065,6 +1069,46 @@ void Model::setRenderWithZones(const QVector<QUuid>& renderWithZones, const rend · 799 unmodified lines | |||
| 1065 | } | 1069 | } |
| 1066 | } | 1070 | } |
| 1067 | 1071 | ||
| 1072 | void Model::setMirrorMode(MirrorMode mirrorMode, const render::ScenePointer& scene) { | ||
| 1073 | if (_mirrorMode != mirrorMode) { | ||
| 1074 | _mirrorMode = mirrorMode; | ||
| 1075 | if (!scene) { | ||
| 1076 | _needsFixupInScene = true; | ||
| 1077 | return; | ||
| 1078 | } | ||
| 1079 | |||
| 1080 | render::Transaction transaction; | ||
| 1081 | auto renderItemsKey = _renderItemKeyGlobalFlags; | ||
| 1082 | for (auto item : _modelMeshRenderItemIDs) { | ||
| 1083 | transaction.updateItem<ModelMeshPartPayload>(item, [mirrorMode, renderItemsKey](ModelMeshPartPayload& data) { | ||
| 1084 | data.setMirrorMode(mirrorMode); | ||
| 1085 | data.updateKey(renderItemsKey); | ||
| 1086 | }); | ||
| 1087 | } | ||
| 1088 | scene->enqueueTransaction(transaction); | ||
| 1089 | } | ||
| 1090 | } | ||
| 1091 | |||
| 1092 | void Model::setPortalExitID(const QUuid& portalExitID, const render::ScenePointer& scene) { | ||
| 1093 | if (_portalExitID != portalExitID) { | ||
| 1094 | _portalExitID = portalExitID; | ||
| 1095 | if (!scene) { | ||
| 1096 | _needsFixupInScene = true; | ||
| 1097 | return; | ||
| 1098 | } | ||
| 1099 | |||
| 1100 | render::Transaction transaction; | ||
| 1101 | auto renderItemsKey = _renderItemKeyGlobalFlags; | ||
| 1102 | for (auto item : _modelMeshRenderItemIDs) { | ||
| 1103 | transaction.updateItem<ModelMeshPartPayload>(item, [portalExitID, renderItemsKey](ModelMeshPartPayload& data) { | ||
| 1104 | data.setPortalExitID(portalExitID); | ||
| 1105 | data.updateKey(renderItemsKey); | ||
| 1106 | }); | ||
| 1107 | } | ||
| 1108 | scene->enqueueTransaction(transaction); | ||
| 1109 | } | ||
| 1110 | } | ||
| 1111 | |||
| 1068 | const render::ItemKey Model::getRenderItemKeyGlobalFlags() const { | 1112 | const render::ItemKey Model::getRenderItemKeyGlobalFlags() const { |
| 1069 | return _renderItemKeyGlobalFlags; | 1113 | return _renderItemKeyGlobalFlags; |
| 1070 | } | 1114 | } |