XR_EXT_spatial_entity

String de nome

XR_EXT_spatial_entity

Tipo de extensão

Extensão de instância

Número de ramal registrado

741

Revisão

1

Status da ratificação

Ratificado

Dependências de extensão e versão

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

Visão geral

Essa extensão apresenta os conceitos e fundamentos para o entendimento de cenas e o raciocínio espacial no OpenXR. Isso unifica várias áreas de funcionalidade relacionadas, mas distintas, que são enumeradas, configuradas e interagidas de maneira amplamente uniforme, conforme definido por essa extensão. Como essa extensão não tem definições concretas de nenhuma dessas áreas funcionais, o texto da especificação formal tende a ser um pouco abstrato. Os exemplos incluídos neste texto de especificação de extensão às vezes se referem a funcionalidades definidas em uma extensão relacionada futura ou hipotética para fins de ilustração, sem limitar ou especificar inerentemente essa funcionalidade adicional.

Os principais elementos dessa extensão são os seguintes:

  • Entidades espaciais : a funcionalidade é centrada em entidades , que oferecem pouca funcionalidade por conta própria.
  • Componentes espaciais : essas entidades têm componentes associados a elas que fornecem dados e comportamentos.
  • Tipos de componentes espaciais : cada componente espacial é de um tipo de componente específico , e qualquer entidade tem no máximo um único componente de um determinado tipo de componente .
  • Contexto espacial : toda interação de entidade espacial ocorre em um contexto após uma fase de inicialização e configuração.
  • Recursos espaciais : a manipulação de entidades espaciais é amplamente fornecida por recursos . Uma função é uma unidade de funcionalidade, por exemplo (sem limitação), âncoras definidas pelo aplicativo, detecção de planos ou rastreamento de imagens. Cada capacidade geralmente é definida em uma extensão separada (ativada na criação da instância como de costume) e é habilitada para um contexto específico no momento da criação.
  • Cada recurso está associado a um conjunto de tipos de componentes para os quais os componentes estão presentes em todas as entidades expostas por esse recurso . A extensão que define uma capacidade especifica quais tipos de componentes são obrigatórios para a capacidade ("garantidos"), enquanto essa mesma extensão ou outras podem especificar tipos de componentes opcionais fornecidos por algumas implementações possíveis. Qualquer número de recursos pode fornecer às entidades componentes de um determinado tipo de componente, que são uniformemente utilizáveis, não importa o recurso que o produziu.
  • Recursos de capacidade espacial : além disso, algumas capacidades exigem configuração e, portanto, são parametrizadas por recursos de capacidade .

Essa extensão oferece um mecanismo para enumerar os componentes fornecidos por cada recurso compatível com o sistema atual, tanto os obrigatórios quanto os opcionais componentes .

Como algumas implementações podem exigir diferentes graus de parametrização para recursos , essa extensão oferece um mecanismo para enumerar os recursos compatíveis associados a um determinado recurso no sistema atual.

Essa extensão também define vários componentes comuns que devem ser usados em uma ampla variedade de recursos .

Entidade espacial

Entidades espaciais são entidades que existem em algum espaço e têm vários dados associados organizados em componentes. Elas podem ser:

  • Físicos (por exemplo, superfícies planas como paredes e pisos, objetos como cadeiras e estantes etc.)
  • Virtual (por exemplo, conteúdo colocado e compartilhado por outro aplicativo ou usuário)
  • Definido pelo app (por exemplo, o aplicativo marca uma área como "sala de estar" ou "cozinha", ou marca um ponto como o local para colocar a TV etc.)

Elementos expostos pelo sistema de ações, como controladores ou rastreamento do olhar, não devem ser modelados como entidades espaciais.

As entidades espaciais no OpenXR são modeladas como um sistema de entidade-componente . Cada entidade espacial tem um conjunto de componentes, e cada componente fornece um conjunto exclusivo de dados e comportamentos para essa entidade.

As entidades espaciais são representadas por um átomo XrSpatialEntityIdEXT ou um identificador XrSpatialEntityEXT. Os detalhes estão na seção Representações de entidades espaciais.

Tipos de componentes espaciais

Uma entidade espacial tem um ou mais componentes que fornecem dados ou comportamentos para ela. Consulte Componentes comuns para ver alguns componentes comuns definidos por essa extensão.

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;

A enumeração XrSpatialComponentTypeEXT identifica os diferentes tipos de componentes que o tempo de execução pode oferecer suporte.

Nem todos os tipos de componentes listados são fornecidos por essa extensão por conta própria. Alguns exigem que outras extensões sejam ativadas no momento da criação da instância, conforme documentado.

Os enumeradores têm os seguintes valores:

Descrição da enumeração

XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT

Componente que fornece os limites 2D para uma entidade espacial. A estrutura de lista correspondente é XrSpatialComponentBounded2DListEXT, e a estrutura de dados correspondente é XrSpatialBounded2DDataEXT.

XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT

Componente que fornece os limites 3D de uma entidade espacial. A estrutura de lista correspondente é XrSpatialComponentBounded3DListEXT. A estrutura de dados correspondente é XrBoxf.

XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT

Componente que fornece o XrSpatialEntityIdEXT do pai para uma entidade espacial. A estrutura de lista correspondente é XrSpatialComponentParentListEXT. A estrutura de dados correspondente é XrSpatialEntityIdEXT.

XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT

Componente que fornece uma malha 3D para uma entidade espacial. A estrutura de lista correspondente é XrSpatialComponentMesh3DListEXT. A estrutura de dados correspondente é XrSpatialMeshDataEXT.

XR_SPATIAL_COMPONENT_TYPE_PLANE_ALIGNMENT_EXT

Componente que fornece a enumeração de alinhamento de plano para uma entidade espacial. A estrutura de lista correspondente é XrSpatialComponentPlaneAlignmentListEXT. A estrutura de dados correspondente é XrSpatialPlaneAlignmentEXT (adicionada pela extensão XR_EXT_spatial_plane_tracking).

XR_SPATIAL_COMPONENT_TYPE_MESH_2D_EXT

Componente que fornece uma malha 2D para uma entidade espacial. A estrutura de lista correspondente é XrSpatialComponentMesh2DListEXT. A estrutura de dados correspondente é XrSpatialMeshDataEXT (adicionada pela extensão XR_EXT_spatial_plane_tracking).

XR_SPATIAL_COMPONENT_TYPE_POLYGON_2D_EXT

Componente que fornece um polígono de limite 2D para uma entidade espacial. A estrutura de lista correspondente é XrSpatialComponentPolygon2DListEXT. A estrutura de dados correspondente é XrSpatialPolygon2DDataEXT (adicionada pela extensão XR_EXT_spatial_plane_tracking).

XR_SPATIAL_COMPONENT_TYPE_PLANE_SEMANTIC_LABEL_EXT

Componente que fornece um rótulo semântico para um plano. A estrutura de lista correspondente é XrSpatialComponentPlaneSemanticLabelListEXT. A estrutura de dados correspondente é XrSpatialPlaneSemanticLabelEXT (adicionada pela extensão XR_EXT_spatial_plane_tracking).

XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT

Um componente que descreve o tipo, o ID e a localização do marcador. A estrutura de lista correspondente é XrSpatialComponentMarkerListEXT. A estrutura de dados correspondente é XrSpatialMarkerDataEXT (adicionada pela extensão XR_EXT_spatial_marker_tracking).

XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT

Componente que fornece um rótulo semântico para uma cena. A estrutura de lista correspondente é XrSpatialComponentObjectSemanticLabelListEXT. A estrutura de dados correspondente é XrSpatialObjectSemanticLabelEXT . (Adicionado pela extensão XR_EXT_spatial_object_tracking)

XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT

Componente que fornece um rótulo semântico para um teclado. A estrutura de lista correspondente é XrSpatialComponentKeyboardSemanticLabelListEXT. A estrutura de dados correspondente é XrSpatialKeyboardSemanticLabelEXT (adicionada pela extensão XR_EXT_spatial_object_tracking)

XR_SPATIAL_COMPONENT_TYPE_MOUSE_SEMANTIC_LABEL_EXT

Componente que fornece um rótulo semântico para um mouse. A estrutura de lista correspondente é XrSpatialComponentMouseSemanticLabelListEXT. A estrutura de dados correspondente é XrSpatialMouseSemanticLabelEXT (adicionada pela extensão XR_EXT_spatial_object_tracking).

XR_SPATIAL_COMPONENT_TYPE_ANCHOR_EXT

Componente que fornece a localização de uma âncora. A estrutura de lista correspondente é XrSpatialComponentAnchorListEXT. A estrutura de dados correspondente é XrPosef (adicionada pela extensão XR_EXT_spatial_anchor).

XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_EXT

Componente que fornece o UUID persistente para uma entidade espacial. A estrutura de lista correspondente é XrSpatialComponentPersistenceListEXT. A estrutura de dados correspondente é XrSpatialPersistenceDataEXT (adicionada pela extensão XR_EXT_spatial_persistence).

XR_SPATIAL_COMPONENT_TYPE_IMAGE_2D_EXT

Um componente que descreve o tipo de imagem plana. A estrutura de lista correspondente é XrSpatialComponentImage2DListEXT. A estrutura de dados correspondente é XrSpatialImageSizeEXT. (Adicionado pela extensão XR_EXT_spatial_image_tracking)

XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT

Componente que fornece as normais para a malha 3D de uma entidade espacial. A estrutura de lista correspondente é XrSpatialComponentMesh3DNormalsListEXT. A estrutura de dados correspondente é XrSpatialBufferEXT (adicionada pela extensão XR_EXT_spatial_mesh_tracking).

XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT

Componente que fornece os rótulos semânticos por vértice para a malha 3D de uma entidade espacial. A estrutura de lista correspondente é XrSpatialComponentMesh3DVertexSemanticLabelsListEXT. A estrutura de dados correspondente é XrSpatialBufferEXT. Os dados no buffer são mapeados para XrSpatialMeshSemanticLabelEXT (adicionado pela extensão XR_EXT_spatial_mesh_tracking).

XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT

Componente que fornece os rótulos semânticos por face de triângulo para a malha 3D de uma entidade espacial. A estrutura de lista correspondente é XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT. A estrutura de dados correspondente é XrSpatialBufferEXT. Os dados no buffer são mapeados para XrSpatialMeshSemanticLabelEXT (adicionado pela extensão XR_EXT_spatial_mesh_tracking).

XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_ANDROID

Componente que fornece um rótulo semântico para um objeto. A estrutura de lista correspondente é XrSpatialComponentObjectSemanticLabelListANDROID. A estrutura de dados correspondente é XrSpatialObjectSemanticLabelANDROID (adicionada pela extensão XR_ANDROID_spatial_object_tracking).

XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID

Componente que fornece a postura de um acerto de raycast em uma entidade. A estrutura de lista correspondente é XrSpatialComponentRaycastResultListANDROID. A estrutura de dados correspondente é XrSpatialRaycastResultDataANDROID (adicionada pela extensão XR_ANDROID_spatial_discovery_raycast).

XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID

Componente que fornece o ID da entidade que subsume a entidade anexada. A estrutura de lista correspondente é XrSpatialComponentSubsumedByListANDROID. A estrutura de dados correspondente é XrSpatialEntityIdEXT (adicionada pela extensão XR_ANDROID_spatial_component_subsumed_by).

XR_SPATIAL_COMPONENT_TYPE_ROOM_ANDROIDSYS

Componente que fornece as dimensões e o tipo de quarto de uma caixa de sapatos. A estrutura de lista correspondente é XrSpatialComponentRoomListANDROIDSYS. A estrutura de dados correspondente é XrSpatialRoomDataANDROIDSYS (adicionada pela extensão XR_ANDROIDSYS_spatial_room_tracking).

XR_SPATIAL_COMPONENT_TYPE_MATERIAL_TYPE_ANDROIDSYS

Componente que fornece o tipo de material de uma superfície de limite. A estrutura de lista correspondente é XrSpatialComponentMaterialTypeListANDROIDSYS. A estrutura de dados correspondente é XrSpatialMaterialTypeANDROIDSYS (adicionada pela extensão XR_ANDROIDSYS_spatial_room_tracking).

XR_SPATIAL_COMPONENT_TYPE_CONFIDENCE_ANDROIDSYS

Componente que fornece a confiança de um rastreável. A estrutura de lista correspondente é XrSpatialComponentConfidenceListANDROIDSYS. A estrutura de dados correspondente é float (adicionada pela extensão XR_ANDROIDSYS_spatial_room_tracking).

XR_SPATIAL_COMPONENT_TYPE_ROOM_EMPTINESS_ANDROIDSYS

Componente que fornece o vazio de um ambiente. A estrutura de lista correspondente é XrSpatialComponentRoomEmptinessListANDROIDSYS. A estrutura de dados correspondente é float (adicionada pela extensão XR_ANDROIDSYS_spatial_room_tracking).

XR_SPATIAL_COMPONENT_TYPE_OCCUPANCY_GRID_ANDROIDX1

Componente que fornece informações da grade de ocupação na entidade anexada. A estrutura de lista correspondente é XrSpatialComponentOccupancyGridListANDROIDX1. A estrutura de dados correspondente é XrSpatialOccupancyGridDataANDROIDX1 (adicionada pela extensão XR_ANDROIDX1_spatial_occupancy_grid).

XR_SPATIAL_COMPONENT_TYPE_ANNOTATION_QUAD_ANDROID

