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