35 Q_PROPERTY(
float radius READ radius WRITE setRadius NOTIFY radiusChanged FINAL)
36 Q_PROPERTY(
int rings READ rings WRITE setRings NOTIFY ringsChanged FINAL)
37 Q_PROPERTY(
int segments READ segments WRITE setSegments NOTIFY segmentsChanged FINAL)
38 Q_PROPERTY(
bool asynchronous READ asynchronous WRITE setAsynchronous NOTIFY asynchronousChanged)
39 Q_PROPERTY(Status status READ status NOTIFY statusChanged)
41 QML_ADDED_IN_VERSION(6, 9)
43 enum Status { Null, Ready, Loading, Error };
46 explicit SphereGeometry(QQuick3DObject *parent =
nullptr);
47 ~SphereGeometry() override;
49 void setRadius(
float newRadius);
51 void setRings(
int newRings);
54 void setSegments(
int newSegments);
56 bool asynchronous()
const;
57 void setAsynchronous(
bool newAsynchronous);
59 Status status()
const;
62 void doUpdateGeometry();
63 void requestFinished();
68 void segmentsChanged();
69 void asynchronousChanged();
74 QByteArray vertexData;
80 void scheduleGeometryUpdate();
81 void updateGeometry(
const GeometryData &geometryData);
83 static SphereGeometry::GeometryData generateSphereGeometry(
float radius,
86#if QT_CONFIG(concurrent)
87 static void generateSphereGeometryAsync(QPromise<SphereGeometry::GeometryData> &promise,
93 float m_radius = 100.0f;
96 bool m_asynchronous =
true;
97 Status m_status = Null;
98#if QT_CONFIG(concurrent)
99 QFuture<GeometryData> m_geometryDataFuture;
100 QFutureWatcher<GeometryData> m_geometryDataWatcher;
102 bool m_geometryUpdateRequested =
false;
103 bool m_pendingAsyncUpdate =
false;