History

Revert "Revert "Mirrors + Portals""

Dale Glass committed 2 years ago

Commit e7591d61 parent b33d35c81 files · +1047 −263Browse files

Showing the changes to libraries/render-utils/src/Model.cpp (1 of 81 files). Show all

Unified · Split

libraries/render-utils/src/Model.cpp+45−1
@@ -232,6 +232,8 @@ void Model::updateRenderItems() { · 231 unmodified lines
232232 auto renderWithZones = self->getRenderWithZones();
233233 auto renderItemKeyGlobalFlags = self->getRenderItemKeyGlobalFlags();
234234 bool cauterized = self->isCauterized();
235+ auto mirrorMode = self->getMirrorMode();
236+ const QUuid& portalExitID = self->getPortalExitID();
235237
236238 render::Transaction transaction;
237239 for (int i = 0; i < (int) self->_modelMeshRenderItemIDs.size(); i++) {
@@ -246,7 +248,7 @@ void Model::updateRenderItems() { · 8 unmodified lines
246248
247249 transaction.updateItem<ModelMeshPartPayload>(itemID, [modelTransform, meshState, useDualQuaternionSkinning,
248250 invalidatePayloadShapeKey, primitiveMode, billboardMode, renderItemKeyGlobalFlags,
249− cauterized, renderWithZones](ModelMeshPartPayload& data) {
251+ cauterized, renderWithZones, mirrorMode, portalExitID](ModelMeshPartPayload& data) {
250252 if (useDualQuaternionSkinning) {
251253 data.updateClusterBuffer(meshState.clusterDualQuaternions);
252254 data.computeAdjustedLocalBound(meshState.clusterDualQuaternions);
@@ -260,6 +262,8 @@ void Model::updateRenderItems() { · 7 unmodified lines
260262 data.setCauterized(cauterized);
261263 data.setRenderWithZones(renderWithZones);
262264 data.setBillboardMode(billboardMode);
265+ data.setMirrorMode(mirrorMode);
266+ data.setPortalExitID(portalExitID);
263267 data.updateKey(renderItemKeyGlobalFlags);
264268 data.setShapeKey(invalidatePayloadShapeKey, primitiveMode, useDualQuaternionSkinning);
265269 });
@@ -1065,6 +1069,46 @@ void Model::setRenderWithZones(const QVector<QUuid>& renderWithZones, const rend · 799 unmodified lines
10651069 }
10661070 }
10671071
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+
10681112 const render::ItemKey Model::getRenderItemKeyGlobalFlags() const {
10691113 return _renderItemKeyGlobalFlags;
10701114 }