#include "device/vr/openxr/openxr_spatial_capability_configuration_base.h"
#include "base/notreached.h"
#include "third_party/abseil-cpp/absl/container/flat_hash_set.h"
#include "third_party/openxr/dev/xr_android.h"
#include "third_party/openxr/src/include/openxr/openxr.h"
namespace device {
OpenXrSpatialCapabilityConfigurationBase::
OpenXrSpatialCapabilityConfigurationBase(
XrSpatialCapabilityEXT capability,
const absl::flat_hash_set<XrSpatialComponentTypeEXT>& components)
: components_(components.begin(), components.end()) {
XrStructureType type = XR_TYPE_UNKNOWN;
if (capability == XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT) {
type = XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_PLANE_TRACKING_EXT;
} else if (capability == XR_SPATIAL_CAPABILITY_ANCHOR_EXT) {
type = XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_ANCHOR_EXT;
} else if (capability == XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID) {
type = XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_DEPTH_RAYCAST_ANDROID;
} else {
NOTREACHED() << __func__ << " Unhandled capability type: " << capability;
}
config_ = XrSpatialCapabilityConfigurationBaseHeaderEXT{
type, nullptr, capability,
static_cast<uint32_t>(components_.size()),
components_.data()};
}
OpenXrSpatialCapabilityConfigurationBase::
~OpenXrSpatialCapabilityConfigurationBase() = default;
OpenXrSpatialCapabilityConfigurationBase::
OpenXrSpatialCapabilityConfigurationBase(
const OpenXrSpatialCapabilityConfigurationBase& other) = default;
OpenXrSpatialCapabilityConfigurationBase&
OpenXrSpatialCapabilityConfigurationBase::operator=(
const OpenXrSpatialCapabilityConfigurationBase& other) = default;
OpenXrSpatialCapabilityConfigurationBase::
OpenXrSpatialCapabilityConfigurationBase(
OpenXrSpatialCapabilityConfigurationBase&& other) = default;
OpenXrSpatialCapabilityConfigurationBase&
OpenXrSpatialCapabilityConfigurationBase::operator=(
OpenXrSpatialCapabilityConfigurationBase&& other) = default;
XrSpatialCapabilityConfigurationBaseHeaderEXT*
OpenXrSpatialCapabilityConfigurationBase::GetAsBaseHeader() {
return &config_;
}
}