30 Q_PROPERTY(QQmlListProperty<QQuick3DNode> joints READ joints)
31 Q_PROPERTY(QList<QMatrix4x4> inverseBindPoses READ inverseBindPoses WRITE setInverseBindPoses NOTIFY inverseBindPosesChanged)
33 QML_NAMED_ELEMENT(Skin)
36 explicit QQuick3DSkin(QQuick3DObject *parent =
nullptr);
37 ~QQuick3DSkin() override;
39 QQmlListProperty<QQuick3DNode> joints();
40 QList<QMatrix4x4> inverseBindPoses()
const;
43 void setInverseBindPoses(
const QList<QMatrix4x4> &poses);
46 void inverseBindPosesChanged();
49 static void qmlAppendJoint(QQmlListProperty<QQuick3DNode> *list, QQuick3DNode *joint);
50 static QQuick3DNode *qmlJointAt(QQmlListProperty<QQuick3DNode> *list, qsizetype index);
51 static qsizetype qmlJointsCount(QQmlListProperty<QQuick3DNode> *list);
52 static void qmlClearJoints(QQmlListProperty<QQuick3DNode> *list);
54 QSSGRenderGraphObject *updateSpatialNode(QSSGRenderGraphObject *node) override;
56 QVector<QQuick3DNode *> m_joints;
57 QByteArray m_boneData;
58 QList<QMatrix4x4> m_inverseBindPoses;
59 using JointConnections = std::pair<QMetaObject::Connection, QMetaObject::Connection>;
60 QHash<QObject *, JointConnections> m_jointsConnections;
61 QSet<QQuick3DNode *> m_dirtyJoints;
62 QSet<QQuick3DNode *> m_removedJoints;
63 int m_updatedByNewInverseBindPoses = 0;