History

Re-implemented shadow controls.

NissimHadar committed 8 years ago

Commit 0f2cf8e1 parent d888e7f30 files · +269 −95Browse files

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

Unified · Split

libraries/render-utils/src/Model.cpp+44−19
@@ -104,6 +104,7 @@ Model::Model(QObject* parent, SpatiallyNestable* spatiallyNestableOverride) : · 103 unmodified lines
104104 _snappedToRegistrationPoint(false),
105105 _url(HTTP_INVALID_COM),
106106 _isVisible(true),
107+ _canCastShadow(false),
107108 _blendNumber(0),
108109 _appliedBlendNumber(0),
109110 _isWireframe(false)
@@ -270,6 +271,7 @@ void Model::updateRenderItems() { · 160 unmodified lines
270271
271272 bool isWireframe = self->isWireframe();
272273 bool isVisible = self->isVisible();
274+ bool canCastShadow = self->canCastShadow();
273275 uint8_t viewTagBits = self->getViewTagBits();
274276 bool isLayeredInFront = self->isLayeredInFront();
275277 bool isLayeredInHUD = self->isLayeredInHUD();
@@ -288,7 +290,7 @@ void Model::updateRenderItems() { · 12 unmodified lines
288290
289291 transaction.updateItem<ModelMeshPartPayload>(itemID, [modelTransform, meshState, useDualQuaternionSkinning,
290292 invalidatePayloadShapeKey, isWireframe, isVisible,
291− viewTagBits, isLayeredInFront,
293+ canCastShadow, viewTagBits, isLayeredInFront,
292294 isLayeredInHUD, isGroupCulled](ModelMeshPartPayload& data) {
293295 if (useDualQuaternionSkinning) {
294296 data.updateClusterBuffer(meshState.clusterDualQuaternions);
@@ -313,7 +315,7 @@ void Model::updateRenderItems() { · 18 unmodified lines
313315 }
314316 data.updateTransformForSkinnedMesh(renderTransform, modelTransform);
315317
316− data.updateKey(isVisible, isLayeredInFront || isLayeredInHUD, viewTagBits, isGroupCulled);
318+ data.updateKey(isVisible, isLayeredInFront || isLayeredInHUD, canCastShadow, viewTagBits, isGroupCulled);
317319 data.setLayer(isLayeredInFront, isLayeredInHUD);
318320 data.setShapeKey(invalidatePayloadShapeKey, isWireframe, useDualQuaternionSkinning);
319321 });
@@ -773,46 +775,66 @@ void Model::setVisibleInScene(bool isVisible, const render::ScenePointer& scene, · 453 unmodified lines
773775
774776 bool isLayeredInFront = _isLayeredInFront;
775777 bool isLayeredInHUD = _isLayeredInHUD;
776−
778+ bool canCastShadow = _canCastShadow;
777779 render::Transaction transaction;
778780 foreach (auto item, _modelMeshRenderItemsMap.keys()) {
779− transaction.updateItem<ModelMeshPartPayload>(item, [isVisible, viewTagBits, isLayeredInFront,
781+ transaction.updateItem<ModelMeshPartPayload>(item, [isVisible, viewTagBits, isLayeredInFront, canCastShadow,
780782 isLayeredInHUD, isGroupCulled](ModelMeshPartPayload& data) {
781− data.updateKey(isVisible, isLayeredInFront || isLayeredInHUD, viewTagBits, isGroupCulled);
783+ data.updateKey(isVisible, isLayeredInFront || isLayeredInHUD, canCastShadow, viewTagBits, isGroupCulled);
782784 });
783785 }
784786 foreach(auto item, _collisionRenderItemsMap.keys()) {
785− transaction.updateItem<ModelMeshPartPayload>(item, [isVisible, viewTagBits, isLayeredInFront,
787+ transaction.updateItem<ModelMeshPartPayload>(item, [isVisible, viewTagBits, isLayeredInFront, canCastShadow,
786788 isLayeredInHUD, isGroupCulled](ModelMeshPartPayload& data) {
787− data.updateKey(isVisible, isLayeredInFront || isLayeredInHUD, viewTagBits, isGroupCulled);
789+ data.updateKey(isVisible, isLayeredInFront || isLayeredInHUD, canCastShadow, viewTagBits, isGroupCulled);
788790 });
789791 }
790792 scene->enqueueTransaction(transaction);
791793 }
792794 }
793795
796+void Model::setCanCastShadow(bool canCastShadow, const render::ScenePointer& scene, uint8_t viewTagBits, bool isGroupCulled) {
797+ if (_canCastShadow != canCastShadow) {
798+ _canCastShadow = canCastShadow;
799+
800+ bool isVisible = _isVisible;
801+ bool isLayeredInFront = _isLayeredInFront;
802+ bool isLayeredInHUD = _isLayeredInHUD;
803+
804+ render::Transaction transaction;
805+ foreach (auto item, _modelMeshRenderItemsMap.keys()) {
806+ transaction.updateItem<ModelMeshPartPayload>(item,
807+ [isVisible, viewTagBits, canCastShadow, isLayeredInFront, isLayeredInHUD, isGroupCulled](ModelMeshPartPayload& data) {
808+ data.updateKey(isVisible, viewTagBits, canCastShadow, isLayeredInFront || isLayeredInHUD, isGroupCulled);
809+ });
810+ }
811+
812+ scene->enqueueTransaction(transaction);
813+ }
814+}
794815
795816 void Model::setLayeredInFront(bool isLayeredInFront, const render::ScenePointer& scene) {
796817 if (_isLayeredInFront != isLayeredInFront) {
797818 _isLayeredInFront = isLayeredInFront;
798819
799820 bool isVisible = _isVisible;
821+ bool canCastShadow = _canCastShadow;
800822 uint8_t viewTagBits = _viewTagBits;
801823 bool isLayeredInHUD = _isLayeredInHUD;
802824 bool isGroupCulled = _isGroupCulled;
803825
804826 render::Transaction transaction;
805827 foreach(auto item, _modelMeshRenderItemsMap.keys()) {
806− transaction.updateItem<ModelMeshPartPayload>(item, [isVisible, viewTagBits, isLayeredInFront,
828+ transaction.updateItem<ModelMeshPartPayload>(item, [isVisible, viewTagBits, isLayeredInFront, canCastShadow,
807829 isLayeredInHUD, isGroupCulled](ModelMeshPartPayload& data) {
808− data.updateKey(isVisible, isLayeredInFront || isLayeredInHUD, viewTagBits, isGroupCulled);
830+ data.updateKey(isVisible, isLayeredInFront || isLayeredInHUD, canCastShadow, viewTagBits, isGroupCulled);
809831 data.setLayer(isLayeredInFront, isLayeredInHUD);
810832 });
811833 }
812834 foreach(auto item, _collisionRenderItemsMap.keys()) {
813− transaction.updateItem<ModelMeshPartPayload>(item, [isVisible, viewTagBits, isLayeredInFront,
835+ transaction.updateItem<ModelMeshPartPayload>(item, [isVisible, viewTagBits, isLayeredInFront, canCastShadow,
814836 isLayeredInHUD, isGroupCulled](ModelMeshPartPayload& data) {
815− data.updateKey(isVisible, isLayeredInFront || isLayeredInHUD, viewTagBits, isGroupCulled);
837+ data.updateKey(isVisible, isLayeredInFront || isLayeredInHUD, canCastShadow, viewTagBits, isGroupCulled);
816838 data.setLayer(isLayeredInFront, isLayeredInHUD);
817839 });
818840 }
@@ -825,22 +847,23 @@ void Model::setLayeredInHUD(bool isLayeredInHUD, const render::ScenePointer& sce · 6 unmodified lines
825847 _isLayeredInHUD = isLayeredInHUD;
826848
827849 bool isVisible = _isVisible;
850+ bool canCastShadow = _canCastShadow;
828851 uint8_t viewTagBits = _viewTagBits;
829852 bool isLayeredInFront = _isLayeredInFront;
830853 bool isGroupCulled = _isGroupCulled;
831854
832855 render::Transaction transaction;
833856 foreach(auto item, _modelMeshRenderItemsMap.keys()) {
834− transaction.updateItem<ModelMeshPartPayload>(item, [isVisible, viewTagBits, isLayeredInFront,
857+ transaction.updateItem<ModelMeshPartPayload>(item, [isVisible, viewTagBits, isLayeredInFront, canCastShadow,
835858 isLayeredInHUD, isGroupCulled](ModelMeshPartPayload& data) {
836− data.updateKey(isVisible, isLayeredInFront || isLayeredInHUD, viewTagBits, isGroupCulled);
859+ data.updateKey(isVisible, isLayeredInFront || isLayeredInHUD, canCastShadow, viewTagBits, isGroupCulled);
837860 data.setLayer(isLayeredInFront, isLayeredInHUD);
838861 });
839862 }
840863 foreach(auto item, _collisionRenderItemsMap.keys()) {
841− transaction.updateItem<ModelMeshPartPayload>(item, [isVisible, viewTagBits, isLayeredInFront,
864+ transaction.updateItem<ModelMeshPartPayload>(item, [isVisible, viewTagBits, isLayeredInFront, canCastShadow,
842865 isLayeredInHUD, isGroupCulled](ModelMeshPartPayload& data) {
843− data.updateKey(isVisible, isLayeredInFront || isLayeredInHUD, viewTagBits, isGroupCulled);
866+ data.updateKey(isVisible, isLayeredInFront || isLayeredInHUD, canCastShadow, viewTagBits, isGroupCulled);
844867 data.setLayer(isLayeredInFront, isLayeredInHUD);
845868 });
846869 }
@@ -1650,15 +1673,16 @@ void Model::addMaterial(graphics::MaterialLayer material, const std::string& par · 803 unmodified lines
16501673 uint8_t viewTagBits = getViewTagBits();
16511674 bool layeredInFront = isLayeredInFront();
16521675 bool layeredInHUD = isLayeredInHUD();
1676+ bool canCastShadow = _canCastShadow;
16531677 bool wireframe = isWireframe();
16541678 auto meshIndex = _modelMeshRenderItemShapes[shapeID].meshIndex;
16551679 bool invalidatePayloadShapeKey = shouldInvalidatePayloadShapeKey(meshIndex);
16561680 bool useDualQuaternionSkinning = _useDualQuaternionSkinning;
1657− transaction.updateItem<ModelMeshPartPayload>(itemID, [material, visible, layeredInFront, layeredInHUD, viewTagBits,
1681+ transaction.updateItem<ModelMeshPartPayload>(itemID, [material, visible, layeredInFront, layeredInHUD, viewTagBits, canCastShadow,
16581682 invalidatePayloadShapeKey, wireframe, useDualQuaternionSkinning](ModelMeshPartPayload& data) {
16591683 data.addMaterial(material);
16601684 // if the material changed, we might need to update our item key or shape key
1661− data.updateKey(visible, layeredInFront || layeredInHUD, viewTagBits);
1685+ data.updateKey(visible, layeredInFront || layeredInHUD, canCastShadow, viewTagBits);
16621686 data.setShapeKey(invalidatePayloadShapeKey, wireframe, useDualQuaternionSkinning);
16631687 });
16641688 }
@@ -1676,15 +1700,16 @@ void Model::removeMaterial(graphics::MaterialPointer material, const std::string · 11 unmodified lines
16761700 uint8_t viewTagBits = getViewTagBits();
16771701 bool layeredInFront = isLayeredInFront();
16781702 bool layeredInHUD = isLayeredInHUD();
1703+ bool canCastShadow = _canCastShadow;
16791704 bool wireframe = isWireframe();
16801705 auto meshIndex = _modelMeshRenderItemShapes[shapeID].meshIndex;
16811706 bool invalidatePayloadShapeKey = shouldInvalidatePayloadShapeKey(meshIndex);
16821707 bool useDualQuaternionSkinning = _useDualQuaternionSkinning;
1683− transaction.updateItem<ModelMeshPartPayload>(itemID, [material, visible, layeredInFront, layeredInHUD, viewTagBits,
1708+ transaction.updateItem<ModelMeshPartPayload>(itemID, [material, visible, layeredInFront, layeredInHUD, viewTagBits, canCastShadow,
16841709 invalidatePayloadShapeKey, wireframe, useDualQuaternionSkinning](ModelMeshPartPayload& data) {
16851710 data.removeMaterial(material);
16861711 // if the material changed, we might need to update our item key or shape key
1687− data.updateKey(visible, layeredInFront || layeredInHUD, viewTagBits);
1712+ data.updateKey(visible, layeredInFront || layeredInHUD, canCastShadow, viewTagBits);
16881713 data.setShapeKey(invalidatePayloadShapeKey, wireframe, useDualQuaternionSkinning);
16891714 });
16901715 }