33 Q_PROPERTY(
bool enableNormals READ enableNormals WRITE setEnableNormals NOTIFY enableNormalsChanged)
34 Q_PROPERTY(
bool enableUV READ enableUV WRITE setEnableUV NOTIFY enableUVChanged)
35 Q_PROPERTY(
int longitudes READ longitudes WRITE setLongitudes NOTIFY longitudesChanged)
36 Q_PROPERTY(
int latitudes READ latitudes WRITE setLatitudes NOTIFY latitudesChanged)
37 Q_PROPERTY(
int rings READ rings WRITE setRings NOTIFY ringsChanged)
38 Q_PROPERTY(
float height READ height WRITE setHeight NOTIFY heightChanged)
39 Q_PROPERTY(
float diameter READ diameter WRITE setDiameter NOTIFY diameterChanged)
40 Q_PROPERTY(UVProfile uvProfile READ uvProfile WRITE setUVProfile NOTIFY uvProfileChanged FINAL)
41 Q_PROPERTY(
bool asynchronous READ asynchronous WRITE setAsynchronous NOTIFY asynchronousChanged)
42 Q_PROPERTY(Status status READ status NOTIFY statusChanged)
44 QML_ADDED_IN_VERSION(6, 10)
46 enum Status { Null, Ready, Loading, Error };
48 enum UVProfile { Fixed, Aspect, Uniform };
51 explicit CapsuleGeometry(QQuick3DObject *parent =
nullptr);
52 ~CapsuleGeometry() override;
54 bool enableNormals()
const {
return m_enableNormals; }
55 void setEnableNormals(
bool enable);
57 bool enableUV()
const {
return m_enableUV; }
58 void setEnableUV(
bool enable);
60 int longitudes()
const {
return m_longitudes; }
61 void setLongitudes(
int longitudes);
63 int latitudes()
const {
return m_latitudes; }
64 void setLatitudes(
int latitudes);
66 int rings()
const {
return m_rings; }
67 void setRings(
int rings);
69 float height()
const {
return m_height; }
70 void setHeight(
float height);
72 float diameter()
const {
return m_diameter; }
73 void setDiameter(
float diameter);
75 UVProfile uvProfile()
const;
76 void setUVProfile(UVProfile newUVProfile);
78 bool asynchronous()
const;
79 void setAsynchronous(
bool newAsynchronous);
81 Status status()
const;
84 void doUpdateGeometry();
85 void requestFinished();
88 void enableNormalsChanged();
89 void enableUVChanged();
90 void longitudesChanged();
91 void latitudesChanged();
94 void diameterChanged();
95 void uvProfileChanged();
96 void asynchronousChanged();
102 QByteArray vertexData;
103 QByteArray indexData;
107 uint32_t strideNormal = 0;
108 uint32_t strideUV = 0;
109 bool enableNormals =
false;
110 bool enableUV =
false;
113 void scheduleGeometryUpdate();
114 void updateGeometry(
const GeometryData &geometryData);
116 static CapsuleGeometry::GeometryData generateCapsuleGeometry(
bool enableNormals,
123 UVProfile uvProfile);
124#if QT_CONFIG(concurrent)
125 static void generateCapsuleGeometryAsync(QPromise<CapsuleGeometry::GeometryData> &promise,
133 UVProfile uvProfile);
138 bool m_enableNormals =
true;
139 bool m_enableUV =
false;
141 int m_longitudes = 32;
142 int m_latitudes = 16;
144 float m_height = 100.f;
145 float m_diameter = 100.f;
146 UVProfile m_uvProfile = UVProfile::Fixed;
148 bool m_asynchronous =
true;
149 Status m_status = Null;
150#if QT_CONFIG(concurrent)
151 QFuture<GeometryData> m_geometryDataFuture;
152 QFutureWatcher<GeometryData> m_geometryDataWatcher;
154 bool m_geometryUpdateRequested =
false;
155 bool m_pendingAsyncUpdate =
false;