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

  • instance es un identificador para un XrInstance .
  • systemId es el XrSystemId cuyas capacidades espaciales se enumerarán.
  • capabilityCapacityInput es la capacidad del array capabilities o 0 para indicar una solicitud para recuperar la capacidad requerida.
  • capabilityCountOutput es la cantidad de capacidades o la capacidad requerida en caso de que capabilityCapacityInput sea insuficiente.
  • capabilities es un array de XrSpatialCapabilityEXT . Puede ser NULL si capabilityCapacityInput es 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 capabilities requerido.

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_entity debe habilitarse antes de llamar a xrEnumerateSpatialCapabilitiesEXT.
  • instance debe ser un identificador de XrInstance válido
  • capabilityCountOutput debe ser un puntero a un valor uint32_t
  • Si capabilityCapacityInput no es 0 , capabilities debe ser un puntero a un array de valores capabilityCapacityInput XrSpatialCapabilityEXT.

Códigos de retorno

Listo

  • XR_SUCCESS

Falla

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SYSTEM_INVALID
  • XR_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

  • instance es un identificador para un XrInstance .
  • systemId es el XrSystemId cuyos componentes de capacidad espacial se enumerarán.
  • capability es el XrSpatialCapabilityEXT para el que se enumerarán los componentes.
  • capabilityComponents es 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)

Códigos de retorno

Listo

  • XR_SUCCESS

Falla

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT
  • XR_ERROR_SYSTEM_INVALID
  • XR_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

  • type es el XrStructureType de esta estructura.
  • next es NULL o un puntero a la siguiente estructura en una cadena de estructuras. No se definen tales estructuras en OpenXR principal ni en esta extensión.
  • componentTypeCapacityInput es la capacidad del array o 0 para indicar una solicitud para recuperar la capacidad requerida.
  • componentTypeCountOutput es la cantidad de tipos de componentes o la capacidad requerida en caso de que componentTypeCapacityInput sea insuficiente.
  • componentTypes es un array de XrSpatialComponentTypeEXT . Puede ser NULL si componentTypeCapacityInput es 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 componentTypes requerido.

Uso válido (implícito)

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

  • instance es un identificador para un XrInstance .
  • systemId es el XrSystemId cuyos atributos de capacidad espacial se enumerarán.
  • capability es el XrSpatialCapabilityEXT para el que se enumerarán las funciones.
  • capabilityFeatureCapacityInput es la capacidad del array o 0 para indicar una solicitud para recuperar la capacidad requerida.
  • capabilityFeatureCountOutput es la cantidad de características o la capacidad requerida en caso de que capabilityFeatureCapacityInput sea insuficiente.
  • capabilityFeatures es un array de XrSpatialCapabilityFeatureEXT . Puede ser NULL si capabilityFeatureCapacityInput es 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 capabilityFeatures requerido.

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)

Códigos de retorno

Listo

  • XR_SUCCESS

Falla

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT
  • XR_ERROR_SYSTEM_INVALID
  • XR_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

  • session es un XrSession en el que el contexto espacial estará activo.
  • createInfo es el XrSpatialContextCreateInfoEXT que se usa para especificar los parámetros del contexto espacial.
  • future es un puntero a un XrFutureEXT .

La aplicación puede crear un identificador XrSpatialContextEXT de las siguientes maneras:

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)

Códigos de retorno

Listo

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Falla

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_PERMISSION_INSUFFICIENT
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT
  • XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT
  • XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT
  • XR_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

  • type es el XrStructureType de esta estructura.
  • next es NULL o un puntero a la siguiente estructura en una cadena de estructuras. No se definen tales estructuras en OpenXR principal ni en esta extensión.
  • capabilityConfigCount es un uint32_t que describe el recuento de elementos en el array capabilityConfigs.
  • capabilityConfigs es 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 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

  • type es el XrStructureType de esta estructura.
  • next es NULL o un puntero a la siguiente estructura en una cadena de estructuras.
  • capability es un XrSpatialCapabilityEXT .
  • enabledComponentCount es un uint32_t que describe el recuento de elementos en el array enabledComponents.
  • enabledComponents es 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 función xrCreateSpatialContextCompleteEXT se define de la siguiente manera:

