XR_EXT_spatial_entity
Name String
XR_EXT_spatial_entity
Тип расширения
Расширение экземпляра
Зарегистрированный добавочный номер
741
Revision
1
Статус ратификации
Ратифицировано
Зависимости расширений и версий
XR_EXT_future
Авторы
Нихав Джайн (Nihav Jain), Google
Джаред Финдер (Jared Finder), Google
Натали Флери (Natalie Fleury), Meta
Юичи Тагучи (Yuichi Taguchi), Meta
Рон Бессемс (Ron Bessems), Meta
Инь Ли (Yin Li), Microsoft
Картик Кадаппан (Karthik Kadappan), Magic Leap
Джимми Алампарамбил (Jimmy Alamparambil), ByteDance
Чжипэн Лю (Zhipeng Liu), ByteDance
Цзюнь Янь (Jun Yan), ByteDance
Обзор
Это расширение содержит концепции и основы для распознавания сцен и пространственного мышления в OpenXR. Это объединяет несколько связанных, но различных областей функциональности, которые перечисляются, настраиваются и взаимодействуют в целом единообразно, как определено этим расширением. Поскольку в этом расширении нет конкретных определений для какой-либо из этих функциональных областей, текст формальной спецификации имеет тенденцию быть несколько абстрактным. Примеры, включенные в текст этой спецификации расширения, иногда относятся к функциям, определенным в предстоящем или гипотетическом связанном расширении, с целью иллюстрации, без ограничения или указания таких дополнительных функций.
Основные компоненты этого расширения:
- Пространственные объекты. Функциональность сосредоточена вокруг объектов , которые сами по себе предоставляют очень мало возможностей.
- Пространственные компоненты. С этими объектами связаны компоненты, которые предоставляют данные и поведение.
- Типы пространственных компонентов. Каждый пространственный компонент относится к определенному типу , и у любого объекта может быть не более одного компонента каждого типа.
- Пространственный контекст. Все взаимодействия с пространственными объектами происходят в контексте после этапа инициализации и настройки.
- Пространственные возможности. Манипуляции с пространственными объектами в основном обеспечиваются возможностями. Возможность – это единица функциональности, помимо прочего, заданные приложением привязки, обнаружение плоскостей или отслеживание изображений. Каждая возможность обычно определяется в отдельном расширении (включается при создании экземпляра, как обычно) и включается для определенного контекста во время создания.
- Каждая функция связана с набором типов компонентов, для которых компоненты присутствуют в каждом объекте, предоставляемом этой функцией . Расширение, определяющее возможность, указывает, какие типы компонентов являются обязательными для этой возможности ("гарантированными"), а то же или другие расширения могут указывать необязательные типы компонентов, предоставляемые некоторыми потенциальными реализациями. Любое количество возможностей может предоставлять объектам компоненты заданного типа, которые можно использовать одинаково независимо от того, какая возможность их создала.
- Функции пространственных возможностей. Некоторые возможности требуют настройки и поэтому параметризуются функциями возможностей.
Это расширение позволяет перечислить компоненты, предоставляемые каждой функцией, которая поддерживается в текущей системе, включая обязательные и необязательные компоненты .
Поскольку для некоторых реализаций могут потребоваться разные степени параметризации возможностей, это расширение предоставляет механизм для перечисления поддерживаемых функций, связанных с определенной возможностью в текущей системе.
Это расширение также определяет несколько общих компонентов, которые, как ожидается, будут использоваться в широком диапазоне возможностей .
Пространственный объект
Пространственные объекты – это объекты, которые существуют в некотором пространстве и имеют различные связанные данные, организованные в компоненты. Это может быть:
- Физические (например, плоские поверхности, такие как стены и полы, объекты, такие как стулья и книжные шкафы, и т. д.)
- Виртуальные (например, контент, размещенный и опубликованный другим приложением или пользователем).
- Определяется приложением (например, приложение отмечает область как "гостиная" или "кухня" или отмечает точку как место для размещения телевизора и т. д.)
Объекты, которые представлены в системе действий, например контроллеры или направление взгляда, не предназначены для моделирования в качестве пространственных объектов.
Пространственные объекты в OpenXR моделируются как система сущностей и компонентов . У каждого пространственного объекта есть набор компонентов, и каждый компонент предоставляет уникальный набор данных и моделей поведения для этого объекта.
Пространственные объекты представлены атомом XrSpatialEntityIdEXT или дескриптором XrSpatialEntityEXT. Подробные сведения о них приведены в разделе Представления пространственных объектов.
Типы пространственных компонентов
У пространственного объекта есть один или несколько компонентов, которые предоставляют данные или определяют поведение этого объекта. Некоторые распространенные компоненты, определенные этим расширением, перечислены в разделе Общие компоненты.
typedef enum XrSpatialComponentTypeEXT {
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT = 1,
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT = 2,
XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT = 3,
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT = 4,
XR_SPATIAL_COMPONENT_TYPE_PLANE_ALIGNMENT_EXT = 1000741000,
XR_SPATIAL_COMPONENT_TYPE_MESH_2D_EXT = 1000741001,
XR_SPATIAL_COMPONENT_TYPE_POLYGON_2D_EXT = 1000741002,
XR_SPATIAL_COMPONENT_TYPE_PLANE_SEMANTIC_LABEL_EXT = 1000741003,
XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT = 1000743000,
XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT = 1000744000,
XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT = 1000744001,
XR_SPATIAL_COMPONENT_TYPE_MOUSE_SEMANTIC_LABEL_EXT = 1000744002,
XR_SPATIAL_COMPONENT_TYPE_ANCHOR_EXT = 1000762000,
XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_EXT = 1000763000,
XR_SPATIAL_COMPONENT_TYPE_IMAGE_2D_EXT = 1000782000,
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT = 1000783000,
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT = 1000783001,
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT = 1000783002,
XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_ANDROID = 1000785000,
XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID = 1000786000,
XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID = 1000791000,
XR_SPATIAL_COMPONENT_TYPE_ROOM_ANDROIDSYS = 1000792002,
XR_SPATIAL_COMPONENT_TYPE_MATERIAL_TYPE_ANDROIDSYS = 1000792003,
XR_SPATIAL_COMPONENT_TYPE_CONFIDENCE_ANDROIDSYS = 1000792004,
XR_SPATIAL_COMPONENT_TYPE_ROOM_EMPTINESS_ANDROIDSYS = 1000792005,
XR_SPATIAL_COMPONENT_TYPE_OCCUPANCY_GRID_ANDROIDX1 = 1000793000,
XR_SPATIAL_COMPONENT_TYPE_ANNOTATION_QUAD_ANDROID = 1000794000,
XR_SPATIAL_COMPONENT_TYPE_STREETSCAPE_GEOMETRY_METADATA_ANDROIDX2 = 1000798000,
XR_SPATIAL_COMPONENT_TYPE_GEOMETRY_POINT_ANDROID = 1000803000,
XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_SCOPES_ANDROIDX1 = 1000808000,
XR_SPATIAL_COMPONENT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialComponentTypeEXT;
Перечисление XrSpatialComponentTypeEXT определяет различные типы компонентов, которые может поддерживать среда выполнения.
Не все перечисленные типы компонентов предоставляются только этим расширением. Для некоторых требуется включить дополнительные расширения при создании экземпляра, как описано в документации.
Перечисляемые значения:
Описание перечисления
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT
Компонент, который предоставляет двухмерные границы для пространственного объекта. Соответствующая структура списка – XrSpatialComponentBounded2DListEXT, а структура данных – XrSpatialBounded2DDataEXT.
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT
Компонент, который задает трехмерные границы пространственного объекта. Соответствующая структура списка – XrSpatialComponentBounded3DListEXT. Соответствующая структура данных – XrBoxf.
XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT
Компонент, который предоставляет XrSpatialEntityIdEXT родительского объекта для пространственного объекта. Соответствующая структура списка – XrSpatialComponentParentListEXT. Соответствующая структура данных – XrSpatialEntityIdEXT.
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT
Компонент, который предоставляет 3D-сетку для пространственного объекта. Соответствующая структура списка – XrSpatialComponentMesh3DListEXT, а структура данных – XrSpatialMeshDataEXT.
XR_SPATIAL_COMPONENT_TYPE_PLANE_ALIGNMENT_EXT
Компонент, который предоставляет перечисление выравнивания плоскости для пространственного объекта. Соответствующая структура списка – XrSpatialComponentPlaneAlignmentListEXT, а соответствующая структура данных – XrSpatialPlaneAlignmentEXT (добавлено расширением XR_EXT_spatial_plane_tracking).
XR_SPATIAL_COMPONENT_TYPE_MESH_2D_EXT
Компонент, который предоставляет двухмерную сетку для пространственного объекта. Соответствующая структура списка – XrSpatialComponentMesh2DListEXT. Соответствующая структура данных – XrSpatialMeshDataEXT (добавлено расширением XR_EXT_spatial_plane_tracking).
XR_SPATIAL_COMPONENT_TYPE_POLYGON_2D_EXT
Компонент, который предоставляет двумерный многоугольник границы для пространственного объекта. Соответствующая структура списка – XrSpatialComponentPolygon2DListEXT. Соответствующая структура данных – XrSpatialPolygon2DDataEXT (добавлено расширением XR_EXT_spatial_plane_tracking).
XR_SPATIAL_COMPONENT_TYPE_PLANE_SEMANTIC_LABEL_EXT
Компонент, который предоставляет семантическую метку для плоскости. Соответствующая структура списка – XrSpatialComponentPlaneSemanticLabelListEXT. Соответствующая структура данных – XrSpatialPlaneSemanticLabelEXT (добавлено расширением XR_EXT_spatial_plane_tracking).
XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT
Компонент, описывающий тип, идентификатор и местоположение маркера. Соответствующая структура списка – XrSpatialComponentMarkerListEXT. Соответствующая структура данных – XrSpatialMarkerDataEXT (добавлено расширением XR_EXT_spatial_marker_tracking).
XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT
Компонент, который предоставляет семантический ярлык для сцены. Соответствующая структура списка – XrSpatialComponentObjectSemanticLabelListEXT. Соответствующая структура данных – XrSpatialObjectSemanticLabelEXT . (Добавлено расширением XR_EXT_spatial_object_tracking)
XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT
Компонент, который предоставляет семантический ярлык для клавиатуры. Соответствующая структура списка – XrSpatialComponentKeyboardSemanticLabelListEXT. Соответствующая структура данных – XrSpatialKeyboardSemanticLabelEXT (добавлена расширением XR_EXT_spatial_object_tracking).
XR_SPATIAL_COMPONENT_TYPE_MOUSE_SEMANTIC_LABEL_EXT
Компонент, который предоставляет семантический ярлык для мыши. Соответствующая структура списка – XrSpatialComponentMouseSemanticLabelListEXT. Соответствующая структура данных – XrSpatialMouseSemanticLabelEXT (добавлена расширением XR_EXT_spatial_object_tracking).
XR_SPATIAL_COMPONENT_TYPE_ANCHOR_EXT
Компонент, который предоставляет местоположение для привязки. Соответствующая структура списка – XrSpatialComponentAnchorListEXT. Соответствующая структура данных – XrPosef (добавлено расширением XR_EXT_spatial_anchor).
XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_EXT
Компонент, который предоставляет постоянный UUID для пространственного объекта. Соответствующая структура списка – XrSpatialComponentPersistenceListEXT. Соответствующая структура данных – XrSpatialPersistenceDataEXT (добавлено расширением XR_EXT_spatial_persistence).
XR_SPATIAL_COMPONENT_TYPE_IMAGE_2D_EXT
Компонент, описывающий тип плоского изображения. Соответствующая структура списка – XrSpatialComponentImage2DListEXT, а структура данных – XrSpatialImageSizeEXT . (Добавлено расширением XR_EXT_spatial_image_tracking)
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT
Компонент, который предоставляет нормали для 3D-сетки пространственного объекта. Соответствующая структура списка – XrSpatialComponentMesh3DNormalsListEXT. Соответствующая структура данных – XrSpatialBufferEXT (добавлено расширением XR_EXT_spatial_mesh_tracking).
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT
Компонент, который предоставляет семантические ярлыки для каждой вершины 3D-сетки пространственного объекта. Соответствующая структура списка – XrSpatialComponentMesh3DVertexSemanticLabelsListEXT. Соответствующая структура данных – XrSpatialBufferEXT. Данные в буфере сопоставляются с XrSpatialMeshSemanticLabelEXT (добавлено расширением XR_EXT_spatial_mesh_tracking).
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT
Компонент, который предоставляет семантические ярлыки для каждой треугольной грани 3D-сетки пространственного объекта. Соответствующая структура списка – XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT. Соответствующая структура данных – XrSpatialBufferEXT. Данные в буфере сопоставляются с XrSpatialMeshSemanticLabelEXT (добавлено расширением XR_EXT_spatial_mesh_tracking).
XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_ANDROID
Компонент, который предоставляет семантический ярлык для объекта. Соответствующая структура списка – XrSpatialComponentObjectSemanticLabelListANDROID. Соответствующая структура данных – XrSpatialObjectSemanticLabelANDROID (добавлено расширением XR_ANDROID_spatial_object_tracking).
XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID
Компонент, который предоставляет позу попадания луча в объект. Соответствующая структура списка – XrSpatialComponentRaycastResultListANDROID, а структура данных – XrSpatialRaycastResultDataANDROID (добавлено расширением XR_ANDROID_spatial_discovery_raycast).
XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID
Компонент, который предоставляет идентификатор объекта, включающего прикрепленный объект. Соответствующая структура списка – XrSpatialComponentSubsumedByListANDROID. Соответствующая структура данных – XrSpatialEntityIdEXT (добавлена расширением XR_ANDROID_spatial_component_subsumed_by).
XR_SPATIAL_COMPONENT_TYPE_ROOM_ANDROIDSYS
Компонент, который предоставляет размеры и тип комнаты в виде прямоугольного параллелепипеда. Соответствующая структура списка – XrSpatialComponentRoomListANDROIDSYS. Соответствующая структура данных – XrSpatialRoomDataANDROIDSYS (добавлено расширением XR_ANDROIDSYS_spatial_room_tracking).
XR_SPATIAL_COMPONENT_TYPE_MATERIAL_TYPE_ANDROIDSYS
Компонент, который предоставляет тип материала граничной поверхности. Соответствующая структура списка – XrSpatialComponentMaterialTypeListANDROIDSYS. Соответствующая структура данных – XrSpatialMaterialTypeANDROIDSYS (добавлено расширением XR_ANDROIDSYS_spatial_room_tracking).
XR_SPATIAL_COMPONENT_TYPE_CONFIDENCE_ANDROIDSYS
Компонент, который предоставляет уровень достоверности отслеживаемого объекта. Соответствующая структура списка – XrSpatialComponentConfidenceListANDROIDSYS. Соответствующая структура данных – float (добавлено расширением XR_ANDROIDSYS_spatial_room_tracking).
XR_SPATIAL_COMPONENT_TYPE_ROOM_EMPTINESS_ANDROIDSYS
Компонент, который предоставляет информацию о том, пуста ли комната. Соответствующая структура списка – XrSpatialComponentRoomEmptinessListANDROIDSYS. Соответствующая структура данных – float (добавлено расширением XR_ANDROIDSYS_spatial_room_tracking).
XR_SPATIAL_COMPONENT_TYPE_OCCUPANCY_GRID_ANDROIDX1
Компонент, который предоставляет информацию о сетке занятости прикрепленного объекта. Соответствующая структура списка – XrSpatialComponentOccupancyGridListANDROIDX1, а структура данных – XrSpatialOccupancyGridDataANDROIDX1 (добавлено расширением XR_ANDROIDX1_spatial_occupancy_grid).
XR_SPATIAL_COMPONENT_TYPE_ANNOTATION_QUAD_ANDROID
Компонент, описывающий аннотацию четырехугольника. Соответствующая структура списка – XrSpatialComponentAnnotationQuadListANDROID. Соответствующая структура данных – XrSpatialAnnotationQuadDataANDROID (добавлено расширением XR_ANDROID_spatial_annotation_tracking).
XR_SPATIAL_COMPONENT_TYPE_STREETSCAPE_GEOMETRY_METADATA_ANDROIDX2
Компонент, предоставляющий метаданные для геометрии уличной панорамы. Соответствующая структура списка – XrSpatialComponentStreetscapeGeometryMetadataListANDROIDX2. Соответствующая структура данных – XrSpatialStreetscapeGeometryMetadataANDROIDX2. Добавлено расширением XR_ANDROIDX2_geospatial_streetscape.
XR_SPATIAL_COMPONENT_TYPE_GEOMETRY_POINT_ANDROID
Компонент, который идентифицирует объект как геометрическую точку. Для этого типа компонента нет соответствующего списка или структуры данных. Наличие этого компонента указывает на то, что объект можно прикрепить к якорю. (Добавлено расширением XR_ANDROID_spatial_geometry_point)
XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_SCOPES_ANDROIDX1
Компонент, описывающий области хранения, в которых хранится объект. Если среда выполнения поддерживает XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_EXT, она должна также поддерживать этот компонент. Соответствующая структура данных – XrSpatialBufferEXT . Структура соответствующего списка: XrSpatialComponentPersistenceScopeDataListANDROIDX1 . (Добавлено расширением XR_ANDROIDX1_spatial_anchor_cloud_sharing)
Возможности и настройка пространственного режима
Пространственные возможности определяют способность среды выполнения обнаруживать объекты, имеющие гарантированный набор компонентов. Приложения включают компоненты пространственной возможности при создании XrSpatialContextEXT, а среда выполнения должна предоставлять только включенные компоненты для обнаруженных объектов. Например, если среда выполнения сообщает, что один из компонентов для определенной возможности – это семантические ярлыки, значит приложение может включить их в конфигурации этой возможности, а среда выполнения должна предоставлять компонент семантических ярлыков, только если он настроен.
typedef enum XrSpatialCapabilityEXT {
XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT = 1000741000,
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT = 1000743000,
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE_EXT = 1000743001,
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_EXT = 1000743002,
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXT = 1000743003,
XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT = 1000744000,
XR_SPATIAL_CAPABILITY_ANCHOR_EXT = 1000762000,
XR_SPATIAL_CAPABILITY_IMAGE_TRACKING_EXT = 1000782000,
XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT = 1000783000,
XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_ANDROID = 1000785000,
XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID = 1000786000,
XR_SPATIAL_CAPABILITY_ROOM_TRACKING_ANDROIDSYS = 1000792000,
XR_SPATIAL_CAPABILITY_ROOM_BOUNDARY_TRACKING_ANDROIDSYS = 1000792001,
XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID = 1000794000,
XR_SPATIAL_CAPABILITY_STREETSCAPE_GEOMETRY_ANDROIDX2 = 1000798000,
XR_SPATIAL_CAPABILITY_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialCapabilityEXT;
Перечисление XrSpatialCapabilityEXT определяет различные типы возможностей, которые может поддерживать среда выполнения.
Перечисляемые значения:
Описание перечисления
XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT
Отслеживание самолетов (добавлено расширением "XR_EXT_spatial_plane_tracking")
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT
Возможность обнаруживать и отслеживать QR-коды. (Добавлено расширением XR_EXT_spatial_marker_tracking)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE_EXT
Возможность обнаруживать и отслеживать микро-QR-коды. (Добавлено расширением XR_EXT_spatial_marker_tracking)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_EXT
Возможность обнаруживать и отслеживать маркеры ArUco. (Добавлено расширением XR_EXT_spatial_marker_tracking)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXT
Возможность обнаруживать и отслеживать AprilTags. (Добавлено расширением XR_EXT_spatial_marker_tracking)
XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT
Отслеживание объектов (добавлено расширением XR_EXT_spatial_object_tracking)
XR_SPATIAL_CAPABILITY_ANCHOR_EXT
Возможность создавать пространственные привязки (добавлено расширением XR_EXT_spatial_anchor)
XR_SPATIAL_CAPABILITY_IMAGE_TRACKING_EXT
Возможность обнаруживать и отслеживать плоские референсные изображения. (Добавлено расширением XR_EXT_spatial_image_tracking)
XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT
Возможность отслеживать сетку окружения. (Добавлено расширением XR_EXT_spatial_mesh_tracking)
XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_ANDROID
Отслеживание объектов (добавлено расширением XR_ANDROID_spatial_object_tracking)
XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID
Трассировка лучей по буферу глубины (добавлено расширением XR_ANDROID_spatial_discovery_raycast)
XR_SPATIAL_CAPABILITY_ROOM_TRACKING_ANDROIDSYS
Возможность отслеживать комнату (добавлено расширением XR_ANDROIDSYS_spatial_room_tracking)
XR_SPATIAL_CAPABILITY_ROOM_BOUNDARY_TRACKING_ANDROIDSYS
Возможность отслеживать границы комнаты (добавлено расширением XR_ANDROIDSYS_spatial_room_tracking)
XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID
Отслеживание заметок (добавлено расширением XR_ANDROID_spatial_annotation_tracking)
XR_SPATIAL_CAPABILITY_STREETSCAPE_GEOMETRY_ANDROIDX2
Геометрия уличного пейзажа (добавлено расширением XR_ANDROIDX2_geospatial_streetscape)
Функция xrEnumerateSpatialCapabilitiesEXT определяется следующим образом:
XrResult xrEnumerateSpatialCapabilitiesEXT(
XrInstance instance,
XrSystemId systemId,
uint32_t capabilityCapacityInput,
uint32_t* capabilityCountOutput,
XrSpatialCapabilityEXT* capabilities);
Описание параметров
instance– дескриптор XrInstance .systemId– этоXrSystemId, пространственные возможности которого будут перечислены.capabilityCapacityInput– емкость массиваcapabilitiesили 0, если нужно получить требуемую емкость.capabilityCountOutput– количество возможностей или требуемый объем ресурсов, еслиcapabilityCapacityInputнедостаточно.capabilities– это массив XrSpatialCapabilityEXT . Может бытьNULL, еслиcapabilityCapacityInputравно 0.- Подробное описание того, как получить нужный размер
capabilities, приведено в разделе Параметры размера буфера.
Приложение может перечислить список пространственных возможностей, поддерживаемых заданным XrSystemId, с помощью xrEnumerateSpatialCapabilitiesEXT .
Среда выполнения не должна перечислять пространственные возможности, расширение которых не включено для instance .
Допустимое использование (неявное)
- Расширение
XR_EXT_spatial_entityдолжно быть включено до вызова xrEnumerateSpatialCapabilitiesEXT. -
instanceдолжен быть действительным дескриптором XrInstance. -
capabilityCountOutputдолжен быть указателем на значениеuint32_t. - Если
capabilityCapacityInputне равно0,capabilitiesдолжен быть указателем на массив значенийcapabilityCapacityInputXrSpatialCapabilityEXT.
Коды возврата
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
Функция xrEnumerateSpatialCapabilityComponentTypesEXT определяется следующим образом:
XrResult xrEnumerateSpatialCapabilityComponentTypesEXT(
XrInstance instance,
XrSystemId systemId,
XrSpatialCapabilityEXT capability,
XrSpatialCapabilityComponentTypesEXT* capabilityComponents);
Описание параметров
instance– дескриптор XrInstance .systemId– этоXrSystemId, компоненты пространственных возможностей которого будут перечислены.capability– это XrSpatialCapabilityEXT, для которого будут перечислены компоненты.capabilityComponents– указатель на XrSpatialCapabilityComponentTypesEXT, структуру ввода-вывода, в которой заполняется массив, выделенный приложением.
Эта функция перечисляет типы компонентов, которые заданная функция предоставляет своим объектам в системе в соответствии с конфигурацией.
Приложение может использовать типы компонентов, перечисленные в XrSpatialCapabilityComponentTypesEXT :: componentTypes, чтобы понять, какие компоненты systemId поддерживает для capability, и может использовать этот список, чтобы определить, какая конфигурация для capability является допустимой при создании XrSpatialContextEXT для него.
Среда выполнения должна возвращать XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT, если capability не перечислено в xrEnumerateSpatialCapabilitiesEXT .
Среда выполнения не должна перечислять типы пространственных компонентов, расширение которых не включено для instance .
Допустимое использование (неявное)
- Расширение
XR_EXT_spatial_entityдолжно быть включено до вызова xrEnumerateSpatialCapabilityComponentTypesEXT. -
instanceдолжен быть действительным дескриптором XrInstance. -
capabilityдолжно быть допустимым значением XrSpatialCapabilityEXT. -
capabilityComponentsдолжен быть указателем на структуру XrSpatialCapabilityComponentTypesEXT.
Коды возврата
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXTXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
Структура XrSpatialCapabilityComponentTypesEXT определяется следующим образом:
typedef struct XrSpatialCapabilityComponentTypesEXT {
XrStructureType type;
void* next;
uint32_t componentTypeCapacityInput;
uint32_t componentTypeCountOutput;
XrSpatialComponentTypeEXT* componentTypes;
} XrSpatialCapabilityComponentTypesEXT;
Описания участников
type– это XrStructureType этой структуры.next– этоNULLили указатель на следующую структуру в цепочке. Такие структуры не определены в ядре OpenXR или этом расширении.componentTypeCapacityInput– емкость массива или 0, если нужно получить требуемую емкость.componentTypeCountOutput– количество типов компонентов или требуемая емкость, еслиcomponentTypeCapacityInputнедостаточно.componentTypes– массив XrSpatialComponentTypeEXT . Может бытьNULL, еслиcomponentTypeCapacityInputравно 0.- Подробное описание того, как получить нужный размер
componentTypes, приведено в разделе Параметры размера буфера.
Допустимое использование (неявное)
- Расширение
XR_EXT_spatial_entityдолжно быть включено до использования XrSpatialCapabilityComponentTypesEXT. -
typeдолжно бытьXR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXT -
nextдолжно бытьNULLили действительным указателем на следующую структуру в цепочке структур. - Если
componentTypeCapacityInputне равно0,componentTypesдолжен быть указателем на массив значенийcomponentTypeCapacityInputXrSpatialComponentTypeEXT.
Функции пространственного звука
typedef enum XrSpatialCapabilityFeatureEXT {
XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_FIXED_SIZE_MARKERS_EXT = 1000743000,
XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_STATIC_MARKERS_EXT = 1000743001,
XR_SPATIAL_CAPABILITY_FEATURE_OBJECT_SEMANTIC_LABEL_SUBSET_EXT = 1000744000,
XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID = 1000761000,
XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID = 1000761001,
XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID = 1000761002,
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_AUTOMATIC_SIZE_IMAGES_EXT = 1000782000,
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_STATIC_IMAGES_EXT = 1000782001,
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_FIXED_SIZE_IMAGES_EXT = 1000782002,
XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT = 1000783000,
XR_SPATIAL_CAPABILITY_FEATURE_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialCapabilityFeatureEXT;
Некоторые возможности имеют параметры, доступные приложению, для настройки того, как данные компонента вычисляются средой выполнения. Эти аспекты параметризации/конфигурируемости называются функциями возможностей. Например, для отслеживания изображений среда выполнения может поддерживать функцию, позволяющую приложению указывать, являются ли отслеживаемые изображения стационарными или нет.
Предоставление этой информации среде выполнения через структуру конфигурации не должно изменять набор типов компонентов, присутствующих в связанных объектах, например в отслеживаемом изображении. Однако среда выполнения может оптимизировать, например, возможности отслеживания изображений и улучшить работу приложения.
Такие функции представлены XrSpatialCapabilityFeatureEXT, и приложение перечисляет их с помощью xrEnumerateSpatialCapabilityFeaturesEXT .
Для каждой функции есть соответствующая структура конфигурации. Такие структуры конфигурации должны быть связаны с XrSpatialCapabilityConfigurationBaseHeaderEXT :: next соответствующей функции.
Перечисляемые значения:
Описание перечисления
XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_FIXED_SIZE_MARKERS_EXT
Функция, позволяющая приложениям указывать размер маркеров. Соответствующая структура конфигурации – XrSpatialMarkerSizeEXT (добавлена расширением XR_EXT_spatial_marker_tracking).
XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_STATIC_MARKERS_EXT
Функция, позволяющая приложениям указывать, являются ли маркеры статическими. Соответствующая структура конфигурации – XrSpatialMarkerStaticOptimizationEXT (добавлена расширением XR_EXT_spatial_marker_tracking).
XR_SPATIAL_CAPABILITY_FEATURE_OBJECT_SEMANTIC_LABEL_SUBSET_EXT
Пространственная функция, позволяющая приложениям указывать подмножество ярлыков из XrSpatialObjectSemanticLabelEXT для отслеживания средой выполнения. Соответствующая структура конфигурации – XrSpatialFeatureObjectSemanticLabelSubsetEXT . (Добавлено расширением XR_EXT_spatial_object_tracking)
XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID
Среда выполнения поддерживает фильтр XrSpatialBoundsSpherefANDROID для XrSpatialDiscoverySnapshotCreateInfoEXT. При создании пространственного контекста не требуется включать структуру конфигурации. (Добавлено расширением XR_ANDROID_spatial_discovery_bounds)
XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID
Среда выполнения поддерживает фильтр XrSpatialBoundsBoxfANDROID для XrSpatialDiscoverySnapshotCreateInfoEXT. При создании пространственного контекста не требуется включать структуру конфигурации. (Добавлено расширением XR_ANDROID_spatial_discovery_bounds)
XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID
Среда выполнения поддерживает фильтр XrSpatialBoundsFrustumfANDROID для XrSpatialDiscoverySnapshotCreateInfoEXT. При создании пространственного контекста не требуется включать структуру конфигурации. (Добавлено расширением XR_ANDROID_spatial_discovery_bounds)
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_AUTOMATIC_SIZE_IMAGES_EXT
Среда выполнения поддерживает автоматическое определение физического размера обнаруженных и отслеживаемых изображений. Соответствующая структура конфигурации – XrSpatialImageSizeEXT (добавлена расширением XR_EXT_spatial_image_tracking).
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_STATIC_IMAGES_EXT
Среда выполнения поддерживает XrSpatialImageStaticOptimizationEXT . Соответствующая структура конфигурации – XrSpatialImageStaticOptimizationEXT . (Добавлено расширением XR_EXT_spatial_image_tracking)
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_FIXED_SIZE_IMAGES_EXT
Среда выполнения поддерживает XrSpatialImageSizeEXT . Соответствующая структура конфигурации – XrSpatialImageSizeEXT (добавлена расширением XR_EXT_spatial_image_tracking).
XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT
Функция, позволяющая отслеживать водонепроницаемую сетку окружающей среды. Соответствующая структура конфигурации – XrSpatialFeatureTrackWatertightMeshEXT . (Добавлено расширением XR_EXT_spatial_mesh_tracking)
Функция xrEnumerateSpatialCapabilityFeaturesEXT определяется следующим образом:
XrResult xrEnumerateSpatialCapabilityFeaturesEXT(
XrInstance instance,
XrSystemId systemId,
XrSpatialCapabilityEXT capability,
uint32_t capabilityFeatureCapacityInput,
uint32_t* capabilityFeatureCountOutput,
XrSpatialCapabilityFeatureEXT* capabilityFeatures);
Описание параметров
instance– дескриптор XrInstance .systemId– этоXrSystemId, пространственные возможности которого будут перечислены.capability– это XrSpatialCapabilityEXT, для которого будут перечислены функции.capabilityFeatureCapacityInput– емкость массива или 0, если нужно получить требуемую емкость.capabilityFeatureCountOutput– количество функций или необходимая емкость, еслиcapabilityFeatureCapacityInputнедостаточно.capabilityFeatures– это массив XrSpatialCapabilityFeatureEXT . Может бытьNULL, еслиcapabilityFeatureCapacityInputравно 0.- Подробное описание того, как получить нужный размер
capabilityFeatures, приведено в разделе Параметры размера буфера.
Приложение обнаруживает функции, поддерживаемые определенной системой для XrSpatialCapabilityEXT, с помощью xrEnumerateSpatialCapabilityFeaturesEXT .
Для возможностей с доступными функциями приложение выбирает одну или несколько функций, которые нужно включить, и предоставляет соответствующую структуру конфигурации в следующей цепочке структур конфигурации возможностей в XrSpatialContextCreateInfoEXT :: capabilityConfigs .
Если capability не является возможностью, перечисленной в xrEnumerateSpatialCapabilitiesEXT, среда выполнения должна возвращать XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT .
Среда выполнения не должна перечислять функции пространственного звука, расширение которых не включено для instance .
Допустимое использование (неявное)
- Расширение
XR_EXT_spatial_entityдолжно быть включено до вызова xrEnumerateSpatialCapabilityFeaturesEXT. -
instanceдолжен быть действительным дескриптором XrInstance. -
capabilityдолжно быть допустимым значением XrSpatialCapabilityEXT. -
capabilityFeatureCountOutputдолжен быть указателем на значениеuint32_t. - Если
capabilityFeatureCapacityInputне равно0,capabilityFeaturesдолжен быть указателем на массив значенийcapabilityFeatureCapacityInputXrSpatialCapabilityFeatureEXT.
Коды возврата
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXTXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
Пространственный контекст
Создание пространственного контекста
XR_DEFINE_HANDLE(XrSpatialContextEXT)
Дескриптор XrSpatialContextEXT представляет ресурсы для обнаружения и обновления некоторого количества пространственных объектов в среде пользователя. Приложение может использовать этот дескриптор для обнаружения и обновления пространственных объектов с помощью других функций в этом расширении.
Функция xrCreateSpatialContextAsyncEXT определяется следующим образом:
XrResult xrCreateSpatialContextAsyncEXT(
XrSession session,
const XrSpatialContextCreateInfoEXT* createInfo,
XrFutureEXT* future);
Описание параметров
session– это XrSession, в котором будет активен пространственный контекст.createInfo– это XrSpatialContextCreateInfoEXT, используемый для указания параметров пространственного контекста.future– указатель наXrFutureEXT.
Приложение может создать дескриптор XrSpatialContextEXT, выполнив следующие действия:
- Предоставление производных структур XrSpatialCapabilityConfigurationBaseHeaderEXT в XrSpatialContextCreateInfoEXT ::
capabilityConfigs, чтобы включить возможности и компоненты для них. - Настройка самих возможностей с помощью соответствующих структур конфигурации XrSpatialCapabilityFeatureEXT .
Среда выполнения должна возвращать XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT, если XrSpatialContextCreateInfoEXT ::capabilityConfigCount равно 0. Для дескриптора пространственного контекста требуется хотя бы одна возможность.
Среда выполнения должна возвращать XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT, если какая-либо функция в массиве XrSpatialContextCreateInfoEXT :: capabilityConfigs не перечислена в xrEnumerateSpatialCapabilitiesEXT .
Среда выполнения должна возвращать XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT, если любое значение XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponentCount в XrSpatialContextCreateInfoEXT :: capabilityConfigs равно 0. Конфигурация функции не будет полной без списка типов компонентов, которые нужно включить для этой функции.
Среда выполнения должна возвращать XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT, если какой-либо тип компонента, указанный в XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents, не перечислен для XrSpatialCapabilityConfigurationBaseHeaderEXT :: capability в xrEnumerateSpatialCapabilityComponentTypesEXT .
Если какая-либо из структур в следующей цепочке XrSpatialContextCreateInfoEXT :: capabilityConfigs соответствует XrSpatialCapabilityFeatureEXT, которая не перечислена для этой возможности в xrEnumerateSpatialCapabilityFeaturesEXT, среда выполнения должна игнорировать эту структуру XrSpatialCapabilityFeatureEXT.
Среда выполнения должна возвращать XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT, если XrSpatialContextCreateInfoEXT :: capabilityConfigs содержит несколько структур с одинаковым XrSpatialCapabilityConfigurationBaseHeaderEXT :: capability .
Чтобы обеспечить оптимальное использование системных ресурсов, среда выполнения может использовать конфигурации, указанные в массиве XrSpatialContextCreateInfoEXT, для подготовки к пространственным запросам. Например, среда выполнения, поддерживающая отслеживание плоскостей, может начать отслеживание только в том случае, если приложение создаст дескриптор пространственного контекста, содержащий функцию отслеживания плоскостей. Если у настроенных возможностей длительное время прогрева, вызовы xrCreateSpatialDiscoverySnapshotAsyncEXT могут привести к пустому снимку. Приложение может дождаться XrEventDataSpatialDiscoveryRecommendedEXT, прежде чем использовать xrCreateSpatialDiscoverySnapshotAsyncEXT, чтобы убедиться, что базовые службы отслеживания запущены.
Если среда выполнения применяет систему разрешений для управления доступом приложения к пространственным возможностям, настраиваемым для XrSpatialContextEXT, то среда выполнения должна возвращать XR_ERROR_PERMISSION_INSUFFICIENT, если эти разрешения не были предоставлены приложению.
Эта функция запускает асинхронную операцию и создает соответствующий объект XrFutureEXT , который можно использовать с xrPollFutureEXT и связанными функциями. Возвращаемое значение этой функции указывает только на то, были ли параметры приемлемыми для планирования асинхронной операции. Соответствующая функция завершения – xrCreateSpatialContextCompleteEXT. Ее можно использовать, когда объект future из этой функции находится в состоянии READY, а выходные данные заполняются этой функцией в структуре завершения XrCreateSpatialContextCompletionEXT.
Допустимое использование (неявное)
- Расширение
XR_EXT_spatial_entityдолжно быть включено до вызова xrCreateSpatialContextAsyncEXT. -
sessionдолжен быть действительным дескриптором XrSession. -
createInfoдолжен быть указателем на действительную структуру XrSpatialContextCreateInfoEXT. -
futureдолжен быть указателем на значениеXrFutureEXT.
Коды возврата
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_PERMISSION_INSUFFICIENTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXTXR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXTXR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXTXR_ERROR_VALIDATION_FAILUREXR_ERROR_TIME_INVALID(если включен параметрXR_ANDROID_spatial_annotation_tracking)
Структура XrSpatialContextCreateInfoEXT определяется следующим образом:
typedef struct XrSpatialContextCreateInfoEXT {
XrStructureType type;
const void* next;
uint32_t capabilityConfigCount;
const XrSpatialCapabilityConfigurationBaseHeaderEXT* const* capabilityConfigs;
} XrSpatialContextCreateInfoEXT;
Описания участников
type– это XrStructureType этой структуры.next– этоNULLили указатель на следующую структуру в цепочке. Такие структуры не определены в ядре OpenXR или этом расширении.capabilityConfigCount– этоuint32_t, описывающий количество элементов в массивеcapabilityConfigs.capabilityConfigs– указатель на массив указателей XrSpatialCapabilityConfigurationBaseHeaderEXT.
Структура XrSpatialContextCreateInfoEXT описывает информацию, необходимую для создания дескриптора XrSpatialContextEXT.
Допустимое использование (неявное)
- Расширение
XR_EXT_spatial_entityдолжно быть включено до использования XrSpatialContextCreateInfoEXT. -
typeдолжно бытьXR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXT -
nextдолжен бытьNULLили действительным указателем на следующую структуру в цепочке структур . См. также XrSpatialContextPersistenceConfigEXT. -
capabilityConfigsдолжен быть указателем на массив изcapabilityConfigCountдействительных структур на основе XrSpatialCapabilityConfigurationBaseHeaderEXT. См. также: XrSpatialCapabilityConfigurationAnchorEXT , XrSpatialCapabilityConfigurationAnnotationTrackingANDROID , XrSpatialCapabilityConfigurationAprilTagEXT , XrSpatialCapabilityConfigurationArucoMarkerEXT , XrSpatialCapabilityConfigurationDepthRaycastANDROID , XrSpatialCapabilityConfigurationImageTrackingEXT , XrSpatialCapabilityConfigurationMeshTrackingEXT , XrSpatialCapabilityConfigurationMicroQrCodeEXT , XrSpatialCapabilityConfigurationObjectTrackingANDROID , XrSpatialCapabilityConfigurationObjectTrackingEXT , XrSpatialCapabilityConfigurationPlaneTrackingEXT , XrSpatialCapabilityConfigurationQrCodeEXT , XrSpatialCapabilityConfigurationRoomBoundaryTrackingANDROIDSYS , XrSpatialCapabilityConfigurationRoomTrackingANDROIDSYS , XrSpatialCapabilityConfigurationStreetscapeGeometryANDROIDX2. - Значение параметра
capabilityConfigCountдолжно быть больше0.
Структура XrSpatialCapabilityConfigurationBaseHeaderEXT определяется следующим образом:
typedef struct XrSpatialCapabilityConfigurationBaseHeaderEXT {
XrStructureType type;
const void* next;
XrSpatialCapabilityEXT capability;
uint32_t enabledComponentCount;
const XrSpatialComponentTypeEXT* enabledComponents;
} XrSpatialCapabilityConfigurationBaseHeaderEXT;
Эта структура не используется в API напрямую, но ее дочерние структуры можно использовать с XrSpatialContextCreateInfoEXT для настройки пространственных возможностей.
Описания участников
type– это XrStructureType этой структуры.next– этоNULLили указатель на следующую структуру в цепочке.capability– это XrSpatialCapabilityEXT .enabledComponentCount– этоuint32_t, описывающий количество элементов в массивеenabledComponents.enabledComponents– указатель на массив XrSpatialComponentTypeEXT .
Среда выполнения должна возвращать XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT, если capability не перечислено в xrEnumerateSpatialCapabilitiesEXT . Среда выполнения должна возвращать XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT, если какой-либо тип компонента, указанный в enabledComponents, не перечислен для capability в xrEnumerateSpatialCapabilityComponentTypesEXT .
Допустимое использование (неявное)
- Расширение
XR_EXT_spatial_entityдолжно быть включено до использования XrSpatialCapabilityConfigurationBaseHeaderEXT. -
nextдолжно бытьNULLили действительным указателем на следующую структуру в цепочке структур. -
capabilityдолжно быть допустимым значением XrSpatialCapabilityEXT. -
enabledComponentsдолжен быть указателем на массив изenabledComponentCountдопустимых значений XrSpatialComponentTypeEXT. - Значение параметра
enabledComponentCountдолжно быть больше0.
Функция xrCreateSpatialContextCompleteEXT определяется следующим образом:
XrResult xrCreateSpatialContextCompleteEXT(
XrSession session,
XrFutureEXT future,
XrCreateSpatialContextCompletionEXT* completion);
Описание параметров
session– это XrSession, ранее переданный в xrCreateSpatialContextAsyncEXT ::session.future– этоXrFutureEXT, полученный от xrCreateSpatialContextAsyncEXT .completion– указатель на XrCreateSpatialContextCompletionEXT .
xrCreateSpatialContextCompleteEXT завершает асинхронную операцию, запущенную xrCreateSpatialContextAsyncEXT . Среда выполнения должна возвращать XR_ERROR_FUTURE_PENDING_EXT, если future не находится в состоянии готовности. Среда выполнения должна возвращать XR_ERROR_FUTURE_INVALID_EXT, если future уже завершено или отменено.
Допустимое использование (неявное)
- Расширение
XR_EXT_spatial_entityдолжно быть включено до вызова xrCreateSpatialContextCompleteEXT. -
sessionдолжен быть действительным дескриптором XrSession. -
completionдолжен быть указателем на структуру XrCreateSpatialContextCompletionEXT.
Коды возврата
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_FUTURE_INVALID_EXTXR_ERROR_FUTURE_PENDING_EXTXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_VALIDATION_FAILURE
Структура XrCreateSpatialContextCompletionEXT определяется следующим образом:
typedef struct XrCreateSpatialContextCompletionEXT {
XrStructureType type;
void* next;
XrResult futureResult;
XrSpatialContextEXT spatialContext;
} XrCreateSpatialContextCompletionEXT;
Описания участников
type– это XrStructureType этой структуры.next– этоNULLили указатель на следующую структуру в цепочке.futureResult– это XrResult операции создания пространственного контекста.spatialContext– это XrSpatialContextEXT, созданный с использованием данных и конфигурации в xrCreateSpatialContextAsyncEXT ::createInfo.
Коды возврата в будущем
Значения в поле "futureResult":
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_RUNTIME_FAILUREXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHEDXR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT
Если futureResult – код успешной проверки, то spatialContext должен быть действительным. Если spatialContext действителен, он остается таковым только в течение жизненного цикла xrCreateSpatialContextAsyncEXT :: session или до тех пор, пока приложение не уничтожит spatialContext с помощью xrDestroySpatialContextEXT (в зависимости от того, что произойдет раньше).
Допустимое использование (неявное)
- Расширение
XR_EXT_spatial_entityдолжно быть включено до использования XrCreateSpatialContextCompletionEXT. -
typeдолжно бытьXR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXT -
nextдолжно бытьNULLили действительным указателем на следующую структуру в цепочке структур. -
futureResultдолжно быть действительным значением XrResult. - Если
spatialContextне является XR_NULL_HANDLE ,spatialContextдолжен быть действительным дескриптором XrSpatialContextEXT.
Уничтожить пространственный контекст
Функция xrDestroySpatialContextEXT определяется следующим образом:
XrResult xrDestroySpatialContextEXT(
XrSpatialContextEXT spatialContext);
Описание параметров
spatialContext– это XrSpatialContextEXT, ранее созданный с помощью xrCreateSpatialContextAsyncEXT .
Приложение может вызвать функцию xrDestroySpatialContextEXT, чтобы освободить дескриптор spatialContext и базовые ресурсы после завершения обнаружения пространственных объектов и обновления задач. Если нет другого действительного XrSpatialContextEXT, созданного с теми же пространственными возможностями, что и spatialContext, этот вызов служит предложением среде выполнения отключить службы отслеживания, необходимые для этих возможностей, чтобы сэкономить системные ресурсы.
Допустимое использование (неявное)
- Расширение
XR_EXT_spatial_entityдолжно быть включено до вызова xrDestroySpatialContextEXT. -
spatialContextдолжен быть действительным дескриптором XrSpatialContextEXT.
Потокобезопасность
- Доступ к
spatialContextи любым дочерним дескрипторам должен быть синхронизирован извне.
Коды возврата
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
Представления пространственных объектов
Идентификатор пространственного объекта
XR_DEFINE_ATOM(XrSpatialEntityIdEXT)
XrSpatialEntityIdEXT используется для представления любого типа объекта, обнаруженного средой выполнения в пространственной среде пользователя. XrSpatialEntityIdEXT действителен для XrSpatialContextEXT, в котором он обнаружен, и среда выполнения не должна повторно использовать один и тот же XrSpatialEntityIdEXT для разных объектов в одном и том же XrSpatialContextEXT . Кроме того, среда выполнения не должна повторно использовать один и тот же XrSpatialEntityIdEXT в нескольких XrSpatialContextEXT в рамках одного XrSession, независимо от того, представляет ли он один и тот же объект или разные.
#define XR_NULL_SPATIAL_ENTITY_ID_EXT 0
XR_NULL_SPATIAL_ENTITY_ID_EXT – зарезервированное значение, представляющее недопустимый XrSpatialEntityIdEXT . Его можно передавать в функции API и получать из них только в том случае, если это явно разрешено.
Маркер пространственного объекта
XR_DEFINE_HANDLE(XrSpatialEntityEXT)
Дескриптор XrSpatialEntityEXT представляет пространственный объект. Приложение может создать такой дескриптор, чтобы сообщить среде выполнения о своем интересе к определенному объекту.
Создать дескриптор пространственного объекта по идентификатору
Функция xrCreateSpatialEntityFromIdEXT определяется следующим образом:
XrResult xrCreateSpatialEntityFromIdEXT(
XrSpatialContextEXT spatialContext,
const XrSpatialEntityFromIdCreateInfoEXT* createInfo,
XrSpatialEntityEXT* spatialEntity);
Описание параметров
spatialContext– это XrSpatialContextEXT, ранее созданный с помощью xrCreateSpatialContextAsyncEXT .createInfo– указатель на структуру XrSpatialEntityFromIdCreateInfoEXT.spatialEntity– возвращенный дескриптор XrSpatialEntityEXT.
Приложение может использовать xrCreateSpatialEntityFromIdEXT для создания дескриптора XrSpatialEntityEXT, который является ссылкой на объект, существующий в среде пользователя.
Среда выполнения должна возвращать XR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXT, если XrSpatialEntityFromIdCreateInfoEXT :: entityId не является действительным идентификатором для spatialContext .
Допустимое использование (неявное)
- Расширение
XR_EXT_spatial_entityдолжно быть включено до вызова xrCreateSpatialEntityFromIdEXT. -
spatialContextдолжен быть действительным дескриптором XrSpatialContextEXT. -
createInfoдолжен быть указателем на действительную структуру XrSpatialEntityFromIdCreateInfoEXT. -
spatialEntityдолжен быть указателем на дескриптор XrSpatialEntityEXT.
Коды возврата
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
Структура XrSpatialEntityFromIdCreateInfoEXT определяется следующим образом:
typedef struct XrSpatialEntityFromIdCreateInfoEXT {
XrStructureType type;
const void* next;
XrSpatialEntityIdEXT entityId;
} XrSpatialEntityFromIdCreateInfoEXT;
Описания участников
type– это XrStructureType этой структуры.next– этоNULLили указатель на следующую структуру в цепочке. Такие структуры не определены в ядре OpenXR или этом расширении.entityId– этоXrSpatialEntityIdEXTобъекта, для которого приложение хочет создать дескриптор.
Допустимое использование (неявное)
- Расширение
XR_EXT_spatial_entityдолжно быть включено до использования XrSpatialEntityFromIdCreateInfoEXT. -
typeдолжно бытьXR_TYPE_SPATIAL_ENTITY_FROM_ID_CREATE_INFO_EXT -
nextдолжно бытьNULLили действительным указателем на следующую структуру в цепочке структур.
Удалить дескриптор пространственного объекта
Функция xrDestroySpatialEntityEXT определяется следующим образом:
XrResult xrDestroySpatialEntityEXT(
XrSpatialEntityEXT spatialEntity);
Описание параметров
spatialEntity– дескриптор для XrSpatialEntityEXT, ранее созданный функцией, например xrCreateSpatialEntityFromIdEXT .
Приложение может использовать xrDestroySpatialEntityEXT, чтобы освободить дескриптор spatialEntity, когда объект, на который ссылается этот дескриптор, больше не нужен.
Допустимое использование (неявное)
- Расширение
XR_EXT_spatial_entityдолжно быть включено до вызова xrDestroySpatialEntityEXT. -
spatialEntityдолжен быть действительным дескриптором XrSpatialEntityEXT.
Потокобезопасность
- Доступ к
spatialEntityи любым дочерним дескрипторам должен быть синхронизирован извне.
Коды возврата
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
Пространственный снимок
XR_DEFINE_HANDLE(XrSpatialSnapshotEXT)
Приложение может создавать пространственные снимки для обнаружения пространственных объектов или обновления информации об известных пространственных объектах. Дескриптор XrSpatialSnapshotEXT представляет неизменяемые данные для обнаруженных или обновленных пространственных объектов и подмножества их компонентов, выбранных приложением. Пространственный снимок представляет собой согласованное представление объектов и данных их компонентов. После создания снимка его данные должны оставаться неизменными, пока он действителен.
Приложение может создавать любое количество снимков, но должно учитывать объем памяти, выделяемый для каждого нового снимка, и должно уничтожать снимки, когда они больше не нужны.
Создать снимок обнаружения
Функция xrCreateSpatialDiscoverySnapshotAsyncEXT определяется следующим образом:
XrResult xrCreateSpatialDiscoverySnapshotAsyncEXT(
XrSpatialContextEXT spatialContext,
const XrSpatialDiscoverySnapshotCreateInfoEXT* createInfo,
XrFutureEXT* future);
Описание параметров
spatialContext– это XrSpatialContextEXT, ранее созданный с помощью xrCreateSpatialContextAsyncEXT .createInfo– указатель на XrSpatialDiscoverySnapshotCreateInfoEXT .future– указатель наXrFutureEXT.
Приложение может обнаруживать пространственные объекты, создавая снимок обнаружения с помощью xrCreateSpatialDiscoverySnapshotAsyncEXT .
Эта функция запускает асинхронную операцию и создает соответствующий объект XrFutureEXT , который можно использовать с xrPollFutureEXT и связанными функциями. Возвращаемое значение этой функции указывает только на то, были ли параметры приемлемыми для планирования асинхронной операции. Соответствующая функция завершения – xrCreateSpatialDiscoverySnapshotCompleteEXT. Ее можно использовать, когда объект Future из этой функции находится в состоянии READY, а выходные данные заполняются этой функцией в структуре завершения XrCreateSpatialDiscoverySnapshotCompletionEXT.
Приложение может отправлять несколько запросов на создание снимка, не дожидаясь завершения предыдущего. Среда выполнения может обрабатывать и завершать создание снимков в любом порядке. Среда выполнения может отложить завершение создания снимка обнаружения, чтобы ограничить приложение, если ему необходимо сократить использование системных ресурсов из-за питания, температуры или других политик устройства.
Приложение может использовать XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes, чтобы отфильтровать список объектов и компонентов, данные которых среда выполнения должна включить в снимок. Если приложение предоставляет действительный список типов пространственных компонентов в XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes, то среда выполнения должна включать в снимок только пространственные объекты, у которых есть хотя бы один из компонентов, указанных в XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes . Кроме того, среда выполнения должна включать данные только для тех компонентов, которые есть в снимке.
Среда выполнения должна возвращать XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT, если какие-либо из XrSpatialComponentTypeEXT в XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes не включены для пространственных возможностей, переданных в XrSpatialContextCreateInfoEXT :: capabilityConfigs при создании spatialContext .
Если приложение не предоставляет список типов пространственных компонентов в XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes, среда выполнения должна включить в снимок все пространственные объекты, у которых есть набор компонентов, перечисленных в XrSpatialCapabilityConfigurationBaseHeaderEXT ::enabledComponents для возможностей, настроенных для spatialContext . Среда выполнения должна включать данные для всех включенных компонентов возможностей, настроенных для spatialContext .
Если XrEventDataReferenceSpaceChangePending находится в очереди до завершения future и XrEventDataReferenceSpaceChangePending :: poseValid имеет значение false, то среда выполнения может либо создать XrSpatialSnapshotEXT, в котором нет объектов, либо установить XrSpatialEntityTrackingStateEXT объектов, которые больше не могут быть обнаружены в XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace в XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time, на XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT или XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT . Среда выполнения не должна задавать для XrCreateSpatialContextCompletionEXT :: futureResult код ошибки из-за XrEventDataReferenceSpaceChangePending .
Допустимое использование (неявное)
- Расширение
XR_EXT_spatial_entityдолжно быть включено до вызова xrCreateSpatialDiscoverySnapshotAsyncEXT. -
spatialContextдолжен быть действительным дескриптором XrSpatialContextEXT. -
createInfoдолжен быть указателем на действительную структуру XrSpatialDiscoverySnapshotCreateInfoEXT. -
futureдолжен быть указателем на значениеXrFutureEXT.
Коды возврата
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXTXR_ERROR_VALIDATION_FAILURE
Структура XrSpatialDiscoverySnapshotCreateInfoEXT определяется следующим образом:
typedef struct XrSpatialDiscoverySnapshotCreateInfoEXT {
XrStructureType type;
const void* next;
uint32_t componentTypeCount;
const XrSpatialComponentTypeEXT* componentTypes;
} XrSpatialDiscoverySnapshotCreateInfoEXT;
Описания участников
type– это XrStructureType этой структуры.next– этоNULLили указатель на следующую структуру в цепочке. Такие структуры не определены в ядре OpenXR или этом расширении.componentTypeCount– этоuint32_t, описывающий количество элементов в массивеcomponentTypes.componentTypes– массив XrSpatialComponentTypeEXT .
Структура XrSpatialDiscoverySnapshotCreateInfoEXT описывает информацию, необходимую для создания дескриптора XrSpatialSnapshotEXT при обнаружении пространственных объектов.
Допустимое использование (неявное)
- Расширение
XR_EXT_spatial_entityдолжно быть включено до использования XrSpatialDiscoverySnapshotCreateInfoEXT. -
typeдолжно бытьXR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT -
nextдолжен бытьNULLили действительным указателем на следующую структуру в цепочке структур . См. также: XrSpatialBoundsBoxfANDROID , XrSpatialBoundsFrustumfANDROID , XrSpatialBoundsSpherefANDROID , XrSpatialDiscoveryPersistenceContextFilterANDROIDX1 , XrSpatialDiscoveryPersistenceUuidFilterEXT , XrSpatialDiscoveryRoomBoundaryFilterANDROIDSYS , XrSpatialDiscoveryUniqueEntitiesFilterANDROID , XrSpatialFilterTrackingStateEXT , XrSpatialRaycastInfoANDROID. - Если
componentTypeCountне равно0,componentTypesдолжен быть указателем на массив допустимых значенийcomponentTypeCountXrSpatialComponentTypeEXT.
Функция xrCreateSpatialDiscoverySnapshotCompleteEXT определяется следующим образом:
XrResult xrCreateSpatialDiscoverySnapshotCompleteEXT(
XrSpatialContextEXT spatialContext,
const XrCreateSpatialDiscoverySnapshotCompletionInfoEXT* createSnapshotCompletionInfo,
XrCreateSpatialDiscoverySnapshotCompletionEXT* completion);
Описание параметров
spatialContext– это XrSpatialContextEXT, ранее переданный в xrCreateSpatialDiscoverySnapshotAsyncEXT ::spatialContext.createSnapshotCompletionInfo– указатель на XrCreateSpatialDiscoverySnapshotCompletionInfoEXT, который предоставляет информацию о завершении запроса на создание снимка пространственного обнаружения.completion– указатель на XrCreateSpatialDiscoverySnapshotCompletionEXT .
xrCreateSpatialDiscoverySnapshotCompleteEXT завершает асинхронную операцию, запущенную xrCreateSpatialDiscoverySnapshotAsyncEXT . Среда выполнения должна возвращать XR_ERROR_FUTURE_PENDING_EXT, если XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: future не находится в состоянии готовности. Среда выполнения должна возвращать XR_ERROR_FUTURE_INVALID_EXT, если XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: future уже завершено или отменено.
Допустимое использование (неявное)
- Расширение
XR_EXT_spatial_entityдолжно быть включено до вызова xrCreateSpatialDiscoverySnapshotCompleteEXT. -
spatialContextдолжен быть действительным дескриптором XrSpatialContextEXT. -
createSnapshotCompletionInfoдолжен быть указателем на действительную структуру XrCreateSpatialDiscoverySnapshotCompletionInfoEXT. -
completionдолжен быть указателем на структуру XrCreateSpatialDiscoverySnapshotCompletionEXT.
Коды возврата
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_FUTURE_INVALID_EXTXR_ERROR_FUTURE_PENDING_EXTXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
Структура XrCreateSpatialDiscoverySnapshotCompletionInfoEXT определяется следующим образом:
typedef struct XrCreateSpatialDiscoverySnapshotCompletionInfoEXT {
XrStructureType type;
const void* next;
XrSpace baseSpace;
XrTime time;
XrFutureEXT future;
} XrCreateSpatialDiscoverySnapshotCompletionInfoEXT;
Описания участников
type– это XrStructureType этой структуры.next– этоNULLили указатель на следующую структуру в цепочке.baseSpace– это XrSpace, в котором будут находиться все местоположения обнаруженного XrSpatialSnapshotEXT.time– этоXrTime, в котором будут находиться все местоположения обнаруженного XrSpatialSnapshotEXT.future– этоXrFutureEXT, полученный от xrCreateSpatialDiscoverySnapshotAsyncEXT.
Местоположения в различных компонентах данных, включенных в созданный снимок, будут представлены в baseSpace, расположенном в time .
Допустимое использование (неявное)
- Расширение
XR_EXT_spatial_entityдолжно быть включено до использования XrCreateSpatialDiscoverySnapshotCompletionInfoEXT. -
typeдолжно бытьXR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXT -
nextдолжно бытьNULLили действительным указателем на следующую структуру в цепочке структур. -
baseSpaceдолжен быть действительным идентификатором XrSpace.
Структура XrCreateSpatialDiscoverySnapshotCompletionEXT определяется следующим образом:
typedef struct XrCreateSpatialDiscoverySnapshotCompletionEXT {
XrStructureType type;
void* next;
XrResult futureResult;
XrSpatialSnapshotEXT snapshot;
} XrCreateSpatialDiscoverySnapshotCompletionEXT;
Описания участников
type– это XrStructureType этой структуры.next– этоNULLили указатель на следующую структуру в цепочке.futureResult– это XrResult операции по созданию снимка пространственного обнаружения.snapshot– это XrSpatialSnapshotEXT, который можно использовать для запроса данных компонентов обнаруженных пространственных объектов.
Коды возврата в будущем
Значения в поле "futureResult":
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_RUNTIME_FAILUREXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHED
Допустимое использование (неявное)
- Расширение
XR_EXT_spatial_entityдолжно быть включено до использования XrCreateSpatialDiscoverySnapshotCompletionEXT. -
typeдолжно бытьXR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXT -
nextдолжно бытьNULLили действительным указателем на следующую структуру в цепочке структур. -
futureResultдолжно быть действительным значением XrResult. - Если
snapshotне равно XR_NULL_HANDLE ,snapshotдолжно быть действительным дескриптором XrSpatialSnapshotEXT.
Событие рекомендации в ленте рекомендаций
Структура XrEventDataSpatialDiscoveryRecommendedEXT определяется следующим образом:
typedef struct XrEventDataSpatialDiscoveryRecommendedEXT {
XrStructureType type;
const void* next;
XrSpatialContextEXT spatialContext;
} XrEventDataSpatialDiscoveryRecommendedEXT;
Описания участников
type– это XrStructureType этой структуры.next– этоNULLили указатель на следующую структуру в цепочке.spatialContext– это XrSpatialContextEXT, для которого среда выполнения рекомендует обнаружение.
Приложение может получить это событие с помощью xrPollEvent . Приложение может избежать чрезмерного количества вызовов xrCreateSpatialDiscoverySnapshotAsyncEXT для обнаружения пространственных объектов, ожидая этого события. Если приложение создает несколько снимков обнаружения с одним и тем же XrSpatialDiscoverySnapshotCreateInfoEXT между двумя событиями XrEventDataSpatialDiscoveryRecommendedEXT, полученные снимки могут содержать одни и те же объекты, поэтому создание снимков и запросы данных будут неэффективными.
Если вы будете ждать этого события, прежде чем создавать новый снимок, приложение не будет перегружать систему запросами на обнаружение, на которые среда выполнения может не возвращать новые данные. Это поможет избежать чрезмерного использования системных ресурсов и ограничения производительности из-за политик энергопотребления или тепловых политик устройства. Это также помогает обеспечить паритет между средами выполнения, которые обнаруживают пространственные объекты на лету с помощью отслеживания в реальном времени, и средами выполнения, которые предоставляют пространственные объекты из ранее записанного состояния (где среда выполнения может ставить в очередь событие рекомендации по обнаружению только один раз для каждого XrSpatialContextEXT).
Среда выполнения не должна ставить это событие в очередь, чтобы уведомлять приложение об изменениях или корректировках, внесенных в данные компонентов существующих пространственных объектов. Приложение может использовать xrCreateSpatialUpdateSnapshotEXT, чтобы отслеживать обновления данных компонентов для интересующих его пространственных объектов.
Среда выполнения может поставить в очередь событие рекомендации по поиску, не дожидаясь, пока приложение вызовет xrCreateSpatialDiscoverySnapshotAsyncEXT . Например, среда выполнения может принять решение о постановке в очередь события рекомендации по обнаружению на основе конфигурации XrSpatialContextEXT , собственного понимания среды вокруг пользователя (обнаружение новых объектов или потеря существующих) или для подсказки приложению подходящей частоты запросов на обнаружение, чтобы не перегружать системные ресурсы. Среда выполнения может не ставить это событие в очередь для XrSpatialContextEXT, если в окружении пользователя не обнаружено объектов в течение всего времени существования XrSpatialContextEXT .
Среда выполнения не должна ставить это событие в очередь для заданного spatialContext, пока приложение не завершит его создание с помощью xrCreateSpatialContextCompleteEXT .
После того как приложение вызовет xrDestroySpatialContextEXT , среда выполнения не должна ставить в очередь события рекомендаций по обнаружению для этого пространственного контекста или возвращать такие события для этого контекста из xrPollEvent .
Допустимое использование (неявное)
- Расширение
XR_EXT_spatial_entityдолжно быть включено до использования XrEventDataSpatialDiscoveryRecommendedEXT. -
typeдолжно бытьXR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT -
nextдолжно бытьNULLили действительным указателем на следующую структуру в цепочке структур.
Данные компонента запроса
Функция xrQuerySpatialComponentDataEXT определяется следующим образом:
XrResult xrQuerySpatialComponentDataEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialComponentDataQueryConditionEXT* queryCondition,
XrSpatialComponentDataQueryResultEXT* queryResult);
Описание параметров
snapshot– это XrSpatialSnapshotEXT, ранее предоставленный xrCreateSpatialDiscoverySnapshotCompleteEXT или xrCreateSpatialUpdateSnapshotEXT .queryCondition– указатель на структуру XrSpatialComponentDataQueryConditionEXT.queryResult– указатель на структуру XrSpatialComponentDataQueryResultEXT.
Приложение может использовать xrQuerySpatialComponentDataEXT, чтобы запрашивать данные компонентов объектов в снимке. Для этого нужно прикрепить структуру списка к XrSpatialComponentDataQueryResultEXT :: next, соответствующую каждому XrSpatialComponentTypeEXT в XrSpatialComponentDataQueryConditionEXT :: componentTypes .
Если приложение прикрепляет структуру списка к XrSpatialComponentDataQueryResultEXT :: next, которая не соответствует ни одному из компонентов, перечисленных в XrSpatialComponentDataQueryConditionEXT :: componentTypes, среда выполнения должна возвращать XR_ERROR_VALIDATION_FAILURE .
Приложение может прикрепить структуры списков, соответствующие только подмножеству компонентов, перечисленных в XrSpatialComponentDataQueryConditionEXT :: componentTypes . Приложение может полностью опустить структуры списка, если ему нужно знать только идентификаторы и состояние отслеживания пространственных объектов, которые соответствуют queryCondition . Среда выполнения не должна считать ошибкой отсутствие структур списков в цепочке XrSpatialComponentDataQueryResultEXT :: next.
Если XrEventDataReferenceSpaceChangePending находится в очереди и XrEventDataReferenceSpaceChangePending :: changeTime истекло, пока приложение запрашивает данные компонента из XrSpatialSnapshotEXT, приложение может использовать данные о событии, чтобы соответствующим образом скорректировать позы.
Среда выполнения должна заполнять XrSpatialComponentDataQueryResultEXT :: entityIds только объектами, у которых есть все компоненты, указанные в XrSpatialComponentDataQueryConditionEXT :: componentTypes . Если XrSpatialComponentDataQueryConditionEXT :: componentTypeCount равно 0, среда выполнения должна заполнить queryResult всеми объектами (и их состояниями отслеживания), которые есть в снимке. Если в XrSpatialComponentDataQueryConditionEXT :: next добавлены дополнительные условия запроса, среда выполнения должна обрабатывать их как оператор AND с доступностью типов компонентов, то есть среда выполнения должна заполнять XrSpatialComponentDataQueryResultEXT ::entityIds только объектами, которые соответствуют всем указанным условиям. Среда выполнения должна заполнять данные компонента в структурах списка в том же порядке, что и объекты в XrSpatialComponentDataQueryResultEXT :: entityIds, то есть данные компонента по заданному индексу в массиве структуры списка должны соответствовать объекту по тому же индексу.
Если состояние отслеживания для объекта не XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT, среда выполнения не должна изменять данные в индексе, соответствующем этому объекту в массиве, содержащемся в структурах списка, прикрепленных к XrSpatialComponentDataQueryResultEXT .
Допустимое использование (неявное)
- Расширение
XR_EXT_spatial_entityдолжно быть включено до вызова xrQuerySpatialComponentDataEXT. -
snapshotдолжен быть действительным дескриптором XrSpatialSnapshotEXT. -
queryConditionдолжен быть указателем на действительную структуру XrSpatialComponentDataQueryConditionEXT. -
queryResultдолжен быть указателем на структуру XrSpatialComponentDataQueryResultEXT.
Коды возврата
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_VALIDATION_FAILURE
Например, приложение создает XrSpatialSnapshotEXT, содержащий пять объектов, где:
- Объекты 1 и 2 содержат компоненты
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTиXR_SPATIAL_COMPONENT_TYPE_PARENT_EXT - Объекты 3 и 4 имеют компоненты
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXTиXR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT. - Объект 5 содержит компоненты
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTиXR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT.
XrSpatialEntityIdEXT
XrSpatialEntityIdEXT
1
1
2
2
3
3
4
4
5
5
Bounded2D
Bounded2D
Да
Да
Да
Да
Нет
Нет
Нет
Нет
Да
Да
Родитель
Родитель
Да
Да
Да
Да
Нет
Нет
Нет
Нет
Нет
Нет
Mesh3D
Mesh3D
Нет
Нет
Нет
Нет
Да
Да
Да
Да
Да
Да
Bounded3D
Bounded3D
Нет
Нет
Нет
Нет
Да
Да
Да
Да
Нет
Нет Текст не в формате SVG – не удается показать
Рисунок 20. Пример сводки
Вызов xrQuerySpatialComponentDataEXT для приведенного выше снимка с XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT в условии запроса приведет к тому, что объекты 1, 2 и 5 будут возвращены приложению, и приложение сможет прикрепить массив XrSpatialBounded2DDataEXT как часть структуры XrSpatialComponentBounded2DListEXT к следующей цепочке XrSpatialComponentDataQueryResultEXT, чтобы получить данные bounded2D.
XrSpatialEntityIdEXT
XrSpatialEntityIdEXT
1
1
2
2
5
5
Bounded2D
Bounded2D
Данные для entityId #1
Данные для entit...
Данные для entityId #2
Данные для entit...
Данные для entityId #5
Данные для entit...
entityIds
entityIds
далее
далее
XrSpatialComponent DataQueryResultEXT
XrSpatialComponent Dat...
bounds
bounds
XrSpatialComponent Bounded2DListEXT
XrSpatialComponent Bou... Текст не является SVG-файлом и не может быть показан
Рисунок 21. Пример результата запроса
Вызов xrQuerySpatialComponentDataEXT для приведенного выше снимка с компонентами XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT и XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT, указанными в условии запроса, приведет к тому, что в приложение будут возвращены объекты 3 и 4. Приложение может прикрепить массивы XrBoxf и XrSpatialMeshDataEXT как часть структур XrSpatialComponentBounded3DListEXT и XrSpatialComponentMesh3DListEXT соответственно к следующей цепочке XrSpatialComponentDataQueryResultEXT, чтобы получить данные компонента.
XrSpatialEntityIdEXT
XrSpatialEntityIdEXT
3
3
4
4
Bounded3D
Bounded3D
Данные для entityId #3
Данные для entit...
Данные для entityId #4
Данные для entit...
Mesh3D
Mesh3D
Данные для entityId #3
Данные для entit...
Данные для entityId #4
Данные для entit...
entityIds
entityIds
далее
далее
XrSpatialComponent DataQueryResultEXT
XrSpatialComponent Da...
bounds
bounds
далее
далее
XrSpatialComponent Bounded3DListEXT
XrSpatialComponent Bo...
XrSpatialComponent Mesh3DListEXT
XrSpatialComponent Me...
сетки
meshes Text is not SVG - cannot display
Рисунок 22. Пример результата запроса
Структура XrSpatialComponentDataQueryConditionEXT определяется следующим образом:
typedef struct XrSpatialComponentDataQueryConditionEXT {
XrStructureType type;
const void* next;
uint32_t componentTypeCount;
const XrSpatialComponentTypeEXT* componentTypes;
} XrSpatialComponentDataQueryConditionEXT;
Описания участников
type– это XrStructureType этой структуры.next– этоNULLили указатель на следующую структуру в цепочке.componentTypeCount– этоuint32_t, описывающий количество элементов в массивеcomponentTypes.componentTypes– массив XrSpatialComponentTypeEXT, для которого нужно получить данные из снимка.
Допустимое использование (неявное)
- Расширение
XR_EXT_spatial_entityдолжно быть включено до использования XrSpatialComponentDataQueryConditionEXT. -
typeдолжно бытьXR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT -
nextдолжен бытьNULLили действительным указателем на следующую структуру в цепочке структур . См. также: XrSpatialDiscoveryPersistenceUuidFilterEXT , XrSpatialFilterArchetypeEXT , XrSpatialFilterTrackingStateEXT. - Если
componentTypeCountне равно0,componentTypesдолжен быть указателем на массив допустимых значенийcomponentTypeCountXrSpatialComponentTypeEXT.
Структура XrSpatialComponentDataQueryResultEXT определяется следующим образом:
typedef struct XrSpatialComponentDataQueryResultEXT {
XrStructureType type;
void* next;
uint32_t entityIdCapacityInput;
uint32_t entityIdCountOutput;
XrSpatialEntityIdEXT* entityIds;
uint32_t entityStateCapacityInput;
uint32_t entityStateCountOutput;
XrSpatialEntityTrackingStateEXT* entityStates;
} XrSpatialComponentDataQueryResultEXT;
Описания участников
type– это XrStructureType этой структуры.next– этоNULLили указатель на следующую структуру в цепочке.entityIdCapacityInput– емкость массиваentityIdsили 0, если нужно получить требуемую емкость.entityIdCountOutput– количествоXrSpatialEntityIdEXTвentityIdsили требуемая емкость, еслиentityIdCapacityInputнедостаточно.entityIds– массив объектовXrSpatialEntityIdEXT. Может бытьNULL, еслиentityIdCapacityInputравно 0.entityStateCapacityInput– емкость массиваentityStatesили 0, если нужно получить требуемую емкость.entityStateCountOutput– количество XrSpatialEntityTrackingStateEXT вentityStatesили требуемая емкость, еслиentityStateCapacityInputнедостаточно. Это значение всегда должно совпадать со значениемentityIdCountOutput.entityStates– это массив XrSpatialEntityTrackingStateEXT . Может бытьNULL, еслиentityStateCapacityInputравно 0.- Подробное описание того, как получить нужный размер
entityIds, приведено в разделе Параметры размера буфера.
Приложение может использовать entityIds с xrCreateSpatialEntityFromIdEXT, чтобы создавать дескрипторы XrSpatialEntityEXT для объектов, по которым оно хочет регулярно получать обновления. Затем приложение может использовать эти дескрипторы XrSpatialEntityEXT с xrCreateSpatialUpdateSnapshotEXT, чтобы создать обновленный снимок, содержащий последние известные среде выполнения данные компонентов для предоставленных объектов.
Допустимое использование (неявное)
- Расширение
XR_EXT_spatial_entityдолжно быть включено до использования XrSpatialComponentDataQueryResultEXT. -
typeдолжно бытьXR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT -
nextдолжен бытьNULLили действительным указателем на следующую структуру в цепочке структур . См. также: XrSpatialComponentAnchorListEXT , XrSpatialComponentAnnotationQuadListANDROID , XrSpatialComponentBounded2DListEXT , XrSpatialComponentBounded3DListEXT , XrSpatialComponentConfidenceListANDROIDSYS , XrSpatialComponentImage2DListEXT , XrSpatialComponentKeyboardSemanticLabelListEXT , XrSpatialComponentMarkerListEXT , XrSpatialComponentMaterialTypeListANDROIDSYS , XrSpatialComponentMesh2DListEXT , XrSpatialComponentMesh3DListEXT , XrSpatialComponentMesh3DNormalsListEXT , XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT , XrSpatialComponentMesh3DVertexSemanticLabelsListEXT , XrSpatialComponentMouseSemanticLabelListEXT , XrSpatialComponentObjectSemanticLabelListANDROID , XrSpatialComponentObjectSemanticLabelListEXT , XrSpatialComponentOccupancyGridListANDROIDX1 , XrSpatialComponentParentListEXT , XrSpatialComponentPersistenceListEXT , XrSpatialComponentPersistenceScopesListANDROIDX1 , XrSpatialComponentPlaneAlignmentListEXT , XrSpatialComponentPlaneSemanticLabelListEXT , XrSpatialComponentPolygon2DListEXT , XrSpatialComponentRaycastResultListANDROID , XrSpatialComponentRoomEmptinessListANDROIDSYS , XrSpatialComponentRoomListANDROIDSYS , XrSpatialComponentStreetscapeGeometryMetadataListANDROIDX2 , XrSpatialComponentSubsumedByListANDROID. - Если
entityIdCapacityInputне равно0,entityIdsдолжен быть указателем на массив значенийentityIdCapacityInputXrSpatialEntityIdEXT. - Если
entityStateCapacityInputне равно0,entityStatesдолжен быть указателем на массив значенийentityStateCapacityInputXrSpatialEntityTrackingStateEXT.
typedef enum XrSpatialEntityTrackingStateEXT {
XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT = 1,
XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT = 2,
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT = 3,
XR_SPATIAL_ENTITY_TRACKING_STATE_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialEntityTrackingStateEXT;
XrSpatialEntityTrackingStateEXT перечисляет возможные состояния отслеживания пространственных объектов:
Перечисления имеют следующие значения:
Описание перечисления
XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT
Среда выполнения прекратила отслеживание этого объекта и больше не возобновит его.
XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT
Среда выполнения приостановила отслеживание этого объекта, но может возобновить его в будущем.
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT
Среда выполнения отслеживает этот объект, и данные его компонента действительны.
ОТСЛЕЖИВАЕМОЕ ОБЪЯВЛЕНИЕ
ПРИОСТАНОВЛЕНО
STOPPED
Рисунок 23. XrSpatialEntityTrackingStateEXT
- Среда выполнения может изменить состояние пространственного объекта с
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXTнаXR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT, если она приостанавливает отслеживание этого пространственного объекта, но имеет возможность возобновить его отслеживание в будущем. Например, это может произойти, если приложение теряет фокус ввода, если пространственный объект находится слишком далеко от пользователя, чтобы его можно было точно отслеживать, или если отслеживается слишком много объектов и среда выполнения хочет снизить затраты на отслеживание. XrSpatialEntityTrackingStateEXT помогает приложению изолировать себя от разных правил отслеживания каждой среды выполнения. - Среда выполнения может изменить состояние объекта с
XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXTнаXR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXTилиXR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT. - Среда выполнения должна изменить состояние пространственного объекта с
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXTилиXR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXTнаXR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT, если пространственный объект потерян и его отслеживание не будет восстановлено или возобновлено. Например, если устройство теряет отслеживание, перезапускает сеанс отслеживания, но не может повторно локализоваться в своей среде и поэтому обрабатывает обнаруженные объекты этого сеанса отслеживания как новые объекты. - Если для объекта задано состояние отслеживания
XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT, среда выполнения не должна менять его на другое. - При запросе данных компонента пространственного объекта с помощью xrQuerySpatialComponentDataEXT среда выполнения должна задать действительные данные в содержимом буферов, предоставленных приложением в следующей цепочке XrSpatialComponentDataQueryResultEXT, если состояние объекта –
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT. Если состояние объекта –XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXTилиXR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT, среда выполнения не должна изменять содержимое буферов.
Идиома с двумя вызовами для данных компонента
Структура XrSpatialBufferEXT определяется следующим образом:
typedef struct XrSpatialBufferEXT {
XrSpatialBufferIdEXT bufferId;
XrSpatialBufferTypeEXT bufferType;
} XrSpatialBufferEXT;
Описания участников
bufferIdXrSpatialBufferIdEXTданных буфера.bufferType– это XrSpatialBufferTypeEXT, указывающий тип данных вbufferId. Приложение может использоватьbufferType, чтобы определить, какую функцию использовать для получения фактических данных буфера.
Некоторые пространственные компоненты имеют данные переменного размера, поэтому для получения их данных требуется использовать идиому с двумя вызовами. В таких случаях структура данных пространственного компонента предоставляет XrSpatialBufferEXT для каждого буфера переменного размера, необходимого в данных этого компонента.
Для одного и того же bufferId среда выполнения должна предоставлять одни и те же данные от одного запроса данных компонента к другому, даже в разных снимках. Если значение bufferId в запросах данных компонента различается, это указывает приложению на то, что данные для этого компонента могли измениться.
Допустимое использование (неявное)
- Расширение
XR_EXT_spatial_entityдолжно быть включено до использования XrSpatialBufferEXT. -
bufferTypeдолжно быть допустимым значением XrSpatialBufferTypeEXT.
XR_DEFINE_ATOM(XrSpatialBufferIdEXT)
XrSpatialBufferIdEXT используется для представления любых данных переменного размера для пространственного компонента.
Среда выполнения должна хранить XrSpatialBufferIdEXT и его данные в памяти по крайней мере в течение жизненного цикла XrSpatialSnapshotEXT, который его содержит. Среда выполнения может хранить XrSpatialBufferIdEXT и его данные в памяти дольше, чем жизненный цикл XrSpatialSnapshotEXT, чтобы возвращать тот же идентификатор в составе снимков, созданных приложением позже. Для одного и того же XrSpatialBufferIdEXT среда выполнения должна всегда возвращать одни и те же данные через соответствующую функцию xrGetSpatialBuffer*.
typedef enum XrSpatialBufferTypeEXT {
XR_SPATIAL_BUFFER_TYPE_UNKNOWN_EXT = 0,
XR_SPATIAL_BUFFER_TYPE_STRING_EXT = 1,
XR_SPATIAL_BUFFER_TYPE_UINT8_EXT = 2,
XR_SPATIAL_BUFFER_TYPE_UINT16_EXT = 3,
XR_SPATIAL_BUFFER_TYPE_UINT32_EXT = 4,
XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT = 5,
XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT = 6,
XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT = 7,
XR_SPATIAL_BUFFER_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialBufferTypeEXT;
Перечисление XrSpatialBufferTypeEXT определяет различные типы данных буфера, представленного XrSpatialBufferIdEXT .
Описания перечислений
XR_SPATIAL_BUFFER_TYPE_STRING_EXT:XrSpatialBufferIdEXTможно передать в xrGetSpatialBufferStringEXT, чтобы получить строковый буфер.XR_SPATIAL_BUFFER_TYPE_UINT8_EXT:XrSpatialBufferIdEXTможно передать в xrGetSpatialBufferUint8EXT, чтобы получить буферuint8_t.XR_SPATIAL_BUFFER_TYPE_UINT16_EXT:XrSpatialBufferIdEXTможно передать в xrGetSpatialBufferUint16EXT, чтобы получить буферuint16_t.XR_SPATIAL_BUFFER_TYPE_UINT32_EXT:XrSpatialBufferIdEXTможно передать в xrGetSpatialBufferUint32EXT, чтобы получить буферuint32_t.XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT:XrSpatialBufferIdEXTможно передать в xrGetSpatialBufferFloatEXT, чтобы получить буферfloat.XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT:XrSpatialBufferIdEXTможно передать в xrGetSpatialBufferVector2fEXT, чтобы получить буфер XrVector2f.XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT:XrSpatialBufferIdEXTможно передать в xrGetSpatialBufferVector3fEXT, чтобы получить буфер XrVector3f.
Функция xrGetSpatialBufferStringEXT определяется следующим образом:
XrResult xrGetSpatialBufferStringEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
char* buffer);
Описание параметров
snapshot– дескриптор XrSpatialSnapshotEXT .infoсодержит информацию о буфере, который нужно запросить.bufferCapacityInput– емкость массива или 0, если нужно получить требуемую емкость.bufferCountOutput– количество символов или требуемая емкость, еслиbufferCapacityInputнедостаточно.buffer– массив объектовchar. Может бытьNULL, еслиbufferCapacityInputравно 0.- Подробное описание того, как получить нужный размер
buffer, приведено в разделе Параметры размера буфера.
Приложение может получить данные для XrSpatialBufferEXT, предоставленного компонентом, где XrSpatialBufferEXT :: bufferType – это XR_SPATIAL_BUFFER_TYPE_STRING_EXT, с помощью xrGetSpatialBufferStringEXT .
Среда выполнения должна возвращать XR_ERROR_VALIDATION_FAILURE, если XrSpatialBufferTypeEXT для XrSpatialBufferGetInfoEXT :: bufferId не является XR_SPATIAL_BUFFER_TYPE_STRING_EXT .
Среда выполнения должна возвращать XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT, если XrSpatialBufferGetInfoEXT :: bufferId не принадлежит snapshot .
buffer, заполненный средой выполнения, должен быть строкой UTF-8 с нулевым символом в конце.
Допустимое использование (неявное)
- Расширение
XR_EXT_spatial_entityдолжно быть включено до вызова xrGetSpatialBufferStringEXT. -
snapshotдолжен быть действительным дескриптором XrSpatialSnapshotEXT. -
infoдолжен быть указателем на действительную структуру XrSpatialBufferGetInfoEXT. -
bufferCountOutputдолжен быть указателем на значениеuint32_t. - Если
bufferCapacityInputне равно0,bufferдолжен быть указателем на массив значений charbufferCapacityInput.
Коды возврата
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
Функция xrGetSpatialBufferUint8EXT определяется следующим образом:
XrResult xrGetSpatialBufferUint8EXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
uint8_t* buffer);
Описание параметров
snapshot– дескриптор XrSpatialSnapshotEXT .infoсодержит информацию о буфере, который нужно запросить.bufferCapacityInput– емкость массива или 0, если нужно получить требуемую емкость.bufferCountOutput– количество элементов в массивеbufferили требуемая емкость, еслиbufferCapacityInputнедостаточно.buffer– массив объектовuint8_t. Может бытьNULL, еслиbufferCapacityInputравно 0.- Подробное описание того, как получить нужный размер
buffer, приведено в разделе Параметры размера буфера.
Приложение может получить данные для XrSpatialBufferEXT, предоставленного компонентом, где XrSpatialBufferEXT :: bufferType – это XR_SPATIAL_BUFFER_TYPE_UINT8_EXT, с помощью xrGetSpatialBufferUint8EXT .
Среда выполнения должна возвращать XR_ERROR_VALIDATION_FAILURE, если XrSpatialBufferTypeEXT для XrSpatialBufferGetInfoEXT :: bufferId не является XR_SPATIAL_BUFFER_TYPE_UINT8_EXT .
Среда выполнения должна возвращать XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT, если XrSpatialBufferGetInfoEXT :: bufferId не принадлежит snapshot .
Допустимое использование (неявное)
- Расширение
XR_EXT_spatial_entityдолжно быть включено до вызова xrGetSpatialBufferUint8EXT. -
snapshotдолжен быть действительным дескриптором XrSpatialSnapshotEXT. -
infoдолжен быть указателем на действительную структуру XrSpatialBufferGetInfoEXT. -
bufferCountOutputдолжен быть указателем на значениеuint32_t. - Если
bufferCapacityInputне равно0,bufferдолжен быть указателем на массив значенийbufferCapacityInputuint8_t.
Коды возврата
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
Функция xrGetSpatialBufferUint16EXT определяется следующим образом:
XrResult xrGetSpatialBufferUint16EXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
uint16_t* buffer);
Описание параметров
snapshot– дескриптор XrSpatialSnapshotEXT .infoсодержит информацию о буфере, который нужно запросить.bufferCapacityInput– емкость массива или 0, если нужно получить требуемую емкость.bufferCountOutput– количество элементов в массивеbufferили требуемая емкость, еслиbufferCapacityInputнедостаточно.buffer– массив объектовuint16_t. Может бытьNULL, еслиbufferCapacityInputравно 0.- Подробное описание того, как получить нужный размер
buffer, приведено в разделе Параметры размера буфера.
Приложение может получить данные для XrSpatialBufferEXT, предоставленного компонентом, где XrSpatialBufferEXT :: bufferType – это XR_SPATIAL_BUFFER_TYPE_UINT16_EXT, с помощью xrGetSpatialBufferUint16EXT .
Среда выполнения должна возвращать XR_ERROR_VALIDATION_FAILURE, если XrSpatialBufferTypeEXT для XrSpatialBufferGetInfoEXT :: bufferId не является XR_SPATIAL_BUFFER_TYPE_UINT16_EXT .
Среда выполнения должна возвращать XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT, если XrSpatialBufferGetInfoEXT :: bufferId не принадлежит snapshot .
Допустимое использование (неявное)
- Расширение
XR_EXT_spatial_entityдолжно быть включено до вызова xrGetSpatialBufferUint16EXT. -
snapshotдолжен быть действительным дескриптором XrSpatialSnapshotEXT. -
infoдолжен быть указателем на действительную структуру XrSpatialBufferGetInfoEXT. -
bufferCountOutputдолжен быть указателем на значениеuint32_t. - Если
bufferCapacityInputне равно0,bufferдолжен быть указателем на массив значенийbufferCapacityInputuint16_t.
Коды возврата
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
Функция xrGetSpatialBufferUint32EXT определяется следующим образом:
XrResult xrGetSpatialBufferUint32EXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
uint32_t* buffer);
Описание параметров
snapshot– дескриптор XrSpatialSnapshotEXT .infoсодержит информацию о буфере, который нужно запросить.bufferCapacityInput– емкость массива или 0, если нужно получить требуемую емкость.bufferCountOutput– количество элементов в массивеbufferили требуемая емкость, еслиbufferCapacityInputнедостаточно.buffer– массив объектовuint32_t. Может бытьNULL, еслиbufferCapacityInputравно 0.- Подробное описание того, как получить нужный размер
buffer, приведено в разделе Параметры размера буфера.
Приложение может получить данные для XrSpatialBufferEXT, предоставленного компонентом, где XrSpatialBufferEXT :: bufferType – это XR_SPATIAL_BUFFER_TYPE_UINT32_EXT, с помощью xrGetSpatialBufferUint32EXT .
Среда выполнения должна возвращать XR_ERROR_VALIDATION_FAILURE, если XrSpatialBufferTypeEXT для XrSpatialBufferGetInfoEXT :: bufferId не является XR_SPATIAL_BUFFER_TYPE_UINT32_EXT .
Среда выполнения должна возвращать XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT, если XrSpatialBufferGetInfoEXT :: bufferId не принадлежит snapshot .
Допустимое использование (неявное)
- Расширение
XR_EXT_spatial_entityдолжно быть включено до вызова xrGetSpatialBufferUint32EXT. -
snapshotдолжен быть действительным дескриптором XrSpatialSnapshotEXT. -
infoдолжен быть указателем на действительную структуру XrSpatialBufferGetInfoEXT. -
bufferCountOutputдолжен быть указателем на значениеuint32_t. - Если
bufferCapacityInputне равно0,bufferдолжен быть указателем на массив значенийbufferCapacityInputuint32_t.
Коды возврата
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
Функция xrGetSpatialBufferFloatEXT определяется следующим образом:
XrResult xrGetSpatialBufferFloatEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
float* buffer);
Описание параметров
snapshot– дескриптор XrSpatialSnapshotEXT .infoсодержит информацию о буфере, который нужно запросить.bufferCapacityInput– емкость массива или 0, если нужно получить требуемую емкость.bufferCountOutput– количество элементов в массивеbufferили требуемая емкость, еслиbufferCapacityInputнедостаточно.buffer– массив объектовfloat. Может бытьNULL, еслиbufferCapacityInputравно 0.- Подробное описание того, как получить нужный размер
buffer, приведено в разделе Параметры размера буфера.
Приложение может получить данные для XrSpatialBufferEXT, предоставленного компонентом, где XrSpatialBufferEXT :: bufferType – это XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT, с помощью xrGetSpatialBufferFloatEXT .
Среда выполнения должна возвращать XR_ERROR_VALIDATION_FAILURE, если XrSpatialBufferTypeEXT для XrSpatialBufferGetInfoEXT :: bufferId не является XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT .
Среда выполнения должна возвращать XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT, если XrSpatialBufferGetInfoEXT :: bufferId не принадлежит snapshot .
Допустимое использование (неявное)
- Расширение
XR_EXT_spatial_entityдолжно быть включено до вызова xrGetSpatialBufferFloatEXT. -
snapshotдолжен быть действительным дескриптором XrSpatialSnapshotEXT. -
infoдолжен быть указателем на действительную структуру XrSpatialBufferGetInfoEXT. -
bufferCountOutputдолжен быть указателем на значениеuint32_t. - Если
bufferCapacityInputне равно0,bufferдолжен быть указателем на массив значенийbufferCapacityInputfloat.
Коды возврата
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
Функция xrGetSpatialBufferVector2fEXT определяется следующим образом:
XrResult xrGetSpatialBufferVector2fEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
XrVector2f* buffer);
Описание параметров
snapshot– дескриптор XrSpatialSnapshotEXT .infoсодержит информацию о буфере, который нужно запросить.bufferCapacityInput– емкость массива или 0, если нужно получить требуемую емкость.bufferCountOutput– количество элементов в массивеbufferили требуемая емкость, еслиbufferCapacityInputнедостаточно.buffer– массив XrVector2f . Может бытьNULL, еслиbufferCapacityInputравно 0.- Подробное описание того, как получить нужный размер
buffer, приведено в разделе Параметры размера буфера.
Приложение может получить данные для XrSpatialBufferEXT, предоставленного компонентом, где XrSpatialBufferEXT :: bufferType – это XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT, с помощью xrGetSpatialBufferVector2fEXT .
Среда выполнения должна возвращать XR_ERROR_VALIDATION_FAILURE, если XrSpatialBufferTypeEXT для XrSpatialBufferGetInfoEXT :: bufferId не является XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT .
Среда выполнения должна возвращать XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT, если XrSpatialBufferGetInfoEXT :: bufferId не принадлежит snapshot .
Допустимое использование (неявное)
- Расширение
XR_EXT_spatial_entityдолжно быть включено до вызова xrGetSpatialBufferVector2fEXT. -
snapshotдолжен быть действительным дескриптором XrSpatialSnapshotEXT. -
infoдолжен быть указателем на действительную структуру XrSpatialBufferGetInfoEXT. -
bufferCountOutputдолжен быть указателем на значениеuint32_t. - Если
bufferCapacityInputне равно0,bufferдолжен быть указателем на массив структурbufferCapacityInputXrVector2f.
Коды возврата
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
Функция xrGetSpatialBufferVector3fEXT определяется следующим образом:
XrResult xrGetSpatialBufferVector3fEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
XrVector3f* buffer);
Описание параметров
snapshot– дескриптор XrSpatialSnapshotEXT .infoсодержит информацию о буфере, который нужно запросить.bufferCapacityInput– емкость массива или 0, если нужно получить требуемую емкость.bufferCountOutput– количество элементов в массивеbufferили требуемая емкость, еслиbufferCapacityInputнедостаточно.buffer– массив объектов XrVector3f . Может бытьNULL, еслиbufferCapacityInputравно 0.- Подробное описание того, как получить нужный размер
buffer, приведено в разделе Параметры размера буфера.
Приложение может получить данные для XrSpatialBufferEXT, предоставленного компонентом, где XrSpatialBufferEXT :: bufferType – это XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT, с помощью xrGetSpatialBufferVector3fEXT .
Среда выполнения должна возвращать XR_ERROR_VALIDATION_FAILURE, если XrSpatialBufferTypeEXT для XrSpatialBufferGetInfoEXT :: bufferId не является XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT .
Среда выполнения должна возвращать XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT, если XrSpatialBufferGetInfoEXT :: bufferId не принадлежит snapshot .
Допустимое использование (неявное)
- Расширение
XR_EXT_spatial_entityдолжно быть включено до вызова xrGetSpatialBufferVector3fEXT. -
snapshotдолжен быть действительным дескриптором XrSpatialSnapshotEXT. -
infoдолжен быть указателем на действительную структуру XrSpatialBufferGetInfoEXT. -
bufferCountOutputдолжен быть указателем на значениеuint32_t. - Если
bufferCapacityInputне равно0,bufferдолжен быть указателем на массив структурbufferCapacityInputXrVector3f.
Коды возврата
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
Структура XrSpatialBufferGetInfoEXT определяется следующим образом:
typedef struct XrSpatialBufferGetInfoEXT {
XrStructureType type;
const void* next;
XrSpatialBufferIdEXT bufferId;
} XrSpatialBufferGetInfoEXT;
Описания участников
type– это XrStructureType этой структуры.next– этоNULLили указатель на следующую структуру в цепочке.bufferId–XrSpatialBufferIdEXTдля буфера, данные которого нужно получить.
Допустимое использование (неявное)
- Расширение
XR_EXT_spatial_entityдолжно быть включено до использования XrSpatialBufferGetInfoEXT. -
typeдолжно бытьXR_TYPE_SPATIAL_BUFFER_GET_INFO_EXT -
nextдолжно бытьNULLили действительным указателем на следующую структуру в цепочке структур.
#define XR_NULL_SPATIAL_BUFFER_ID_EXT 0
XR_NULL_SPATIAL_BUFFER_ID_EXT – зарезервированное значение, которое представляет недопустимый XrSpatialBufferIdEXT . Его можно передавать в функции API и получать из них только в том случае, если это явно разрешено.
Создать снимок обновления
Функция xrCreateSpatialUpdateSnapshotEXT определяется следующим образом:
XrResult xrCreateSpatialUpdateSnapshotEXT(
XrSpatialContextEXT spatialContext,
const XrSpatialUpdateSnapshotCreateInfoEXT* createInfo,
XrSpatialSnapshotEXT* snapshot);
Описание параметров
spatialContext– это XrSpatialContextEXT, ранее созданный с помощью xrCreateSpatialContextAsyncEXT .createInfo– указатель на XrSpatialUpdateSnapshotCreateInfoEXT .snapshot– указатель на результат XrSpatialSnapshotEXT .
Приложение может использовать xrCreateSpatialUpdateSnapshotEXT, чтобы создать снимок и получить последние данные компонентов для определенных объектов, известных среде выполнения. При создании снимка приложения могут предоставлять дескрипторы XrSpatialEntityEXT и типы компонентов, которые их интересуют.
Приложение может использовать XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes, чтобы отфильтровать список компонентов, данные которых должны быть включены в снимок. Если приложение предоставляет действительный список типов пространственных компонентов в XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes, то среда выполнения должна включать в снимок только пространственные объекты, у которых есть хотя бы один из компонентов, указанных в XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes . Кроме того, среда выполнения должна включать в снимок только данные для этих компонентов.
Среда выполнения должна возвращать XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT, если какие-либо из XrSpatialComponentTypeEXT в XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes не включены для пространственных возможностей, переданных в XrSpatialContextCreateInfoEXT :: capabilityConfigs при создании spatialContext .
Если приложение не предоставляет список типов пространственных компонентов в XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes, среда выполнения должна включить в снимок все пространственные объекты, перечисленные в XrSpatialUpdateSnapshotCreateInfoEXT :: entities, и должна включить данные для всех включенных компонентов возможностей, настроенных для spatialContext .
Среда выполнения не должна включать пространственные объекты, не указанные в XrSpatialUpdateSnapshotCreateInfoEXT :: entities в snapshot .
Приложение может создавать любое количество снимков, но должно учитывать объем памяти, выделяемый для каждого нового снимка, и должно уничтожать снимки, когда они больше не нужны.
Допустимое использование (неявное)
- Расширение
XR_EXT_spatial_entityдолжно быть включено до вызова xrCreateSpatialUpdateSnapshotEXT. -
spatialContextдолжен быть действительным дескриптором XrSpatialContextEXT. -
createInfoдолжен быть указателем на действительную структуру XrSpatialUpdateSnapshotCreateInfoEXT. -
snapshotдолжен быть указателем на дескриптор XrSpatialSnapshotEXT.
Коды возврата
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
Структура XrSpatialUpdateSnapshotCreateInfoEXT определяется следующим образом:
typedef struct XrSpatialUpdateSnapshotCreateInfoEXT {
XrStructureType type;
const void* next;
uint32_t entityCount;
const XrSpatialEntityEXT* entities;
uint32_t componentTypeCount;
const XrSpatialComponentTypeEXT* componentTypes;
XrSpace baseSpace;
XrTime time;
} XrSpatialUpdateSnapshotCreateInfoEXT;
Описания участников
type– это XrStructureType этой структуры.next– этоNULLили указатель на следующую структуру в цепочке. Такие структуры не определены в ядре OpenXR или этом расширении.entityCount– этоuint32_t, описывающий количество элементов в массивеentities.entities– массив XrSpatialEntityEXT, для которого среда выполнения должна включить данные компонента в снимок.componentTypeCount– этоuint32_t, описывающий количество элементов в массивеcomponentTypes.componentTypes– массив XrSpatialComponentTypeEXT, для которого среда выполнения должна включить данные в снимок.baseSpace– это XrSpace, относительно которого будут расположены все местоположения обновленного XrSpatialSnapshotEXT.time– этоXrTime, в котором будут находиться все местоположения обновления XrSpatialSnapshotEXT.
Допустимое использование (неявное)
- Расширение
XR_EXT_spatial_entityдолжно быть включено до использования XrSpatialUpdateSnapshotCreateInfoEXT. -
typeдолжно бытьXR_TYPE_SPATIAL_UPDATE_SNAPSHOT_CREATE_INFO_EXT -
nextдолжно бытьNULLили действительным указателем на следующую структуру в цепочке структур. -
entitiesдолжен быть указателем на массив изentityCountдействительных дескрипторов XrSpatialEntityEXT. - Если
componentTypeCountне равно0,componentTypesдолжен быть указателем на массив допустимых значенийcomponentTypeCountXrSpatialComponentTypeEXT. -
baseSpaceдолжен быть действительным идентификатором XrSpace. - Значение параметра
entityCountдолжно быть больше0. - И
baseSpace, и элементыentitiesдолжны быть созданы, выделены или получены из одного и того же XrSession.
Удалить снимок
Функция xrDestroySpatialSnapshotEXT определяется следующим образом:
XrResult xrDestroySpatialSnapshotEXT(
XrSpatialSnapshotEXT snapshot);
Описание параметров
snapshot– это XrSpatialSnapshotEXT, ранее предоставленный xrCreateSpatialDiscoverySnapshotCompleteEXT или xrCreateSpatialUpdateSnapshotEXT .
Приложение может вызвать xrDestroySpatialSnapshotEXT, чтобы удалить дескриптор XrSpatialSnapshotEXT и связанные с ним ресурсы.
Допустимое использование (неявное)
- Расширение
XR_EXT_spatial_entityдолжно быть включено до вызова xrDestroySpatialSnapshotEXT. -
snapshotдолжен быть действительным дескриптором XrSpatialSnapshotEXT.
Потокобезопасность
- Доступ к
snapshotи любым дочерним дескрипторам должен быть синхронизирован извне.
Коды возврата
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
Общие компоненты
Ограниченная 2D-модель
Данные компонента
Структура XrSpatialBounded2DDataEXT определяется следующим образом:
typedef struct XrSpatialBounded2DDataEXT {
XrPosef center;
XrExtent2Df extents;
} XrSpatialBounded2DDataEXT;
Описания участников
center– это XrPosef, определяющий геометрический центр ограниченного двухмерного компонента.extents– это размеры ограниченного двумерного компонента по оси X (extents.width) и оси Y (extents.height) с центром в точкеcenter.
extents XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT – это размер объекта в плоскости x-y системы координат плоскости. Плоскость с положением {0, 0, 0}, поворотом {0, 0, 0, 1} (без поворота) и размером {1, 1} представляет собой плоскость размером 1 x 1 м с центром в точке {0, 0, 0}, нормальный вектор передней грани которой направлен в сторону +Z в пространстве компонента.
X X Y Y Z Z Высота Высота Y Y Z Z X X Вертикальная плоскость Вертикальная плоскость Горизонтальная плоскость Горизонтальная плоскость Ширина Ширина Ширина Ширина Высота Высота
Рисунок 24. Система координат компонента Bounded2D
Примечание
OpenXR использует плоскость X-Y с нормалью +Z, но другие API могут использовать плоскость X-Z с нормалью +Y. Плоскость XY можно преобразовать в плоскость XZ, повернув ее на -π/2 радиан вокруг оси +X.
Допустимое использование (неявное)
- Расширение
XR_EXT_spatial_entityдолжно быть включено до использования XrSpatialBounded2DDataEXT.
Структура списка компонентов для запроса данных
Структура XrSpatialComponentBounded2DListEXT определяется следующим образом:
typedef struct XrSpatialComponentBounded2DListEXT {
XrStructureType type;
void* next;
uint32_t boundCount;
XrSpatialBounded2DDataEXT* bounds;
} XrSpatialComponentBounded2DListEXT;
Описания участников
type– это XrStructureType этой структуры.next– этоNULLили указатель на следующую структуру в цепочке. Такие структуры не определены в ядре OpenXR или этом расширении.boundCount– этоuint32_t, описывающий количество элементов в массивеbounds.bounds– это массив XrSpatialBounded2DDataEXT .
Среда выполнения должна возвращать XR_ERROR_VALIDATION_FAILURE из xrQuerySpatialComponentDataEXT, если XrSpatialComponentBounded2DListEXT находится в следующей цепочке XrSpatialComponentDataQueryResultEXT :: next, но XrSpatialComponentDataQueryConditionEXT ::componentTypeCount не равно нулю и XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT не включено в XrSpatialComponentDataQueryConditionEXT :: componentTypes .
Среда выполнения должна возвращать XR_ERROR_SIZE_INSUFFICIENT из xrQuerySpatialComponentDataEXT, если boundCount меньше XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .
Если xrQuerySpatialComponentDataEXT :: snapshot был создан из xrCreateSpatialDiscoverySnapshotCompleteEXT , то среда выполнения должна предоставить XrSpatialBounded2DDataEXT :: center в XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace и XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time .
Если xrQuerySpatialComponentDataEXT :: snapshot был создан из xrCreateSpatialUpdateSnapshotEXT , то среда выполнения должна предоставить XrSpatialBounded2DDataEXT :: center в XrSpatialUpdateSnapshotCreateInfoEXT :: baseSpace и XrSpatialUpdateSnapshotCreateInfoEXT :: time .
Допустимое использование (неявное)
- Расширение
XR_EXT_spatial_entityдолжно быть включено до использования XrSpatialComponentBounded2DListEXT. -
typeдолжно бытьXR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXT -
nextдолжно бытьNULLили действительным указателем на следующую структуру в цепочке структур. -
boundsдолжен быть указателем на массив структурboundCountXrSpatialBounded2DDataEXT. - Значение параметра
boundCountдолжно быть больше0.
Конфигурация
Если XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT перечислено в XrSpatialCapabilityComponentTypesEXT :: componentTypes для определенной возможности, приложение может включить ее, добавив значение перечисления в список XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents. Этот компонент не требует специальной настройки для включения в следующую цепочку XrSpatialCapabilityConfigurationBaseHeaderEXT .
Ограниченное 3D
Данные компонента
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT использует XrBoxf для своих данных.
Структура списка компонентов для запроса данных
Структура XrSpatialComponentBounded3DListEXT определяется следующим образом:
typedef struct XrSpatialComponentBounded3DListEXT {
XrStructureType type;
void* next;
uint32_t boundCount;
XrBoxf* bounds;
} XrSpatialComponentBounded3DListEXT;
Описания участников
type– это XrStructureType этой структуры.next– этоNULLили указатель на следующую структуру в цепочке. Такие структуры не определены в ядре OpenXR или этом расширении.boundCount– этоuint32_t, описывающий количество элементов в массивеbounds.bounds– массив XrBoxf .
Среда выполнения должна возвращать XR_ERROR_VALIDATION_FAILURE из xrQuerySpatialComponentDataEXT, если XrSpatialComponentBounded3DListEXT находится в следующей цепочке XrSpatialComponentDataQueryResultEXT :: next, но XrSpatialComponentDataQueryConditionEXT ::componentTypeCount не равно нулю и XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT не включено в XrSpatialComponentDataQueryConditionEXT :: componentTypes .
Среда выполнения должна возвращать XR_ERROR_SIZE_INSUFFICIENT из xrQuerySpatialComponentDataEXT, если boundCount меньше XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .
Если xrQuerySpatialComponentDataEXT :: snapshot был создан из xrCreateSpatialDiscoverySnapshotCompleteEXT , то среда выполнения должна предоставить XrBoxf :: center в XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace в XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time .
Если xrQuerySpatialComponentDataEXT :: snapshot был создан из xrCreateSpatialUpdateSnapshotEXT , то среда выполнения должна предоставить XrBoxf :: center в XrSpatialUpdateSnapshotCreateInfoEXT :: baseSpace в XrSpatialUpdateSnapshotCreateInfoEXT :: time .
Допустимое использование (неявное)
- Прежде чем использовать XrSpatialComponentBounded3DListEXT, необходимо включить расширение
XR_EXT_spatial_entity. -
typeдолжно бытьXR_TYPE_SPATIAL_COMPONENT_BOUNDED_3D_LIST_EXT -
nextдолжно бытьNULLили действительным указателем на следующую структуру в цепочке структур. -
boundsдолжен быть указателем на массив структурboundCountXrBoxf. - Значение параметра
boundCountдолжно быть больше0.
Конфигурация
Если XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT перечислено в XrSpatialCapabilityComponentTypesEXT :: componentTypes для определенной возможности, приложение может включить ее, добавив перечисление в список XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents. Этот компонент не требует специальной настройки для включения в следующую цепочку XrSpatialCapabilityConfigurationBaseHeaderEXT .
Родитель
Данные компонента
XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT использует XrSpatialEntityIdEXT для своих данных.
Структура списка компонентов для запроса данных
Структура XrSpatialComponentParentListEXT определяется следующим образом:
typedef struct XrSpatialComponentParentListEXT {
XrStructureType type;
void* next;
uint32_t parentCount;
XrSpatialEntityIdEXT* parents;
} XrSpatialComponentParentListEXT;
Описания участников
type– это XrStructureType этой структуры.next– этоNULLили указатель на следующую структуру в цепочке. Такие структуры не определены в ядре OpenXR или этом расширении.parentCount– этоuint32_t, описывающий количество элементов в массивеparents.parents– массив объектовXrSpatialEntityIdEXT.
Среда выполнения должна возвращать XR_ERROR_VALIDATION_FAILURE из xrQuerySpatialComponentDataEXT, если XrSpatialComponentParentListEXT находится в следующей цепочке XrSpatialComponentDataQueryResultEXT :: next, но XrSpatialComponentDataQueryConditionEXT ::componentTypeCount не равно нулю и XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT не включено в XrSpatialComponentDataQueryConditionEXT :: componentTypes .
Среда выполнения должна возвращать XR_ERROR_SIZE_INSUFFICIENT из xrQuerySpatialComponentDataEXT, если parentCount меньше XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .
Допустимое использование (неявное)
- Расширение
XR_EXT_spatial_entityдолжно быть включено до использования XrSpatialComponentParentListEXT. -
typeдолжно бытьXR_TYPE_SPATIAL_COMPONENT_PARENT_LIST_EXT -
nextдолжно бытьNULLили действительным указателем на следующую структуру в цепочке структур. -
parentsдолжен быть указателем на массив значенийparentCountXrSpatialEntityIdEXT. - Значение параметра
parentCountдолжно быть больше0.
Конфигурация
Если XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT перечислено в XrSpatialCapabilityComponentTypesEXT :: componentTypes для какой-либо возможности, приложение может включить ее, добавив перечисление в список XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents. Этот компонент не требует специальной настройки для включения в следующую цепочку XrSpatialCapabilityConfigurationBaseHeaderEXT .
3D-сетка
Данные компонента
Структура XrSpatialMeshDataEXT определяется следующим образом:
typedef struct XrSpatialMeshDataEXT {
XrPosef origin;
XrSpatialBufferEXT vertexBuffer;
XrSpatialBufferEXT indexBuffer;
} XrSpatialMeshDataEXT;
Описания участников
origin– это XrPosef, определяющий начало сетки. Все вершины сетки должны быть связаны с этой точкой.vertexBuffer– это XrSpatialBufferEXT, который предоставляет идентификатор буфера, представляющего буфер вершин объекта, на котором находится этот компонент. Положение вершин должно быть задано относительноorigin.indexBuffer– это XrSpatialBufferEXT, который предоставляет идентификатор буфера, представляющего массив индексов треугольников, указывающих индексы вершин сетки вvertexBuffer. Индексы треугольников должны возвращаться в порядке против часовой стрелки. Три индекса обозначают один треугольник.
Тип компонента, использующий XrSpatialMeshDataEXT, должен указывать XrSpatialBufferTypeEXT для vertexBuffer и indexBuffer .
Допустимое использование (неявное)
- Расширение
XR_EXT_spatial_entityдолжно быть включено до использования XrSpatialMeshDataEXT. -
vertexBufferдолжен быть допустимой структурой XrSpatialBufferEXT. -
indexBufferдолжен быть допустимой структурой XrSpatialBufferEXT.
Структура списка компонентов для запроса данных
Структура XrSpatialComponentMesh3DListEXT определяется следующим образом:
typedef struct XrSpatialComponentMesh3DListEXT {
XrStructureType type;
void* next;
uint32_t meshCount;
XrSpatialMeshDataEXT* meshes;
} XrSpatialComponentMesh3DListEXT;
Описания участников
type– это XrStructureType этой структуры.next– этоNULLили указатель на следующую структуру в цепочке.meshCount– этоuint32_t, описывающий количество элементов в массивеmeshes.meshes– массив XrSpatialMeshDataEXT .
Приложение может запрашивать 3D-компонент сетки пространственных объектов в XrSpatialSnapshotEXT, добавляя XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT в XrSpatialComponentDataQueryConditionEXT :: componentTypes и добавляя XrSpatialComponentMesh3DListEXT в следующую цепочку указателей XrSpatialComponentDataQueryResultEXT .
Среда выполнения должна возвращать XR_ERROR_VALIDATION_FAILURE из xrQuerySpatialComponentDataEXT, если XrSpatialComponentMesh3DListEXT находится в следующей цепочке XrSpatialComponentDataQueryResultEXT :: next, но XrSpatialComponentDataQueryConditionEXT ::componentTypeCount не равно нулю и XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT не включено в XrSpatialComponentDataQueryConditionEXT :: componentTypes .
Среда выполнения должна возвращать XR_ERROR_SIZE_INSUFFICIENT из xrQuerySpatialComponentDataEXT, если meshCount меньше XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .
Для XrSpatialMeshDataEXT, заполненного средой выполнения в массиве meshes, XrSpatialBufferEXT :: bufferType для XrSpatialMeshDataEXT :: vertexBuffer должно быть XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT, а XrSpatialBufferEXT :: bufferType для XrSpatialMeshDataEXT :: indexBuffer должно быть XR_SPATIAL_BUFFER_TYPE_UINT32_EXT .
Допустимое использование (неявное)
- Прежде чем использовать XrSpatialComponentMesh3DListEXT, необходимо включить расширение
XR_EXT_spatial_entity. -
typeдолжно бытьXR_TYPE_SPATIAL_COMPONENT_MESH_3D_LIST_EXT -
nextдолжно бытьNULLили действительным указателем на следующую структуру в цепочке структур. -
meshesдолжен быть указателем на массив структурmeshCountXrSpatialMeshDataEXT. - Значение параметра
meshCountдолжно быть больше0.
Конфигурация
Если XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT перечислено в XrSpatialCapabilityComponentTypesEXT :: componentTypes для определенной возможности, приложение может включить ее, добавив перечисление в список XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents производной структуры XrSpatialCapabilityConfigurationBaseHeaderEXT возможности, которая поддерживает этот компонент.
Этот компонент не требует специальной настройки для включения в следующую цепочку XrSpatialCapabilityConfigurationBaseHeaderEXT .
Фильтры статуса отслеживания
Структура XrSpatialFilterTrackingStateEXT определяется следующим образом:
typedef struct XrSpatialFilterTrackingStateEXT {
XrStructureType type;
const void* next;
XrSpatialEntityTrackingStateEXT trackingState;
} XrSpatialFilterTrackingStateEXT;
Описания участников
type– это XrStructureType этой структуры.next– этоNULLили указатель на следующую структуру в цепочке.trackingState– это XrSpatialEntityTrackingStateEXT, к которому приложение хочет применить фильтр.
Приложение может использовать XrSpatialFilterTrackingStateEXT в следующей цепочке XrSpatialDiscoverySnapshotCreateInfoEXT, чтобы ограничить обнаружение только теми объектами, у которых статус отслеживания – trackingState .
Приложение может использовать XrSpatialFilterTrackingStateEXT в следующей цепочке XrSpatialComponentDataQueryConditionEXT, чтобы ограничить запрос данных компонента из снимка только объектами, у которых статус отслеживания – trackingState .
Допустимое использование (неявное)
- Расширение
XR_EXT_spatial_entityдолжно быть включено до использования XrSpatialFilterTrackingStateEXT. -
typeдолжно бытьXR_TYPE_SPATIAL_FILTER_TRACKING_STATE_EXT -
nextдолжно бытьNULLили действительным указателем на следующую структуру в цепочке структур. -
trackingStateдолжно быть допустимым значением XrSpatialEntityTrackingStateEXT.
Пример кода
Использование приложений
Приложения обычно используют расширение пространственного объекта по следующему шаблону:
- Сначала приложение перечисляет пространственные возможности системы с помощью xrEnumerateSpatialCapabilitiesEXT . Затем он проверяет возвращенный массив XrSpatialCapabilityEXT и перечисляет компоненты и функции, поддерживаемые для каждой из этих возможностей, используя xrEnumerateSpatialCapabilityComponentTypesEXT и xrEnumerateSpatialCapabilityFeaturesEXT соответственно. Это дает приложению полное представление о компонентах, которые оно может включить, и конфигурациях, которые принимает функция.
- Затем приложение создает один или несколько дескрипторов XrSpatialContextEXT с определенными конфигурациями пространственных возможностей, в которых конфигурации включают и настраивают определенную возможность в пространственном контексте, а также включают и настраивают компоненты для этих возможностей.
- Для каждого XrSpatialContextEXT приложение ожидает получения событий XrEventDataSpatialDiscoveryRecommendedEXT для этого XrSpatialContextEXT, прежде чем использовать xrCreateSpatialDiscoverySnapshotAsyncEXT для обнаружения пространственных объектов. После завершения этой асинхронной операции приложение получает дескриптор XrSpatialSnapshotEXT.
- Приложение запрашивает объекты и данные компонентов, включенные в этот XrSpatialSnapshotEXT, с помощью xrQuerySpatialComponentDataEXT . Приложение считывает последние данные компонентов запрашиваемых объектов из структур, прикрепленных к следующей цепочке XrSpatialComponentDataQueryResultEXT, если состояние объекта –
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT. - Если приложение определяет определенные объекты как интересные и хочет получать обновления для них с течением времени, оно создает дескрипторы XrSpatialEntityEXT для этих объектов с помощью xrCreateSpatialEntityFromIdEXT . Приложение получает обновления для таких объектов с помощью xrCreateSpatialUpdateSnapshotEXT и использует ту же функцию xrQuerySpatialComponentDataEXT для вновь созданного XrSpatialSnapshotEXT, чтобы получить последние данные компонентов для этих объектов.
Как находить пространственные объекты и запрашивать данные компонентов
В примере кода ниже показано, как обнаружить пространственные объекты для функции Foo и запросить данные их компонентов.
/****************************/
/* Capability definition */
/****************************/
// Foo capability has the following components -
// - XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT
#define XR_SPATIAL_CAPABILITY_FOO ((XrSpatialCapabilityEXT)1000740000U)
#define XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_FOO_EXT ((XrStructureType)1000740000U)
// Derives from XrSpatialCapabilityConfigurationBaseHeaderEXT
typedef struct XrSpatialCapabilityConfigurationFooEXT {
XrStructureType type;
const void* XR_MAY_ALIAS next;
XrSpatialCapabilityEXT capability;
uint32_t enabledComponentCount;
const XrSpatialComponentTypeEXT* enabledComponents;
} XrSpatialCapabilityConfigurationFooEXT;
/******************************/
/* End capability definition */
/******************************/
auto waitUntilReady = [](XrFutureEXT future) {
XrFuturePollInfoEXT pollInfo{XR_TYPE_FUTURE_POLL_INFO_EXT};
XrFuturePollResultEXT pollResult{XR_TYPE_FUTURE_POLL_RESULT_EXT};
pollInfo.future = future;
do {
// sleep(1);
CHK_XR(xrPollFutureEXT(instance, &pollInfo, &pollResult));
} while (pollResult.state != XR_FUTURE_STATE_READY_EXT);
};
// Create a spatial spatial context
XrSpatialContextEXT spatialContext{};
{
const std::array<XrSpatialComponentTypeEXT, 1> enabledComponents = {
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT,
};
// Configure Foo capability for the spatial context
XrSpatialCapabilityConfigurationFooEXT fooConfig{XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_FOO_EXT};
fooConfig.capability = XR_SPATIAL_CAPABILITY_FOO;
fooConfig.enabledComponentCount = enabledComponents.size();
fooConfig.enabledComponents = enabledComponents.data();
std::vector<XrSpatialCapabilityConfigurationBaseHeaderEXT*> capabilityConfigs;
capabilityConfigs.push_back(reinterpret_cast<XrSpatialCapabilityConfigurationBaseHeaderEXT*>(&fooConfig));
XrSpatialContextCreateInfoEXT spatialContextCreateInfo{XR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXT};
spatialContextCreateInfo.capabilityConfigCount = capabilityConfigs.size();
spatialContextCreateInfo.capabilityConfigs = capabilityConfigs.data();
XrFutureEXT createContextFuture;
CHK_XR(xrCreateSpatialContextAsyncEXT(session, &spatialContextCreateInfo, &createContextFuture));
waitUntilReady(createContextFuture);
XrCreateSpatialContextCompletionEXT completion{XR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXT};
CHK_XR(xrCreateSpatialContextCompleteEXT(session, createContextFuture, &completion));
if (completion.futureResult != XR_SUCCESS) {
return;
}
spatialContext = completion.spatialContext;
}
auto discoverSpatialEntities = [&](XrSpatialContextEXT spatialContext, XrTime time) {
// We want to look for entities that have the following components.
std::array<XrSpatialComponentTypeEXT, 1> snapshotComponents {XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT};
XrSpatialDiscoverySnapshotCreateInfoEXT snapshotCreateInfo{XR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT};
snapshotCreateInfo.componentTypeCount = snapshotComponents.size();
snapshotCreateInfo.componentTypes = snapshotComponents.data();
XrFutureEXT future = XR_NULL_FUTURE_EXT;
CHK_XR(xrCreateSpatialDiscoverySnapshotAsyncEXT(spatialContext, &snapshotCreateInfo, &future));
waitUntilReady(future);
XrCreateSpatialDiscoverySnapshotCompletionInfoEXT completionInfo{XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXT};
completionInfo.baseSpace = localSpace;
completionInfo.time = time;
completionInfo.future = future;
XrCreateSpatialDiscoverySnapshotCompletionEXT completion{XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXT};
CHK_XR(xrCreateSpatialDiscoverySnapshotCompleteEXT(spatialContext, &completionInfo, &completion));
if (completion.futureResult == XR_SUCCESS) {
// Query for the bounded2d component data
XrSpatialComponentTypeEXT componentToQuery = XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT;
XrSpatialComponentDataQueryConditionEXT queryCond{XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT};
queryCond.componentTypes = &componentToQuery;
XrSpatialComponentDataQueryResultEXT queryResult{XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT};
queryResult.entityIdCapacityInput = 0;
queryResult.entityIds = nullptr;
queryResult.entityStateCapacityInput = 0;
queryResult.entityStates = nullptr;
CHK_XR(xrQuerySpatialComponentDataEXT(completion.snapshot, &queryCond, &queryResult));
std::vector<XrSpatialEntityIdEXT> entityIds(queryResult.entityIdCountOutput);
std::vector<XrSpatialEntityTrackingStateEXT> entityStates(queryResult.entityStateCountOutput);
queryResult.entityIdCapacityInput = entityIds.size();
queryResult.entityIds = entityIds.data();
queryResult.entityStateCapacityInput = entityStates.size();
queryResult.entityStates = entityStates.data();
std::vector<XrSpatialBounded2DDataEXT> bounded2d(queryResult.entityIdCountOutput);
XrSpatialComponentBounded2DListEXT boundsList{XR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXT};
boundsList.boundCount = bounded2d.size();
boundsList.bounds = bounded2d.data();
queryResult.next = &boundsList;
CHK_XR(xrQuerySpatialComponentDataEXT(completion.snapshot, &queryCond, &queryResult));
for (int32_t i = 0; i < queryResult.entityIdCountOutput; ++i) {
if (entityStates[i] == XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT) {
// 2D extents for entity entityIds[i] is bounded2d[i].extents.
}
}
CHK_XR(xrDestroySpatialSnapshotEXT(completion.snapshot));
}
};
while (1) {
// ...
// For every frame in frame loop
// ...
XrFrameState frameState; // previously returned from xrWaitFrame
const XrTime time = frameState.predictedDisplayTime;
// Poll for the XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT event
XrEventDataBuffer event = {XR_TYPE_EVENT_DATA_BUFFER};
XrResult result = xrPollEvent(instance, &event);
if (result == XR_SUCCESS) {
switch (event.type) {
case XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT: {
const XrEventDataSpatialDiscoveryRecommendedEXT& eventdata =
*reinterpret_cast<XrEventDataSpatialDiscoveryRecommendedEXT*>(&event);
// Discover spatial entities for the context that we received the "discovery
// recommended" event for.
discoverSpatialEntities(eventdata.spatialContext, time);
break;
}
}
}
// ...
// Finish frame loop
// ...
}
CHK_XR(xrDestroySpatialContextEXT(spatialContext));
Запрос данных буфера
В примере кода ниже показано, как получить данные компонента, который предоставляет XrSpatialBufferEXT .
/****************************/
/* Component definition */
/****************************/
// Foo component that provides an XrVector3f buffer
#define XR_SPATIAL_COMPONENT_TYPE_FOO_EXT ((XrSpatialComponentTypeEXT)1000740000U)
#define XR_TYPE_SPATIAL_COMPONENT_FOO_LIST_EXT ((XrStructureType)1000740000U)
// XrSpatialComponentFooListEXT extends XrSpatialComponentDataQueryResultEXT
typedef struct XrSpatialComponentFooListEXT {
XrStructureType type;
void* XR_MAY_ALIAS next;
uint32_t fooCount;
XrSpatialBufferEXT* foo;
} XrSpatialComponentFooListEXT;
/******************************/
/* End Component definition */
/******************************/
// Query for the foo component data
XrSpatialComponentTypeEXT componentToQuery = XR_SPATIAL_COMPONENT_TYPE_FOO_EXT;
XrSpatialComponentDataQueryConditionEXT queryCond{XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT};
queryCond.componentTypeCount = 1;
queryCond.componentTypes = &componentToQuery;
XrSpatialComponentDataQueryResultEXT queryResult{XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT};
CHK_XR(xrQuerySpatialComponentDataEXT(snapshot, &queryCond, &queryResult));
std::vector<XrSpatialEntityIdEXT> entityIds(queryResult.entityIdCountOutput);
queryResult.entityIdCapacityInput = entityIds.size();
queryResult.entityIds = entityIds.data();
std::vector<XrSpatialBufferEXT> fooBuffers(queryResult.entityIdCountOutput);
XrSpatialComponentFooListEXT fooList{XR_TYPE_SPATIAL_COMPONENT_FOO_LIST_EXT};
fooList.fooCount = fooBuffers.size();
fooList.foo = fooBuffers.data();
queryResult.next = &fooList;
CHK_XR(xrQuerySpatialComponentDataEXT(snapshot, &queryCond, &queryResult));
for (int32_t i = 0; i < queryResult.entityIdCountOutput; ++i) {
// foo component data for entity entityIds[i]
if (fooBuffers[i].bufferType == XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT) {
XrSpatialBufferGetInfoEXT getInfo{XR_TYPE_SPATIAL_BUFFER_GET_INFO_EXT};
getInfo.bufferId = fooBuffers[i].bufferId;
uint32_t bufferCountOutput;
CHK_XR(xrGetSpatialBufferVector3fEXT(snapshot, &getInfo, 0, &bufferCountOutput, nullptr));
std::vector<XrVector3f> vertexBuffer(bufferCountOutput);
CHK_XR(xrGetSpatialBufferVector3fEXT(snapshot, &getInfo, bufferCountOutput, &bufferCountOutput, vertexBuffer.data()));
// XrVertex3f buffer for entity entityIds[i] is now available in vertexBuffer vector.
}
}
Правила в отношении расширений
Если расширение определяет новый тип XrSpatialComponentTypeEXT, который предоставляет дополнительные данные о пространственном объекте,
- расширение должно также определять структуру списка для этого компонента, которая позволяет приложению передавать массив в среду выполнения для заполнения данными для каждого из пространственных объектов, удовлетворяющих xrQuerySpatialComponentDataEXT ::
queryCondition. Примеры таких структур: XrSpatialComponentParentListEXT и XrSpatialComponentBounded2DListEXT . Если размер данных компонента переменный и для его запроса приложению требуется использовать идиому двух вызовов, данные компонента должны предоставлять XrSpatialBufferEXT для каждого элемента данных переменного размера в структуре списка и должны указывать XrSpatialBufferTypeEXT для каждого буфера. Затем приложение может запросить данные буфера с помощью функций, определенных в разделе Идиома двух вызовов для данных компонента . Пример такой структуры – XrSpatialMeshDataEXT, которая включена в XrSpatialComponentMesh3DListEXT . - Расширение может также предоставлять структуры, которые приложение может связывать с XrSpatialComponentDataQueryConditionEXT ::
next, чтобы предоставлять дополнительные фильтры для запроса, относящегося к данным этого компонента.
- расширение должно также определять структуру списка для этого компонента, которая позволяет приложению передавать массив в среду выполнения для заполнения данными для каждого из пространственных объектов, удовлетворяющих xrQuerySpatialComponentDataEXT ::
Расширения могут определять структуры, которые расширяют XrSpatialDiscoverySnapshotCreateInfoEXT, чтобы предоставлять дополнительные фильтры для обнаружения. Фильтры для создания снимка не должны влиять на конфигурацию пространственного контекста. Вместо этого они должны использоваться для предоставления подсказок среде выполнения о том, какие объекты и данные должны быть включены в снимок, как это отслеживается текущей конфигурацией пространственного контекста (и, следовательно, текущей конфигурацией базовых сервисов).
Если расширение определяет новый XrSpatialCapabilityEXT ,
- Оно также должно указывать список XrSpatialComponentTypeEXT, которые среды выполнения должны предоставлять объектам для этой возможности.
- Оно должно также предоставлять структуры, производные от XrSpatialCapabilityConfigurationBaseHeaderEXT, которые позволят настроить эту возможность.
Если расширение определяет новую функцию XrSpatialCapabilityFeatureEXT, оно должно также определить соответствующую структуру конфигурации, которая может быть привязана к следующему указателю XrSpatialCapabilityConfigurationBaseHeaderEXT, который приложение может использовать для включения функции при создании XrSpatialContextEXT .
Расширение, определяющее новый XrSpatialCapabilityEXT, должно следовать этому шаблону для спецификации:
- Обзор
- Поддержка среды выполнения
- Конфигурация
- Гарантированные компоненты
- Пример кода
Расширение, определяющее новый тип XrSpatialComponentTypeEXT, должно соответствовать следующему шаблону спецификации:
- Данные компонента
- Структура списка компонентов для запроса данных
- Конфигурация
При написании API, который предоставляет приложению
XrSpatialBufferIdEXT, необходимо добавить XrSpatialBufferTypeEXT, чтобы сообщить приложению тип данных буфера. Приложение может использовать подходящую функциюxrGetSpatialBuffer*, чтобы получить фактическое содержимое буфера.
Рекомендации по созданию и расширению семантических ярлыков
Хотя это расширение не определяет компонент для передачи информации о семантическом ярлыке объекта, оно устанавливает правила и рекомендации по проектированию для любых расширений, которые определяют такой компонент. В тексте ниже слова следует и необходимо относятся к авторам таких функций, а не к реализации среды выполнения или приложению, использующему API.
- Если расширение определяет семантические ярлыки для любого XrSpatialCapabilityEXT, оно должно делать это, определяя новый XrSpatialComponentTypeEXT, а также новое перечисление с набором ярлыков ("набор семантических ярлыков"), которые будут данными для этого компонента.
- Перечисление, представляющее набор семантических ярлыков, должно иметь значение, указывающее, что объект не относится ни к одному из ярлыков этого набора. Название этого перечислимого значения должно включать слово UNCATEGORIZED, например
XR_SPATIAL_PLANE_SEMANTIC_LABEL_UNCATEGORIZED_EXT. Это значение указывает приложениям, что среда выполнения распознает объект, но он также относится к другим наборам семантических ярлыков. - Перечисление этого нового типа XrSpatialComponentTypeEXT в xrEnumerateSpatialCapabilityComponentTypesEXT означает, что среда выполнения поддерживает набор семантических ярлыков (и, следовательно, ярлыки, определенные в наборе), соответствующие этому типу компонента.
- Приложения выражают желание обнаруживать объекты, у которых есть ярлыки, принадлежащие этому набору семантических ярлыков, включая соответствующий XrSpatialComponentTypeEXT в массив XrSpatialCapabilityConfigurationBaseHeaderEXT ::
enabledComponentsструктуры конфигурации для возможности, для которой перечисляется тип компонента. - У одного пространственного объекта может быть несколько компонентов, каждый из которых предоставляет ему ярлык из собственного набора семантических ярлыков. Рассмотрим следующий пример с некоторыми гипотетическими наборами семантических меток –
XrSpatialObjectSemanticLabel, которые могут иметь такие значения, как стул, диван, стол и т. д.,XrSpatialSofaBrand(например, IKEA, Wayfair и т. д.) иXrSpatialIkeaSofa(например, названия моделей диванов IKEA). В этом сценарии один и тот же объект дивана имеет все 3 компонента (метки из всех 3 наборов семантических меток), каждый из которых дает разную степень детализации информации об объекте. - Если расширение определяет новый тип XrSpatialComponentTypeEXT, который предоставляет новый набор семантических меток, содержащий несколько меток в дополнение к метке
UNCATEGORIZED, расширение должно рассмотреть возможность определения XrSpatialCapabilityFeatureEXT, который позволяет приложениям активировать только подмножество меток, определенных в наборе семантических меток, соответствующих этому типу компонента. Этот поднабор, указанный в следующей цепочке конфигурации возможностей, служит подсказкой для сред выполнения, чтобы оптимизировать конвейеры отслеживания и отслеживать только предоставленный поднабор. Пример такой структуры приведен ниже . - Расширения не должны добавлять ярлыки в существующий набор семантических ярлыков. Вместо этого необходимо определить новое перечисление, которое содержит эквивалентные перечислители с идентичной семантикой и значениями, равными значениям из другого набора, в дополнение к вновь добавленным перечислителям. Спецификация нового набора семантических ярлыков должна также устанавливать сопоставление между старым и новым наборами ярлыков. См. пример ниже.
Пример определения пространственного объекта для поднабора семантических ярлыков
// New example semantic label set.
typedef enum XrSpatialExampleSemanticLabelEXT {
// ... label values
} XrSpatialExampleSemanticLabelEXT;
/*
typedef enum XrSpatialCapabilityFeatureEXT {
// .. existing values
// new spatial feature value
XR_SPATIAL_CAPABILITY_FEATURE_EXAMPLE_SEMANTIC_LABEL_SUBSET_EXT
// .. existing values
} XrSpatialCapabilityFeatureEXT;
*/
// New spatial feaure configuration structure
typedef struct XrSpatialFeatureExampleSemanticLabelSubsetEXT {
XrStructureType type;
const void* XR_MAY_ALIAS next;
uint32_t semanticLabelCount;
const XrSpatialExampleSemanticLabelEXT* semanticLabels;
} XrSpatialFeatureExampleSemanticLabelSubsetEXT;
Пример расширения семантических ярлыков пространственных объектов
typedef enum XrSpatialExamplePlaneSemanticLabelExtensionEXT {
XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_UNCATEGORIZED_EXT = 1,
XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_FLOOR_EXT = 2,
XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_WALL_EXT = 3,
XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_CEILING_EXT = 4,
XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_TABLE_EXT = 5,
XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_DOOR_EXT = 6,
XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_WINDOW_EXT = 7,
XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialExamplePlaneSemanticLabelExtensionEXT;
Рассмотрим приведенный выше пример, в котором расширение определяет перечисление XrSpatialExamplePlaneSemanticLabelExtensionEXT, чтобы расширить существующий XrSpatialPlaneSemanticLabelEXT значениями, представляющими двери и окна. Спецификация для нового перечисления должна включать текст следующей формы:
For all non-UNCATEGORIZED label enumerants in elink:XrSpatialPlaneSemanticLabelEXT,
the runtime must: return that enumerant if and only if it returns the corresponding
label enumerant from elink:XrSpatialExamplePlaneSemanticLabelExtensionEXT with the same value
i.e.
the ename:XR_SPATIAL_COMPONENT_TYPE_PLANE_SEMANTIC_LABEL_EXT value for that entity must:
correspond with the ename:XR_SPATIAL_COMPONENT_TYPE_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_EXT values
according to the following table -
[width="100%",options="header"]
|====
| XrSpatialExamplePlaneSemanticLabelExtensionEXT | XrSpatialPlaneSemanticLabelEXT
| XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_FLOOR_EXT | XR_SPATIAL_PLANE_SEMANTIC_LABEL_FLOOR_EXT
| XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_WALL_EXT | XR_SPATIAL_PLANE_SEMANTIC_LABEL_WALL_EXT
| XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_CEILING_EXT | XR_SPATIAL_PLANE_SEMANTIC_LABEL_CEILING_EXT
| XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_TABLE_EXT | XR_SPATIAL_PLANE_SEMANTIC_LABEL_TABLE_EXT
| XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_DOOR_EXT | XR_SPATIAL_PLANE_SEMANTIC_LABEL_UNCATEGORIZED_EXT
| XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_WINDOW_EXT | XR_SPATIAL_PLANE_SEMANTIC_LABEL_UNCATEGORIZED_EXT
|====
Новые макросы
Новые типы оснований
XrSpatialBufferIdEXTXrSpatialEntityIdEXT
Новые типы объектов
Новые команды
- xrCreateSpatialContextAsyncEXT
- xrCreateSpatialContextCompleteEXT
- xrCreateSpatialDiscoverySnapshotAsyncEXT
- xrCreateSpatialDiscoverySnapshotCompleteEXT
- xrCreateSpatialEntityFromIdEXT
- xrCreateSpatialUpdateSnapshotEXT
- xrDestroySpatialContextEXT
- xrDestroySpatialEntityEXT
- xrDestroySpatialSnapshotEXT
- xrEnumerateSpatialCapabilitiesEXT
- xrEnumerateSpatialCapabilityComponentTypesEXT
- xrEnumerateSpatialCapabilityFeaturesEXT
- xrGetSpatialBufferFloatEXT
- xrGetSpatialBufferStringEXT
- xrGetSpatialBufferUint16EXT
- xrGetSpatialBufferUint32EXT
- xrGetSpatialBufferUint8EXT
- xrGetSpatialBufferVector2fEXT
- xrGetSpatialBufferVector3fEXT
- xrQuerySpatialComponentDataEXT
Новые структуры
- XrCreateSpatialContextCompletionEXT
- XrCreateSpatialDiscoverySnapshotCompletionEXT
- XrCreateSpatialDiscoverySnapshotCompletionInfoEXT
- XrEventDataSpatialDiscoveryRecommendedEXT
- XrSpatialBounded2DDataEXT
- XrSpatialBufferEXT
- XrSpatialBufferGetInfoEXT
- XrSpatialCapabilityComponentTypesEXT
- XrSpatialCapabilityConfigurationBaseHeaderEXT
- XrSpatialComponentDataQueryConditionEXT
- XrSpatialComponentDataQueryResultEXT
- XrSpatialContextCreateInfoEXT
- XrSpatialDiscoverySnapshotCreateInfoEXT
- XrSpatialEntityFromIdCreateInfoEXT
- XrSpatialMeshDataEXT
- XrSpatialUpdateSnapshotCreateInfoEXT
Расширение XrSpatialComponentDataQueryResultEXT :
Расширение XrSpatialDiscoverySnapshotCreateInfoEXT , XrSpatialComponentDataQueryConditionEXT :
Новые перечисления
- XrSpatialBufferTypeEXT
- XrSpatialCapabilityEXT
- XrSpatialCapabilityFeatureEXT
- XrSpatialComponentTypeEXT
- XrSpatialEntityTrackingStateEXT
Новые константы перечисления
XR_EXT_SPATIAL_ENTITY_EXTENSION_NAMEXR_EXT_spatial_entity_SPEC_VERSIONРасширение XrObjectType :
XR_OBJECT_TYPE_SPATIAL_CONTEXT_EXTXR_OBJECT_TYPE_SPATIAL_ENTITY_EXTXR_OBJECT_TYPE_SPATIAL_SNAPSHOT_EXT
Расширение XrResult :
XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXTXR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXTXR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXTXR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXTXR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXT
Расширение XrStructureType :
XR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXTXR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXTXR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXTXR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXTXR_TYPE_SPATIAL_BUFFER_GET_INFO_EXTXR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXTXR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXTXR_TYPE_SPATIAL_COMPONENT_BOUNDED_3D_LIST_EXTXR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXTXR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXTXR_TYPE_SPATIAL_COMPONENT_MESH_3D_LIST_EXTXR_TYPE_SPATIAL_COMPONENT_PARENT_LIST_EXTXR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXTXR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXTXR_TYPE_SPATIAL_ENTITY_FROM_ID_CREATE_INFO_EXTXR_TYPE_SPATIAL_FILTER_TRACKING_STATE_EXTXR_TYPE_SPATIAL_UPDATE_SNAPSHOT_CREATE_INFO_EXT
Проблемы
Всегда ли один объект происходит исключительно из одной возможности?
- Вопрос решен
- Ответ. Нет. Это полностью зависит от среды выполнения, ее возможностей отслеживания и того, как она представляет обнаруженный объект. Спецификация не предписывает конкретного представления пространственного объекта, за исключением гарантированных компонентов заданной возможности, чтобы установить минимальные ожидания. Среда выполнения может объединять объекты, обнаруженные разными функциями, и представлять их как один объект с гарантированными компонентами всех функций, которые помогли его идентифицировать. Например, столы могут быть обнаружены как с помощью отслеживания плоскости, так и с помощью отслеживания объектов. При этом отслеживание плоскости предоставляет компонент
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTдля объекта, а отслеживание объектов –XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT. Определенная среда выполнения может предоставлять таблицу в виде двух отдельных объектов, каждый из которых имеет собственный набор гарантированных компонентов, а некоторые среды выполнения могут предоставлять только один объект для представления таблицы и иметь какXR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT, так иXR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXTв одном объекте. Важно отметить, что у пространственного объекта может быть не более одного компонента каждого типа . Поэтому если данные компонента, созданные разными функциями, конфликтуют для определенного объекта, среда выполнения должна представить их как два отдельных объекта.
История версий
Версия 1, 12 апреля 2024 г. (Нихав Джайн, Google)
- Описание расширения