Skip to content

Commit 59dbc6b

Browse files
complete merge (#68)
1 parent 625285e commit 59dbc6b

1 file changed

Lines changed: 44 additions & 23 deletions

File tree

shared/XrUtility/XrSceneUnderstanding.h

Lines changed: 44 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@
1818
#include "XrStruct.h"
1919
#include "XrHandle.h"
2020
#include "XrMath.h"
21-
#include "XrExtensionContext.h"
21+
#include "XrExtensions.h"
22+
#include <ostream>
2223

2324
namespace xr {
2425
class SceneObserverHandle : public xr::UniqueExtHandle<XrSceneObserverMSFT> {};
@@ -29,22 +30,27 @@ namespace xr {
2930
std::vector<uint32_t> indices;
3031
};
3132

32-
inline xr::SceneObserverHandle CreateSceneObserver(const xr::ExtensionContext& extensions, XrSession session) {
33+
struct ScenePlane {
34+
XrScenePlaneAlignmentTypeMSFT alignment;
35+
XrExtent2Df extent;
36+
};
37+
38+
inline xr::SceneObserverHandle CreateSceneObserver(const xr::ExtensionDispatchTable& extensions, XrSession session) {
3339
xr::SceneObserverHandle sceneObserverHandle;
3440
XrSceneObserverCreateInfoMSFT createInfo{XR_TYPE_SCENE_OBSERVER_CREATE_INFO_MSFT};
3541
CHECK_XRCMD(
3642
extensions.xrCreateSceneObserverMSFT(session, &createInfo, sceneObserverHandle.Put(extensions.xrDestroySceneObserverMSFT)));
3743
return sceneObserverHandle;
3844
}
3945

40-
inline xr::SceneHandle CreateScene(const xr::ExtensionContext& extensions, XrSceneObserverMSFT sceneObserver) {
46+
inline xr::SceneHandle CreateScene(const xr::ExtensionDispatchTable& extensions, XrSceneObserverMSFT sceneObserver) {
4147
xr::SceneHandle sceneHandle;
4248
XrSceneCreateInfoMSFT createInfo{XR_TYPE_SCENE_CREATE_INFO_MSFT};
4349
CHECK_XRCMD(extensions.xrCreateSceneMSFT(sceneObserver, &createInfo, sceneHandle.Put(extensions.xrDestroySceneMSFT)));
4450
return sceneHandle;
4551
}
4652

47-
inline std::vector<XrSceneObjectMSFT> GetSceneObjects(const xr::ExtensionContext& extensions, XrSceneMSFT scene) {
53+
inline std::vector<XrSceneObjectMSFT> GetSceneObjects(const xr::ExtensionDispatchTable& extensions, XrSceneMSFT scene) {
4854
// Get list of scene object atoms using 2-call
4955
uint32_t sceneObjectCountOutput = 0;
5056
CHECK_XRCMD(extensions.xrGetSceneObjectsMSFT(scene, 0, &sceneObjectCountOutput, nullptr));
@@ -56,7 +62,7 @@ namespace xr {
5662
return sceneObjectVector;
5763
}
5864

59-
inline std::vector<XrSceneMeshKeyMSFT> GetMeshKeys(const xr::ExtensionContext& extensions,
65+
inline std::vector<XrSceneMeshKeyMSFT> GetMeshKeys(const xr::ExtensionDispatchTable& extensions,
6066
XrSceneMSFT scene,
6167
XrSceneObjectKeyMSFT sceneObjectKey) {
6268
XrSceneObjectPropertiesGetInfoMSFT getInfo{XR_TYPE_SCENE_OBJECT_PROPERTIES_GET_INFO_MSFT};
@@ -75,7 +81,27 @@ namespace xr {
7581
return meshKeysVector;
7682
}
7783

78-
inline std::vector<XrScenePlaneKeyMSFT> GetPlaneKeys(const xr::ExtensionContext& extensions,
84+
inline xr::SceneMesh GetSceneMesh(const xr::ExtensionDispatchTable& extensions, XrSceneMSFT scene, XrSceneMeshKeyMSFT meshKey) {
85+
XrSceneMeshGetInfoMSFT meshGetInfo{XR_TYPE_SCENE_MESH_GET_INFO_MSFT};
86+
meshGetInfo.sceneMeshKey = meshKey;
87+
88+
XrSceneMeshMSFT mesh{XR_TYPE_SCENE_MESH_MSFT};
89+
CHECK_XRCMD(extensions.xrGetSceneMeshMSFT(scene, &meshGetInfo, &mesh));
90+
91+
xr::SceneMesh meshData;
92+
meshData.positions.resize(mesh.vertexCountOutput);
93+
meshData.indices.resize(mesh.indexCountOutput);
94+
mesh.vertexCapacityInput = static_cast<uint32_t>(meshData.positions.size());
95+
mesh.indexCapacityInput = static_cast<uint32_t>(meshData.indices.size());
96+
mesh.vertices = meshData.positions.data();
97+
mesh.indices = meshData.indices.data();
98+
CHECK_XRCMD(extensions.xrGetSceneMeshMSFT(scene, &meshGetInfo, &mesh));
99+
meshData.positions.resize(mesh.vertexCountOutput);
100+
meshData.indices.resize(mesh.indexCountOutput);
101+
return meshData;
102+
}
103+
104+
inline std::vector<XrScenePlaneKeyMSFT> GetPlaneKeys(const xr::ExtensionDispatchTable& extensions,
79105
XrSceneMSFT scene,
80106
XrSceneObjectKeyMSFT sceneObjectKey) {
81107
XrSceneObjectPropertiesGetInfoMSFT getInfo{XR_TYPE_SCENE_OBJECT_PROPERTIES_GET_INFO_MSFT};
@@ -94,27 +120,22 @@ namespace xr {
94120
return planeKeysVector;
95121
}
96122

97-
inline xr::SceneMesh GetSceneMesh(const xr::ExtensionContext& extensions, XrSceneMSFT scene, XrSceneMeshKeyMSFT meshKey) {
98-
XrSceneMeshGetInfoMSFT meshGetInfo{XR_TYPE_SCENE_MESH_GET_INFO_MSFT};
99-
meshGetInfo.sceneMeshKey = meshKey;
123+
inline xr::ScenePlane GetScenePlane(const xr::ExtensionDispatchTable& extensions, XrSceneMSFT scene, XrScenePlaneKeyMSFT planeKey)
124+
{
125+
XrScenePlanePropertiesGetInfoMSFT planePropertiesGetInfo{ XR_TYPE_SCENE_PLANE_PROPERTIES_GET_INFO_MSFT };
126+
planePropertiesGetInfo.scenePlaneKey = planeKey;
100127

101-
XrSceneMeshMSFT mesh{XR_TYPE_SCENE_MESH_MSFT};
102-
CHECK_XRCMD(extensions.xrGetSceneMeshMSFT(scene, &meshGetInfo, &mesh));
128+
XrScenePlanePropertiesMSFT planeProperties{ XR_TYPE_SCENE_PLANE_PROPERTIES_MSFT };
129+
CHECK_XRCMD(extensions.xrGetScenePlanePropertiesMSFT(scene, &planePropertiesGetInfo, &planeProperties));
103130

104-
xr::SceneMesh meshData;
105-
meshData.positions.resize(mesh.vertexCountOutput);
106-
meshData.indices.resize(mesh.indexCountOutput);
107-
mesh.vertexCapacityInput = static_cast<uint32_t>(meshData.positions.size());
108-
mesh.indexCapacityInput = static_cast<uint32_t>(meshData.indices.size());
109-
mesh.vertices = meshData.positions.data();
110-
mesh.indices = meshData.indices.data();
111-
CHECK_XRCMD(extensions.xrGetSceneMeshMSFT(scene, &meshGetInfo, &mesh));
112-
meshData.positions.resize(mesh.vertexCountOutput);
113-
meshData.indices.resize(mesh.indexCountOutput);
114-
return meshData;
131+
xr::ScenePlane plane;
132+
plane.alignment = planeProperties.alignment;
133+
plane.extent = planeProperties.extents;
134+
135+
return plane;
115136
}
116137

117-
inline void ReadSerializedScene(const xr::ExtensionContext& extensions, XrSceneMSFT scene, std::basic_ostream<uint8_t>& stream) {
138+
inline void ReadSerializedScene(const xr::ExtensionDispatchTable& extensions, XrSceneMSFT scene, std::basic_ostream<uint8_t>& stream) {
118139
constexpr uint32_t BufferSize = 8192;
119140
std::array<uint8_t, BufferSize> buffer;
120141
uint32_t readOutput = 0;

0 commit comments

Comments
 (0)