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é oXrSystemIdcujos recursos espaciais serão enumerados.capabilityCapacityInputé a capacidade da matrizcapabilitiesou 0 para indicar uma solicitação de recuperação da capacidade necessária.capabilityCountOutputé o número de recursos ou a capacidade necessária casocapabilityCapacityInputseja insuficiente.capabilitiesé uma matriz de XrSpatialCapabilityEXT . Ele pode serNULLsecapabilityCapacityInputfor 0.- Consulte a seção Parâmetros de tamanho do buffer para uma descrição detalhada de como recuperar o tamanho
capabilitiesnecessá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_entityprecisa ser ativada antes de chamar xrEnumerateSpatialCapabilitiesEXT. -
instanceprecisa ser um identificador XrInstance válido -
capabilityCountOutputprecisa ser um ponteiro para um valoruint32_t. - Se
capabilityCapacityInputnão for0,capabilitiesprecisa ser um ponteiro para uma matriz de valorescapabilityCapacityInputXrSpatialCapabilityEXT.
Códigos de retorno
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
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é oXrSystemIdcujos 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)
- A extensão
XR_EXT_spatial_entityprecisa ser ativada antes de chamar xrEnumerateSpatialCapabilityComponentTypesEXT. -
instanceprecisa ser um identificador XrInstance válido -
capabilityprecisa ser um valor XrSpatialCapabilityEXT válido. -
capabilityComponentsprecisa ser um ponteiro para uma estrutura XrSpatialCapabilityComponentTypesEXT
Códigos de retorno
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXTXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
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éNULLou 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 casocomponentTypeCapacityInputseja insuficiente.componentTypesé uma matriz de XrSpatialComponentTypeEXT . Ele pode serNULLsecomponentTypeCapacityInputfor 0.- Consulte a seção Parâmetros de tamanho do buffer para uma descrição detalhada de como recuperar o tamanho
componentTypesnecessário.
Uso válido (implícito)
- A extensão
XR_EXT_spatial_entityprecisa ser ativada antes de usar XrSpatialCapabilityComponentTypesEXT. -
typeprecisa serXR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXT -
nextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas - Se
componentTypeCapacityInputnão for0,componentTypesprecisa ser um ponteiro para uma matriz de valorescomponentTypeCapacityInputXrSpatialComponentTypeEXT.
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é oXrSystemIdcujos 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 casocapabilityFeatureCapacityInputseja insuficiente.capabilityFeaturesé uma matriz de XrSpatialCapabilityFeatureEXT . Ele pode serNULLsecapabilityFeatureCapacityInputfor 0.- Consulte a seção Parâmetros de tamanho do buffer para uma descrição detalhada de como recuperar o tamanho
capabilityFeaturesnecessá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)
- A extensão
XR_EXT_spatial_entityprecisa ser ativada antes de chamar xrEnumerateSpatialCapabilityFeaturesEXT. -
instanceprecisa ser um identificador XrInstance válido -
capabilityprecisa ser um valor XrSpatialCapabilityEXT válido. -
capabilityFeatureCountOutputprecisa ser um ponteiro para um valoruint32_t. - Se
capabilityFeatureCapacityInputnão for0,capabilityFeaturesprecisa ser um ponteiro para uma matriz de valorescapabilityFeatureCapacityInputXrSpatialCapabilityFeatureEXT.
Códigos de retorno
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXTXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
Contexto espacial
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 umXrFutureEXT.
O aplicativo pode criar um identificador XrSpatialContextEXT fazendo o seguinte:
- Fornecer estruturas derivadas de XrSpatialCapabilityConfigurationBaseHeaderEXT em XrSpatialContextCreateInfoEXT ::
capabilityConfigspara ativar recursos e componentes para esse recurso. - Configurar os próprios recursos com as estruturas de configuração correspondentes do XrSpatialCapabilityFeatureEXT .
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)
- A extensão
XR_EXT_spatial_entityprecisa ser ativada antes de chamar xrCreateSpatialContextAsyncEXT. -
sessionprecisa ser um identificador XrSession válido -
createInfoprecisa ser um ponteiro para uma estrutura XrSpatialContextCreateInfoEXT válida -
futureprecisa ser um ponteiro para um valorXrFutureEXT.
Códigos de retorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_PERMISSION_INSUFFICIENTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXTXR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXTXR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXTXR_ERROR_VALIDATION_FAILURE
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éNULLou 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é umuint32_tque descreve a contagem de elementos na matrizcapabilityConfigs.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 extensão
XR_EXT_spatial_entityprecisa ser ativada antes de usar XrSpatialContextCreateInfoEXT. -
typeprecisa serXR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXT -
nextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas . Consulte também: XrSpatialContextPersistenceConfigEXT -
capabilityConfigsprecisa ser um ponteiro para uma matriz decapabilityConfigCountestruturas válidas baseadas em XrSpatialCapabilityConfigurationBaseHeaderEXT. Consulte também: XrSpatialCapabilityConfigurationAnchorEXT , XrSpatialCapabilityConfigurationAprilTagEXT , XrSpatialCapabilityConfigurationArucoMarkerEXT , XrSpatialCapabilityConfigurationDepthRaycastANDROID , XrSpatialCapabilityConfigurationImageTrackingEXT , XrSpatialCapabilityConfigurationMeshTrackingEXT , XrSpatialCapabilityConfigurationMicroQrCodeEXT , XrSpatialCapabilityConfigurationObjectTrackingANDROID , XrSpatialCapabilityConfigurationObjectTrackingEXT , XrSpatialCapabilityConfigurationPlaneTrackingEXT , XrSpatialCapabilityConfigurationQrCodeEXT , XrSpatialCapabilityConfigurationRoomBoundaryTrackingANDROIDSYS , XrSpatialCapabilityConfigurationRoomTrackingANDROIDSYS , XrSpatialCapabilityConfigurationStreetscapeGeometryANDROIDX2 - O parâmetro
capabilityConfigCountprecisa ser maior que0
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éNULLou um ponteiro para a próxima estrutura em uma cadeia de estruturas.capabilityé um XrSpatialCapabilityEXT .enabledComponentCounté umuint32_tque descreve a contagem de elementos na matrizenabledComponents.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 extensão
XR_EXT_spatial_entityprecisa ser ativada antes de usar XrSpatialCapabilityConfigurationBaseHeaderEXT. -
nextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas -
capabilityprecisa ser um valor XrSpatialCapabilityEXT válido. -
enabledComponentsprecisa ser um ponteiro para uma matriz deenabledComponentCountvalores XrSpatialComponentTypeEXT válidos. - O parâmetro
enabledComponentCountprecisa ser maior que0
A função xrCreateSpatialContextCompleteEXT é definida como:
XrResult xrCreateSpatialContextCompleteEXT(
XrSession session,
XrFutureEXT future,
XrCreateSpatialContextCompletionEXT* completion);
Descrições dos parâmetros
sessioné o XrSession transmitido anteriormente para xrCreateSpatialContextAsyncEXT ::session.futureé oXrFutureEXTrecebido de xrCreateSpatialContextAsyncEXT .completioné um ponteiro para um XrCreateSpatialContextCompletionEXT .
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)
- A extensão
XR_EXT_spatial_entityprecisa ser ativada antes de chamar xrCreateSpatialContextCompleteEXT. -
sessionprecisa ser um identificador XrSession válido -
completionprecisa ser um ponteiro para uma estrutura XrCreateSpatialContextCompletionEXT.
Códigos de retorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_FUTURE_INVALID_EXTXR_ERROR_FUTURE_PENDING_EXTXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_VALIDATION_FAILURE
A estrutura XrCreateSpatialContextCompletionEXT é definida como:
typedef struct XrCreateSpatialContextCompletionEXT {
XrStructureType type;
void* next;
XrResult futureResult;
XrSpatialContextEXT spatialContext;
} XrCreateSpatialContextCompletionEXT;
Descrições de membros
typeé o XrStructureType dessa estrutura.nextéNULLou um ponteiro para a próxima estrutura em uma cadeia de estruturas.futureResulté o XrResult da operação de criação do contexto espacial.spatialContexté um XrSpatialContextEXT criado usando os dados e a configuração em xrCreateSpatialContextAsyncEXT ::createInfo.
Códigos de retorno futuros
Valores de futureResult:
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_RUNTIME_FAILUREXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHEDXR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT
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)
- A extensão
XR_EXT_spatial_entityprecisa ser ativada antes de usar XrCreateSpatialContextCompletionEXT. -
typeprecisa serXR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXT -
nextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas -
futureResultprecisa ser um valor XrResult válido - Se
spatialContextnão for XR_NULL_HANDLE ,spatialContextprecisa ser um identificador XrSpatialContextEXT válido.
Destruir o contexto espacial
A função xrDestroySpatialContextEXT é definida como:
XrResult xrDestroySpatialContextEXT(
XrSpatialContextEXT spatialContext);
Descrições dos parâmetros
spatialContexté um XrSpatialContextEXT criado anteriormente por xrCreateSpatialContextAsyncEXT .
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)
- A extensão
XR_EXT_spatial_entityprecisa ser ativada antes de chamar xrDestroySpatialContextEXT. -
spatialContextprecisa ser um identificador XrSpatialContextEXT válido
Concorrência segura
- O acesso a
spatialContexte a qualquer identificador filho precisa ser sincronizado externamente.
Códigos de retorno
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_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
spatialContexté um XrSpatialContextEXT criado anteriormente usando xrCreateSpatialContextAsyncEXT .createInfoé um ponteiro para a estrutura XrSpatialEntityFromIdCreateInfoEXT.spatialEntityé o identificador XrSpatialEntityEXT retornado.
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)
- A extensão
XR_EXT_spatial_entityprecisa ser ativada antes de chamar xrCreateSpatialEntityFromIdEXT. -
spatialContextprecisa ser um identificador XrSpatialContextEXT válido -
createInfoprecisa ser um ponteiro para uma estrutura XrSpatialEntityFromIdCreateInfoEXT válida. -
spatialEntityprecisa ser um ponteiro para um identificador XrSpatialEntityEXT.
Códigos de retorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
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éNULLou 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é oXrSpatialEntityIdEXTda entidade para que o aplicativo quer criar um identificador.
Uso válido (implícito)
- A extensão
XR_EXT_spatial_entityprecisa ser ativada antes de usar XrSpatialEntityFromIdCreateInfoEXT. -
typeprecisa serXR_TYPE_SPATIAL_ENTITY_FROM_ID_CREATE_INFO_EXT -
nextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas
Destruir o identificador de entidade espacial
A função xrDestroySpatialEntityEXT é definida como:
XrResult xrDestroySpatialEntityEXT(
XrSpatialEntityEXT spatialEntity);
Descrições dos parâmetros
spatialEntityé um identificador de um XrSpatialEntityEXT criado anteriormente por uma função como xrCreateSpatialEntityFromIdEXT .
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)
- A extensão
XR_EXT_spatial_entityprecisa ser ativada antes de chamar xrDestroySpatialEntityEXT. -
spatialEntityprecisa ser um identificador XrSpatialEntityEXT válido
Concorrência segura
- O acesso a
spatialEntitye a qualquer identificador filho precisa ser sincronizado externamente.
Códigos de retorno
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_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
spatialContexté um XrSpatialContextEXT criado anteriormente usando xrCreateSpatialContextAsyncEXT .createInfoé um ponteiro para um XrSpatialDiscoverySnapshotCreateInfoEXT .futureé um ponteiro para umXrFutureEXT.
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)
- A extensão
XR_EXT_spatial_entityprecisa ser ativada antes de chamar xrCreateSpatialDiscoverySnapshotAsyncEXT. -
spatialContextprecisa ser um identificador XrSpatialContextEXT válido -
createInfoprecisa ser um ponteiro para uma estrutura XrSpatialDiscoverySnapshotCreateInfoEXT válida -
futureprecisa ser um ponteiro para um valorXrFutureEXT.
Códigos de retorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXTXR_ERROR_VALIDATION_FAILURE
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éNULLou 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é umuint32_tque descreve a contagem de elementos na matrizcomponentTypes.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 extensão
XR_EXT_spatial_entityprecisa ser ativada antes de usar XrSpatialDiscoverySnapshotCreateInfoEXT. -
typeprecisa serXR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT -
nextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas . Consulte também: XrSpatialBoundsBoxfANDROID , XrSpatialBoundsFrustumfANDROID , XrSpatialBoundsSpherefANDROID , XrSpatialDiscoveryPersistenceUuidFilterEXT , XrSpatialDiscoveryRoomBoundaryFilterANDROIDSYS , XrSpatialDiscoveryUniqueEntitiesFilterANDROID , XrSpatialFilterTrackingStateEXT , XrSpatialRaycastInfoANDROID - Se
componentTypeCountnão for0,componentTypesprecisa ser um ponteiro para uma matriz de valores XrSpatialComponentTypeEXT válidos decomponentTypeCount.
A função xrCreateSpatialDiscoverySnapshotCompleteEXT é definida como:
XrResult xrCreateSpatialDiscoverySnapshotCompleteEXT(
XrSpatialContextEXT spatialContext,
const XrCreateSpatialDiscoverySnapshotCompletionInfoEXT* createSnapshotCompletionInfo,
XrCreateSpatialDiscoverySnapshotCompletionEXT* completion);
Descrições dos parâmetros
spatialContexté o XrSpatialContextEXT transmitido anteriormente para xrCreateSpatialDiscoverySnapshotAsyncEXT ::spatialContext.createSnapshotCompletionInfoé um ponteiro para um XrCreateSpatialDiscoverySnapshotCompletionInfoEXT que fornece informações sobre a conclusão da solicitação de criação de snapshot de descoberta.completioné um ponteiro para um XrCreateSpatialDiscoverySnapshotCompletionEXT .
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)
- A extensão
XR_EXT_spatial_entityprecisa ser ativada antes de chamar xrCreateSpatialDiscoverySnapshotCompleteEXT. -
spatialContextprecisa ser um identificador XrSpatialContextEXT válido -
createSnapshotCompletionInfoprecisa ser um ponteiro para uma estrutura XrCreateSpatialDiscoverySnapshotCompletionInfoEXT válida. -
completionprecisa ser um ponteiro para uma estrutura XrCreateSpatialDiscoverySnapshotCompletionEXT.
Códigos de retorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_FUTURE_INVALID_EXTXR_ERROR_FUTURE_PENDING_EXTXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
A estrutura XrCreateSpatialDiscoverySnapshotCompletionInfoEXT é definida como:
typedef struct XrCreateSpatialDiscoverySnapshotCompletionInfoEXT {
XrStructureType type;
const void* next;
XrSpace baseSpace;
XrTime time;
XrFutureEXT future;
} XrCreateSpatialDiscoverySnapshotCompletionInfoEXT;
Descrições de membros
typeé o XrStructureType dessa estrutura.nextéNULLou um ponteiro para a próxima estrutura em uma cadeia de estruturas.baseSpaceé o XrSpace em que todos os locais do XrSpatialSnapshotEXT de descoberta estarão localizados.timeé oXrTimeem que todos os locais do XrSpatialSnapshotEXT de descoberta estarão localizados.futureé oXrFutureEXTrecebido de xrCreateSpatialDiscoverySnapshotAsyncEXT.
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 extensão
XR_EXT_spatial_entityprecisa ser ativada antes de usar XrCreateSpatialDiscoverySnapshotCompletionInfoEXT -
typeprecisa serXR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXT -
nextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas -
baseSpaceprecisa ser um identificador XrSpace válido
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éNULLou 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:
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_RUNTIME_FAILUREXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHED
Uso válido (implícito)
- A extensão
XR_EXT_spatial_entityprecisa ser ativada antes de usar XrCreateSpatialDiscoverySnapshotCompletionEXT. -
typeprecisa serXR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXT -
nextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas -
futureResultprecisa ser um valor XrResult válido - Se
snapshotnão for XR_NULL_HANDLE ,snapshotprecisa ser um identificador XrSpatialSnapshotEXT válido.
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éNULLou 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)
- A extensão
XR_EXT_spatial_entityprecisa ser ativada antes de usar XrEventDataSpatialDiscoveryRecommendedEXT. -
typeprecisa serXR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT -
nextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas
Consultar dados de componentes
A função xrQuerySpatialComponentDataEXT é definida como:
XrResult xrQuerySpatialComponentDataEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialComponentDataQueryConditionEXT* queryCondition,
XrSpatialComponentDataQueryResultEXT* queryResult);
Descrições dos parâmetros
snapshoté um XrSpatialSnapshotEXT fornecido anteriormente por xrCreateSpatialDiscoverySnapshotCompleteEXT ou xrCreateSpatialUpdateSnapshotEXT .queryConditioné um ponteiro para uma estrutura XrSpatialComponentDataQueryConditionEXT.queryResulté um ponteiro para uma estrutura XrSpatialComponentDataQueryResultEXT.
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)
- A extensão
XR_EXT_spatial_entityprecisa ser ativada antes de chamar xrQuerySpatialComponentDataEXT. -
snapshotprecisa ser um identificador XrSpatialSnapshotEXT válido -
queryConditionprecisa ser um ponteiro para uma estrutura XrSpatialComponentDataQueryConditionEXT válida. -
queryResultprecisa ser um ponteiro para uma estrutura XrSpatialComponentDataQueryResultEXT.
Códigos de retorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_VALIDATION_FAILURE
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_EXTeXR_SPATIAL_COMPONENT_TYPE_PARENT_EXT - As entidades 3 e 4 têm componentes
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXTeXR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT - A entidade 5 tem componentes
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTeXR_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éNULLou um ponteiro para a próxima estrutura em uma cadeia de estruturas.componentTypeCounté umuint32_tque descreve a contagem de elementos na matrizcomponentTypes.componentTypesé uma matriz de XrSpatialComponentTypeEXT para receber os dados do snapshot.
Uso válido (implícito)
- A extensão
XR_EXT_spatial_entityprecisa ser ativada antes de usar XrSpatialComponentDataQueryConditionEXT. -
typeprecisa serXR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT -
nextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas . Consulte também: XrSpatialDiscoveryPersistenceUuidFilterEXT , XrSpatialFilterArchetypeEXT , XrSpatialFilterTrackingStateEXT - Se
componentTypeCountnão for0,componentTypesprecisa ser um ponteiro para uma matriz de valores XrSpatialComponentTypeEXT válidos decomponentTypeCount.
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éNULLou um ponteiro para a próxima estrutura em uma cadeia de estruturas.entityIdCapacityInputé a capacidade da matrizentityIdsou 0 para indicar uma solicitação de recuperação da capacidade necessária.entityIdCountOutputé o número deXrSpatialEntityIdEXTementityIdsou a capacidade necessária casoentityIdCapacityInputseja insuficiente.entityIdsé uma matriz deXrSpatialEntityIdEXT. Ele pode serNULLseentityIdCapacityInputfor 0.entityStateCapacityInputé a capacidade da matrizentityStatesou 0 para indicar uma solicitação de recuperação da capacidade necessária.entityStateCountOutputé o número de XrSpatialEntityTrackingStateEXT ementityStatesou a capacidade necessária casoentityStateCapacityInputseja insuficiente. Esse precisa ser sempre igual aentityIdCountOutput.entityStatesé uma matriz de XrSpatialEntityTrackingStateEXT . Ele pode serNULLseentityStateCapacityInputfor 0.- Consulte a seção Parâmetros de tamanho do buffer para uma descrição detalhada de como recuperar o tamanho
entityIdsnecessá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)
- A extensão
XR_EXT_spatial_entityprecisa ser ativada antes de usar XrSpatialComponentDataQueryResultEXT. -
typeprecisa serXR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT -
nextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas . Consulte também: XrSpatialComponentAnchorListEXT , XrSpatialComponentAnnotationQuadListANDROID , XrSpatialComponentBounded2DListEXT , XrSpatialComponentBounded3DListEXT , XrSpatialComponentConfidenceListANDROIDSYS , XrSpatialComponentImage2DListEXT , XrSpatialComponentKeyboardSemanticLabelListEXT , XrSpatialComponentMarkerListEXT , XrSpatialComponentMaterialTypeListANDROIDSYS , XrSpatialComponentMesh2DListEXT , XrSpatialComponentMesh3DListEXT , XrSpatialComponentMesh3DNormalsListEXT , XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT , XrSpatialComponentMesh3DVertexSemanticLabelsListEXT , XrSpatialComponentMouseSemanticLabelListEXT , XrSpatialComponentObjectSemanticLabelListANDROID , XrSpatialComponentObjectSemanticLabelListEXT , XrSpatialComponentOccupancyGridListANDROIDX1 , XrSpatialComponentParentListEXT , XrSpatialComponentPersistenceListEXT , XrSpatialComponentPlaneAlignmentListEXT , XrSpatialComponentPlaneSemanticLabelListEXT , XrSpatialComponentPolygon2DListEXT , XrSpatialComponentRaycastResultListANDROID , XrSpatialComponentRoomEmptinessListANDROIDSYS , XrSpatialComponentRoomListANDROIDSYS , XrSpatialComponentStreetscapeGeometryMetadataListANDROIDX2 , XrSpatialComponentSubsumedByListANDROID - Se
entityIdCapacityInputnão for0,entityIdsprecisa ser um ponteiro para uma matriz de valoresentityIdCapacityInputXrSpatialEntityIdEXT. - Se
entityStateCapacityInputnão for0,entityStatesprecisará ser um ponteiro para uma matriz de valoresentityStateCapacityInputXrSpatialEntityTrackingStateEXT.
typedef enum XrSpatialEntityTrackingStateEXT {
XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT = 1,
XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT = 2,
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT = 3,
XR_SPATIAL_ENTITY_TRACKING_STATE_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialEntityTrackingStateEXT;
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_EXTparaXR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXTse 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_EXTparaXR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXTouXR_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_EXTouXR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXTparaXR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXTse 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 forXR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXTouXR_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
bufferIdoXrSpatialBufferIdEXTdos dados do buffer.bufferTypeé o XrSpatialBufferTypeEXT para indicar o tipo de dados embufferId. O aplicativo pode usarbufferTypepara 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)
- A extensão
XR_EXT_spatial_entityprecisa ser ativada antes de usar XrSpatialBufferEXT. -
bufferTypeprecisa ser um valor XrSpatialBufferTypeEXT válido
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
XR_SPATIAL_BUFFER_TYPE_STRING_EXTOXrSpatialBufferIdEXTcan pode ser transmitido para xrGetSpatialBufferStringEXT para recuperar um buffer de string.XR_SPATIAL_BUFFER_TYPE_UINT8_EXTOXrSpatialBufferIdEXTpode ser transmitido para xrGetSpatialBufferUint8EXT para recuperar um bufferuint8_t.XR_SPATIAL_BUFFER_TYPE_UINT16_EXTOXrSpatialBufferIdEXTpode ser transmitido para xrGetSpatialBufferUint16EXT para recuperar um bufferuint16_t.XR_SPATIAL_BUFFER_TYPE_UINT32_EXTOXrSpatialBufferIdEXTpode ser transmitido para xrGetSpatialBufferUint32EXT para recuperar um bufferuint32_t.XR_SPATIAL_BUFFER_TYPE_FLOAT_EXTO canXrSpatialBufferIdEXTpode ser transmitido para xrGetSpatialBufferFloatEXT para recuperar um bufferfloat.XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXTOXrSpatialBufferIdEXTpode ser transmitido para xrGetSpatialBufferVector2fEXT para recuperar um buffer XrVector2f.XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXTOXrSpatialBufferIdEXTpode ser transmitido para xrGetSpatialBufferVector3fEXT para recuperar um buffer XrVector3f.
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 .infoconté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 casobufferCapacityInputseja insuficiente.bufferé uma matriz dechar. Ele pode serNULLsebufferCapacityInputfor 0.- Consulte a seção Parâmetros de tamanho do buffer para uma descrição detalhada de como recuperar o tamanho
buffernecessá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_entityprecisa ser ativada antes de chamar xrGetSpatialBufferStringEXT. -
snapshotprecisa ser um identificador XrSpatialSnapshotEXT válido -
infoprecisa ser um ponteiro para uma estrutura XrSpatialBufferGetInfoEXT válida -
bufferCountOutputprecisa ser um ponteiro para um valoruint32_t. - Se
bufferCapacityInputnão for0,bufferprecisa ser um ponteiro para uma matriz de valores charbufferCapacityInput.
Códigos de retorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
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 .infoconté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 matrizbufferou a capacidade necessária casobufferCapacityInputseja insuficiente.bufferé uma matriz deuint8_t. Ele pode serNULLsebufferCapacityInputfor 0.- Consulte a seção Parâmetros de tamanho do buffer para uma descrição detalhada de como recuperar o tamanho
buffernecessá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_entityprecisa ser ativada antes de chamar xrGetSpatialBufferUint8EXT. -
snapshotprecisa ser um identificador XrSpatialSnapshotEXT válido -
infoprecisa ser um ponteiro para uma estrutura XrSpatialBufferGetInfoEXT válida -
bufferCountOutputprecisa ser um ponteiro para um valoruint32_t. - Se
bufferCapacityInputnão for0,bufferprecisa ser um ponteiro para uma matriz de valoresbufferCapacityInputuint8_t.
Códigos de retorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
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 .infoconté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 matrizbufferou a capacidade necessária casobufferCapacityInputseja insuficiente.bufferé uma matriz deuint16_t. Ele pode serNULLsebufferCapacityInputfor 0.- Consulte a seção Parâmetros de tamanho do buffer para uma descrição detalhada de como recuperar o tamanho
buffernecessá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_entityprecisa ser ativada antes de chamar xrGetSpatialBufferUint16EXT. -
snapshotprecisa ser um identificador XrSpatialSnapshotEXT válido -
infoprecisa ser um ponteiro para uma estrutura XrSpatialBufferGetInfoEXT válida -
bufferCountOutputprecisa ser um ponteiro para um valoruint32_t. - Se
bufferCapacityInputnão for0,bufferprecisa ser um ponteiro para uma matriz de valoresbufferCapacityInputuint16_t.
Códigos de retorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
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 .infoconté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 matrizbufferou a capacidade necessária casobufferCapacityInputseja insuficiente.bufferé uma matriz deuint32_t. Ele pode serNULLsebufferCapacityInputfor 0.- Consulte a seção Parâmetros de tamanho do buffer para uma descrição detalhada de como recuperar o tamanho
buffernecessá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_entityprecisa ser ativada antes de chamar xrGetSpatialBufferUint32EXT. -
snapshotprecisa ser um identificador XrSpatialSnapshotEXT válido -
infoprecisa ser um ponteiro para uma estrutura XrSpatialBufferGetInfoEXT válida -
bufferCountOutputprecisa ser um ponteiro para um valoruint32_t. - Se
bufferCapacityInputnão for0,bufferprecisa ser um ponteiro para uma matriz de valoresbufferCapacityInputuint32_t.
Códigos de retorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
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 .infoconté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 matrizbufferou a capacidade necessária casobufferCapacityInputseja insuficiente.bufferé uma matriz defloat. Ele pode serNULLsebufferCapacityInputfor 0.- Consulte a seção Parâmetros de tamanho do buffer para uma descrição detalhada de como recuperar o tamanho
buffernecessá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_entityprecisa ser ativada antes de chamar xrGetSpatialBufferFloatEXT. -
snapshotprecisa ser um identificador XrSpatialSnapshotEXT válido -
infoprecisa ser um ponteiro para uma estrutura XrSpatialBufferGetInfoEXT válida -
bufferCountOutputprecisa ser um ponteiro para um valoruint32_t. - Se
bufferCapacityInputnão for0,bufferprecisa ser um ponteiro para uma matriz de valoresbufferCapacityInputfloat.
Códigos de retorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
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 .infoconté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 matrizbufferou a capacidade necessária casobufferCapacityInputseja insuficiente.bufferé uma matriz de XrVector2f . Ele pode serNULLsebufferCapacityInputfor 0.- Consulte a seção Parâmetros de tamanho do buffer para uma descrição detalhada de como recuperar o tamanho
buffernecessá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_entityprecisa ser ativada antes de chamar xrGetSpatialBufferVector2fEXT. -
snapshotprecisa ser um identificador XrSpatialSnapshotEXT válido -
infoprecisa ser um ponteiro para uma estrutura XrSpatialBufferGetInfoEXT válida -
bufferCountOutputprecisa ser um ponteiro para um valoruint32_t. - Se
bufferCapacityInputnão for0,bufferprecisa ser um ponteiro para uma matriz de estruturasbufferCapacityInputXrVector2f.
Códigos de retorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
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 .infoconté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 matrizbufferou a capacidade necessária casobufferCapacityInputseja insuficiente.bufferé uma matriz de XrVector3f . Ele pode serNULLsebufferCapacityInputfor 0.- Consulte a seção Parâmetros de tamanho do buffer para uma descrição detalhada de como recuperar o tamanho
buffernecessá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_entityprecisa ser ativada antes de chamar xrGetSpatialBufferVector3fEXT. -
snapshotprecisa ser um identificador XrSpatialSnapshotEXT válido -
infoprecisa ser um ponteiro para uma estrutura XrSpatialBufferGetInfoEXT válida -
bufferCountOutputprecisa ser um ponteiro para um valoruint32_t. - Se
bufferCapacityInputnão for0,bufferprecisa ser um ponteiro para uma matriz de estruturas XrVector3f debufferCapacityInput.
Códigos de retorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
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éNULLou um ponteiro para a próxima estrutura em uma cadeia de estruturas.bufferIdumXrSpatialBufferIdEXTpara o buffer cujos dados serão recuperados.
Uso válido (implícito)
- A extensão
XR_EXT_spatial_entityprecisa ser ativada antes de usar XrSpatialBufferGetInfoEXT. -
typeprecisa serXR_TYPE_SPATIAL_BUFFER_GET_INFO_EXT -
nextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas
#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
spatialContexté um XrSpatialContextEXT criado anteriormente usando xrCreateSpatialContextAsyncEXT .createInfoé um ponteiro para um XrSpatialUpdateSnapshotCreateInfoEXT .snapshoté um ponteiro para o resultado XrSpatialSnapshotEXT .
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)
- A extensão
XR_EXT_spatial_entityprecisa ser ativada antes de chamar xrCreateSpatialUpdateSnapshotEXT. -
spatialContextprecisa ser um identificador XrSpatialContextEXT válido -
createInfoprecisa ser um ponteiro para uma estrutura XrSpatialUpdateSnapshotCreateInfoEXT válida -
snapshotprecisa ser um ponteiro para um identificador XrSpatialSnapshotEXT
Códigos de retorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
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éNULLou 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é umuint32_tque descreve a contagem de elementos na matrizentities.entitiesé uma matriz de XrSpatialEntityEXT para que o tempo de execução precise incluir os dados do componente no snapshot.componentTypeCounté umuint32_tque descreve a contagem de elementos na matrizcomponentTypes.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é oXrTimeem que todos os locais da atualização XrSpatialSnapshotEXT serão localizados.
Uso válido (implícito)
- A extensão
XR_EXT_spatial_entityprecisa ser ativada antes de usar XrSpatialUpdateSnapshotCreateInfoEXT -
typeprecisa serXR_TYPE_SPATIAL_UPDATE_SNAPSHOT_CREATE_INFO_EXT -
nextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas -
entitiesprecisa ser um ponteiro para uma matriz deentityCountidentificadores XrSpatialEntityEXT válidos. - Se
componentTypeCountnão for0,componentTypesprecisa ser um ponteiro para uma matriz de valores XrSpatialComponentTypeEXT válidos decomponentTypeCount. -
baseSpaceprecisa ser um identificador XrSpace válido - O parâmetro
entityCountprecisa ser maior que0 -
baseSpacee os elementos deentitiesprecisam 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
snapshoté um XrSpatialSnapshotEXT fornecido anteriormente por xrCreateSpatialDiscoverySnapshotCompleteEXT ou xrCreateSpatialUpdateSnapshotEXT .
O aplicativo pode chamar xrDestroySpatialSnapshotEXT para destruir o identificador XrSpatialSnapshotEXT e os recursos associados a ele.
Uso válido (implícito)
- A extensão
XR_EXT_spatial_entityprecisa ser ativada antes de chamar xrDestroySpatialSnapshotEXT. -
snapshotprecisa ser um identificador XrSpatialSnapshotEXT válido
Concorrência segura
- O acesso a
snapshote a qualquer identificador filho precisa ser sincronizado externamente.
Códigos de retorno
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_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.extentssão extensões do componente 2D delimitado ao longo do eixo x (extents.width), eixo y (extents.height), centralizadas emcenter.
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)
- A extensão
XR_EXT_spatial_entityprecisa ser ativada antes de usar XrSpatialBounded2DDataEXT.
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éNULLou 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é umuint32_tque descreve a contagem de elementos na matrizbounds.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)
- A extensão
XR_EXT_spatial_entityprecisa ser ativada antes de usar XrSpatialComponentBounded2DListEXT. -
typeprecisa serXR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXT -
nextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas -
boundsprecisa ser um ponteiro para uma matriz de estruturasboundCountXrSpatialBounded2DDataEXT - O parâmetro
boundCountprecisa ser maior que0
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éNULLou 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é umuint32_tque descreve a contagem de elementos na matrizbounds.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)
- A extensão
XR_EXT_spatial_entityprecisa ser ativada antes de usar XrSpatialComponentBounded3DListEXT. -
typeprecisa serXR_TYPE_SPATIAL_COMPONENT_BOUNDED_3D_LIST_EXT -
nextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas -
boundsprecisa ser um ponteiro para uma matriz de estruturasboundCountXrBoxf. - O parâmetro
boundCountprecisa ser maior que0
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éNULLou 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é umuint32_tque descreve a contagem de elementos na matrizparents.parentsé uma matriz deXrSpatialEntityIdEXT.
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_entityprecisa ser ativada antes de usar XrSpatialComponentParentListEXT. -
typeprecisa serXR_TYPE_SPATIAL_COMPONENT_PARENT_LIST_EXT -
nextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas -
parentsprecisa ser um ponteiro para uma matriz de valoresparentCountXrSpatialEntityIdEXT. - O parâmetro
parentCountprecisa ser maior que0
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 aorigin.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 novertexBuffer. 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)
- A extensão
XR_EXT_spatial_entityprecisa ser ativada antes de usar XrSpatialMeshDataEXT. -
vertexBufferprecisa ser uma estrutura XrSpatialBufferEXT válida. -
indexBufferprecisa ser uma estrutura XrSpatialBufferEXT válida.
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éNULLou um ponteiro para a próxima estrutura em uma cadeia de estruturas.meshCounté umuint32_tque descreve a contagem de elementos na matrizmeshes.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)
- A extensão
XR_EXT_spatial_entityprecisa ser ativada antes de usar XrSpatialComponentMesh3DListEXT -
typeprecisa serXR_TYPE_SPATIAL_COMPONENT_MESH_3D_LIST_EXT -
nextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas -
meshesprecisa ser um ponteiro para uma matriz de estruturasmeshCountXrSpatialMeshDataEXT. - O parâmetro
meshCountprecisa ser maior que0
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
typeé o XrStructureType dessa estrutura.nextéNULLou um ponteiro para a próxima estrutura em uma cadeia de estruturas.trackingStateé o XrSpatialEntityTrackingStateEXT para o qual o aplicativo quer aplicar o filtro.
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)
- A extensão
XR_EXT_spatial_entityprecisa ser ativada antes de usar XrSpatialFilterTrackingStateEXT -
typeprecisa serXR_TYPE_SPATIAL_FILTER_TRACKING_STATE_EXT -
nextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas -
trackingStateprecisa ser um valor XrSpatialEntityTrackingStateEXT válido
Exemplo de código
Uso de aplicativos
Os aplicativos normalmente usam a extensão de entidade espacial no seguinte padrão:
- Um aplicativo primeiro enumera os recursos espaciais do sistema usando xrEnumerateSpatialCapabilitiesEXT . Em seguida, ele inspeciona a matriz retornada de XrSpatialCapabilityEXT e enumera os componentes e recursos compatíveis com cada uma dessas funcionalidades usando xrEnumerateSpatialCapabilityComponentTypesEXT e xrEnumerateSpatialCapabilityFeaturesEXT, respectivamente. Isso dá ao aplicativo uma visão completa dos componentes que ele pode ativar e das configurações aceitas pelo recurso.
- Em seguida, o aplicativo cria um ou vários manipuladores XrSpatialContextEXT com configurações específicas de capacidade espacial. Essas configurações ativam e configuram uma capacidade específica no contexto espacial, além de ativar e configurar componentes para essas capacidades.
- Para cada XrSpatialContextEXT , o aplicativo aguarda o recebimento de eventos XrEventDataSpatialDiscoveryRecommendedEXT para esse XrSpatialContextEXT antes de usar xrCreateSpatialDiscoverySnapshotAsyncEXT para descobrir entidades espaciais. Quando essa operação assíncrona for concluída, o aplicativo vai receber um identificador XrSpatialSnapshotEXT.
- O aplicativo consulta as entidades e os dados de componentes incluídos neste XrSpatialSnapshotEXT usando xrQuerySpatialComponentDataEXT . O aplicativo lê os dados mais recentes do componente das entidades consultadas em estruturas anexadas à próxima cadeia de XrSpatialComponentDataQueryResultEXT se o estado da entidade for
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT. - Se houver entidades específicas que o aplicativo identifica como interessantes e quer receber atualizações ao longo do tempo, ele vai criar identificadores XrSpatialEntityEXT para essas entidades usando xrCreateSpatialEntityFromIdEXT . O aplicativo recebe atualizações para essas entidades interessantes usando xrCreateSpatialUpdateSnapshotEXT e a mesma função xrQuerySpatialComponentDataEXT no XrSpatialSnapshotEXT recém-criado para receber os dados de componente mais recentes dessas entidades.
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,
- A extensão também precisa definir uma estrutura de lista para esse componente, permitindo que o aplicativo transmita uma matriz para o tempo de execução preencher com os dados de cada uma das entidades espaciais que atendem a xrQuerySpatialComponentDataEXT ::
queryCondition. Alguns exemplos dessas estruturas de lista são XrSpatialComponentParentListEXT e XrSpatialComponentBounded2DListEXT . Se o tamanho dos dados do componente for variável e exigir que o aplicativo use o idioma de duas chamadas para consultar, os dados do componente deverão fornecer um XrSpatialBufferEXT para cada dado de tamanho variável na estrutura da lista e deverão especificar o XrSpatialBufferTypeEXT para cada buffer. O aplicativo pode consultar os dados do buffer usando funções definidas em Idioma de duas chamadas para dados de componentes . Um exemplo dessa estrutura é XrSpatialMeshDataEXT, que está incluída em XrSpatialComponentMesh3DListEXT . - A extensão também pode fornecer estruturas que o aplicativo pode encadear a XrSpatialComponentDataQueryConditionEXT ::
nextpara fornecer filtros adicionais para a consulta relacionada aos dados desse componente.
- A extensão também precisa definir uma estrutura de lista para esse componente, permitindo que o aplicativo transmita uma matriz para o tempo de execução preencher com os dados de cada uma das entidades espaciais que atendem a xrQuerySpatialComponentDataEXT ::
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 ,
- Ele também precisa especificar a lista de XrSpatialComponentTypeEXT que os tempos de execução precisam fornecer em entidades para essa capacidade.
- ele também precisa fornecer estruturas derivadas de XrSpatialCapabilityConfigurationBaseHeaderEXT que permitam a configuração desse recurso.
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çãoxrGetSpatialBuffer*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
enabledComponentsde 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., eXrSpatialIkeaSofa, 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
XrSpatialBufferIdEXTXrSpatialEntityIdEXT
Novos tipos de objeto
Novos comandos
- xrCreateSpatialContextAsyncEXT
- xrCreateSpatialContextCompleteEXT
- xrCreateSpatialDiscoverySnapshotAsyncEXT
- xrCreateSpatialDiscoverySnapshotCompleteEXT
- xrCreateSpatialEntityFromIdEXT
- xrCreateSpatialUpdateSnapshotEXT
- xrDestroySpatialContextEXT
- xrDestroySpatialEntityEXT
- xrDestroySpatialSnapshotEXT
- xrEnumerateSpatialCapabilitiesEXT
- xrEnumerateSpatialCapabilityComponentTypesEXT
- xrEnumerateSpatialCapabilityFeaturesEXT
- xrGetSpatialBufferFloatEXT
- xrGetSpatialBufferStringEXT
- xrGetSpatialBufferUint16EXT
- xrGetSpatialBufferUint32EXT
- xrGetSpatialBufferUint8EXT
- xrGetSpatialBufferVector2fEXT
- xrGetSpatialBufferVector3fEXT
- xrQuerySpatialComponentDataEXT
Novas estruturas
- XrCreateSpatialContextCompletionEXT
- XrCreateSpatialDiscoverySnapshotCompletionEXT
- XrCreateSpatialDiscoverySnapshotCompletionInfoEXT
- XrEventDataSpatialDiscoveryRecommendedEXT
- XrSpatialBounded2DDataEXT
- XrSpatialBufferEXT
- XrSpatialBufferGetInfoEXT
- XrSpatialCapabilityComponentTypesEXT
- XrSpatialCapabilityConfigurationBaseHeaderEXT
- XrSpatialComponentDataQueryConditionEXT
- XrSpatialComponentDataQueryResultEXT
- XrSpatialContextCreateInfoEXT
- XrSpatialDiscoverySnapshotCreateInfoEXT
- XrSpatialEntityFromIdCreateInfoEXT
- XrSpatialMeshDataEXT
- XrSpatialUpdateSnapshotCreateInfoEXT
Extensão de XrSpatialComponentDataQueryResultEXT :
Extensão de XrSpatialDiscoverySnapshotCreateInfoEXT , XrSpatialComponentDataQueryConditionEXT :
Novos tipos enumerados
- XrSpatialBufferTypeEXT
- XrSpatialCapabilityEXT
- XrSpatialCapabilityFeatureEXT
- XrSpatialComponentTypeEXT
- XrSpatialEntityTrackingStateEXT
Novas constantes de tipo enumerado
XR_EXT_SPATIAL_ENTITY_EXTENSION_NAMEXR_EXT_spatial_entity_SPEC_VERSIONExtensão de XrObjectType :
XR_OBJECT_TYPE_SPATIAL_CONTEXT_EXTXR_OBJECT_TYPE_SPATIAL_ENTITY_EXTXR_OBJECT_TYPE_SPATIAL_SNAPSHOT_EXT
Extensão de XrResult :
XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXTXR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXTXR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXTXR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXTXR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXT
Extensão de XrStructureType :
XR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXTXR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXTXR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXTXR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXTXR_TYPE_SPATIAL_BUFFER_GET_INFO_EXTXR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXTXR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXTXR_TYPE_SPATIAL_COMPONENT_BOUNDED_3D_LIST_EXTXR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXTXR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXTXR_TYPE_SPATIAL_COMPONENT_MESH_3D_LIST_EXTXR_TYPE_SPATIAL_COMPONENT_PARENT_LIST_EXTXR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXTXR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXTXR_TYPE_SPATIAL_ENTITY_FROM_ID_CREATE_INFO_EXTXR_TYPE_SPATIAL_FILTER_TRACKING_STATE_EXTXR_TYPE_SPATIAL_UPDATE_SNAPSHOT_CREATE_INFO_EXT
Problemas
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_EXTna entidade, e o rastreamento de objetos forneceXR_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 terXR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTeXR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXTna 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