XrResult xrCreateSpatialContextCompleteEXT(
    XrSession                                   session,
    XrFutureEXT                                 future,
    XrCreateSpatialContextCompletionEXT*        completion);

Descripciones de los parámetros

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)

Códigos de retorno

Listo

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Falla

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_FUTURE_INVALID_EXT
  • XR_ERROR_FUTURE_PENDING_EXT
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_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

Códigos de devolución futuros

Valores de futureResult:

Listo

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Falla

  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_LIMIT_REACHED
  • XR_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)

Destruye el contexto espacial

La función xrDestroySpatialContextEXT se define de la siguiente manera:

XrResult xrDestroySpatialContextEXT(
    XrSpatialContextEXT                         spatialContext);

Descripciones de los parámetros

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)

Seguridad de subprocesos

  • El acceso a spatialContext y a cualquier identificador secundario debe sincronizarse de forma externa.

Códigos de retorno

Listo

  • XR_SUCCESS

Falla

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_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

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)

Códigos de retorno

Listo

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Falla

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXT
  • XR_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

  • type es el XrStructureType de esta estructura.
  • next es NULL o un puntero a la siguiente estructura en una cadena de estructuras. No se definen tales estructuras en OpenXR principal ni en esta extensión.
  • entityId es el XrSpatialEntityIdEXT de la entidad para la que la aplicación desea crear un identificador.

Uso válido (implícito)

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

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)

Seguridad de subprocesos

  • El acceso a spatialEntity y a cualquier identificador secundario debe sincronizarse de forma externa.

Códigos de retorno

Listo

  • XR_SUCCESS

Falla

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_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

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)

Códigos de retorno

Listo

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Falla

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT
  • XR_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

  • type es el XrStructureType de esta estructura.
  • next es NULL o un puntero a la siguiente estructura en una cadena de estructuras. No se definen tales estructuras en OpenXR principal ni en esta extensión.
  • componentTypeCount es un uint32_t que describe el recuento de elementos en el array componentTypes.
  • componentTypes es 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 función xrCreateSpatialDiscoverySnapshotCompleteEXT se define de la siguiente manera:

XrResult xrCreateSpatialDiscoverySnapshotCompleteEXT(
    XrSpatialContextEXT                         spatialContext,
    const XrCreateSpatialDiscoverySnapshotCompletionInfoEXT* createSnapshotCompletionInfo,
    XrCreateSpatialDiscoverySnapshotCompletionEXT* completion);

Descripciones de los parámetros

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)

Códigos de retorno

Listo

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Falla

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_FUTURE_INVALID_EXT
  • XR_ERROR_FUTURE_PENDING_EXT
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_TIME_INVALID
  • XR_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

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 estructura XrCreateSpatialDiscoverySnapshotCompletionEXT se define de la siguiente manera:

typedef struct XrCreateSpatialDiscoverySnapshotCompletionEXT {
    XrStructureType         type;
    void*                   next;
    XrResult                futureResult;
    XrSpatialSnapshotEXT    snapshot;
} XrCreateSpatialDiscoverySnapshotCompletionEXT;

Descripciones de los miembros

  • type es el XrStructureType de esta estructura.
  • next es NULL o un puntero a la siguiente estructura en una cadena de estructuras.
  • futureResult es el XrResult de la operación de creación de la instantánea de descubrimiento espacial.
  • snapshot es 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:

Listo

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Falla

  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_LIMIT_REACHED

Uso válido (implícito)

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

  • type es el XrStructureType de esta estructura.
  • next es NULL o un puntero a la siguiente estructura en una cadena de estructuras.
  • spatialContext es 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)

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

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)

Códigos de retorno

