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
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
1072void 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
1092void 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
1068const render::ItemKey Model::getRenderItemKeyGlobalFlags() const {1112const render::ItemKey Model::getRenderItemKeyGlobalFlags() const {
1069 return _renderItemKeyGlobalFlags;1113 return _renderItemKeyGlobalFlags;
1070}1114}