Showing the changes to libraries/render-utils/src/Model.cpp (1 of 2 files). Show all
Unified · Split
| @@ -798,7 +798,7 @@ namespace render { · 797 unmodified lines | |||
| 798 | return payload->model->renderPart(args, payload->meshIndex, payload->partIndex, payload->transparent); | 798 | return payload->model->renderPart(args, payload->meshIndex, payload->partIndex, payload->transparent); |
| 799 | } | 799 | } |
| 800 | } | 800 | } |
| 801 | 801 | ||
| 802 | /* template <> const model::MaterialKey& shapeGetMaterialKey(const MeshPartPayload::Pointer& payload) { | 802 | /* template <> const model::MaterialKey& shapeGetMaterialKey(const MeshPartPayload::Pointer& payload) { |
| 803 | return payload->model->getPartMaterial(payload->meshIndex, payload->partIndex); | 803 | return payload->model->getPartMaterial(payload->meshIndex, payload->partIndex); |
| 804 | }*/ | 804 | }*/ |
| @@ -829,6 +829,9 @@ bool Model::addToScene(std::shared_ptr<render::Scene> scene, render::PendingChan · 24 unmodified lines | |||
| 829 | auto renderData = MeshPartPayload::Pointer(renderItem); | 829 | auto renderData = MeshPartPayload::Pointer(renderItem); |
| 830 | auto renderPayload = std::make_shared<MeshPartPayload::Payload>(renderData); | 830 | auto renderPayload = std::make_shared<MeshPartPayload::Payload>(renderData); |
| 831 | pendingChanges.resetItem(item, renderPayload); | 831 | pendingChanges.resetItem(item, renderPayload); |
| 832 | pendingChanges.updateItem<MeshPartPayload>(item, [&](MeshPartPayload& data) { | ||
| 833 | data.model->_needsUpdateClusterMatrices = true; | ||
| 834 | }); | ||
| 832 | _renderItems.insert(item, renderPayload); | 835 | _renderItems.insert(item, renderPayload); |
| 833 | somethingAdded = true; | 836 | somethingAdded = true; |
| 834 | } | 837 | } |
| @@ -838,6 +841,9 @@ bool Model::addToScene(std::shared_ptr<render::Scene> scene, render::PendingChan · 3 unmodified lines | |||
| 838 | auto renderData = MeshPartPayload::Pointer(renderItem); | 841 | auto renderData = MeshPartPayload::Pointer(renderItem); |
| 839 | auto renderPayload = std::make_shared<MeshPartPayload::Payload>(renderData); | 842 | auto renderPayload = std::make_shared<MeshPartPayload::Payload>(renderData); |
| 840 | pendingChanges.resetItem(item, renderPayload); | 843 | pendingChanges.resetItem(item, renderPayload); |
| 844 | pendingChanges.updateItem<MeshPartPayload>(item, [&](MeshPartPayload& data) { | ||
| 845 | data.model->_needsUpdateClusterMatrices = true; | ||
| 846 | }); | ||
| 841 | _renderItems.insert(item, renderPayload); | 847 | _renderItems.insert(item, renderPayload); |
| 842 | somethingAdded = true; | 848 | somethingAdded = true; |
| 843 | } | 849 | } |
| @@ -860,6 +866,9 @@ bool Model::addToScene(std::shared_ptr<render::Scene> scene, render::PendingChan · 16 unmodified lines | |||
| 860 | auto renderPayload = std::make_shared<MeshPartPayload::Payload>(renderData); | 866 | auto renderPayload = std::make_shared<MeshPartPayload::Payload>(renderData); |
| 861 | renderPayload->addStatusGetters(statusGetters); | 867 | renderPayload->addStatusGetters(statusGetters); |
| 862 | pendingChanges.resetItem(item, renderPayload); | 868 | pendingChanges.resetItem(item, renderPayload); |
| 869 | pendingChanges.updateItem<MeshPartPayload>(item, [&](MeshPartPayload& data) { | ||
| 870 | data.model->_needsUpdateClusterMatrices = true; | ||
| 871 | }); | ||
| 863 | _renderItems.insert(item, renderPayload); | 872 | _renderItems.insert(item, renderPayload); |
| 864 | somethingAdded = true; | 873 | somethingAdded = true; |
| 865 | } | 874 | } |
| @@ -870,6 +879,9 @@ bool Model::addToScene(std::shared_ptr<render::Scene> scene, render::PendingChan · 4 unmodified lines | |||
| 870 | auto renderPayload = std::make_shared<MeshPartPayload::Payload>(renderData); | 879 | auto renderPayload = std::make_shared<MeshPartPayload::Payload>(renderData); |
| 871 | renderPayload->addStatusGetters(statusGetters); | 880 | renderPayload->addStatusGetters(statusGetters); |
| 872 | pendingChanges.resetItem(item, renderPayload); | 881 | pendingChanges.resetItem(item, renderPayload); |
| 882 | pendingChanges.updateItem<MeshPartPayload>(item, [&](MeshPartPayload& data) { | ||
| 883 | data.model->_needsUpdateClusterMatrices = true; | ||
| 884 | }); | ||
| 873 | _renderItems.insert(item, renderPayload); | 885 | _renderItems.insert(item, renderPayload); |
| 874 | somethingAdded = true; | 886 | somethingAdded = true; |
| 875 | } | 887 | } |
| @@ -1293,11 +1305,15 @@ void Model::simulateInternal(float deltaTime) { · 417 unmodified lines | |||
| 1293 | updateRig(deltaTime, parentTransform); | 1305 | updateRig(deltaTime, parentTransform); |
| 1294 | } | 1306 | } |
| 1295 | void Model::updateClusterMatrices() { | 1307 | void Model::updateClusterMatrices() { |
| 1308 | if (!_needsUpdateClusterMatrices) { | ||
| 1309 | return; | ||
| 1310 | } | ||
| 1311 | _needsUpdateClusterMatrices = false; | ||
| 1296 | const FBXGeometry& geometry = _geometry->getFBXGeometry(); | 1312 | const FBXGeometry& geometry = _geometry->getFBXGeometry(); |
| 1297 | glm::mat4 zeroScale(glm::vec4(0.0f, 0.0f, 0.0f, 0.0f), | 1313 | glm::mat4 zeroScale(glm::vec4(0.0f, 0.0f, 0.0f, 0.0f), |
| 1298 | glm::vec4(0.0f, 0.0f, 0.0f, 0.0f), | 1314 | glm::vec4(0.0f, 0.0f, 0.0f, 0.0f), |
| 1299 | glm::vec4(0.0f, 0.0f, 0.0f, 0.0f), | 1315 | glm::vec4(0.0f, 0.0f, 0.0f, 0.0f), |
| 1300 | glm::vec4(0.0f, 0.0f, 0.0f, 1.0f)); | 1316 | glm::vec4(0.0f, 0.0f, 0.0f, 1.0f)); |
| 1301 | auto cauterizeMatrix = _rig->getJointTransform(geometry.neckJointIndex) * zeroScale; | 1317 | auto cauterizeMatrix = _rig->getJointTransform(geometry.neckJointIndex) * zeroScale; |
| 1302 | 1318 | ||
| 1303 | glm::mat4 modelToWorld = glm::mat4_cast(_rotation); | 1319 | glm::mat4 modelToWorld = glm::mat4_cast(_rotation); |
| @@ -1803,13 +1819,15 @@ bool Model::initWhenReady(render::ScenePointer scene) { · 499 unmodified lines | |||
| 1803 | segregateMeshGroups(); | 1819 | segregateMeshGroups(); |
| 1804 | 1820 | ||
| 1805 | render::PendingChanges pendingChanges; | 1821 | render::PendingChanges pendingChanges; |
| 1806 | |||
| 1807 | foreach (auto renderItem, _transparentRenderItems) { | 1822 | foreach (auto renderItem, _transparentRenderItems) { |
| 1808 | auto item = scene->allocateID(); | 1823 | auto item = scene->allocateID(); |
| 1809 | auto renderData = MeshPartPayload::Pointer(renderItem); | 1824 | auto renderData = MeshPartPayload::Pointer(renderItem); |
| 1810 | auto renderPayload = std::make_shared<MeshPartPayload::Payload>(renderData); | 1825 | auto renderPayload = std::make_shared<MeshPartPayload::Payload>(renderData); |
| 1811 | _renderItems.insert(item, renderPayload); | 1826 | _renderItems.insert(item, renderPayload); |
| 1812 | pendingChanges.resetItem(item, renderPayload); | 1827 | pendingChanges.resetItem(item, renderPayload); |
| 1828 | pendingChanges.updateItem<MeshPartPayload>(item, [&](MeshPartPayload& data) { | ||
| 1829 | data.model->_needsUpdateClusterMatrices = true; | ||
| 1830 | }); | ||
| 1813 | } | 1831 | } |
| 1814 | 1832 | ||
| 1815 | foreach (auto renderItem, _opaqueRenderItems) { | 1833 | foreach (auto renderItem, _opaqueRenderItems) { |
| @@ -1818,6 +1836,9 @@ bool Model::initWhenReady(render::ScenePointer scene) { · 2 unmodified lines | |||
| 1818 | auto renderPayload = std::make_shared<MeshPartPayload::Payload>(renderData); | 1836 | auto renderPayload = std::make_shared<MeshPartPayload::Payload>(renderData); |
| 1819 | _renderItems.insert(item, renderPayload); | 1837 | _renderItems.insert(item, renderPayload); |
| 1820 | pendingChanges.resetItem(item, renderPayload); | 1838 | pendingChanges.resetItem(item, renderPayload); |
| 1839 | pendingChanges.updateItem<MeshPartPayload>(item, [&](MeshPartPayload& data) { | ||
| 1840 | data.model->_needsUpdateClusterMatrices = true; | ||
| 1841 | }); | ||
| 1821 | } | 1842 | } |
| 1822 | scene->enqueuePendingChanges(pendingChanges); | 1843 | scene->enqueuePendingChanges(pendingChanges); |
| 1823 | 1844 | ||