Um componente que descreve uma anotação de quadrilátero. A estrutura de lista correspondente é XrSpatialComponentAnnotationQuadListANDROID. A estrutura de dados correspondente é XrSpatialAnnotationQuadDataANDROID (adicionada pela extensão XR_ANDROID_spatial_annotation_tracking).

XR_SPATIAL_COMPONENT_TYPE_STREETSCAPE_GEOMETRY_METADATA_ANDROIDX2

Componente que fornece os metadados de uma geometria de rua. A estrutura de lista correspondente é XrSpatialComponentStreetscapeGeometryMetadataListANDROIDX2. A estrutura de dados correspondente é XrSpatialStreetscapeGeometryMetadataANDROIDX2 (adicionada pela extensão XR_ANDROIDX2_geospatial_streetscape).

Recursos espaciais e configuração

Os recursos espaciais definem as habilidades de um ambiente de execução para descobrir entidades que têm um conjunto garantido de componentes. Os aplicativos ativam os componentes de um recurso espacial ao criar o XrSpatialContextEXT, e o tempo de execução, por sua vez, precisa fornecer apenas os componentes ativados em entidades descobertas. Por exemplo, se um tempo de execução informar que um dos componentes de um determinado recurso é "rótulos semânticos", isso significa que o aplicativo pode ativar rótulos semânticos pela configuração desse recurso, e o tempo de execução precisa fornecer apenas o componente de rótulo semântico se ele estiver 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;

A enumeração XrSpatialCapabilityEXT identifica os diferentes tipos de recursos que o tempo de execução pode oferecer suporte.

Os enumeradores têm os seguintes valores:

Descrição da enumeração

XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT

Rastreamento de plano (adicionado pela extensão XR_EXT_spatial_plane_tracking)

XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT

Capacidade de detectar e rastrear QR codes. (Adicionado pela extensão XR_EXT_spatial_marker_tracking)

XR_SPATIAL_CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE_EXT

Capacidade de detectar e rastrear micro QR codes. (Adicionado pela extensão XR_EXT_spatial_marker_tracking)

XR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_EXT

Capacidade de detectar e rastrear marcadores Aruco. (Adicionado pela extensão XR_EXT_spatial_marker_tracking)

XR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXT

Capacidade de detectar e rastrear AprilTags. (Adicionado pela extensão XR_EXT_spatial_marker_tracking)

XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT

Rastreamento de objetos (adicionado pela extensão XR_EXT_spatial_object_tracking)

XR_SPATIAL_CAPABILITY_ANCHOR_EXT

Capacidade de criar âncoras espaciais (adicionada pela extensão XR_EXT_spatial_anchor)

XR_SPATIAL_CAPABILITY_IMAGE_TRACKING_EXT

Capacidade de detectar e rastrear imagens de referência planares. (Adicionado pela extensão XR_EXT_spatial_image_tracking)

XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT

Capacidade de rastrear a malha de um ambiente. (Adicionado pela extensão XR_EXT_spatial_mesh_tracking)

XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_ANDROID

Rastreamento de objetos (adicionado pela extensão XR_ANDROID_spatial_object_tracking)

XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID

Raycast no buffer de profundidade (adicionado pela extensão XR_ANDROID_spatial_discovery_raycast)

XR_SPATIAL_CAPABILITY_ROOM_TRACKING_ANDROIDSYS

Capacidade de rastrear uma sala (adicionada pela extensão XR_ANDROIDSYS_spatial_room_tracking)

XR_SPATIAL_CAPABILITY_ROOM_BOUNDARY_TRACKING_ANDROIDSYS

Capacidade de rastrear um limite de sala (adicionada pela extensão XR_ANDROIDSYS_spatial_room_tracking)

XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID

Acompanhamento de anotações (adicionado pela extensão XR_ANDROID_spatial_annotation_tracking)

XR_SPATIAL_CAPABILITY_STREETSCAPE_GEOMETRY_ANDROIDX2

Geometria da paisagem urbana (adicionada pela extensão XR_ANDROIDX2_geospatial_streetscape)

A função xrEnumerateSpatialCapabilitiesEXT é definida como:

XrResult xrEnumerateSpatialCapabilitiesEXT(
    XrInstance                                  instance,
    XrSystemId                                  systemId,
    uint32_t                                    capabilityCapacityInput,
    uint32_t*                                   capabilityCountOutput,
    XrSpatialCapabilityEXT*                     capabilities);

Descrições dos parâmetros

  • instance é um identificador de uma XrInstance .
  • systemId é o XrSystemId cujos recursos espaciais serão enumerados.
  • capabilityCapacityInput é a capacidade da matriz capabilities ou 0 para indicar uma solicitação de recuperação da capacidade necessária.
  • capabilityCountOutput é o número de recursos ou a capacidade necessária caso capabilityCapacityInput seja insuficiente.
  • capabilities é uma matriz de XrSpatialCapabilityEXT . Ele pode ser NULL se capabilityCapacityInput for 0.
  • Consulte a seção Parâmetros de tamanho do buffer para uma descrição detalhada de como recuperar o tamanho capabilities necessário.

O aplicativo pode enumerar a lista de recursos espaciais compatíveis com um determinado XrSystemId usando xrEnumerateSpatialCapabilitiesEXT .

O tempo de execução não pode enumerar os recursos espaciais cuja extensão não está ativada para instance .

Uso válido (implícito)

  • A extensão XR_EXT_spatial_entity precisa ser ativada antes de chamar xrEnumerateSpatialCapabilitiesEXT.
  • instance precisa ser um identificador XrInstance válido
  • capabilityCountOutput precisa ser um ponteiro para um valor uint32_t.
  • Se capabilityCapacityInput não for 0 , capabilities precisa ser um ponteiro para uma matriz de valores capabilityCapacityInput XrSpatialCapabilityEXT.

Códigos de retorno

Sucesso

  • XR_SUCCESS

Falha

  • 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

A função xrEnumerateSpatialCapabilityComponentTypesEXT é definida como:

XrResult xrEnumerateSpatialCapabilityComponentTypesEXT(
    XrInstance                                  instance,
    XrSystemId                                  systemId,
    XrSpatialCapabilityEXT                      capability,
    XrSpatialCapabilityComponentTypesEXT*       capabilityComponents);

Descrições dos parâmetros

  • instance é um identificador de uma XrInstance .
  • systemId é o XrSystemId cujos componentes de capacidade espacial serão enumerados.
  • capability é o XrSpatialCapabilityEXT para o qual os componentes serão enumerados.
  • capabilityComponents é um ponteiro para um XrSpatialCapabilityComponentTypesEXT , que é uma estrutura de entrada/saída em que uma matriz alocada pelo aplicativo é preenchida.

Essa função enumera os tipos de componentes que a capacidade especificada fornece nas entidades do sistema conforme configurado.

O aplicativo pode usar os tipos de componentes enumerados em XrSpatialCapabilityComponentTypesEXT :: componentTypes para entender o conjunto completo de componentes que o systemId oferece suporte para capability e pode usar essa lista para determinar o que é uma configuração válida para capability ao criar um XrSpatialContextEXT para ele.

O tempo de execução precisa retornar XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT se capability não for enumerado por xrEnumerateSpatialCapabilitiesEXT .

O tempo de execução não pode enumerar os tipos de componentes espaciais cuja extensão não está ativada para instance .

Uso válido (implícito)

Códigos de retorno

Sucesso

  • XR_SUCCESS

Falha

  • 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

A estrutura XrSpatialCapabilityComponentTypesEXT é definida como:

typedef struct XrSpatialCapabilityComponentTypesEXT {
    XrStructureType               type;
    void*                         next;
    uint32_t                      componentTypeCapacityInput;
    uint32_t                      componentTypeCountOutput;
    XrSpatialComponentTypeEXT*    componentTypes;
} XrSpatialCapabilityComponentTypesEXT;

Descrições de membros

  • type é o XrStructureType dessa estrutura.
  • next é NULL ou um ponteiro para a próxima estrutura em uma cadeia de estruturas. Nenhuma dessas estruturas está definida no OpenXR principal ou nesta extensão.
  • componentTypeCapacityInput é a capacidade da matriz ou 0 para indicar uma solicitação de recuperação da capacidade necessária.
  • componentTypeCountOutput é o número de tipos de componentes ou a capacidade necessária caso componentTypeCapacityInput seja insuficiente.
  • componentTypes é uma matriz de XrSpatialComponentTypeEXT . Ele pode ser NULL se componentTypeCapacityInput for 0.
  • Consulte a seção Parâmetros de tamanho do buffer para uma descrição detalhada de como recuperar o tamanho componentTypes necessário.

Uso válido (implícito)

Recursos de capacidade 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;

Alguns recursos têm parâmetros expostos ao aplicativo para configurar como os dados do componente são calculados pelo ambiente de execução. Essas dimensões de parametrização/configurabilidade são conhecidas como recursos de capacidade. Por exemplo, para um recurso de rastreamento de imagens, um de tempo de execuçãopode oferecer suporte a um recurso para o aplicativo especificar se as imagens rastreadas estão paradas ou não.

Fornecer essas informações ao tempo de execução usando uma estrutura de configuração não pode mudar o conjunto de tipos de componentes presentes nas entidades associadas, por exemplo, na imagem rastreada. No entanto, o tempo de execução pode otimizar, por exemplo, as capacidades de rastreamento do recurso de rastreamento de imagens e oferecer uma experiência melhor ao aplicativo.

Esses recursos são representados por XrSpatialCapabilityFeatureEXT, e o aplicativo os enumera usando xrEnumerateSpatialCapabilityFeaturesEXT .

Cada recurso de capacidade tem uma estrutura de configuração correspondente para ser ativado. Essas estruturas de configuração precisam ser encadeadas a XrSpatialCapabilityConfigurationBaseHeaderEXT :: next da capacidade correspondente.

Os enumeradores têm os seguintes valores:

Descrição da enumeração

XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_FIXED_SIZE_MARKERS_EXT

Recurso de capacidade para permitir que os aplicativos especifiquem o tamanho dos marcadores. A estrutura de configuração correspondente é XrSpatialMarkerSizeEXT (adicionada pela extensão XR_EXT_spatial_marker_tracking).

XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_STATIC_MARKERS_EXT

Recurso de capacidade para permitir que os aplicativos especifiquem se os marcadores são estáticos. A estrutura de configuração correspondente é XrSpatialMarkerStaticOptimizationEXT (adicionada pela extensão XR_EXT_spatial_marker_tracking).

XR_SPATIAL_CAPABILITY_FEATURE_OBJECT_SEMANTIC_LABEL_SUBSET_EXT

Recurso espacial que permite que os aplicativos especifiquem um subconjunto de rótulos de XrSpatialObjectSemanticLabelEXT para o tempo de execução rastrear. A estrutura de configuração correspondente é XrSpatialFeatureObjectSemanticLabelSubsetEXT . (Adicionado pela extensão XR_EXT_spatial_object_tracking)

XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID

O tempo de execução oferece suporte ao filtro XrSpatialBoundsSpherefANDROID para XrSpatialDiscoverySnapshotCreateInfoEXT. Isso não exige que nenhuma estrutura de configuração seja incluída durante a criação do contexto espacial. (Adicionado pela extensão XR_ANDROID_spatial_discovery_bounds)

XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID

O tempo de execução é compatível com o filtro XrSpatialBoundsBoxfANDROID para XrSpatialDiscoverySnapshotCreateInfoEXT. Isso não exige que nenhuma estrutura de configuração seja incluída durante a criação do contexto espacial. (Adicionado pela extensão XR_ANDROID_spatial_discovery_bounds)

XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID

O tempo de execução oferece suporte ao filtro XrSpatialBoundsFrustumfANDROID para XrSpatialDiscoverySnapshotCreateInfoEXT. Isso não exige que nenhuma estrutura de configuração seja incluída durante a criação do contexto espacial. (Adicionado pela extensão XR_ANDROID_spatial_discovery_bounds)

XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_AUTOMATIC_SIZE_IMAGES_EXT

O tempo de execução oferece suporte à dedução automática do tamanho físico das imagens detectadas e rastreadas. A estrutura de configuração correspondente é XrSpatialImageSizeEXT (adicionada pela extensão XR_EXT_spatial_image_tracking).

XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_STATIC_IMAGES_EXT

O ambiente de execução é compatível com XrSpatialImageStaticOptimizationEXT . A estrutura de configuração correspondente é XrSpatialImageStaticOptimizationEXT . (Adicionado pela extensão XR_EXT_spatial_image_tracking)

XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_FIXED_SIZE_IMAGES_EXT

O ambiente de execução é compatível com XrSpatialImageSizeEXT . A estrutura de configuração correspondente é XrSpatialImageSizeEXT (adicionada pela extensão XR_EXT_spatial_image_tracking).

XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT

Recurso de capacidade para rastrear uma malha estanque do ambiente. A estrutura de configuração correspondente é XrSpatialFeatureTrackWatertightMeshEXT . (Adicionado pela extensão XR_EXT_spatial_mesh_tracking)

A função xrEnumerateSpatialCapabilityFeaturesEXT é definida como:

XrResult xrEnumerateSpatialCapabilityFeaturesEXT(
    XrInstance                                  instance,
    XrSystemId                                  systemId,
    XrSpatialCapabilityEXT                      capability,
    uint32_t                                    capabilityFeatureCapacityInput,
    uint32_t*                                   capabilityFeatureCountOutput,
    XrSpatialCapabilityFeatureEXT*              capabilityFeatures);

