Refactor Weight::deform
diff --git a/include/rive/bones/weight.hpp b/include/rive/bones/weight.hpp
index 7145d59..2d3ba14 100644
--- a/include/rive/bones/weight.hpp
+++ b/include/rive/bones/weight.hpp
@@ -14,10 +14,8 @@
StatusCode onAddedDirty(CoreContext* context) override;
- static Vec2D deform(Vec2D inPoint,
- unsigned int indices,
+ static Mat2D deform(unsigned int indices,
unsigned int weights,
- const Mat2D& world,
const float* boneTransforms);
};
} // namespace rive
diff --git a/src/bones/weight.cpp b/src/bones/weight.cpp
index 9f00714..c454e57 100644
--- a/src/bones/weight.cpp
+++ b/src/bones/weight.cpp
@@ -22,11 +22,9 @@
return (data >> (index * 8)) & 0xFF;
}
-Vec2D Weight::deform(Vec2D inPoint,
- unsigned int indices,
- unsigned int weights,
- const Mat2D& world,
- const float* boneTransforms) {
+Mat2D Weight::deform(unsigned int indices,
+ unsigned int weights,
+ const float* boneTransforms) {
float xx = 0, xy = 0, yx = 0, yy = 0, tx = 0, ty = 0;
for (int i = 0; i < 4; i++) {
int weight = encodedWeightValue(i, weights);
@@ -44,6 +42,5 @@
tx += boneTransforms[startBoneTransformIndex++] * normalizedWeight;
ty += boneTransforms[startBoneTransformIndex++] * normalizedWeight;
}
-
- return Mat2D(xx, xy, yx, yy, tx, ty) * (world * inPoint);
+ return Mat2D(xx, xy, yx, yy, tx, ty);
}
diff --git a/src/shapes/cubic_vertex.cpp b/src/shapes/cubic_vertex.cpp
index 5964ede..c817e2e 100644
--- a/src/shapes/cubic_vertex.cpp
+++ b/src/shapes/cubic_vertex.cpp
@@ -57,16 +57,10 @@
Super::deform(worldTransform, boneTransforms);
auto cubicWeight = weight<CubicWeight>();
+ auto matrix = Weight::deform(cubicWeight->inIndices(),
+ cubicWeight->inValues(),
+ boneTransforms) * worldTransform;;
- cubicWeight->inTranslation() = Weight::deform(inPoint(),
- cubicWeight->inIndices(),
- cubicWeight->inValues(),
- worldTransform,
- boneTransforms);
-
- cubicWeight->outTranslation() = Weight::deform(outPoint(),
- cubicWeight->outIndices(),
- cubicWeight->outValues(),
- worldTransform,
- boneTransforms);
+ cubicWeight->inTranslation() = matrix * inPoint();
+ cubicWeight->outTranslation() = matrix * outPoint();
}
diff --git a/src/shapes/vertex.cpp b/src/shapes/vertex.cpp
index a7c6890..78233c6 100644
--- a/src/shapes/vertex.cpp
+++ b/src/shapes/vertex.cpp
@@ -13,9 +13,7 @@
void Vertex::yChanged() { markGeometryDirty(); }
void Vertex::deform(const Mat2D& worldTransform, const float* boneTransforms) {
- m_Weight->translation() = Weight::deform(Vec2D(x(), y()),
- m_Weight->indices(),
+ m_Weight->translation() = Weight::deform(m_Weight->indices(),
m_Weight->values(),
- worldTransform,
- boneTransforms);
+ boneTransforms) * (worldTransform * Vec2D(x(), y()));
}
\ No newline at end of file