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 | 232 | auto renderWithZones = self->getRenderWithZones(); |
| 233 | 233 | auto renderItemKeyGlobalFlags = self->getRenderItemKeyGlobalFlags(); |
| 234 | 234 | bool cauterized = self->isCauterized(); |
| 235 | + auto mirrorMode = self->getMirrorMode(); | |
| 236 | + const QUuid& portalExitID = self->getPortalExitID(); | |
| 235 | 237 | |
| 236 | 238 | render::Transaction transaction; |
| 237 | 239 | for (int i = 0; i < (int) self->_modelMeshRenderItemIDs.size(); i++) { |
| @@ -246,7 +248,7 @@ void Model::updateRenderItems() { · 8 unmodified lines | ||
| 246 | 248 | |
| 247 | 249 | transaction.updateItem<ModelMeshPartPayload>(itemID, [modelTransform, meshState, useDualQuaternionSkinning, |
| 248 | 250 | invalidatePayloadShapeKey, primitiveMode, billboardMode, renderItemKeyGlobalFlags, |
| 249 | − cauterized, renderWithZones](ModelMeshPartPayload& data) { | |
| 251 | + cauterized, renderWithZones, mirrorMode, portalExitID](ModelMeshPartPayload& data) { | |
| 250 | 252 | if (useDualQuaternionSkinning) { |
| 251 | 253 | data.updateClusterBuffer(meshState.clusterDualQuaternions); |
| 252 | 254 | data.computeAdjustedLocalBound(meshState.clusterDualQuaternions); |
| @@ -260,6 +262,8 @@ void Model::updateRenderItems() { · 7 unmodified lines | ||
| 260 | 262 | data.setCauterized(cauterized); |
| 261 | 263 | data.setRenderWithZones(renderWithZones); |
| 262 | 264 | data.setBillboardMode(billboardMode); |
| 265 | + data.setMirrorMode(mirrorMode); | |
| 266 | + data.setPortalExitID(portalExitID); | |
| 263 | 267 | data.updateKey(renderItemKeyGlobalFlags); |
| 264 | 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 | 1112 | const render::ItemKey Model::getRenderItemKeyGlobalFlags() const { |
| 1069 | 1113 | return _renderItemKeyGlobalFlags; |
| 1070 | 1114 | } |