Descrições dos parâmetros

  • instance é um identificador de uma XrInstance .
  • systemId é o XrSystemId cujos recursos de capacidade espacial serão enumerados.
  • capability é o XrSpatialCapabilityEXT para o qual os recursos serão enumerados.
  • capabilityFeatureCapacityInput é a capacidade da matriz ou 0 para indicar uma solicitação de recuperação da capacidade necessária.
  • capabilityFeatureCountOutput é o número de recursos ou a capacidade necessária caso capabilityFeatureCapacityInput seja insuficiente.
  • capabilityFeatures é uma matriz de XrSpatialCapabilityFeatureEXT . Ele pode ser NULL se capabilityFeatureCapacityInput for 0.
  • Consulte a seção Parâmetros de tamanho do buffer para uma descrição detalhada de como recuperar o tamanho capabilityFeatures necessário.

O aplicativo descobre os recursos compatíveis com um determinado sistema para um XrSpatialCapabilityEXT usando xrEnumerateSpatialCapabilityFeaturesEXT .

Para recursos expostos, o aplicativo seleciona o recurso ou os recursos a serem ativados e fornece a estrutura de configuração correspondente na próxima cadeia de estruturas de configuração de recursos em XrSpatialContextCreateInfoEXT :: capabilityConfigs .

Se capability não for um recurso enumerado por xrEnumerateSpatialCapabilitiesEXT , o tempo de execução deverá retornar XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT .

O tempo de execução não pode enumerar os recursos de capacidade espacial cuja extensão não está ativada para instance .

Uso válido (implícito)

Códigos de retorno

Sucesso

  • XR_SUCCESS

Falha

  • 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

Criar um contexto espacial

XR_DEFINE_HANDLE(XrSpatialContextEXT)

O manipulador XrSpatialContextEXT representa os recursos para descobrir e atualizar algumas entidades espaciais no ambiente do usuário. O aplicativo pode usar esse identificador para descobrir e atualizar entidades espaciais usando outras funções nesta extensão.

A função xrCreateSpatialContextAsyncEXT é definida como:

XrResult xrCreateSpatialContextAsyncEXT(
    XrSession                                   session,
    const XrSpatialContextCreateInfoEXT*        createInfo,
    XrFutureEXT*                                future);

Descrições dos parâmetros

  • session é uma XrSession em que o contexto espacial estará ativo.
  • createInfo é o XrSpatialContextCreateInfoEXT usado para especificar os parâmetros de contexto espacial.
  • future é um ponteiro para um XrFutureEXT .

O aplicativo pode criar um identificador XrSpatialContextEXT fazendo o seguinte:

O tempo de execução deve retornar XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT se XrSpatialContextCreateInfoEXT ::capabilityConfigCount for 0. Um identificador de contexto espacial precisa de pelo menos uma capacidade.

O tempo de execução precisa retornar XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT se qualquer recurso na matriz XrSpatialContextCreateInfoEXT :: capabilityConfigs não for enumerado por xrEnumerateSpatialCapabilitiesEXT .

O tempo de execução precisa retornar XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT se qualquer XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponentCount em XrSpatialContextCreateInfoEXT :: capabilityConfigs for 0. Uma configuração de capacidade fica incompleta sem uma lista de tipos de componentes para ativar.

O tempo de execução precisa retornar XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT se algum tipo de componente listado em XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents não for enumerado para XrSpatialCapabilityConfigurationBaseHeaderEXT :: capability em xrEnumerateSpatialCapabilityComponentTypesEXT .

Se alguma das estruturas na próxima cadeia de XrSpatialContextCreateInfoEXT :: capabilityConfigs corresponder a um XrSpatialCapabilityFeatureEXT que não foi enumerado para esse recurso em xrEnumerateSpatialCapabilityFeaturesEXT , o tempo de execução precisa ignorar essa estrutura XrSpatialCapabilityFeatureEXT.

O ambiente de execução precisa retornar XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT se XrSpatialContextCreateInfoEXT :: capabilityConfigs contiver várias estruturas com o mesmo XrSpatialCapabilityConfigurationBaseHeaderEXT :: capability .

Para garantir o uso ideal dos recursos do sistema, o ambiente de execução pode usar as configurações fornecidas na matriz XrSpatialContextCreateInfoEXT para se preparar para as solicitações espaciais que vão chegar. Por exemplo, um ambiente de execução que oferece suporte ao rastreamento de planos pode iniciar o pipeline de rastreamento de planos somente se um identificador de contexto espacial que contenha o recurso de rastreamento de planos for criado pelo aplicativo. Se os recursos configurados tiverem um longo tempo de aquecimento, as chamadas para xrCreateSpatialDiscoverySnapshotAsyncEXT poderão resultar em um snapshot vazio. O aplicativo pode aguardar XrEventDataSpatialDiscoveryRecommendedEXT antes de usar xrCreateSpatialDiscoverySnapshotAsyncEXT para garantir que os serviços de rastreamento subjacentes estejam prontos.

Se um tempo de execução impõe um sistema de permissões para controlar o acesso do aplicativo aos recursos espaciais que estão sendo configurados para o XrSpatialContextEXT , o tempo de execução precisa retornar XR_ERROR_PERMISSION_INSUFFICIENT se essas permissões não tiverem sido concedidas ao aplicativo.

Essa função inicia uma operação assíncrona e cria um XrFutureEXT correspondente , que pode ser usado com xrPollFutureEXT e funções relacionadas. O valor de retorno dessa função indica apenas se os parâmetros eram aceitáveis para programar a operação assíncrona. A função de conclusão correspondente é xrCreateSpatialContextCompleteEXT , que pode ser usada quando um futuro dessa função está no estado READY, com saídas preenchidas por essa função na estrutura de conclusão XrCreateSpatialContextCompletionEXT .

Uso válido (implícito)

Códigos de retorno

Sucesso

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Falha

  • 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

A estrutura XrSpatialContextCreateInfoEXT é definida como:

typedef struct XrSpatialContextCreateInfoEXT {
    XrStructureType                                                type;
    const void*                                                    next;
    uint32_t                                                       capabilityConfigCount;
    const XrSpatialCapabilityConfigurationBaseHeaderEXT* const*    capabilityConfigs;
} XrSpatialContextCreateInfoEXT;

Descrições de membros

  • type é o XrStructureType dessa estrutura.
  • next é NULL ou um ponteiro para a próxima estrutura em uma cadeia de estruturas. Nenhuma dessas estruturas está definida no OpenXR principal ou nesta extensão.
  • capabilityConfigCount é um uint32_t que descreve a contagem de elementos na matriz capabilityConfigs.
  • capabilityConfigs é um ponteiro para uma matriz de ponteiros XrSpatialCapabilityConfigurationBaseHeaderEXT.

A estrutura XrSpatialContextCreateInfoEXT descreve as informações para criar um identificador XrSpatialContextEXT.

Uso válido (implícito)

A estrutura XrSpatialCapabilityConfigurationBaseHeaderEXT é definida da seguinte forma:

typedef struct XrSpatialCapabilityConfigurationBaseHeaderEXT {
    XrStructureType                     type;
    const void*                         next;
    XrSpatialCapabilityEXT              capability;
    uint32_t                            enabledComponentCount;
    const XrSpatialComponentTypeEXT*    enabledComponents;
} XrSpatialCapabilityConfigurationBaseHeaderEXT;

Essa estrutura não é usada diretamente na API, mas as estruturas secundárias podem ser usadas com XrSpatialContextCreateInfoEXT para configurar recursos espaciais.

Descrições de membros

  • type é o XrStructureType dessa estrutura.
  • next é NULL ou um ponteiro para a próxima estrutura em uma cadeia de estruturas.
  • capability é um XrSpatialCapabilityEXT .
  • enabledComponentCount é um uint32_t que descreve a contagem de elementos na matriz enabledComponents.
  • enabledComponents é um ponteiro para uma matriz de XrSpatialComponentTypeEXT .

O tempo de execução precisa retornar XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT se capability não for enumerado por xrEnumerateSpatialCapabilitiesEXT . O tempo de execução precisa retornar XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT se algum tipo de componente listado em enabledComponents não for enumerado para capability em xrEnumerateSpatialCapabilityComponentTypesEXT .

Uso válido (implícito)

A função xrCreateSpatialContextCompleteEXT é definida como:

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

Descrições dos parâmetros

xrCreateSpatialContextCompleteEXT conclui a operação assíncrona iniciada por xrCreateSpatialContextAsyncEXT . O tempo de execução precisa retornar XR_ERROR_FUTURE_PENDING_EXT se future não estiver no estado pronto. O tempo de execução precisa retornar XR_ERROR_FUTURE_INVALID_EXT se future já tiver sido concluído ou cancelado.

Uso válido (implícito)

Códigos de retorno

Sucesso

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Falha

  • 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

A estrutura XrCreateSpatialContextCompletionEXT é definida como:

typedef struct XrCreateSpatialContextCompletionEXT {
    XrStructureType        type;
    void*                  next;
    XrResult               futureResult;
    XrSpatialContextEXT    spatialContext;
} XrCreateSpatialContextCompletionEXT;

Descrições de membros

Códigos de retorno futuros

Valores de futureResult:

Sucesso

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Falha

  • 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

Se futureResult for um código de sucesso, spatialContext precisa ser válido. Se spatialContext for válido, ele vai permanecer assim apenas no ciclo de vida de xrCreateSpatialContextAsyncEXT :: session ou até que o aplicativo destrua o spatialContext com xrDestroySpatialContextEXT , o que ocorrer primeiro.

Uso válido (implícito)

Destruir o contexto espacial

A função xrDestroySpatialContextEXT é definida como:

XrResult xrDestroySpatialContextEXT(
    XrSpatialContextEXT                         spatialContext);

Descrições dos parâmetros

O aplicativo pode chamar a função xrDestroySpatialContextEXT para liberar o identificador spatialContext e os recursos subjacentes quando terminar as tarefas de descoberta e atualização de entidades espaciais. Se não houver outro XrSpatialContextEXT válido criado com os mesmos recursos espaciais de spatialContext , essa chamada servirá como uma sugestão para o tempo de execução desativar os serviços de rastreamento necessários para que esses recursos economizem recursos do sistema.

Uso válido (implícito)

Concorrência segura

  • O acesso a spatialContext e a qualquer identificador filho precisa ser sincronizado externamente.

Códigos de retorno

Sucesso

  • XR_SUCCESS

Falha

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_RUNTIME_FAILURE

Representações de entidades espaciais

ID da entidade espacial

XR_DEFINE_ATOM(XrSpatialEntityIdEXT)

XrSpatialEntityIdEXT é usado para representar qualquer tipo de entidade descoberta pelo tempo de execução no ambiente espacial do usuário. Um XrSpatialEntityIdEXT é válido para o XrSpatialContextEXT em que é descoberto, e o tempo de execução não pode reutilizar o mesmo XrSpatialEntityIdEXT para diferentes entidades no mesmo XrSpatialContextEXT . Além disso, o tempo de execução não pode reutilizar o mesmo XrSpatialEntityIdEXT em vários XrSpatialContextEXT na mesma XrSession, representando a mesma entidade ou entidades diferentes.

#define XR_NULL_SPATIAL_ENTITY_ID_EXT 0

XR_NULL_SPATIAL_ENTITY_ID_EXT é um valor reservado que representa um XrSpatialEntityIdEXT inválido . Ele pode ser transmitido e retornado de funções de API somente quando permitido especificamente.

Identificador de entidade espacial

XR_DEFINE_HANDLE(XrSpatialEntityEXT)

O identificador XrSpatialEntityEXT representa uma entidade espacial. Um aplicativo pode criar um identificador para expressar o interesse em uma entidade específica no tempo de execução.

Criar um identificador de entidade espacial com base no ID

A função xrCreateSpatialEntityFromIdEXT é definida como:

XrResult xrCreateSpatialEntityFromIdEXT(
    XrSpatialContextEXT                         spatialContext,
    const XrSpatialEntityFromIdCreateInfoEXT*   createInfo,
    XrSpatialEntityEXT*                         spatialEntity);

Descrições dos parâmetros

O aplicativo pode usar xrCreateSpatialEntityFromIdEXT para criar um identificador XrSpatialEntityEXT, que é uma referência a uma entidade que existe no ambiente do usuário.

O tempo de execução precisa retornar XR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXT se XrSpatialEntityFromIdCreateInfoEXT :: entityId não for um ID válido para spatialContext .

Uso válido (implícito)

Códigos de retorno

Sucesso

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Falha

  • 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

A estrutura XrSpatialEntityFromIdCreateInfoEXT é definida como:

typedef struct XrSpatialEntityFromIdCreateInfoEXT {
    XrStructureType         type;
    const void*             next;
    XrSpatialEntityIdEXT    entityId;
} XrSpatialEntityFromIdCreateInfoEXT;

Descrições de membros

  • type é o XrStructureType dessa estrutura.
  • next é NULL ou um ponteiro para a próxima estrutura em uma cadeia de estruturas. Nenhuma dessas estruturas está definida no OpenXR principal ou nesta extensão.
  • entityId é o XrSpatialEntityIdEXT da entidade para que o aplicativo quer criar um identificador.

Uso válido (implícito)

Destruir o identificador de entidade espacial

A função xrDestroySpatialEntityEXT é definida como:

XrResult xrDestroySpatialEntityEXT(
    XrSpatialEntityEXT                          spatialEntity);

Descrições dos parâmetros

