blob: 594f36f408250655ce2e0277c4ab2f3dfa27482a [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "device/vr/openxr/openxr_spatial_utils.h"
namespace device {
std::vector<XrSpatialCapabilityEXT> GetCapabilities(
PFN_xrEnumerateSpatialCapabilitiesEXT xrEnumerateSpatialCapabilitiesEXT,
XrInstance instance,
XrSystemId system) {
std::vector<XrSpatialCapabilityEXT> capabilities;
uint32_t count;
if (XR_FAILED(xrEnumerateSpatialCapabilitiesEXT(instance, system, 0, &count,
nullptr)) ||
count == 0) {
return capabilities;
}
capabilities.resize(count);
if (XR_FAILED(xrEnumerateSpatialCapabilitiesEXT(
instance, system, count, &count, capabilities.data()))) {
capabilities.clear();
}
return capabilities;
}
std::vector<XrSpatialComponentTypeEXT> GetSupportedComponentTypes(
PFN_xrEnumerateSpatialCapabilityComponentTypesEXT
xrEnumerateSpatialCapabilityComponentTypesEXT,
XrInstance instance,
XrSystemId system,
XrSpatialCapabilityEXT capability) {
std::vector<XrSpatialComponentTypeEXT> supported_components;
XrSpatialCapabilityComponentTypesEXT component_types{
XR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXT};
if (XR_FAILED(xrEnumerateSpatialCapabilityComponentTypesEXT(
instance, system, capability, &component_types))) {
return supported_components;
}
supported_components.resize(component_types.componentTypeCountOutput);
component_types.componentTypeCapacityInput =
component_types.componentTypeCountOutput;
component_types.componentTypes = supported_components.data();
if (XR_FAILED(xrEnumerateSpatialCapabilityComponentTypesEXT(
instance, system, capability, &component_types))) {
supported_components.clear();
}
return supported_components;
}
} // namespace device