XR_EXT_spatial_entity
Stringa del nome
XR_EXT_spatial_entity
Tipo di estensione
Estensione dell'istanza
Numero di interno registrato
741
Revisione
1
Stato di ratifica
Ratificato
Dipendenze da estensioni e versioni
XR_EXT_future
Collaboratori
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
Panoramica
Questa estensione introduce i concetti e le basi per la comprensione della scena e il ragionamento spaziale in OpenXR. In questo modo vengono unificate diverse aree di funzionalità correlate ma distinte, che vengono enumerate, configurate e con cui si interagisce in modo ampiamente uniforme, come definito da questa estensione. Poiché questa estensione non dispone di definizioni concrete di nessuna di queste aree funzionali, il testo delle specifiche formali tende a essere piuttosto astratto. Gli esempi inclusi nel testo delle specifiche di questa estensione si riferiscono a volte a funzionalità definite in un'estensione correlata futura o ipotetica a scopo illustrativo, senza limitare o specificare intrinsecamente tali funzionalità aggiuntive.
I componenti principali di questa estensione sono i seguenti:
- Entità spaziali : la funzionalità è incentrata sulle entità , che offrono funzionalità molto limitate da sole.
- Componenti spaziali : queste entità hanno componenti associati che forniscono dati e comportamenti.
- Tipi di componenti spaziali : ogni componente spaziale è di un tipo di componente specifico e ogni entità ha al massimo un singolo componente di un determinato tipo di componente .
- Contesto spaziale : tutta l'interazione con le entità spaziali avviene in un contesto dopo una fase di inizializzazione e configurazione.
- Funzionalità spaziali : la manipolazione delle entità spaziali è ampiamente fornita dalle funzionalità . Una funzionalità è un'unità di funzionalità, ad esempio (senza alcuna limitazione) ancore definite dall'applicazione, rilevamento di piani o monitoraggio di immagini. Ogni funzionalità viene in genere definita in un'estensione separata (attivata al momento della creazione dell'istanza come di consueto) ed è abilitata per un contesto specifico al momento della creazione.
- Ogni funzionalità è associata a un insieme di tipi di componenti per i quali i componenti sono presenti in ogni entità esposta da quella funzionalità . L'estensione che definisce una funzionalità specifica quali tipi di componenti sono obbligatori per la funzionalità ("garantiti"), mentre la stessa estensione o altre possono specificare tipi di componenti facoltativi forniti da alcune potenziali implementazioni. Un numero qualsiasi di funzionalità può fornire alle entità componenti di un determinato tipo di componente , che sono utilizzabili in modo uniforme indipendentemente dalla funzionalità che li ha prodotti.
- Funzionalità di rilevamento spaziale : inoltre, alcune funzionalità richiedono la configurazione e sono quindi parametrizzate dalle funzionalità di rilevamento .
Questa estensione fornisce un meccanismo per enumerare i componenti forniti da ogni funzionalità supportata sul sistema attuale, sia quelli obbligatori sia quelli facoltativi.
Poiché alcune implementazioni potrebbero richiedere diversi gradi di parametrizzazione per le funzionalità , questa estensione fornisce un meccanismo per enumerare le funzionalità di capacità supportate associate a una determinata capacità nel sistema attuale.
Questa estensione definisce anche diversi componenti comuni che dovrebbero essere utilizzati in un'ampia gamma di funzionalità .
Entità spaziale
Le entità spaziali sono entità che esistono in uno spazio e che hanno vari dati associati organizzati in componenti. Possono essere:
- Fisici (ad es. superfici piane come pareti e pavimenti, oggetti come sedie e librerie e così via)
- Virtuale (ad es. contenuti inseriti e condivisi da un'altra applicazione o da un altro utente),
- Definito dall'app (ad es. un'applicazione che contrassegna un'area come "soggiorno" o "cucina" o un punto come posizione in cui posizionare la TV e così via).
Gli elementi esposti tramite il sistema di azioni, come i controller o lo sguardo, non sono pensati per essere modellati come entità spaziali.
Le entità spaziali in OpenXR sono modellate come un sistema entità-componente . Ogni entità spaziale ha un insieme di componenti e ogni componente fornisce un insieme unico di dati e comportamenti per l'entità.
Le entità spaziali sono rappresentate da un atomo XrSpatialEntityIdEXT o da un handle XrSpatialEntityEXT, i cui dettagli sono forniti nella sezione Rappresentazioni di entità spaziali.
Tipi di componenti spaziali
Un'entità spaziale ha uno o più componenti che forniscono dati o comportamenti per l'entità. Consulta Componenti comuni per alcuni componenti comuni definiti da questa estensione.
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;
L'enumerazione XrSpatialComponentTypeEXT identifica i diversi tipi di componenti che il runtime potrebbe supportare.
Non tutti i tipi di componenti elencati vengono forniti da questa estensione da sola: alcuni richiedono l'attivazione di estensioni aggiuntive al momento della creazione dell'istanza, come documentato.
Gli enumeranti hanno i seguenti valori:
Descrizione enum
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT
Componente che fornisce i limiti 2D per un'entità spaziale. La struttura dell'elenco corrispondente è XrSpatialComponentBounded2DListEXT; la struttura dei dati corrispondente è XrSpatialBounded2DDataEXT
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT
Componente che fornisce i limiti 3D per un'entità spaziale. La struttura dell'elenco corrispondente è XrSpatialComponentBounded3DListEXT; la struttura dei dati corrispondente è XrBoxf
XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT
Componente che fornisce l'XrSpatialEntityIdEXT dell'elemento padre per un'entità spaziale. La struttura dell'elenco corrispondente è XrSpatialComponentParentListEXT; la struttura dei dati corrispondente è XrSpatialEntityIdEXT
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT
Componente che fornisce una mesh 3D per un'entità spaziale. La struttura dell'elenco corrispondente è XrSpatialComponentMesh3DListEXT; la struttura dei dati corrispondente è XrSpatialMeshDataEXT
XR_SPATIAL_COMPONENT_TYPE_PLANE_ALIGNMENT_EXT
Componente che fornisce l'enumerazione dell'allineamento del piano per un'entità spaziale. La struttura dell'elenco corrispondente è XrSpatialComponentPlaneAlignmentListEXT; la struttura dei dati corrispondente è XrSpatialPlaneAlignmentEXT (aggiunta dall'estensione XR_EXT_spatial_plane_tracking)
XR_SPATIAL_COMPONENT_TYPE_MESH_2D_EXT
Componente che fornisce una mesh 2D per un'entità spaziale. La struttura dell'elenco corrispondente è XrSpatialComponentMesh2DListEXT; la struttura dei dati corrispondente è XrSpatialMeshDataEXT (aggiunta dall'estensione XR_EXT_spatial_plane_tracking)
XR_SPATIAL_COMPONENT_TYPE_POLYGON_2D_EXT
Componente che fornisce un poligono di confine 2D per un'entità spaziale. La struttura dell'elenco corrispondente è XrSpatialComponentPolygon2DListEXT; la struttura dei dati corrispondente è XrSpatialPolygon2DDataEXT (aggiunta dall'estensione XR_EXT_spatial_plane_tracking)
XR_SPATIAL_COMPONENT_TYPE_PLANE_SEMANTIC_LABEL_EXT
Componente che fornisce un'etichetta semantica per un aereo. La struttura dell'elenco corrispondente è XrSpatialComponentPlaneSemanticLabelListEXT; la struttura dei dati corrispondente è XrSpatialPlaneSemanticLabelEXT (aggiunta dall'estensione XR_EXT_spatial_plane_tracking)
XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT
Un componente che descrive il tipo, l'ID e la posizione del marcatore. La struttura dell'elenco corrispondente è XrSpatialComponentMarkerListEXT; la struttura dei dati corrispondente è XrSpatialMarkerDataEXT (aggiunta dall'estensione XR_EXT_spatial_marker_tracking)
XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT
Componente che fornisce un'etichetta semantica per una scena; la struttura dell'elenco corrispondente è XrSpatialComponentObjectSemanticLabelListEXT . La struttura dei dati corrispondente è XrSpatialObjectSemanticLabelEXT . (Aggiunto dall'estensione XR_EXT_spatial_object_tracking)
XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT
Componente che fornisce un'etichetta semantica per una tastiera; la struttura dell'elenco corrispondente è XrSpatialComponentKeyboardSemanticLabelListEXT . La struttura dei dati corrispondente è XrSpatialKeyboardSemanticLabelEXT (aggiunta dall'estensione XR_EXT_spatial_object_tracking)
XR_SPATIAL_COMPONENT_TYPE_MOUSE_SEMANTIC_LABEL_EXT
Componente che fornisce un'etichetta semantica per un mouse; la struttura dell'elenco corrispondente è XrSpatialComponentMouseSemanticLabelListEXT . La struttura dei dati corrispondente è XrSpatialMouseSemanticLabelEXT (aggiunta dall'estensione XR_EXT_spatial_object_tracking)
XR_SPATIAL_COMPONENT_TYPE_ANCHOR_EXT
Componente che fornisce la posizione di un ancoraggio. La struttura dell'elenco corrispondente è XrSpatialComponentAnchorListEXT; la struttura dei dati corrispondente è XrPosef (aggiunta dall'estensione XR_EXT_spatial_anchor)
XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_EXT
Componente che fornisce l'UUID persistente per un'entità spaziale. La struttura dell'elenco corrispondente è XrSpatialComponentPersistenceListEXT; la struttura dei dati corrispondente è XrSpatialPersistenceDataEXT (aggiunta dall'estensione XR_EXT_spatial_persistence)
XR_SPATIAL_COMPONENT_TYPE_IMAGE_2D_EXT
Un componente che descrive il tipo di immagine planare. La struttura dell'elenco corrispondente è XrSpatialComponentImage2DListEXT; la struttura dei dati corrispondente è XrSpatialImageSizeEXT . (Aggiunto dall'estensione XR_EXT_spatial_image_tracking)
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT
Componente che fornisce le normali per la mesh 3D di un'entità spaziale. La struttura dell'elenco corrispondente è XrSpatialComponentMesh3DNormalsListEXT; la struttura dei dati corrispondente è XrSpatialBufferEXT (aggiunta dall'estensione XR_EXT_spatial_mesh_tracking)
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT
Componente che fornisce le etichette semantiche per vertice per la mesh 3D di un'entità spaziale. La struttura dell'elenco corrispondente è XrSpatialComponentMesh3DVertexSemanticLabelsListEXT; la struttura dei dati corrispondente è XrSpatialBufferEXT; i dati all'interno del buffer vengono mappati a XrSpatialMeshSemanticLabelEXT (aggiunto dall'estensione XR_EXT_spatial_mesh_tracking)
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT
Componente che fornisce le etichette semantiche per triangolo per la mesh 3D di un'entità spaziale. La struttura dell'elenco corrispondente è XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT; la struttura dei dati corrispondente è XrSpatialBufferEXT; i dati all'interno del buffer vengono mappati a XrSpatialMeshSemanticLabelEXT (aggiunto dall'estensione XR_EXT_spatial_mesh_tracking)
XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_ANDROID
Componente che fornisce un'etichetta semantica per un oggetto; la struttura dell'elenco corrispondente è XrSpatialComponentObjectSemanticLabelListANDROID; la struttura dei dati corrispondente è XrSpatialObjectSemanticLabelANDROID (aggiunta dall'estensione XR_ANDROID_spatial_object_tracking)
XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID
Componente che fornisce la posa di un raycast che ha colpito un'entità. La struttura dell'elenco corrispondente è XrSpatialComponentRaycastResultListANDROID; la struttura dei dati corrispondente è XrSpatialRaycastResultDataANDROID (aggiunta dall'estensione XR_ANDROID_spatial_discovery_raycast)
XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID
Componente che fornisce l'ID entità dell'entità che include l'entità allegata. La struttura dell'elenco corrispondente è XrSpatialComponentSubsumedByListANDROID; la struttura dei dati corrispondente è XrSpatialEntityIdEXT (aggiunta dall'estensione XR_ANDROID_spatial_component_subsumed_by)
XR_SPATIAL_COMPONENT_TYPE_ROOM_ANDROIDSYS
Componente che fornisce le dimensioni e il tipo di camera di una scatola di scarpe; la struttura dell'elenco corrispondente è XrSpatialComponentRoomListANDROIDSYS; la struttura dei dati corrispondente è XrSpatialRoomDataANDROIDSYS (aggiunta dall'estensione XR_ANDROIDSYS_spatial_room_tracking)
XR_SPATIAL_COMPONENT_TYPE_MATERIAL_TYPE_ANDROIDSYS
Componente che fornisce il tipo di materiale di una superficie di confine; la struttura dell'elenco corrispondente è XrSpatialComponentMaterialTypeListANDROIDSYS; la struttura dei dati corrispondente è XrSpatialMaterialTypeANDROIDSYS (aggiunta dall'estensione XR_ANDROIDSYS_spatial_room_tracking)
XR_SPATIAL_COMPONENT_TYPE_CONFIDENCE_ANDROIDSYS
Componente che fornisce l'affidabilità di un elemento tracciabile; la struttura dell'elenco corrispondente è XrSpatialComponentConfidenceListANDROIDSYS; la struttura dei dati corrispondente è float (aggiunta dall'estensione XR_ANDROIDSYS_spatial_room_tracking)
XR_SPATIAL_COMPONENT_TYPE_ROOM_EMPTINESS_ANDROIDSYS
Componente che fornisce lo stato di vuoto di una stanza; la struttura dell'elenco corrispondente è XrSpatialComponentRoomEmptinessListANDROIDSYS; la struttura dei dati corrispondente è float (aggiunta dall'estensione XR_ANDROIDSYS_spatial_room_tracking)
XR_SPATIAL_COMPONENT_TYPE_OCCUPANCY_GRID_ANDROIDX1
Componente che fornisce informazioni sulla griglia di occupazione dell'entità allegata. La struttura dell'elenco corrispondente è XrSpatialComponentOccupancyGridListANDROIDX1; la struttura dei dati corrispondente è XrSpatialOccupancyGridDataANDROIDX1 (aggiunta dall'estensione XR_ANDROIDX1_spatial_occupancy_grid)
XR_SPATIAL_COMPONENT_TYPE_ANNOTATION_QUAD_ANDROID
Un componente che descrive un'annotazione quadrata. La struttura dell'elenco corrispondente è XrSpatialComponentAnnotationQuadListANDROID; la struttura dei dati corrispondente è XrSpatialAnnotationQuadDataANDROID (aggiunta dall'estensione XR_ANDROID_spatial_annotation_tracking)
XR_SPATIAL_COMPONENT_TYPE_STREETSCAPE_GEOMETRY_METADATA_ANDROIDX2
Componente che fornisce i metadati per una geometria streetscape; la struttura dell'elenco corrispondente è XrSpatialComponentStreetscapeGeometryMetadataListANDROIDX2; la struttura dei dati corrispondente è XrSpatialStreetscapeGeometryMetadataANDROIDX2 (aggiunta dall'estensione XR_ANDROIDX2_geospatial_streetscape)
Funzionalità spaziali e configurazione
Le funzionalità spaziali definiscono le capacità di un runtime di rilevare entità che hanno un insieme garantito di componenti. Le applicazioni attivano i componenti di una funzionalità spaziale durante la creazione di XrSpatialContextEXT e il runtime a sua volta deve fornire solo i componenti abilitati sulle entità rilevate. Ad esempio , se un runtime segnala che uno dei componenti di una determinata funzionalità è "etichette semantiche", significa che l'applicazione può abilitare le etichette semantiche tramite la configurazione di questa funzionalità e il runtime deve fornire il componente etichetta semantica solo se è configurato.
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;
L'enumerazione XrSpatialCapabilityEXT identifica i diversi tipi di funzionalità che il runtime potrebbe supportare.
Gli enumeranti hanno i seguenti valori:
Descrizione enum
XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT
Monitoraggio aerei (aggiunto dall'estensione XR_EXT_spatial_plane_tracking)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT
Possibilità di rilevare e monitorare i codici QR. (Aggiunto dall'estensione XR_EXT_spatial_marker_tracking)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE_EXT
Possibilità di rilevare e monitorare i micro codici QR. (Aggiunto dall'estensione XR_EXT_spatial_marker_tracking)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_EXT
Capacità di rilevare e monitorare i marker Aruco. (Aggiunto dall'estensione XR_EXT_spatial_marker_tracking)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXT
Capacità di rilevare e monitorare gli AprilTag. (Aggiunto dall'estensione XR_EXT_spatial_marker_tracking)
XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT
Monitoraggio oggetti (aggiunto dall'estensione XR_EXT_spatial_object_tracking)
XR_SPATIAL_CAPABILITY_ANCHOR_EXT
Possibilità di creare ancore spaziali (aggiunta dall'estensione XR_EXT_spatial_anchor)
XR_SPATIAL_CAPABILITY_IMAGE_TRACKING_EXT
Possibilità di rilevare e monitorare le immagini di riferimento planari. (Aggiunto dall'estensione XR_EXT_spatial_image_tracking)
XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT
Possibilità di monitorare la mesh di un ambiente. (Aggiunto dall'estensione XR_EXT_spatial_mesh_tracking)
XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_ANDROID
Monitoraggio oggetti (aggiunto dall'estensione XR_ANDROID_spatial_object_tracking)
XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID
Raycast rispetto al buffer di profondità (aggiunto dall'estensione XR_ANDROID_spatial_discovery_raycast)
XR_SPATIAL_CAPABILITY_ROOM_TRACKING_ANDROIDSYS
Possibilità di monitorare una stanza (aggiunta dall'estensione XR_ANDROIDSYS_spatial_room_tracking)
XR_SPATIAL_CAPABILITY_ROOM_BOUNDARY_TRACKING_ANDROIDSYS
Possibilità di tracciare il confine di una stanza (aggiunta dall'estensione XR_ANDROIDSYS_spatial_room_tracking)
XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID
Monitoraggio delle annotazioni (aggiunto dall'estensione XR_ANDROID_spatial_annotation_tracking)
XR_SPATIAL_CAPABILITY_STREETSCAPE_GEOMETRY_ANDROIDX2
Geometria di Streetscape (aggiunta dall'estensione XR_ANDROIDX2_geospatial_streetscape)
La funzione xrEnumerateSpatialCapabilitiesEXT è definita come:
XrResult xrEnumerateSpatialCapabilitiesEXT(
XrInstance instance,
XrSystemId systemId,
uint32_t capabilityCapacityInput,
uint32_t* capabilityCountOutput,
XrSpatialCapabilityEXT* capabilities);
Descrizioni dei parametri
instanceè un handle per un XrInstance .systemIdè ilXrSystemIdle cui funzionalità spaziali verranno elencate.capabilityCapacityInputè la capacità dell'arraycapabilitieso 0 per indicare una richiesta di recupero della capacità richiesta.capabilityCountOutputè il numero di funzionalità o la capacità richiesta nel caso in cuicapabilityCapacityInputsia insufficiente.capabilitiesè un array di XrSpatialCapabilityEXT . Può essereNULLsecapabilityCapacityInputè 0.- Consulta la sezione Parametri delle dimensioni del buffer per una descrizione dettagliata del recupero delle dimensioni
capabilitiesrichieste.
L'applicazione può enumerare l'elenco delle funzionalità spaziali supportate da un determinato XrSystemId utilizzando xrEnumerateSpatialCapabilitiesEXT .
Il runtime non deve enumerare le funzionalità spaziali la cui estensione non è abilitata per instance .
Utilizzo valido (implicito)
- L'estensione
XR_EXT_spatial_entitydeve essere attivata prima di chiamare xrEnumerateSpatialCapabilitiesEXT -
instancedeve essere un handle XrInstance valido -
capabilityCountOutputdeve essere un puntatore a un valoreuint32_t - Se
capabilityCapacityInputnon è0,capabilitiesdeve essere un puntatore a un array di valoricapabilityCapacityInputXrSpatialCapabilityEXT
Codici di ritorno
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
La funzione xrEnumerateSpatialCapabilityComponentTypesEXT è definita come:
XrResult xrEnumerateSpatialCapabilityComponentTypesEXT(
XrInstance instance,
XrSystemId systemId,
XrSpatialCapabilityEXT capability,
XrSpatialCapabilityComponentTypesEXT* capabilityComponents);
Descrizioni dei parametri
instanceè un handle per un XrInstance .systemIdè ilXrSystemIdi cui componenti di funzionalità spaziale verranno enumerati.capabilityè l'XrSpatialCapabilityEXT per cui verranno enumerati i componenti.capabilityComponentsè un puntatore a un XrSpatialCapabilityComponentTypesEXT , ovvero una struttura di input/output in cui viene compilato un array allocato dall'applicazione.
Questa funzione enumera i tipi di componenti che la funzionalità specificata fornisce sulle sue entità nel sistema così come configurato.
L'applicazione può utilizzare i tipi di componenti enumerati in XrSpatialCapabilityComponentTypesEXT :: componentTypes per comprendere l'insieme completo di componenti supportati da systemId per capability e può utilizzare questo elenco per determinare quale sia una configurazione valida per capability durante la creazione di un XrSpatialContextEXT.
Il runtime deve restituire XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT se capability non è enumerato da xrEnumerateSpatialCapabilitiesEXT .
Il runtime non deve enumerare i tipi di componenti spaziali la cui estensione non è abilitata per instance .
Utilizzo valido (implicito)
- L'estensione
XR_EXT_spatial_entitydeve essere abilitata prima di chiamare xrEnumerateSpatialCapabilityComponentTypesEXT -
instancedeve essere un handle XrInstance valido -
capabilitydeve essere un valore XrSpatialCapabilityEXT valido -
capabilityComponentsdeve essere un puntatore a una struttura XrSpatialCapabilityComponentTypesEXT
Codici di ritorno
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXTXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
La struttura XrSpatialCapabilityComponentTypesEXT è definita come:
typedef struct XrSpatialCapabilityComponentTypesEXT {
XrStructureType type;
void* next;
uint32_t componentTypeCapacityInput;
uint32_t componentTypeCountOutput;
XrSpatialComponentTypeEXT* componentTypes;
} XrSpatialCapabilityComponentTypesEXT;
Descrizioni dei membri
typeè l'XrStructureType di questa struttura.nextèNULLo un puntatore alla struttura successiva in una catena di strutture. Queste strutture non sono definite in OpenXR di base o in questa estensione.componentTypeCapacityInputè la capacità dell'array o 0 per indicare una richiesta di recupero della capacità richiesta.componentTypeCountOutputè il numero di tipi di componenti o la capacità richiesta nel caso in cuicomponentTypeCapacityInputnon sia sufficiente.componentTypesè un array di XrSpatialComponentTypeEXT . Può essereNULLsecomponentTypeCapacityInputè 0.- Consulta la sezione Parametri delle dimensioni del buffer per una descrizione dettagliata del recupero delle dimensioni
componentTypesrichieste.
Utilizzo valido (implicito)
- L'estensione
XR_EXT_spatial_entitydeve essere abilitata prima di utilizzare XrSpatialCapabilityComponentTypesEXT -
typedeve essereXR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXT -
nextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutture - Se
componentTypeCapacityInputnon è0,componentTypesdeve essere un puntatore a un array di valoricomponentTypeCapacityInputXrSpatialComponentTypeEXT
Funzionalità di capacità spaziale
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;
Alcune funzionalità hanno parametri esposti all'applicazione per configurare il modo in cui i dati dei componenti vengono calcolati dal runtime. Queste dimensioni di parametrizzazione/configurabilità sono note come funzionalità di capacità. Ad esempio, per una funzionalità di monitoraggio delle immagini, un runtime potrebbe supportare una funzionalità che consente all'applicazione di specificare se le immagini monitorate sono statiche o meno.
Fornire queste informazioni al runtime tramite una struttura di configurazione non deve modificare l'insieme di tipi di componenti presenti nelle entità associate, ad esempio nell'immagine monitorata. Tuttavia, il runtime potrebbe essere in grado di ottimizzare, ad esempio, le funzionalità di monitoraggio della funzionalità di monitoraggio delle immagini e fornire un'esperienza migliore all'applicazione.
Queste funzionalità sono rappresentate da XrSpatialCapabilityFeatureEXT e l'applicazione le enumera utilizzando xrEnumerateSpatialCapabilityFeaturesEXT .
Ogni funzionalità di capacità ha una struttura di configurazione corrispondente per attivarla. Queste strutture di configurazione devono essere concatenate a XrSpatialCapabilityConfigurationBaseHeaderEXT :: next della funzionalità corrispondente.
Gli enumeranti hanno i seguenti valori:
Descrizione enum
XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_FIXED_SIZE_MARKERS_EXT
Funzionalità che consente alle applicazioni di specificare le dimensioni dei marcatori. La struttura di configurazione corrispondente è XrSpatialMarkerSizeEXT (aggiunta dall'estensione XR_EXT_spatial_marker_tracking)
XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_STATIC_MARKERS_EXT
Funzionalità che consente alle applicazioni di specificare se i marcatori sono statici. La struttura di configurazione corrispondente è XrSpatialMarkerStaticOptimizationEXT (aggiunta dall'estensione XR_EXT_spatial_marker_tracking)
XR_SPATIAL_CAPABILITY_FEATURE_OBJECT_SEMANTIC_LABEL_SUBSET_EXT
Funzionalità spaziale che consente alle applicazioni di specificare un sottoinsieme di etichette da XrSpatialObjectSemanticLabelEXT da monitorare in fase di runtime. La struttura di configurazione corrispondente è XrSpatialFeatureObjectSemanticLabelSubsetEXT . (Aggiunto dall'estensione XR_EXT_spatial_object_tracking)
XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID
Il runtime supporta il filtro XrSpatialBoundsSpherefANDROID per XrSpatialDiscoverySnapshotCreateInfoEXT. Non è necessario includere alcuna struttura di configurazione durante la creazione del contesto spaziale. (Aggiunto dall'estensione XR_ANDROID_spatial_discovery_bounds)
XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID
Il runtime supporta il filtro XrSpatialBoundsBoxfANDROID per XrSpatialDiscoverySnapshotCreateInfoEXT. Non è necessario includere alcuna struttura di configurazione durante la creazione del contesto spaziale. (Aggiunto dall'estensione XR_ANDROID_spatial_discovery_bounds)
XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID
Il runtime supporta il filtro XrSpatialBoundsFrustumfANDROID per XrSpatialDiscoverySnapshotCreateInfoEXT. Non è necessario includere alcuna struttura di configurazione durante la creazione del contesto spaziale. (Aggiunto dall'estensione XR_ANDROID_spatial_discovery_bounds)
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_AUTOMATIC_SIZE_IMAGES_EXT
Il runtime supporta la deduzione automatica delle dimensioni fisiche delle immagini rilevate e monitorate. La struttura di configurazione corrispondente è XrSpatialImageSizeEXT (aggiunta dall'estensione XR_EXT_spatial_image_tracking)
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_STATIC_IMAGES_EXT
Il runtime supporta XrSpatialImageStaticOptimizationEXT . La struttura di configurazione corrispondente è XrSpatialImageStaticOptimizationEXT . (Aggiunto dall'estensione XR_EXT_spatial_image_tracking)
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_FIXED_SIZE_IMAGES_EXT
Il runtime supporta XrSpatialImageSizeEXT . La struttura di configurazione corrispondente è XrSpatialImageSizeEXT (aggiunta dall'estensione XR_EXT_spatial_image_tracking)
XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT
Funzionalità di rilevamento per tracciare una mesh a tenuta stagna dell'ambiente. La struttura di configurazione corrispondente è XrSpatialFeatureTrackWatertightMeshEXT . (Aggiunto dall'estensione XR_EXT_spatial_mesh_tracking)
La funzione xrEnumerateSpatialCapabilityFeaturesEXT è definita come:
XrResult xrEnumerateSpatialCapabilityFeaturesEXT(
XrInstance instance,
XrSystemId systemId,
XrSpatialCapabilityEXT capability,
uint32_t capabilityFeatureCapacityInput,
uint32_t* capabilityFeatureCountOutput,
XrSpatialCapabilityFeatureEXT* capabilityFeatures);
Descrizioni dei parametri
instanceè un handle per un XrInstance .systemIdè ilXrSystemIdle cui funzionalità spaziali verranno elencate.capabilityè XrSpatialCapabilityEXT per cui verranno elencate le funzionalità.capabilityFeatureCapacityInputè la capacità dell'array o 0 per indicare una richiesta di recupero della capacità richiesta.capabilityFeatureCountOutputè il numero di funzionalità o la capacità richiesta nel caso in cuicapabilityFeatureCapacityInputnon sia sufficiente.capabilityFeaturesè un array di XrSpatialCapabilityFeatureEXT . Può essereNULLsecapabilityFeatureCapacityInputè 0.- Consulta la sezione Parametri delle dimensioni del buffer per una descrizione dettagliata del recupero delle dimensioni
capabilityFeaturesrichieste.
L'applicazione rileva le funzionalità supportate da un determinato sistema per un XrSpatialCapabilityEXT utilizzando xrEnumerateSpatialCapabilityFeaturesEXT .
Per le funzionalità che hanno funzionalità esposte, l'applicazione seleziona la funzionalità o le funzionalità da attivare e fornisce la struttura di configurazione corrispondente nella catena successiva delle strutture di configurazione delle funzionalità in XrSpatialContextCreateInfoEXT :: capabilityConfigs .
Se capability non è una funzionalità enumerata da xrEnumerateSpatialCapabilitiesEXT , il runtime deve restituire XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT .
Il runtime non deve enumerare le funzionalità di capacità spaziale la cui estensione non è abilitata per instance .
Utilizzo valido (implicito)
- L'estensione
XR_EXT_spatial_entitydeve essere attivata prima di chiamare xrEnumerateSpatialCapabilityFeaturesEXT -
instancedeve essere un handle XrInstance valido -
capabilitydeve essere un valore XrSpatialCapabilityEXT valido -
capabilityFeatureCountOutputdeve essere un puntatore a un valoreuint32_t - Se
capabilityFeatureCapacityInputnon è0,capabilityFeaturesdeve essere un puntatore a un array di valoricapabilityFeatureCapacityInputXrSpatialCapabilityFeatureEXT
Codici di ritorno
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
Contesto spaziale
Creare un contesto spaziale
XR_DEFINE_HANDLE(XrSpatialContextEXT)
L'handle XrSpatialContextEXT rappresenta le risorse per scoprire e aggiornare un certo numero di entità spaziali nell'ambiente dell'utente. L'applicazione può utilizzare questo handle per scoprire e aggiornare le entità spaziali utilizzando altre funzioni in questa estensione.
La funzione xrCreateSpatialContextAsyncEXT è definita come:
XrResult xrCreateSpatialContextAsyncEXT(
XrSession session,
const XrSpatialContextCreateInfoEXT* createInfo,
XrFutureEXT* future);
Descrizioni dei parametri
sessionè una XrSession in cui il contesto spaziale sarà attivo.createInfoè XrSpatialContextCreateInfoEXT utilizzato per specificare i parametri del contesto spaziale.futureè un puntatore a unXrFutureEXT.
L'applicazione può creare un handle XrSpatialContextEXT:
- Fornisci strutture derivate XrSpatialCapabilityConfigurationBaseHeaderEXT in XrSpatialContextCreateInfoEXT ::
capabilityConfigsper attivare le funzionalità e i componenti per quella funzionalità. - Configurazione delle funzionalità stesse con le strutture di configurazione corrispondenti del relativo XrSpatialCapabilityFeatureEXT .
Il runtime deve restituire XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT se XrSpatialContextCreateInfoEXT ::capabilityConfigCount è 0. Un handle di contesto spaziale richiede almeno una funzionalità.
Il runtime deve restituire XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT se una funzionalità nell'array XrSpatialContextCreateInfoEXT :: capabilityConfigs non è enumerata da xrEnumerateSpatialCapabilitiesEXT .
Il runtime deve restituire XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT se XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponentCount in XrSpatialContextCreateInfoEXT :: capabilityConfigs è 0. Una configurazione delle funzionalità è incompleta senza un elenco di tipi di componenti da attivare per quella funzionalità.
Il runtime deve restituire XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT se un tipo di componente elencato in XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents non è enumerato per XrSpatialCapabilityConfigurationBaseHeaderEXT :: capability in xrEnumerateSpatialCapabilityComponentTypesEXT .
Se una delle strutture nella catena successiva di XrSpatialContextCreateInfoEXT :: capabilityConfigs corrisponde a un XrSpatialCapabilityFeatureEXT non enumerato per quella funzionalità in xrEnumerateSpatialCapabilityFeaturesEXT , il runtime deve ignorare la struttura XrSpatialCapabilityFeatureEXT.
Il runtime deve restituire XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT se XrSpatialContextCreateInfoEXT :: capabilityConfigs contiene più strutture con lo stesso XrSpatialCapabilityConfigurationBaseHeaderEXT :: capability .
Per garantire un utilizzo ottimale delle risorse di sistema, il runtime potrebbe utilizzare le configurazioni fornite nell'array XrSpatialContextCreateInfoEXT per prepararsi a ricevere richieste spaziali. Ad esempio, un runtime che supporta la funzionalità di rilevamento dei piani potrebbe avviare la pipeline di rilevamento dei piani solo se l'applicazione crea un handle di contesto spaziale contenente la funzionalità di rilevamento dei piani. Se le funzionalità configurate hanno un lungo periodo di riscaldamento, le chiamate a xrCreateSpatialDiscoverySnapshotAsyncEXT potrebbero generare uno snapshot vuoto. L'applicazione può attendere XrEventDataSpatialDiscoveryRecommendedEXT prima di utilizzare xrCreateSpatialDiscoverySnapshotAsyncEXT per assicurarsi che i servizi di monitoraggio sottostanti siano stati inizializzati.
Se un runtime applica un sistema di autorizzazioni per controllare l'accesso dell'applicazione alle funzionalità spaziali configurate per XrSpatialContextEXT , il runtime deve restituire XR_ERROR_PERMISSION_INSUFFICIENT se queste autorizzazioni non sono state concesse a questa applicazione.
Questa funzione avvia un'operazione asincrona e crea un XrFutureEXT corrispondente , utilizzabile con xrPollFutureEXT e funzioni correlate. Il valore restituito di questa funzione indica solo se i parametri erano accettabili per pianificare l'operazione asincrona. La funzione di completamento corrispondente è xrCreateSpatialContextCompleteEXT , utilizzabile quando un futuro di questa funzione è nello stato READY, con gli output compilati da questa funzione nella struttura di completamento XrCreateSpatialContextCompletionEXT .
Utilizzo valido (implicito)
- L'estensione
XR_EXT_spatial_entitydeve essere attivata prima di chiamare xrCreateSpatialContextAsyncEXT -
sessiondeve essere un handle XrSession valido -
createInfodeve essere un puntatore a una struttura XrSpatialContextCreateInfoEXT valida -
futuredeve essere un puntatore a un valoreXrFutureEXT
Codici di ritorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_PERMISSION_INSUFFICIENTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXTXR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXTXR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXTXR_ERROR_VALIDATION_FAILURE
La struttura XrSpatialContextCreateInfoEXT è definita come:
typedef struct XrSpatialContextCreateInfoEXT {
XrStructureType type;
const void* next;
uint32_t capabilityConfigCount;
const XrSpatialCapabilityConfigurationBaseHeaderEXT* const* capabilityConfigs;
} XrSpatialContextCreateInfoEXT;
Descrizioni dei membri
typeè l'XrStructureType di questa struttura.nextèNULLo un puntatore alla struttura successiva in una catena di strutture. Queste strutture non sono definite in OpenXR di base o in questa estensione.capabilityConfigCountè unuint32_tche descrive il conteggio degli elementi nell'arraycapabilityConfigs.capabilityConfigsè un puntatore a un array di puntatori XrSpatialCapabilityConfigurationBaseHeaderEXT.
La struttura XrSpatialContextCreateInfoEXT descrive le informazioni per creare un handle XrSpatialContextEXT.
Utilizzo valido (implicito)
- L'estensione
XR_EXT_spatial_entitydeve essere attivata prima di utilizzare XrSpatialContextCreateInfoEXT -
typedeve essereXR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXT -
nextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutture . Vedi anche: XrSpatialContextPersistenceConfigEXT -
capabilityConfigsdeve essere un puntatore a un array dicapabilityConfigCountstrutture valide basate su XrSpatialCapabilityConfigurationBaseHeaderEXT. Vedi anche: XrSpatialCapabilityConfigurationAnchorEXT , XrSpatialCapabilityConfigurationAprilTagEXT , XrSpatialCapabilityConfigurationArucoMarkerEXT , XrSpatialCapabilityConfigurationDepthRaycastANDROID , XrSpatialCapabilityConfigurationImageTrackingEXT , XrSpatialCapabilityConfigurationMeshTrackingEXT , XrSpatialCapabilityConfigurationMicroQrCodeEXT , XrSpatialCapabilityConfigurationObjectTrackingANDROID , XrSpatialCapabilityConfigurationObjectTrackingEXT , XrSpatialCapabilityConfigurationPlaneTrackingEXT , XrSpatialCapabilityConfigurationQrCodeEXT , XrSpatialCapabilityConfigurationRoomBoundaryTrackingANDROIDSYS , XrSpatialCapabilityConfigurationRoomTrackingANDROIDSYS , XrSpatialCapabilityConfigurationStreetscapeGeometryANDROIDX2 - Il parametro
capabilityConfigCountdeve essere maggiore di0
La struttura XrSpatialCapabilityConfigurationBaseHeaderEXT è definita come:
typedef struct XrSpatialCapabilityConfigurationBaseHeaderEXT {
XrStructureType type;
const void* next;
XrSpatialCapabilityEXT capability;
uint32_t enabledComponentCount;
const XrSpatialComponentTypeEXT* enabledComponents;
} XrSpatialCapabilityConfigurationBaseHeaderEXT;
Questa struttura non viene utilizzata direttamente nell'API, ma le relative strutture secondarie possono essere utilizzate con XrSpatialContextCreateInfoEXT per configurare le funzionalità spaziali.
Descrizioni dei membri
typeè l'XrStructureType di questa struttura.nextèNULLo un puntatore alla struttura successiva in una catena di strutture.capabilityè un XrSpatialCapabilityEXT .enabledComponentCountè unuint32_tche descrive il conteggio degli elementi nell'arrayenabledComponents.enabledComponentsè un puntatore a un array di XrSpatialComponentTypeEXT .
Il runtime deve restituire XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT se capability non è enumerato da xrEnumerateSpatialCapabilitiesEXT . Il runtime deve restituire XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT se un tipo di componente elencato in enabledComponents non è enumerato per capability in xrEnumerateSpatialCapabilityComponentTypesEXT .
Utilizzo valido (implicito)
- L'estensione
XR_EXT_spatial_entitydeve essere abilitata prima di utilizzare XrSpatialCapabilityConfigurationBaseHeaderEXT -
nextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutture -
capabilitydeve essere un valore XrSpatialCapabilityEXT valido -
enabledComponentsdeve essere un puntatore a un array dienabledComponentCountvalori XrSpatialComponentTypeEXT validi - Il parametro
enabledComponentCountdeve essere maggiore di0
La funzione xrCreateSpatialContextCompleteEXT è definita come:
XrResult xrCreateSpatialContextCompleteEXT(
XrSession session,
XrFutureEXT future,
XrCreateSpatialContextCompletionEXT* completion);
Descrizioni dei parametri
sessionè l'XrSession precedentemente passato a xrCreateSpatialContextAsyncEXT ::session.futureè ilXrFutureEXTricevuto da xrCreateSpatialContextAsyncEXT .completionè un puntatore a un XrCreateSpatialContextCompletionEXT .
xrCreateSpatialContextCompleteEXT completa l'operazione asincrona avviata da xrCreateSpatialContextAsyncEXT . Il runtime deve restituire XR_ERROR_FUTURE_PENDING_EXT se future non è in stato pronto. Il runtime deve restituire XR_ERROR_FUTURE_INVALID_EXT se future è già stato completato o annullato.
Utilizzo valido (implicito)
- L'estensione
XR_EXT_spatial_entitydeve essere attivata prima di chiamare xrCreateSpatialContextCompleteEXT -
sessiondeve essere un handle XrSession valido -
completiondeve essere un puntatore a una struttura XrCreateSpatialContextCompletionEXT
Codici di ritorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_FUTURE_INVALID_EXTXR_ERROR_FUTURE_PENDING_EXTXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_VALIDATION_FAILURE
La struttura XrCreateSpatialContextCompletionEXT è definita come:
typedef struct XrCreateSpatialContextCompletionEXT {
XrStructureType type;
void* next;
XrResult futureResult;
XrSpatialContextEXT spatialContext;
} XrCreateSpatialContextCompletionEXT;
Descrizioni dei membri
typeè l'XrStructureType di questa struttura.nextèNULLo un puntatore alla struttura successiva in una catena di strutture.futureResultè l'XrResult dell'operazione di creazione del contesto spaziale.spatialContextè un XrSpatialContextEXT creato utilizzando i dati e la configurazione in xrCreateSpatialContextAsyncEXT ::createInfo.
Codici di reso futuri
Valori 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 è un codice che ha superato il controllo, spatialContext deve essere valido. Se spatialContext è valido, rimane tale solo durante il ciclo di vita di xrCreateSpatialContextAsyncEXT :: session o finché l'applicazione non distrugge spatialContext con xrDestroySpatialContextEXT , a seconda di quale evento si verifica per primo.
Utilizzo valido (implicito)
- L'estensione
XR_EXT_spatial_entitydeve essere attivata prima di utilizzare XrCreateSpatialContextCompletionEXT -
typedeve essereXR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXT -
nextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutture -
futureResultdeve essere un valore XrResult valido - Se
spatialContextnon è XR_NULL_HANDLE ,spatialContextdeve essere un handle XrSpatialContextEXT valido
Eliminare il contesto spaziale
La funzione xrDestroySpatialContextEXT è definita come:
XrResult xrDestroySpatialContextEXT(
XrSpatialContextEXT spatialContext);
Descrizioni dei parametri
spatialContextè un XrSpatialContextEXT creato in precedenza da xrCreateSpatialContextAsyncEXT .
L'applicazione può chiamare la funzione xrDestroySpatialContextEXT per rilasciare l'handle spatialContext e le risorse sottostanti al termine delle attività di rilevamento e aggiornamento delle entità spaziali. Se non esiste un altro XrSpatialContextEXT valido creato con le stesse funzionalità spaziali di spatialContext , questa chiamata funge da suggerimento per il runtime per disattivare i servizi di monitoraggio richiesti per queste funzionalità per risparmiare risorse di sistema.
Utilizzo valido (implicito)
- L'estensione
XR_EXT_spatial_entitydeve essere attivata prima di chiamare xrDestroySpatialContextEXT -
spatialContextdeve essere un handle XrSpatialContextEXT valido
Thread Safety
- L'accesso a
spatialContexte a tutti gli handle secondari deve essere sincronizzato esternamente
Codici di ritorno
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
Rappresentazioni di entità spaziali
ID entità spaziale
XR_DEFINE_ATOM(XrSpatialEntityIdEXT)
XrSpatialEntityIdEXT viene utilizzato per rappresentare qualsiasi tipo di entità rilevata dal runtime nell'ambiente spaziale dell'utente. Un XrSpatialEntityIdEXT è valido per XrSpatialContextEXT in cui viene rilevato e il runtime non deve riutilizzare lo stesso XrSpatialEntityIdEXT per entità diverse all'interno dello stesso XrSpatialContextEXT . Inoltre, il runtime non deve riutilizzare lo stesso XrSpatialEntityIdEXT in più XrSpatialContextEXT all'interno della stessa XrSession, indipendentemente dal fatto che rappresenti la stessa entità o entità diverse.
#define XR_NULL_SPATIAL_ENTITY_ID_EXT 0
XR_NULL_SPATIAL_ENTITY_ID_EXT è un valore riservato che rappresenta un XrSpatialEntityIdEXT non valido . Può essere passato e restituito dalle funzioni API solo se specificamente consentito.
Handle dell'entità spaziale
XR_DEFINE_HANDLE(XrSpatialEntityEXT)
L'handle XrSpatialEntityEXT rappresenta un'entità spaziale. Un'applicazione può creare un handle di questo tipo per esprimere al runtime il proprio interesse per una determinata entità.
Crea un handle di entità spaziale dall'ID
La funzione xrCreateSpatialEntityFromIdEXT è definita come:
XrResult xrCreateSpatialEntityFromIdEXT(
XrSpatialContextEXT spatialContext,
const XrSpatialEntityFromIdCreateInfoEXT* createInfo,
XrSpatialEntityEXT* spatialEntity);
Descrizioni dei parametri
spatialContextè un XrSpatialContextEXT creato in precedenza utilizzando xrCreateSpatialContextAsyncEXT .createInfoè un puntatore alla struttura XrSpatialEntityFromIdCreateInfoEXT.spatialEntityè l'handle XrSpatialEntityEXT restituito.
L'applicazione può utilizzare xrCreateSpatialEntityFromIdEXT per creare un handle XrSpatialEntityEXT, ovvero un riferimento a un'entità esistente nell'ambiente dell'utente.
Il runtime deve restituire XR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXT se XrSpatialEntityFromIdCreateInfoEXT :: entityId non è un ID valido per spatialContext .
Utilizzo valido (implicito)
- L'estensione
XR_EXT_spatial_entitydeve essere attivata prima di chiamare xrCreateSpatialEntityFromIdEXT -
spatialContextdeve essere un handle XrSpatialContextEXT valido -
createInfodeve essere un puntatore a una struttura XrSpatialEntityFromIdCreateInfoEXT valida -
spatialEntitydeve essere un puntatore a un handle XrSpatialEntityEXT
Codici di ritorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
La struttura XrSpatialEntityFromIdCreateInfoEXT è definita come:
typedef struct XrSpatialEntityFromIdCreateInfoEXT {
XrStructureType type;
const void* next;
XrSpatialEntityIdEXT entityId;
} XrSpatialEntityFromIdCreateInfoEXT;
Descrizioni dei membri
typeè l'XrStructureType di questa struttura.nextèNULLo un puntatore alla struttura successiva in una catena di strutture. Queste strutture non sono definite in OpenXR di base o in questa estensione.entityIdè l'XrSpatialEntityIdEXTdell'entità per cui l'applicazione vuole creare un handle.
Utilizzo valido (implicito)
- L'estensione
XR_EXT_spatial_entitydeve essere attivata prima di utilizzare XrSpatialEntityFromIdCreateInfoEXT -
typedeve essereXR_TYPE_SPATIAL_ENTITY_FROM_ID_CREATE_INFO_EXT -
nextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutture
Destroy Spatial Entity Handle
La funzione xrDestroySpatialEntityEXT è definita come:
XrResult xrDestroySpatialEntityEXT(
XrSpatialEntityEXT spatialEntity);
Descrizioni dei parametri
spatialEntityè un handle di un XrSpatialEntityEXT creato in precedenza da una funzione come xrCreateSpatialEntityFromIdEXT .
L'applicazione può utilizzare xrDestroySpatialEntityEXT per rilasciare l'handle spatialEntity quando non è più interessata all'entità a cui fa riferimento questo handle.
Utilizzo valido (implicito)
- L'estensione
XR_EXT_spatial_entitydeve essere attivata prima di chiamare xrDestroySpatialEntityEXT -
spatialEntitydeve essere un handle XrSpatialEntityEXT valido
Thread Safety
- L'accesso a
spatialEntitye a tutti gli handle secondari deve essere sincronizzato esternamente
Codici di ritorno
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
Snapshot spaziale
XR_DEFINE_HANDLE(XrSpatialSnapshotEXT)
L'applicazione può creare snapshot spaziali allo scopo di scoprire entità spaziali o per aggiornare le informazioni sulle entità spaziali note. L'handle XrSpatialSnapshotEXT rappresenta i dati immutabili per le entità spaziali rilevate o aggiornate e un sottoinsieme dei relativi componenti selezionati dall'applicazione. Lo snapshot spaziale rappresenta una visione coerente delle entità e dei relativi dati dei componenti. Una volta creato uno snapshot, i relativi dati devono rimanere costanti per tutta la durata della validità dello snapshot.
L'applicazione può creare il numero di snapshot che vuole, ma deve tenere conto della memoria allocata per ogni nuovo snapshot e deve eliminare gli snapshot quando non ne ha più bisogno.
Crea snapshot di rilevamento
La funzione xrCreateSpatialDiscoverySnapshotAsyncEXT è definita come:
XrResult xrCreateSpatialDiscoverySnapshotAsyncEXT(
XrSpatialContextEXT spatialContext,
const XrSpatialDiscoverySnapshotCreateInfoEXT* createInfo,
XrFutureEXT* future);
Descrizioni dei parametri
spatialContextè un XrSpatialContextEXT creato in precedenza utilizzando xrCreateSpatialContextAsyncEXT .createInfoè un puntatore a una struttura XrSpatialDiscoverySnapshotCreateInfoEXT .futureè un puntatore a unXrFutureEXT.
L'applicazione può rilevare entità spaziali creando uno snapshot di rilevamento utilizzando xrCreateSpatialDiscoverySnapshotAsyncEXT .
Questa funzione avvia un'operazione asincrona e crea un XrFutureEXT corrispondente , utilizzabile con xrPollFutureEXT e funzioni correlate. Il valore restituito di questa funzione indica solo se i parametri erano accettabili per pianificare l'operazione asincrona. La funzione di completamento corrispondente è xrCreateSpatialDiscoverySnapshotCompleteEXT , utilizzabile quando un futuro di questa funzione è nello stato READY, con gli output compilati da questa funzione nella struttura di completamento XrCreateSpatialDiscoverySnapshotCompletionEXT .
L'applicazione può inviare più richieste di creazione di snapshot di rilevamento senza dover attendere il completamento della precedente. Il runtime potrebbe elaborare e completare la creazione dello snapshot in qualsiasi ordine. Il runtime potrebbe ritardare il completamento della creazione dello snapshot di rilevamento per limitare l'applicazione se deve ridurre l'utilizzo delle risorse di sistema a causa di politiche di alimentazione, termiche o di altro tipo del dispositivo.
L'applicazione può utilizzare XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes per filtrare l'elenco delle entità e i componenti i cui dati devono essere inclusi nello snapshot dal runtime. Se l'applicazione fornisce un elenco valido di tipi di componenti spaziali in XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes , il runtime deve includere nello snapshot solo le entità spaziali che hanno almeno uno dei componenti forniti in XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes . Inoltre, il runtime deve includere solo i dati relativi a questi componenti nello snapshot.
Il runtime deve restituire XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT se uno qualsiasi dei XrSpatialComponentTypeEXT in XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes non è abilitato per le funzionalità spaziali passate a XrSpatialContextCreateInfoEXT :: capabilityConfigs durante la creazione di spatialContext .
Se l'applicazione non fornisce un elenco di tipi di componenti spaziali in XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes , il runtime deve includere tutte le entità spaziali nello snapshot che hanno il set di componenti enumerati in XrSpatialCapabilityConfigurationBaseHeaderEXT ::enabledComponents per le funzionalità configurate per spatialContext . Il runtime deve includere i dati per tutti i componenti abilitati delle funzionalità configurate per spatialContext .
Se XrEventDataReferenceSpaceChangePending viene messo in coda prima del completamento di future e XrEventDataReferenceSpaceChangePending :: poseValid è false, il runtime potrebbe creare un XrSpatialSnapshotEXT senza entità o impostare XrSpatialEntityTrackingStateEXT delle entità non più localizzabili in XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace in XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time su XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT o XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT . Il runtime non deve impostare XrCreateSpatialContextCompletionEXT :: futureResult su un codice di errore a causa di XrEventDataReferenceSpaceChangePending .
Utilizzo valido (implicito)
- L'estensione
XR_EXT_spatial_entitydeve essere attivata prima di chiamare xrCreateSpatialDiscoverySnapshotAsyncEXT -
spatialContextdeve essere un handle XrSpatialContextEXT valido -
createInfodeve essere un puntatore a una struttura XrSpatialDiscoverySnapshotCreateInfoEXT valida -
futuredeve essere un puntatore a un valoreXrFutureEXT
Codici di ritorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXTXR_ERROR_VALIDATION_FAILURE
La struttura XrSpatialDiscoverySnapshotCreateInfoEXT è definita come:
typedef struct XrSpatialDiscoverySnapshotCreateInfoEXT {
XrStructureType type;
const void* next;
uint32_t componentTypeCount;
const XrSpatialComponentTypeEXT* componentTypes;
} XrSpatialDiscoverySnapshotCreateInfoEXT;
Descrizioni dei membri
typeè l'XrStructureType di questa struttura.nextèNULLo un puntatore alla struttura successiva in una catena di strutture. Queste strutture non sono definite in OpenXR di base o in questa estensione.componentTypeCountè unuint32_tche descrive il conteggio degli elementi nell'arraycomponentTypes.componentTypesè un array di XrSpatialComponentTypeEXT .
La struttura XrSpatialDiscoverySnapshotCreateInfoEXT descrive le informazioni per creare un handle XrSpatialSnapshotEXT durante l'individuazione di entità spaziali.
Utilizzo valido (implicito)
- L'estensione
XR_EXT_spatial_entitydeve essere abilitata prima di utilizzare XrSpatialDiscoverySnapshotCreateInfoEXT -
typedeve essereXR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT -
nextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutture . Vedi anche: XrSpatialBoundsBoxfANDROID , XrSpatialBoundsFrustumfANDROID , XrSpatialBoundsSpherefANDROID , XrSpatialDiscoveryPersistenceUuidFilterEXT , XrSpatialDiscoveryRoomBoundaryFilterANDROIDSYS , XrSpatialDiscoveryUniqueEntitiesFilterANDROID , XrSpatialFilterTrackingStateEXT , XrSpatialRaycastInfoANDROID - Se
componentTypeCountnon è0,componentTypesdeve essere un puntatore a un array di valori XrSpatialComponentTypeEXT validi dicomponentTypeCount
La funzione xrCreateSpatialDiscoverySnapshotCompleteEXT è definita come:
XrResult xrCreateSpatialDiscoverySnapshotCompleteEXT(
XrSpatialContextEXT spatialContext,
const XrCreateSpatialDiscoverySnapshotCompletionInfoEXT* createSnapshotCompletionInfo,
XrCreateSpatialDiscoverySnapshotCompletionEXT* completion);
Descrizioni dei parametri
spatialContextè XrSpatialContextEXT precedentemente passato a xrCreateSpatialDiscoverySnapshotAsyncEXT ::spatialContext.createSnapshotCompletionInfoè un puntatore a un XrCreateSpatialDiscoverySnapshotCompletionInfoEXT che fornisce informazioni sul completamento della richiesta di creazione dello snapshot di rilevamento.completionè un puntatore a un XrCreateSpatialDiscoverySnapshotCompletionEXT .
xrCreateSpatialDiscoverySnapshotCompleteEXT completa l'operazione asincrona avviata da xrCreateSpatialDiscoverySnapshotAsyncEXT . Il runtime deve restituire XR_ERROR_FUTURE_PENDING_EXT se XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: future non è nello stato Pronto. Il runtime deve restituire XR_ERROR_FUTURE_INVALID_EXT se XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: future è già stato completato o annullato.
Utilizzo valido (implicito)
- L'estensione
XR_EXT_spatial_entitydeve essere attivata prima di chiamare xrCreateSpatialDiscoverySnapshotCompleteEXT -
spatialContextdeve essere un handle XrSpatialContextEXT valido -
createSnapshotCompletionInfodeve essere un puntatore a una struttura XrCreateSpatialDiscoverySnapshotCompletionInfoEXT valida -
completiondeve essere un puntatore a una struttura XrCreateSpatialDiscoverySnapshotCompletionEXT
Codici di ritorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_FUTURE_INVALID_EXTXR_ERROR_FUTURE_PENDING_EXTXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
La struttura XrCreateSpatialDiscoverySnapshotCompletionInfoEXT è definita come:
typedef struct XrCreateSpatialDiscoverySnapshotCompletionInfoEXT {
XrStructureType type;
const void* next;
XrSpace baseSpace;
XrTime time;
XrFutureEXT future;
} XrCreateSpatialDiscoverySnapshotCompletionInfoEXT;
Descrizioni dei membri
typeè l'XrStructureType di questa struttura.nextèNULLo un puntatore alla struttura successiva in una catena di strutture.baseSpaceè lo XrSpace in cui si troveranno tutte le posizioni di XrSpatialSnapshotEXT.timeè ilXrTimein cui si troveranno tutte le posizioni della scoperta XrSpatialSnapshotEXT.futureè ilXrFutureEXTricevuto da xrCreateSpatialDiscoverySnapshotAsyncEXT
Le posizioni nei vari dati dei componenti inclusi nello snapshot creato saranno rappresentate in baseSpace , che si trova in time .
Utilizzo valido (implicito)
- L'estensione
XR_EXT_spatial_entitydeve essere attivata prima di utilizzare XrCreateSpatialDiscoverySnapshotCompletionInfoEXT -
typedeve essereXR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXT -
nextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutture -
baseSpacedeve essere un handle XrSpace valido
La struttura XrCreateSpatialDiscoverySnapshotCompletionEXT è definita come:
typedef struct XrCreateSpatialDiscoverySnapshotCompletionEXT {
XrStructureType type;
void* next;
XrResult futureResult;
XrSpatialSnapshotEXT snapshot;
} XrCreateSpatialDiscoverySnapshotCompletionEXT;
Descrizioni dei membri
typeè l'XrStructureType di questa struttura.nextèNULLo un puntatore alla struttura successiva in una catena di strutture.futureResultè l'XrResult dell'operazione di creazione dello snapshot di rilevamento spaziale.snapshotè un XrSpatialSnapshotEXT che può essere utilizzato per eseguire query sui dati dei componenti delle entità spaziali rilevate.
Codici di reso futuri
Valori futureResult:
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_RUNTIME_FAILUREXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHED
Utilizzo valido (implicito)
- L'estensione
XR_EXT_spatial_entitydeve essere attivata prima di utilizzare XrCreateSpatialDiscoverySnapshotCompletionEXT -
typedeve essereXR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXT -
nextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutture -
futureResultdeve essere un valore XrResult valido - Se
snapshotnon è XR_NULL_HANDLE ,snapshotdeve essere un handle XrSpatialSnapshotEXT valido
Evento di raccomandazione di scoperta
La struttura XrEventDataSpatialDiscoveryRecommendedEXT è definita come:
typedef struct XrEventDataSpatialDiscoveryRecommendedEXT {
XrStructureType type;
const void* next;
XrSpatialContextEXT spatialContext;
} XrEventDataSpatialDiscoveryRecommendedEXT;
Descrizioni dei membri
typeè l'XrStructureType di questa struttura.nextèNULLo un puntatore alla struttura successiva in una catena di strutture.spatialContextè XrSpatialContextEXT per cui il runtime consiglia il rilevamento.
L'applicazione può recuperare questo evento utilizzando xrPollEvent . L'applicazione può evitare chiamate eccessive a xrCreateSpatialDiscoverySnapshotAsyncEXT per scoprire le entità spaziali aspettando questo evento. Se l'applicazione crea più snapshot di rilevamento con lo stesso XrSpatialDiscoverySnapshotCreateInfoEXT tra due eventi XrEventDataSpatialDiscoveryRecommendedEXT, gli snapshot risultanti potrebbero contenere le stesse entità e pertanto la creazione di snapshot e le query sui dati sarebbero inutili.
L'attesa di questo evento per creare un nuovo snapshot di rilevamento garantisce che l'applicazione non sovraccarichi il sistema con richieste di rilevamento per le quali il runtime potrebbe non restituire nuovi dati e contribuisce a evitare il rischio di un utilizzo eccessivo delle risorse di sistema e di limitazione a causa delle policy di alimentazione o termiche del dispositivo. Ciò contribuisce anche a creare parità tra i runtime che rilevano entità spaziali al volo con il monitoraggio in tempo reale e i runtime che forniscono entità spaziali da uno stato registrato in precedenza (in cui il runtime potrebbe accodare l'evento di suggerimento di rilevamento solo una volta per ogni XrSpatialContextEXT).
Il runtime non deve mettere in coda questo evento per notificare all'applicazione le modifiche o gli aggiustamenti apportati ai dati dei componenti delle entità spaziali esistenti. L'applicazione può utilizzare xrCreateSpatialUpdateSnapshotEXT per tenere traccia degli aggiornamenti dei dati dei componenti per le entità spaziali a cui è interessata.
Un runtime potrebbe mettere in coda un evento di suggerimento di scoperta senza attendere che l'applicazione chiami prima xrCreateSpatialDiscoverySnapshotAsyncEXT . Ad esempio, un runtime potrebbe basare la decisione di mettere in coda l'evento di suggerimento di scoperta sulla configurazione di XrSpatialContextEXT, sulla propria comprensione dell'ambiente circostante l'utente (scoperta di nuove entità o perdita di quelle esistenti) o per suggerire una cadenza di richiesta di scoperta appropriata all'applicazione in modo da non sovraccaricare le risorse di sistema. L'ambiente di runtime potrebbe scegliere di non mettere mai in coda questo evento per un XrSpatialContextEXT se non vengono trovate entità nell'ambiente dell'utente per tutta la durata di XrSpatialContextEXT .
Il runtime non deve mettere in coda questo evento per un determinato spatialContext finché l'applicazione non completa la sua creazione utilizzando xrCreateSpatialContextCompleteEXT .
Dopo che l'applicazione chiama xrDestroySpatialContextEXT , il runtime non deve mettere in coda altri eventi di suggerimento di scoperta per quel contesto spaziale né restituire tali eventi per quel contesto da xrPollEvent .
Utilizzo valido (implicito)
- L'estensione
XR_EXT_spatial_entitydeve essere abilitata prima di utilizzare XrEventDataSpatialDiscoveryRecommendedEXT -
typedeve essereXR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT -
nextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutture
Eseguire query sui dati dei componenti
La funzione xrQuerySpatialComponentDataEXT è definita come:
XrResult xrQuerySpatialComponentDataEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialComponentDataQueryConditionEXT* queryCondition,
XrSpatialComponentDataQueryResultEXT* queryResult);
Descrizioni dei parametri
snapshotè un XrSpatialSnapshotEXT fornito in precedenza da xrCreateSpatialDiscoverySnapshotCompleteEXT o xrCreateSpatialUpdateSnapshotEXT .queryConditionè un puntatore a una struttura XrSpatialComponentDataQueryConditionEXT.queryResultè un puntatore a una struttura XrSpatialComponentDataQueryResultEXT.
L'applicazione può utilizzare xrQuerySpatialComponentDataEXT per eseguire query sui dati dei componenti delle entità nello snapshot collegando una struttura di elenco a XrSpatialComponentDataQueryResultEXT :: next corrispondente a ogni XrSpatialComponentTypeEXT in XrSpatialComponentDataQueryConditionEXT :: componentTypes .
Se l'applicazione associa una struttura di elenco a XrSpatialComponentDataQueryResultEXT :: next che non corrisponde a nessuno dei componenti elencati in XrSpatialComponentDataQueryConditionEXT :: componentTypes , il runtime deve restituire XR_ERROR_VALIDATION_FAILURE .
L'applicazione può scegliere di allegare le strutture di elenco corrispondenti solo a un sottoinsieme di componenti elencati in XrSpatialComponentDataQueryConditionEXT :: componentTypes . L'applicazione può scegliere di omettere del tutto le strutture di elenco se vuole conoscere solo gli ID e lo stato di monitoraggio delle entità spaziali che soddisfano queryCondition . Il runtime non deve considerare l'assenza di strutture di elenco dalla catena XrSpatialComponentDataQueryResultEXT :: next come un errore.
Se XrEventDataReferenceSpaceChangePending è in coda e XrEventDataReferenceSpaceChangePending :: changeTime è trascorso mentre l'applicazione esegue query sui dati dei componenti da un XrSpatialSnapshotEXT , l'applicazione potrebbe utilizzare i dati degli eventi per modificare le pose di conseguenza.
Il runtime deve compilare XrSpatialComponentDataQueryResultEXT :: entityIds solo con entità che hanno tutti i componenti specificati in XrSpatialComponentDataQueryConditionEXT :: componentTypes . Se XrSpatialComponentDataQueryConditionEXT :: componentTypeCount è 0, il runtime deve compilare queryResult con tutte le entità (e i relativi stati di monitoraggio) presenti nello snapshot. Se vengono aggiunte condizioni di query aggiuntive a XrSpatialComponentDataQueryConditionEXT :: next, il runtime deve trattarle come un "AND" con la disponibilità dei tipi di componenti, ovvero il runtime deve popolare XrSpatialComponentDataQueryResultEXT ::entityIds solo con le entità che soddisfano tutte le condizioni fornite. Il runtime deve compilare i dati dei componenti nelle strutture di elenco nello stesso ordine delle entità in XrSpatialComponentDataQueryResultEXT :: entityIds ovvero i dati dei componenti in un determinato indice nell'array della struttura di elenco devono corrispondere all'entità nello stesso indice.
Se lo stato del monitoraggio per un'entità non è XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT , il runtime non deve modificare i dati nell'indice corrispondente a quell'entità nell'array contenuto nelle strutture di elenco allegate a XrSpatialComponentDataQueryResultEXT .
Utilizzo valido (implicito)
- L'estensione
XR_EXT_spatial_entitydeve essere abilitata prima di chiamare xrQuerySpatialComponentDataEXT -
snapshotdeve essere un handle XrSpatialSnapshotEXT valido -
queryConditiondeve essere un puntatore a una struttura XrSpatialComponentDataQueryConditionEXT valida -
queryResultdeve essere un puntatore a una struttura XrSpatialComponentDataQueryResultEXT
Codici di ritorno
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
Ad esempio, l'applicazione crea un XrSpatialSnapshotEXT che contiene 5 entità, dove:
- Le entità 1 e 2 hanno i componenti
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTeXR_SPATIAL_COMPONENT_TYPE_PARENT_EXT - Le entità 3 e 4 hanno i componenti
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXTeXR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT - L'entità 5 ha i componenti
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
Sì
Sì
Sì
Sì
No
No
No
No
Sì
Sì
Genitore
Genitore
Sì
Sì
Sì
Sì
No
No
No
No
No
No
Mesh3D
Mesh3D
No
No
No
No
Sì
Sì
Sì
Sì
Sì
Sì
Bounded3D
Bounded3D
No
No
No
No
Sì
Sì
Sì
Sì
No
No Text is not SVG - cannot display
Figura 20. Istantanea di esempio
xrQuerySpatialComponentDataEXT nello snapshot precedente con XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT elencato nella condizione di query restituirà le entità n. 1, 2 e 5 all'applicazione e l'applicazione può allegare un array di XrSpatialBounded2DDataEXT come parte della struttura XrSpatialComponentBounded2DListEXT alla catena successiva di XrSpatialComponentDataQueryResultEXT per ottenere i dati bounded2D.
XrSpatialEntityIdEXT
XrSpatialEntityIdEXT
1
1
2
2
5
5
Bounded2D
Bounded2D
Dati per entityId #1
Dati per entit...
Dati per entityId #2
Dati per entit...
Dati per entityId #5
Dati per entit...
entityIds
entityIds
avanti
avanti
XrSpatialComponent DataQueryResultEXT
XrSpatialComponent Dat...
limiti
limiti
XrSpatialComponent Bounded2DListEXT
XrSpatialComponent Bou... Il testo non è SVG e non può essere visualizzato
Figura 21. Risultato della query di esempio
xrQuerySpatialComponentDataEXT nello snapshot precedente con i componenti XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT e XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT elencati nella condizione della query comporterà la restituzione delle entità n. 3 e 4 all'applicazione e l'applicazione può allegare array di XrBoxf e XrSpatialMeshDataEXT come parte delle strutture XrSpatialComponentBounded3DListEXT e XrSpatialComponentMesh3DListEXT rispettivamente alla catena successiva di XrSpatialComponentDataQueryResultEXT per ottenere i dati dei componenti.
XrSpatialEntityIdEXT
XrSpatialEntityIdEXT
3
3
4
4
Bounded3D
Bounded3D
Data for entityId #3
Dati per entit...
Dati per entityId #4
Dati per entit...
Mesh3D
Mesh3D
Data for entityId #3
Dati per entit...
Dati per entityId #4
Dati per entit...
entityIds
entityIds
avanti
avanti
XrSpatialComponent DataQueryResultEXT
XrSpatialComponent Da...
limiti
limiti
avanti
avanti
XrSpatialComponent Bounded3DListEXT
XrSpatialComponent Bo...
XrSpatialComponent Mesh3DListEXT
XrSpatialComponent Me...
meshes
mesh Il testo non è SVG e non può essere visualizzato
Figura 22. Risultato della query di esempio
La struttura XrSpatialComponentDataQueryConditionEXT è definita come:
typedef struct XrSpatialComponentDataQueryConditionEXT {
XrStructureType type;
const void* next;
uint32_t componentTypeCount;
const XrSpatialComponentTypeEXT* componentTypes;
} XrSpatialComponentDataQueryConditionEXT;
Descrizioni dei membri
typeè l'XrStructureType di questa struttura.nextèNULLo un puntatore alla struttura successiva in una catena di strutture.componentTypeCountè unuint32_tche descrive il conteggio degli elementi nell'arraycomponentTypes.componentTypesè un array di XrSpatialComponentTypeEXT per cui ottenere i dati dallo snapshot.
Utilizzo valido (implicito)
- L'estensione
XR_EXT_spatial_entitydeve essere attivata prima di utilizzare XrSpatialComponentDataQueryConditionEXT -
typedeve essereXR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT -
nextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutture . Vedi anche: XrSpatialDiscoveryPersistenceUuidFilterEXT , XrSpatialFilterArchetypeEXT , XrSpatialFilterTrackingStateEXT - Se
componentTypeCountnon è0,componentTypesdeve essere un puntatore a un array di valori XrSpatialComponentTypeEXT validi dicomponentTypeCount
La struttura XrSpatialComponentDataQueryResultEXT è definita come:
typedef struct XrSpatialComponentDataQueryResultEXT {
XrStructureType type;
void* next;
uint32_t entityIdCapacityInput;
uint32_t entityIdCountOutput;
XrSpatialEntityIdEXT* entityIds;
uint32_t entityStateCapacityInput;
uint32_t entityStateCountOutput;
XrSpatialEntityTrackingStateEXT* entityStates;
} XrSpatialComponentDataQueryResultEXT;
Descrizioni dei membri
typeè l'XrStructureType di questa struttura.nextèNULLo un puntatore alla struttura successiva in una catena di strutture.entityIdCapacityInputè la capacità dell'arrayentityIdso 0 per indicare una richiesta di recupero della capacità richiesta.entityIdCountOutputè il numero diXrSpatialEntityIdEXTinentityIdso la capacità richiesta nel caso in cuientityIdCapacityInputsia insufficiente.entityIdsè un array diXrSpatialEntityIdEXT. Può essereNULLseentityIdCapacityInputè 0.entityStateCapacityInputè la capacità dell'arrayentityStateso 0 per indicare una richiesta di recupero della capacità richiesta.entityStateCountOutputè il numero di XrSpatialEntityTrackingStateEXT inentityStateso la capacità richiesta nel caso in cuientityStateCapacityInputsia insufficiente. Questo valore deve sempre corrispondere aentityIdCountOutput.entityStatesè un array di XrSpatialEntityTrackingStateEXT . Può essereNULLseentityStateCapacityInputè 0.- Consulta la sezione Parametri delle dimensioni del buffer per una descrizione dettagliata del recupero delle dimensioni
entityIdsrichieste.
Un'applicazione può utilizzare entityIds con xrCreateSpatialEntityFromIdEXT per creare handle XrSpatialEntityEXT per le entità per cui è interessata a ricevere aggiornamenti regolari. L'applicazione può quindi utilizzare questi handle XrSpatialEntityEXT con xrCreateSpatialUpdateSnapshotEXT per creare uno snapshot di aggiornamento contenente i dati più recenti noti al runtime dei componenti per le entità fornite.
Utilizzo valido (implicito)
- L'estensione
XR_EXT_spatial_entitydeve essere abilitata prima di utilizzare XrSpatialComponentDataQueryResultEXT -
typedeve essereXR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT -
nextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutture . Vedi anche: 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
entityIdCapacityInputnon è0,entityIdsdeve essere un puntatore a un array di valorientityIdCapacityInputXrSpatialEntityIdEXT - Se
entityStateCapacityInputnon è0,entityStatesdeve essere un puntatore a un array di valorientityStateCapacityInputXrSpatialEntityTrackingStateEXT
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;
L'enumerazione XrSpatialEntityTrackingStateEXT elenca i possibili stati di tracciamento delle entità spaziali:
Gli enum hanno i seguenti significati:
Descrizione enum
XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT
Il runtime ha interrotto il monitoraggio di questa entità e non lo riprenderà mai.
XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT
Il runtime ha messo in pausa il monitoraggio di questa entità, ma potrebbe riprenderlo in futuro.
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT
Il runtime sta attualmente monitorando questa entità e i dati dei relativi componenti sono validi.
MONITORAGGIO
IN PAUSA
INTERROTTO
Figura 23. XrSpatialEntityTrackingStateEXT
- Il runtime potrebbe modificare lo stato dell'entità spaziale da
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXTaXR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXTse sospende il monitoraggio di questa entità spaziale, ma ha la possibilità di riprenderlo in futuro. Alcuni esempi di quando il runtime potrebbe farlo includono (ma non sono limitati a) se l'applicazione perde la messa a fuoco dell'input; se l'entità spaziale specificata è troppo lontana dall'utente per essere tracciata con precisione; o se vengono tracciate troppe entità e il runtime vuole ridurre il costo del tracciamento. XrSpatialEntityTrackingStateEXT aiuta l'applicazione a isolarsi dalle diverse norme di monitoraggio di ogni runtime. - Il runtime potrebbe modificare lo stato di un'entità da
XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXTaXR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXToXR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT. - Il runtime deve modificare lo stato dell'entità spaziale da
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXToXR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXTaXR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXTse l'entità spaziale viene persa e il suo monitoraggio non verrà mai recuperato o ripreso. Un esempio di questo caso si verifica se il dispositivo perde il monitoraggio, riavvia la sessione di monitoraggio, ma non è in grado di localizzarsi nuovamente nel suo ambiente e quindi tratta le entità rilevate di questa sessione di monitoraggio come nuove entità. - Una volta impostato lo stato di monitoraggio di un'entità su
XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT, il runtime non deve mai modificarlo in un altro stato. - Quando esegui una query sui dati dei componenti di un'entità spaziale utilizzando xrQuerySpatialComponentDataEXT , il runtime deve impostare dati validi nei contenuti dei buffer forniti dall'applicazione nella catena successiva di XrSpatialComponentDataQueryResultEXT se lo stato dell'entità è
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT. Se lo stato dell'entità èXR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXToXR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT, il runtime non deve modificare il contenuto dei buffer.
Idioma a due chiamate per i dati dei componenti
La struttura XrSpatialBufferEXT è definita come:
typedef struct XrSpatialBufferEXT {
XrSpatialBufferIdEXT bufferId;
XrSpatialBufferTypeEXT bufferType;
} XrSpatialBufferEXT;
Descrizioni dei membri
bufferIdilXrSpatialBufferIdEXTdei dati del buffer.bufferTypeè XrSpatialBufferTypeEXT per indicare il tipo di dati inbufferId. L'applicazione può utilizzarebufferTypeper determinare quale funzione utilizzare per recuperare i dati effettivi del buffer.
Alcuni componenti spaziali hanno dati di dimensioni variabili e pertanto richiedono l'utilizzo dell'idioma a due chiamate per recuperare i dati. In questi casi, la struttura dei dati del componente spaziale fornisce un XrSpatialBufferEXT per ogni buffer di dimensioni variabili necessario nei dati del componente.
Per lo stesso bufferId , il runtime deve fornire gli stessi dati da una query di dati dei componenti all'altra, anche da uno snapshot all'altro. Un bufferId diverso tra le chiamate di query dei dati dei componenti indica all'applicazione che i dati per quel componente potrebbero essere cambiati.
Utilizzo valido (implicito)
- L'estensione
XR_EXT_spatial_entitydeve essere attivata prima di utilizzare XrSpatialBufferEXT -
bufferTypedeve essere un valore XrSpatialBufferTypeEXT valido
XR_DEFINE_ATOM(XrSpatialBufferIdEXT)
XrSpatialBufferIdEXT viene utilizzato per rappresentare qualsiasi tipo di dati di dimensioni variabili per un componente spaziale.
Il runtime deve mantenere XrSpatialBufferIdEXT e i relativi dati in memoria per almeno il ciclo di vita di XrSpatialSnapshotEXT che lo contiene. Il runtime potrebbe mantenere XrSpatialBufferIdEXT e i relativi dati in memoria per un periodo più lungo del ciclo di vita di XrSpatialSnapshotEXT per restituire lo stesso ID come parte degli snapshot creati in un secondo momento dall'applicazione. Per lo stesso XrSpatialBufferIdEXT , il runtime deve sempre restituire gli stessi dati tramite la funzione xrGetSpatialBuffer* appropriata.
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;
L'enumerazione XrSpatialBufferTypeEXT identifica i diversi tipi di dati del buffer rappresentato XrSpatialBufferIdEXT .
Descrizioni dell'enumerante
XR_SPATIAL_BUFFER_TYPE_STRING_EXT.XrSpatialBufferIdEXTcan viene passato a xrGetSpatialBufferStringEXT per recuperare un buffer di stringa.XR_SPATIAL_BUFFER_TYPE_UINT8_EXT.XrSpatialBufferIdEXTcan può essere passato a xrGetSpatialBufferUint8EXT per recuperare un bufferuint8_t.XR_SPATIAL_BUFFER_TYPE_UINT16_EXT.XrSpatialBufferIdEXTcan può essere passato a xrGetSpatialBufferUint16EXT per recuperare un bufferuint16_t.XR_SPATIAL_BUFFER_TYPE_UINT32_EXT.XrSpatialBufferIdEXTcan può essere passato a xrGetSpatialBufferUint32EXT per recuperare un bufferuint32_t.XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT.XrSpatialBufferIdEXTcan può essere passato a xrGetSpatialBufferFloatEXT per recuperare un bufferfloat.XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT.XrSpatialBufferIdEXTcan viene passato a xrGetSpatialBufferVector2fEXT per recuperare un buffer XrVector2f.XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT.XrSpatialBufferIdEXTpuò essere passato a xrGetSpatialBufferVector3fEXT per recuperare un buffer XrVector3f.
La funzione xrGetSpatialBufferStringEXT è definita come:
XrResult xrGetSpatialBufferStringEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
char* buffer);
Descrizioni dei parametri
snapshotè un handle per un XrSpatialSnapshotEXT .infocontiene le informazioni sul buffer da interrogare.bufferCapacityInputè la capacità dell'array o 0 per indicare una richiesta di recupero della capacità richiesta.bufferCountOutputè il numero di caratteri o la capacità richiesta nel caso in cuibufferCapacityInputnon sia sufficiente.bufferè un array dichar. Può essereNULLsebufferCapacityInputè 0.- Consulta la sezione Parametri delle dimensioni del buffer per una descrizione dettagliata del recupero delle dimensioni
bufferrichieste.
L'applicazione può ottenere i dati per un XrSpatialBufferEXT fornito da un componente, dove XrSpatialBufferEXT :: bufferType è XR_SPATIAL_BUFFER_TYPE_STRING_EXT utilizzando xrGetSpatialBufferStringEXT .
Il runtime deve restituire XR_ERROR_VALIDATION_FAILURE se XrSpatialBufferTypeEXT per XrSpatialBufferGetInfoEXT :: bufferId non è XR_SPATIAL_BUFFER_TYPE_STRING_EXT .
Il runtime deve restituire XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT se XrSpatialBufferGetInfoEXT :: bufferId non appartiene a snapshot .
buffer compilato dal runtime deve essere una stringa UTF-8 terminata con il carattere null.
Utilizzo valido (implicito)
- L'estensione
XR_EXT_spatial_entitydeve essere attivata prima di chiamare xrGetSpatialBufferStringEXT -
snapshotdeve essere un handle XrSpatialSnapshotEXT valido -
infodeve essere un puntatore a una struttura XrSpatialBufferGetInfoEXT valida -
bufferCountOutputdeve essere un puntatore a un valoreuint32_t - Se
bufferCapacityInputnon è0,bufferdeve essere un puntatore a un array di valori charbufferCapacityInput
Codici di ritorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
La funzione xrGetSpatialBufferUint8EXT è definita come:
XrResult xrGetSpatialBufferUint8EXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
uint8_t* buffer);
Descrizioni dei parametri
snapshotè un handle per un XrSpatialSnapshotEXT .infocontiene le informazioni sul buffer da interrogare.bufferCapacityInputè la capacità dell'array o 0 per indicare una richiesta di recupero della capacità richiesta.bufferCountOutputè il numero di elementi nell'arraybuffero la capacità richiesta nel caso in cuibufferCapacityInputsia insufficiente.bufferè un array diuint8_t. Può essereNULLsebufferCapacityInputè 0.- Consulta la sezione Parametri delle dimensioni del buffer per una descrizione dettagliata del recupero delle dimensioni
bufferrichieste.
L'applicazione può ottenere i dati per un XrSpatialBufferEXT fornito da un componente, dove XrSpatialBufferEXT :: bufferType è XR_SPATIAL_BUFFER_TYPE_UINT8_EXT utilizzando xrGetSpatialBufferUint8EXT .
Il runtime deve restituire XR_ERROR_VALIDATION_FAILURE se XrSpatialBufferTypeEXT per XrSpatialBufferGetInfoEXT :: bufferId non è XR_SPATIAL_BUFFER_TYPE_UINT8_EXT .
Il runtime deve restituire XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT se XrSpatialBufferGetInfoEXT :: bufferId non appartiene a snapshot .
Utilizzo valido (implicito)
- L'estensione
XR_EXT_spatial_entitydeve essere abilitata prima di chiamare xrGetSpatialBufferUint8EXT -
snapshotdeve essere un handle XrSpatialSnapshotEXT valido -
infodeve essere un puntatore a una struttura XrSpatialBufferGetInfoEXT valida -
bufferCountOutputdeve essere un puntatore a un valoreuint32_t - Se
bufferCapacityInputnon è0,bufferdeve essere un puntatore a un array di valoribufferCapacityInputuint8_t
Codici di ritorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
La funzione xrGetSpatialBufferUint16EXT è definita come:
XrResult xrGetSpatialBufferUint16EXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
uint16_t* buffer);
Descrizioni dei parametri
snapshotè un handle per un XrSpatialSnapshotEXT .infocontiene le informazioni sul buffer da interrogare.bufferCapacityInputè la capacità dell'array o 0 per indicare una richiesta di recupero della capacità richiesta.bufferCountOutputè il numero di elementi nell'arraybuffero la capacità richiesta nel caso in cuibufferCapacityInputsia insufficiente.bufferè un array diuint16_t. Può essereNULLsebufferCapacityInputè 0.- Consulta la sezione Parametri delle dimensioni del buffer per una descrizione dettagliata del recupero delle dimensioni
bufferrichieste.
L'applicazione può ottenere i dati per un XrSpatialBufferEXT fornito da un componente, dove XrSpatialBufferEXT :: bufferType è XR_SPATIAL_BUFFER_TYPE_UINT16_EXT utilizzando xrGetSpatialBufferUint16EXT .
Il runtime deve restituire XR_ERROR_VALIDATION_FAILURE se XrSpatialBufferTypeEXT per XrSpatialBufferGetInfoEXT :: bufferId non è XR_SPATIAL_BUFFER_TYPE_UINT16_EXT .
Il runtime deve restituire XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT se XrSpatialBufferGetInfoEXT :: bufferId non appartiene a snapshot .
Utilizzo valido (implicito)
- L'estensione
XR_EXT_spatial_entitydeve essere attivata prima di chiamare xrGetSpatialBufferUint16EXT -
snapshotdeve essere un handle XrSpatialSnapshotEXT valido -
infodeve essere un puntatore a una struttura XrSpatialBufferGetInfoEXT valida -
bufferCountOutputdeve essere un puntatore a un valoreuint32_t - Se
bufferCapacityInputnon è0,bufferdeve essere un puntatore a un array di valoribufferCapacityInputuint16_t
Codici di ritorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
La funzione xrGetSpatialBufferUint32EXT è definita come:
XrResult xrGetSpatialBufferUint32EXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
uint32_t* buffer);
Descrizioni dei parametri
snapshotè un handle per un XrSpatialSnapshotEXT .infocontiene le informazioni sul buffer da interrogare.bufferCapacityInputè la capacità dell'array o 0 per indicare una richiesta di recupero della capacità richiesta.bufferCountOutputè il numero di elementi nell'arraybuffero la capacità richiesta nel caso in cuibufferCapacityInputsia insufficiente.bufferè un array diuint32_t. Può essereNULLsebufferCapacityInputè 0.- Consulta la sezione Parametri delle dimensioni del buffer per una descrizione dettagliata del recupero delle dimensioni
bufferrichieste.
L'applicazione può ottenere i dati per un XrSpatialBufferEXT fornito da un componente, dove XrSpatialBufferEXT :: bufferType è XR_SPATIAL_BUFFER_TYPE_UINT32_EXT utilizzando xrGetSpatialBufferUint32EXT .
Il runtime deve restituire XR_ERROR_VALIDATION_FAILURE se XrSpatialBufferTypeEXT per XrSpatialBufferGetInfoEXT :: bufferId non è XR_SPATIAL_BUFFER_TYPE_UINT32_EXT .
Il runtime deve restituire XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT se XrSpatialBufferGetInfoEXT :: bufferId non appartiene a snapshot .
Utilizzo valido (implicito)
- L'estensione
XR_EXT_spatial_entitydeve essere attivata prima di chiamare xrGetSpatialBufferUint32EXT -
snapshotdeve essere un handle XrSpatialSnapshotEXT valido -
infodeve essere un puntatore a una struttura XrSpatialBufferGetInfoEXT valida -
bufferCountOutputdeve essere un puntatore a un valoreuint32_t - Se
bufferCapacityInputnon è0,bufferdeve essere un puntatore a un array di valoribufferCapacityInputuint32_t
Codici di ritorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
La funzione xrGetSpatialBufferFloatEXT è definita come:
XrResult xrGetSpatialBufferFloatEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
float* buffer);
Descrizioni dei parametri
snapshotè un handle per un XrSpatialSnapshotEXT .infocontiene le informazioni sul buffer da interrogare.bufferCapacityInputè la capacità dell'array o 0 per indicare una richiesta di recupero della capacità richiesta.bufferCountOutputè il numero di elementi nell'arraybuffero la capacità richiesta nel caso in cuibufferCapacityInputsia insufficiente.bufferè un array difloat. Può essereNULLsebufferCapacityInputè 0.- Consulta la sezione Parametri delle dimensioni del buffer per una descrizione dettagliata del recupero delle dimensioni
bufferrichieste.
L'applicazione può ottenere i dati per un XrSpatialBufferEXT fornito da un componente, dove XrSpatialBufferEXT :: bufferType è XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT utilizzando xrGetSpatialBufferFloatEXT .
Il runtime deve restituire XR_ERROR_VALIDATION_FAILURE se XrSpatialBufferTypeEXT per XrSpatialBufferGetInfoEXT :: bufferId non è XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT .
Il runtime deve restituire XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT se XrSpatialBufferGetInfoEXT :: bufferId non appartiene a snapshot .
Utilizzo valido (implicito)
- L'estensione
XR_EXT_spatial_entitydeve essere attivata prima di chiamare xrGetSpatialBufferFloatEXT -
snapshotdeve essere un handle XrSpatialSnapshotEXT valido -
infodeve essere un puntatore a una struttura XrSpatialBufferGetInfoEXT valida -
bufferCountOutputdeve essere un puntatore a un valoreuint32_t - Se
bufferCapacityInputnon è0,bufferdeve essere un puntatore a un array di valoribufferCapacityInputfloat
Codici di ritorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
La funzione xrGetSpatialBufferVector2fEXT è definita come:
XrResult xrGetSpatialBufferVector2fEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
XrVector2f* buffer);
Descrizioni dei parametri
snapshotè un handle per un XrSpatialSnapshotEXT .infocontiene le informazioni sul buffer da interrogare.bufferCapacityInputè la capacità dell'array o 0 per indicare una richiesta di recupero della capacità richiesta.bufferCountOutputè il numero di elementi nell'arraybuffero la capacità richiesta nel caso in cuibufferCapacityInputsia insufficiente.bufferè un array di XrVector2f . Può essereNULLsebufferCapacityInputè 0.- Consulta la sezione Parametri delle dimensioni del buffer per una descrizione dettagliata del recupero delle dimensioni
bufferrichieste.
L'applicazione può ottenere i dati per un XrSpatialBufferEXT fornito da un componente, dove XrSpatialBufferEXT :: bufferType è XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT utilizzando xrGetSpatialBufferVector2fEXT .
Il runtime deve restituire XR_ERROR_VALIDATION_FAILURE se XrSpatialBufferTypeEXT per XrSpatialBufferGetInfoEXT :: bufferId non è XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT .
Il runtime deve restituire XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT se XrSpatialBufferGetInfoEXT :: bufferId non appartiene a snapshot .
Utilizzo valido (implicito)
- L'estensione
XR_EXT_spatial_entitydeve essere attivata prima di chiamare xrGetSpatialBufferVector2fEXT -
snapshotdeve essere un handle XrSpatialSnapshotEXT valido -
infodeve essere un puntatore a una struttura XrSpatialBufferGetInfoEXT valida -
bufferCountOutputdeve essere un puntatore a un valoreuint32_t - Se
bufferCapacityInputnon è0,bufferdeve essere un puntatore a un array di strutturebufferCapacityInputXrVector2f
Codici di ritorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
La funzione xrGetSpatialBufferVector3fEXT è definita come:
XrResult xrGetSpatialBufferVector3fEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
XrVector3f* buffer);
Descrizioni dei parametri
snapshotè un handle per un XrSpatialSnapshotEXT .infocontiene le informazioni sul buffer da interrogare.bufferCapacityInputè la capacità dell'array o 0 per indicare una richiesta di recupero della capacità richiesta.bufferCountOutputè il numero di elementi nell'arraybuffero la capacità richiesta nel caso in cuibufferCapacityInputsia insufficiente.bufferè un array di XrVector3f . Può essereNULLsebufferCapacityInputè 0.- Consulta la sezione Parametri delle dimensioni del buffer per una descrizione dettagliata del recupero delle dimensioni
bufferrichieste.
L'applicazione può ottenere i dati per un XrSpatialBufferEXT fornito da un componente, dove XrSpatialBufferEXT :: bufferType è XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT utilizzando xrGetSpatialBufferVector3fEXT .
Il runtime deve restituire XR_ERROR_VALIDATION_FAILURE se XrSpatialBufferTypeEXT per XrSpatialBufferGetInfoEXT :: bufferId non è XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT .
Il runtime deve restituire XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT se XrSpatialBufferGetInfoEXT :: bufferId non appartiene a snapshot .
Utilizzo valido (implicito)
- L'estensione
XR_EXT_spatial_entitydeve essere attivata prima di chiamare xrGetSpatialBufferVector3fEXT -
snapshotdeve essere un handle XrSpatialSnapshotEXT valido -
infodeve essere un puntatore a una struttura XrSpatialBufferGetInfoEXT valida -
bufferCountOutputdeve essere un puntatore a un valoreuint32_t - Se
bufferCapacityInputnon è0,bufferdeve essere un puntatore a un array di strutturebufferCapacityInputXrVector3f
Codici di ritorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
La struttura XrSpatialBufferGetInfoEXT è definita come:
typedef struct XrSpatialBufferGetInfoEXT {
XrStructureType type;
const void* next;
XrSpatialBufferIdEXT bufferId;
} XrSpatialBufferGetInfoEXT;
Descrizioni dei membri
typeè l'XrStructureType di questa struttura.nextèNULLo un puntatore alla struttura successiva in una catena di strutture.bufferIdunXrSpatialBufferIdEXTper il buffer di cui recuperare i dati.
Utilizzo valido (implicito)
- L'estensione
XR_EXT_spatial_entitydeve essere attivata prima di utilizzare XrSpatialBufferGetInfoEXT -
typedeve essereXR_TYPE_SPATIAL_BUFFER_GET_INFO_EXT -
nextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutture
#define XR_NULL_SPATIAL_BUFFER_ID_EXT 0
XR_NULL_SPATIAL_BUFFER_ID_EXT è un valore riservato che rappresenta un XrSpatialBufferIdEXT non valido . Può essere passato e restituito dalle funzioni API solo se specificamente consentito.
Crea snapshot di aggiornamento
La funzione xrCreateSpatialUpdateSnapshotEXT è definita come:
XrResult xrCreateSpatialUpdateSnapshotEXT(
XrSpatialContextEXT spatialContext,
const XrSpatialUpdateSnapshotCreateInfoEXT* createInfo,
XrSpatialSnapshotEXT* snapshot);
Descrizioni dei parametri
spatialContextè un XrSpatialContextEXT creato in precedenza utilizzando xrCreateSpatialContextAsyncEXT .createInfoè un puntatore a un XrSpatialUpdateSnapshotCreateInfoEXT .snapshotè un puntatore al risultato XrSpatialSnapshotEXT .
L'applicazione può utilizzare xrCreateSpatialUpdateSnapshotEXT per creare uno snapshot e ottenere i dati dei componenti più recenti per entità specifiche come note al runtime. Le applicazioni possono fornire gli handle XrSpatialEntityEXT e i tipi di componenti a cui sono interessate durante la creazione dello snapshot.
L'applicazione può utilizzare XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes per filtrare l'elenco dei componenti i cui dati devono essere inclusi nello snapshot. Se l'applicazione fornisce un elenco valido di tipi di componenti spaziali in XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes , il runtime deve includere nello snapshot solo le entità spaziali che hanno almeno uno dei componenti forniti in XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes . Inoltre, il runtime deve includere solo i dati di questi componenti nello snapshot.
Il runtime deve restituire XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT se uno qualsiasi dei XrSpatialComponentTypeEXT in XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes non è abilitato per le funzionalità spaziali passate a XrSpatialContextCreateInfoEXT :: capabilityConfigs durante la creazione di spatialContext .
Se l'applicazione non fornisce un elenco di tipi di componenti spaziali in XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes , il runtime deve includere tutte le entità spaziali elencate in XrSpatialUpdateSnapshotCreateInfoEXT :: entities nello snapshot e deve includere i dati di tutti i componenti abilitati delle funzionalità configurate per spatialContext .
Il runtime non deve includere entità spaziali non elencate in XrSpatialUpdateSnapshotCreateInfoEXT :: entities in snapshot .
L'applicazione può creare il numero di snapshot che vuole, ma deve tenere conto della memoria allocata per ogni nuovo snapshot e deve eliminare gli snapshot quando non ne ha più bisogno.
Utilizzo valido (implicito)
- L'estensione
XR_EXT_spatial_entitydeve essere attivata prima di chiamare xrCreateSpatialUpdateSnapshotEXT -
spatialContextdeve essere un handle XrSpatialContextEXT valido -
createInfodeve essere un puntatore a una struttura XrSpatialUpdateSnapshotCreateInfoEXT valida -
snapshotdeve essere un puntatore a un handle XrSpatialSnapshotEXT
Codici di ritorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
La struttura XrSpatialUpdateSnapshotCreateInfoEXT è definita come:
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;
Descrizioni dei membri
typeè l'XrStructureType di questa struttura.nextèNULLo un puntatore alla struttura successiva in una catena di strutture. Queste strutture non sono definite in OpenXR di base o in questa estensione.entityCountè unuint32_tche descrive il conteggio degli elementi nell'arrayentities.entitiesè un array di XrSpatialEntityEXT per cui il runtime deve includere i dati dei componenti nello snapshot.componentTypeCountè unuint32_tche descrive il conteggio degli elementi nell'arraycomponentTypes.componentTypesè un array di XrSpatialComponentTypeEXT per cui il runtime deve includere i dati nello snapshot.baseSpaceè XrSpace rispetto al quale si troveranno tutte le posizioni dell'aggiornamento XrSpatialSnapshotEXT.timeè ilXrTimein cui si troveranno tutte le posizioni dell'aggiornamento XrSpatialSnapshotEXT.
Utilizzo valido (implicito)
- L'estensione
XR_EXT_spatial_entitydeve essere attivata prima di utilizzare XrSpatialUpdateSnapshotCreateInfoEXT -
typedeve essereXR_TYPE_SPATIAL_UPDATE_SNAPSHOT_CREATE_INFO_EXT -
nextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutture -
entitiesdeve essere un puntatore a un array di handleentityCountvalidi XrSpatialEntityEXT - Se
componentTypeCountnon è0,componentTypesdeve essere un puntatore a un array di valori XrSpatialComponentTypeEXT validi dicomponentTypeCount -
baseSpacedeve essere un handle XrSpace valido - Il parametro
entityCountdeve essere maggiore di0 - Sia
baseSpacesia gli elementi dientitiesdevono essere stati creati, allocati o recuperati dalla stessa XrSession
Elimina snapshot
La funzione xrDestroySpatialSnapshotEXT è definita come:
XrResult xrDestroySpatialSnapshotEXT(
XrSpatialSnapshotEXT snapshot);
Descrizioni dei parametri
snapshotè un XrSpatialSnapshotEXT fornito in precedenza da xrCreateSpatialDiscoverySnapshotCompleteEXT o xrCreateSpatialUpdateSnapshotEXT .
L'applicazione può chiamare xrDestroySpatialSnapshotEXT per eliminare l'handle XrSpatialSnapshotEXT e le risorse associate.
Utilizzo valido (implicito)
- L'estensione
XR_EXT_spatial_entitydeve essere attivata prima di chiamare xrDestroySpatialSnapshotEXT -
snapshotdeve essere un handle XrSpatialSnapshotEXT valido
Thread Safety
- L'accesso a
snapshote a tutti gli handle secondari deve essere sincronizzato esternamente
Codici di ritorno
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
Componenti comuni
2D delimitato
Dati dei componenti
La struttura XrSpatialBounded2DDataEXT è definita come:
typedef struct XrSpatialBounded2DDataEXT {
XrPosef center;
XrExtent2Df extents;
} XrSpatialBounded2DDataEXT;
Descrizioni dei membri
centerè un XrPosef che definisce il centro geometrico del componente 2D delimitato.extentssono le estensioni del componente 2D delimitato lungo l'asse X (extents.width) e l'asse Y (extents.height), centrate sucenter.
Il extents del XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT si riferisce alle dimensioni dell'entità nel piano x-y del sistema di coordinate del piano. Un piano con posizione {0, 0, 0}, rotazione {0, 0, 0, 1} (nessuna rotazione) ed estensione {1, 1} si riferisce a un piano di 1 metro x 1 metro centrato su {0, 0, 0} con il vettore normale della faccia anteriore che punta verso la direzione +Z nello spazio del componente.
X X Y Y Z Z Altezza Altezza Y Y Z Z X X Piano verticale Piano verticale Piano orizzontale Piano orizzontale Larghezza Larghezza Larghezza Larghezza Altezza Altezza
Figura 24. Sistema di coordinate del componente Bounded2D
Nota
OpenXR utilizza un piano X-Y con +Z come normale del piano, ma altre API potrebbero utilizzare un piano X-Z con +Y come normale del piano. Il piano X-Y può essere convertito in un piano X-Z ruotando -π/2 radianti intorno all'asse +X.
Utilizzo valido (implicito)
- L'estensione
XR_EXT_spatial_entitydeve essere attivata prima di utilizzare XrSpatialBounded2DDataEXT
Struttura dell'elenco dei componenti per eseguire query sui dati
La struttura XrSpatialComponentBounded2DListEXT è definita come:
typedef struct XrSpatialComponentBounded2DListEXT {
XrStructureType type;
void* next;
uint32_t boundCount;
XrSpatialBounded2DDataEXT* bounds;
} XrSpatialComponentBounded2DListEXT;
Descrizioni dei membri
typeè l'XrStructureType di questa struttura.nextèNULLo un puntatore alla struttura successiva in una catena di strutture. Queste strutture non sono definite in OpenXR di base o in questa estensione.boundCountè unuint32_tche descrive il conteggio degli elementi nell'arraybounds.boundsè un array di XrSpatialBounded2DDataEXT .
Il runtime deve restituire XR_ERROR_VALIDATION_FAILURE da xrQuerySpatialComponentDataEXT se XrSpatialComponentBounded2DListEXT si trova nella catena successiva di XrSpatialComponentDataQueryResultEXT :: next ma XrSpatialComponentDataQueryConditionEXT ::componentTypeCount non è zero e XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT non è incluso in XrSpatialComponentDataQueryConditionEXT :: componentTypes .
Il runtime deve restituire XR_ERROR_SIZE_INSUFFICIENT da xrQuerySpatialComponentDataEXT se boundCount è inferiore a XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .
Se xrQuerySpatialComponentDataEXT :: snapshot è stato creato da xrCreateSpatialDiscoverySnapshotCompleteEXT , il runtime deve fornire XrSpatialBounded2DDataEXT :: center in XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace e XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time .
Se xrQuerySpatialComponentDataEXT :: snapshot è stato creato da xrCreateSpatialUpdateSnapshotEXT , il runtime deve fornire XrSpatialBounded2DDataEXT :: center in XrSpatialUpdateSnapshotCreateInfoEXT :: baseSpace e XrSpatialUpdateSnapshotCreateInfoEXT :: time .
Utilizzo valido (implicito)
- L'estensione
XR_EXT_spatial_entitydeve essere attivata prima di utilizzare XrSpatialComponentBounded2DListEXT -
typedeve essereXR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXT -
nextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutture -
boundsdeve essere un puntatore a un array di struttureboundCountXrSpatialBounded2DDataEXT - Il parametro
boundCountdeve essere maggiore di0
Configurazione
Se XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT è enumerato in XrSpatialCapabilityComponentTypesEXT :: componentTypes per una determinata funzionalità, l'applicazione può attivarla includendo il valore enum nell'elenco XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents. Questo componente non richiede alcuna configurazione speciale per essere incluso nella catena successiva di XrSpatialCapabilityConfigurationBaseHeaderEXT .
3D delimitato
Dati dei componenti
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT utilizza XrBoxf per i suoi dati.
Struttura dell'elenco dei componenti per eseguire query sui dati
La struttura XrSpatialComponentBounded3DListEXT è definita come:
typedef struct XrSpatialComponentBounded3DListEXT {
XrStructureType type;
void* next;
uint32_t boundCount;
XrBoxf* bounds;
} XrSpatialComponentBounded3DListEXT;
Descrizioni dei membri
typeè l'XrStructureType di questa struttura.nextèNULLo un puntatore alla struttura successiva in una catena di strutture. Queste strutture non sono definite in OpenXR di base o in questa estensione.boundCountè unuint32_tche descrive il conteggio degli elementi nell'arraybounds.boundsè un array di XrBoxf .
Il runtime deve restituire XR_ERROR_VALIDATION_FAILURE da xrQuerySpatialComponentDataEXT se XrSpatialComponentBounded3DListEXT si trova nella catena successiva di XrSpatialComponentDataQueryResultEXT :: next ma XrSpatialComponentDataQueryConditionEXT ::componentTypeCount non è zero e XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT non è incluso in XrSpatialComponentDataQueryConditionEXT :: componentTypes .
Il runtime deve restituire XR_ERROR_SIZE_INSUFFICIENT da xrQuerySpatialComponentDataEXT se boundCount è inferiore a XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .
Se xrQuerySpatialComponentDataEXT :: snapshot è stato creato da xrCreateSpatialDiscoverySnapshotCompleteEXT , il runtime deve fornire XrBoxf :: center in XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace in XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time .
Se xrQuerySpatialComponentDataEXT :: snapshot è stato creato da xrCreateSpatialUpdateSnapshotEXT , il runtime deve fornire XrBoxf :: center in XrSpatialUpdateSnapshotCreateInfoEXT :: baseSpace in XrSpatialUpdateSnapshotCreateInfoEXT :: time .
Utilizzo valido (implicito)
- L'estensione
XR_EXT_spatial_entitydeve essere attivata prima di utilizzare XrSpatialComponentBounded3DListEXT -
typedeve essereXR_TYPE_SPATIAL_COMPONENT_BOUNDED_3D_LIST_EXT -
nextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutture -
boundsdeve essere un puntatore a un array di struttureboundCountXrBoxf - Il parametro
boundCountdeve essere maggiore di0
Configurazione
Se XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT è enumerato in XrSpatialCapabilityComponentTypesEXT :: componentTypes per una determinata funzionalità, l'applicazione può attivarla includendo l'enumerazione nell'elenco XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents. Questo componente non richiede alcuna configurazione speciale per essere incluso nella catena successiva di XrSpatialCapabilityConfigurationBaseHeaderEXT .
Genitore
Dati dei componenti
XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT utilizza XrSpatialEntityIdEXT per i suoi dati.
Struttura dell'elenco dei componenti per eseguire query sui dati
La struttura XrSpatialComponentParentListEXT è definita come:
typedef struct XrSpatialComponentParentListEXT {
XrStructureType type;
void* next;
uint32_t parentCount;
XrSpatialEntityIdEXT* parents;
} XrSpatialComponentParentListEXT;
Descrizioni dei membri
typeè l'XrStructureType di questa struttura.nextèNULLo un puntatore alla struttura successiva in una catena di strutture. Queste strutture non sono definite in OpenXR di base o in questa estensione.parentCountè unuint32_tche descrive il conteggio degli elementi nell'arrayparents.parentsè un array diXrSpatialEntityIdEXT.
Il runtime deve restituire XR_ERROR_VALIDATION_FAILURE da xrQuerySpatialComponentDataEXT se XrSpatialComponentParentListEXT si trova nella catena successiva di XrSpatialComponentDataQueryResultEXT :: next ma XrSpatialComponentDataQueryConditionEXT ::componentTypeCount non è zero e XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT non è incluso in XrSpatialComponentDataQueryConditionEXT :: componentTypes .
Il runtime deve restituire XR_ERROR_SIZE_INSUFFICIENT da xrQuerySpatialComponentDataEXT se parentCount è inferiore a XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .
Utilizzo valido (implicito)
- L'estensione
XR_EXT_spatial_entitydeve essere attivata prima di utilizzare XrSpatialComponentParentListEXT -
typedeve essereXR_TYPE_SPATIAL_COMPONENT_PARENT_LIST_EXT -
nextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutture -
parentsdeve essere un puntatore a un array di valoriparentCountXrSpatialEntityIdEXT - Il parametro
parentCountdeve essere maggiore di0
Configurazione
Se XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT è enumerato in XrSpatialCapabilityComponentTypesEXT :: componentTypes per una determinata funzionalità, l'applicazione può attivarla includendo l'enumerazione nell'elenco XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents. Questo componente non richiede alcuna configurazione speciale per essere incluso nella catena successiva di XrSpatialCapabilityConfigurationBaseHeaderEXT .
Mesh 3D
Dati dei componenti
La struttura XrSpatialMeshDataEXT è definita come:
typedef struct XrSpatialMeshDataEXT {
XrPosef origin;
XrSpatialBufferEXT vertexBuffer;
XrSpatialBufferEXT indexBuffer;
} XrSpatialMeshDataEXT;
Descrizioni dei membri
originè un XrPosef che definisce l'origine della mesh. Tutti i vertici della mesh devono essere relativi a questa origine.vertexBufferè un XrSpatialBufferEXT che fornisce l'ID di un buffer che rappresenta il buffer dei vertici dell'entità su cui si trova questo componente. La posizione dei vertici deve essere relativa aorigin.indexBufferè un XrSpatialBufferEXT che fornisce l'ID di un buffer che rappresenta un array di indici di triangoli, specificando gli indici dei vertici della mesh invertexBuffer. Gli indici dei triangoli devono essere restituiti in senso antiorario e tre indici indicano un triangolo.
Il tipo di componente che utilizza XrSpatialMeshDataEXT deve specificare XrSpatialBufferTypeEXT di vertexBuffer e indexBuffer .
Utilizzo valido (implicito)
- L'estensione
XR_EXT_spatial_entitydeve essere attivata prima di utilizzare XrSpatialMeshDataEXT -
vertexBufferdeve essere una struttura XrSpatialBufferEXT valida -
indexBufferdeve essere una struttura XrSpatialBufferEXT valida
Struttura dell'elenco dei componenti per eseguire query sui dati
La struttura XrSpatialComponentMesh3DListEXT è definita come:
typedef struct XrSpatialComponentMesh3DListEXT {
XrStructureType type;
void* next;
uint32_t meshCount;
XrSpatialMeshDataEXT* meshes;
} XrSpatialComponentMesh3DListEXT;
Descrizioni dei membri
typeè l'XrStructureType di questa struttura.nextèNULLo un puntatore alla struttura successiva in una catena di strutture.meshCountè unuint32_tche descrive il conteggio degli elementi nell'arraymeshes.meshesè un array di XrSpatialMeshDataEXT .
L'applicazione può eseguire query sul componente mesh 3D delle entità spaziali in un XrSpatialSnapshotEXT aggiungendo XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT in XrSpatialComponentDataQueryConditionEXT :: componentTypes e aggiungendo XrSpatialComponentMesh3DListEXT alla catena di puntatori successiva di XrSpatialComponentDataQueryResultEXT .
Il runtime deve restituire XR_ERROR_VALIDATION_FAILURE da xrQuerySpatialComponentDataEXT se XrSpatialComponentMesh3DListEXT si trova nella catena successiva di XrSpatialComponentDataQueryResultEXT :: next ma XrSpatialComponentDataQueryConditionEXT ::componentTypeCount non è zero e XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT non è incluso in XrSpatialComponentDataQueryConditionEXT :: componentTypes .
Il runtime deve restituire XR_ERROR_SIZE_INSUFFICIENT da xrQuerySpatialComponentDataEXT se meshCount è inferiore a XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .
Per XrSpatialMeshDataEXT compilato dal runtime nell'array meshes, XrSpatialBufferEXT :: bufferType per XrSpatialMeshDataEXT :: vertexBuffer deve essere XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT e XrSpatialBufferEXT :: bufferType per XrSpatialMeshDataEXT :: indexBuffer deve essere XR_SPATIAL_BUFFER_TYPE_UINT32_EXT .
Utilizzo valido (implicito)
- L'estensione
XR_EXT_spatial_entitydeve essere abilitata prima di utilizzare XrSpatialComponentMesh3DListEXT -
typedeve essereXR_TYPE_SPATIAL_COMPONENT_MESH_3D_LIST_EXT -
nextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutture -
meshesdeve essere un puntatore a un array di strutturemeshCountXrSpatialMeshDataEXT - Il parametro
meshCountdeve essere maggiore di0
Configurazione
Se XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT è enumerato in XrSpatialCapabilityComponentTypesEXT :: componentTypes per una determinata funzionalità, l'applicazione può attivarla includendo l'enumerazione nell'elenco XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents della struttura derivata XrSpatialCapabilityConfigurationBaseHeaderEXT della funzionalità che supporta questo componente.
Questo componente non richiede alcuna configurazione speciale per essere incluso nella catena successiva di XrSpatialCapabilityConfigurationBaseHeaderEXT .
Filtri dello stato del monitoraggio
La struttura XrSpatialFilterTrackingStateEXT è definita come:
typedef struct XrSpatialFilterTrackingStateEXT {
XrStructureType type;
const void* next;
XrSpatialEntityTrackingStateEXT trackingState;
} XrSpatialFilterTrackingStateEXT;
Descrizioni dei membri
typeè l'XrStructureType di questa struttura.nextèNULLo un puntatore alla struttura successiva in una catena di strutture.trackingStateè XrSpatialEntityTrackingStateEXT per cui l'applicazione vuole applicare il filtro.
L'applicazione può utilizzare XrSpatialFilterTrackingStateEXT nella catena successiva di XrSpatialDiscoverySnapshotCreateInfoEXT per limitare la scoperta solo alle entità il cui stato di monitoraggio è trackingState .
L'applicazione può utilizzare XrSpatialFilterTrackingStateEXT nella catena successiva di XrSpatialComponentDataQueryConditionEXT per limitare la query sui dati dei componenti da uno snapshot solo alle entità il cui stato di monitoraggio è trackingState .
Utilizzo valido (implicito)
- L'estensione
XR_EXT_spatial_entitydeve essere attivata prima di utilizzare XrSpatialFilterTrackingStateEXT -
typedeve essereXR_TYPE_SPATIAL_FILTER_TRACKING_STATE_EXT -
nextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutture -
trackingStatedeve essere un valore XrSpatialEntityTrackingStateEXT valido
Esempio di codice
Utilizzo dell'applicazione
Le applicazioni in genere utilizzano l'estensione dell'entità spaziale nel seguente pattern:
- Un'applicazione enumera innanzitutto le funzionalità spaziali del sistema utilizzando xrEnumerateSpatialCapabilitiesEXT . Successivamente, esamina l'array restituito di XrSpatialCapabilityEXT ed enumera i componenti e le funzionalità supportati per ciascuna di queste funzionalità utilizzando rispettivamente xrEnumerateSpatialCapabilityComponentTypesEXT e xrEnumerateSpatialCapabilityFeaturesEXT. In questo modo, l'applicazione ha un quadro completo dei componenti che può attivare e delle configurazioni accettate dalla funzionalità.
- L'applicazione crea quindi uno o più handle XrSpatialContextEXT con configurazioni specifiche delle funzionalità spaziali, in cui le configurazioni attivano e configurano una funzionalità specifica nel contesto spaziale e attivano e configurano i componenti per queste funzionalità.
- Per ogni XrSpatialContextEXT , l'applicazione attende di ricevere eventi XrEventDataSpatialDiscoveryRecommendedEXT per XrSpatialContextEXT prima di utilizzare xrCreateSpatialDiscoverySnapshotAsyncEXT per rilevare le entità spaziali. Al termine di questa operazione asincrona, l'applicazione riceve un handle XrSpatialSnapshotEXT.
- L'applicazione esegue query per le entità e i dati dei componenti inclusi in questo XrSpatialSnapshotEXT utilizzando xrQuerySpatialComponentDataEXT . L'applicazione legge i dati dei componenti più recenti delle entità di cui è stata eseguita la query dalle strutture allegate alla catena successiva di XrSpatialComponentDataQueryResultEXT se lo stato dell'entità è
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT. - Se ci sono entità specifiche che l'applicazione identifica come interessanti e per le quali vuole ricevere aggiornamenti nel tempo, crea handle XrSpatialEntityEXT per queste entità utilizzando xrCreateSpatialEntityFromIdEXT . L'applicazione riceve gli aggiornamenti per queste entità interessanti utilizzando xrCreateSpatialUpdateSnapshotEXT e la stessa funzione xrQuerySpatialComponentDataEXT sull'XrSpatialSnapshotEXT appena creato per ottenere i dati dei componenti più recenti per queste entità.
Scopri le entità spaziali e i dati dei componenti delle query
Il seguente codice di esempio mostra come scoprire le entità spaziali per la funzionalità "Foo" e interrogare i relativi dati dei componenti.
/****************************/
/* 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));
Query sui dati del buffer
Il seguente codice di esempio mostra come ottenere i dati di un componente che fornisce un XrSpatialBufferEXT .
/****************************/
/* Component definition */
/****************************/
// Foo component that provides an XrVector3f buffer
#define XR_SPATIAL_COMPONENT_TYPE_FOO_EXT ((XrSpatialComponentTypeEXT)1000740000U)
#define XR_TYPE_SPATIAL_COMPONENT_FOO_LIST_EXT ((XrStructureType)1000740000U)
// XrSpatialComponentFooListEXT extends XrSpatialComponentDataQueryResultEXT
typedef struct XrSpatialComponentFooListEXT {
XrStructureType type;
void* XR_MAY_ALIAS next;
uint32_t fooCount;
XrSpatialBufferEXT* foo;
} XrSpatialComponentFooListEXT;
/******************************/
/* End Component definition */
/******************************/
// Query for the foo component data
XrSpatialComponentTypeEXT componentToQuery = XR_SPATIAL_COMPONENT_TYPE_FOO_EXT;
XrSpatialComponentDataQueryConditionEXT queryCond{XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT};
queryCond.componentTypeCount = 1;
queryCond.componentTypes = &componentToQuery;
XrSpatialComponentDataQueryResultEXT queryResult{XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT};
CHK_XR(xrQuerySpatialComponentDataEXT(snapshot, &queryCond, &queryResult));
std::vector<XrSpatialEntityIdEXT> entityIds(queryResult.entityIdCountOutput);
queryResult.entityIdCapacityInput = entityIds.size();
queryResult.entityIds = entityIds.data();
std::vector<XrSpatialBufferEXT> fooBuffers(queryResult.entityIdCountOutput);
XrSpatialComponentFooListEXT fooList{XR_TYPE_SPATIAL_COMPONENT_FOO_LIST_EXT};
fooList.fooCount = fooBuffers.size();
fooList.foo = fooBuffers.data();
queryResult.next = &fooList;
CHK_XR(xrQuerySpatialComponentDataEXT(snapshot, &queryCond, &queryResult));
for (int32_t i = 0; i < queryResult.entityIdCountOutput; ++i) {
// foo component data for entity entityIds[i]
if (fooBuffers[i].bufferType == XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT) {
XrSpatialBufferGetInfoEXT getInfo{XR_TYPE_SPATIAL_BUFFER_GET_INFO_EXT};
getInfo.bufferId = fooBuffers[i].bufferId;
uint32_t bufferCountOutput;
CHK_XR(xrGetSpatialBufferVector3fEXT(snapshot, &getInfo, 0, &bufferCountOutput, nullptr));
std::vector<XrVector3f> vertexBuffer(bufferCountOutput);
CHK_XR(xrGetSpatialBufferVector3fEXT(snapshot, &getInfo, bufferCountOutput, &bufferCountOutput, vertexBuffer.data()));
// XrVertex3f buffer for entity entityIds[i] is now available in vertexBuffer vector.
}
}
Linee guida per le estensioni
Se un'estensione definisce un nuovo XrSpatialComponentTypeEXT che fornisce dati aggiuntivi su un'entità spaziale,
- L'estensione deve anche definire una struttura di elenco per questo componente che consenta all'applicazione di passare un array al runtime da compilare con i dati per ciascuna delle entità spaziali che soddisfano xrQuerySpatialComponentDataEXT ::
queryCondition. Alcuni esempi di queste strutture di elenchi sono XrSpatialComponentParentListEXT e XrSpatialComponentBounded2DListEXT . Se la dimensione dei dati del componente è variabile e richiede all'applicazione di utilizzare l'idioma a due chiamate per eseguire query, i dati del componente devono fornire un XrSpatialBufferEXT per ogni dato di dimensione variabile nella struttura dell'elenco e deve specificare l'XrSpatialBufferTypeEXT per ogni buffer. L'applicazione può quindi eseguire query sui dati del buffer utilizzando le funzioni definite in Idioma a due chiamate per i dati dei componenti . Un esempio di questa struttura è XrSpatialMeshDataEXT, che è inclusa in XrSpatialComponentMesh3DListEXT . - L'estensione può anche fornire strutture che l'applicazione può concatenare a XrSpatialComponentDataQueryConditionEXT ::
nextper fornire filtri aggiuntivi per la query relativa ai dati di questo componente.
- L'estensione deve anche definire una struttura di elenco per questo componente che consenta all'applicazione di passare un array al runtime da compilare con i dati per ciascuna delle entità spaziali che soddisfano xrQuerySpatialComponentDataEXT ::
Le estensioni possono definire strutture che estendono XrSpatialDiscoverySnapshotCreateInfoEXT per fornire filtri aggiuntivi per il rilevamento. I filtri per la creazione dello snapshot non devono influire sulla configurazione del contesto spaziale, ma devono essere utilizzati per fornire suggerimenti al runtime su quali entità e dati devono essere inclusi nello snapshot in base alla configurazione corrente del contesto spaziale (e quindi alla configurazione corrente dei servizi sottostanti).
Se un'estensione definisce una nuova XrSpatialCapabilityEXT ,
- Deve anche specificare l'elenco di XrSpatialComponentTypeEXT che i runtime devono fornire sulle entità per questa funzionalità.
- Deve anche fornire strutture derivate da XrSpatialCapabilityConfigurationBaseHeaderEXT che consentano la configurazione di questa funzionalità.
Se un'estensione definisce una nuova XrSpatialCapabilityFeatureEXT , deve anche definire una struttura di configurazione corrispondente che possa essere concatenata al puntatore successivo di XrSpatialCapabilityConfigurationBaseHeaderEXT , che l'applicazione può utilizzare per attivare la funzionalità durante la creazione di un XrSpatialContextEXT .
Un'estensione che definisce una nuova XrSpatialCapabilityEXT deve seguire questo modello per la specifica:
- Panoramica
- Assistenza per i runtime
- Configurazione
- Componenti garantiti
- Esempio di codice
Un'estensione che definisce un nuovo XrSpatialComponentTypeEXT deve seguire questo modello per la specifica:
- Dati dei componenti
- Struttura dell'elenco dei componenti per eseguire query sui dati
- Configurazione
Quando scrivi un'API che fornisce all'applicazione un
XrSpatialBufferIdEXT, deve essere accompagnata da un XrSpatialBufferTypeEXT per comunicare all'applicazione il tipo di dati del buffer e l'applicazione può utilizzare una funzionexrGetSpatialBuffer*appropriata per recuperare i contenuti effettivi del buffer.
Linee guida per la progettazione e l'estensione delle etichette semantiche
Sebbene questa estensione non definisca alcun componente per trasmettere le informazioni sull'etichetta semantica di un'entità, stabilisce le regole di progettazione e le linee guida per qualsiasi estensione che definisca un componente di questo tipo. Nel testo seguente, " deve " e " deve " vincolano gli autori di questa funzionalità, anziché un'implementazione di runtime o un'applicazione che utilizza l'API.
- Se un'estensione definisce etichette semantiche per qualsiasi XrSpatialCapabilityEXT, deve farlo definendo un nuovo XrSpatialComponentTypeEXT, nonché una nuova enumerazione con un insieme di etichette (un "insieme di etichette semantiche") da utilizzare come dati per il componente.
- Un'enumerazione che rappresenta un insieme di etichette semantiche deve avere un valore per indicare che l'entità non è classificata in nessuna delle etichette di questo insieme. Il nome di questo enumeratore deve includere "UNCATEGORIZED", ad esempio
XR_SPATIAL_PLANE_SEMANTIC_LABEL_UNCATEGORIZED_EXT. Questo valore indica alle applicazioni che il runtime riconosce questa entità, ma che esistono altri set di etichette semantiche in cui è classificata. - L'enumerazione di questo XrSpatialComponentTypeEXT appena definito in xrEnumerateSpatialCapabilityComponentTypesEXT implica che il runtime supporta il set di etichette semantiche (e quindi le etichette definite nel set) corrispondente a quel tipo di componente.
- Le applicazioni esprimono il loro desiderio di scoprire entità con etichette appartenenti a questo insieme di etichette semantiche includendo il valore XrSpatialComponentTypeEXT corrispondente nell'array XrSpatialCapabilityConfigurationBaseHeaderEXT ::
enabledComponentsdello struct di configurazione per la funzionalità per cui è enumerato il tipo di componente. - È possibile che una singola entità spaziale abbia più componenti, ognuno dei quali fornisce un'etichetta dal proprio set di etichette semantiche. Considera l'esempio seguente con alcuni set di etichette semantiche ipotetici:
XrSpatialObjectSemanticLabel, che potrebbero avere valori come sedia, divano, tavolo e così via.XrSpatialSofaBrand, che potrebbe avere valori come IKEA, Wayfair e così via, eXrSpatialIkeaSofa, che potrebbe avere nomi di modelli IKEA specifici di divani. In questo scenario, la stessa entità divano ha tutti e tre i componenti (etichette di tutti e tre i set di etichette semantiche), ognuno dei quali fornisce un livello di granularità diverso delle informazioni sull'entità. - Se un'estensione definisce un nuovo XrSpatialComponentTypeEXT che fornisce un nuovo insieme di etichette semantiche contenente più etichette oltre all'etichetta
UNCATEGORIZED, l'estensione deve prendere in considerazione la definizione di un XrSpatialCapabilityFeatureEXT che consenta alle applicazioni di attivare solo un sottoinsieme delle etichette definite nell'insieme di etichette semantiche corrispondente a quel tipo di componente. Questo sottoinsieme, fornito nella catena successiva della configurazione delle funzionalità, funge da suggerimento per i runtime per ottimizzare le pipeline di monitoraggio e monitorare solo il sottoinsieme fornito. Un esempio di questo struct di funzionalità è riportato di seguito . - Le estensioni non devono aggiungere etichette all'enumerazione del set di etichette semantiche esistente. Devono invece definire una nuova enumerazione che contenga enumeratori equivalenti con semantica identica e con valori uguali a quelli dell'altro insieme, oltre agli enumeratori appena aggiunti. La specifica del nuovo insieme di etichette semantiche definito deve anche stabilire la mappatura tra il vecchio insieme di etichette e quello nuovo. Vedi l'esempio di seguito .
Esempio di definizione della funzionalità spaziale per il sottoinsieme di etichette semantiche
// 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;
Esempio di estensione dell'etichetta semantica spaziale
typedef enum XrSpatialExamplePlaneSemanticLabelExtensionEXT {
XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_UNCATEGORIZED_EXT = 1,
XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_FLOOR_EXT = 2,
XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_WALL_EXT = 3,
XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_CEILING_EXT = 4,
XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_TABLE_EXT = 5,
XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_DOOR_EXT = 6,
XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_WINDOW_EXT = 7,
XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialExamplePlaneSemanticLabelExtensionEXT;
Considera l'esempio precedente in cui un'estensione definisce un'enumerazione XrSpatialExamplePlaneSemanticLabelExtensionEXT per estendere l'esistente XrSpatialPlaneSemanticLabelEXT con valori per rappresentare porte e finestre. La specifica per la nuova enumerazione deve includere il testo per il seguente modulo:
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
|====
Nuove macro
Nuovi tipi di base
XrSpatialBufferIdEXTXrSpatialEntityIdEXT
Nuovi tipi di oggetti
Nuovi comandi
- xrCreateSpatialContextAsyncEXT
- xrCreateSpatialContextCompleteEXT
- xrCreateSpatialDiscoverySnapshotAsyncEXT
- xrCreateSpatialDiscoverySnapshotCompleteEXT
- xrCreateSpatialEntityFromIdEXT
- xrCreateSpatialUpdateSnapshotEXT
- xrDestroySpatialContextEXT
- xrDestroySpatialEntityEXT
- xrDestroySpatialSnapshotEXT
- xrEnumerateSpatialCapabilitiesEXT
- xrEnumerateSpatialCapabilityComponentTypesEXT
- xrEnumerateSpatialCapabilityFeaturesEXT
- xrGetSpatialBufferFloatEXT
- xrGetSpatialBufferStringEXT
- xrGetSpatialBufferUint16EXT
- xrGetSpatialBufferUint32EXT
- xrGetSpatialBufferUint8EXT
- xrGetSpatialBufferVector2fEXT
- xrGetSpatialBufferVector3fEXT
- xrQuerySpatialComponentDataEXT
Nuove strutture
- XrCreateSpatialContextCompletionEXT
- XrCreateSpatialDiscoverySnapshotCompletionEXT
- XrCreateSpatialDiscoverySnapshotCompletionInfoEXT
- XrEventDataSpatialDiscoveryRecommendedEXT
- XrSpatialBounded2DDataEXT
- XrSpatialBufferEXT
- XrSpatialBufferGetInfoEXT
- XrSpatialCapabilityComponentTypesEXT
- XrSpatialCapabilityConfigurationBaseHeaderEXT
- XrSpatialComponentDataQueryConditionEXT
- XrSpatialComponentDataQueryResultEXT
- XrSpatialContextCreateInfoEXT
- XrSpatialDiscoverySnapshotCreateInfoEXT
- XrSpatialEntityFromIdCreateInfoEXT
- XrSpatialMeshDataEXT
- XrSpatialUpdateSnapshotCreateInfoEXT
Estensione di XrSpatialComponentDataQueryResultEXT :
Estensione di XrSpatialDiscoverySnapshotCreateInfoEXT , XrSpatialComponentDataQueryConditionEXT :
Nuovi enum
- XrSpatialBufferTypeEXT
- XrSpatialCapabilityEXT
- XrSpatialCapabilityFeatureEXT
- XrSpatialComponentTypeEXT
- XrSpatialEntityTrackingStateEXT
Nuove costanti enum
XR_EXT_SPATIAL_ENTITY_EXTENSION_NAMEXR_EXT_spatial_entity_SPEC_VERSIONEstensione di XrObjectType :
XR_OBJECT_TYPE_SPATIAL_CONTEXT_EXTXR_OBJECT_TYPE_SPATIAL_ENTITY_EXTXR_OBJECT_TYPE_SPATIAL_SNAPSHOT_EXT
Estensione di 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
Estensione di 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
Problemi
Una singola entità deriva sempre da una sola funzionalità?
- Risolto
- Risposta: no. Dipende completamente dal runtime in base alle sue capacità di monitoraggio e al modo in cui vuole rappresentare un'entità rilevata. La specifica non prescrive alcuna rappresentazione particolare dell'entità spaziale, ad eccezione dei componenti garantiti di una determinata funzionalità per impostare un'aspettativa minima. Un runtime potrebbe essere in grado di unire le entità rilevate da funzionalità separate e rappresentarle come una singola entità con i componenti garantiti di tutte le funzionalità che hanno contribuito a identificarla. Un esempio potrebbe essere che i tavoli possono essere rilevati sia da una funzionalità di monitoraggio del piano sia da una di monitoraggio degli oggetti. Il monitoraggio del piano fornisce il componente
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTsull'entità, mentre il monitoraggio degli oggetti fornisceXR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT. Un determinato runtime potrebbe fornire la tabella come due entità separate, ognuna con il proprio insieme di componenti garantiti, mentre alcuni runtime potrebbero fornire una sola entità per rappresentare la tabella e avere siaXR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTcheXR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXTnella stessa entità. Ciò che è importante notare qui è che una determinata entità spaziale può avere al massimo un singolo componente di un determinato tipo di componente . Pertanto, se i dati dei componenti prodotti dalle diverse funzionalità sono in conflitto per una determinata entità, il runtime deve rappresentarli come due entità separate.
Cronologia delle versioni
Revisione 1, 12/04/2024 (Nihav Jain, Google)
- Descrizione iniziale dell'estensione