O aplicativo pode usar xrDestroySpatialEntityEXT para liberar o identificador spatialEntity quando não tiver mais interesse na entidade referenciada por ele.

Uso válido (implícito)

Concorrência segura

  • O acesso a spatialEntity e a qualquer identificador filho precisa ser sincronizado externamente.

Códigos de retorno

Sucesso

  • XR_SUCCESS

Falha

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_RUNTIME_FAILURE

Snapshot espacial

XR_DEFINE_HANDLE(XrSpatialSnapshotEXT)

O aplicativo pode criar snapshots espaciais para descobrir entidades espaciais ou atualizar informações sobre entidades espaciais conhecidas. O identificador XrSpatialSnapshotEXT representa os dados imutáveis das entidades espaciais descobertas ou atualizadas e um subconjunto dos componentes delas, conforme selecionado pelo aplicativo. O snapshot espacial representa uma visão coerente das entidades e dos dados de componentes delas. Depois que um snapshot é criado, os dados dele precisam permanecer constantes enquanto ele for válido.

O aplicativo pode criar quantos snapshots quiser, mas precisa ter cuidado com a memória alocada para cada novo snapshot e precisa destruir os snapshots quando não precisar mais deles.

Criar snapshot de descoberta

A função xrCreateSpatialDiscoverySnapshotAsyncEXT é definida como:

XrResult xrCreateSpatialDiscoverySnapshotAsyncEXT(
    XrSpatialContextEXT                         spatialContext,
    const XrSpatialDiscoverySnapshotCreateInfoEXT* createInfo,
    XrFutureEXT*                                future);

Descrições dos parâmetros

O aplicativo pode descobrir entidades espaciais criando um snapshot de descoberta usando xrCreateSpatialDiscoverySnapshotAsyncEXT .

Essa função inicia uma operação assíncrona e cria um XrFutureEXT correspondente , que pode ser usado com xrPollFutureEXT e funções relacionadas. O valor de retorno dessa função indica apenas se os parâmetros eram aceitáveis para programar a operação assíncrona. A função de conclusão correspondente é xrCreateSpatialDiscoverySnapshotCompleteEXT , que pode ser usada quando um futuro dessa função está no estado READY, com saídas preenchidas por essa função na estrutura de conclusão XrCreateSpatialDiscoverySnapshotCompletionEXT .

O aplicativo pode enviar várias solicitações de criação de snapshots de descoberta sem precisar esperar que a anterior seja concluída. O ambiente de execução pode processar e concluir a criação do snapshot em qualquer ordem. O tempo de execução pode atrasar a conclusão da criação do snapshot de descoberta para limitar o aplicativo se ele precisar reduzir o uso de recursos do sistema devido a políticas de energia, térmicas ou outras do dispositivo.

O aplicativo pode usar XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes para filtrar a lista de entidades e os componentes cujos dados o tempo de execução precisa incluir no snapshot. Se o aplicativo fornecer uma lista válida de tipos de componentes espaciais em XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes , o tempo de execução deverá incluir apenas entidades espaciais no snapshot que tenham pelo menos um dos componentes fornecidos em XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes . Além disso, o tempo de execução precisa incluir apenas dados desses componentes no snapshot.

O tempo de execução deve retornar XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT se algum dos XrSpatialComponentTypeEXT em XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes não estiver ativado para os recursos espaciais transmitidos para XrSpatialContextCreateInfoEXT :: capabilityConfigs ao criar spatialContext .

Se o aplicativo não fornecer uma lista de tipos de componentes espaciais em XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes , o tempo de execução deverá incluir todas as entidades espaciais no snapshot que têm o conjunto de componentes enumerados em XrSpatialCapabilityConfigurationBaseHeaderEXT ::enabledComponents para os recursos configurados para spatialContext . O tempo de execução precisa incluir os dados de todos os componentes ativados dos recursos configurados para spatialContext .

Se XrEventDataReferenceSpaceChangePending for enfileirado antes da conclusão de future e XrEventDataReferenceSpaceChangePending :: poseValid for falso, o tempo de execução poderá criar um XrSpatialSnapshotEXT sem entidades ou definir o XrSpatialEntityTrackingStateEXT das entidades que não podem mais ser localizadas em XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace em XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time como XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT ou XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT . O tempo de execução não pode definir XrCreateSpatialContextCompletionEXT :: futureResult como um código de erro devido a XrEventDataReferenceSpaceChangePending .

Uso válido (implícito)

Códigos de retorno

Sucesso

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Falha

  • 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

A estrutura XrSpatialDiscoverySnapshotCreateInfoEXT é definida como:

typedef struct XrSpatialDiscoverySnapshotCreateInfoEXT {
    XrStructureType                     type;
    const void*                         next;
    uint32_t                            componentTypeCount;
    const XrSpatialComponentTypeEXT*    componentTypes;
} XrSpatialDiscoverySnapshotCreateInfoEXT;

Descrições de membros

  • type é o XrStructureType dessa estrutura.
  • next é NULL ou um ponteiro para a próxima estrutura em uma cadeia de estruturas. Nenhuma dessas estruturas está definida no OpenXR principal ou nesta extensão.
  • componentTypeCount é um uint32_t que descreve a contagem de elementos na matriz componentTypes.
  • componentTypes é uma matriz de XrSpatialComponentTypeEXT .

A estrutura XrSpatialDiscoverySnapshotCreateInfoEXT descreve as informações para criar um identificador XrSpatialSnapshotEXT ao descobrir entidades espaciais.

Uso válido (implícito)

A função xrCreateSpatialDiscoverySnapshotCompleteEXT é definida como:

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

Descrições dos parâmetros

xrCreateSpatialDiscoverySnapshotCompleteEXT conclui a operação assíncrona iniciada por xrCreateSpatialDiscoverySnapshotAsyncEXT . O tempo de execução deve retornar XR_ERROR_FUTURE_PENDING_EXT se XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: future não estiver no estado pronto. O ambiente de execução deve retornar XR_ERROR_FUTURE_INVALID_EXT se XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: future já tiver sido concluído ou cancelado.

Uso válido (implícito)

Códigos de retorno

Sucesso

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Falha

  • 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

A estrutura XrCreateSpatialDiscoverySnapshotCompletionInfoEXT é definida como:

typedef struct XrCreateSpatialDiscoverySnapshotCompletionInfoEXT {
    XrStructureType    type;
    const void*        next;
    XrSpace            baseSpace;
    XrTime             time;
    XrFutureEXT        future;
} XrCreateSpatialDiscoverySnapshotCompletionInfoEXT;

Descrições de membros

Os locais nos vários dados de componentes incluídos no snapshot criado serão representados em baseSpace , localizado em time .

Uso válido (implícito)

A estrutura XrCreateSpatialDiscoverySnapshotCompletionEXT é definida como:

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

Descrições de membros

  • type é o XrStructureType dessa estrutura.
  • next é NULL ou um ponteiro para a próxima estrutura em uma cadeia de estruturas.
  • futureResult é o XrResult da operação de criação de snapshot de descoberta espacial.
  • snapshot é um XrSpatialSnapshotEXT que pode ser usado para consultar os dados de componentes das entidades espaciais descobertas.

Códigos de retorno futuros

Valores de futureResult:

Sucesso

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Falha

  • 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 recomendação de descoberta

A estrutura XrEventDataSpatialDiscoveryRecommendedEXT é definida da seguinte forma:

typedef struct XrEventDataSpatialDiscoveryRecommendedEXT {
    XrStructureType        type;
    const void*            next;
    XrSpatialContextEXT    spatialContext;
} XrEventDataSpatialDiscoveryRecommendedEXT;

Descrições de membros

  • type é o XrStructureType dessa estrutura.
  • next é NULL ou um ponteiro para a próxima estrutura em uma cadeia de estruturas.
  • spatialContext é o XrSpatialContextEXT para o qual a descoberta está sendo recomendada pelo tempo de execução.

O aplicativo pode recuperar esse evento usando xrPollEvent . O aplicativo pode evitar chamadas excessivas para xrCreateSpatialDiscoverySnapshotAsyncEXT para descobrir entidades espaciais aguardando esse evento. Se o aplicativo criar vários snapshots de descoberta com o mesmo XrSpatialDiscoverySnapshotCreateInfoEXT entre dois eventos XrEventDataSpatialDiscoveryRecommendedEXT, os snapshots resultantes poderão conter as mesmas entidades. Portanto, a criação de snapshots e as consultas de dados seriam desnecessárias.

Aguardar esse evento para criar um novo snapshot de descoberta garante que o aplicativo não sobrecarregue o sistema com solicitações de descoberta para as quais o tempo de execução pode não retornar novos dados. Isso ajuda a evitar o risco de uso excessivo dos recursos do sistema e de limitação devido a políticas de energia ou térmicas do dispositivo. Isso também ajuda a criar paridade entre runtimes que estão descobrindo entidades espaciais rapidamente com rastreamento em tempo real e runtimes que estão fornecendo entidades espaciais com base em um estado gravado anteriormente (em que o runtime pode enfileirar o evento de recomendação de descoberta apenas uma vez para cada XrSpatialContextEXT).

O ambiente de execução não pode enfileirar esse evento para notificar o aplicativo sobre mudanças ou ajustes feitos nos dados de componentes de entidades espaciais atuais. O aplicativo pode usar o xrCreateSpatialUpdateSnapshotEXT para acompanhar as atualizações de dados de componentes das entidades espaciais de interesse.

Um ambiente de execução pode enfileirar um evento de recomendação de descoberta sem esperar que o aplicativo chame primeiro xrCreateSpatialDiscoverySnapshotAsyncEXT . Por exemplo, um tempo de execução pode basear a decisão de enfileirar o evento de recomendação de descoberta na configuração do XrSpatialContextEXT, no próprio entendimento do ambiente ao redor do usuário (descoberta de novas entidades ou perda de entidades atuais) ou para sugerir uma cadência de solicitação de descoberta adequada ao aplicativo para não sobrecarregar os recursos do sistema. O tempo de execução pode optar por nunca enfileirar esse evento para um XrSpatialContextEXT se nenhuma entidade for encontrada no ambiente do usuário durante o ciclo de vida desse XrSpatialContextEXT .

O tempo de execução não pode enfileirar esse evento para um determinado spatialContext até que o aplicativo conclua a criação usando xrCreateSpatialContextCompleteEXT .

Depois que o aplicativo chamar xrDestroySpatialContextEXT , o tempo de execução não poderá enfileirar mais eventos de recomendação de descoberta para esse contexto espacial nem retornar esses eventos para esse contexto de xrPollEvent .

Uso válido (implícito)

Consultar dados de componentes

A função xrQuerySpatialComponentDataEXT é definida como:

XrResult xrQuerySpatialComponentDataEXT(
    XrSpatialSnapshotEXT                        snapshot,
    const XrSpatialComponentDataQueryConditionEXT* queryCondition,
    XrSpatialComponentDataQueryResultEXT*       queryResult);

Descrições dos parâmetros

O aplicativo pode usar xrQuerySpatialComponentDataEXT para consultar os dados de componentes das entidades no snapshot anexando uma estrutura de lista a XrSpatialComponentDataQueryResultEXT :: next correspondente a cada XrSpatialComponentTypeEXT em XrSpatialComponentDataQueryConditionEXT :: componentTypes .

Se o aplicativo anexar uma estrutura de lista a XrSpatialComponentDataQueryResultEXT :: next que não corresponda a nenhum dos componentes listados em XrSpatialComponentDataQueryConditionEXT :: componentTypes , o tempo de execução precisa retornar XR_ERROR_VALIDATION_FAILURE .

O aplicativo pode anexar as estruturas de lista correspondentes apenas a um subconjunto de componentes listados em XrSpatialComponentDataQueryConditionEXT :: componentTypes . O aplicativo pode omitir as estruturas de lista completamente se quiser saber apenas os IDs e o estado de rastreamento das entidades espaciais que atendem ao queryCondition . O tempo de execução não pode tratar a ausência de estruturas de lista da cadeia XrSpatialComponentDataQueryResultEXT :: next como uma falha.

Se XrEventDataReferenceSpaceChangePending estiver na fila e XrEventDataReferenceSpaceChangePending :: changeTime tiver decorrido enquanto o aplicativo consulta dados de componentes de um XrSpatialSnapshotEXT , o aplicativo poderá usar os dados de eventos para ajustar as posturas de acordo.

O tempo de execução precisa preencher XrSpatialComponentDataQueryResultEXT :: entityIds apenas com entidades que têm todos os componentes especificados em XrSpatialComponentDataQueryConditionEXT :: componentTypes . Se XrSpatialComponentDataQueryConditionEXT :: componentTypeCount for 0, o tempo de execução deverá preencher queryResult com todas as entidades (e os estados de rastreamento delas) que estão no snapshot. Se outras condições de consulta forem adicionadas a XrSpatialComponentDataQueryConditionEXT :: next, o tempo de execução deverá tratar essas condições como um "AND" com a disponibilidade de tipos de componentes. Ou seja, o tempo de execução deverá preencher XrSpatialComponentDataQueryResultEXT ::entityIds apenas com entidades que atendam a todas as condições fornecidas. O tempo de execução precisa preencher os dados do componente nas estruturas de lista na mesma ordem das entidades em XrSpatialComponentDataQueryResultEXT :: entityIds. Ou seja, os dados do componente em um determinado índice na matriz de estrutura de lista precisam corresponder à entidade no mesmo índice.

