35 Q_PROPERTY(
bool enableNormals READ enableNormals WRITE setEnableNormals NOTIFY enableNormalsChanged)
36 Q_PROPERTY(
bool enableUV READ enableUV WRITE setEnableUV NOTIFY enableUVChanged)
37 Q_PROPERTY(
int longitudes READ longitudes WRITE setLongitudes NOTIFY longitudesChanged)
38 Q_PROPERTY(
int latitudes READ latitudes WRITE setLatitudes NOTIFY latitudesChanged)
39 Q_PROPERTY(
int rings READ rings WRITE setRings NOTIFY ringsChanged)
40 Q_PROPERTY(
float height READ height WRITE setHeight NOTIFY heightChanged)
41 Q_PROPERTY(
float diameter READ diameter WRITE setDiameter NOTIFY diameterChanged)
42 Q_PROPERTY(UVProfile uvProfile READ uvProfile WRITE setUVProfile NOTIFY uvProfileChanged FINAL)
43 Q_PROPERTY(
bool asynchronous READ asynchronous WRITE setAsynchronous NOTIFY asynchronousChanged)
44 Q_PROPERTY(Status status READ status NOTIFY statusChanged)
46 QML_ADDED_IN_VERSION(6, 10)
48 enum Status { Null, Ready, Loading, Error };
50 enum UVProfile { Fixed, Aspect, Uniform };
53 explicit CapsuleGeometry(QQuick3DObject *parent =
nullptr);
54 ~CapsuleGeometry() override;
56 bool enableNormals()
const {
return m_enableNormals; }
57 void setEnableNormals(
bool enable);
59 bool enableUV()
const {
return m_enableUV; }
60 void setEnableUV(
bool enable);
62 int longitudes()
const {
return m_longitudes; }
63 void setLongitudes(
int longitudes);
65 int latitudes()
const {
return m_latitudes; }
66 void setLatitudes(
int latitudes);
68 int rings()
const {
return m_rings; }
69 void setRings(
int rings);
71 float height()
const {
return m_height; }
72 void setHeight(
float height);
74 float diameter()
const {
return m_diameter; }
75 void setDiameter(
float diameter);
77 UVProfile uvProfile()
const;
78 void setUVProfile(UVProfile newUVProfile);
80 bool asynchronous()
const;
81 void setAsynchronous(
bool newAsynchronous);
83 Status status()
const;
86 void doUpdateGeometry();
87 void requestFinished();
90 void enableNormalsChanged();
91 void enableUVChanged();
92 void longitudesChanged();
93 void latitudesChanged();
96 void diameterChanged();
97 void uvProfileChanged();
98 void asynchronousChanged();
104 QByteArray vertexData;
105 QByteArray indexData;
109 uint32_t strideNormal = 0;
110 uint32_t strideUV = 0;
111 bool enableNormals =
false;
112 bool enableUV =
false;
115 void scheduleGeometryUpdate();
116 void updateGeometry(
const GeometryData &geometryData);
118 static CapsuleGeometry::GeometryData generateCapsuleGeometry(
bool enableNormals,
125 UVProfile uvProfile);
126#if QT_CONFIG(concurrent)
127 static void generateCapsuleGeometryAsync(QPromise<CapsuleGeometry::GeometryData> &promise,
135 UVProfile uvProfile);
140 bool m_enableNormals =
true;
141 bool m_enableUV =
false;
143 int m_longitudes = 32;
144 int m_latitudes = 16;
146 float m_height = 100.f;
147 float m_diameter = 100.f;
148 UVProfile m_uvProfile = UVProfile::Fixed;
150 bool m_asynchronous =
true;
151 Status m_status = Null;
152#if QT_CONFIG(concurrent)
153 QFuture<GeometryData> m_geometryDataFuture;
154 QFutureWatcher<GeometryData> m_geometryDataWatcher;
156 bool m_geometryUpdateRequested =
false;
157 bool m_pendingAsyncUpdate =
false;