Listo

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Falla

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_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_EXT y XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT.
  • Las entidades 3 y 4 tienen los componentes XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT y XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT.
  • La entidad 5 tiene los componentes XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT y XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT .

XrSpatialEntityIdEXT

XrSpatialEntityIdEXT

1

1

2

2

3

3

4

4

5

5

Bounded2D

Bounded2D

No

No

No

No

Padre

Padre

No

No

No

No

No

No

Mesh3D

Mesh3D

No

No

No

No

Bounded3D

Bounded3D

No

No

No

No

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

  • type es el XrStructureType de esta estructura.
  • next es NULL o un puntero a la siguiente estructura en una cadena de estructuras.
  • componentTypeCount es un uint32_t que describe el recuento de elementos en el array componentTypes.
  • componentTypes es un array de XrSpatialComponentTypeEXT para los que se obtendrán los datos de la instantánea.

Uso válido (implícito)

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

  • type es el XrStructureType de esta estructura.
  • next es NULL o un puntero a la siguiente estructura en una cadena de estructuras.
  • entityIdCapacityInput es la capacidad del array entityIds o 0 para indicar una solicitud para recuperar la capacidad requerida.
  • entityIdCountOutput es la cantidad de XrSpatialEntityIdEXT en entityIds o la capacidad requerida en caso de que entityIdCapacityInput sea insuficiente.
  • entityIds es un array de XrSpatialEntityIdEXT . Puede ser NULL si entityIdCapacityInput es 0.
  • entityStateCapacityInput es la capacidad del array entityStates o 0 para indicar una solicitud para recuperar la capacidad requerida.
  • entityStateCountOutput es la cantidad de XrSpatialEntityTrackingStateEXT en entityStates o la capacidad requerida en caso de que entityStateCapacityInput sea insuficiente. Este valor siempre debe ser el mismo que entityIdCountOutput .
  • entityStates es un array de XrSpatialEntityTrackingStateEXT . Puede ser NULL si entityStateCapacityInput es 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 entityIds requerido.

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)

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_EXT a XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT si 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_EXT a XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT o XR_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_EXT o XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT a XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT si 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 es XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT o XR_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

  • bufferId el XrSpatialBufferIdEXT de los datos del búfer.
  • bufferType es el XrSpatialBufferTypeEXT para indicar el tipo de datos en bufferId . La aplicación puede usar bufferType para 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)

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

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

  • snapshot es un identificador para un XrSpatialSnapshotEXT .
  • info contiene la información del búfer que se consultará.
  • bufferCapacityInput es la capacidad del array o 0 para indicar una solicitud para recuperar la capacidad requerida.
  • bufferCountOutput es la cantidad de caracteres o la capacidad requerida en caso de que bufferCapacityInput sea insuficiente.
  • buffer es un array de char . Puede ser NULL si bufferCapacityInput es 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 buffer requerido.

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_entity debe habilitarse antes de llamar a xrGetSpatialBufferStringEXT
  • snapshot debe ser un identificador XrSpatialSnapshotEXT válido.
  • info debe ser un puntero a una estructura XrSpatialBufferGetInfoEXT válida.
  • bufferCountOutput debe ser un puntero a un valor uint32_t
  • Si bufferCapacityInput no es 0 , buffer debe ser un puntero a un array de valores char de bufferCapacityInput.

Códigos de retorno

Listo

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Falla

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT
  • XR_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

  • snapshot es un identificador para un XrSpatialSnapshotEXT .
  • info contiene la información del búfer que se consultará.
  • bufferCapacityInput es la capacidad del array o 0 para indicar una solicitud para recuperar la capacidad requerida.
  • bufferCountOutput es la cantidad de elementos en el array buffer o la capacidad requerida en caso de que bufferCapacityInput sea insuficiente.
  • buffer es un array de uint8_t . Puede ser NULL si bufferCapacityInput es 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 buffer requerido.

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_entity debe habilitarse antes de llamar a xrGetSpatialBufferUint8EXT.
  • snapshot debe ser un identificador XrSpatialSnapshotEXT válido.
  • info debe ser un puntero a una estructura XrSpatialBufferGetInfoEXT válida.
  • bufferCountOutput debe ser un puntero a un valor uint32_t
  • Si bufferCapacityInput no es 0 , buffer debe ser un puntero a un array de valores bufferCapacityInput uint8_t.