Se o estado de rastreamento de uma entidade não for XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT , o tempo de execução não poderá mudar os dados no índice correspondente a essa entidade na matriz contida nas estruturas de lista anexadas a XrSpatialComponentDataQueryResultEXT .

Uso válido (implícito)

Códigos de retorno

Sucesso

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Falha

  • 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

Por exemplo, o aplicativo cria um XrSpatialSnapshotEXT que contém cinco entidades, em que:

  • As entidades 1 e 2 têm componentes XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT e XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT
  • As entidades 3 e 4 têm componentes XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT e XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT
  • A entidade 5 tem componentes XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT e XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT .

XrSpatialEntityIdEXT

XrSpatialEntityIdEXT

1

1

2

2

3

3

4

4

5

5

Bounded2D

Bounded2D

Sim

Sim

Sim

Sim

Não

Não

Não

Não

Sim

Sim

Pai

Pai

Sim

Sim

Sim

Sim

Não

Não

Não

Não

Não

Não

Mesh3D

Mesh3D

Não

Não

Não

Não

Sim

Sim

Sim

Sim

Sim

Sim

Bounded3D

Bounded3D

Não

Não

Não

Não

Sim

Sim

Sim

Sim

Não

Nenhum O texto não é SVG e não pode ser exibido

Figura 20. Exemplo de captura de tela

xrQuerySpatialComponentDataEXT no snapshot acima com XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT listado na condição de consulta vai resultar nas entidades nº 1, 2 e 5 sendo retornadas ao aplicativo, e o aplicativo pode anexar uma matriz de XrSpatialBounded2DDataEXT como parte da estrutura XrSpatialComponentBounded2DListEXT à próxima cadeia de XrSpatialComponentDataQueryResultEXT para receber os dados bounded2D.

XrSpatialEntityIdEXT

XrSpatialEntityIdEXT

1

1

2

2

5

5

Bounded2D

Bounded2D

Dados para entityId #1

Dados para entid...

Dados para entityId #2

Dados para entid...

Dados para entityId #5

Dados para entid...

entityIds

entityIds

próxima

próxima

XrSpatialComponent
DataQueryResultEXT

XrSpatialComponent
Dat...

limites

limites

XrSpatialComponent
Bounded2DListEXT

XrSpatialComponent
Bou... O texto não é SVG e não pode ser exibido

Figura 21. Exemplo de resultado da consulta

xrQuerySpatialComponentDataEXT no snapshot acima com os componentes XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT e XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT listados na condição de consulta vai resultar no retorno das entidades nº 3 e 4 para o aplicativo, e o aplicativo pode anexar matrizes de XrBoxf e XrSpatialMeshDataEXT como parte das estruturas XrSpatialComponentBounded3DListEXT e XrSpatialComponentMesh3DListEXT, respectivamente, à próxima cadeia de XrSpatialComponentDataQueryResultEXT para receber os dados do componente.

XrSpatialEntityIdEXT

XrSpatialEntityIdEXT

3

3

4

4

Bounded3D

Bounded3D

Dados para entityId #3

Dados para entid...

Dados para entityId nº 4

Dados para entid...

Mesh3D

Mesh3D

Dados para entityId #3

Dados para entid...

Dados para entityId nº 4

Dados para entid...

entityIds

entityIds

próxima

próxima

XrSpatialComponent
DataQueryResultEXT

XrSpatialComponent
Da...

limites

limites

próxima

próxima

XrSpatialComponent
Bounded3DListEXT

XrSpatialComponent
Bo...

XrSpatialComponent
Mesh3DListEXT

XrSpatialComponent
Me...

malhas

malhas O texto não é SVG. Não é possível mostrar

Figura 22. Exemplo de resultado da consulta

A estrutura XrSpatialComponentDataQueryConditionEXT é definida da seguinte forma:

typedef struct XrSpatialComponentDataQueryConditionEXT {
    XrStructureType                     type;
    const void*                         next;
    uint32_t                            componentTypeCount;
    const XrSpatialComponentTypeEXT*    componentTypes;
} XrSpatialComponentDataQueryConditionEXT;

Descrições de membros

  • type é o XrStructureType dessa estrutura.
  • next é NULL ou um ponteiro para a próxima estrutura em uma cadeia de estruturas.
  • componentTypeCount é um uint32_t que descreve a contagem de elementos na matriz componentTypes.
  • componentTypes é uma matriz de XrSpatialComponentTypeEXT para receber os dados do snapshot.

Uso válido (implícito)

A estrutura XrSpatialComponentDataQueryResultEXT é definida da seguinte forma:

typedef struct XrSpatialComponentDataQueryResultEXT {
    XrStructureType                     type;
    void*                               next;
    uint32_t                            entityIdCapacityInput;
    uint32_t                            entityIdCountOutput;
    XrSpatialEntityIdEXT*               entityIds;
    uint32_t                            entityStateCapacityInput;
    uint32_t                            entityStateCountOutput;
    XrSpatialEntityTrackingStateEXT*    entityStates;
} XrSpatialComponentDataQueryResultEXT;

Descrições de membros

  • type é o XrStructureType dessa estrutura.
  • next é NULL ou um ponteiro para a próxima estrutura em uma cadeia de estruturas.
  • entityIdCapacityInput é a capacidade da matriz entityIds ou 0 para indicar uma solicitação de recuperação da capacidade necessária.
  • entityIdCountOutput é o número de XrSpatialEntityIdEXT em entityIds ou a capacidade necessária caso entityIdCapacityInput seja insuficiente.
  • entityIds é uma matriz de XrSpatialEntityIdEXT . Ele pode ser NULL se entityIdCapacityInput for 0.
  • entityStateCapacityInput é a capacidade da matriz entityStates ou 0 para indicar uma solicitação de recuperação da capacidade necessária.
  • entityStateCountOutput é o número de XrSpatialEntityTrackingStateEXT em entityStates ou a capacidade necessária caso entityStateCapacityInput seja insuficiente. Esse precisa ser sempre igual a entityIdCountOutput .
  • entityStates é uma matriz de XrSpatialEntityTrackingStateEXT . Ele pode ser NULL se entityStateCapacityInput for 0.
  • Consulte a seção Parâmetros de tamanho do buffer para uma descrição detalhada de como recuperar o tamanho entityIds necessário.

Um aplicativo pode usar o entityIds com xrCreateSpatialEntityFromIdEXT para criar identificadores XrSpatialEntityEXT para as entidades que ele quer receber atualizações regulares. O aplicativo pode usar esses identificadores XrSpatialEntityEXT com xrCreateSpatialUpdateSnapshotEXT para criar um snapshot de atualização com os dados mais recentes conhecidos do tempo de execução dos componentes para as entidades fornecidas.

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;

O XrSpatialEntityTrackingStateEXT enumera os possíveis estados de rastreamento de entidades espaciais:

Os enums têm os seguintes significados:

Descrição da enumeração

XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT

O ambiente de execução parou de rastrear essa entidade e nunca mais vai retomar o rastreamento.

XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT

O ambiente de execução pausou o rastreamento dessa entidade, mas pode retomar o rastreamento no futuro.

XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT

O ambiente de execução está rastreando essa entidade e os dados do componente dela são válidos.

ACOMPANHAMENTO

PAUSADO

PARADO

Figura 23. XrSpatialEntityTrackingStateEXT

  • O tempo de execução pode mudar o estado da entidade espacial de XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT para XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT se suspender o rastreamento dessa entidade, mas tiver a possibilidade de retomar o rastreamento no futuro. Alguns exemplos de quando o tempo de execução pode fazer isso incluem (mas não se limitam a): se o aplicativo perder o foco de entrada; se a entidade espacial fornecida estiver muito longe do usuário para ser rastreada com precisão; ou se houver muitas entidades sendo rastreadas e o tempo de execução quiser reduzir o custo do rastreamento. XrSpatialEntityTrackingStateEXT ajuda o aplicativo a se isolar das diferentes políticas de rastreamento de cada ambiente de execução.
  • O tempo de execução pode mudar o estado de uma entidade de XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT para XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT ou XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT .
  • O tempo de execução precisa mudar o estado da entidade espacial de XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT ou XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT para XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT se a entidade espacial for perdida e o rastreamento dela nunca for recuperado ou retomado. Um exemplo seria se o dispositivo perdesse o rastreamento, reiniciasse a sessão de rastreamento, mas não conseguisse se relocalizar no ambiente e, portanto, tratasse as entidades descobertas dessa sessão como novas.
  • Depois que o estado de rastreamento de uma entidade é definido como XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT , o tempo de execução não pode mudar para outro estado.
  • Ao consultar os dados de componentes de uma entidade espacial usando xrQuerySpatialComponentDataEXT , o tempo de execução precisa definir dados válidos no conteúdo dos buffers fornecidos pelo aplicativo na próxima cadeia de XrSpatialComponentDataQueryResultEXT se o estado da entidade for XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT . Se o estado da entidade for XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT ou XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT , o tempo de execução não poderá mudar o conteúdo dos buffers.

Expressão de duas chamadas para dados de componentes

A estrutura XrSpatialBufferEXT é definida da seguinte forma:

typedef struct XrSpatialBufferEXT {
    XrSpatialBufferIdEXT      bufferId;
    XrSpatialBufferTypeEXT    bufferType;
} XrSpatialBufferEXT;

Descrições de membros

  • bufferId o XrSpatialBufferIdEXT dos dados do buffer.
  • bufferType é o XrSpatialBufferTypeEXT para indicar o tipo de dados em bufferId . O aplicativo pode usar bufferType para determinar qual função usar para recuperar os dados reais do buffer.

Alguns componentes espaciais têm dados de tamanho variável e, portanto, exigem o uso do idioma de duas chamadas para recuperar os dados. Nesses casos, a estrutura de dados do componente espacial fornece um XrSpatialBufferEXT para cada buffer de tamanho variável necessário nos dados desse componente.

Para o mesmo bufferId , o tempo de execução precisa fornecer os mesmos dados de uma consulta de dados de componente para outra, mesmo entre snapshots. Um bufferId diferente entre as chamadas de consulta de dados do componente indica ao aplicativo que os dados desse componente podem ter mudado.

Uso válido (implícito)

XR_DEFINE_ATOM(XrSpatialBufferIdEXT)

XrSpatialBufferIdEXT é usado para representar qualquer tipo de dado de tamanho variável para um componente espacial.

O tempo de execução precisa manter o XrSpatialBufferIdEXT e os dados dele na memória por pelo menos o ciclo de vida do XrSpatialSnapshotEXT que o contém. O tempo de execução pode manter o XrSpatialBufferIdEXT e os dados dele na memória por mais tempo do que o ciclo de vida do XrSpatialSnapshotEXT para retornar o mesmo ID como parte de snapshots criados posteriormente pelo aplicativo. Para o mesmo XrSpatialBufferIdEXT , o tempo de execução deve sempre retornar os mesmos dados usando a função xrGetSpatialBuffer* adequada.

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;

A enumeração XrSpatialBufferTypeEXT identifica os diferentes tipos de dados do buffer representado XrSpatialBufferIdEXT .

Descrições de enumeradores

A função xrGetSpatialBufferStringEXT é definida como:

XrResult xrGetSpatialBufferStringEXT(
    XrSpatialSnapshotEXT                        snapshot,
    const XrSpatialBufferGetInfoEXT*            info,
    uint32_t                                    bufferCapacityInput,
    uint32_t*                                   bufferCountOutput,
    char*                                       buffer);

Descrições dos parâmetros

  • snapshot é um identificador para um XrSpatialSnapshotEXT .
  • info contém as informações sobre o buffer a ser consultado.
  • bufferCapacityInput é a capacidade da matriz ou 0 para indicar uma solicitação de recuperação da capacidade necessária.
  • bufferCountOutput é o número de caracteres ou a capacidade necessária caso bufferCapacityInput seja insuficiente.
  • buffer é uma matriz de char . Ele pode ser NULL se bufferCapacityInput for 0.
  • Consulte a seção Parâmetros de tamanho do buffer para uma descrição detalhada de como recuperar o tamanho buffer necessário.

O aplicativo pode receber os dados de um XrSpatialBufferEXT fornecido por um componente, em que XrSpatialBufferEXT :: bufferType é XR_SPATIAL_BUFFER_TYPE_STRING_EXT usando xrGetSpatialBufferStringEXT .

O tempo de execução deve retornar XR_ERROR_VALIDATION_FAILURE se o XrSpatialBufferTypeEXT para XrSpatialBufferGetInfoEXT :: bufferId não for XR_SPATIAL_BUFFER_TYPE_STRING_EXT .

O tempo de execução precisa retornar XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT se XrSpatialBufferGetInfoEXT :: bufferId não pertencer a snapshot .

buffer preenchido pelo tempo de execução precisa ser uma string UTF-8 terminada em nulo.

Uso válido (implícito)

  • A extensão XR_EXT_spatial_entity precisa ser ativada antes de chamar xrGetSpatialBufferStringEXT.
  • snapshot precisa ser um identificador XrSpatialSnapshotEXT válido
  • info precisa ser um ponteiro para uma estrutura XrSpatialBufferGetInfoEXT válida
  • bufferCountOutput precisa ser um ponteiro para um valor uint32_t.
  • Se bufferCapacityInput não for 0 , buffer precisa ser um ponteiro para uma matriz de valores char bufferCapacityInput.

Códigos de retorno

Sucesso

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Falha

  • 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

A função xrGetSpatialBufferUint8EXT é definida como:

