28 Q_PROPERTY(QQmlListProperty<QQuick3DNode> joints READ joints)
29 Q_PROPERTY(QList<QMatrix4x4> inverseBindPoses READ inverseBindPoses WRITE setInverseBindPoses NOTIFY inverseBindPosesChanged)
31 QML_NAMED_ELEMENT(Skin)
34 explicit QQuick3DSkin(QQuick3DObject *parent =
nullptr);
35 ~QQuick3DSkin() override;
37 QQmlListProperty<QQuick3DNode> joints();
38 QList<QMatrix4x4> inverseBindPoses()
const;
41 void setInverseBindPoses(
const QList<QMatrix4x4> &poses);
44 void inverseBindPosesChanged();
47 static void qmlAppendJoint(QQmlListProperty<QQuick3DNode> *list, QQuick3DNode *joint);
48 static QQuick3DNode *qmlJointAt(QQmlListProperty<QQuick3DNode> *list, qsizetype index);
49 static qsizetype qmlJointsCount(QQmlListProperty<QQuick3DNode> *list);
50 static void qmlClearJoints(QQmlListProperty<QQuick3DNode> *list);
52 QSSGRenderGraphObject *updateSpatialNode(QSSGRenderGraphObject *node) override;
54 QVector<QQuick3DNode *> m_joints;
55 QByteArray m_boneData;
56 QList<QMatrix4x4> m_inverseBindPoses;
57 using JointConnections = std::pair<QMetaObject::Connection, QMetaObject::Connection>;
58 QHash<QObject *, JointConnections> m_jointsConnections;
59 QSet<QQuick3DNode *> m_dirtyJoints;
60 QSet<QQuick3DNode *> m_removedJoints;
61 int m_updatedByNewInverseBindPoses = 0;