Códigos de retorno

Listo

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Falla

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT
  • XR_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

  • snapshot es un identificador para un XrSpatialSnapshotEXT .
  • info contiene la información del búfer que se consultará.
  • bufferCapacityInput es la capacidad del array o 0 para indicar una solicitud para recuperar la capacidad requerida.
  • bufferCountOutput es la cantidad de elementos en el array buffer o la capacidad requerida en caso de que bufferCapacityInput sea insuficiente.
  • buffer es un array de uint16_t . Puede ser NULL si bufferCapacityInput es 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 buffer requerido.

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_entity debe habilitarse antes de llamar a xrGetSpatialBufferUint16EXT.
  • snapshot debe ser un identificador XrSpatialSnapshotEXT válido.
  • info debe ser un puntero a una estructura XrSpatialBufferGetInfoEXT válida.
  • bufferCountOutput debe ser un puntero a un valor uint32_t
  • Si bufferCapacityInput no es 0 , buffer debe ser un puntero a un array de valores bufferCapacityInput uint16_t.

Códigos de retorno

Listo

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Falla

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT
  • XR_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

  • snapshot es un identificador para un XrSpatialSnapshotEXT .
  • info contiene la información del búfer que se consultará.
  • bufferCapacityInput es la capacidad del array o 0 para indicar una solicitud para recuperar la capacidad requerida.
  • bufferCountOutput es la cantidad de elementos en el array buffer o la capacidad requerida en caso de que bufferCapacityInput sea insuficiente.
  • buffer es un array de uint32_t . Puede ser NULL si bufferCapacityInput es 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 buffer requerido.

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_entity debe habilitarse antes de llamar a xrGetSpatialBufferUint32EXT.
  • snapshot debe ser un identificador XrSpatialSnapshotEXT válido.
  • info debe ser un puntero a una estructura XrSpatialBufferGetInfoEXT válida.
  • bufferCountOutput debe ser un puntero a un valor uint32_t
  • Si bufferCapacityInput no es 0 , buffer debe ser un puntero a un array de valores bufferCapacityInput uint32_t.

Códigos de retorno

Listo

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Falla

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT
  • XR_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

  • snapshot es un identificador para un XrSpatialSnapshotEXT .
  • info contiene la información del búfer que se consultará.
  • bufferCapacityInput es la capacidad del array o 0 para indicar una solicitud para recuperar la capacidad requerida.
  • bufferCountOutput es la cantidad de elementos en el array buffer o la capacidad requerida en caso de que bufferCapacityInput sea insuficiente.
  • buffer es un array de float . Puede ser NULL si bufferCapacityInput es 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 buffer requerido.

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_entity debe habilitarse antes de llamar a xrGetSpatialBufferFloatEXT.
  • snapshot debe ser un identificador XrSpatialSnapshotEXT válido.
  • info debe ser un puntero a una estructura XrSpatialBufferGetInfoEXT válida.
  • bufferCountOutput debe ser un puntero a un valor uint32_t
  • Si bufferCapacityInput no es 0 , buffer debe ser un puntero a un array de valores bufferCapacityInput float.

Códigos de retorno