XrResult xrGetSpatialBufferUint8EXT(
    XrSpatialSnapshotEXT                        snapshot,
    const XrSpatialBufferGetInfoEXT*            info,
    uint32_t                                    bufferCapacityInput,
    uint32_t*                                   bufferCountOutput,
    uint8_t*                                    buffer);

Descrições dos parâmetros

  • snapshot é um identificador para um XrSpatialSnapshotEXT .
  • info contém as informações sobre o buffer a ser consultado.
  • bufferCapacityInput é a capacidade da matriz ou 0 para indicar uma solicitação de recuperação da capacidade necessária.
  • bufferCountOutput é o número de elementos na matriz buffer ou a capacidade necessária caso bufferCapacityInput seja insuficiente.
  • buffer é uma matriz de uint8_t . Ele pode ser NULL se bufferCapacityInput for 0.
  • Consulte a seção Parâmetros de tamanho do buffer para uma descrição detalhada de como recuperar o tamanho buffer necessário.

O aplicativo pode receber os dados de um XrSpatialBufferEXT fornecido por um componente, em que XrSpatialBufferEXT :: bufferType é XR_SPATIAL_BUFFER_TYPE_UINT8_EXT usando xrGetSpatialBufferUint8EXT .

O tempo de execução deve retornar XR_ERROR_VALIDATION_FAILURE se o XrSpatialBufferTypeEXT para XrSpatialBufferGetInfoEXT :: bufferId não for XR_SPATIAL_BUFFER_TYPE_UINT8_EXT .

O tempo de execução precisa retornar XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT se XrSpatialBufferGetInfoEXT :: bufferId não pertencer a snapshot .

Uso válido (implícito)

  • A extensão XR_EXT_spatial_entity precisa ser ativada antes de chamar xrGetSpatialBufferUint8EXT.
  • snapshot precisa ser um identificador XrSpatialSnapshotEXT válido
  • info precisa ser um ponteiro para uma estrutura XrSpatialBufferGetInfoEXT válida
  • bufferCountOutput precisa ser um ponteiro para um valor uint32_t.
  • Se bufferCapacityInput não for 0 , buffer precisa ser um ponteiro para uma matriz de valores bufferCapacityInput uint8_t.

Códigos de retorno

Sucesso

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Falha

  • 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

A função xrGetSpatialBufferUint16EXT é definida como:

XrResult xrGetSpatialBufferUint16EXT(
    XrSpatialSnapshotEXT                        snapshot,
    const XrSpatialBufferGetInfoEXT*            info,
    uint32_t                                    bufferCapacityInput,
    uint32_t*                                   bufferCountOutput,
    uint16_t*                                   buffer);

Descrições dos parâmetros

  • snapshot é um identificador para um XrSpatialSnapshotEXT .
  • info contém as informações sobre o buffer a ser consultado.
  • bufferCapacityInput é a capacidade da matriz ou 0 para indicar uma solicitação de recuperação da capacidade necessária.
  • bufferCountOutput é o número de elementos na matriz buffer ou a capacidade necessária caso bufferCapacityInput seja insuficiente.
  • buffer é uma matriz de uint16_t . Ele pode ser NULL se bufferCapacityInput for 0.
  • Consulte a seção Parâmetros de tamanho do buffer para uma descrição detalhada de como recuperar o tamanho buffer necessário.

O aplicativo pode receber os dados de um XrSpatialBufferEXT fornecido por um componente, em que XrSpatialBufferEXT :: bufferType é XR_SPATIAL_BUFFER_TYPE_UINT16_EXT usando xrGetSpatialBufferUint16EXT .

O tempo de execução deve retornar XR_ERROR_VALIDATION_FAILURE se o XrSpatialBufferTypeEXT para XrSpatialBufferGetInfoEXT :: bufferId não for XR_SPATIAL_BUFFER_TYPE_UINT16_EXT .

O tempo de execução precisa retornar XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT se XrSpatialBufferGetInfoEXT :: bufferId não pertencer a snapshot .

Uso válido (implícito)

  • A extensão XR_EXT_spatial_entity precisa ser ativada antes de chamar xrGetSpatialBufferUint16EXT.
  • snapshot precisa ser um identificador XrSpatialSnapshotEXT válido
  • info precisa ser um ponteiro para uma estrutura XrSpatialBufferGetInfoEXT válida
  • bufferCountOutput precisa ser um ponteiro para um valor uint32_t.
  • Se bufferCapacityInput não for 0 , buffer precisa ser um ponteiro para uma matriz de valores bufferCapacityInput uint16_t.

Códigos de retorno

Sucesso

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Falha

  • 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

A função xrGetSpatialBufferUint32EXT é definida como:

XrResult xrGetSpatialBufferUint32EXT(
    XrSpatialSnapshotEXT                        snapshot,
    const XrSpatialBufferGetInfoEXT*            info,
    uint32_t                                    bufferCapacityInput,
    uint32_t*                                   bufferCountOutput,
    uint32_t*                                   buffer);

Descrições dos parâmetros

  • snapshot é um identificador para um XrSpatialSnapshotEXT .
  • info contém as informações sobre o buffer a ser consultado.
  • bufferCapacityInput é a capacidade da matriz ou 0 para indicar uma solicitação de recuperação da capacidade necessária.
  • bufferCountOutput é o número de elementos na matriz buffer ou a capacidade necessária caso bufferCapacityInput seja insuficiente.
  • buffer é uma matriz de uint32_t . Ele pode ser NULL se bufferCapacityInput for 0.
  • Consulte a seção Parâmetros de tamanho do buffer para uma descrição detalhada de como recuperar o tamanho buffer necessário.

O aplicativo pode receber os dados de um XrSpatialBufferEXT fornecido por um componente, em que XrSpatialBufferEXT :: bufferType é XR_SPATIAL_BUFFER_TYPE_UINT32_EXT usando xrGetSpatialBufferUint32EXT .

O tempo de execução deve retornar XR_ERROR_VALIDATION_FAILURE se o XrSpatialBufferTypeEXT para XrSpatialBufferGetInfoEXT :: bufferId não for XR_SPATIAL_BUFFER_TYPE_UINT32_EXT .

O tempo de execução precisa retornar XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT se XrSpatialBufferGetInfoEXT :: bufferId não pertencer a snapshot .

Uso válido (implícito)

  • A extensão XR_EXT_spatial_entity precisa ser ativada antes de chamar xrGetSpatialBufferUint32EXT.
  • snapshot precisa ser um identificador XrSpatialSnapshotEXT válido
  • info precisa ser um ponteiro para uma estrutura XrSpatialBufferGetInfoEXT válida
  • bufferCountOutput precisa ser um ponteiro para um valor uint32_t.
  • Se bufferCapacityInput não for 0 , buffer precisa ser um ponteiro para uma matriz de valores bufferCapacityInput uint32_t.

Códigos de retorno

Sucesso

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Falha

  • 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

A função xrGetSpatialBufferFloatEXT é definida como:

XrResult xrGetSpatialBufferFloatEXT(
    XrSpatialSnapshotEXT                        snapshot,
    const XrSpatialBufferGetInfoEXT*            info,
    uint32_t                                    bufferCapacityInput,
    uint32_t*                                   bufferCountOutput,
    float*                                      buffer);

Descrições dos parâmetros

  • snapshot é um identificador para um XrSpatialSnapshotEXT .
  • info contém as informações sobre o buffer a ser consultado.
  • bufferCapacityInput é a capacidade da matriz ou 0 para indicar uma solicitação de recuperação da capacidade necessária.
  • bufferCountOutput é o número de elementos na matriz buffer ou a capacidade necessária caso bufferCapacityInput seja insuficiente.
  • buffer é uma matriz de float . Ele pode ser NULL se bufferCapacityInput for 0.
  • Consulte a seção Parâmetros de tamanho do buffer para uma descrição detalhada de como recuperar o tamanho buffer necessário.

O aplicativo pode receber os dados de um XrSpatialBufferEXT fornecido por um componente, em que XrSpatialBufferEXT :: bufferType é XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT usando xrGetSpatialBufferFloatEXT .

O tempo de execução deve retornar XR_ERROR_VALIDATION_FAILURE se o XrSpatialBufferTypeEXT para XrSpatialBufferGetInfoEXT :: bufferId não for XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT .

O tempo de execução precisa retornar XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT se XrSpatialBufferGetInfoEXT :: bufferId não pertencer a snapshot .

Uso válido (implícito)

  • A extensão XR_EXT_spatial_entity precisa ser ativada antes de chamar xrGetSpatialBufferFloatEXT.
  • snapshot precisa ser um identificador XrSpatialSnapshotEXT válido
  • info precisa ser um ponteiro para uma estrutura XrSpatialBufferGetInfoEXT válida
  • bufferCountOutput precisa ser um ponteiro para um valor uint32_t.
  • Se bufferCapacityInput não for 0 , buffer precisa ser um ponteiro para uma matriz de valores bufferCapacityInput float.

Códigos de retorno

Sucesso

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Falha

  • 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

A função xrGetSpatialBufferVector2fEXT é definida como:

XrResult xrGetSpatialBufferVector2fEXT(
    XrSpatialSnapshotEXT                        snapshot,
    const XrSpatialBufferGetInfoEXT*            info,
    uint32_t                                    bufferCapacityInput,
    uint32_t*                                   bufferCountOutput,
    XrVector2f*                                 buffer);

Descrições dos parâmetros

  • snapshot é um identificador para um XrSpatialSnapshotEXT .
  • info contém as informações sobre o buffer a ser consultado.
  • bufferCapacityInput é a capacidade da matriz ou 0 para indicar uma solicitação de recuperação da capacidade necessária.
  • bufferCountOutput é o número de elementos na matriz buffer ou a capacidade necessária caso bufferCapacityInput seja insuficiente.
  • buffer é uma matriz de XrVector2f . Ele pode ser NULL se bufferCapacityInput for 0.
  • Consulte a seção Parâmetros de tamanho do buffer para uma descrição detalhada de como recuperar o tamanho buffer necessário.

O aplicativo pode receber os dados de um XrSpatialBufferEXT fornecido por um componente, em que XrSpatialBufferEXT :: bufferType é XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT usando xrGetSpatialBufferVector2fEXT .

O tempo de execução deve retornar XR_ERROR_VALIDATION_FAILURE se o XrSpatialBufferTypeEXT para XrSpatialBufferGetInfoEXT :: bufferId não for XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT .

O tempo de execução precisa retornar XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT se XrSpatialBufferGetInfoEXT :: bufferId não pertencer a snapshot .

Uso válido (implícito)

  • A extensão XR_EXT_spatial_entity precisa ser ativada antes de chamar xrGetSpatialBufferVector2fEXT.
  • snapshot precisa ser um identificador XrSpatialSnapshotEXT válido
  • info precisa ser um ponteiro para uma estrutura XrSpatialBufferGetInfoEXT válida
  • bufferCountOutput precisa ser um ponteiro para um valor uint32_t.
  • Se bufferCapacityInput não for 0 , buffer precisa ser um ponteiro para uma matriz de estruturas bufferCapacityInput XrVector2f.

Códigos de retorno

Sucesso

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Falha

  • 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

A função xrGetSpatialBufferVector3fEXT é definida como:

XrResult xrGetSpatialBufferVector3fEXT(
    XrSpatialSnapshotEXT                        snapshot,
    const XrSpatialBufferGetInfoEXT*            info,
    uint32_t                                    bufferCapacityInput,
    uint32_t*                                   bufferCountOutput,
    XrVector3f*                                 buffer);

Descrições dos parâmetros

  • snapshot é um identificador para um XrSpatialSnapshotEXT .
  • info contém as informações sobre o buffer a ser consultado.
  • bufferCapacityInput é a capacidade da matriz ou 0 para indicar uma solicitação de recuperação da capacidade necessária.
  • bufferCountOutput é o número de elementos na matriz buffer ou a capacidade necessária caso bufferCapacityInput seja insuficiente.
  • buffer é uma matriz de XrVector3f . Ele pode ser NULL se bufferCapacityInput for 0.
  • Consulte a seção Parâmetros de tamanho do buffer para uma descrição detalhada de como recuperar o tamanho buffer necessário.

O aplicativo pode receber os dados de um XrSpatialBufferEXT fornecido por um componente, em que XrSpatialBufferEXT :: bufferType é XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT usando xrGetSpatialBufferVector3fEXT .

O tempo de execução deve retornar XR_ERROR_VALIDATION_FAILURE se o XrSpatialBufferTypeEXT para XrSpatialBufferGetInfoEXT :: bufferId não for XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT .

O tempo de execução precisa retornar XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT se XrSpatialBufferGetInfoEXT :: bufferId não pertencer a snapshot .

Uso válido (implícito)

  • A extensão XR_EXT_spatial_entity precisa ser ativada antes de chamar xrGetSpatialBufferVector3fEXT.
  • snapshot precisa ser um identificador XrSpatialSnapshotEXT válido
  • info precisa ser um ponteiro para uma estrutura XrSpatialBufferGetInfoEXT válida
  • bufferCountOutput precisa ser um ponteiro para um valor uint32_t.
  • Se bufferCapacityInput não for 0 , buffer precisa ser um ponteiro para uma matriz de estruturas XrVector3f de bufferCapacityInput.

Códigos de retorno

Sucesso

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Falha

  • 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

A estrutura XrSpatialBufferGetInfoEXT é definida como:

