@@ -58,9 +58,9 @@ namespace {
5858
5959 createInfo.applicationInfo = {" BasicXrApp" , 1 , " " , 1 , XR_CURRENT_API_VERSION };
6060 strcpy_s (createInfo.applicationInfo .applicationName , m_applicationName.c_str ());
61- CHECK_XRCMD (xrCreateInstance (&createInfo, m_instance.Put ()));
61+ CHECK_XRCMD (xrCreateInstance (&createInfo, m_instance.Put (xrDestroyInstance )));
6262
63- m_extensions. PopulateDispatchTable (m_instance.Get ());
63+ xr::g_dispatchTable. Initialize (m_instance.Get (), xrGetInstanceProcAddr );
6464 }
6565
6666 std::vector<const char *> SelectExtensions () {
@@ -109,7 +109,7 @@ namespace {
109109 XrActionSetCreateInfo actionSetInfo{XR_TYPE_ACTION_SET_CREATE_INFO };
110110 strcpy_s (actionSetInfo.actionSetName , " place_hologram_action_set" );
111111 strcpy_s (actionSetInfo.localizedActionSetName , " Placement" );
112- CHECK_XRCMD (xrCreateActionSet (m_instance.Get (), &actionSetInfo, m_actionSet.Put ()));
112+ CHECK_XRCMD (xrCreateActionSet (m_instance.Get (), &actionSetInfo, m_actionSet.Put (xrDestroyActionSet )));
113113 }
114114
115115 // Create actions.
@@ -126,7 +126,7 @@ namespace {
126126 strcpy_s (actionInfo.localizedActionName , " Place Hologram" );
127127 actionInfo.countSubactionPaths = (uint32_t )m_subactionPaths.size ();
128128 actionInfo.subactionPaths = m_subactionPaths.data ();
129- CHECK_XRCMD (xrCreateAction (m_actionSet.Get (), &actionInfo, m_placeAction.Put ()));
129+ CHECK_XRCMD (xrCreateAction (m_actionSet.Get (), &actionInfo, m_placeAction.Put (xrDestroyAction )));
130130 }
131131
132132 // Create an input action getting the left and right hand poses.
@@ -137,7 +137,7 @@ namespace {
137137 strcpy_s (actionInfo.localizedActionName , " Hand Pose" );
138138 actionInfo.countSubactionPaths = (uint32_t )m_subactionPaths.size ();
139139 actionInfo.subactionPaths = m_subactionPaths.data ();
140- CHECK_XRCMD (xrCreateAction (m_actionSet.Get (), &actionInfo, m_poseAction.Put ()));
140+ CHECK_XRCMD (xrCreateAction (m_actionSet.Get (), &actionInfo, m_poseAction.Put (xrDestroyAction )));
141141 }
142142
143143 // Create an output action for vibrating the left and right controller.
@@ -148,7 +148,7 @@ namespace {
148148 strcpy_s (actionInfo.localizedActionName , " Vibrate" );
149149 actionInfo.countSubactionPaths = (uint32_t )m_subactionPaths.size ();
150150 actionInfo.subactionPaths = m_subactionPaths.data ();
151- CHECK_XRCMD (xrCreateAction (m_actionSet.Get (), &actionInfo, m_vibrateAction.Put ()));
151+ CHECK_XRCMD (xrCreateAction (m_actionSet.Get (), &actionInfo, m_vibrateAction.Put (xrDestroyAction )));
152152 }
153153
154154 // Create an input action to exit the session.
@@ -159,7 +159,7 @@ namespace {
159159 strcpy_s (actionInfo.localizedActionName , " Exit session" );
160160 actionInfo.countSubactionPaths = (uint32_t )m_subactionPaths.size ();
161161 actionInfo.subactionPaths = m_subactionPaths.data ();
162- CHECK_XRCMD (xrCreateAction (m_actionSet.Get (), &actionInfo, m_exitAction.Put ()));
162+ CHECK_XRCMD (xrCreateAction (m_actionSet.Get (), &actionInfo, m_exitAction.Put (xrDestroyAction )));
163163 }
164164 }
165165
@@ -183,8 +183,7 @@ namespace {
183183 }
184184
185185 // Set up suggested bindings for the hp/mixed_reality_controller profile.
186- if (m_optionalExtensions.HPMRControllerSupported )
187- {
186+ if (m_optionalExtensions.HPMRControllerSupported ) {
188187 std::vector<XrActionSuggestedBinding> bindings;
189188 bindings.push_back ({m_placeAction.Get (), GetXrPath (" /user/hand/right/input/trigger/value" )});
190189 bindings.push_back ({m_placeAction.Get (), GetXrPath (" /user/hand/left/input/trigger/value" )});
@@ -203,8 +202,7 @@ namespace {
203202 }
204203
205204 // Set up suggested bindings for the microsoft/hand_interaction profile.
206- if (m_optionalExtensions.MsftHandInteractionSupported )
207- {
205+ if (m_optionalExtensions.MsftHandInteractionSupported ) {
208206 std::vector<XrActionSuggestedBinding> bindings;
209207 bindings.push_back ({m_placeAction.Get (), GetXrPath (" /user/hand/right/input/select/value" )});
210208 bindings.push_back ({m_placeAction.Get (), GetXrPath (" /user/hand/left/input/select/value" )});
@@ -267,7 +265,7 @@ namespace {
267265
268266 // Create the D3D11 device for the adapter associated with the system.
269267 XrGraphicsRequirementsD3D11KHR graphicsRequirements{XR_TYPE_GRAPHICS_REQUIREMENTS_D3D11_KHR };
270- CHECK_XRCMD (m_extensions. xrGetD3D11GraphicsRequirementsKHR (m_instance.Get (), m_systemId, &graphicsRequirements));
268+ CHECK_XRCMD (xrGetD3D11GraphicsRequirementsKHR (m_instance.Get (), m_systemId, &graphicsRequirements));
271269
272270 // Create a list of feature levels which are both supported by the OpenXR runtime and this application.
273271 std::vector<D3D_FEATURE_LEVEL > featureLevels = {D3D_FEATURE_LEVEL_12_1 ,
@@ -290,7 +288,7 @@ namespace {
290288 XrSessionCreateInfo createInfo{XR_TYPE_SESSION_CREATE_INFO };
291289 createInfo.next = &graphicsBinding;
292290 createInfo.systemId = m_systemId;
293- CHECK_XRCMD (xrCreateSession (m_instance.Get (), &createInfo, m_session.Put ()));
291+ CHECK_XRCMD (xrCreateSession (m_instance.Get (), &createInfo, m_session.Put (xrDestroySession )));
294292
295293 XrSessionActionSetsAttachInfo attachInfo{XR_TYPE_SESSION_ACTION_SETS_ATTACH_INFO };
296294 std::vector<XrActionSet> actionSets = {m_actionSet.Get ()};
@@ -318,7 +316,7 @@ namespace {
318316 XrReferenceSpaceCreateInfo spaceCreateInfo{XR_TYPE_REFERENCE_SPACE_CREATE_INFO };
319317 spaceCreateInfo.referenceSpaceType = m_appSpaceType;
320318 spaceCreateInfo.poseInReferenceSpace = xr::math::Pose::Identity ();
321- CHECK_XRCMD (xrCreateReferenceSpace (m_session.Get (), &spaceCreateInfo, m_appSpace.Put ()));
319+ CHECK_XRCMD (xrCreateReferenceSpace (m_session.Get (), &spaceCreateInfo, m_appSpace.Put (xrDestroySpace )));
322320 }
323321
324322 // Create a space for each hand pointer pose.
@@ -327,7 +325,7 @@ namespace {
327325 createInfo.action = m_poseAction.Get ();
328326 createInfo.poseInActionSpace = xr::math::Pose::Identity ();
329327 createInfo.subactionPath = m_subactionPaths[side];
330- CHECK_XRCMD (xrCreateActionSpace (m_session.Get (), &createInfo, m_cubesInHand[side].Space .Put ()));
328+ CHECK_XRCMD (xrCreateActionSpace (m_session.Get (), &createInfo, m_cubesInHand[side].Space .Put (xrDestroySpace )));
331329 }
332330 }
333331
@@ -450,7 +448,7 @@ namespace {
450448 swapchainCreateInfo.createFlags = createFlags;
451449 swapchainCreateInfo.usageFlags = usageFlags;
452450
453- CHECK_XRCMD (xrCreateSwapchain (session, &swapchainCreateInfo, swapchain.Handle .Put ()));
451+ CHECK_XRCMD (xrCreateSwapchain (session, &swapchainCreateInfo, swapchain.Handle .Put (xrDestroySwapchain )));
454452
455453 uint32_t chainLength;
456454 CHECK_XRCMD (xrEnumerateSwapchainImages (swapchain.Handle .Get (), 0 , &chainLength, nullptr ));
@@ -535,13 +533,12 @@ namespace {
535533 createInfo.pose = poseInAppSpace;
536534 createInfo.time = placementTime;
537535
538- XrResult result = m_extensions.xrCreateSpatialAnchorMSFT (
539- m_session.Get (), &createInfo, hologram.Anchor .Put (m_extensions.xrDestroySpatialAnchorMSFT ));
536+ XrResult result = xrCreateSpatialAnchorMSFT (m_session.Get (), &createInfo, hologram.Anchor .Put (xrDestroySpatialAnchorMSFT));
540537 if (XR_SUCCEEDED (result)) {
541538 XrSpatialAnchorSpaceCreateInfoMSFT createSpaceInfo{XR_TYPE_SPATIAL_ANCHOR_SPACE_CREATE_INFO_MSFT };
542539 createSpaceInfo.anchor = hologram.Anchor .Get ();
543540 createSpaceInfo.poseInAnchorSpace = xr::math::Pose::Identity ();
544- CHECK_XRCMD (m_extensions. xrCreateSpatialAnchorSpaceMSFT (m_session.Get (), &createSpaceInfo, hologram.Cube .Space .Put ()));
541+ CHECK_XRCMD (xrCreateSpatialAnchorSpaceMSFT (m_session.Get (), &createSpaceInfo, hologram.Cube .Space .Put (xrDestroySpace )));
545542 } else if (result == XR_ERROR_CREATE_SPATIAL_ANCHOR_FAILED_MSFT ) {
546543 DEBUG_PRINT (" Anchor cannot be created, likely due to lost positional tracking." );
547544 } else {
@@ -553,7 +550,7 @@ namespace {
553550 XrReferenceSpaceCreateInfo createInfo{XR_TYPE_REFERENCE_SPACE_CREATE_INFO };
554551 createInfo.referenceSpaceType = m_appSpaceType;
555552 createInfo.poseInReferenceSpace = poseInAppSpace;
556- CHECK_XRCMD (xrCreateReferenceSpace (m_session.Get (), &createInfo, hologram.Cube .Space .Put ()));
553+ CHECK_XRCMD (xrCreateReferenceSpace (m_session.Get (), &createInfo, hologram.Cube .Space .Put (xrDestroySpace )));
557554 }
558555 return hologram;
559556 }
@@ -707,7 +704,7 @@ namespace {
707704 XrReferenceSpaceCreateInfo createInfo{XR_TYPE_REFERENCE_SPACE_CREATE_INFO };
708705 createInfo.referenceSpaceType = referenceSpaceType;
709706 createInfo.poseInReferenceSpace = poseInReferenceSpace;
710- CHECK_XRCMD (xrCreateReferenceSpace (session, &createInfo, space.Put ()));
707+ CHECK_XRCMD (xrCreateReferenceSpace (session, &createInfo, space.Put (xrDestroySpace )));
711708 return space;
712709 };
713710
@@ -890,7 +887,6 @@ namespace {
890887 xr::InstanceHandle m_instance;
891888 xr::SessionHandle m_session;
892889 uint64_t m_systemId{XR_NULL_SYSTEM_ID };
893- xr::ExtensionDispatchTable m_extensions;
894890
895891 struct {
896892 bool DepthExtensionSupported{false };
0 commit comments