Utility/Node: Massively improve skeletal animations performance by allowing to invalidate the whole skeleton only once

Thanks to @SirMishaa for pointing that out
This commit is contained in:
SirLynix
2023-03-17 19:22:09 +01:00
parent 3c2172103a
commit 8b734caeac
9 changed files with 783 additions and 695 deletions

View File

@@ -19,8 +19,9 @@ namespace Nz
class NAZARA_UTILITY_API Joint : public Node
{
public:
Joint(Skeleton* skeleton);
Joint(const Joint& joint);
inline Joint(Skeleton* skeleton);
inline Joint(const Joint& joint);
inline Joint(Joint&&) noexcept;
~Joint() = default;
void EnsureSkinningMatrixUpdate() const;
@@ -34,8 +35,11 @@ namespace Nz
void SetInverseBindMatrix(const Matrix4f& matrix);
void SetName(std::string name);
inline Joint& operator=(const Joint& joint);
inline Joint& operator=(Joint&& joint) noexcept;
private:
void InvalidateNode() override;
void InvalidateNode(Invalidation invalidation) override;
void UpdateSkinningMatrix() const;
Matrix4f m_inverseBindMatrix;
@@ -46,4 +50,6 @@ namespace Nz
};
}
#include <Nazara/Utility/Joint.inl>
#endif // NAZARA_UTILITY_JOINT_HPP