typedef struct XrSpatialBufferGetInfoEXT {
    XrStructureType         type;
    const void*             next;
    XrSpatialBufferIdEXT    bufferId;
} XrSpatialBufferGetInfoEXT;

Descrições de membros

  • type é o XrStructureType dessa estrutura.
  • next é NULL ou um ponteiro para a próxima estrutura em uma cadeia de estruturas.
  • bufferId um XrSpatialBufferIdEXT para o buffer cujos dados serão recuperados.

Uso válido (implícito)

#define XR_NULL_SPATIAL_BUFFER_ID_EXT 0

XR_NULL_SPATIAL_BUFFER_ID_EXT é um valor reservado que representa um XrSpatialBufferIdEXT inválido . Ele pode ser transmitido e retornado de funções de API somente quando permitido especificamente.

Criar snapshot de atualização

A função xrCreateSpatialUpdateSnapshotEXT é definida como:

XrResult xrCreateSpatialUpdateSnapshotEXT(
    XrSpatialContextEXT                         spatialContext,
    const XrSpatialUpdateSnapshotCreateInfoEXT* createInfo,
    XrSpatialSnapshotEXT*                       snapshot);

Descrições dos parâmetros

O aplicativo pode usar xrCreateSpatialUpdateSnapshotEXT para criar um snapshot e receber os dados de componentes mais recentes de entidades específicas, conforme conhecido pelo ambiente de execução. Os aplicativos podem fornecer os identificadores XrSpatialEntityEXT e os tipos de componentes de interesse ao criar o snapshot.

O aplicativo pode usar XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes para filtrar a lista de componentes cujos dados precisam ser incluídos no snapshot. Se o aplicativo fornecer uma lista válida de tipos de componentes espaciais em XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes , o tempo de execução deverá incluir apenas entidades espaciais no snapshot que tenham pelo menos um dos componentes fornecidos em XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes . Além disso, o tempo de execução precisa incluir apenas dados desses componentes no snapshot.

O tempo de execução deve retornar XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT se algum dos XrSpatialComponentTypeEXT em XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes não estiver ativado para os recursos espaciais transmitidos para XrSpatialContextCreateInfoEXT :: capabilityConfigs ao criar spatialContext .

Se o aplicativo não fornecer uma lista de tipos de componentes espaciais em XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes , o tempo de execução precisa incluir todas as entidades espaciais listadas em XrSpatialUpdateSnapshotCreateInfoEXT :: entities no snapshot e precisa incluir os dados de todos os componentes ativados dos recursos configurados para spatialContext .

O tempo de execução não pode incluir entidades espaciais que não estejam listadas em XrSpatialUpdateSnapshotCreateInfoEXT :: entities em snapshot .

O aplicativo pode criar quantos snapshots quiser, mas precisa ter cuidado com a memória alocada para cada novo snapshot e precisa destruir os snapshots quando não precisar mais deles.

Uso válido (implícito)

Códigos de retorno

Sucesso

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Falha

  • 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

A estrutura XrSpatialUpdateSnapshotCreateInfoEXT é definida como:

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;

Descrições de membros

  • type é o XrStructureType dessa estrutura.
  • next é NULL ou um ponteiro para a próxima estrutura em uma cadeia de estruturas. Nenhuma dessas estruturas está definida no OpenXR principal ou nesta extensão.
  • entityCount é um uint32_t que descreve a contagem de elementos na matriz entities.
  • entities é uma matriz de XrSpatialEntityEXT para que o tempo de execução precise incluir os dados do componente no snapshot.
  • componentTypeCount é um uint32_t que descreve a contagem de elementos na matriz componentTypes.
  • componentTypes é uma matriz de XrSpatialComponentTypeEXT para que o tempo de execução precise incluir os dados no snapshot.
  • baseSpace é o XrSpace em relação ao qual todos os locais do XrSpatialSnapshotEXT de atualização serão localizados.
  • time é o XrTime em que todos os locais da atualização XrSpatialSnapshotEXT serão localizados.

Uso válido (implícito)

  • A extensão XR_EXT_spatial_entity precisa ser ativada antes de usar XrSpatialUpdateSnapshotCreateInfoEXT
  • type precisa ser XR_TYPE_SPATIAL_UPDATE_SNAPSHOT_CREATE_INFO_EXT
  • next precisa ser NULL ou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas
  • entities precisa ser um ponteiro para uma matriz de entityCount identificadores XrSpatialEntityEXT válidos.
  • Se componentTypeCount não for 0 , componentTypes precisa ser um ponteiro para uma matriz de valores XrSpatialComponentTypeEXT válidos de componentTypeCount.
  • baseSpace precisa ser um identificador XrSpace válido
  • O parâmetro entityCount precisa ser maior que 0
  • baseSpace e os elementos de entities precisam ter sido criados, alocados ou recuperados da mesma XrSession.

Destruir snapshot

A função xrDestroySpatialSnapshotEXT é definida como:

XrResult xrDestroySpatialSnapshotEXT(
    XrSpatialSnapshotEXT                        snapshot);

Descrições dos parâmetros

O aplicativo pode chamar xrDestroySpatialSnapshotEXT para destruir o identificador XrSpatialSnapshotEXT e os recursos associados a ele.

Uso válido (implícito)

Concorrência segura

  • O acesso a snapshot e a qualquer identificador filho precisa ser sincronizado externamente.

Códigos de retorno

Sucesso

  • XR_SUCCESS

Falha

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_RUNTIME_FAILURE

Componentes comuns

2D limitado

Dados de componentes

A estrutura XrSpatialBounded2DDataEXT é definida da seguinte maneira:

typedef struct XrSpatialBounded2DDataEXT {
    XrPosef        center;
    XrExtent2Df    extents;
} XrSpatialBounded2DDataEXT;

Descrições de membros

  • center é um XrPosef que define o centro geométrico do componente 2D delimitado.
  • extents são extensões do componente 2D delimitado ao longo do eixo x (extents.width), eixo y (extents.height), centralizadas em center .

O extents do XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT se refere ao tamanho da entidade no plano x-y do sistema de coordenadas do plano. Um plano com posição {0, 0, 0}, rotação {0, 0, 0, 1} (sem rotação) e extensão {1, 1} se refere a um plano de 1 metro x 1 metro centralizado em {0, 0, 0} com o vetor normal da face frontal apontando para a direção +Z no espaço do componente.

X X Y Y Z Z Altura Altura Y Y Z Z X X Plano vertical Plano vertical Plano horizontal Plano horizontal Largura Largura Largura Largura Altura Altura

Figura 24. Sistema de coordenadas do componente Bounded2D

Observação

O OpenXR usa um plano X-Y com +Z como a normal do plano, mas outras APIs podem usar um plano X-Z com +Y como a normal do plano. O plano X-Y pode ser convertido em um plano X-Z girando -π/2 radianos em torno do eixo +X.

Uso válido (implícito)

Estrutura da lista de componentes para consultar dados

A estrutura XrSpatialComponentBounded2DListEXT é definida da seguinte maneira:

typedef struct XrSpatialComponentBounded2DListEXT {
    XrStructureType               type;
    void*                         next;
    uint32_t                      boundCount;
    XrSpatialBounded2DDataEXT*    bounds;
} XrSpatialComponentBounded2DListEXT;

Descrições de membros

  • type é o XrStructureType dessa estrutura.
  • next é NULL ou um ponteiro para a próxima estrutura em uma cadeia de estruturas. Nenhuma dessas estruturas está definida no OpenXR principal ou nesta extensão.
  • boundCount é um uint32_t que descreve a contagem de elementos na matriz bounds.
  • bounds é uma matriz de XrSpatialBounded2DDataEXT .

O tempo de execução precisa retornar XR_ERROR_VALIDATION_FAILURE de xrQuerySpatialComponentDataEXT se XrSpatialComponentBounded2DListEXT estiver na próxima cadeia de XrSpatialComponentDataQueryResultEXT :: next, mas XrSpatialComponentDataQueryConditionEXT ::componentTypeCount não for zero e XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT não estiver incluído em XrSpatialComponentDataQueryConditionEXT :: componentTypes .

O tempo de execução precisa retornar XR_ERROR_SIZE_INSUFFICIENT de xrQuerySpatialComponentDataEXT se boundCount for menor que XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .

Se xrQuerySpatialComponentDataEXT :: snapshot foi criado com xrCreateSpatialDiscoverySnapshotCompleteEXT , o tempo de execução deve fornecer XrSpatialBounded2DDataEXT :: center em XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace e XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time .

Se xrQuerySpatialComponentDataEXT :: snapshot foi criado com xrCreateSpatialUpdateSnapshotEXT , o tempo de execução deve fornecer XrSpatialBounded2DDataEXT :: center em XrSpatialUpdateSnapshotCreateInfoEXT :: baseSpace e XrSpatialUpdateSnapshotCreateInfoEXT :: time .

Uso válido (implícito)

Configuração

Se XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT for enumerado em XrSpatialCapabilityComponentTypesEXT :: componentTypes para alguma capacidade, o aplicativo poderá ativá-la incluindo o valor de enumeração na lista XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents. Esse componente não requer nenhuma configuração especial para ser incluído na próxima cadeia de XrSpatialCapabilityConfigurationBaseHeaderEXT .

3D limitado

Dados de componentes

O XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT usa XrBoxf para os dados.

Estrutura da lista de componentes para consultar dados

A estrutura XrSpatialComponentBounded3DListEXT é definida da seguinte maneira:

typedef struct XrSpatialComponentBounded3DListEXT {
    XrStructureType    type;
    void*              next;
    uint32_t           boundCount;
    XrBoxf*            bounds;
} XrSpatialComponentBounded3DListEXT;

Descrições de membros

  • type é o XrStructureType dessa estrutura.
  • next é NULL ou um ponteiro para a próxima estrutura em uma cadeia de estruturas. Nenhuma dessas estruturas está definida no OpenXR principal ou nesta extensão.
  • boundCount é um uint32_t que descreve a contagem de elementos na matriz bounds.
  • bounds é uma matriz de XrBoxf .

O tempo de execução precisa retornar XR_ERROR_VALIDATION_FAILURE de xrQuerySpatialComponentDataEXT se XrSpatialComponentBounded3DListEXT estiver na próxima cadeia de XrSpatialComponentDataQueryResultEXT :: next, mas XrSpatialComponentDataQueryConditionEXT ::componentTypeCount não for zero e XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT não estiver incluído em XrSpatialComponentDataQueryConditionEXT :: componentTypes .

O tempo de execução precisa retornar XR_ERROR_SIZE_INSUFFICIENT de xrQuerySpatialComponentDataEXT se boundCount for menor que XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .

Se xrQuerySpatialComponentDataEXT :: snapshot foi criado com xrCreateSpatialDiscoverySnapshotCompleteEXT , o tempo de execução precisa fornecer XrBoxf :: center em XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace em XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time .

Se xrQuerySpatialComponentDataEXT :: snapshot foi criado com xrCreateSpatialUpdateSnapshotEXT , o tempo de execução precisa fornecer XrBoxf :: center em XrSpatialUpdateSnapshotCreateInfoEXT :: baseSpace em XrSpatialUpdateSnapshotCreateInfoEXT :: time .

Uso válido (implícito)

Configuração

Se XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT for enumerado em XrSpatialCapabilityComponentTypesEXT :: componentTypes para alguma capacidade, o aplicativo poderá ativá-la incluindo a enumeração na lista XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents. Esse componente não requer nenhuma configuração especial para ser incluído na próxima cadeia de XrSpatialCapabilityConfigurationBaseHeaderEXT .

Pai

Dados de componentes

O XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT usa XrSpatialEntityIdEXT para os dados.

Estrutura da lista de componentes para consultar dados

A estrutura XrSpatialComponentParentListEXT é definida da seguinte forma:

typedef struct XrSpatialComponentParentListEXT {
    XrStructureType          type;
    void*                    next;
    uint32_t                 parentCount;
    XrSpatialEntityIdEXT*    parents;
} XrSpatialComponentParentListEXT;

Descrições de membros

  • type é o XrStructureType dessa estrutura.
  • next é NULL ou um ponteiro para a próxima estrutura em uma cadeia de estruturas. Nenhuma dessas estruturas está definida no OpenXR principal ou nesta extensão.
  • parentCount é um uint32_t que descreve a contagem de elementos na matriz parents.
  • parents é uma matriz de XrSpatialEntityIdEXT .

O tempo de execução precisa retornar XR_ERROR_VALIDATION_FAILURE de xrQuerySpatialComponentDataEXT se XrSpatialComponentParentListEXT estiver na próxima cadeia de XrSpatialComponentDataQueryResultEXT :: next, mas XrSpatialComponentDataQueryConditionEXT ::componentTypeCount não for zero e XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT não estiver incluído em XrSpatialComponentDataQueryConditionEXT :: componentTypes .

O tempo de execução precisa retornar XR_ERROR_SIZE_INSUFFICIENT de xrQuerySpatialComponentDataEXT se parentCount for menor que XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .

Uso válido (implícito)

  • A extensão XR_EXT_spatial_entity precisa ser ativada antes de usar XrSpatialComponentParentListEXT.
  • type precisa ser XR_TYPE_SPATIAL_COMPONENT_PARENT_LIST_EXT
  • next precisa ser NULL ou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas
  • parents precisa ser um ponteiro para uma matriz de valores parentCount XrSpatialEntityIdEXT.
  • O parâmetro parentCount precisa ser maior que 0
Configuração