Listo

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Falla

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT
  • XR_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

  • snapshot es un identificador para un XrSpatialSnapshotEXT .
  • info contiene la información del búfer que se consultará.
  • bufferCapacityInput es la capacidad del array o 0 para indicar una solicitud para recuperar la capacidad requerida.
  • bufferCountOutput es la cantidad de elementos en el array buffer o la capacidad requerida en caso de que bufferCapacityInput sea insuficiente.
  • buffer es un array de XrVector2f . Puede ser NULL si bufferCapacityInput es 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 buffer requerido.

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_entity debe habilitarse antes de llamar a xrGetSpatialBufferVector2fEXT.
  • snapshot debe ser un identificador XrSpatialSnapshotEXT válido.
  • info debe ser un puntero a una estructura XrSpatialBufferGetInfoEXT válida.
  • bufferCountOutput debe ser un puntero a un valor uint32_t
  • Si bufferCapacityInput no es 0 , buffer debe ser un puntero a un array de estructuras XrVector2f de bufferCapacityInput.

Códigos de retorno

Listo

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Falla

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT
  • XR_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

  • snapshot es un identificador para un XrSpatialSnapshotEXT .
  • info contiene la información del búfer que se consultará.
  • bufferCapacityInput es la capacidad del array o 0 para indicar una solicitud para recuperar la capacidad requerida.
  • bufferCountOutput es la cantidad de elementos en el array buffer o la capacidad requerida en caso de que bufferCapacityInput sea insuficiente.
  • buffer es un array de XrVector3f . Puede ser NULL si bufferCapacityInput es 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 buffer requerido.

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_entity debe habilitarse antes de llamar a xrGetSpatialBufferVector3fEXT
  • snapshot debe ser un identificador XrSpatialSnapshotEXT válido.
  • info debe ser un puntero a una estructura XrSpatialBufferGetInfoEXT válida.
  • bufferCountOutput debe ser un puntero a un valor uint32_t
  • Si bufferCapacityInput no es 0 , buffer debe ser un puntero a un array de estructuras XrVector3f de bufferCapacityInput.

Códigos de retorno

Listo

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Falla

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT
  • XR_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

  • type es el XrStructureType de esta estructura.
  • next es NULL o un puntero a la siguiente estructura en una cadena de estructuras.
  • bufferId un XrSpatialBufferIdEXT para el búfer cuyos datos se recuperarán.

Uso válido (implícito)

#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

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)

Códigos de retorno

Listo

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Falla

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT
  • XR_ERROR_TIME_INVALID
  • XR_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

  • type es el XrStructureType de esta estructura.
  • next es NULL o un puntero a la siguiente estructura en una cadena de estructuras. No se definen tales estructuras en OpenXR principal ni en esta extensión.
  • entityCount es un uint32_t que describe el recuento de elementos en el array entities.
  • entities es un array de XrSpatialEntityEXT para el que el tiempo de ejecución debe incluir los datos del componente en la instantánea.
  • componentTypeCount es un uint32_t que describe el recuento de elementos en el array componentTypes.
  • componentTypes es un array de XrSpatialComponentTypeEXT para el que el tiempo de ejecución debe incluir los datos en la instantánea.
  • baseSpace es el XrSpace en relación con el cual se ubicarán todas las ubicaciones de la actualización XrSpatialSnapshotEXT.
  • time es el XrTime en 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_entity debe habilitarse antes de usar XrSpatialUpdateSnapshotCreateInfoEXT
  • type debe ser XR_TYPE_SPATIAL_UPDATE_SNAPSHOT_CREATE_INFO_EXT
  • next debe ser NULL o un puntero válido a la siguiente estructura en una cadena de estructuras
  • entities debe ser un puntero a un array de identificadores XrSpatialEntityEXT válidos de entityCount.
  • Si componentTypeCount no es 0 , componentTypes debe ser un puntero a un array de componentTypeCount valores XrSpatialComponentTypeEXT válidos.
  • baseSpace debe ser un identificador de XrSpace válido
  • El parámetro entityCount debe ser mayor que 0.
  • Tanto baseSpace como los elementos de entities deben 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

La aplicación puede llamar a xrDestroySpatialSnapshotEXT para destruir el identificador XrSpatialSnapshotEXT y los recursos asociados a él.

Uso válido (implícito)

