XR_EXT_spatial_entity
Cadena de nombre
XR_EXT_spatial_entity
Tipo de extensión
Extensión de la instancia
Número de extensión registrado
741
Revisión
1
Estado de ratificación
Ratificado
Dependencias de extensiones y versiones
XR_EXT_future
Colaboradores
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
Descripción general
Esta extensión presenta los conceptos y los fundamentos para la comprensión de escenas y el razonamiento espacial en OpenXR. Esto unifica varias áreas de funcionalidad relacionadas pero distintas, que se enumeran, configuran y con las que se interactúa de una manera ampliamente uniforme, según lo define esta extensión. Como esta extensión no tiene definiciones concretas de ninguna de estas áreas funcionales, el texto de la especificación formal tiende a ser algo abstracto. Los ejemplos incluidos en el texto de especificaciones de esta extensión a veces hacen referencia a la funcionalidad definida en una extensión relacionada hipotética o próxima a publicarse con fines ilustrativos, sin limitar ni especificar inherentemente dicha funcionalidad adicional.
Los componentes principales de esta extensión son los siguientes:
- Entidades espaciales : La funcionalidad se centra en las entidades , que proporcionan muy poca funcionalidad por sí solas.
- Componentes espaciales : Estas entidades tienen componentes asociados que proporcionan datos y comportamientos.
- Tipos de componentes espaciales : Cada componente espacial es de un tipo de componente específico , y cualquier entidad determinada tiene como máximo un solo componente de cualquier tipo de componente determinado .
- Contexto espacial : Toda interacción con entidades espaciales ocurre en un contexto después de una fase de inicialización y configuración.
- Capacidades espaciales : Las capacidades proporcionan de forma general la manipulación de entidades espaciales . Una capacidad es una unidad de funcionalidad, por ejemplo (sin limitarse a ello) anclajes definidos por la aplicación, detección de planos o seguimiento de imágenes. Por lo general, cada capacidad se define en una extensión separada (habilitada en la creación de la instancia como de costumbre) y se habilita para un contexto específico en el momento de la creación.
- Cada capacidad se asocia con un conjunto de tipos de componentes para los que hay componentes presentes en cada entidad expuesta por esa capacidad . La extensión que define una capacidad especifica qué tipos de componentes son obligatorios para la capacidad ("garantizados"), mientras que esa misma extensión o cualquier otra puede especificar tipos de componentes opcionales que proporcionan algunas implementaciones potenciales. Cualquier cantidad de capacidades puede proporcionar entidades con componentes de un tipo de componente determinado , que se pueden usar de manera uniforme sin importar la capacidad que los produjo.
- Funciones de capacidad espacial : Además, algunas capacidades requieren configuración y, por lo tanto, se parametrizan con funciones de capacidad .
Esta extensión proporciona un mecanismo para enumerar los componentes que proporciona cada capacidad admitida en el sistema actual, tanto los componentes obligatorios como los componentes opcionales .
Como algunas implementaciones pueden requerir diferentes grados de parametrización para las capacidades , esta extensión proporciona un mecanismo para enumerar las funciones de capacidad admitidas asociadas con una capacidad determinada en el sistema actual.
Esta extensión también define varios componentes comunes que se espera que se usen en una amplia variedad de capacidades .
Entidad espacial
Las entidades espaciales son entidades que existen en algún espacio y que tienen varios datos asociados organizados en componentes. Pueden ser cualquiera de los siguientes:
- Físicos (p.ej., superficies planas como paredes y pisos, objetos como sillas y bibliotecas, etc.)
- Virtual (p.ej., contenido colocado y compartido por otra aplicación o usuario)
- Definida por la app (p.ej., la aplicación marca un área como la "sala de estar" o la "cocina", o marca un punto como la ubicación para colocar la TV, etc.)
Los elementos que se exponen a través del sistema de acciones, como los controladores o la mirada, no se deben modelar como entidades espaciales.
Las entidades espaciales en OpenXR se modelan como un sistema de componentes de entidades . Cada entidad espacial tiene un conjunto de componentes, y cada componente proporciona un conjunto único de datos y comportamientos para esa entidad.
Las entidades espaciales se representan con un átomo XrSpatialEntityIdEXT o un identificador XrSpatialEntityEXT, cuyos detalles se proporcionan en la sección Representaciones de entidades espaciales.
Tipos de componentes espaciales
Una entidad espacial tiene uno o más componentes que proporcionan datos o comportamientos para esa entidad. Consulta Common Components para ver algunos componentes comunes definidos por esta extensión.
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_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialComponentTypeEXT;
La enumeración XrSpatialComponentTypeEXT identifica los diferentes tipos de componentes que el tiempo de ejecución puede admitir.
No todos los tipos de componentes que se enumeran los proporciona esta extensión por sí sola: algunos requieren que se habiliten extensiones adicionales en el momento de la creación de la instancia, como se documenta.
Los enumerantes tienen los siguientes valores:
Descripción de la enumeración
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT
Componente que proporciona los límites 2D para una entidad espacial. La estructura de lista correspondiente es XrSpatialComponentBounded2DListEXT y la estructura de datos correspondiente es XrSpatialBounded2DDataEXT.
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT
Componente que proporciona los límites 3D para una entidad espacial. La estructura de lista correspondiente es XrSpatialComponentBounded3DListEXT y la estructura de datos correspondiente es XrBoxf.
XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT
Es el componente que proporciona el XrSpatialEntityIdEXT del elemento principal para una entidad espacial. La estructura de lista correspondiente es XrSpatialComponentParentListEXT y la estructura de datos correspondiente es XrSpatialEntityIdEXT.
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT
Componente que proporciona una malla 3D para una entidad espacial. La estructura de lista correspondiente es XrSpatialComponentMesh3DListEXT y la estructura de datos correspondiente es XrSpatialMeshDataEXT.
XR_SPATIAL_COMPONENT_TYPE_PLANE_ALIGNMENT_EXT
Es el componente que proporciona la enumeración de alineación del plano para una entidad espacial. La estructura de lista correspondiente es XrSpatialComponentPlaneAlignmentListEXT y la estructura de datos correspondiente es XrSpatialPlaneAlignmentEXT (se agregó con la extensión XR_EXT_spatial_plane_tracking).
XR_SPATIAL_COMPONENT_TYPE_MESH_2D_EXT
Componente que proporciona una malla 2D para una entidad espacial. La estructura de lista correspondiente es XrSpatialComponentMesh2DListEXT y la estructura de datos correspondiente es XrSpatialMeshDataEXT (se agregó con la extensión XR_EXT_spatial_plane_tracking).
XR_SPATIAL_COMPONENT_TYPE_POLYGON_2D_EXT
Componente que proporciona un polígono de límite 2D para una entidad espacial. La estructura de lista correspondiente es XrSpatialComponentPolygon2DListEXT y la estructura de datos correspondiente es XrSpatialPolygon2DDataEXT (se agregó con la extensión XR_EXT_spatial_plane_tracking).
XR_SPATIAL_COMPONENT_TYPE_PLANE_SEMANTIC_LABEL_EXT
Componente que proporciona una etiqueta semántica para un plano. La estructura de lista correspondiente es XrSpatialComponentPlaneSemanticLabelListEXT y la estructura de datos correspondiente es XrSpatialPlaneSemanticLabelEXT (se agregó con la extensión XR_EXT_spatial_plane_tracking).
XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT
Es un componente que describe el tipo, el ID y la ubicación del marcador. La estructura de lista correspondiente es XrSpatialComponentMarkerListEXT y la estructura de datos correspondiente es XrSpatialMarkerDataEXT (se agregó con la extensión XR_EXT_spatial_marker_tracking).
XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT
Es un componente que proporciona una etiqueta semántica para una escena. La estructura de lista correspondiente es XrSpatialComponentObjectSemanticLabelListEXT. La estructura de datos correspondiente es XrSpatialObjectSemanticLabelEXT . (Agregado por la extensión XR_EXT_spatial_object_tracking)
XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT
Componente que proporciona una etiqueta semántica para un teclado. La estructura de lista correspondiente es XrSpatialComponentKeyboardSemanticLabelListEXT. La estructura de datos correspondiente es XrSpatialKeyboardSemanticLabelEXT (agregada por la extensión XR_EXT_spatial_object_tracking).
XR_SPATIAL_COMPONENT_TYPE_MOUSE_SEMANTIC_LABEL_EXT
Es un componente que proporciona una etiqueta semántica para un mouse. La estructura de lista correspondiente es XrSpatialComponentMouseSemanticLabelListEXT. La estructura de datos correspondiente es XrSpatialMouseSemanticLabelEXT (agregada por la extensión XR_EXT_spatial_object_tracking).
XR_SPATIAL_COMPONENT_TYPE_ANCHOR_EXT
Es el componente que proporciona la ubicación de un ancla. La estructura de lista correspondiente es XrSpatialComponentAnchorListEXT y la estructura de datos correspondiente es XrPosef (se agregó con la extensión XR_EXT_spatial_anchor).
XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_EXT
Componente que proporciona el UUID persistente para una entidad espacial. La estructura de lista correspondiente es XrSpatialComponentPersistenceListEXT y la estructura de datos correspondiente es XrSpatialPersistenceDataEXT (se agregó con la extensión XR_EXT_spatial_persistence).
XR_SPATIAL_COMPONENT_TYPE_IMAGE_2D_EXT
Es un componente que describe el tipo de imagen plana. La estructura de lista correspondiente es XrSpatialComponentImage2DListEXT y la estructura de datos correspondiente es XrSpatialImageSizeEXT . (Agregado por la extensión XR_EXT_spatial_image_tracking)
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT
Componente que proporciona las normales para la malla 3D de una entidad espacial. La estructura de lista correspondiente es XrSpatialComponentMesh3DNormalsListEXT y la estructura de datos correspondiente es XrSpatialBufferEXT (se agregó con la extensión XR_EXT_spatial_mesh_tracking).
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT
Componente que proporciona las etiquetas semánticas por vértice para la malla 3D de una entidad espacial. La estructura de lista correspondiente es XrSpatialComponentMesh3DVertexSemanticLabelsListEXT; la estructura de datos correspondiente es XrSpatialBufferEXT; los datos dentro del búfer se asignan a XrSpatialMeshSemanticLabelEXT (agregado por la extensión XR_EXT_spatial_mesh_tracking).
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT
Componente que proporciona las etiquetas semánticas por cara triangular para la malla 3D de una entidad espacial. La estructura de lista correspondiente es XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT; la estructura de datos correspondiente es XrSpatialBufferEXT; los datos dentro del búfer se asignan a XrSpatialMeshSemanticLabelEXT (agregado por la extensión XR_EXT_spatial_mesh_tracking).
XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_ANDROID
Componente que proporciona una etiqueta semántica para un objeto. La estructura de lista correspondiente es XrSpatialComponentObjectSemanticLabelListANDROID y la estructura de datos correspondiente es XrSpatialObjectSemanticLabelANDROID (se agregó con la extensión XR_ANDROID_spatial_object_tracking).
XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID
Componente que proporciona la posición de un impacto de rayo en una entidad. La estructura de lista correspondiente es XrSpatialComponentRaycastResultListANDROID y la estructura de datos correspondiente es XrSpatialRaycastResultDataANDROID (se agregó con la extensión XR_ANDROID_spatial_discovery_raycast).
XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID
Componente que proporciona el ID de la entidad que subsume la entidad adjunta. La estructura de lista correspondiente es XrSpatialComponentSubsumedByListANDROID y la estructura de datos correspondiente es XrSpatialEntityIdEXT (agregada por la extensión XR_ANDROID_spatial_component_subsumed_by).
XR_SPATIAL_COMPONENT_TYPE_ROOM_ANDROIDSYS
Componente que proporciona las dimensiones y el tipo de habitación de una caja de zapatos. La estructura de lista correspondiente es XrSpatialComponentRoomListANDROIDSYS. La estructura de datos correspondiente es XrSpatialRoomDataANDROIDSYS (agregada por la extensión XR_ANDROIDSYS_spatial_room_tracking).
XR_SPATIAL_COMPONENT_TYPE_MATERIAL_TYPE_ANDROIDSYS
Componente que proporciona el tipo de material de una superficie límite. La estructura de lista correspondiente es XrSpatialComponentMaterialTypeListANDROIDSYS y la estructura de datos correspondiente es XrSpatialMaterialTypeANDROIDSYS (se agregó con la extensión XR_ANDROIDSYS_spatial_room_tracking).
XR_SPATIAL_COMPONENT_TYPE_CONFIDENCE_ANDROIDSYS
Componente que proporciona la confianza de un objeto rastreable. La estructura de lista correspondiente es XrSpatialComponentConfidenceListANDROIDSYS y la estructura de datos correspondiente es float (agregado por la extensión XR_ANDROIDSYS_spatial_room_tracking).
XR_SPATIAL_COMPONENT_TYPE_ROOM_EMPTINESS_ANDROIDSYS
Componente que proporciona el vacío de una habitación. La estructura de lista correspondiente es XrSpatialComponentRoomEmptinessListANDROIDSYS y la estructura de datos correspondiente es float (agregada por la extensión XR_ANDROIDSYS_spatial_room_tracking).
XR_SPATIAL_COMPONENT_TYPE_OCCUPANCY_GRID_ANDROIDX1
Componente que proporciona información de la cuadrícula de ocupación en la entidad adjunta. La estructura de lista correspondiente es XrSpatialComponentOccupancyGridListANDROIDX1 y la estructura de datos correspondiente es XrSpatialOccupancyGridDataANDROIDX1 (se agregó con la extensión XR_ANDROIDX1_spatial_occupancy_grid).
XR_SPATIAL_COMPONENT_TYPE_ANNOTATION_QUAD_ANDROID
Es un componente que describe una anotación de cuadrilátero. La estructura de lista correspondiente es XrSpatialComponentAnnotationQuadListANDROID y la estructura de datos correspondiente es XrSpatialAnnotationQuadDataANDROID (se agregó con la extensión XR_ANDROID_spatial_annotation_tracking).
XR_SPATIAL_COMPONENT_TYPE_STREETSCAPE_GEOMETRY_METADATA_ANDROIDX2
Componente que proporciona los metadatos para una geometría de Streetscape. La estructura de lista correspondiente es XrSpatialComponentStreetscapeGeometryMetadataListANDROIDX2 y la estructura de datos correspondiente es XrSpatialStreetscapeGeometryMetadataANDROIDX2 (se agregó con la extensión XR_ANDROIDX2_geospatial_streetscape).
Funciones espaciales y configuración
Las capacidades espaciales definen las habilidades de un tiempo de ejecución para descubrir entidades que tienen un conjunto garantizado de componentes. Las aplicaciones habilitan los componentes de una capacidad espacial cuando crean el XrSpatialContextEXT, y el tiempo de ejecución, a su vez, debe proporcionar solo los componentes habilitados en las entidades descubiertas. Por ejemplo, si un tiempo de ejecución informa que uno de los componentes de una capacidad determinada son las "etiquetas semánticas", significa que la aplicación puede habilitar las etiquetas semánticas a través de la configuración de esa capacidad y que el tiempo de ejecución debe proporcionar solo el componente de etiqueta semántica si está configurado.
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;
La enumeración XrSpatialCapabilityEXT identifica los diferentes tipos de capacidades que el tiempo de ejecución puede admitir.
Los enumerantes tienen los siguientes valores:
Descripción de la enumeración
XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT
Seguimiento de planos (agregado por la extensión XR_EXT_spatial_plane_tracking)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT
Capacidad para detectar y hacer un seguimiento de códigos QR (Agregado por la extensión XR_EXT_spatial_marker_tracking)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE_EXT
Capacidad para detectar y hacer un seguimiento de los códigos QR pequeños. (Agregado por la extensión XR_EXT_spatial_marker_tracking)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_EXT
Capacidad para detectar y hacer un seguimiento de los marcadores Aruco (Agregado por la extensión XR_EXT_spatial_marker_tracking)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXT
Capacidad para detectar y hacer un seguimiento de AprilTags (Agregado por la extensión XR_EXT_spatial_marker_tracking)
XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT
Seguimiento de objetos (agregado por la extensión XR_EXT_spatial_object_tracking)
XR_SPATIAL_CAPABILITY_ANCHOR_EXT
Capacidad para crear anclajes espaciales (agregada por la extensión XR_EXT_spatial_anchor)
XR_SPATIAL_CAPABILITY_IMAGE_TRACKING_EXT
Capacidad para detectar y hacer un seguimiento de imágenes de referencia planas (Agregado por la extensión XR_EXT_spatial_image_tracking)
XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT
Capacidad de hacer un seguimiento de la malla de un entorno. (Agregado por la extensión XR_EXT_spatial_mesh_tracking)
XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_ANDROID
Seguimiento de objetos (agregado por la extensión XR_ANDROID_spatial_object_tracking)
XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID
Raycast contra el búfer de profundidad (agregado por la extensión XR_ANDROID_spatial_discovery_raycast)
XR_SPATIAL_CAPABILITY_ROOM_TRACKING_ANDROIDSYS
Capacidad para hacer un seguimiento de una habitación (agregada por la extensión de XR_ANDROIDSYS_spatial_room_tracking)
XR_SPATIAL_CAPABILITY_ROOM_BOUNDARY_TRACKING_ANDROIDSYS
Capacidad para hacer un seguimiento del límite de una habitación (agregada por la extensión XR_ANDROIDSYS_spatial_room_tracking)
XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID
Seguimiento de anotaciones (agregado por la extensión XR_ANDROID_spatial_annotation_tracking)
XR_SPATIAL_CAPABILITY_STREETSCAPE_GEOMETRY_ANDROIDX2
Geometría del paisaje urbano (agregada por la extensión de XR_ANDROIDX2_geospatial_streetscape)
La función xrEnumerateSpatialCapabilitiesEXT se define de la siguiente manera:
XrResult xrEnumerateSpatialCapabilitiesEXT(
XrInstance instance,
XrSystemId systemId,
uint32_t capabilityCapacityInput,
uint32_t* capabilityCountOutput,
XrSpatialCapabilityEXT* capabilities);
Descripciones de los parámetros
instancees un identificador para un XrInstance .systemIdes elXrSystemIdcuyas capacidades espaciales se enumerarán.capabilityCapacityInputes la capacidad del arraycapabilitieso 0 para indicar una solicitud para recuperar la capacidad requerida.capabilityCountOutputes la cantidad de capacidades o la capacidad requerida en caso de quecapabilityCapacityInputsea insuficiente.capabilitieses un array de XrSpatialCapabilityEXT . Puede serNULLsicapabilityCapacityInputes 0.- Consulta la sección Parámetros de tamaño del búfer para obtener una descripción detallada de cómo recuperar el tamaño
capabilitiesrequerido.
La aplicación puede enumerar la lista de capacidades espaciales admitidas por un XrSystemId determinado con xrEnumerateSpatialCapabilitiesEXT .
El tiempo de ejecución no debe enumerar las capacidades espaciales cuya extensión no esté habilitada para instance .
Uso válido (implícito)
- La extensión
XR_EXT_spatial_entitydebe habilitarse antes de llamar a xrEnumerateSpatialCapabilitiesEXT. -
instancedebe ser un identificador de XrInstance válido -
capabilityCountOutputdebe ser un puntero a un valoruint32_t - Si
capabilityCapacityInputno es0,capabilitiesdebe ser un puntero a un array de valorescapabilityCapacityInputXrSpatialCapabilityEXT.
Códigos de retorno
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
La función xrEnumerateSpatialCapabilityComponentTypesEXT se define de la siguiente manera:
XrResult xrEnumerateSpatialCapabilityComponentTypesEXT(
XrInstance instance,
XrSystemId systemId,
XrSpatialCapabilityEXT capability,
XrSpatialCapabilityComponentTypesEXT* capabilityComponents);
Descripciones de los parámetros
instancees un identificador para un XrInstance .systemIdes elXrSystemIdcuyos componentes de capacidad espacial se enumerarán.capabilityes el XrSpatialCapabilityEXT para el que se enumerarán los componentes.capabilityComponentses un puntero a un XrSpatialCapabilityComponentTypesEXT , que es una estructura de entrada/salida en la que se propaga un array asignado por la aplicación.
Esta función enumera los tipos de componentes que la capacidad determinada proporciona en sus entidades en el sistema según la configuración.
La aplicación puede usar los tipos de componentes enumerados en XrSpatialCapabilityComponentTypesEXT :: componentTypes para comprender el conjunto completo de componentes que admite systemId para capability y puede usar esta lista para determinar cuál es una configuración válida para capability cuando crea un XrSpatialContextEXT para él.
El tiempo de ejecución debe devolver XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT si xrEnumerateSpatialCapabilitiesEXT no enumera capability .
El tiempo de ejecución no debe enumerar los tipos de componentes espaciales cuya extensión no esté habilitada para instance .
Uso válido (implícito)
- La extensión
XR_EXT_spatial_entitydebe habilitarse antes de llamar a xrEnumerateSpatialCapabilityComponentTypesEXT -
instancedebe ser un identificador de XrInstance válido -
capabilitydebe ser un valor XrSpatialCapabilityEXT válido. -
capabilityComponentsdebe ser un puntero a una estructura XrSpatialCapabilityComponentTypesEXT.
Códigos de retorno
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
La estructura XrSpatialCapabilityComponentTypesEXT se define de la siguiente manera:
typedef struct XrSpatialCapabilityComponentTypesEXT {
XrStructureType type;
void* next;
uint32_t componentTypeCapacityInput;
uint32_t componentTypeCountOutput;
XrSpatialComponentTypeEXT* componentTypes;
} XrSpatialCapabilityComponentTypesEXT;
Descripciones de los miembros
typees el XrStructureType de esta estructura.nextesNULLo un puntero a la siguiente estructura en una cadena de estructuras. No se definen tales estructuras en OpenXR principal ni en esta extensión.componentTypeCapacityInputes la capacidad del array o 0 para indicar una solicitud para recuperar la capacidad requerida.componentTypeCountOutputes la cantidad de tipos de componentes o la capacidad requerida en caso de quecomponentTypeCapacityInputsea insuficiente.componentTypeses un array de XrSpatialComponentTypeEXT . Puede serNULLsicomponentTypeCapacityInputes 0.- Consulta la sección Parámetros de tamaño del búfer para obtener una descripción detallada de cómo recuperar el tamaño
componentTypesrequerido.
Uso válido (implícito)
- La extensión
XR_EXT_spatial_entitydebe habilitarse antes de usar XrSpatialCapabilityComponentTypesEXT. -
typedebe serXR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXT -
nextdebe serNULLo un puntero válido a la siguiente estructura en una cadena de estructuras - Si
componentTypeCapacityInputno es0,componentTypesdebe ser un puntero a un array de valorescomponentTypeCapacityInputXrSpatialComponentTypeEXT.
Funciones de capacidad espacial
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;
Algunas capacidades tienen parámetros expuestos a la aplicación para configurar cómo el entorno de ejecución calcula los datos del componente. Estas dimensiones de parametrización o configurabilidad se conocen como funciones de capacidad. Por ejemplo, para una capacidad de seguimiento de imágenes, un tiempo de ejecución puede admitir una función para que la aplicación especifique si las imágenes rastreadas son estacionarias o no.
Proporcionar esta información al tiempo de ejecución a través de una estructura de configuración no debe cambiar el conjunto de tipos de componentes presentes en las entidades asociadas, p.ej., en la imagen rastreada. Sin embargo, el tiempo de ejecución puede optimizar, p.ej., las capacidades de seguimiento de la función de seguimiento de imágenes y brindar una mejor experiencia a la aplicación.
Estas funciones se representan con XrSpatialCapabilityFeatureEXT, y la aplicación las enumera con xrEnumerateSpatialCapabilityFeaturesEXT .
Cada función de capacidad tiene una estructura de configuración correspondiente para habilitarla. Estas estructuras de configuración deben encadenarse a XrSpatialCapabilityConfigurationBaseHeaderEXT :: next de la capability correspondiente.
Los enumerantes tienen los siguientes valores:
Descripción de la enumeración
XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_FIXED_SIZE_MARKERS_EXT
Función de capacidad para permitir que las aplicaciones especifiquen el tamaño de los marcadores. La estructura de configuración correspondiente es XrSpatialMarkerSizeEXT (agregada por la extensión XR_EXT_spatial_marker_tracking).
XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_STATIC_MARKERS_EXT
Se agregó la función de capacidad para permitir que las aplicaciones especifiquen si los marcadores son estáticos. La estructura de configuración correspondiente es XrSpatialMarkerStaticOptimizationEXT (agregada por la extensión XR_EXT_spatial_marker_tracking).
XR_SPATIAL_CAPABILITY_FEATURE_OBJECT_SEMANTIC_LABEL_SUBSET_EXT
Es una función espacial que permite que las aplicaciones especifiquen un subconjunto de etiquetas de XrSpatialObjectSemanticLabelEXT para que el tiempo de ejecución realice un seguimiento. La estructura de configuración correspondiente es XrSpatialFeatureObjectSemanticLabelSubsetEXT . (Agregado por la extensión XR_EXT_spatial_object_tracking)
XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID
El tiempo de ejecución admite el filtro XrSpatialBoundsSpherefANDROID para XrSpatialDiscoverySnapshotCreateInfoEXT. Esto no requiere que se incluya ninguna estructura de configuración durante la creación del contexto espacial. (Agregado por la extensión XR_ANDROID_spatial_discovery_bounds)
XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID
El tiempo de ejecución admite el filtro XrSpatialBoundsBoxfANDROID para XrSpatialDiscoverySnapshotCreateInfoEXT. Esto no requiere que se incluya ninguna estructura de configuración durante la creación del contexto espacial. (Agregado por la extensión XR_ANDROID_spatial_discovery_bounds)
XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID
El tiempo de ejecución admite el filtro XrSpatialBoundsFrustumfANDROID para XrSpatialDiscoverySnapshotCreateInfoEXT. Esto no requiere que se incluya ninguna estructura de configuración durante la creación del contexto espacial. (Agregado por la extensión XR_ANDROID_spatial_discovery_bounds)
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_AUTOMATIC_SIZE_IMAGES_EXT
El tiempo de ejecución admite la deducción automática del tamaño físico de las imágenes detectadas y rastreadas. La estructura de configuración correspondiente es XrSpatialImageSizeEXT (agregada por la extensión XR_EXT_spatial_image_tracking).
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_STATIC_IMAGES_EXT
El tiempo de ejecución admite XrSpatialImageStaticOptimizationEXT . La estructura de configuración correspondiente es XrSpatialImageStaticOptimizationEXT . (Agregado por la extensión XR_EXT_spatial_image_tracking)
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_FIXED_SIZE_IMAGES_EXT
El tiempo de ejecución admite XrSpatialImageSizeEXT . La estructura de configuración correspondiente es XrSpatialImageSizeEXT (agregada por la extensión XR_EXT_spatial_image_tracking).
XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT
Función de capacidad para hacer un seguimiento de una malla hermética del entorno. La estructura de configuración correspondiente es XrSpatialFeatureTrackWatertightMeshEXT . (Agregado por la extensión XR_EXT_spatial_mesh_tracking)
La función xrEnumerateSpatialCapabilityFeaturesEXT se define de la siguiente manera:
XrResult xrEnumerateSpatialCapabilityFeaturesEXT(
XrInstance instance,
XrSystemId systemId,
XrSpatialCapabilityEXT capability,
uint32_t capabilityFeatureCapacityInput,
uint32_t* capabilityFeatureCountOutput,
XrSpatialCapabilityFeatureEXT* capabilityFeatures);
Descripciones de los parámetros
instancees un identificador para un XrInstance .systemIdes elXrSystemIdcuyos atributos de capacidad espacial se enumerarán.capabilityes el XrSpatialCapabilityEXT para el que se enumerarán las funciones.capabilityFeatureCapacityInputes la capacidad del array o 0 para indicar una solicitud para recuperar la capacidad requerida.capabilityFeatureCountOutputes la cantidad de características o la capacidad requerida en caso de quecapabilityFeatureCapacityInputsea insuficiente.capabilityFeatureses un array de XrSpatialCapabilityFeatureEXT . Puede serNULLsicapabilityFeatureCapacityInputes 0.- Consulta la sección Parámetros de tamaño del búfer para obtener una descripción detallada de cómo recuperar el tamaño
capabilityFeaturesrequerido.
La aplicación descubre las funciones que admite un sistema determinado para un XrSpatialCapabilityEXT con xrEnumerateSpatialCapabilityFeaturesEXT .
En el caso de las capacidades que tienen funciones expuestas, la aplicación selecciona la función o las funciones que se habilitarán y proporciona la estructura de configuración correspondiente en la siguiente cadena de las estructuras de configuración de la capacidad en XrSpatialContextCreateInfoEXT :: capabilityConfigs .
Si capability no es una capacidad enumerada por xrEnumerateSpatialCapabilitiesEXT , el tiempo de ejecución debe devolver XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT .
El tiempo de ejecución no debe enumerar las funciones de capacidad espacial cuya extensión no esté habilitada para instance .
Uso válido (implícito)
- La extensión
XR_EXT_spatial_entitydebe habilitarse antes de llamar a xrEnumerateSpatialCapabilityFeaturesEXT. -
instancedebe ser un identificador de XrInstance válido -
capabilitydebe ser un valor XrSpatialCapabilityEXT válido. -
capabilityFeatureCountOutputdebe ser un puntero a un valoruint32_t - Si
capabilityFeatureCapacityInputno es0,capabilityFeaturesdebe ser un puntero a un array de valorescapabilityFeatureCapacityInputXrSpatialCapabilityFeatureEXT.
Códigos de retorno
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
Contexto espacial
Crea un contexto espacial
XR_DEFINE_HANDLE(XrSpatialContextEXT)
El identificador XrSpatialContextEXT representa los recursos para descubrir y actualizar una cierta cantidad de entidades espaciales en el entorno del usuario. La aplicación puede usar este identificador para descubrir y actualizar entidades espaciales con otras funciones de esta extensión.
La función xrCreateSpatialContextAsyncEXT se define de la siguiente manera:
XrResult xrCreateSpatialContextAsyncEXT(
XrSession session,
const XrSpatialContextCreateInfoEXT* createInfo,
XrFutureEXT* future);
Descripciones de los parámetros
sessiones un XrSession en el que el contexto espacial estará activo.createInfoes el XrSpatialContextCreateInfoEXT que se usa para especificar los parámetros del contexto espacial.futurees un puntero a unXrFutureEXT.
La aplicación puede crear un identificador XrSpatialContextEXT de las siguientes maneras:
- Proporciona estructuras derivadas de XrSpatialCapabilityConfigurationBaseHeaderEXT en XrSpatialContextCreateInfoEXT ::
capabilityConfigspara habilitar funciones y componentes para esa función. - Configurar las capacidades con las estructuras de configuración correspondientes de su XrSpatialCapabilityFeatureEXT
El tiempo de ejecución debe devolver XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT si XrSpatialContextCreateInfoEXT ::capabilityConfigCount es 0. Un identificador de contexto espacial necesita al menos una capacidad.
El tiempo de ejecución debe devolver XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT si xrEnumerateSpatialCapabilitiesEXT no enumera ninguna capacidad en el array capabilityConfigs de XrSpatialContextCreateInfoEXT .
El tiempo de ejecución debe devolver XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT si algún XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponentCount en XrSpatialContextCreateInfoEXT :: capabilityConfigs es 0. La configuración de una capacidad está incompleta si no incluye una lista de los tipos de componentes que se deben habilitar para esa capacidad.
El tiempo de ejecución debe devolver XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT si no se enumera ningún tipo de componente que se muestre en XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents para XrSpatialCapabilityConfigurationBaseHeaderEXT :: capability en xrEnumerateSpatialCapabilityComponentTypesEXT .
Si alguna de las estructuras de la siguiente cadena de XrSpatialContextCreateInfoEXT :: capabilityConfigs corresponde a un XrSpatialCapabilityFeatureEXT que no se enumeró para esa capacidad en xrEnumerateSpatialCapabilityFeaturesEXT , el tiempo de ejecución debe ignorar esa estructura XrSpatialCapabilityFeatureEXT.
El tiempo de ejecución debe devolver XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT si XrSpatialContextCreateInfoEXT :: capabilityConfigs contiene varias estructuras con el mismo XrSpatialCapabilityConfigurationBaseHeaderEXT :: capability .
Para garantizar el uso óptimo de los recursos del sistema, el tiempo de ejecución puede usar las configuraciones proporcionadas en el array XrSpatialContextCreateInfoEXT para prepararse para las solicitudes espaciales entrantes. Por ejemplo, un tiempo de ejecución que admite la capacidad de seguimiento de planos puede iniciar su canalización de seguimiento de planos solo si la aplicación crea un identificador de contexto espacial que contenga la capacidad de seguimiento de planos. Si las capacidades configuradas tienen un tiempo de calentamiento prolongado, las llamadas a xrCreateSpatialDiscoverySnapshotAsyncEXT pueden generar una instantánea vacía. La aplicación puede esperar a XrEventDataSpatialDiscoveryRecommendedEXT antes de usar xrCreateSpatialDiscoverySnapshotAsyncEXT para asegurarse de que los servicios de seguimiento subyacentes se hayan inicializado.
Si un tiempo de ejecución aplica un sistema de permisos para controlar el acceso de la aplicación a las capacidades espaciales que se configuran para XrSpatialContextEXT , el tiempo de ejecución debe devolver XR_ERROR_PERMISSION_INSUFFICIENT si no se otorgaron esos permisos a esta aplicación.
Esta función inicia una operación asíncrona y crea un XrFutureEXT correspondiente , que se puede usar con xrPollFutureEXT y funciones relacionadas. El valor que devuelve esta función solo indica si los parámetros eran aceptables para programar la operación asíncrona. La función de finalización correspondiente es xrCreateSpatialContextCompleteEXT , que se puede usar cuando un futuro de esta función está en el estado READY, con salidas propagadas por esa función en la estructura de finalización XrCreateSpatialContextCompletionEXT .
Uso válido (implícito)
- La extensión
XR_EXT_spatial_entitydebe habilitarse antes de llamar a xrCreateSpatialContextAsyncEXT -
sessiondebe ser un identificador de XrSession válido -
createInfodebe ser un puntero a una estructura XrSpatialContextCreateInfoEXT válida. -
futuredebe ser un puntero a un valorXrFutureEXT.
Códigos de retorno
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_FAILURE
La estructura XrSpatialContextCreateInfoEXT se define de la siguiente manera:
typedef struct XrSpatialContextCreateInfoEXT {
XrStructureType type;
const void* next;
uint32_t capabilityConfigCount;
const XrSpatialCapabilityConfigurationBaseHeaderEXT* const* capabilityConfigs;
} XrSpatialContextCreateInfoEXT;
Descripciones de los miembros
typees el XrStructureType de esta estructura.nextesNULLo un puntero a la siguiente estructura en una cadena de estructuras. No se definen tales estructuras en OpenXR principal ni en esta extensión.capabilityConfigCountes unuint32_tque describe el recuento de elementos en el arraycapabilityConfigs.capabilityConfigses un puntero a un array de punteros XrSpatialCapabilityConfigurationBaseHeaderEXT.
La estructura XrSpatialContextCreateInfoEXT describe la información para crear un identificador XrSpatialContextEXT.
Uso válido (implícito)
- La extensión
XR_EXT_spatial_entitydebe habilitarse antes de usar XrSpatialContextCreateInfoEXT -
typedebe serXR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXT -
nextdebe serNULLo un puntero válido a la siguiente estructura en una cadena de estructuras . Consulta también: XrSpatialContextPersistenceConfigEXT -
capabilityConfigsdebe ser un puntero a un array de estructuras válidas basadas encapabilityConfigCountXrSpatialCapabilityConfigurationBaseHeaderEXT. Consulta también: XrSpatialCapabilityConfigurationAnchorEXT , XrSpatialCapabilityConfigurationAprilTagEXT , XrSpatialCapabilityConfigurationArucoMarkerEXT , XrSpatialCapabilityConfigurationDepthRaycastANDROID , XrSpatialCapabilityConfigurationImageTrackingEXT , XrSpatialCapabilityConfigurationMeshTrackingEXT , XrSpatialCapabilityConfigurationMicroQrCodeEXT , XrSpatialCapabilityConfigurationObjectTrackingANDROID , XrSpatialCapabilityConfigurationObjectTrackingEXT , XrSpatialCapabilityConfigurationPlaneTrackingEXT , XrSpatialCapabilityConfigurationQrCodeEXT , XrSpatialCapabilityConfigurationRoomBoundaryTrackingANDROIDSYS , XrSpatialCapabilityConfigurationRoomTrackingANDROIDSYS , XrSpatialCapabilityConfigurationStreetscapeGeometryANDROIDX2 - El parámetro
capabilityConfigCountdebe ser mayor que0.
La estructura XrSpatialCapabilityConfigurationBaseHeaderEXT se define de la siguiente manera:
typedef struct XrSpatialCapabilityConfigurationBaseHeaderEXT {
XrStructureType type;
const void* next;
XrSpatialCapabilityEXT capability;
uint32_t enabledComponentCount;
const XrSpatialComponentTypeEXT* enabledComponents;
} XrSpatialCapabilityConfigurationBaseHeaderEXT;
Esta estructura no se usa directamente en la API, sino que sus estructuras secundarias se pueden usar con XrSpatialContextCreateInfoEXT para configurar las capacidades espaciales.
Descripciones de los miembros
typees el XrStructureType de esta estructura.nextesNULLo un puntero a la siguiente estructura en una cadena de estructuras.capabilityes un XrSpatialCapabilityEXT .enabledComponentCountes unuint32_tque describe el recuento de elementos en el arrayenabledComponents.enabledComponentses un puntero a un array de XrSpatialComponentTypeEXT .
El tiempo de ejecución debe devolver XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT si xrEnumerateSpatialCapabilitiesEXT no enumera capability . El tiempo de ejecución debe devolver XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT si no se enumera ningún tipo de componente que se incluya en enabledComponents para capability en xrEnumerateSpatialCapabilityComponentTypesEXT .
Uso válido (implícito)
- La extensión
XR_EXT_spatial_entitydebe habilitarse antes de usar XrSpatialCapabilityConfigurationBaseHeaderEXT. -
nextdebe serNULLo un puntero válido a la siguiente estructura en una cadena de estructuras -
capabilitydebe ser un valor XrSpatialCapabilityEXT válido. -
enabledComponentsdebe ser un puntero a un array de valores XrSpatialComponentTypeEXT válidos deenabledComponentCount. - El parámetro
enabledComponentCountdebe ser mayor que0.
La función xrCreateSpatialContextCompleteEXT se define de la siguiente manera:
XrResult xrCreateSpatialContextCompleteEXT(
XrSession session,
XrFutureEXT future,
XrCreateSpatialContextCompletionEXT* completion);
Descripciones de los parámetros
sessiones el XrSession que se pasó anteriormente a xrCreateSpatialContextAsyncEXT ::session.futurees elXrFutureEXTrecibido de xrCreateSpatialContextAsyncEXT .completiones un puntero a un XrCreateSpatialContextCompletionEXT .
xrCreateSpatialContextCompleteEXT completa la operación asíncrona iniciada por xrCreateSpatialContextAsyncEXT . El tiempo de ejecución debe devolver XR_ERROR_FUTURE_PENDING_EXT si future no está en estado listo. El tiempo de ejecución debe devolver XR_ERROR_FUTURE_INVALID_EXT si future ya se completó o canceló.
Uso válido (implícito)
- La extensión
XR_EXT_spatial_entitydebe habilitarse antes de llamar a xrCreateSpatialContextCompleteEXT -
sessiondebe ser un identificador de XrSession válido -
completiondebe ser un puntero a una estructura XrCreateSpatialContextCompletionEXT.
Códigos de retorno
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
La estructura XrCreateSpatialContextCompletionEXT se define de la siguiente manera:
typedef struct XrCreateSpatialContextCompletionEXT {
XrStructureType type;
void* next;
XrResult futureResult;
XrSpatialContextEXT spatialContext;
} XrCreateSpatialContextCompletionEXT;
Descripciones de los miembros
typees el XrStructureType de esta estructura.nextesNULLo un puntero a la siguiente estructura en una cadena de estructuras.futureResultes el XrResult de la operación de creación del contexto espacial.spatialContextes un XrSpatialContextEXT creado con los datos y la configuración de xrCreateSpatialContextAsyncEXT ::createInfo.
Códigos de devolución futuros
Valores de 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
Si futureResult es un código de éxito, spatialContext debe ser válido. Si spatialContext es válido, lo seguirá siendo solo dentro del ciclo de vida de xrCreateSpatialContextAsyncEXT :: session o hasta que la aplicación destruya el spatialContext con xrDestroySpatialContextEXT , lo que ocurra primero.
Uso válido (implícito)
- La extensión
XR_EXT_spatial_entitydebe habilitarse antes de usar XrCreateSpatialContextCompletionEXT -
typedebe serXR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXT -
nextdebe serNULLo un puntero válido a la siguiente estructura en una cadena de estructuras -
futureResultdebe ser un valor XrResult válido - Si
spatialContextno es XR_NULL_HANDLE ,spatialContextdebe ser un identificador XrSpatialContextEXT válido.
Destruye el contexto espacial
La función xrDestroySpatialContextEXT se define de la siguiente manera:
XrResult xrDestroySpatialContextEXT(
XrSpatialContextEXT spatialContext);
Descripciones de los parámetros
spatialContextes un XrSpatialContextEXT creado anteriormente por xrCreateSpatialContextAsyncEXT .
La aplicación puede llamar a la función xrDestroySpatialContextEXT para liberar el identificador spatialContext y los recursos subyacentes cuando finalicen las tareas de actualización y descubrimiento de entidades espaciales. Si no hay otro objeto XrSpatialContextEXT válido que se haya creado con las mismas capacidades espaciales que spatialContext , esta llamada sirve como sugerencia para que el tiempo de ejecución inhabilite los servicios de seguimiento necesarios para que esas capacidades ahorren recursos del sistema.
Uso válido (implícito)
- La extensión
XR_EXT_spatial_entitydebe habilitarse antes de llamar a xrDestroySpatialContextEXT -
spatialContextdebe ser un identificador de XrSpatialContextEXT válido.
Seguridad de subprocesos
- El acceso a
spatialContexty a cualquier identificador secundario debe sincronizarse de forma externa.
Códigos de retorno
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
Representaciones de entidades espaciales
ID de entidad espacial
XR_DEFINE_ATOM(XrSpatialEntityIdEXT)
XrSpatialEntityIdEXT se usa para representar cualquier tipo de entidad que el tiempo de ejecución descubre en el entorno espacial del usuario. Un XrSpatialEntityIdEXT es válido para el XrSpatialContextEXT en el que se descubre, y el tiempo de ejecución no debe reutilizar el mismo XrSpatialEntityIdEXT para diferentes entidades dentro del mismo XrSpatialContextEXT . Además, el tiempo de ejecución no debe volver a usar el mismo XrSpatialEntityIdEXT en varios XrSpatialContextEXT dentro del mismo XrSession, independientemente de si representa la misma entidad o diferentes.
#define XR_NULL_SPATIAL_ENTITY_ID_EXT 0
XR_NULL_SPATIAL_ENTITY_ID_EXT es un valor reservado que representa un XrSpatialEntityIdEXT no válido . Puede pasarse a las funciones de la API y devolverse de ellas solo cuando se permite específicamente.
Identificador de entidad espacial
XR_DEFINE_HANDLE(XrSpatialEntityEXT)
El identificador XrSpatialEntityEXT representa una entidad espacial. Una aplicación puede crear ese identificador para expresar su interés en una entidad específica para el tiempo de ejecución.
Crea un identificador de entidad espacial a partir de un ID
La función xrCreateSpatialEntityFromIdEXT se define de la siguiente manera:
XrResult xrCreateSpatialEntityFromIdEXT(
XrSpatialContextEXT spatialContext,
const XrSpatialEntityFromIdCreateInfoEXT* createInfo,
XrSpatialEntityEXT* spatialEntity);
Descripciones de los parámetros
spatialContextes un XrSpatialContextEXT creado anteriormente con xrCreateSpatialContextAsyncEXT .createInfoes un puntero a la estructura XrSpatialEntityFromIdCreateInfoEXT.spatialEntityes el controlador XrSpatialEntityEXT que se devolvió.
La aplicación puede usar xrCreateSpatialEntityFromIdEXT para crear un identificador XrSpatialEntityEXT que sea una referencia a una entidad que existe en el entorno del usuario.
El tiempo de ejecución debe devolver XR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXT si XrSpatialEntityFromIdCreateInfoEXT :: entityId no es un ID válido para spatialContext .
Uso válido (implícito)
- La extensión
XR_EXT_spatial_entitydebe habilitarse antes de llamar a xrCreateSpatialEntityFromIdEXT. -
spatialContextdebe ser un identificador de XrSpatialContextEXT válido. -
createInfodebe ser un puntero a una estructura XrSpatialEntityFromIdCreateInfoEXT válida. -
spatialEntitydebe ser un puntero a un identificador de XrSpatialEntityEXT.
Códigos de retorno
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
La estructura XrSpatialEntityFromIdCreateInfoEXT se define de la siguiente manera:
typedef struct XrSpatialEntityFromIdCreateInfoEXT {
XrStructureType type;
const void* next;
XrSpatialEntityIdEXT entityId;
} XrSpatialEntityFromIdCreateInfoEXT;
Descripciones de los miembros
typees el XrStructureType de esta estructura.nextesNULLo un puntero a la siguiente estructura en una cadena de estructuras. No se definen tales estructuras en OpenXR principal ni en esta extensión.entityIdes elXrSpatialEntityIdEXTde la entidad para la que la aplicación desea crear un identificador.
Uso válido (implícito)
- La extensión
XR_EXT_spatial_entitydebe habilitarse antes de usar XrSpatialEntityFromIdCreateInfoEXT -
typedebe serXR_TYPE_SPATIAL_ENTITY_FROM_ID_CREATE_INFO_EXT -
nextdebe serNULLo un puntero válido a la siguiente estructura en una cadena de estructuras
Destruye el identificador de entidad espacial
La función xrDestroySpatialEntityEXT se define de la siguiente manera:
XrResult xrDestroySpatialEntityEXT(
XrSpatialEntityEXT spatialEntity);
Descripciones de los parámetros
spatialEntityes un identificador para un XrSpatialEntityEXT creado previamente por una función como xrCreateSpatialEntityFromIdEXT .
La aplicación puede usar xrDestroySpatialEntityEXT para liberar el identificador spatialEntity cuando ya no le interese la entidad a la que hace referencia este identificador.
Uso válido (implícito)
- La extensión
XR_EXT_spatial_entitydebe habilitarse antes de llamar a xrDestroySpatialEntityEXT. -
spatialEntitydebe ser un identificador XrSpatialEntityEXT válido.
Seguridad de subprocesos
- El acceso a
spatialEntityy a cualquier identificador secundario debe sincronizarse de forma externa.
Códigos de retorno
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
Instantánea espacial
XR_DEFINE_HANDLE(XrSpatialSnapshotEXT)
La aplicación puede crear instantáneas espaciales para descubrir entidades espaciales o actualizar su información sobre entidades espaciales conocidas. El identificador XrSpatialSnapshotEXT representa los datos inmutables de las entidades espaciales descubiertas o actualizadas, y un subconjunto de sus componentes, según lo seleccionado por la aplicación. La instantánea espacial representa una vista coherente de las entidades y sus datos de componentes. Una vez que se crea una instantánea, los datos de la instantánea deben permanecer constantes mientras la instantánea sea válida.
La aplicación puede crear la cantidad de instantáneas que desee, pero debe tener en cuenta la memoria que se asigna a cada instantánea nueva y debe destruir las instantáneas una vez que ya no las necesite.
Crea una instantánea de descubrimiento
La función xrCreateSpatialDiscoverySnapshotAsyncEXT se define de la siguiente manera:
XrResult xrCreateSpatialDiscoverySnapshotAsyncEXT(
XrSpatialContextEXT spatialContext,
const XrSpatialDiscoverySnapshotCreateInfoEXT* createInfo,
XrFutureEXT* future);
Descripciones de los parámetros
spatialContextes un XrSpatialContextEXT creado anteriormente con xrCreateSpatialContextAsyncEXT .createInfoes un puntero a un XrSpatialDiscoverySnapshotCreateInfoEXT .futurees un puntero a unXrFutureEXT.
La aplicación puede descubrir entidades espaciales creando una instantánea de descubrimiento con xrCreateSpatialDiscoverySnapshotAsyncEXT .
Esta función inicia una operación asíncrona y crea un XrFutureEXT correspondiente , que se puede usar con xrPollFutureEXT y funciones relacionadas. El valor que devuelve esta función solo indica si los parámetros eran aceptables para programar la operación asíncrona. La función de finalización correspondiente es xrCreateSpatialDiscoverySnapshotCompleteEXT , que se puede usar cuando un futuro de esta función está en el estado READY, con salidas propagadas por esa función en la estructura de finalización XrCreateSpatialDiscoverySnapshotCompletionEXT .
La aplicación puede enviar varias solicitudes de creación de instantáneas de descubrimiento sin necesidad de esperar a que se complete la anterior. El tiempo de ejecución puede procesar y completar la creación de la instantánea en cualquier orden. El tiempo de ejecución puede retrasar la finalización de la creación de la instantánea de detección para limitar la aplicación si necesita reducir el uso de recursos del sistema debido a la energía, la temperatura o cualquier otra política del dispositivo.
La aplicación puede usar XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes para filtrar la lista de entidades y los componentes cuyos datos el tiempo de ejecución debe incluir en la instantánea. Si la aplicación proporciona una lista válida de tipos de componentes espaciales en XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes , el tiempo de ejecución debe incluir solo las entidades espaciales en la instantánea que tengan al menos uno de los componentes proporcionados en XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes . Además, el tiempo de ejecución solo debe incluir datos para esos componentes en la instantánea.
El tiempo de ejecución debe devolver XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT si alguno de los XrSpatialComponentTypeEXT en XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes no está habilitado para las capacidades espaciales que se pasan a XrSpatialContextCreateInfoEXT :: capabilityConfigs cuando se crea spatialContext .
Si la aplicación no proporciona una lista de tipos de componentes espaciales en XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes , el tiempo de ejecución debe incluir todas las entidades espaciales de la instantánea que tengan el conjunto de componentes enumerados en XrSpatialCapabilityConfigurationBaseHeaderEXT ::enabledComponents para las capacidades configuradas para spatialContext . El tiempo de ejecución debe incluir los datos de todos los componentes habilitados de las capacidades configuradas para spatialContext .
Si XrEventDataReferenceSpaceChangePending se pone en cola antes de que se complete future y XrEventDataReferenceSpaceChangePending :: poseValid es falso, el tiempo de ejecución puede crear un XrSpatialSnapshotEXT que no tenga entidades o establecer el XrSpatialEntityTrackingStateEXT de las entidades que ya no se pueden ubicar en XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace en XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time en XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT o XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT . El tiempo de ejecución no debe establecer XrCreateSpatialContextCompletionEXT :: futureResult en un código de error debido a XrEventDataReferenceSpaceChangePending .
Uso válido (implícito)
- La extensión
XR_EXT_spatial_entitydebe habilitarse antes de llamar a xrCreateSpatialDiscoverySnapshotAsyncEXT -
spatialContextdebe ser un identificador de XrSpatialContextEXT válido. -
createInfodebe ser un puntero a una estructura XrSpatialDiscoverySnapshotCreateInfoEXT válida. -
futuredebe ser un puntero a un valorXrFutureEXT.
Códigos de retorno
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
La estructura XrSpatialDiscoverySnapshotCreateInfoEXT se define de la siguiente manera:
typedef struct XrSpatialDiscoverySnapshotCreateInfoEXT {
XrStructureType type;
const void* next;
uint32_t componentTypeCount;
const XrSpatialComponentTypeEXT* componentTypes;
} XrSpatialDiscoverySnapshotCreateInfoEXT;
Descripciones de los miembros
typees el XrStructureType de esta estructura.nextesNULLo un puntero a la siguiente estructura en una cadena de estructuras. No se definen tales estructuras en OpenXR principal ni en esta extensión.componentTypeCountes unuint32_tque describe el recuento de elementos en el arraycomponentTypes.componentTypeses un array de XrSpatialComponentTypeEXT .
La estructura XrSpatialDiscoverySnapshotCreateInfoEXT describe la información para crear un identificador XrSpatialSnapshotEXT cuando se descubren entidades espaciales.
Uso válido (implícito)
- La extensión
XR_EXT_spatial_entitydebe habilitarse antes de usar XrSpatialDiscoverySnapshotCreateInfoEXT -
typedebe serXR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT -
nextdebe serNULLo un puntero válido a la siguiente estructura en una cadena de estructuras . Consulta también: XrSpatialBoundsBoxfANDROID , XrSpatialBoundsFrustumfANDROID , XrSpatialBoundsSpherefANDROID , XrSpatialDiscoveryPersistenceUuidFilterEXT , XrSpatialDiscoveryRoomBoundaryFilterANDROIDSYS , XrSpatialDiscoveryUniqueEntitiesFilterANDROID , XrSpatialFilterTrackingStateEXT , XrSpatialRaycastInfoANDROID - Si
componentTypeCountno es0,componentTypesdebe ser un puntero a un array decomponentTypeCountvalores XrSpatialComponentTypeEXT válidos.
La función xrCreateSpatialDiscoverySnapshotCompleteEXT se define de la siguiente manera:
XrResult xrCreateSpatialDiscoverySnapshotCompleteEXT(
XrSpatialContextEXT spatialContext,
const XrCreateSpatialDiscoverySnapshotCompletionInfoEXT* createSnapshotCompletionInfo,
XrCreateSpatialDiscoverySnapshotCompletionEXT* completion);
Descripciones de los parámetros
spatialContextes el XrSpatialContextEXT que se pasó anteriormente a xrCreateSpatialDiscoverySnapshotAsyncEXT ::spatialContext.createSnapshotCompletionInfoes un puntero a un XrCreateSpatialDiscoverySnapshotCompletionInfoEXT que proporciona información sobre la finalización de la solicitud de creación de la instantánea de descubrimiento.completiones un puntero a un XrCreateSpatialDiscoverySnapshotCompletionEXT .
xrCreateSpatialDiscoverySnapshotCompleteEXT completa la operación asíncrona iniciada por xrCreateSpatialDiscoverySnapshotAsyncEXT . El tiempo de ejecución debe devolver XR_ERROR_FUTURE_PENDING_EXT si XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: future no está en estado listo. El tiempo de ejecución debe devolver XR_ERROR_FUTURE_INVALID_EXT si XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: future ya se completó o canceló.
Uso válido (implícito)
- La extensión
XR_EXT_spatial_entitydebe habilitarse antes de llamar a xrCreateSpatialDiscoverySnapshotCompleteEXT -
spatialContextdebe ser un identificador de XrSpatialContextEXT válido. -
createSnapshotCompletionInfodebe ser un puntero a una estructura XrCreateSpatialDiscoverySnapshotCompletionInfoEXT válida. -
completiondebe ser un puntero a una estructura XrCreateSpatialDiscoverySnapshotCompletionEXT.
Códigos de retorno
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
La estructura XrCreateSpatialDiscoverySnapshotCompletionInfoEXT se define de la siguiente manera:
typedef struct XrCreateSpatialDiscoverySnapshotCompletionInfoEXT {
XrStructureType type;
const void* next;
XrSpace baseSpace;
XrTime time;
XrFutureEXT future;
} XrCreateSpatialDiscoverySnapshotCompletionInfoEXT;
Descripciones de los miembros
typees el XrStructureType de esta estructura.nextesNULLo un puntero a la siguiente estructura en una cadena de estructuras.baseSpacees el XrSpace en el que se ubicarán todas las ubicaciones del XrSpatialSnapshotEXT de descubrimiento.timees elXrTimeen el que se ubicarán todas las ubicaciones del XrSpatialSnapshotEXT de descubrimiento.futurees elXrFutureEXTrecibido de xrCreateSpatialDiscoverySnapshotAsyncEXT.
Las ubicaciones en los diversos datos de componentes incluidos en la instantánea creada se representarán en baseSpace , que se encuentra en time .
Uso válido (implícito)
- La extensión
XR_EXT_spatial_entitydebe habilitarse antes de usar XrCreateSpatialDiscoverySnapshotCompletionInfoEXT -
typedebe serXR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXT -
nextdebe serNULLo un puntero válido a la siguiente estructura en una cadena de estructuras -
baseSpacedebe ser un identificador de XrSpace válido
La estructura XrCreateSpatialDiscoverySnapshotCompletionEXT se define de la siguiente manera:
typedef struct XrCreateSpatialDiscoverySnapshotCompletionEXT {
XrStructureType type;
void* next;
XrResult futureResult;
XrSpatialSnapshotEXT snapshot;
} XrCreateSpatialDiscoverySnapshotCompletionEXT;
Descripciones de los miembros
typees el XrStructureType de esta estructura.nextesNULLo un puntero a la siguiente estructura en una cadena de estructuras.futureResultes el XrResult de la operación de creación de la instantánea de descubrimiento espacial.snapshotes un XrSpatialSnapshotEXT que se puede usar para consultar los datos de los componentes de las entidades espaciales descubiertas.
Códigos de devolución futuros
Valores de futureResult:
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_RUNTIME_FAILUREXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHED
Uso válido (implícito)
- La extensión
XR_EXT_spatial_entitydebe habilitarse antes de usar XrCreateSpatialDiscoverySnapshotCompletionEXT -
typedebe serXR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXT -
nextdebe serNULLo un puntero válido a la siguiente estructura en una cadena de estructuras -
futureResultdebe ser un valor XrResult válido - Si
snapshotno es XR_NULL_HANDLE ,snapshotdebe ser un identificador XrSpatialSnapshotEXT válido.
Evento de recomendación de descubrimiento
La estructura XrEventDataSpatialDiscoveryRecommendedEXT se define de la siguiente manera:
typedef struct XrEventDataSpatialDiscoveryRecommendedEXT {
XrStructureType type;
const void* next;
XrSpatialContextEXT spatialContext;
} XrEventDataSpatialDiscoveryRecommendedEXT;
Descripciones de los miembros
typees el XrStructureType de esta estructura.nextesNULLo un puntero a la siguiente estructura en una cadena de estructuras.spatialContextes el XrSpatialContextEXT para el que el tiempo de ejecución recomienda el descubrimiento.
La aplicación puede recuperar este evento con xrPollEvent . La aplicación puede evitar llamadas excesivas a xrCreateSpatialDiscoverySnapshotAsyncEXT para descubrir entidades espaciales esperando este evento. Si la aplicación crea varias instantáneas de descubrimiento con el mismo XrSpatialDiscoverySnapshotCreateInfoEXT entre dos eventos XrEventDataSpatialDiscoveryRecommendedEXT, las instantáneas resultantes pueden contener las mismas entidades y, por lo tanto, las consultas de datos y la creación de instantáneas serían un desperdicio.
Esperar a que se produzca este evento para crear una nueva Instant Snapshot de descubrimiento garantiza que la aplicación no sobrecargue el sistema con solicitudes de descubrimiento para las que el tiempo de ejecución puede no devolver datos nuevos y ayuda a evitar el riesgo de usar en exceso los recursos del sistema y de que se limite el uso debido a las políticas térmicas o de energía del dispositivo. Esto también ayuda a crear paridad entre los tiempos de ejecución que descubren entidades espaciales sobre la marcha con el seguimiento en vivo y los tiempos de ejecución que proporcionan entidades espaciales a partir de un estado grabado previamente (en el que el tiempo de ejecución puede poner en cola el evento de recomendación de descubrimiento solo una vez para cada XrSpatialContextEXT).
El tiempo de ejecución no debe poner en cola este evento para notificar a la aplicación sobre los cambios o ajustes realizados en los datos de los componentes de las entidades espaciales existentes. La aplicación puede usar xrCreateSpatialUpdateSnapshotEXT para hacer un seguimiento de las actualizaciones de datos de los componentes de las entidades espaciales que le interesan.
Un tiempo de ejecución puede poner en cola un evento de recomendación de descubrimiento sin esperar a que la aplicación primero llame a xrCreateSpatialDiscoverySnapshotAsyncEXT . Por ejemplo, un tiempo de ejecución puede basar la decisión de poner en cola el evento de recomendación de descubrimiento en la configuración de XrSpatialContextEXT, su propia comprensión del entorno alrededor del usuario (descubrimiento de entidades nuevas o pérdida de las existentes) o para sugerir una cadencia de solicitudes de descubrimiento adecuada a la aplicación para no sobrecargar los recursos del sistema. El tiempo de ejecución puede optar por no poner en cola este evento para un XrSpatialContextEXT si no se encuentran entidades en el entorno del usuario durante la vida útil de ese XrSpatialContextEXT .
El tiempo de ejecución no debe poner en cola este evento para un spatialContext determinado hasta que la aplicación complete su creación con xrCreateSpatialContextCompleteEXT .
Después de que la aplicación llama a xrDestroySpatialContextEXT , el tiempo de ejecución no debe poner en cola más eventos de recomendación de descubrimiento para ese contexto espacial ni devolver tales eventos para ese contexto desde xrPollEvent .
Uso válido (implícito)
- La extensión
XR_EXT_spatial_entitydebe habilitarse antes de usar XrEventDataSpatialDiscoveryRecommendedEXT -
typedebe serXR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT -
nextdebe serNULLo un puntero válido a la siguiente estructura en una cadena de estructuras
Consulta datos de componentes
La función xrQuerySpatialComponentDataEXT se define de la siguiente manera:
XrResult xrQuerySpatialComponentDataEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialComponentDataQueryConditionEXT* queryCondition,
XrSpatialComponentDataQueryResultEXT* queryResult);
Descripciones de los parámetros
snapshotes un XrSpatialSnapshotEXT que se proporcionó anteriormente con xrCreateSpatialDiscoverySnapshotCompleteEXT o xrCreateSpatialUpdateSnapshotEXT .queryConditiones un puntero a una estructura XrSpatialComponentDataQueryConditionEXT.queryResultes un puntero a una estructura XrSpatialComponentDataQueryResultEXT.
La aplicación puede usar xrQuerySpatialComponentDataEXT para consultar los datos de los componentes de las entidades en la instantánea adjuntando una estructura de lista a XrSpatialComponentDataQueryResultEXT :: next correspondiente a cada XrSpatialComponentTypeEXT en XrSpatialComponentDataQueryConditionEXT :: componentTypes .
Si la aplicación adjunta una estructura de lista a XrSpatialComponentDataQueryResultEXT :: next que no corresponde a ninguno de los componentes que se enumeran en XrSpatialComponentDataQueryConditionEXT :: componentTypes , el tiempo de ejecución debe devolver XR_ERROR_VALIDATION_FAILURE .
La aplicación puede optar por adjuntar las estructuras de lista correspondientes solo a un subconjunto de componentes que se enumeran en XrSpatialComponentDataQueryConditionEXT :: componentTypes . La aplicación puede optar por omitir las estructuras de la lista por completo si solo desea conocer los IDs y el estado de seguimiento de las entidades espaciales que satisfacen el queryCondition . El tiempo de ejecución no debe tratar la ausencia de estructuras de lista de la cadena XrSpatialComponentDataQueryResultEXT :: next como un error.
Si se pone en cola XrEventDataReferenceSpaceChangePending y transcurre XrEventDataReferenceSpaceChangePending :: changeTime mientras la aplicación consulta datos de componentes de un XrSpatialSnapshotEXT , la aplicación puede usar los datos del evento para ajustar las poses según corresponda.
El tiempo de ejecución debe propagar XrSpatialComponentDataQueryResultEXT :: entityIds solo con entidades que tengan todos los componentes especificados en XrSpatialComponentDataQueryConditionEXT :: componentTypes . Si XrSpatialComponentDataQueryConditionEXT :: componentTypeCount es 0, el tiempo de ejecución debe completar queryResult con todas las entidades (y sus estados de seguimiento) que se encuentran en la instantánea. Si se agregan condiciones de consulta adicionales a XrSpatialComponentDataQueryConditionEXT :: next, el tiempo de ejecución debe tratarlas como un "AND" con la disponibilidad de los tipos de componentes, es decir, el tiempo de ejecución debe completar XrSpatialComponentDataQueryResultEXT ::entityIds solo con entidades que satisfagan todas las condiciones proporcionadas. El tiempo de ejecución debe completar los datos del componente en las estructuras de la lista en el mismo orden que las entidades en XrSpatialComponentDataQueryResultEXT :: entityIds, es decir, los datos del componente en un índice determinado del array de la estructura de la lista deben corresponder a la entidad en el mismo índice.
Si el estado de seguimiento de una entidad no es XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT , el tiempo de ejecución no debe cambiar los datos en el índice correspondiente a esa entidad en el array que se incluye en las estructuras de lista adjuntas a XrSpatialComponentDataQueryResultEXT .
Uso válido (implícito)
- La extensión
XR_EXT_spatial_entitydebe habilitarse antes de llamar a xrQuerySpatialComponentDataEXT. -
snapshotdebe ser un identificador XrSpatialSnapshotEXT válido. -
queryConditiondebe ser un puntero a una estructura XrSpatialComponentDataQueryConditionEXT válida. -
queryResultdebe ser un puntero a una estructura XrSpatialComponentDataQueryResultEXT.
Códigos de retorno
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
Como ejemplo, la aplicación crea un XrSpatialSnapshotEXT que contiene 5 entidades, donde:
- Las entidades 1 y 2 tienen los componentes
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTyXR_SPATIAL_COMPONENT_TYPE_PARENT_EXT. - Las entidades 3 y 4 tienen los componentes
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXTyXR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT. - La entidad 5 tiene los componentes
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTyXR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT.
XrSpatialEntityIdEXT
XrSpatialEntityIdEXT
1
1
2
2
3
3
4
4
5
5
Bounded2D
Bounded2D
Sí
Sí
Sí
Sí
No
No
No
No
Sí
Sí
Padre
Padre
Sí
Sí
Sí
Sí
No
No
No
No
No
No
Mesh3D
Mesh3D
No
No
No
No
Sí
Sí
Sí
Sí
Sí
Sí
Bounded3D
Bounded3D
No
No
No
No
Sí
Sí
Sí
Sí
No
No El texto no es SVG, no se puede mostrar
Figura 20. Ejemplo de instantánea
xrQuerySpatialComponentDataEXT en la captura de pantalla anterior con XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT incluido en la condición de la consulta generará que se muestren las entidades núm. 1, 2 y 5 a la aplicación, y la aplicación puede adjuntar un array de XrSpatialBounded2DDataEXT como parte de la estructura XrSpatialComponentBounded2DListEXT al siguiente encadenamiento de XrSpatialComponentDataQueryResultEXT para obtener los datos de bounded2D.
XrSpatialEntityIdEXT
XrSpatialEntityIdEXT
1
1
2
2
5
5
Bounded2D
Bounded2D
Datos para el entityId núm. 1
Datos para la entidad…
Datos para el ID de entidad núm. 2
Datos para la entidad…
Datos para el entityId #5
Datos para la entidad…
entityIds
entityIds
siguiente
siguiente
XrSpatialComponent DataQueryResultEXT
XrSpatialComponent Dat…
límites
límites
XrSpatialComponent Bounded2DListEXT
XrSpatialComponent Bou… El texto no es SVG, no se puede mostrar
Figura 21. Ejemplo de resultado de la búsqueda
xrQuerySpatialComponentDataEXT en la captura de pantalla anterior con los componentes XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT y XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT que se indican en la condición de la consulta generará que se devuelvan las entidades núm. 3 y 4 a la aplicación, y la aplicación podrá adjuntar arrays de XrBoxf y XrSpatialMeshDataEXT como parte de las estructuras XrSpatialComponentBounded3DListEXT y XrSpatialComponentMesh3DListEXT, respectivamente, a la siguiente cadena de XrSpatialComponentDataQueryResultEXT para obtener los datos del componente.
XrSpatialEntityIdEXT
XrSpatialEntityIdEXT
3
3
4
4
Bounded3D
Bounded3D
Datos para el entityId núm. 3
Datos para la entidad…
Datos del entityId núm. 4
Datos para la entidad…
Mesh3D
Mesh3D
Datos para el entityId núm. 3
Datos para la entidad…
Datos del entityId núm. 4
Datos para la entidad…
entityIds
entityIds
siguiente
siguiente
XrSpatialComponent DataQueryResultEXT
XrSpatialComponent Da...
límites
límites
siguiente
siguiente
XrSpatialComponent Bounded3DListEXT
XrSpatialComponent Bo…
XrSpatialComponent Mesh3DListEXT
XrSpatialComponent Yo…
mallas
mallas El texto no es SVG, no se puede mostrar
Figura 22. Ejemplo de resultado de la búsqueda
La estructura XrSpatialComponentDataQueryConditionEXT se define de la siguiente manera:
typedef struct XrSpatialComponentDataQueryConditionEXT {
XrStructureType type;
const void* next;
uint32_t componentTypeCount;
const XrSpatialComponentTypeEXT* componentTypes;
} XrSpatialComponentDataQueryConditionEXT;
Descripciones de los miembros
typees el XrStructureType de esta estructura.nextesNULLo un puntero a la siguiente estructura en una cadena de estructuras.componentTypeCountes unuint32_tque describe el recuento de elementos en el arraycomponentTypes.componentTypeses un array de XrSpatialComponentTypeEXT para los que se obtendrán los datos de la instantánea.
Uso válido (implícito)
- La extensión
XR_EXT_spatial_entitydebe habilitarse antes de usar XrSpatialComponentDataQueryConditionEXT -
typedebe serXR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT -
nextdebe serNULLo un puntero válido a la siguiente estructura en una cadena de estructuras . Consulta también: XrSpatialDiscoveryPersistenceUuidFilterEXT , XrSpatialFilterArchetypeEXT , XrSpatialFilterTrackingStateEXT - Si
componentTypeCountno es0,componentTypesdebe ser un puntero a un array decomponentTypeCountvalores XrSpatialComponentTypeEXT válidos.
La estructura XrSpatialComponentDataQueryResultEXT se define de la siguiente manera:
typedef struct XrSpatialComponentDataQueryResultEXT {
XrStructureType type;
void* next;
uint32_t entityIdCapacityInput;
uint32_t entityIdCountOutput;
XrSpatialEntityIdEXT* entityIds;
uint32_t entityStateCapacityInput;
uint32_t entityStateCountOutput;
XrSpatialEntityTrackingStateEXT* entityStates;
} XrSpatialComponentDataQueryResultEXT;
Descripciones de los miembros
typees el XrStructureType de esta estructura.nextesNULLo un puntero a la siguiente estructura en una cadena de estructuras.entityIdCapacityInputes la capacidad del arrayentityIdso 0 para indicar una solicitud para recuperar la capacidad requerida.entityIdCountOutputes la cantidad deXrSpatialEntityIdEXTenentityIdso la capacidad requerida en caso de queentityIdCapacityInputsea insuficiente.entityIdses un array deXrSpatialEntityIdEXT. Puede serNULLsientityIdCapacityInputes 0.entityStateCapacityInputes la capacidad del arrayentityStateso 0 para indicar una solicitud para recuperar la capacidad requerida.entityStateCountOutputes la cantidad de XrSpatialEntityTrackingStateEXT enentityStateso la capacidad requerida en caso de queentityStateCapacityInputsea insuficiente. Este valor siempre debe ser el mismo queentityIdCountOutput.entityStateses un array de XrSpatialEntityTrackingStateEXT . Puede serNULLsientityStateCapacityInputes 0.- Consulta la sección Parámetros de tamaño del búfer para obtener una descripción detallada de cómo recuperar el tamaño
entityIdsrequerido.
Una aplicación puede usar entityIds con xrCreateSpatialEntityFromIdEXT para crear identificadores XrSpatialEntityEXT para las entidades sobre las que le interesa recibir actualizaciones periódicas. Luego, la aplicación puede usar estos identificadores XrSpatialEntityEXT con xrCreateSpatialUpdateSnapshotEXT para crear una instantánea de actualización que tenga los datos conocidos más recientes del tiempo de ejecución de los componentes para las entidades proporcionadas.
Uso válido (implícito)
- La extensión
XR_EXT_spatial_entitydebe habilitarse antes de usar XrSpatialComponentDataQueryResultEXT. -
typedebe serXR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT -
nextdebe serNULLo un puntero válido a la siguiente estructura en una cadena de estructuras . Consulta también: XrSpatialComponentAnchorListEXT , XrSpatialComponentAnnotationQuadListANDROID , XrSpatialComponentBounded2DListEXT , XrSpatialComponentBounded3DListEXT , XrSpatialComponentConfidenceListANDROIDSYS , XrSpatialComponentImage2DListEXT , XrSpatialComponentKeyboardSemanticLabelListEXT , XrSpatialComponentMarkerListEXT , XrSpatialComponentMaterialTypeListANDROIDSYS , XrSpatialComponentMesh2DListEXT , XrSpatialComponentMesh3DListEXT , XrSpatialComponentMesh3DNormalsListEXT , XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT , XrSpatialComponentMesh3DVertexSemanticLabelsListEXT , XrSpatialComponentMouseSemanticLabelListEXT , XrSpatialComponentObjectSemanticLabelListANDROID , XrSpatialComponentObjectSemanticLabelListEXT , XrSpatialComponentOccupancyGridListANDROIDX1 , XrSpatialComponentParentListEXT , XrSpatialComponentPersistenceListEXT , XrSpatialComponentPlaneAlignmentListEXT , XrSpatialComponentPlaneSemanticLabelListEXT , XrSpatialComponentPolygon2DListEXT , XrSpatialComponentRaycastResultListANDROID , XrSpatialComponentRoomEmptinessListANDROIDSYS , XrSpatialComponentRoomListANDROIDSYS , XrSpatialComponentStreetscapeGeometryMetadataListANDROIDX2 , XrSpatialComponentSubsumedByListANDROID - Si
entityIdCapacityInputno es0,entityIdsdebe ser un puntero a un array de valoresentityIdCapacityInputXrSpatialEntityIdEXT. - Si
entityStateCapacityInputno es0,entityStatesdebe ser un puntero a un array de valoresentityStateCapacityInputXrSpatialEntityTrackingStateEXT.
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;
La enumeración XrSpatialEntityTrackingStateEXT enumera los posibles estados de seguimiento de entidades espaciales:
Los enums tienen los siguientes significados:
Descripción de la enumeración
XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT
El tiempo de ejecución dejó de hacer un seguimiento de esta entidad y nunca lo reanudará.
XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT
El tiempo de ejecución detuvo el seguimiento de esta entidad, pero puede reanudarlo en el futuro.
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT
El tiempo de ejecución actualmente hace un seguimiento de esta entidad y los datos de sus componentes son válidos.
SEGUIMIENTO
DETENIDA
DETENIDO
Figura 23. XrSpatialEntityTrackingStateEXT
- El tiempo de ejecución puede cambiar el estado de la entidad espacial de
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXTaXR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXTsi suspende el seguimiento de esa entidad espacial, pero tiene la posibilidad de reanudar su seguimiento en el futuro. Algunos ejemplos de cuándo el tiempo de ejecución puede hacer esto incluyen (sin limitaciones) si la aplicación pierde el enfoque de entrada, si la entidad espacial determinada está demasiado lejos del usuario para realizar un seguimiento preciso o si se está realizando un seguimiento de demasiadas entidades y el tiempo de ejecución quiere reducir el costo del seguimiento. XrSpatialEntityTrackingStateEXT ayuda a la aplicación a aislarse de las diferentes políticas de seguimiento de cada tiempo de ejecución. - El tiempo de ejecución puede cambiar el estado de una entidad de
XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXTaXR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXToXR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT. - El tiempo de ejecución debe cambiar el estado de la entidad espacial de
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXToXR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXTaXR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXTsi se pierde la entidad espacial y nunca se recuperará ni se reanudará su seguimiento. Un ejemplo de este caso sería si el dispositivo pierde el seguimiento, reinicia su sesión de seguimiento, pero no puede volver a localizarse en su entorno y, por lo tanto, trata las entidades descubiertas de esta sesión de seguimiento como entidades nuevas. - Una vez que el estado de seguimiento de una entidad se establece en
XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT, el tiempo de ejecución nunca debe cambiarlo a ningún otro estado. - Cuando se consultan los datos de componentes de una entidad espacial con xrQuerySpatialComponentDataEXT , el tiempo de ejecución debe establecer datos válidos en el contenido de los búferes que proporciona la aplicación en la siguiente cadena de XrSpatialComponentDataQueryResultEXT si el estado de la entidad es
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT. Si el estado de la entidad esXR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXToXR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT, el tiempo de ejecución no debe cambiar el contenido de los búferes.
Idioma de dos llamadas para los datos de componentes
La estructura XrSpatialBufferEXT se define de la siguiente manera:
typedef struct XrSpatialBufferEXT {
XrSpatialBufferIdEXT bufferId;
XrSpatialBufferTypeEXT bufferType;
} XrSpatialBufferEXT;
Descripciones de los miembros
bufferIdelXrSpatialBufferIdEXTde los datos del búfer.bufferTypees el XrSpatialBufferTypeEXT para indicar el tipo de datos enbufferId. La aplicación puede usarbufferTypepara determinar qué función usar para recuperar los datos reales del búfer.
Algunos componentes espaciales tienen datos de tamaño variable y, por lo tanto, requieren el uso de la expresión idiomática de dos llamadas para recuperar sus datos. En esos casos, la estructura de datos del componente espacial proporciona un XrSpatialBufferEXT para cada búfer de tamaño variable que se necesita en los datos de ese componente.
Para el mismo bufferId , el tiempo de ejecución debe proporcionar los mismos datos de una consulta de datos de componentes a otra, incluso de una instantánea a otra. Un bufferId diferente entre las llamadas de consulta de datos de componentes indica a la aplicación que los datos de ese componente pueden haber cambiado.
Uso válido (implícito)
- La extensión
XR_EXT_spatial_entitydebe habilitarse antes de usar XrSpatialBufferEXT -
bufferTypedebe ser un valor XrSpatialBufferTypeEXT válido.
XR_DEFINE_ATOM(XrSpatialBufferIdEXT)
XrSpatialBufferIdEXT se usa para representar cualquier tipo de datos de tamaño variable para un componente espacial.
El tiempo de ejecución debe mantener el XrSpatialBufferIdEXT y sus datos en la memoria durante al menos el ciclo de vida del XrSpatialSnapshotEXT que lo contiene. El tiempo de ejecución puede mantener el XrSpatialBufferIdEXT y sus datos en la memoria durante más tiempo que el ciclo de vida de XrSpatialSnapshotEXT para devolver el mismo ID como parte de las instantáneas que cree la aplicación más adelante. Para el mismo XrSpatialBufferIdEXT , el tiempo de ejecución siempre debe devolver los mismos datos a través de la función xrGetSpatialBuffer* adecuada.
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;
La enumeración XrSpatialBufferTypeEXT identifica los diferentes tipos de datos del búfer representado XrSpatialBufferIdEXT .
Descripciones de los enumerantes
XR_SPATIAL_BUFFER_TYPE_STRING_EXT. ElXrSpatialBufferIdEXTse puede pasar a xrGetSpatialBufferStringEXT para recuperar un búfer de cadena.XR_SPATIAL_BUFFER_TYPE_UINT8_EXT. ElXrSpatialBufferIdEXTcan se puede pasar a xrGetSpatialBufferUint8EXT para recuperar un búferuint8_t.XR_SPATIAL_BUFFER_TYPE_UINT16_EXT. ElXrSpatialBufferIdEXTcan se puede pasar a xrGetSpatialBufferUint16EXT para recuperar un búferuint16_t.XR_SPATIAL_BUFFER_TYPE_UINT32_EXT. ElXrSpatialBufferIdEXTse puede pasar a xrGetSpatialBufferUint32EXT para recuperar un búfer deuint32_t.XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT. ElXrSpatialBufferIdEXTcan se puede pasar a xrGetSpatialBufferFloatEXT para recuperar un búfer defloat.XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT. ElXrSpatialBufferIdEXTse puede pasar a xrGetSpatialBufferVector2fEXT para recuperar un búfer XrVector2f.XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT. ElXrSpatialBufferIdEXTse puede pasar a xrGetSpatialBufferVector3fEXT para recuperar un búfer XrVector3f.
La función xrGetSpatialBufferStringEXT se define de la siguiente manera:
XrResult xrGetSpatialBufferStringEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
char* buffer);
Descripciones de los parámetros
snapshotes un identificador para un XrSpatialSnapshotEXT .infocontiene la información del búfer que se consultará.bufferCapacityInputes la capacidad del array o 0 para indicar una solicitud para recuperar la capacidad requerida.bufferCountOutputes la cantidad de caracteres o la capacidad requerida en caso de quebufferCapacityInputsea insuficiente.bufferes un array dechar. Puede serNULLsibufferCapacityInputes 0.- Consulta la sección Parámetros de tamaño del búfer para obtener una descripción detallada de cómo recuperar el tamaño
bufferrequerido.
La aplicación puede obtener los datos de un XrSpatialBufferEXT proporcionado por un componente, donde XrSpatialBufferEXT :: bufferType es XR_SPATIAL_BUFFER_TYPE_STRING_EXT con xrGetSpatialBufferStringEXT .
El tiempo de ejecución debe devolver XR_ERROR_VALIDATION_FAILURE si XrSpatialBufferTypeEXT para XrSpatialBufferGetInfoEXT :: bufferId no es XR_SPATIAL_BUFFER_TYPE_STRING_EXT .
El tiempo de ejecución debe devolver XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT si XrSpatialBufferGetInfoEXT :: bufferId no pertenece a snapshot .
buffer completado por el tiempo de ejecución debe ser una cadena UTF-8 terminada en nulo.
Uso válido (implícito)
- La extensión
XR_EXT_spatial_entitydebe habilitarse antes de llamar a xrGetSpatialBufferStringEXT -
snapshotdebe ser un identificador XrSpatialSnapshotEXT válido. -
infodebe ser un puntero a una estructura XrSpatialBufferGetInfoEXT válida. -
bufferCountOutputdebe ser un puntero a un valoruint32_t - Si
bufferCapacityInputno es0,bufferdebe ser un puntero a un array de valores char debufferCapacityInput.
Códigos de retorno
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
La función xrGetSpatialBufferUint8EXT se define de la siguiente manera:
XrResult xrGetSpatialBufferUint8EXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
uint8_t* buffer);
Descripciones de los parámetros
snapshotes un identificador para un XrSpatialSnapshotEXT .infocontiene la información del búfer que se consultará.bufferCapacityInputes la capacidad del array o 0 para indicar una solicitud para recuperar la capacidad requerida.bufferCountOutputes la cantidad de elementos en el arraybuffero la capacidad requerida en caso de quebufferCapacityInputsea insuficiente.bufferes un array deuint8_t. Puede serNULLsibufferCapacityInputes 0.- Consulta la sección Parámetros de tamaño del búfer para obtener una descripción detallada de cómo recuperar el tamaño
bufferrequerido.
La aplicación puede obtener los datos de un XrSpatialBufferEXT proporcionado por un componente, donde XrSpatialBufferEXT :: bufferType es XR_SPATIAL_BUFFER_TYPE_UINT8_EXT con xrGetSpatialBufferUint8EXT .
El tiempo de ejecución debe devolver XR_ERROR_VALIDATION_FAILURE si XrSpatialBufferTypeEXT para XrSpatialBufferGetInfoEXT :: bufferId no es XR_SPATIAL_BUFFER_TYPE_UINT8_EXT .
El tiempo de ejecución debe devolver XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT si XrSpatialBufferGetInfoEXT :: bufferId no pertenece a snapshot .
Uso válido (implícito)
- La extensión
XR_EXT_spatial_entitydebe habilitarse antes de llamar a xrGetSpatialBufferUint8EXT. -
snapshotdebe ser un identificador XrSpatialSnapshotEXT válido. -
infodebe ser un puntero a una estructura XrSpatialBufferGetInfoEXT válida. -
bufferCountOutputdebe ser un puntero a un valoruint32_t - Si
bufferCapacityInputno es0,bufferdebe ser un puntero a un array de valoresbufferCapacityInputuint8_t.
Códigos de retorno
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
La función xrGetSpatialBufferUint16EXT se define de la siguiente manera:
XrResult xrGetSpatialBufferUint16EXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
uint16_t* buffer);
Descripciones de los parámetros
snapshotes un identificador para un XrSpatialSnapshotEXT .infocontiene la información del búfer que se consultará.bufferCapacityInputes la capacidad del array o 0 para indicar una solicitud para recuperar la capacidad requerida.bufferCountOutputes la cantidad de elementos en el arraybuffero la capacidad requerida en caso de quebufferCapacityInputsea insuficiente.bufferes un array deuint16_t. Puede serNULLsibufferCapacityInputes 0.- Consulta la sección Parámetros de tamaño del búfer para obtener una descripción detallada de cómo recuperar el tamaño
bufferrequerido.
La aplicación puede obtener los datos de un XrSpatialBufferEXT proporcionado por un componente, donde XrSpatialBufferEXT :: bufferType es XR_SPATIAL_BUFFER_TYPE_UINT16_EXT con xrGetSpatialBufferUint16EXT .
El tiempo de ejecución debe devolver XR_ERROR_VALIDATION_FAILURE si XrSpatialBufferTypeEXT para XrSpatialBufferGetInfoEXT :: bufferId no es XR_SPATIAL_BUFFER_TYPE_UINT16_EXT .
El tiempo de ejecución debe devolver XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT si XrSpatialBufferGetInfoEXT :: bufferId no pertenece a snapshot .
Uso válido (implícito)
- La extensión
XR_EXT_spatial_entitydebe habilitarse antes de llamar a xrGetSpatialBufferUint16EXT. -
snapshotdebe ser un identificador XrSpatialSnapshotEXT válido. -
infodebe ser un puntero a una estructura XrSpatialBufferGetInfoEXT válida. -
bufferCountOutputdebe ser un puntero a un valoruint32_t - Si
bufferCapacityInputno es0,bufferdebe ser un puntero a un array de valoresbufferCapacityInputuint16_t.
Códigos de retorno
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
La función xrGetSpatialBufferUint32EXT se define de la siguiente manera:
XrResult xrGetSpatialBufferUint32EXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
uint32_t* buffer);
Descripciones de los parámetros
snapshotes un identificador para un XrSpatialSnapshotEXT .infocontiene la información del búfer que se consultará.bufferCapacityInputes la capacidad del array o 0 para indicar una solicitud para recuperar la capacidad requerida.bufferCountOutputes la cantidad de elementos en el arraybuffero la capacidad requerida en caso de quebufferCapacityInputsea insuficiente.bufferes un array deuint32_t. Puede serNULLsibufferCapacityInputes 0.- Consulta la sección Parámetros de tamaño del búfer para obtener una descripción detallada de cómo recuperar el tamaño
bufferrequerido.
La aplicación puede obtener los datos de un XrSpatialBufferEXT proporcionado por un componente, donde XrSpatialBufferEXT :: bufferType es XR_SPATIAL_BUFFER_TYPE_UINT32_EXT con xrGetSpatialBufferUint32EXT .
El tiempo de ejecución debe devolver XR_ERROR_VALIDATION_FAILURE si XrSpatialBufferTypeEXT para XrSpatialBufferGetInfoEXT :: bufferId no es XR_SPATIAL_BUFFER_TYPE_UINT32_EXT .
El tiempo de ejecución debe devolver XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT si XrSpatialBufferGetInfoEXT :: bufferId no pertenece a snapshot .
Uso válido (implícito)
- La extensión
XR_EXT_spatial_entitydebe habilitarse antes de llamar a xrGetSpatialBufferUint32EXT. -
snapshotdebe ser un identificador XrSpatialSnapshotEXT válido. -
infodebe ser un puntero a una estructura XrSpatialBufferGetInfoEXT válida. -
bufferCountOutputdebe ser un puntero a un valoruint32_t - Si
bufferCapacityInputno es0,bufferdebe ser un puntero a un array de valoresbufferCapacityInputuint32_t.
Códigos de retorno
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
La función xrGetSpatialBufferFloatEXT se define de la siguiente manera:
XrResult xrGetSpatialBufferFloatEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
float* buffer);
Descripciones de los parámetros
snapshotes un identificador para un XrSpatialSnapshotEXT .infocontiene la información del búfer que se consultará.bufferCapacityInputes la capacidad del array o 0 para indicar una solicitud para recuperar la capacidad requerida.bufferCountOutputes la cantidad de elementos en el arraybuffero la capacidad requerida en caso de quebufferCapacityInputsea insuficiente.bufferes un array defloat. Puede serNULLsibufferCapacityInputes 0.- Consulta la sección Parámetros de tamaño del búfer para obtener una descripción detallada de cómo recuperar el tamaño
bufferrequerido.
La aplicación puede obtener los datos de un XrSpatialBufferEXT proporcionado por un componente, donde XrSpatialBufferEXT :: bufferType es XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT con xrGetSpatialBufferFloatEXT .
El tiempo de ejecución debe devolver XR_ERROR_VALIDATION_FAILURE si XrSpatialBufferTypeEXT para XrSpatialBufferGetInfoEXT :: bufferId no es XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT .
El tiempo de ejecución debe devolver XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT si XrSpatialBufferGetInfoEXT :: bufferId no pertenece a snapshot .
Uso válido (implícito)
- La extensión
XR_EXT_spatial_entitydebe habilitarse antes de llamar a xrGetSpatialBufferFloatEXT. -
snapshotdebe ser un identificador XrSpatialSnapshotEXT válido. -
infodebe ser un puntero a una estructura XrSpatialBufferGetInfoEXT válida. -
bufferCountOutputdebe ser un puntero a un valoruint32_t - Si
bufferCapacityInputno es0,bufferdebe ser un puntero a un array de valoresbufferCapacityInputfloat.
Códigos de retorno
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
La función xrGetSpatialBufferVector2fEXT se define de la siguiente manera:
XrResult xrGetSpatialBufferVector2fEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
XrVector2f* buffer);
Descripciones de los parámetros
snapshotes un identificador para un XrSpatialSnapshotEXT .infocontiene la información del búfer que se consultará.bufferCapacityInputes la capacidad del array o 0 para indicar una solicitud para recuperar la capacidad requerida.bufferCountOutputes la cantidad de elementos en el arraybuffero la capacidad requerida en caso de quebufferCapacityInputsea insuficiente.bufferes un array de XrVector2f . Puede serNULLsibufferCapacityInputes 0.- Consulta la sección Parámetros de tamaño del búfer para obtener una descripción detallada de cómo recuperar el tamaño
bufferrequerido.
La aplicación puede obtener los datos de un XrSpatialBufferEXT proporcionado por un componente, donde XrSpatialBufferEXT :: bufferType es XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT con xrGetSpatialBufferVector2fEXT .
El tiempo de ejecución debe devolver XR_ERROR_VALIDATION_FAILURE si XrSpatialBufferTypeEXT para XrSpatialBufferGetInfoEXT :: bufferId no es XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT .
El tiempo de ejecución debe devolver XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT si XrSpatialBufferGetInfoEXT :: bufferId no pertenece a snapshot .
Uso válido (implícito)
- La extensión
XR_EXT_spatial_entitydebe habilitarse antes de llamar a xrGetSpatialBufferVector2fEXT. -
snapshotdebe ser un identificador XrSpatialSnapshotEXT válido. -
infodebe ser un puntero a una estructura XrSpatialBufferGetInfoEXT válida. -
bufferCountOutputdebe ser un puntero a un valoruint32_t - Si
bufferCapacityInputno es0,bufferdebe ser un puntero a un array de estructuras XrVector2f debufferCapacityInput.
Códigos de retorno
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
La función xrGetSpatialBufferVector3fEXT se define de la siguiente manera:
XrResult xrGetSpatialBufferVector3fEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
XrVector3f* buffer);
Descripciones de los parámetros
snapshotes un identificador para un XrSpatialSnapshotEXT .infocontiene la información del búfer que se consultará.bufferCapacityInputes la capacidad del array o 0 para indicar una solicitud para recuperar la capacidad requerida.bufferCountOutputes la cantidad de elementos en el arraybuffero la capacidad requerida en caso de quebufferCapacityInputsea insuficiente.bufferes un array de XrVector3f . Puede serNULLsibufferCapacityInputes 0.- Consulta la sección Parámetros de tamaño del búfer para obtener una descripción detallada de cómo recuperar el tamaño
bufferrequerido.
La aplicación puede obtener los datos de un XrSpatialBufferEXT proporcionado por un componente, donde XrSpatialBufferEXT :: bufferType es XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT con xrGetSpatialBufferVector3fEXT .
El tiempo de ejecución debe devolver XR_ERROR_VALIDATION_FAILURE si XrSpatialBufferTypeEXT para XrSpatialBufferGetInfoEXT :: bufferId no es XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT .
El tiempo de ejecución debe devolver XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT si XrSpatialBufferGetInfoEXT :: bufferId no pertenece a snapshot .
Uso válido (implícito)
- La extensión
XR_EXT_spatial_entitydebe habilitarse antes de llamar a xrGetSpatialBufferVector3fEXT -
snapshotdebe ser un identificador XrSpatialSnapshotEXT válido. -
infodebe ser un puntero a una estructura XrSpatialBufferGetInfoEXT válida. -
bufferCountOutputdebe ser un puntero a un valoruint32_t - Si
bufferCapacityInputno es0,bufferdebe ser un puntero a un array de estructuras XrVector3f debufferCapacityInput.
Códigos de retorno
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
La estructura XrSpatialBufferGetInfoEXT se define de la siguiente manera:
typedef struct XrSpatialBufferGetInfoEXT {
XrStructureType type;
const void* next;
XrSpatialBufferIdEXT bufferId;
} XrSpatialBufferGetInfoEXT;
Descripciones de los miembros
typees el XrStructureType de esta estructura.nextesNULLo un puntero a la siguiente estructura en una cadena de estructuras.bufferIdunXrSpatialBufferIdEXTpara el búfer cuyos datos se recuperarán.
Uso válido (implícito)
- La extensión
XR_EXT_spatial_entitydebe habilitarse antes de usar XrSpatialBufferGetInfoEXT -
typedebe serXR_TYPE_SPATIAL_BUFFER_GET_INFO_EXT -
nextdebe serNULLo un puntero válido a la siguiente estructura en una cadena de estructuras
#define XR_NULL_SPATIAL_BUFFER_ID_EXT 0
XR_NULL_SPATIAL_BUFFER_ID_EXT es un valor reservado que representa un XrSpatialBufferIdEXT no válido . Puede pasarse a las funciones de la API y devolverse de ellas solo cuando se permite específicamente.
Crear instantánea de actualización
La función xrCreateSpatialUpdateSnapshotEXT se define de la siguiente manera:
XrResult xrCreateSpatialUpdateSnapshotEXT(
XrSpatialContextEXT spatialContext,
const XrSpatialUpdateSnapshotCreateInfoEXT* createInfo,
XrSpatialSnapshotEXT* snapshot);
Descripciones de los parámetros
spatialContextes un XrSpatialContextEXT creado anteriormente con xrCreateSpatialContextAsyncEXT .createInfoes un puntero a un XrSpatialUpdateSnapshotCreateInfoEXT .snapshotes un puntero al resultado XrSpatialSnapshotEXT .
La aplicación puede usar xrCreateSpatialUpdateSnapshotEXT para crear una instantánea y obtener los datos de componentes más recientes para entidades específicas según el tiempo de ejecución. Las aplicaciones pueden proporcionar los identificadores de XrSpatialEntityEXT y los tipos de componentes que les interesan cuando crean la instantánea.
La aplicación puede usar XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes para filtrar la lista de componentes cuyos datos deben incluirse en la instantánea. Si la aplicación proporciona una lista válida de tipos de componentes espaciales en XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes , el tiempo de ejecución debe incluir solo las entidades espaciales en la instantánea que tengan al menos uno de los componentes proporcionados en XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes . Además, el tiempo de ejecución solo debe incluir datos para esos componentes en la instantánea.
El tiempo de ejecución debe devolver XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT si alguno de los XrSpatialComponentTypeEXT en XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes no está habilitado para las capacidades espaciales que se pasan a XrSpatialContextCreateInfoEXT :: capabilityConfigs cuando se crea spatialContext .
Si la aplicación no proporciona una lista de tipos de componentes espaciales en XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes , el tiempo de ejecución debe incluir todas las entidades espaciales que se indican en XrSpatialUpdateSnapshotCreateInfoEXT :: entities en la instantánea y debe incluir los datos de todos los componentes habilitados de las capacidades configuradas para spatialContext .
El tiempo de ejecución no debe incluir entidades espaciales que no se indiquen en XrSpatialUpdateSnapshotCreateInfoEXT :: entities en snapshot .
La aplicación puede crear la cantidad de instantáneas que desee, pero debe tener en cuenta la memoria que se asigna a cada instantánea nueva y debe destruir las instantáneas una vez que ya no las necesite.
Uso válido (implícito)
- La extensión
XR_EXT_spatial_entitydebe habilitarse antes de llamar a xrCreateSpatialUpdateSnapshotEXT -
spatialContextdebe ser un identificador de XrSpatialContextEXT válido. -
createInfodebe ser un puntero a una estructura XrSpatialUpdateSnapshotCreateInfoEXT válida. -
snapshotdebe ser un puntero a un identificador de XrSpatialSnapshotEXT.
Códigos de retorno
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
La estructura XrSpatialUpdateSnapshotCreateInfoEXT se define de la siguiente manera:
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;
Descripciones de los miembros
typees el XrStructureType de esta estructura.nextesNULLo un puntero a la siguiente estructura en una cadena de estructuras. No se definen tales estructuras en OpenXR principal ni en esta extensión.entityCountes unuint32_tque describe el recuento de elementos en el arrayentities.entitieses un array de XrSpatialEntityEXT para el que el tiempo de ejecución debe incluir los datos del componente en la instantánea.componentTypeCountes unuint32_tque describe el recuento de elementos en el arraycomponentTypes.componentTypeses un array de XrSpatialComponentTypeEXT para el que el tiempo de ejecución debe incluir los datos en la instantánea.baseSpacees el XrSpace en relación con el cual se ubicarán todas las ubicaciones de la actualización XrSpatialSnapshotEXT.timees elXrTimeen el que se ubicarán todas las ubicaciones de la XrSpatialSnapshotEXT de actualización.
Uso válido (implícito)
- La extensión
XR_EXT_spatial_entitydebe habilitarse antes de usar XrSpatialUpdateSnapshotCreateInfoEXT -
typedebe serXR_TYPE_SPATIAL_UPDATE_SNAPSHOT_CREATE_INFO_EXT -
nextdebe serNULLo un puntero válido a la siguiente estructura en una cadena de estructuras -
entitiesdebe ser un puntero a un array de identificadores XrSpatialEntityEXT válidos deentityCount. - Si
componentTypeCountno es0,componentTypesdebe ser un puntero a un array decomponentTypeCountvalores XrSpatialComponentTypeEXT válidos. -
baseSpacedebe ser un identificador de XrSpace válido - El parámetro
entityCountdebe ser mayor que0. - Tanto
baseSpacecomo los elementos deentitiesdeben haberse creado, asignado o recuperado del mismo XrSession
Destruir instantánea
La función xrDestroySpatialSnapshotEXT se define de la siguiente manera:
XrResult xrDestroySpatialSnapshotEXT(
XrSpatialSnapshotEXT snapshot);
Descripciones de los parámetros
snapshotes un XrSpatialSnapshotEXT que se proporcionó anteriormente con xrCreateSpatialDiscoverySnapshotCompleteEXT o xrCreateSpatialUpdateSnapshotEXT .
La aplicación puede llamar a xrDestroySpatialSnapshotEXT para destruir el identificador XrSpatialSnapshotEXT y los recursos asociados a él.
Uso válido (implícito)
- La extensión
XR_EXT_spatial_entitydebe habilitarse antes de llamar a xrDestroySpatialSnapshotEXT. -
snapshotdebe ser un identificador XrSpatialSnapshotEXT válido.
Seguridad de subprocesos
- El acceso a
snapshoty a cualquier identificador secundario debe sincronizarse de forma externa.
Códigos de retorno
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
Componentes comunes
Delimitación 2D
Datos del componente
La estructura XrSpatialBounded2DDataEXT se define de la siguiente manera:
typedef struct XrSpatialBounded2DDataEXT {
XrPosef center;
XrExtent2Df extents;
} XrSpatialBounded2DDataEXT;
Descripciones de los miembros
centeres un XrPosef que define el centro geométrico del componente 2D delimitado.extentsson las extensiones del componente 2D delimitado a lo largo del eje X (extents.width) y el eje Y (extents.height), centradas encenter.
El extents del XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT hace referencia al tamaño de la entidad en el plano XY del sistema de coordenadas del plano. Un plano con una posición de {0, 0, 0}, una rotación de {0, 0, 0, 1} (sin rotación) y una extensión de {1, 1} hace referencia a un plano de 1 m x 1 m centrado en {0, 0, 0} con su vector normal de la cara frontal apuntando hacia la dirección +Z en el espacio del componente.
X X Y Y Z Z Altura Altura Y Y Z Z X X Plano vertical Plano vertical Plano horizontal Plano horizontal Ancho Ancho Ancho Ancho Altura Altura
Figura 24. Sistema de coordenadas del componente Bounded2D
Nota
OpenXR usa un plano X-Y con +Z como la normal del plano, pero otras APIs pueden usar un plano X-Z con +Y como la normal del plano. El plano X-Y se puede convertir en un plano X-Z rotando -π/2 radianes alrededor del eje +X.
Uso válido (implícito)
- La extensión
XR_EXT_spatial_entitydebe habilitarse antes de usar XrSpatialBounded2DDataEXT
Estructura de la lista de componentes para consultar datos
La estructura XrSpatialComponentBounded2DListEXT se define de la siguiente manera:
typedef struct XrSpatialComponentBounded2DListEXT {
XrStructureType type;
void* next;
uint32_t boundCount;
XrSpatialBounded2DDataEXT* bounds;
} XrSpatialComponentBounded2DListEXT;
Descripciones de los miembros
typees el XrStructureType de esta estructura.nextesNULLo un puntero a la siguiente estructura en una cadena de estructuras. No se definen tales estructuras en OpenXR principal ni en esta extensión.boundCountes unuint32_tque describe el recuento de elementos en el arraybounds.boundses un array de XrSpatialBounded2DDataEXT .
El tiempo de ejecución debe devolver XR_ERROR_VALIDATION_FAILURE de xrQuerySpatialComponentDataEXT si XrSpatialComponentBounded2DListEXT está en la siguiente cadena de XrSpatialComponentDataQueryResultEXT :: next, pero XrSpatialComponentDataQueryConditionEXT ::componentTypeCount no es cero y XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT no se incluye en XrSpatialComponentDataQueryConditionEXT :: componentTypes .
El tiempo de ejecución debe devolver XR_ERROR_SIZE_INSUFFICIENT de xrQuerySpatialComponentDataEXT si boundCount es menor que XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .
Si xrQuerySpatialComponentDataEXT :: snapshot se creó a partir de xrCreateSpatialDiscoverySnapshotCompleteEXT , el tiempo de ejecución debe proporcionar XrSpatialBounded2DDataEXT :: center en XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace y XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time .
Si xrQuerySpatialComponentDataEXT :: snapshot se creó a partir de xrCreateSpatialUpdateSnapshotEXT , el tiempo de ejecución debe proporcionar XrSpatialBounded2DDataEXT :: center en XrSpatialUpdateSnapshotCreateInfoEXT :: baseSpace y XrSpatialUpdateSnapshotCreateInfoEXT :: time .
Uso válido (implícito)
- La extensión
XR_EXT_spatial_entitydebe habilitarse antes de usar XrSpatialComponentBounded2DListEXT. -
typedebe serXR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXT -
nextdebe serNULLo un puntero válido a la siguiente estructura en una cadena de estructuras -
boundsdebe ser un puntero a un array de estructurasboundCountXrSpatialBounded2DDataEXT. - El parámetro
boundCountdebe ser mayor que0.
Configuración
Si XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT se enumera en XrSpatialCapabilityComponentTypesEXT :: componentTypes para alguna capacidad, la aplicación puede habilitarla incluyendo el valor de enumeración en la lista XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents. Este componente no requiere ninguna configuración especial para incluirse en la siguiente cadena de XrSpatialCapabilityConfigurationBaseHeaderEXT .
3D delimitado
Datos del componente
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT usa XrBoxf para sus datos.
Estructura de la lista de componentes para consultar datos
La estructura XrSpatialComponentBounded3DListEXT se define de la siguiente manera:
typedef struct XrSpatialComponentBounded3DListEXT {
XrStructureType type;
void* next;
uint32_t boundCount;
XrBoxf* bounds;
} XrSpatialComponentBounded3DListEXT;
Descripciones de los miembros
typees el XrStructureType de esta estructura.nextesNULLo un puntero a la siguiente estructura en una cadena de estructuras. No se definen tales estructuras en OpenXR principal ni en esta extensión.boundCountes unuint32_tque describe el recuento de elementos en el arraybounds.boundses un array de XrBoxf .
El tiempo de ejecución debe devolver XR_ERROR_VALIDATION_FAILURE de xrQuerySpatialComponentDataEXT si XrSpatialComponentBounded3DListEXT está en la siguiente cadena de XrSpatialComponentDataQueryResultEXT :: next, pero XrSpatialComponentDataQueryConditionEXT ::componentTypeCount no es cero y XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT no se incluye en XrSpatialComponentDataQueryConditionEXT :: componentTypes .
El tiempo de ejecución debe devolver XR_ERROR_SIZE_INSUFFICIENT de xrQuerySpatialComponentDataEXT si boundCount es menor que XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .
Si xrQuerySpatialComponentDataEXT :: snapshot se creó a partir de xrCreateSpatialDiscoverySnapshotCompleteEXT , el tiempo de ejecución debe proporcionar XrBoxf :: center en XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace en XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time .
Si xrQuerySpatialComponentDataEXT :: snapshot se creó a partir de xrCreateSpatialUpdateSnapshotEXT , el tiempo de ejecución debe proporcionar XrBoxf :: center en XrSpatialUpdateSnapshotCreateInfoEXT :: baseSpace en XrSpatialUpdateSnapshotCreateInfoEXT :: time .
Uso válido (implícito)
- La extensión
XR_EXT_spatial_entitydebe habilitarse antes de usar XrSpatialComponentBounded3DListEXT -
typedebe serXR_TYPE_SPATIAL_COMPONENT_BOUNDED_3D_LIST_EXT -
nextdebe serNULLo un puntero válido a la siguiente estructura en una cadena de estructuras -
boundsdebe ser un puntero a un array de estructurasboundCountXrBoxf. - El parámetro
boundCountdebe ser mayor que0.
Configuración
Si XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT se enumera en XrSpatialCapabilityComponentTypesEXT :: componentTypes para alguna capacidad, la aplicación puede habilitarla incluyendo la enumeración en la lista XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents. Este componente no requiere ninguna configuración especial para incluirse en la siguiente cadena de XrSpatialCapabilityConfigurationBaseHeaderEXT .
Padre
Datos del componente
XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT utiliza XrSpatialEntityIdEXT para sus datos.
Estructura de la lista de componentes para consultar datos
La estructura XrSpatialComponentParentListEXT se define de la siguiente manera:
typedef struct XrSpatialComponentParentListEXT {
XrStructureType type;
void* next;
uint32_t parentCount;
XrSpatialEntityIdEXT* parents;
} XrSpatialComponentParentListEXT;
Descripciones de los miembros
typees el XrStructureType de esta estructura.nextesNULLo un puntero a la siguiente estructura en una cadena de estructuras. No se definen tales estructuras en OpenXR principal ni en esta extensión.parentCountes unuint32_tque describe el recuento de elementos en el arrayparents.parentses un array deXrSpatialEntityIdEXT.
El tiempo de ejecución debe devolver XR_ERROR_VALIDATION_FAILURE desde xrQuerySpatialComponentDataEXT si XrSpatialComponentParentListEXT está en la siguiente cadena de XrSpatialComponentDataQueryResultEXT :: next, pero XrSpatialComponentDataQueryConditionEXT ::componentTypeCount no es cero y XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT no se incluye en XrSpatialComponentDataQueryConditionEXT :: componentTypes .
El tiempo de ejecución debe devolver XR_ERROR_SIZE_INSUFFICIENT de xrQuerySpatialComponentDataEXT si parentCount es menor que XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .
Uso válido (implícito)
- La extensión
XR_EXT_spatial_entitydebe habilitarse antes de usar XrSpatialComponentParentListEXT -
typedebe serXR_TYPE_SPATIAL_COMPONENT_PARENT_LIST_EXT -
nextdebe serNULLo un puntero válido a la siguiente estructura en una cadena de estructuras -
parentsdebe ser un puntero a un array de valoresparentCountXrSpatialEntityIdEXT. - El parámetro
parentCountdebe ser mayor que0.
Configuración
Si XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT se enumera en XrSpatialCapabilityComponentTypesEXT :: componentTypes para alguna capacidad, la aplicación puede habilitarla incluyendo la enumeración en la lista XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents. Este componente no requiere ninguna configuración especial para incluirse en la siguiente cadena de XrSpatialCapabilityConfigurationBaseHeaderEXT .
Malla 3D
Datos del componente
La estructura XrSpatialMeshDataEXT se define de la siguiente manera:
typedef struct XrSpatialMeshDataEXT {
XrPosef origin;
XrSpatialBufferEXT vertexBuffer;
XrSpatialBufferEXT indexBuffer;
} XrSpatialMeshDataEXT;
Descripciones de los miembros
origines un XrPosef que define el origen de la malla. Todos los vértices de la malla deben ser relativos a este origen.vertexBufferes un XrSpatialBufferEXT que proporciona el ID de un búfer que representa el búfer de vértices de la entidad en la que se encuentra este componente. La posición de los vértices debe ser relativa aorigin.indexBufferes un XrSpatialBufferEXT que proporciona el ID de un búfer que representa un array de índices de triángulos, especificando los índices de los vértices de la malla envertexBuffer. Los índices de triángulo deben devolverse en sentido contrario a las agujas del reloj, y tres índices denotan un triángulo.
El tipo de componente que usa XrSpatialMeshDataEXT debe especificar el XrSpatialBufferTypeEXT de vertexBuffer y indexBuffer .
Uso válido (implícito)
- La extensión
XR_EXT_spatial_entitydebe habilitarse antes de usar XrSpatialMeshDataEXT -
vertexBufferdebe ser una estructura XrSpatialBufferEXT válida. -
indexBufferdebe ser una estructura XrSpatialBufferEXT válida.
Estructura de la lista de componentes para consultar datos
La estructura XrSpatialComponentMesh3DListEXT se define de la siguiente manera:
typedef struct XrSpatialComponentMesh3DListEXT {
XrStructureType type;
void* next;
uint32_t meshCount;
XrSpatialMeshDataEXT* meshes;
} XrSpatialComponentMesh3DListEXT;
Descripciones de los miembros
typees el XrStructureType de esta estructura.nextesNULLo un puntero a la siguiente estructura en una cadena de estructuras.meshCountes unuint32_tque describe el recuento de elementos en el arraymeshes.mesheses un array de XrSpatialMeshDataEXT .
La aplicación puede consultar el componente de malla 3D de las entidades espaciales en un XrSpatialSnapshotEXT agregando XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT en XrSpatialComponentDataQueryConditionEXT :: componentTypes y agregando XrSpatialComponentMesh3DListEXT a la siguiente cadena de punteros de XrSpatialComponentDataQueryResultEXT .
El tiempo de ejecución debe devolver XR_ERROR_VALIDATION_FAILURE de xrQuerySpatialComponentDataEXT si XrSpatialComponentMesh3DListEXT está en la siguiente cadena de XrSpatialComponentDataQueryResultEXT :: next, pero XrSpatialComponentDataQueryConditionEXT ::componentTypeCount no es cero y XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT no se incluye en XrSpatialComponentDataQueryConditionEXT :: componentTypes .
El tiempo de ejecución debe devolver XR_ERROR_SIZE_INSUFFICIENT de xrQuerySpatialComponentDataEXT si meshCount es menor que XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .
Para el XrSpatialMeshDataEXT completado por el tiempo de ejecución en el array meshes, el XrSpatialBufferEXT :: bufferType para XrSpatialMeshDataEXT :: vertexBuffer debe ser XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT y el XrSpatialBufferEXT :: bufferType para XrSpatialMeshDataEXT :: indexBuffer debe ser XR_SPATIAL_BUFFER_TYPE_UINT32_EXT .
Uso válido (implícito)
- La extensión
XR_EXT_spatial_entitydebe habilitarse antes de usar XrSpatialComponentMesh3DListEXT -
typedebe serXR_TYPE_SPATIAL_COMPONENT_MESH_3D_LIST_EXT -
nextdebe serNULLo un puntero válido a la siguiente estructura en una cadena de estructuras -
meshesdebe ser un puntero a un array de estructurasmeshCountXrSpatialMeshDataEXT. - El parámetro
meshCountdebe ser mayor que0.
Configuración
Si XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT se enumera en XrSpatialCapabilityComponentTypesEXT :: componentTypes para alguna capacidad, la aplicación puede habilitarla incluyendo la enumeración en la lista XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents de la estructura derivada XrSpatialCapabilityConfigurationBaseHeaderEXT de la capacidad que admite este componente.
Este componente no requiere ninguna configuración especial para incluirse en la siguiente cadena de XrSpatialCapabilityConfigurationBaseHeaderEXT .
Filtros de estado de seguimiento
La estructura XrSpatialFilterTrackingStateEXT se define de la siguiente manera:
typedef struct XrSpatialFilterTrackingStateEXT {
XrStructureType type;
const void* next;
XrSpatialEntityTrackingStateEXT trackingState;
} XrSpatialFilterTrackingStateEXT;
Descripciones de los miembros
typees el XrStructureType de esta estructura.nextesNULLo un puntero a la siguiente estructura en una cadena de estructuras.trackingStatees el XrSpatialEntityTrackingStateEXT para el que la aplicación quiere aplicar el filtro.
La aplicación puede usar XrSpatialFilterTrackingStateEXT en la siguiente cadena de XrSpatialDiscoverySnapshotCreateInfoEXT para limitar el descubrimiento solo a aquellas entidades cuyo estado de seguimiento sea trackingState .
La aplicación puede usar XrSpatialFilterTrackingStateEXT en la siguiente cadena de XrSpatialComponentDataQueryConditionEXT para limitar la consulta de datos de componentes de una instantánea solo a las entidades cuyo estado de seguimiento sea trackingState .
Uso válido (implícito)
- La extensión
XR_EXT_spatial_entitydebe habilitarse antes de usar XrSpatialFilterTrackingStateEXT -
typedebe serXR_TYPE_SPATIAL_FILTER_TRACKING_STATE_EXT -
nextdebe serNULLo un puntero válido a la siguiente estructura en una cadena de estructuras -
trackingStatedebe ser un valor XrSpatialEntityTrackingStateEXT válido
Ejemplo de código
Uso de la aplicación
Por lo general, las aplicaciones usan la extensión de entidad espacial con el siguiente patrón:
- Primero, una aplicación enumera las capacidades espaciales del sistema con xrEnumerateSpatialCapabilitiesEXT . Luego, inspecciona el array devuelto de XrSpatialCapabilityEXT y enumera los componentes y las funciones compatibles con cada una de esas capacidades usando xrEnumerateSpatialCapabilityComponentTypesEXT y xrEnumerateSpatialCapabilityFeaturesEXT, respectivamente. Esto le brinda a la aplicación un panorama completo de los componentes que puede habilitar y los parámetros de configuración que acepta la capacidad.
- Luego, la aplicación crea uno o varios identificadores de XrSpatialContextEXT con configuraciones de capacidad espacial específicas, en las que las configuraciones habilitan y configuran una capacidad específica en el contexto espacial, y habilitan y configuran componentes para esas capacidades.
- Para cada XrSpatialContextEXT , la aplicación espera recibir eventos XrEventDataSpatialDiscoveryRecommendedEXT para ese XrSpatialContextEXT antes de usar xrCreateSpatialDiscoverySnapshotAsyncEXT para descubrir entidades espaciales. Una vez que se completa esta operación asíncrona, la aplicación recibe un identificador de XrSpatialSnapshotEXT.
- La aplicación consulta las entidades y los datos de componentes incluidos en este XrSpatialSnapshotEXT con xrQuerySpatialComponentDataEXT . La aplicación lee los datos de componentes más recientes de las entidades consultadas a partir de estructuras adjuntas a la siguiente cadena de XrSpatialComponentDataQueryResultEXT si el estado de la entidad es
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT. - Si hay entidades específicas que la aplicación identifica como interesantes y para las que quiere recibir actualizaciones con el tiempo, crea identificadores XrSpatialEntityEXT para esas entidades con xrCreateSpatialEntityFromIdEXT . La aplicación recibe actualizaciones para esas entidades interesantes con xrCreateSpatialUpdateSnapshotEXT y usa la misma función xrQuerySpatialComponentDataEXT en el XrSpatialSnapshotEXT recién creado para obtener los datos de componentes más recientes de esas entidades.
Descubre entidades espaciales y consulta datos de componentes
En el siguiente ejemplo de código, se muestra cómo descubrir entidades espaciales para la capacidad "Foo" y consultar sus datos de componentes.
/****************************/
/* 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));
Consulta datos del búfer
En el siguiente código de ejemplo, se muestra cómo obtener los datos de un componente que proporciona un 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.
}
}
Lineamientos de extensiones
Si una extensión define un nuevo XrSpatialComponentTypeEXT que proporciona datos adicionales sobre una entidad espacial,
- La extensión también debe definir una estructura de lista para ese componente que permita que la aplicación pase un array al tiempo de ejecución para que se complete con los datos de cada una de las entidades espaciales que satisfacen xrQuerySpatialComponentDataEXT ::
queryCondition. Algunos ejemplos de estas estructuras de listas son XrSpatialComponentParentListEXT y XrSpatialComponentBounded2DListEXT . Si el tamaño de los datos del componente es variable y requiere que la aplicación use la expresión idiomática de dos llamadas para consultarlo, los datos del componente deben proporcionar un XrSpatialBufferEXT para cada dato de tamaño variable en la estructura de la lista y deben especificar el XrSpatialBufferTypeEXT para cada búfer. Luego, la aplicación puede consultar los datos del búfer con las funciones definidas en Modismo de dos llamadas para los datos de componentes . Un ejemplo de tal estructura es XrSpatialMeshDataEXT, que se incluye en XrSpatialComponentMesh3DListEXT . - La extensión también puede proporcionar estructuras que la aplicación puede encadenar a XrSpatialComponentDataQueryConditionEXT ::
nextpara proporcionar filtros adicionales para la consulta relacionada con los datos de este componente.
- La extensión también debe definir una estructura de lista para ese componente que permita que la aplicación pase un array al tiempo de ejecución para que se complete con los datos de cada una de las entidades espaciales que satisfacen xrQuerySpatialComponentDataEXT ::
Las extensiones pueden definir estructuras que extiendan XrSpatialDiscoverySnapshotCreateInfoEXT para proporcionar filtros adicionales para el descubrimiento. Los filtros para crear la instantánea no deben afectar la configuración del contexto espacial, sino que deben usarse para proporcionar sugerencias al tiempo de ejecución sobre qué entidades y datos se deben incluir en la instantánea según el seguimiento de la configuración actual del contexto espacial (y, por lo tanto, la configuración actual de los servicios subyacentes).
Si una extensión define un nuevo XrSpatialCapabilityEXT ,
- También debe especificar la lista de XrSpatialComponentTypeEXT que los tiempos de ejecución deben proporcionar en las entidades para esa capacidad.
- También debe proporcionar estructuras derivadas de XrSpatialCapabilityConfigurationBaseHeaderEXT que permitirán la configuración de esa capacidad.
Si una extensión define un nuevo XrSpatialCapabilityFeatureEXT , también debe definir una estructura de configuración correspondiente que se pueda encadenar al siguiente puntero de XrSpatialCapabilityConfigurationBaseHeaderEXT , que la aplicación puede usar para habilitar la función cuando se crea un XrSpatialContextEXT .
Una extensión que define una nueva XrSpatialCapabilityEXT debe seguir esta plantilla para la especificación:
- Descripción general
- Asistencia del entorno de ejecución
- Configuración
- Componentes garantizados
- Código de ejemplo
Una extensión que define un nuevo XrSpatialComponentTypeEXT debe seguir esta plantilla para la especificación:
- Datos del componente
- Estructura de la lista de componentes para consultar datos
- Configuración
Cuando se escribe una API que proporciona a la aplicación un
XrSpatialBufferIdEXT, debe acompañarse de un XrSpatialBufferTypeEXT para informar a la aplicación cuál es el tipo de datos del búfer, y la aplicación puede usar una funciónxrGetSpatialBuffer*adecuada para recuperar el contenido real del búfer.
Lineamientos para el diseño y la extensión de etiquetas semánticas
Si bien esta extensión no define ningún componente para transmitir la información de la etiqueta semántica de una entidad, establece las reglas y los lineamientos de diseño para cualquier extensión que defina un componente de este tipo. En el siguiente texto, " debe " y " deben " restringen a los autores de dicha funcionalidad, en lugar de restringir una implementación de tiempo de ejecución o una aplicación que use la API.
- Si una extensión define etiquetas semánticas para cualquier XrSpatialCapabilityEXT, debe hacerlo definiendo un nuevo XrSpatialComponentTypeEXT, así como una nueva enumeración con un conjunto de etiquetas (un "conjunto de etiquetas semánticas") para que sean los datos de ese componente.
- Una enumeración que representa un conjunto de etiquetas semánticas debe tener un valor para indicar que la entidad no se categoriza en ninguna de las etiquetas de este conjunto. El nombre de este enumerador debe incluir "UNCATEGORIZED", p.ej.,
XR_SPATIAL_PLANE_SEMANTIC_LABEL_UNCATEGORIZED_EXT. Este valor indica a las aplicaciones que el tiempo de ejecución reconoce esta entidad, pero que hay otros conjuntos de etiquetas semánticas en los que se categoriza esta entidad. - La enumeración de este XrSpatialComponentTypeEXT definido recientemente en xrEnumerateSpatialCapabilityComponentTypesEXT implica que el tiempo de ejecución admite el conjunto de etiquetas semánticas (y, por lo tanto, las etiquetas definidas en el conjunto) correspondientes a ese tipo de componente.
- Las aplicaciones expresan su deseo de descubrir entidades que tienen etiquetas que pertenecen a este conjunto de etiquetas semánticas incluyendo el XrSpatialComponentTypeEXT correspondiente en el array XrSpatialCapabilityConfigurationBaseHeaderEXT ::
enabledComponentsdel struct de configuración para la capacidad para la que se enumera el tipo de componente. - Es posible que una sola entidad espacial tenga varios componentes, cada uno de los cuales le proporciona una etiqueta de su propio conjunto de etiquetas semánticas. Considera el siguiente ejemplo con algunos conjuntos de etiquetas semánticas hipotéticas:
XrSpatialObjectSemanticLabel, que podría tener valores como silla, sofá, mesa, etcétera.XrSpatialSofaBrand, que podría tener valores como IKEA, Wayfair, etcétera, yXrSpatialIkeaSofa, que podría tener nombres de modelos específicos de sofás de IKEA. En esta situación, la misma entidad de sofá tiene los 3 componentes (etiquetas de los 3 conjuntos de etiquetas semánticas), y cada uno proporciona un nivel de detalle diferente de la información sobre la entidad. - Si una extensión define un nuevo XrSpatialComponentTypeEXT que proporciona un nuevo conjunto de etiquetas semánticas que contiene varias etiquetas además de la etiqueta
UNCATEGORIZED, la extensión debe considerar la posibilidad de definir un XrSpatialCapabilityFeatureEXT que permita a las aplicaciones activar solo un subconjunto de las etiquetas definidas en el conjunto de etiquetas semánticas correspondiente a ese tipo de componente. Este subconjunto, que se proporciona en la siguiente cadena de la configuración de la capacidad, actúa como una sugerencia para que los tiempos de ejecución optimicen sus canalizaciones de seguimiento y solo realicen el seguimiento del subconjunto proporcionado. A continuación, se proporciona un ejemplo de un objeto struct de este tipo . - Las extensiones no deben agregar etiquetas a la enumeración del conjunto de etiquetas semánticas existente. En su lugar, deben definir una nueva enumeración que contenga enumerantes equivalentes con una semántica idéntica y con valores iguales a los del otro conjunto, además de los enumerantes agregados recientemente. La especificación del conjunto de etiquetas semánticas definido recientemente también debe establecer la asignación entre el conjunto de etiquetas anterior y el nuevo. Consulta el ejemplo a continuación .
Ejemplo de definición de atributo espacial para un subconjunto de etiquetas semánticas
// 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;
Ejemplo de extensión de etiquetas semánticas espaciales
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;
Considera el ejemplo anterior en el que una extensión define una enumeración XrSpatialExamplePlaneSemanticLabelExtensionEXT para extender el XrSpatialPlaneSemanticLabelEXT existente con valores que representan puertas y ventanas. La especificación de la nueva enumeración debe incluir texto para el siguiente formulario:
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
|====
Nuevas macros
Nuevos tipos de base
XrSpatialBufferIdEXTXrSpatialEntityIdEXT
Nuevos tipos de objetos
Comandos nuevos
- xrCreateSpatialContextAsyncEXT
- xrCreateSpatialContextCompleteEXT
- xrCreateSpatialDiscoverySnapshotAsyncEXT
- xrCreateSpatialDiscoverySnapshotCompleteEXT
- xrCreateSpatialEntityFromIdEXT
- xrCreateSpatialUpdateSnapshotEXT
- xrDestroySpatialContextEXT
- xrDestroySpatialEntityEXT
- xrDestroySpatialSnapshotEXT
- xrEnumerateSpatialCapabilitiesEXT
- xrEnumerateSpatialCapabilityComponentTypesEXT
- xrEnumerateSpatialCapabilityFeaturesEXT
- xrGetSpatialBufferFloatEXT
- xrGetSpatialBufferStringEXT
- xrGetSpatialBufferUint16EXT
- xrGetSpatialBufferUint32EXT
- xrGetSpatialBufferUint8EXT
- xrGetSpatialBufferVector2fEXT
- xrGetSpatialBufferVector3fEXT
- xrQuerySpatialComponentDataEXT
Nuevas estructuras
- XrCreateSpatialContextCompletionEXT
- XrCreateSpatialDiscoverySnapshotCompletionEXT
- XrCreateSpatialDiscoverySnapshotCompletionInfoEXT
- XrEventDataSpatialDiscoveryRecommendedEXT
- XrSpatialBounded2DDataEXT
- XrSpatialBufferEXT
- XrSpatialBufferGetInfoEXT
- XrSpatialCapabilityComponentTypesEXT
- XrSpatialCapabilityConfigurationBaseHeaderEXT
- XrSpatialComponentDataQueryConditionEXT
- XrSpatialComponentDataQueryResultEXT
- XrSpatialContextCreateInfoEXT
- XrSpatialDiscoverySnapshotCreateInfoEXT
- XrSpatialEntityFromIdCreateInfoEXT
- XrSpatialMeshDataEXT
- XrSpatialUpdateSnapshotCreateInfoEXT
Extensión de XrSpatialComponentDataQueryResultEXT :
Extiende XrSpatialDiscoverySnapshotCreateInfoEXT , XrSpatialComponentDataQueryConditionEXT :
Enums nuevos
- XrSpatialBufferTypeEXT
- XrSpatialCapabilityEXT
- XrSpatialCapabilityFeatureEXT
- XrSpatialComponentTypeEXT
- XrSpatialEntityTrackingStateEXT
Nuevas constantes de enumeración
XR_EXT_SPATIAL_ENTITY_EXTENSION_NAMEXR_EXT_spatial_entity_SPEC_VERSIONExtensión de XrObjectType :
XR_OBJECT_TYPE_SPATIAL_CONTEXT_EXTXR_OBJECT_TYPE_SPATIAL_ENTITY_EXTXR_OBJECT_TYPE_SPATIAL_SNAPSHOT_EXT
Extensión de 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
Extensión de 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
Problemas
¿Una sola entidad siempre se deriva de una sola capacidad?
- Resuelto
- Respuesta: No. Depende completamente del tiempo de ejecución en función de sus propias capacidades de seguimiento y de cómo desea representar una entidad detectada. La especificación no prescribe ninguna representación particular de la entidad espacial, excepto los componentes garantizados de una capacidad determinada para establecer una expectativa mínima. Un tiempo de ejecución puede combinar entidades detectadas por diferentes capacidades y representarlas como una sola entidad con los componentes garantizados de todas las capacidades que ayudaron a identificarla. Un ejemplo de esto podría ser que las mesas se puedan detectar con una capacidad de seguimiento de planos y una capacidad de seguimiento de objetos, en la que el seguimiento de planos proporciona el componente
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTen la entidad y el seguimiento de objetos proporcionaXR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT. Un determinado tiempo de ejecución puede proporcionar la tabla como 2 entidades separadas, cada una con su propio conjunto de componentes garantizados, mientras que ciertos tiempos de ejecución pueden proporcionar solo 1 entidad para representar la tabla y tenerXR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTyXR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXTen la misma entidad. Lo importante que se debe tener en cuenta aquí es que una entidad espacial determinada puede tener como máximo un solo componente de cualquier tipo de componente determinado . Por lo tanto, si los datos de componentes que producen las diferentes capacidades entran en conflicto para una entidad determinada, el tiempo de ejecución debe representarlos como 2 entidades separadas.
Historial de versiones
Revisión 1, 2024-04-12 (Nihav Jain, Google)
- Descripción inicial de la extensión