Se XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT for enumerado em XrSpatialCapabilityComponentTypesEXT :: componentTypes para alguma capacidade, o aplicativo poderá ativá-la incluindo a enumeração na lista XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents. Esse componente não requer nenhuma configuração especial para ser incluído na próxima cadeia de XrSpatialCapabilityConfigurationBaseHeaderEXT .

Malha 3D

Dados de componentes

A estrutura XrSpatialMeshDataEXT é definida da seguinte maneira:

typedef struct XrSpatialMeshDataEXT {
    XrPosef               origin;
    XrSpatialBufferEXT    vertexBuffer;
    XrSpatialBufferEXT    indexBuffer;
} XrSpatialMeshDataEXT;

Descrições de membros

  • origin é um XrPosef que define a origem da malha. Todos os vértices da malha precisam estar relacionados a essa origem.
  • vertexBuffer é um XrSpatialBufferEXT que fornece o ID de um buffer que representa o buffer de vértice da entidade em que este componente está. A posição dos vértices precisa ser relativa a origin .
  • indexBuffer é um XrSpatialBufferEXT que fornece o ID de um buffer que representa uma matriz de índices de triângulo, especificando os índices dos vértices da malha no vertexBuffer . Os índices de triângulo precisam ser retornados em sentido anti-horário, e três índices denotam um triângulo.

O tipo de componente que usa XrSpatialMeshDataEXT deve especificar o XrSpatialBufferTypeEXT de vertexBuffer e indexBuffer .

Uso válido (implícito)

Estrutura da lista de componentes para consultar dados

A estrutura XrSpatialComponentMesh3DListEXT é definida como:

typedef struct XrSpatialComponentMesh3DListEXT {
    XrStructureType          type;
    void*                    next;
    uint32_t                 meshCount;
    XrSpatialMeshDataEXT*    meshes;
} XrSpatialComponentMesh3DListEXT;

Descrições de membros

  • type é o XrStructureType dessa estrutura.
  • next é NULL ou um ponteiro para a próxima estrutura em uma cadeia de estruturas.
  • meshCount é um uint32_t que descreve a contagem de elementos na matriz meshes.
  • meshes é uma matriz de XrSpatialMeshDataEXT .

O aplicativo pode consultar o componente 3D da malha das entidades espaciais em um XrSpatialSnapshotEXT adicionando XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT em XrSpatialComponentDataQueryConditionEXT :: componentTypes e adicionando XrSpatialComponentMesh3DListEXT à próxima cadeia de ponteiros de XrSpatialComponentDataQueryResultEXT .

O tempo de execução precisa retornar XR_ERROR_VALIDATION_FAILURE de xrQuerySpatialComponentDataEXT se XrSpatialComponentMesh3DListEXT estiver na próxima cadeia de XrSpatialComponentDataQueryResultEXT :: next, mas XrSpatialComponentDataQueryConditionEXT ::componentTypeCount não for zero e XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT não estiver incluído em XrSpatialComponentDataQueryConditionEXT :: componentTypes .

O tempo de execução precisa retornar XR_ERROR_SIZE_INSUFFICIENT de xrQuerySpatialComponentDataEXT se meshCount for menor que XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .

Para o XrSpatialMeshDataEXT preenchido pelo tempo de execução na matriz meshes, o XrSpatialBufferEXT :: bufferType para XrSpatialMeshDataEXT :: vertexBuffer deve ser XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT, e o XrSpatialBufferEXT :: bufferType para XrSpatialMeshDataEXT :: indexBuffer deve ser XR_SPATIAL_BUFFER_TYPE_UINT32_EXT .

Uso válido (implícito)

Configuração

Se XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT for enumerado em XrSpatialCapabilityComponentTypesEXT :: componentTypes para alguma capacidade, o aplicativo poderá ativar incluindo a enumeração na lista XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents da estrutura derivada XrSpatialCapabilityConfigurationBaseHeaderEXT da capacidade que oferece suporte a esse componente.

Esse componente não requer nenhuma configuração especial para ser incluído na próxima cadeia de XrSpatialCapabilityConfigurationBaseHeaderEXT .

Filtros de rastreamento de estado

A estrutura XrSpatialFilterTrackingStateEXT é definida como:

typedef struct XrSpatialFilterTrackingStateEXT {
    XrStructureType                    type;
    const void*                        next;
    XrSpatialEntityTrackingStateEXT    trackingState;
} XrSpatialFilterTrackingStateEXT;

Descrições de membros

O aplicativo pode usar XrSpatialFilterTrackingStateEXT na próxima cadeia de XrSpatialDiscoverySnapshotCreateInfoEXT para restringir a descoberta apenas às entidades cujo estado de rastreamento é trackingState .

O aplicativo pode usar XrSpatialFilterTrackingStateEXT na próxima cadeia de XrSpatialComponentDataQueryConditionEXT para restringir a consulta de dados de componentes de um snapshot apenas a entidades cujo estado de rastreamento seja trackingState .

Uso válido (implícito)

Exemplo de código

Uso de aplicativos

Os aplicativos normalmente usam a extensão de entidade espacial no seguinte padrão:

Descobrir entidades espaciais e consultar dados de componentes

O exemplo de código a seguir demonstra como descobrir entidades espaciais para a consulta de capacidade "Foo" e consultar os dados de componentes dela.

/****************************/
/* 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));

Consultar dados do buffer de consulta

O exemplo de código a seguir demonstra como receber os dados de um componente que fornece um 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.
  }
}

Diretrizes para extensões

  • Se uma extensão estiver definindo um novo XrSpatialComponentTypeEXT que fornece dados adicionais sobre uma entidade espacial,

  • As extensões podem definir estruturas que estendem XrSpatialDiscoverySnapshotCreateInfoEXT para fornecer filtros adicionais para descoberta. Os filtros para criar o snapshot não podem afetar a configuração do contexto espacial. Em vez disso, eles são usados para fornecer dicas ao tempo de execução sobre quais entidades e dados devem ser incluídos no snapshot, conforme rastreado pela configuração atual do contexto espacial (e, portanto, a configuração atual dos serviços subjacentes).

  • Se uma extensão definir um novo XrSpatialCapabilityEXT ,

  • Se uma extensão definir um novo XrSpatialCapabilityFeatureEXT , ela também precisará definir uma estrutura de configuração correspondente que pode ser encadeada ao próximo ponteiro de XrSpatialCapabilityConfigurationBaseHeaderEXT , que o aplicativo pode usar para ativar o recurso ao criar um XrSpatialContextEXT .

  • Uma extensão que define uma nova XrSpatialCapabilityEXT deve seguir este modelo para a especificação:

    • Visão geral
    • Suporte ao ambiente de execução
    • Configuração
    • Componentes garantidos
    • Código de exemplo
  • Uma extensão que define um novo XrSpatialComponentTypeEXT deve seguir este modelo para a especificação:

    • Dados de componentes
    • Estrutura da lista de componentes para consultar dados
    • Configuração
  • Ao escrever uma API que fornece ao aplicativo um XrSpatialBufferIdEXT , ela precisa ser acompanhada de um XrSpatialBufferTypeEXT para informar ao aplicativo qual é o tipo de dados do buffer. O aplicativo pode usar uma função xrGetSpatialBuffer* adequada para recuperar o conteúdo real do buffer.

Diretrizes de extensão e design de rótulo semântico

Embora essa extensão não defina nenhum componente para transmitir as informações de rótulo semântico de uma entidade, ela estabelece as regras e diretrizes de design para qualquer extensão que defina um componente desse tipo. No texto a seguir, " deve " e " precisa " restringem os autores dessa funcionalidade, em vez de restringir uma implementação de tempo de execução ou um aplicativo que usa a API.

  • Se uma extensão estiver definindo rótulos semânticos para qualquer XrSpatialCapabilityEXT , ela deverá fazer isso definindo um novo XrSpatialComponentTypeEXT e uma nova enumeração com um conjunto de rótulos (um "conjunto de rótulos semânticos") para serem os dados desse componente.
  • Uma enumeração que representa um conjunto de rótulos semânticos precisa ter um valor para indicar que a entidade não está categorizada em nenhum dos rótulos desse conjunto. O nome desse enumerador precisa incluir "UNCATEGORIZED", por exemplo, XR_SPATIAL_PLANE_SEMANTIC_LABEL_UNCATEGORIZED_EXT. Esse valor indica aos aplicativos que o tempo de execução reconhece essa entidade, mas que há outros conjuntos de rótulos semânticos em que ela é categorizada.
  • A enumeração desse XrSpatialComponentTypeEXT recém-definido em xrEnumerateSpatialCapabilityComponentTypesEXT implica que o tempo de execução oferece suporte ao conjunto de rótulos semânticos (e, portanto, aos rótulos definidos no conjunto) correspondente a esse tipo de componente.
  • Os aplicativos expressam o desejo de descobrir entidades que têm rótulos pertencentes a esse conjunto de rótulos semânticos incluindo o XrSpatialComponentTypeEXT correspondente na matriz enabledComponents de XrSpatialCapabilityConfigurationBaseHeaderEXT da struct de configuração para a capacidade que o tipo de componente é enumerado.
  • É possível que uma única entidade espacial tenha vários componentes, cada um fornecendo um rótulo do próprio conjunto de rótulos semânticos. Considere o exemplo a seguir com alguns conjuntos hipotéticos de rótulos semânticos: XrSpatialObjectSemanticLabel, que pode ter valores como cadeira, sofá, mesa etc. XrSpatialSofaBrand, que pode ter valores como IKEA, Wayfair etc., e XrSpatialIkeaSofa, que pode ter nomes de modelos específicos de sofás da IKEA. Nesse cenário, a mesma entidade de sofá tem todos os três componentes (rótulos de todos os três conjuntos de rótulos semânticos), cada um fornecendo uma granularidade diferente de informações sobre a entidade.
  • Se uma extensão estiver definindo um novo XrSpatialComponentTypeEXT que fornece um novo conjunto de rótulos semânticos contendo vários rótulos além do rótulo UNCATEGORIZED, a extensão deverá considerar a definição de um XrSpatialCapabilityFeatureEXT que permita que os aplicativos ativem apenas um subconjunto dos rótulos definidos no conjunto de rótulos semânticos correspondente a esse tipo de componente. Esse subconjunto, fornecido na próxima cadeia da configuração de capacidade, age como uma dica para que os runtimes otimizem os pipelines de rastreamento e rastreiem apenas o subconjunto fornecido. Confira um exemplo de estrutura de recurso abaixo .
  • As extensões não podem adicionar rótulos à enumeração do conjunto de rótulos semânticos. Em vez disso, eles precisam definir uma nova enumeração que contenha enumeradores equivalentes com semântica idêntica e valores iguais aos do outro conjunto, além dos enumeradores recém-adicionados. A especificação do novo conjunto de rótulos semânticos também precisa estabelecer o mapeamento entre o conjunto de rótulos antigo e o novo. Confira um exemplo abaixo .
Exemplo de definição de recurso espacial para subconjunto de rótulos semânticos
// 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;
Exemplo de extensão de rótulo semântico espacial
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;

Considere o exemplo acima, em que uma extensão define uma enumeração XrSpatialExamplePlaneSemanticLabelExtensionEXT para estender o XrSpatialPlaneSemanticLabelEXT com valores que representam portas e janelas. A especificação da nova enumeração precisa incluir texto para o seguinte formulário:

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
|====

Novas macros

Novos tipos de base

  • XrSpatialBufferIdEXT
  • XrSpatialEntityIdEXT

Novos tipos de objeto

Novos comandos

Novas estruturas

Novos tipos enumerados

Novas constantes de tipo enumerado

  • XR_EXT_SPATIAL_ENTITY_EXTENSION_NAME
  • XR_EXT_spatial_entity_SPEC_VERSION
  • Extensão de XrObjectType :

    • XR_OBJECT_TYPE_SPATIAL_CONTEXT_EXT
    • XR_OBJECT_TYPE_SPATIAL_ENTITY_EXT
    • XR_OBJECT_TYPE_SPATIAL_SNAPSHOT_EXT
  • Extensão 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
  • Extensão 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

  • Uma única entidade sempre deriva de uma única capacidade?

    • Resolvido
    • Resposta: não. Isso depende totalmente do tempo de execução com base nos próprios recursos de rastreamento e de como ele quer representar uma entidade detectada. A especificação não prescreve nenhuma representação específica de entidade espacial, exceto os componentes garantidos de uma determinada capacidade para definir uma expectativa mínima. Um ambiente de execução pode mesclar entidades detectadas por recursos separados e representá-las como uma única entidade com os componentes garantidos de todos os recursos que ajudaram a identificá-la. Por exemplo, as mesas podem ser detectadas por um recurso de rastreamento de planos e um de rastreamento de objetos. O rastreamento de planos fornece o componente XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT na entidade, e o rastreamento de objetos fornece XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT. Um determinado ambiente de execução pode fornecer a tabela como duas entidades separadas, cada uma com seu próprio conjunto de componentes garantidos, enquanto outros ambientes de execução podem fornecer apenas uma entidade para representar a tabela e ter XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT e XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT na mesma entidade. É importante observar que uma determinada entidade espacial pode ter no máximo um componente de qualquer tipo de componente . Portanto, se os dados de componentes produzidos pelas diferentes funcionalidades entrarem em conflito para uma determinada entidade, o tempo de execução deverá representá-los como duas entidades separadas.

Histórico de versões

  • Revisão 1, 12/04/2024 (Nihav Jain, Google)

    • Descrição inicial da extensão