| #include "rive/shapes/vertex.hpp" | |
| using namespace rive; | |
| Vec2D Vertex::renderTranslation() | |
| { | |
| if (hasWeight()) | |
| { | |
| return m_Weight->translation(); | |
| } | |
| return Vec2D(x(), y()); | |
| } | |
| void Vertex::xChanged() { markGeometryDirty(); } | |
| void Vertex::yChanged() { markGeometryDirty(); } | |
| void Vertex::deform(const Mat2D& worldTransform, const float* boneTransforms) | |
| { | |
| #ifdef WITH_RIVE_EDITOR | |
| // Editor files can carry skin-bound PointsPaths whose vertices | |
| // don't all have Weight children — typically a vertex authored / | |
| // hydrated AFTER the skin was bound, or a Weight Core that | |
| // failed to land in the same coop batch as its owning vertex. | |
| // `Skin::deform` calls into us unconditionally for every vertex | |
| // in the path, so skip when the weight is missing — the vertex | |
| // stays at its bind-space position (visually wrong but no | |
| // crash). Runtime importer rejects such files so the runtime | |
| // build never sees this case. | |
| if (m_Weight == nullptr) | |
| return; | |
| #endif | |
| m_Weight->translation() = Weight::deform(Vec2D(x(), y()), | |
| m_Weight->indices(), | |
| m_Weight->values(), | |
| worldTransform, | |
| boneTransforms); | |
| } |