49class QQuick3DXrAnchorManager :
public QObject
53 static QQuick3DXrAnchorManager* instance();
55 void initialize(XrInstance instance, XrSession session);
58 QList<
const char*> requiredExtensions()
const;
60 void handleEvent(
const XrEventDataBaseHeader* event);
62 void requestSceneCapture();
63 bool queryAllAnchors();
64 const QList<QQuick3DXrSpatialAnchor *> &anchors()
const;
65 qsizetype anchorCount()
const;
67 void updateAnchors(XrTime predictedDisplayTime, XrSpace appSpace);
68 QString getSemanticLabels(
const XrSpace space);
69 QSet<QUuid> collectRoomLayoutUuids(XrSpace space);
70 QSet<QUuid> collectSpaceContainerUuids(XrSpace space);
72 bool isComponentSupported(XrSpace space, XrSpaceComponentTypeFB type);
73 bool isComponentEnabled(XrSpace space, XrSpaceComponentTypeFB type);
75 bool getBoundingBox3D(XrSpace space, QVector3D &offset, QVector3D &extent);
76 bool getBoundingBox2D(XrSpace space, QVector2D &offset, QVector2D &extent);
78 bool setupSpatialAnchor(XrSpace space, QQuick3DXrSpatialAnchor &anchor);
81 void anchorAdded(QQuick3DXrSpatialAnchor* anchor);
82 void anchorRemoved(QUuid uuid);
83 void anchorUpdated(QQuick3DXrSpatialAnchor *anchor);
84 void sceneCaptureCompleted();
87 QQuick3DXrAnchorManager();
88 ~QQuick3DXrAnchorManager();
90 XrInstance m_instance{XR_NULL_HANDLE};
91 XrSession m_session{XR_NULL_HANDLE};
93 [[nodiscard]]
bool checkXrResult(
const XrResult &result);
95 bool queryAllAnchorsWithSpecificComponentEnabled(
const XrSpaceComponentTypeFB componentType);
96 bool queryAnchorsByUuids(
const QSet<QUuid>& uuidSet);
98 void addAnchor(XrSpace space, XrUuidEXT uuid);
101 XrResult enumerateSpaceSupportedComponents(XrSpace space,
102 uint32_t componentTypeCapacityInput,
103 uint32_t* componentTypeCountOutput,
104 XrSpaceComponentTypeFB* componentTypes);
105 XrResult getSpaceComponentStatus(XrSpace space,
106 XrSpaceComponentTypeFB componentType,
107 XrSpaceComponentStatusFB* status);
108 XrResult setSpaceComponentStatus(XrSpace space,
109 const XrSpaceComponentStatusSetInfoFB* info,
110 XrAsyncRequestIdFB* requestId);
111 XrResult getSpaceUuid(XrSpace space, XrUuidEXT *uuid);
112 XrResult querySpaces(
const XrSpaceQueryInfoBaseHeaderFB* info, XrAsyncRequestIdFB* requestId);
113 XrResult retrieveSpaceQueryResults(XrAsyncRequestIdFB requestId, XrSpaceQueryResultsFB* results);
114 XrResult getSpaceBoundingBox2D(XrSpace space, XrRect2Df* boundingBox2DOutput);
115 XrResult getSpaceBoundingBox3D(XrSpace space, XrRect3DfFB* boundingBox3DOutput);
116 XrResult getSpaceSemanticLabels(XrSpace space, XrSemanticLabelsFB* semanticLabelsOutput);
117 XrResult getSpaceBoundary2D(XrSpace space, XrBoundary2DFB* boundary2DOutput);
118 XrResult getSpaceRoomLayout(XrSpace space, XrRoomLayoutFB* roomLayoutOutput);
119 XrResult getSpaceContainer(XrSpace space, XrSpaceContainerFB* spaceContainerOutput);
120 XrResult requestSceneCapture(
const XrSceneCaptureRequestInfoFB* info, XrAsyncRequestIdFB* requestId);
122 PFN_xrEnumerateSpaceSupportedComponentsFB xrEnumerateSpaceSupportedComponentsFB =
nullptr;
123 PFN_xrGetSpaceComponentStatusFB xrGetSpaceComponentStatusFB =
nullptr;
124 PFN_xrSetSpaceComponentStatusFB xrSetSpaceComponentStatusFB =
nullptr;
125 PFN_xrGetSpaceUuidFB xrGetSpaceUuidFB =
nullptr;
126 PFN_xrQuerySpacesFB xrQuerySpacesFB =
nullptr;
127 PFN_xrRetrieveSpaceQueryResultsFB xrRetrieveSpaceQueryResultsFB =
nullptr;
128 PFN_xrGetSpaceBoundingBox2DFB xrGetSpaceBoundingBox2DFB =
nullptr;
129 PFN_xrGetSpaceBoundingBox3DFB xrGetSpaceBoundingBox3DFB =
nullptr;
130 PFN_xrGetSpaceSemanticLabelsFB xrGetSpaceSemanticLabelsFB =
nullptr;
131 PFN_xrGetSpaceBoundary2DFB xrGetSpaceBoundary2DFB =
nullptr;
132 PFN_xrGetSpaceRoomLayoutFB xrGetSpaceRoomLayoutFB =
nullptr;
133 PFN_xrGetSpaceContainerFB xrGetSpaceContainerFB =
nullptr;
134 PFN_xrRequestSceneCaptureFB xrRequestSceneCaptureFB =
nullptr;
136 QList<QQuick3DXrSpatialAnchor *> m_anchors;
137 QHash<QUuid,QQuick3DXrSpatialAnchor *> m_anchorsByUuid;