33 Q_PROPERTY(
float radius READ radius WRITE setRadius NOTIFY radiusChanged FINAL)
34 Q_PROPERTY(
int rings READ rings WRITE setRings NOTIFY ringsChanged FINAL)
35 Q_PROPERTY(
int segments READ segments WRITE setSegments NOTIFY segmentsChanged FINAL)
36 Q_PROPERTY(
bool asynchronous READ asynchronous WRITE setAsynchronous NOTIFY asynchronousChanged)
37 Q_PROPERTY(Status status READ status NOTIFY statusChanged)
39 QML_ADDED_IN_VERSION(6, 9)
41 enum Status { Null, Ready, Loading, Error };
44 explicit SphereGeometry(QQuick3DObject *parent =
nullptr);
45 ~SphereGeometry() override;
47 void setRadius(
float newRadius);
49 void setRings(
int newRings);
52 void setSegments(
int newSegments);
54 bool asynchronous()
const;
55 void setAsynchronous(
bool newAsynchronous);
57 Status status()
const;
60 void doUpdateGeometry();
61 void requestFinished();
66 void segmentsChanged();
67 void asynchronousChanged();
72 QByteArray vertexData;
78 void scheduleGeometryUpdate();
79 void updateGeometry(
const GeometryData &geometryData);
81 static SphereGeometry::GeometryData generateSphereGeometry(
float radius,
84#if QT_CONFIG(concurrent)
85 static void generateSphereGeometryAsync(QPromise<SphereGeometry::GeometryData> &promise,
91 float m_radius = 100.0f;
94 bool m_asynchronous =
true;
95 Status m_status = Null;
96#if QT_CONFIG(concurrent)
97 QFuture<GeometryData> m_geometryDataFuture;
98 QFutureWatcher<GeometryData> m_geometryDataWatcher;
100 bool m_geometryUpdateRequested =
false;
101 bool m_pendingAsyncUpdate =
false;