// Copyright (C) 2023 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only // // W A R N I N G // ------------- // // This file is not part of the Qt API. It exists purely as an // implementation detail. This header file may change from version to // version without notice, or even be removed. // // We mean it. // #ifndef PROCEDURALMESH_H #define PROCEDURALMESH_H #include #include #include #include #include QT_BEGIN_NAMESPACE class Q_QUICK3DHELPERS_EXPORT ProceduralMeshSubset : public QObject { Q_OBJECT Q_PROPERTY(unsigned int offset READ offset WRITE setOffset NOTIFY offsetChanged FINAL) Q_PROPERTY(unsigned int count READ count WRITE setCount NOTIFY countChanged FINAL) Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged FINAL) QML_NAMED_ELEMENT(ProceduralMeshSubset) QML_ADDED_IN_VERSION(6, 6) public: int offset() const; void setOffset(int newOffset); int count() const; void setCount(int newCount); QString name() const; void setName(const QString &newName); Q_SIGNALS: void offsetChanged(); void countChanged(); void nameChanged(); void isDirty(); private: int m_offset = 0; int m_count = 0; QString m_name; }; class Q_QUICK3DHELPERS_EXPORT ProceduralMesh : public QQuick3DGeometry { Q_OBJECT Q_PROPERTY(QList positions READ positions WRITE setPositions NOTIFY positionsChanged FINAL) Q_PROPERTY(QList normals READ normals WRITE setNormals NOTIFY normalsChanged FINAL) Q_PROPERTY(QList tangents READ tangents WRITE setTangents NOTIFY tangentsChanged FINAL) Q_PROPERTY(QList binormals READ binormals WRITE setBinormals NOTIFY binormalsChanged FINAL) Q_PROPERTY(QList uv0s READ uv0s WRITE setUv0s NOTIFY uv0sChanged FINAL) Q_PROPERTY(QList uv1s READ uv1s WRITE setUv1s NOTIFY uv1sChanged FINAL) Q_PROPERTY(QList colors READ colors WRITE setColors NOTIFY colorsChanged FINAL) Q_PROPERTY(QList joints READ joints WRITE setJoints NOTIFY jointsChanged FINAL) Q_PROPERTY(QList weights READ weights WRITE setWeights NOTIFY weightsChanged FINAL) Q_PROPERTY(QList indexes READ indexes WRITE setIndexes NOTIFY indexesChanged FINAL) Q_PROPERTY(QQmlListProperty subsets READ subsets FINAL) Q_PROPERTY(PrimitiveMode primitiveMode READ primitiveMode WRITE setPrimitiveMode NOTIFY primitiveModeChanged FINAL) QML_ELEMENT QML_ADDED_IN_VERSION(6, 6) public: enum PrimitiveMode { Points, LineStrip, Lines, TriangleStrip, TriangleFan, Triangles }; Q_ENUM(PrimitiveMode) ProceduralMesh(); QList positions() const; void setPositions(const QList &newPositions); PrimitiveMode primitiveMode() const; void setPrimitiveMode(PrimitiveMode newPrimitiveMode); QList indexes() const; void setIndexes(const QList &newIndexes); QList normals() const; void setNormals(const QList &newNormals); QList tangents() const; void setTangents(const QList &newTangents); QList binormals() const; void setBinormals(const QList &newBinormals); QList uv0s() const; void setUv0s(const QList &newUv0s); QList uv1s() const; void setUv1s(const QList &newUv1s); QList colors() const; void setColors(const QList &newColors); QList joints() const; void setJoints(const QList &newJoints); QList weights() const; void setWeights(const QList &newWeights); QQmlListProperty subsets(); Q_SIGNALS: void positionsChanged(); void primitiveModeChanged(); void indexesChanged(); void normalsChanged(); void tangentsChanged(); void binormalsChanged(); void uv0sChanged(); void uv1sChanged(); void colorsChanged(); void jointsChanged(); void weightsChanged(); private Q_SLOTS: void requestUpdate(); void updateGeometry(); void subsetDestroyed(QObject *subset); private: bool supportsTriangleFanPrimitive() const; static void qmlAppendProceduralMeshSubset(QQmlListProperty *list, ProceduralMeshSubset *subset); static ProceduralMeshSubset *qmlProceduralMeshSubsetAt(QQmlListProperty *list, qsizetype index); static qsizetype qmlProceduralMeshSubsetCount(QQmlListProperty *list); static void qmlClearProceduralMeshSubset(QQmlListProperty *list); bool m_updateRequested = false; PrimitiveMode m_primitiveMode = Triangles; QList m_positions; QList m_indexes; QList m_normals; QList m_tangents; QList m_binormals; QList m_uv0s; QList m_uv1s; QList m_colors; QList m_joints; QList m_weights; QList m_subsets; }; QT_END_NAMESPACE #endif // PROCEDURALMESH_H