Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qquick3dxranchormanager_openxr_p.h
Go to the documentation of this file.
1// Copyright (C) 2024 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
5
6#ifndef QQUICK3DXRANCHORMANAGER_OPENXR_P_H
7#define QQUICK3DXRANCHORMANAGER_OPENXR_P_H
8
9//
10// W A R N I N G
11// -------------
12//
13// This file is not part of the Qt API. It exists purely as an
14// implementation detail. This header file may change from version to
15// version without notice, or even be removed.
16//
17// We mean it.
18//
19
20#include <openxr/openxr.h>
21
22#if __has_include(<openxr/fb_spatial_entity.h>) && __has_include(<openxr/fb_scene.h>)
23#include <openxr/fb_spatial_entity.h>
24#if __has_include(<openxr/fb_spatial_entity_query.h>) && __has_include(<openxr/fb_spatial_entity_storage.h>) && __has_include(<openxr/fb_spatial_entity_container.h>)
25#include <openxr/fb_spatial_entity_query.h>
26#include <openxr/fb_spatial_entity_storage.h>
27#include <openxr/fb_spatial_entity_container.h>
28#endif
29#include <openxr/fb_scene.h>
30#if __has_include(<openxr/fb_scene_capture.h>)
31#include <openxr/fb_scene_capture.h>
32#endif
33#endif
34// Otherwise, these may be all provided in openxr.h, if it is new enough, no
35// need for the Mobile SDK specific headers anymore. If that's not the case
36// (too old openxr.h), compilation will fail.
37
38#include <QList>
39#include <QSet>
40#include <QUuid>
41
42#include <QObject>
43
44#include <QtQuick3DXr/private/qtquick3dxrglobal_p.h>
45
46QT_BEGIN_NAMESPACE
47
48class QQuick3DXrSpatialAnchor;
49
51{
53public:
55
56 void initialize(XrInstance instance, XrSession session);
57 void teardown();
58
59 QList<const char*> requiredExtensions() const;
60
61 void handleEvent(const XrEventDataBaseHeader* event);
62
64 bool queryAllAnchors();
65 const QList<QQuick3DXrSpatialAnchor *> &anchors() const;
66 qsizetype anchorCount() const;
67
68 void updateAnchors(XrTime predictedDisplayTime, XrSpace appSpace);
69 QString getSemanticLabels(const XrSpace space);
70 QSet<QUuid> collectRoomLayoutUuids(XrSpace space);
72
73 bool isComponentSupported(XrSpace space, XrSpaceComponentTypeFB type);
74 bool isComponentEnabled(XrSpace space, XrSpaceComponentTypeFB type);
75
76 bool getBoundingBox3D(XrSpace space, QVector3D &offset, QVector3D &extent);
77 bool getBoundingBox2D(XrSpace space, QVector2D &offset, QVector2D &extent);
78
79 bool setupSpatialAnchor(XrSpace space, QQuick3DXrSpatialAnchor &anchor);
80
83 void anchorRemoved(QUuid uuid);
86
87private:
88 QQuick3DXrAnchorManager();
89 ~QQuick3DXrAnchorManager();
90
91 XrInstance m_instance{XR_NULL_HANDLE};
92 XrSession m_session{XR_NULL_HANDLE};
93
94 [[nodiscard]] bool checkXrResult(const XrResult &result);
95
96 bool queryAllAnchorsWithSpecificComponentEnabled(const XrSpaceComponentTypeFB componentType);
97 bool queryAnchorsByUuids(const QSet<QUuid>& uuidSet);
98
99 void addAnchor(XrSpace space, XrUuidEXT uuid);
100
101 // API Wrappers
102 XrResult enumerateSpaceSupportedComponents(XrSpace space,
103 uint32_t componentTypeCapacityInput,
104 uint32_t* componentTypeCountOutput,
105 XrSpaceComponentTypeFB* componentTypes);
106 XrResult getSpaceComponentStatus(XrSpace space,
107 XrSpaceComponentTypeFB componentType,
108 XrSpaceComponentStatusFB* status);
109 XrResult setSpaceComponentStatus(XrSpace space,
110 const XrSpaceComponentStatusSetInfoFB* info,
111 XrAsyncRequestIdFB* requestId);
112 XrResult getSpaceUuid(XrSpace space, XrUuidEXT *uuid);
113 XrResult querySpaces(const XrSpaceQueryInfoBaseHeaderFB* info, XrAsyncRequestIdFB* requestId);
114 XrResult retrieveSpaceQueryResults(XrAsyncRequestIdFB requestId, XrSpaceQueryResultsFB* results);
115 XrResult getSpaceBoundingBox2D(XrSpace space, XrRect2Df* boundingBox2DOutput);
116 XrResult getSpaceBoundingBox3D(XrSpace space, XrRect3DfFB* boundingBox3DOutput);
117 XrResult getSpaceSemanticLabels(XrSpace space, XrSemanticLabelsFB* semanticLabelsOutput);
118 XrResult getSpaceBoundary2D(XrSpace space, XrBoundary2DFB* boundary2DOutput);
119 XrResult getSpaceRoomLayout(XrSpace space, XrRoomLayoutFB* roomLayoutOutput);
120 XrResult getSpaceContainer(XrSpace space, XrSpaceContainerFB* spaceContainerOutput);
121 XrResult requestSceneCapture(const XrSceneCaptureRequestInfoFB* info, XrAsyncRequestIdFB* requestId);
122
123 PFN_xrEnumerateSpaceSupportedComponentsFB xrEnumerateSpaceSupportedComponentsFB = nullptr;
124 PFN_xrGetSpaceComponentStatusFB xrGetSpaceComponentStatusFB = nullptr;
125 PFN_xrSetSpaceComponentStatusFB xrSetSpaceComponentStatusFB = nullptr;
126 PFN_xrGetSpaceUuidFB xrGetSpaceUuidFB = nullptr;
127 PFN_xrQuerySpacesFB xrQuerySpacesFB = nullptr;
128 PFN_xrRetrieveSpaceQueryResultsFB xrRetrieveSpaceQueryResultsFB = nullptr;
129 PFN_xrGetSpaceBoundingBox2DFB xrGetSpaceBoundingBox2DFB = nullptr;
130 PFN_xrGetSpaceBoundingBox3DFB xrGetSpaceBoundingBox3DFB = nullptr;
131 PFN_xrGetSpaceSemanticLabelsFB xrGetSpaceSemanticLabelsFB = nullptr;
132 PFN_xrGetSpaceBoundary2DFB xrGetSpaceBoundary2DFB = nullptr;
133 PFN_xrGetSpaceRoomLayoutFB xrGetSpaceRoomLayoutFB = nullptr;
134 PFN_xrGetSpaceContainerFB xrGetSpaceContainerFB = nullptr;
135 PFN_xrRequestSceneCaptureFB xrRequestSceneCaptureFB = nullptr;
136
137 QList<QQuick3DXrSpatialAnchor *> m_anchors;
138 QHash<QUuid,QQuick3DXrSpatialAnchor *> m_anchorsByUuid;
139};
140
141QT_END_NAMESPACE
142
143#endif // QQUICK3DXRANCHORMANAGER_OPENXR_P_H
QList< const char * > requiredExtensions() const
void anchorRemoved(QUuid uuid)
bool getBoundingBox2D(XrSpace space, QVector2D &offset, QVector2D &extent)
const QList< QQuick3DXrSpatialAnchor * > & anchors() const
bool isComponentEnabled(XrSpace space, XrSpaceComponentTypeFB type)
bool getBoundingBox3D(XrSpace space, QVector3D &offset, QVector3D &extent)
void updateAnchors(XrTime predictedDisplayTime, XrSpace appSpace)
void handleEvent(const XrEventDataBaseHeader *event)
bool isComponentSupported(XrSpace space, XrSpaceComponentTypeFB type)
bool setupSpatialAnchor(XrSpace space, QQuick3DXrSpatialAnchor &anchor)
void initialize(XrInstance instance, XrSession session)
void anchorUpdated(QQuick3DXrSpatialAnchor *anchor)
QSet< QUuid > collectRoomLayoutUuids(XrSpace space)
QString getSemanticLabels(const XrSpace space)
QSet< QUuid > collectSpaceContainerUuids(XrSpace space)
bool checkXrResult(XrResult result, XrInstance instance)
bool resolveXrFunction(XrInstance instance, const char *name, PFN_xrVoidFunction *function)
Combined button and popup list for selecting options.
#define __has_include(x)
static const uint32_t MAX_PERSISTENT_SPACES
static const char qssgXrRecognizedLabels[]
static QQuick3DXrSpatialAnchor::Classification getLabelForString(const QString &label)