Seguridad de subprocesos

  • El acceso a snapshot y a cualquier identificador secundario debe sincronizarse de forma externa.

Códigos de retorno

Listo

  • XR_SUCCESS

Falla

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_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

  • center es un XrPosef que define el centro geométrico del componente 2D delimitado.
  • extents son las extensiones del componente 2D delimitado a lo largo del eje X (extents.width) y el eje Y (extents.height), centradas en center .

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)

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

  • type es el XrStructureType de esta estructura.
  • next es NULL o un puntero a la siguiente estructura en una cadena de estructuras. No se definen tales estructuras en OpenXR principal ni en esta extensión.
  • boundCount es un uint32_t que describe el recuento de elementos en el array bounds.
  • bounds es 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)

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

  • type es el XrStructureType de esta estructura.
  • next es NULL o un puntero a la siguiente estructura en una cadena de estructuras. No se definen tales estructuras en OpenXR principal ni en esta extensión.
  • boundCount es un uint32_t que describe el recuento de elementos en el array bounds.
  • bounds es 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)

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

  • type es el XrStructureType de esta estructura.
  • next es NULL o un puntero a la siguiente estructura en una cadena de estructuras. No se definen tales estructuras en OpenXR principal ni en esta extensión.
  • parentCount es un uint32_t que describe el recuento de elementos en el array parents.
  • parents es un array de XrSpatialEntityIdEXT .

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)

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

  • origin es un XrPosef que define el origen de la malla. Todos los vértices de la malla deben ser relativos a este origen.
  • vertexBuffer es 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 a origin .
  • indexBuffer es 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 en vertexBuffer . 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)

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

  • type es el XrStructureType de esta estructura.
  • next es NULL o un puntero a la siguiente estructura en una cadena de estructuras.
  • meshCount es un uint32_t que describe el recuento de elementos en el array meshes.
  • meshes es 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)

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

  • type es el XrStructureType de esta estructura.
  • next es NULL o un puntero a la siguiente estructura en una cadena de estructuras.
  • trackingState es 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)

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:

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,

  • 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 ,

  • 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ón xrGetSpatialBuffer* 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 :: enabledComponents del 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, y XrSpatialIkeaSofa , 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

  • XrSpatialBufferIdEXT
  • XrSpatialEntityIdEXT

Nuevos tipos de objetos

Comandos nuevos

Nuevas estructuras

Enums nuevos

Nuevas constantes de enumeración

  • XR_EXT_SPATIAL_ENTITY_EXTENSION_NAME
  • XR_EXT_spatial_entity_SPEC_VERSION
  • Extensión de XrObjectType :

    • XR_OBJECT_TYPE_SPATIAL_CONTEXT_EXT
    • XR_OBJECT_TYPE_SPATIAL_ENTITY_EXT
    • XR_OBJECT_TYPE_SPATIAL_SNAPSHOT_EXT
  • Extensión de XrResult :

    • XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT
    • XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT
    • XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT
    • XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT
    • XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT
    • XR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXT
  • Extensión de XrStructureType :

    • XR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXT
    • XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXT
    • XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXT
    • XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT
    • XR_TYPE_SPATIAL_BUFFER_GET_INFO_EXT
    • XR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXT
    • XR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXT
    • XR_TYPE_SPATIAL_COMPONENT_BOUNDED_3D_LIST_EXT
    • XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT
    • XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT
    • XR_TYPE_SPATIAL_COMPONENT_MESH_3D_LIST_EXT
    • XR_TYPE_SPATIAL_COMPONENT_PARENT_LIST_EXT
    • XR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXT
    • XR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT
    • XR_TYPE_SPATIAL_ENTITY_FROM_ID_CREATE_INFO_EXT
    • XR_TYPE_SPATIAL_FILTER_TRACKING_STATE_EXT
    • XR_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_EXT en la entidad y el seguimiento de objetos proporciona XR_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 tener XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT y XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT en 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