1818#include " XrStruct.h"
1919#include " XrHandle.h"
2020#include " XrMath.h"
21- #include " XrExtensionContext.h"
21+ #include " XrExtensions.h"
22+ #include < ostream>
2223
2324namespace 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