XR_EXT_spatial_entity
Chaîne de nom
XR_EXT_spatial_entity
Type d'extension
Extension d'instance
Numéro d'extension enregistré
741
Révision
1
État de ratification
Ratifié
Dépendances des extensions et des versions
XR_EXT_future
Participants
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
Présentation
Cette extension présente les concepts et les bases de la compréhension des scènes et du raisonnement spatial dans OpenXR. Cela unifie plusieurs domaines de fonctionnalités distincts, mais connexes, qui sont énumérés, configurés et avec lesquels il est possible d'interagir de manière largement uniforme, comme défini par cette extension. Comme cette extension ne comporte pas de définitions concrètes pour aucun de ces domaines fonctionnels, le texte de la spécification formelle a tendance à être quelque peu abstrait. Les exemples inclus dans le texte de spécification de cette extension font parfois référence à des fonctionnalités définies dans une extension associée à venir ou hypothétique à des fins d'illustration, sans limiter ni spécifier intrinsèquement ces fonctionnalités supplémentaires.
Voici les principaux éléments de cette extension :
- Entités spatiales : la fonctionnalité est axée sur les entités , qui offrent très peu de fonctionnalités en elles-mêmes.
- Composants spatiaux : ces entités sont associées à des composants qui fournissent des données et des comportements.
- Types de composants spatiaux : chaque composant spatial est d'un type de composant spécifique , et une entité donnée ne peut comporter qu'un seul composant d'un type de composant donné .
- Contexte spatial : toutes les interactions avec des entités spatiales se produisent dans un contexte après une phase d'initialisation et de configuration.
- Capacités spatiales : la manipulation des entités spatiales est largement assurée par les capacités . Une capacité est une unité de fonctionnalité, par exemple (sans s'y limiter) les ancres définies par l'application, la détection de plans ou le suivi d'images. Chaque capacité est généralement définie dans une extension distincte (activée lors de la création de l'instance comme d'habitude) et est activée pour un contexte spécifique au moment de la création.
- Chaque capacité est associée à un ensemble de types de composants pour lesquels des composants sont présents sur chaque entité exposée par cette capacité . L'extension définissant une fonctionnalité spécifie les types de composants obligatoires pour la fonctionnalité ("garantis"), tandis que cette même extension ou d'autres peuvent spécifier les types de composants facultatifs fournis par certaines implémentations potentielles. Un nombre quelconque de capacités peut fournir aux entités des composants d'un type de composant donné, qui sont utilisables de manière uniforme, quelle que soit la capacité qui les a produits.
- Fonctionnalités de capacité spatiale : de plus, certaines capacités nécessitent une configuration et sont donc paramétrées par des fonctionnalités de capacité .
Cette extension fournit un mécanisme permettant d'énumérer les composants fournis par chaque fonctionnalité prise en charge sur le système actuel, à la fois les composants obligatoires et les composants facultatifs .
Étant donné que certaines implémentations peuvent nécessiter différents degrés de paramétrisation pour les capacités , cette extension fournit un mécanisme permettant d'énumérer les fonctionnalités de capacité compatibles associées à une capacité donnée dans le système actuel.
Cette extension définit également plusieurs composants courants qui devraient être utilisés dans un large éventail de fonctionnalités .
Entité spatiale
Les entités spatiales sont des entités qui existent dans un espace et qui comportent diverses données associées organisées en composants. Ils peuvent correspondre à l'un des éléments suivants :
- Physiques (par exemple, les surfaces planes comme les murs et les sols, les objets comme les chaises et les bibliothèques, etc.)
- virtuels (par exemple, contenus placés et partagés par une autre application ou un autre utilisateur) ;
- Défini par l'application (par exemple, l'application marque une zone comme "salon" ou "cuisine", ou marque un point comme emplacement pour placer le téléviseur, etc.)
Les éléments exposés via le système d'actions, comme les contrôleurs ou le regard, ne sont pas destinés à être modélisés en tant qu'entités spatiales.
Les entités spatiales dans OpenXR sont modélisées en tant que système entité-composant . Chaque entité spatiale possède un ensemble de composants, et chaque composant fournit un ensemble unique de données et de comportements pour cette entité.
Les entités spatiales sont représentées par un atome XrSpatialEntityIdEXT ou un handle XrSpatialEntityEXT. Pour en savoir plus, consultez la section Représentations d'entités spatiales.
Types de composants spatiaux
Une entité spatiale comporte un ou plusieurs composants qui fournissent des données ou des comportements pour cette entité. Pour découvrir certains composants courants définis par cette extension, consultez Composants courants.
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'énumération XrSpatialComponentTypeEXT identifie les différents types de composants que le moteur d'exécution peut prendre en charge.
Tous les types de composants listés ne sont pas fournis par cette extension seule : certains nécessitent l'activation d'extensions supplémentaires au moment de la création de l'instance, comme indiqué dans la documentation.
Les énumérants ont les valeurs suivantes :
Description de l'enum
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT
Composant qui fournit les limites 2D d'une entité spatiale. La structure de liste correspondante est XrSpatialComponentBounded2DListEXT et la structure de données correspondante est XrSpatialBounded2DDataEXT.
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT
Composant qui fournit les limites 3D d'une entité spatiale. La structure de liste correspondante est XrSpatialComponentBounded3DListEXT. La structure de données correspondante est XrBoxf.
XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT
Composant qui fournit le XrSpatialEntityIdEXT du parent pour une entité spatiale. La structure de liste correspondante est XrSpatialComponentParentListEXT ; la structure de données correspondante est XrSpatialEntityIdEXT
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT
Composant qui fournit un maillage 3D pour une entité spatiale. La structure de liste correspondante est XrSpatialComponentMesh3DListEXT. La structure de données correspondante est XrSpatialMeshDataEXT.
XR_SPATIAL_COMPONENT_TYPE_PLANE_ALIGNMENT_EXT
Composant qui fournit l'énumération d'alignement du plan pour une entité spatiale. La structure de liste correspondante est XrSpatialComponentPlaneAlignmentListEXT. La structure de données correspondante est XrSpatialPlaneAlignmentEXT (ajoutée par l'extension XR_EXT_spatial_plane_tracking).
XR_SPATIAL_COMPONENT_TYPE_MESH_2D_EXT
Composant qui fournit un maillage 2D pour une entité spatiale. La structure de liste correspondante est XrSpatialComponentMesh2DListEXT. La structure de données correspondante est XrSpatialMeshDataEXT (ajoutée par l'extension XR_EXT_spatial_plane_tracking).
XR_SPATIAL_COMPONENT_TYPE_POLYGON_2D_EXT
Composant qui fournit un polygone de délimitation 2D pour une entité spatiale. La structure de liste correspondante est XrSpatialComponentPolygon2DListEXT. La structure de données correspondante est XrSpatialPolygon2DDataEXT (ajoutée par l'extension XR_EXT_spatial_plane_tracking).
XR_SPATIAL_COMPONENT_TYPE_PLANE_SEMANTIC_LABEL_EXT
Composant qui fournit un libellé sémantique pour un plan. La structure de liste correspondante est XrSpatialComponentPlaneSemanticLabelListEXT. La structure de données correspondante est XrSpatialPlaneSemanticLabelEXT (ajoutée par l'extension XR_EXT_spatial_plane_tracking).
XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT
Composant décrivant le type, l'ID et l'emplacement du repère. La structure de liste correspondante est XrSpatialComponentMarkerListEXT. La structure de données correspondante est XrSpatialMarkerDataEXT (ajoutée par l'extension XR_EXT_spatial_marker_tracking).
XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT
Composant qui fournit un libellé sémantique pour une scène. La structure de liste correspondante est XrSpatialComponentObjectSemanticLabelListEXT. La structure de données correspondante est XrSpatialObjectSemanticLabelEXT . (Ajouté par l'extension XR_EXT_spatial_object_tracking)
XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT
Composant qui fournit un libellé sémantique pour un clavier. La structure de liste correspondante est XrSpatialComponentKeyboardSemanticLabelListEXT. La structure de données correspondante est XrSpatialKeyboardSemanticLabelEXT (ajoutée par l'extension XR_EXT_spatial_object_tracking).
XR_SPATIAL_COMPONENT_TYPE_MOUSE_SEMANTIC_LABEL_EXT
Composant qui fournit un libellé sémantique pour une souris. La structure de liste correspondante est XrSpatialComponentMouseSemanticLabelListEXT. La structure de données correspondante est XrSpatialMouseSemanticLabelEXT (ajoutée par l'extension XR_EXT_spatial_object_tracking).
XR_SPATIAL_COMPONENT_TYPE_ANCHOR_EXT
Composant qui fournit l'emplacement d'une ancre. La structure de liste correspondante est XrSpatialComponentAnchorListEXT. La structure de données correspondante est XrPosef (ajoutée par l'extension XR_EXT_spatial_anchor).
XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_EXT
Composant qui fournit l'UUID persistant pour une entité spatiale. La structure de liste correspondante est XrSpatialComponentPersistenceListEXT. La structure de données correspondante est XrSpatialPersistenceDataEXT (ajoutée par l'extension XR_EXT_spatial_persistence).
XR_SPATIAL_COMPONENT_TYPE_IMAGE_2D_EXT
Composant décrivant le type d'image plane. La structure de liste correspondante est XrSpatialComponentImage2DListEXT et la structure de données correspondante est XrSpatialImageSizeEXT . (Ajouté par l'extension XR_EXT_spatial_image_tracking)
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT
Composant qui fournit les normales pour le maillage 3D d'une entité spatiale. La structure de liste correspondante est XrSpatialComponentMesh3DNormalsListEXT. La structure de données correspondante est XrSpatialBufferEXT (ajoutée par l'extension XR_EXT_spatial_mesh_tracking).
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT
Composant qui fournit les libellés sémantiques par vertex pour le maillage 3D d'une entité spatiale. La structure de liste correspondante est XrSpatialComponentMesh3DVertexSemanticLabelsListEXT. La structure de données correspondante est XrSpatialBufferEXT. Les données du tampon sont mappées sur XrSpatialMeshSemanticLabelEXT (ajouté par l'extension XR_EXT_spatial_mesh_tracking).
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT
Composant qui fournit les libellés sémantiques par face de triangle pour le maillage 3D d'une entité spatiale. La structure de liste correspondante est XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT. La structure de données correspondante est XrSpatialBufferEXT. Les données du tampon sont mappées sur XrSpatialMeshSemanticLabelEXT (ajouté par l'extension XR_EXT_spatial_mesh_tracking).
XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_ANDROID
Composant qui fournit un libellé sémantique pour un objet. La structure de liste correspondante est XrSpatialComponentObjectSemanticLabelListANDROID. La structure de données correspondante est XrSpatialObjectSemanticLabelANDROID (ajoutée par l'extension XR_ANDROID_spatial_object_tracking).
XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID
Composant qui fournit la pose d'un impact de raycast sur une entité. La structure de liste correspondante est XrSpatialComponentRaycastResultListANDROID. La structure de données correspondante est XrSpatialRaycastResultDataANDROID (ajoutée par l'extension XR_ANDROID_spatial_discovery_raycast).
XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID
Composant qui fournit l'ID d'entité de l'entité englobant l'entité associée. La structure de liste correspondante est XrSpatialComponentSubsumedByListANDROID. La structure de données correspondante est XrSpatialEntityIdEXT (ajoutée par l'extension XR_ANDROID_spatial_component_subsumed_by).
XR_SPATIAL_COMPONENT_TYPE_ROOM_ANDROIDSYS
Composant qui fournit les dimensions et le type de pièce d'une boîte à chaussures. La structure de liste correspondante est XrSpatialComponentRoomListANDROIDSYS. La structure de données correspondante est XrSpatialRoomDataANDROIDSYS (ajoutée par l'extension XR_ANDROIDSYS_spatial_room_tracking).
XR_SPATIAL_COMPONENT_TYPE_MATERIAL_TYPE_ANDROIDSYS
Composant qui fournit le type de matériau d'une surface limite. La structure de liste correspondante est XrSpatialComponentMaterialTypeListANDROIDSYS. La structure de données correspondante est XrSpatialMaterialTypeANDROIDSYS (ajoutée par l'extension XR_ANDROIDSYS_spatial_room_tracking).
XR_SPATIAL_COMPONENT_TYPE_CONFIDENCE_ANDROIDSYS
Composant qui fournit la confiance d'un élément pouvant être suivi. La structure de liste correspondante est XrSpatialComponentConfidenceListANDROIDSYS. La structure de données correspondante est float (ajoutée par l'extension XR_ANDROIDSYS_spatial_room_tracking).
XR_SPATIAL_COMPONENT_TYPE_ROOM_EMPTINESS_ANDROIDSYS
Composant qui indique si une pièce est vide ou non. La structure de liste correspondante est XrSpatialComponentRoomEmptinessListANDROIDSYS. La structure de données correspondante est float (ajoutée par l'extension XR_ANDROIDSYS_spatial_room_tracking).
XR_SPATIAL_COMPONENT_TYPE_OCCUPANCY_GRID_ANDROIDX1
Composant qui fournit des informations sur la grille d'occupation de l'entité associée. La structure de liste correspondante est XrSpatialComponentOccupancyGridListANDROIDX1. La structure de données correspondante est XrSpatialOccupancyGridDataANDROIDX1 (ajoutée par l'extension XR_ANDROIDX1_spatial_occupancy_grid).
XR_SPATIAL_COMPONENT_TYPE_ANNOTATION_QUAD_ANDROID
Composant décrivant une annotation de quad. La structure de liste correspondante est XrSpatialComponentAnnotationQuadListANDROID. La structure de données correspondante est XrSpatialAnnotationQuadDataANDROID (ajoutée par l'extension XR_ANDROID_spatial_annotation_tracking).
XR_SPATIAL_COMPONENT_TYPE_STREETSCAPE_GEOMETRY_METADATA_ANDROIDX2
Composant qui fournit les métadonnées d'une géométrie Streetscape. La structure de liste correspondante est XrSpatialComponentStreetscapeGeometryMetadataListANDROIDX2. La structure de données correspondante est XrSpatialStreetscapeGeometryMetadataANDROIDX2 (ajoutée par l'extension XR_ANDROIDX2_geospatial_streetscape).
Fonctionnalités et configuration spatiales
Les capacités spatiales définissent les capacités d'un moteur d'exécution à découvrir des entités qui comportent un ensemble garanti de composants. Les applications activent les composants d'une fonctionnalité spatiale lors de la création de XrSpatialContextEXT, et le runtime doit à son tour fournir uniquement les composants activés sur les entités découvertes. Par exemple, si un runtime indique que l'un des composants d'une fonctionnalité donnée est "libellés sémantiques", cela signifie que l'application peut activer les libellés sémantiques via la configuration de cette fonctionnalité et que le runtime doit uniquement fournir le composant de libellé sémantique s'il est configuré.
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'énumération XrSpatialCapabilityEXT identifie les différents types de capacités que le moteur d'exécution peut prendre en charge.
Les énumérants ont les valeurs suivantes :
Description de l'enum
XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT
Suivi des avions (ajouté par l'extension XR_EXT_spatial_plane_tracking)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT
Capacité à détecter et suivre les codes QR. (Ajouté par l'extension XR_EXT_spatial_marker_tracking)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE_EXT
Possibilité de détecter et de suivre les microcodes QR. (Ajouté par l'extension XR_EXT_spatial_marker_tracking)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_EXT
Capacité à détecter et à suivre les marqueurs Aruco. (Ajouté par l'extension XR_EXT_spatial_marker_tracking)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXT
Capacité à détecter et suivre les AprilTags. (Ajouté par l'extension XR_EXT_spatial_marker_tracking)
XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT
Suivi des objets (ajouté par l'extension XR_EXT_spatial_object_tracking)
XR_SPATIAL_CAPABILITY_ANCHOR_EXT
Possibilité de créer des ancres spatiales (ajoutée par l'extension XR_EXT_spatial_anchor)
XR_SPATIAL_CAPABILITY_IMAGE_TRACKING_EXT
Capacité à détecter et à suivre des images de référence planes. (Ajouté par l'extension XR_EXT_spatial_image_tracking)
XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT
Possibilité de suivre le maillage d'un environnement. (Ajouté par l'extension XR_EXT_spatial_mesh_tracking)
XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_ANDROID
Suivi des objets (ajouté par l'extension XR_ANDROID_spatial_object_tracking)
XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID
Raycast contre le tampon de profondeur (ajouté par l'extension XR_ANDROID_spatial_discovery_raycast)
XR_SPATIAL_CAPABILITY_ROOM_TRACKING_ANDROIDSYS
Possibilité de suivre une salle (ajoutée par l'extension XR_ANDROIDSYS_spatial_room_tracking)
XR_SPATIAL_CAPABILITY_ROOM_BOUNDARY_TRACKING_ANDROIDSYS
Possibilité de suivre la limite d'une pièce (ajoutée par l'extension XR_ANDROIDSYS_spatial_room_tracking)
XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID
Suivi des annotations (ajouté par l'extension XR_ANDROID_spatial_annotation_tracking)
XR_SPATIAL_CAPABILITY_STREETSCAPE_GEOMETRY_ANDROIDX2
Géométrie du paysage urbain (ajoutée par l'extension XR_ANDROIDX2_geospatial_streetscape)
La fonction xrEnumerateSpatialCapabilitiesEXT est définie comme suit :
XrResult xrEnumerateSpatialCapabilitiesEXT(
XrInstance instance,
XrSystemId systemId,
uint32_t capabilityCapacityInput,
uint32_t* capabilityCountOutput,
XrSpatialCapabilityEXT* capabilities);
Descriptions des paramètres
instanceest un handle vers une XrInstance .systemIdest leXrSystemIddont les capacités spatiales seront énumérées.capabilityCapacityInputcorrespond à la capacité du tableaucapabilitiesou à 0 pour indiquer une demande de récupération de la capacité requise.capabilityCountOutputcorrespond au nombre de capacités ou à la capacité requise sicapabilityCapacityInputest insuffisant.capabilitiesest un tableau de XrSpatialCapabilityEXT . Elle peut êtreNULLsicapabilityCapacityInputest défini sur 0.- Pour obtenir une description détaillée de la récupération de la taille
capabilitiesrequise, consultez la section Paramètres de taille du tampon.
L'application peut énumérer la liste des capacités spatiales prises en charge par un XrSystemId donné à l'aide de xrEnumerateSpatialCapabilitiesEXT .
L'exécution ne doit pas énumérer les fonctionnalités spatiales dont l'extension n'est pas activée pour instance .
Utilisation valide (implicite)
- L'extension
XR_EXT_spatial_entitydoit être activée avant d'appeler xrEnumerateSpatialCapabilitiesEXT. -
instancedoit être un handle XrInstance valide -
capabilityCountOutputmust être un pointeur vers une valeuruint32_t - Si
capabilityCapacityInputn'est pas0,capabilitiesdoit être un pointeur vers un tableau de valeurs XrSpatialCapabilityEXTcapabilityCapacityInput.
Codes de retour
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 fonction xrEnumerateSpatialCapabilityComponentTypesEXT est définie comme suit :
XrResult xrEnumerateSpatialCapabilityComponentTypesEXT(
XrInstance instance,
XrSystemId systemId,
XrSpatialCapabilityEXT capability,
XrSpatialCapabilityComponentTypesEXT* capabilityComponents);
Descriptions des paramètres
instanceest un handle vers une XrInstance .systemIdest leXrSystemIddont les composants de capacité spatiale seront énumérés.capabilityest l'XrSpatialCapabilityEXT pour lequel les composants seront énumérés.capabilityComponentsest un pointeur vers un XrSpatialCapabilityComponentTypesEXT , qui est une structure d'entrée/sortie dans laquelle un tableau alloué à l'application est renseigné.
Cette fonction énumère les types de composants que la fonctionnalité donnée fournit sur ses entités dans le système tel qu'il est configuré.
L'application peut utiliser les types de composants énumérés dans XrSpatialCapabilityComponentTypesEXT :: componentTypes pour comprendre l'ensemble des composants que systemId prend en charge pour capability et peut utiliser cette liste pour déterminer ce qu'est une configuration valide pour capability lors de la création d'un XrSpatialContextEXT pour celui-ci.
L'exécution doit renvoyer XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT si capability n'est pas énuméré par xrEnumerateSpatialCapabilitiesEXT .
Le runtime ne doit pas énumérer les types de composants spatiaux dont l'extension n'est pas activée pour instance .
Utilisation valide (implicite)
- L'extension
XR_EXT_spatial_entitydoit être activée avant d'appeler xrEnumerateSpatialCapabilityComponentTypesEXT. -
instancedoit être un handle XrInstance valide -
capabilitydoit être une valeur XrSpatialCapabilityEXT valide. -
capabilityComponentsdoit être un pointeur vers une structure XrSpatialCapabilityComponentTypesEXT.
Codes de retour
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 structure XrSpatialCapabilityComponentTypesEXT est définie comme suit :
typedef struct XrSpatialCapabilityComponentTypesEXT {
XrStructureType type;
void* next;
uint32_t componentTypeCapacityInput;
uint32_t componentTypeCountOutput;
XrSpatialComponentTypeEXT* componentTypes;
} XrSpatialCapabilityComponentTypesEXT;
Descriptions des membres
typeest le XrStructureType de cette structure.nextestNULLou un pointeur vers la structure suivante dans une chaîne de structures. Aucune structure de ce type n'est définie dans l'extension ni dans le cœur d'OpenXR.componentTypeCapacityInputcorrespond à la capacité du tableau ou à 0 pour indiquer une demande de récupération de la capacité requise.componentTypeCountOutputcorrespond au nombre de types de composants ou à la capacité requise sicomponentTypeCapacityInputest insuffisant.componentTypesest un tableau de XrSpatialComponentTypeEXT . Elle peut êtreNULLsicomponentTypeCapacityInputest défini sur 0.- Pour obtenir une description détaillée de la récupération de la taille
componentTypesrequise, consultez la section Paramètres de taille du tampon.
Utilisation valide (implicite)
- L'extension
XR_EXT_spatial_entitydoit être activée avant d'utiliser XrSpatialCapabilityComponentTypesEXT. -
typedoit êtreXR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXT. -
nextdoit êtreNULLou un pointeur valide vers la structure suivante dans une chaîne de structures. - Si
componentTypeCapacityInputn'est pas0,componentTypesdoit être un pointeur vers un tableau de valeurs XrSpatialComponentTypeEXT decomponentTypeCapacityInput
Fonctionnalités de capacité spatiale
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;
Certaines fonctionnalités ont des paramètres exposés à l'application pour configurer la façon dont les données des composants sont calculées par le runtime. Ces dimensions de paramétrisation/configurabilité sont appelées "fonctionnalités de capacité". Par exemple, pour une fonctionnalité de suivi d'images, un runtime peut permettre à l'application de spécifier si les images suivies sont fixes ou non.
Le fait de fournir ces informations au runtime via une structure de configuration ne doit pas modifier l'ensemble des types de composants présents sur les entités associées, par exemple sur l'image suivie. Toutefois, le runtime peut être en mesure d'optimiser, par exemple, les capacités de suivi de la fonctionnalité de suivi d'image et d'offrir une meilleure expérience à l'application.
Ces fonctionnalités sont représentées par XrSpatialCapabilityFeatureEXT et l'application les énumère à l'aide de xrEnumerateSpatialCapabilityFeaturesEXT .
Chaque fonctionnalité de capacité possède une structure de configuration correspondante pour l'activer. Ces structures de configuration doivent être chaînées à XrSpatialCapabilityConfigurationBaseHeaderEXT :: next de la fonctionnalité correspondante.
Les énumérants ont les valeurs suivantes :
Description de l'enum
XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_FIXED_SIZE_MARKERS_EXT
Fonctionnalité permettant aux applications de spécifier la taille des repères. La structure de configuration correspondante est XrSpatialMarkerSizeEXT (ajoutée par l'extension XR_EXT_spatial_marker_tracking).
XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_STATIC_MARKERS_EXT
Fonctionnalité permettant aux applications d'indiquer si les repères sont statiques. La structure de configuration correspondante est XrSpatialMarkerStaticOptimizationEXT (ajoutée par l'extension XR_EXT_spatial_marker_tracking).
XR_SPATIAL_CAPABILITY_FEATURE_OBJECT_SEMANTIC_LABEL_SUBSET_EXT
Fonctionnalité spatiale permettant aux applications de spécifier un sous-ensemble de libellés à partir de XrSpatialObjectSemanticLabelEXT pour que le runtime puisse les suivre. La structure de configuration correspondante est XrSpatialFeatureObjectSemanticLabelSubsetEXT . (Ajouté par l'extension XR_EXT_spatial_object_tracking)
XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID
Le runtime est compatible avec le filtre XrSpatialBoundsSpherefANDROID pour XrSpatialDiscoverySnapshotCreateInfoEXT. Aucune structure de configuration n'est requise lors de la création du contexte spatial. (Ajouté par l'extension XR_ANDROID_spatial_discovery_bounds)
XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID
Le runtime est compatible avec le filtre XrSpatialBoundsBoxfANDROID pour XrSpatialDiscoverySnapshotCreateInfoEXT. Aucune structure de configuration n'est requise lors de la création du contexte spatial. (Ajouté par l'extension XR_ANDROID_spatial_discovery_bounds)
XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID
Le runtime est compatible avec le filtre XrSpatialBoundsFrustumfANDROID pour XrSpatialDiscoverySnapshotCreateInfoEXT. Aucune structure de configuration n'est requise lors de la création du contexte spatial. (Ajouté par l'extension XR_ANDROID_spatial_discovery_bounds)
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_AUTOMATIC_SIZE_IMAGES_EXT
Le runtime permet de déduire automatiquement la taille physique des images détectées et suivies. La structure de configuration correspondante est XrSpatialImageSizeEXT (ajoutée par l'extension XR_EXT_spatial_image_tracking).
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_STATIC_IMAGES_EXT
L'environnement d'exécution est compatible avec XrSpatialImageStaticOptimizationEXT . La structure de configuration correspondante est XrSpatialImageStaticOptimizationEXT . (Ajouté par l'extension XR_EXT_spatial_image_tracking)
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_FIXED_SIZE_IMAGES_EXT
L'environnement d'exécution est compatible avec XrSpatialImageSizeEXT . La structure de configuration correspondante est XrSpatialImageSizeEXT (ajoutée par l'extension XR_EXT_spatial_image_tracking).
XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT
Fonctionnalité permettant de suivre un maillage étanche de l'environnement. La structure de configuration correspondante est XrSpatialFeatureTrackWatertightMeshEXT . (Ajouté par l'extension XR_EXT_spatial_mesh_tracking)
La fonction xrEnumerateSpatialCapabilityFeaturesEXT est définie comme suit :
XrResult xrEnumerateSpatialCapabilityFeaturesEXT(
XrInstance instance,
XrSystemId systemId,
XrSpatialCapabilityEXT capability,
uint32_t capabilityFeatureCapacityInput,
uint32_t* capabilityFeatureCountOutput,
XrSpatialCapabilityFeatureEXT* capabilityFeatures);
Descriptions des paramètres
instanceest un handle vers une XrInstance .systemIdest leXrSystemIddont les fonctionnalités de capacité spatiale seront énumérées.capabilityest l'XrSpatialCapabilityEXT pour lequel les fonctionnalités seront énumérées.capabilityFeatureCapacityInputcorrespond à la capacité du tableau ou à 0 pour indiquer une demande de récupération de la capacité requise.capabilityFeatureCountOutputcorrespond au nombre de fonctionnalités ou à la capacité requise sicapabilityFeatureCapacityInputest insuffisant.capabilityFeaturesest un tableau de XrSpatialCapabilityFeatureEXT . Elle peut êtreNULLsicapabilityFeatureCapacityInputest défini sur 0.- Pour obtenir une description détaillée de la récupération de la taille
capabilityFeaturesrequise, consultez la section Paramètres de taille du tampon.
L'application découvre les fonctionnalités compatibles avec un système donné pour un XrSpatialCapabilityEXT à l'aide de xrEnumerateSpatialCapabilityFeaturesEXT .
Pour les capacités dont les fonctionnalités sont exposées, l'application sélectionne la ou les fonctionnalités à activer et fournit la structure de configuration correspondante dans la chaîne suivante des structures de configuration des capacités dans XrSpatialContextCreateInfoEXT :: capabilityConfigs .
Si capability n'est pas une fonctionnalité énumérée par xrEnumerateSpatialCapabilitiesEXT , le runtime doit renvoyer XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT .
L'exécution ne doit pas énumérer les fonctionnalités de capacité spatiale dont l'extension n'est pas activée pour instance .
Utilisation valide (implicite)
- L'extension
XR_EXT_spatial_entitydoit être activée avant d'appeler xrEnumerateSpatialCapabilityFeaturesEXT. -
instancedoit être un handle XrInstance valide -
capabilitydoit être une valeur XrSpatialCapabilityEXT valide. -
capabilityFeatureCountOutputmust être un pointeur vers une valeuruint32_t - Si
capabilityFeatureCapacityInputn'est pas0,capabilityFeaturesdoit être un pointeur vers un tableau de valeurs XrSpatialCapabilityFeatureEXT decapabilityFeatureCapacityInput.
Codes de retour
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
Contexte spatial
Créer un contexte spatial
XR_DEFINE_HANDLE(XrSpatialContextEXT)
Le handle XrSpatialContextEXT représente les ressources permettant de découvrir et de mettre à jour un certain nombre d'entités spatiales dans l'environnement de l'utilisateur. L'application peut utiliser ce handle pour découvrir et mettre à jour les entités spatiales à l'aide d'autres fonctions de cette extension.
La fonction xrCreateSpatialContextAsyncEXT est définie comme suit :
XrResult xrCreateSpatialContextAsyncEXT(
XrSession session,
const XrSpatialContextCreateInfoEXT* createInfo,
XrFutureEXT* future);
Descriptions des paramètres
sessionest une XrSession dans laquelle le contexte spatial sera actif.createInfoest le XrSpatialContextCreateInfoEXT utilisé pour spécifier les paramètres du contexte spatial.futureest un pointeur vers unXrFutureEXT.
L'application peut créer un handle XrSpatialContextEXT en procédant comme suit :
- Fournir des structures dérivées XrSpatialCapabilityConfigurationBaseHeaderEXT dans XrSpatialContextCreateInfoEXT ::
capabilityConfigspour activer les fonctionnalités et les composants pour cette fonctionnalité. - Configurer les capacités elles-mêmes avec les structures de configuration correspondantes de son XrSpatialCapabilityFeatureEXT .
L'exécution doit renvoyer XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT si XrSpatialContextCreateInfoEXT ::capabilityConfigCount est défini sur 0. Un handle de contexte spatial doit disposer d'au moins une fonctionnalité.
L'exécution doit renvoyer XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT si une fonctionnalité du tableau capabilityConfigs de XrSpatialContextCreateInfoEXT n'est pas énumérée par xrEnumerateSpatialCapabilitiesEXT .
L'exécution doit renvoyer XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT si XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponentCount dans XrSpatialContextCreateInfoEXT :: capabilityConfigs est défini sur 0. Une configuration de fonctionnalité est incomplète sans liste des types de composants à activer pour cette fonctionnalité.
Le runtime doit renvoyer XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT si un type de composant listé dans XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents n'est pas énuméré pour XrSpatialCapabilityConfigurationBaseHeaderEXT :: capability dans xrEnumerateSpatialCapabilityComponentTypesEXT .
Si l'une des structures de la chaîne suivante de XrSpatialContextCreateInfoEXT :: capabilityConfigs correspond à une XrSpatialCapabilityFeatureEXT qui n'est pas énumérée pour cette fonctionnalité dans xrEnumerateSpatialCapabilityFeaturesEXT , le runtime doit ignorer cette structure XrSpatialCapabilityFeatureEXT.
L'environnement d'exécution doit renvoyer XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT si XrSpatialContextCreateInfoEXT :: capabilityConfigs contient plusieurs structures avec le même XrSpatialCapabilityConfigurationBaseHeaderEXT :: capability .
Pour garantir une utilisation optimale des ressources système, l'environnement d'exécution peut utiliser les configurations fournies dans le tableau XrSpatialContextCreateInfoEXT pour se préparer aux futures requêtes spatiales. Par exemple, un environnement d'exécution compatible avec la fonctionnalité de suivi des plans peut ne démarrer son pipeline de suivi des plans que si un handle de contexte spatial contenant la fonctionnalité de suivi des plans est créé par l'application. Si les fonctionnalités configurées ont un long temps de préchauffage, les appels à xrCreateSpatialDiscoverySnapshotAsyncEXT peuvent entraîner un instantané vide. L'application peut attendre XrEventDataSpatialDiscoveryRecommendedEXT avant d'utiliser xrCreateSpatialDiscoverySnapshotAsyncEXT pour s'assurer que les services de suivi sous-jacents sont prêts.
Si un moteur d'exécution applique un système d'autorisations pour contrôler l'accès des applications aux fonctionnalités spatiales configurées pour XrSpatialContextEXT , il doit renvoyer XR_ERROR_PERMISSION_INSUFFICIENT si ces autorisations n'ont pas été accordées à cette application.
Cette fonction lance une opération asynchrone et crée un XrFutureEXT correspondant , utilisable avec xrPollFutureEXT et les fonctions associées. La valeur renvoyée par cette fonction indique uniquement si les paramètres étaient acceptables pour planifier l'opération asynchrone. La fonction d'achèvement correspondante est xrCreateSpatialContextCompleteEXT , utilisable lorsqu'un avenir de cette fonction est à l'état READY, avec des sorties renseignées par cette fonction dans la structure d'achèvement XrCreateSpatialContextCompletionEXT .
Utilisation valide (implicite)
- L'extension
XR_EXT_spatial_entitydoit être activée avant d'appeler xrCreateSpatialContextAsyncEXT. -
sessionmust être un handle XrSession valide -
createInfodoit être un pointeur vers une structure XrSpatialContextCreateInfoEXT valide. -
futuremust être un pointeur vers une valeurXrFutureEXT
Codes de retour
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 structure XrSpatialContextCreateInfoEXT est définie comme suit :
typedef struct XrSpatialContextCreateInfoEXT {
XrStructureType type;
const void* next;
uint32_t capabilityConfigCount;
const XrSpatialCapabilityConfigurationBaseHeaderEXT* const* capabilityConfigs;
} XrSpatialContextCreateInfoEXT;
Descriptions des membres
typeest le XrStructureType de cette structure.nextestNULLou un pointeur vers la structure suivante dans une chaîne de structures. Aucune structure de ce type n'est définie dans l'extension ni dans le cœur d'OpenXR.capabilityConfigCountest unuint32_tdécrivant le nombre d'éléments dans le tableaucapabilityConfigs.capabilityConfigsest un pointeur vers un tableau de pointeurs XrSpatialCapabilityConfigurationBaseHeaderEXT.
La structure XrSpatialContextCreateInfoEXT décrit les informations permettant de créer un handle XrSpatialContextEXT.
Utilisation valide (implicite)
- L'extension
XR_EXT_spatial_entitydoit être activée avant d'utiliser XrSpatialContextCreateInfoEXT. -
typedoit êtreXR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXT. -
nextdoit êtreNULLou un pointeur valide vers la structure suivante dans une chaîne de structures . Voir aussi : XrSpatialContextPersistenceConfigEXT -
capabilityConfigsdoit être un pointeur vers un tableau decapabilityConfigCountstructures valides basées sur XrSpatialCapabilityConfigurationBaseHeaderEXT. Voir aussi : XrSpatialCapabilityConfigurationAnchorEXT , XrSpatialCapabilityConfigurationAprilTagEXT , XrSpatialCapabilityConfigurationArucoMarkerEXT , XrSpatialCapabilityConfigurationDepthRaycastANDROID , XrSpatialCapabilityConfigurationImageTrackingEXT , XrSpatialCapabilityConfigurationMeshTrackingEXT , XrSpatialCapabilityConfigurationMicroQrCodeEXT , XrSpatialCapabilityConfigurationObjectTrackingANDROID , XrSpatialCapabilityConfigurationObjectTrackingEXT , XrSpatialCapabilityConfigurationPlaneTrackingEXT , XrSpatialCapabilityConfigurationQrCodeEXT , XrSpatialCapabilityConfigurationRoomBoundaryTrackingANDROIDSYS , XrSpatialCapabilityConfigurationRoomTrackingANDROIDSYS , XrSpatialCapabilityConfigurationStreetscapeGeometryANDROIDX2 - Le paramètre
capabilityConfigCountdoit être supérieur à0
La structure XrSpatialCapabilityConfigurationBaseHeaderEXT est définie comme suit :
typedef struct XrSpatialCapabilityConfigurationBaseHeaderEXT {
XrStructureType type;
const void* next;
XrSpatialCapabilityEXT capability;
uint32_t enabledComponentCount;
const XrSpatialComponentTypeEXT* enabledComponents;
} XrSpatialCapabilityConfigurationBaseHeaderEXT;
Cette structure n'est pas directement utilisée dans l'API, mais ses structures enfants peuvent être utilisées avec XrSpatialContextCreateInfoEXT pour configurer les capacités spatiales.
Descriptions des membres
typeest le XrStructureType de cette structure.nextestNULLou un pointeur vers la structure suivante dans une chaîne de structures.capabilityest une XrSpatialCapabilityEXT .enabledComponentCountest unuint32_tdécrivant le nombre d'éléments dans le tableauenabledComponents.enabledComponentsest un pointeur vers un tableau de XrSpatialComponentTypeEXT .
L'exécution doit renvoyer XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT si capability n'est pas énuméré par xrEnumerateSpatialCapabilitiesEXT . L'environnement d'exécution doit renvoyer XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT si un type de composant listé dans enabledComponents n'est pas énuméré pour capability dans xrEnumerateSpatialCapabilityComponentTypesEXT .
Utilisation valide (implicite)
- L'extension
XR_EXT_spatial_entitydoit être activée avant d'utiliser XrSpatialCapabilityConfigurationBaseHeaderEXT. -
nextdoit êtreNULLou un pointeur valide vers la structure suivante dans une chaîne de structures. -
capabilitydoit être une valeur XrSpatialCapabilityEXT valide. -
enabledComponentsmust être un pointeur vers un tableau deenabledComponentCountvaleurs XrSpatialComponentTypeEXT valides. - Le paramètre
enabledComponentCountdoit être supérieur à0
La fonction xrCreateSpatialContextCompleteEXT est définie comme suit :
XrResult xrCreateSpatialContextCompleteEXT(
XrSession session,
XrFutureEXT future,
XrCreateSpatialContextCompletionEXT* completion);
Descriptions des paramètres
sessionest la XrSession précédemment transmise à xrCreateSpatialContextAsyncEXT :session.futurecorrespond àXrFutureEXTreçu de xrCreateSpatialContextAsyncEXT .completionest un pointeur vers XrCreateSpatialContextCompletionEXT .
xrCreateSpatialContextCompleteEXT termine l'opération asynchrone lancée par xrCreateSpatialContextAsyncEXT . L'environnement d'exécution doit renvoyer XR_ERROR_FUTURE_PENDING_EXT si future n'est pas prêt. L'environnement d'exécution doit renvoyer XR_ERROR_FUTURE_INVALID_EXT si future a déjà été effectué ou annulé.
Utilisation valide (implicite)
- L'extension
XR_EXT_spatial_entitydoit être activée avant d'appeler xrCreateSpatialContextCompleteEXT. -
sessionmust être un handle XrSession valide -
completionmust être un pointeur vers une structure XrCreateSpatialContextCompletionEXT
Codes de retour
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 structure XrCreateSpatialContextCompletionEXT est définie comme suit :
typedef struct XrCreateSpatialContextCompletionEXT {
XrStructureType type;
void* next;
XrResult futureResult;
XrSpatialContextEXT spatialContext;
} XrCreateSpatialContextCompletionEXT;
Descriptions des membres
typeest le XrStructureType de cette structure.nextestNULLou un pointeur vers la structure suivante dans une chaîne de structures.futureResultcorrespond à XrResult de l'opération de création du contexte spatial.spatialContextest un XrSpatialContextEXT créé à l'aide des données et de la configuration dans xrCreateSpatialContextAsyncEXT ::createInfo.
Codes de retour futurs
Valeurs futureResult :
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_RUNTIME_FAILUREXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHEDXR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT
Si futureResult est un code de réussite, spatialContext doit être valide. Si spatialContext est valide, il ne le reste que pendant le cycle de vie de xrCreateSpatialContextAsyncEXT :: session ou jusqu'à ce que l'application détruise spatialContext avec xrDestroySpatialContextEXT , selon la première éventualité.
Utilisation valide (implicite)
- L'extension
XR_EXT_spatial_entitydoit être activée avant d'utiliser XrCreateSpatialContextCompletionEXT. -
typedoit êtreXR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXT. -
nextdoit êtreNULLou un pointeur valide vers la structure suivante dans une chaîne de structures. -
futureResultmust être une valeur XrResult valide - Si
spatialContextn'est pas XR_NULL_HANDLE ,spatialContextdoit être un handle XrSpatialContextEXT valide.
Détruire le contexte spatial
La fonction xrDestroySpatialContextEXT est définie comme suit :
XrResult xrDestroySpatialContextEXT(
XrSpatialContextEXT spatialContext);
Descriptions des paramètres
spatialContextest un XrSpatialContextEXT créé précédemment par xrCreateSpatialContextAsyncEXT .
L'application peut appeler la fonction xrDestroySpatialContextEXT pour libérer le handle spatialContext et les ressources sous-jacentes une fois les tâches de découverte et de mise à jour des entités spatiales terminées. S'il n'existe aucune autre XrSpatialContextEXT valide créée avec les mêmes capacités spatiales que spatialContext , cet appel sert de suggestion au moteur d'exécution pour désactiver les services de suivi requis pour ces capacités afin d'économiser les ressources système.
Utilisation valide (implicite)
- L'extension
XR_EXT_spatial_entitydoit être activée avant d'appeler xrDestroySpatialContextEXT. -
spatialContextmust être un handle XrSpatialContextEXT valide
Sécurité des threads
- L'accès à
spatialContextet à tous les identifiants enfants doit être synchronisé en externe.
Codes de retour
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
Représentations d'entités spatiales
ID d'entité spatiale
XR_DEFINE_ATOM(XrSpatialEntityIdEXT)
XrSpatialEntityIdEXT est utilisé pour représenter tout type d'entité découvert par le runtime dans l'environnement spatial de l'utilisateur. Un XrSpatialEntityIdEXT est valide pour le XrSpatialContextEXT dans lequel il est découvert, et le runtime ne doit pas réutiliser le même XrSpatialEntityIdEXT pour différentes entités au sein du même XrSpatialContextEXT . De plus, le runtime ne doit pas réutiliser le même XrSpatialEntityIdEXT pour plusieurs XrSpatialContextEXT au sein de la même XrSession, qu'il représente la même entité ou des entités différentes.
#define XR_NULL_SPATIAL_ENTITY_ID_EXT 0
XR_NULL_SPATIAL_ENTITY_ID_EXT est une valeur réservée représentant un XrSpatialEntityIdEXT non valide . Il peut être transmis aux fonctions d'API et renvoyé par celles-ci uniquement lorsque cela est spécifiquement autorisé.
Handle d'entité spatiale
XR_DEFINE_HANDLE(XrSpatialEntityEXT)
Le handle XrSpatialEntityEXT représente une entité spatiale. Une application peut créer un tel handle pour exprimer son intérêt pour une entité spécifique au moment de l'exécution.
Créer un handle d'entité spatiale à partir d'un ID
La fonction xrCreateSpatialEntityFromIdEXT est définie comme suit :
XrResult xrCreateSpatialEntityFromIdEXT(
XrSpatialContextEXT spatialContext,
const XrSpatialEntityFromIdCreateInfoEXT* createInfo,
XrSpatialEntityEXT* spatialEntity);
Descriptions des paramètres
spatialContextest un XrSpatialContextEXT créé précédemment à l'aide de xrCreateSpatialContextAsyncEXT .createInfoest un pointeur vers la structure XrSpatialEntityFromIdCreateInfoEXT.spatialEntityest le handle XrSpatialEntityEXT renvoyé.
L'application peut utiliser xrCreateSpatialEntityFromIdEXT pour créer un handle XrSpatialEntityEXT qui fait référence à une entité existant dans l'environnement de l'utilisateur.
L'exécution doit renvoyer XR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXT si XrSpatialEntityFromIdCreateInfoEXT::entityId n'est pas un ID valide pour spatialContext .
Utilisation valide (implicite)
- L'extension
XR_EXT_spatial_entitydoit être activée avant d'appeler xrCreateSpatialEntityFromIdEXT. -
spatialContextmust être un handle XrSpatialContextEXT valide -
createInfodoit être un pointeur vers une structure XrSpatialEntityFromIdCreateInfoEXT valide. -
spatialEntitymust be a pointer to an XrSpatialEntityEXT handle
Codes de retour
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 structure XrSpatialEntityFromIdCreateInfoEXT est définie comme suit :
typedef struct XrSpatialEntityFromIdCreateInfoEXT {
XrStructureType type;
const void* next;
XrSpatialEntityIdEXT entityId;
} XrSpatialEntityFromIdCreateInfoEXT;
Descriptions des membres
typeest le XrStructureType de cette structure.nextestNULLou un pointeur vers la structure suivante dans une chaîne de structures. Aucune structure de ce type n'est définie dans l'extension ni dans le cœur d'OpenXR.entityIdcorrespond auXrSpatialEntityIdEXTde l'entité pour laquelle l'application souhaite créer un handle.
Utilisation valide (implicite)
- L'extension
XR_EXT_spatial_entitydoit être activée avant d'utiliser XrSpatialEntityFromIdCreateInfoEXT. -
typedoit êtreXR_TYPE_SPATIAL_ENTITY_FROM_ID_CREATE_INFO_EXT. -
nextdoit êtreNULLou un pointeur valide vers la structure suivante dans une chaîne de structures.
Détruire le handle d'entité spatiale
La fonction xrDestroySpatialEntityEXT est définie comme suit :
XrResult xrDestroySpatialEntityEXT(
XrSpatialEntityEXT spatialEntity);
Descriptions des paramètres
spatialEntityest un handle vers un XrSpatialEntityEXT précédemment créé par une fonction telle que xrCreateSpatialEntityFromIdEXT .
L'application peut utiliser xrDestroySpatialEntityEXT pour libérer le handle spatialEntity lorsqu'elle n'est plus intéressée par l'entité référencée par ce handle.
Utilisation valide (implicite)
- L'extension
XR_EXT_spatial_entitydoit être activée avant d'appeler xrDestroySpatialEntityEXT. -
spatialEntitymust être un handle XrSpatialEntityEXT valide
Sécurité des threads
- L'accès à
spatialEntityet à tous les identifiants enfants doit être synchronisé en externe.
Codes de retour
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
Instantané spatial
XR_DEFINE_HANDLE(XrSpatialSnapshotEXT)
L'application peut créer des instantanés spatiaux pour découvrir des entités spatiales ou mettre à jour ses informations sur les entités spatiales connues. Le handle XrSpatialSnapshotEXT représente les données immuables des entités spatiales découvertes ou mises à jour, ainsi qu'un sous-ensemble de leurs composants sélectionnés par l'application. L'instantané spatial représente une vue cohérente des entités et de leurs données composantes. Une fois l'instantané créé, les données de l'instantané doivent rester constantes tant que l'instantané est valide.
L'application peut créer autant d'instantanés qu'elle le souhaite, mais elle doit tenir compte de la mémoire allouée à chaque nouvel instantané et doit détruire les instantanés une fois qu'elle n'en a plus besoin.
Créer un instantané de découverte
La fonction xrCreateSpatialDiscoverySnapshotAsyncEXT est définie comme suit :
XrResult xrCreateSpatialDiscoverySnapshotAsyncEXT(
XrSpatialContextEXT spatialContext,
const XrSpatialDiscoverySnapshotCreateInfoEXT* createInfo,
XrFutureEXT* future);
Descriptions des paramètres
spatialContextest un XrSpatialContextEXT précédemment créé à l'aide de xrCreateSpatialContextAsyncEXT .createInfoest un pointeur vers une structure XrSpatialDiscoverySnapshotCreateInfoEXT .futureest un pointeur vers unXrFutureEXT.
L'application peut découvrir des entités spatiales en créant un instantané de découverte à l'aide de xrCreateSpatialDiscoverySnapshotAsyncEXT .
Cette fonction lance une opération asynchrone et crée un XrFutureEXT correspondant , utilisable avec xrPollFutureEXT et les fonctions associées. La valeur renvoyée par cette fonction indique uniquement si les paramètres étaient acceptables pour planifier l'opération asynchrone. La fonction de finalisation correspondante est xrCreateSpatialDiscoverySnapshotCompleteEXT , utilisable lorsqu'un futur de cette fonction est à l'état READY, avec des sorties renseignées par cette fonction dans la structure de finalisation XrCreateSpatialDiscoverySnapshotCompletionEXT .
L'application peut envoyer plusieurs demandes de création d'instantanés de découverte sans avoir à attendre que la précédente soit terminée. L'environnement d'exécution peut traiter et finaliser la création de l'instantané dans n'importe quel ordre. Le runtime peut retarder la création de l'instantané de découverte pour limiter l'application si elle doit réduire l'utilisation des ressources système en raison de la batterie, de la température ou d'autres règles de l'appareil.
L'application peut utiliser XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes pour filtrer la liste des entités et des composants dont les données doivent être incluses dans l'instantané par le moteur d'exécution. Si l'application fournit une liste valide de types de composants spatiaux dans XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes , le runtime doit uniquement inclure dans le snapshot les entités spatiales qui comportent au moins l'un des composants fournis dans XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes . De plus, le runtime ne doit inclure que les données des composants présents dans l'instantané.
L'exécution doit renvoyer XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT si l'un des XrSpatialComponentTypeEXT dans XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes n'est pas activé pour les capacités spatiales transmises à XrSpatialContextCreateInfoEXT :: capabilityConfigs lors de la création de spatialContext .
Si l'application ne fournit pas de liste de types de composants spatiaux dans XrSpatialDiscoverySnapshotCreateInfoEXT::componentTypes , le runtime doit inclure toutes les entités spatiales de l'instantané qui possèdent l'ensemble de composants énumérés dans XrSpatialCapabilityConfigurationBaseHeaderEXT::enabledComponents pour les capacités configurées pour spatialContext . L'exécution doit inclure les données de tous les composants activés des fonctionnalités configurées pour spatialContext .
Si XrEventDataReferenceSpaceChangePending est mis en file d'attente avant la fin de future et que XrEventDataReferenceSpaceChangePending :: poseValid est défini sur "false", le runtime peut créer un XrSpatialSnapshotEXT sans entités ou définir XrSpatialEntityTrackingStateEXT des entités qui ne sont plus localisables dans XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace à XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time sur XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT ou XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT . Le runtime ne doit pas définir XrCreateSpatialContextCompletionEXT :: futureResult sur un code d'erreur en raison de XrEventDataReferenceSpaceChangePending .
Utilisation valide (implicite)
- L'extension
XR_EXT_spatial_entitydoit être activée avant d'appeler xrCreateSpatialDiscoverySnapshotAsyncEXT. -
spatialContextmust être un handle XrSpatialContextEXT valide -
createInfodoit être un pointeur vers une structure XrSpatialDiscoverySnapshotCreateInfoEXT valide. -
futuremust être un pointeur vers une valeurXrFutureEXT
Codes de retour
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 structure XrSpatialDiscoverySnapshotCreateInfoEXT est définie comme suit :
typedef struct XrSpatialDiscoverySnapshotCreateInfoEXT {
XrStructureType type;
const void* next;
uint32_t componentTypeCount;
const XrSpatialComponentTypeEXT* componentTypes;
} XrSpatialDiscoverySnapshotCreateInfoEXT;
Descriptions des membres
typeest le XrStructureType de cette structure.nextestNULLou un pointeur vers la structure suivante dans une chaîne de structures. Aucune structure de ce type n'est définie dans l'extension ni dans le cœur d'OpenXR.componentTypeCountest unuint32_tdécrivant le nombre d'éléments dans le tableaucomponentTypes.componentTypesest un tableau de XrSpatialComponentTypeEXT .
La structure XrSpatialDiscoverySnapshotCreateInfoEXT décrit les informations permettant de créer un handle XrSpatialSnapshotEXT lors de la découverte d'entités spatiales.
Utilisation valide (implicite)
- L'extension
XR_EXT_spatial_entitydoit être activée avant d'utiliser XrSpatialDiscoverySnapshotCreateInfoEXT. -
typedoit êtreXR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT. -
nextdoit êtreNULLou un pointeur valide vers la structure suivante dans une chaîne de structures . Voir aussi : XrSpatialBoundsBoxfANDROID , XrSpatialBoundsFrustumfANDROID , XrSpatialBoundsSpherefANDROID , XrSpatialDiscoveryPersistenceUuidFilterEXT , XrSpatialDiscoveryRoomBoundaryFilterANDROIDSYS , XrSpatialDiscoveryUniqueEntitiesFilterANDROID , XrSpatialFilterTrackingStateEXT , XrSpatialRaycastInfoANDROID - Si
componentTypeCountn'est pas0,componentTypesdoit être un pointeur vers un tableau decomponentTypeCountvaleurs XrSpatialComponentTypeEXT valides.
La fonction xrCreateSpatialDiscoverySnapshotCompleteEXT est définie comme suit :
XrResult xrCreateSpatialDiscoverySnapshotCompleteEXT(
XrSpatialContextEXT spatialContext,
const XrCreateSpatialDiscoverySnapshotCompletionInfoEXT* createSnapshotCompletionInfo,
XrCreateSpatialDiscoverySnapshotCompletionEXT* completion);
Descriptions des paramètres
spatialContextest le XrSpatialContextEXT précédemment transmis à xrCreateSpatialDiscoverySnapshotAsyncEXT :spatialContext.createSnapshotCompletionInfoest un pointeur vers un XrCreateSpatialDiscoverySnapshotCompletionInfoEXT qui fournit des informations sur la fin de la requête de création d'instantané de découverte.completionest un pointeur vers une XrCreateSpatialDiscoverySnapshotCompletionEXT .
xrCreateSpatialDiscoverySnapshotCompleteEXT termine l'opération asynchrone lancée par xrCreateSpatialDiscoverySnapshotAsyncEXT . L'exécution doit renvoyer XR_ERROR_FUTURE_PENDING_EXT si XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: future n'est pas à l'état prêt. Le runtime doit renvoyer XR_ERROR_FUTURE_INVALID_EXT si XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: future a déjà été terminé ou annulé.
Utilisation valide (implicite)
- L'extension
XR_EXT_spatial_entitydoit être activée avant d'appeler xrCreateSpatialDiscoverySnapshotCompleteEXT. -
spatialContextmust être un handle XrSpatialContextEXT valide -
createSnapshotCompletionInfomust be a pointer to a valid XrCreateSpatialDiscoverySnapshotCompletionInfoEXT structure -
completiondoit être un pointeur vers une structure XrCreateSpatialDiscoverySnapshotCompletionEXT.
Codes de retour
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 structure XrCreateSpatialDiscoverySnapshotCompletionInfoEXT est définie comme suit :
typedef struct XrCreateSpatialDiscoverySnapshotCompletionInfoEXT {
XrStructureType type;
const void* next;
XrSpace baseSpace;
XrTime time;
XrFutureEXT future;
} XrCreateSpatialDiscoverySnapshotCompletionInfoEXT;
Descriptions des membres
typeest le XrStructureType de cette structure.nextestNULLou un pointeur vers la structure suivante dans une chaîne de structures.baseSpaceest l'XrSpace dans lequel se trouveront tous les emplacements de l'XrSpatialSnapshotEXT de découverte.timecorrespond àXrTimeoù se trouveront tous les emplacements de XrSpatialSnapshotEXT.futureest leXrFutureEXTreçu de xrCreateSpatialDiscoverySnapshotAsyncEXT
Les emplacements des différentes données de composants incluses dans l'instantané créé seront représentés dans baseSpace , situé à time .
Utilisation valide (implicite)
- L'extension
XR_EXT_spatial_entitydoit être activée avant d'utiliser XrCreateSpatialDiscoverySnapshotCompletionInfoEXT. -
typedoit êtreXR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXT. -
nextdoit êtreNULLou un pointeur valide vers la structure suivante dans une chaîne de structures. -
baseSpacedoit être un handle XrSpace valide
La structure XrCreateSpatialDiscoverySnapshotCompletionEXT est définie comme suit :
typedef struct XrCreateSpatialDiscoverySnapshotCompletionEXT {
XrStructureType type;
void* next;
XrResult futureResult;
XrSpatialSnapshotEXT snapshot;
} XrCreateSpatialDiscoverySnapshotCompletionEXT;
Descriptions des membres
typeest le XrStructureType de cette structure.nextestNULLou un pointeur vers la structure suivante dans une chaîne de structures.futureResultcorrespond à XrResult de l'opération de création d'instantané de découverte spatiale.snapshotest un XrSpatialSnapshotEXT qui peut être utilisé pour interroger les données des composants des entités spatiales découvertes.
Codes de retour futurs
Valeurs futureResult :
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_RUNTIME_FAILUREXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHED
Utilisation valide (implicite)
- L'extension
XR_EXT_spatial_entitydoit être activée avant d'utiliser XrCreateSpatialDiscoverySnapshotCompletionEXT. -
typedoit êtreXR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXT. -
nextdoit êtreNULLou un pointeur valide vers la structure suivante dans une chaîne de structures. -
futureResultmust être une valeur XrResult valide - Si
snapshotn'est pas XR_NULL_HANDLE ,snapshotdoit être un handle XrSpatialSnapshotEXT valide.
Événement de recommandation de découverte
La structure XrEventDataSpatialDiscoveryRecommendedEXT est définie comme suit :
typedef struct XrEventDataSpatialDiscoveryRecommendedEXT {
XrStructureType type;
const void* next;
XrSpatialContextEXT spatialContext;
} XrEventDataSpatialDiscoveryRecommendedEXT;
Descriptions des membres
typeest le XrStructureType de cette structure.nextestNULLou un pointeur vers la structure suivante dans une chaîne de structures.spatialContextest l'XrSpatialContextEXT pour lequel l'exécution recommande la découverte.
L'application peut récupérer cet événement à l'aide de xrPollEvent . L'application peut éviter les appels excessifs à xrCreateSpatialDiscoverySnapshotAsyncEXT pour découvrir les entités spatiales en attendant cet événement. Si l'application crée plusieurs instantanés de découverte avec le même XrSpatialDiscoverySnapshotCreateInfoEXT entre deux événements XrEventDataSpatialDiscoveryRecommendedEXT, les instantanés résultants peuvent contenir les mêmes entités. La création d'instantanés et les requêtes de données seraient donc inutiles.
L'attente de cet événement pour créer un instantané de découverte garantit que l'application ne surcharge pas le système avec des requêtes de découverte pour lesquelles le runtime peut ne renvoyer aucune nouvelle donnée. Cela permet également d'éviter le risque de surutilisation des ressources système et de limitation en raison des règles d'alimentation ou thermiques de l'appareil. Cela permet également de créer une parité entre les runtimes qui découvrent des entités spatiales à la volée avec le suivi en direct et les runtimes qui fournissent des entités spatiales à partir d'un état précédemment enregistré (où le runtime peut mettre en file d'attente l'événement de recommandation de découverte une seule fois pour chaque XrSpatialContextEXT).
L'exécution ne doit pas mettre en file d'attente cet événement pour informer l'application des modifications ou ajustements apportés aux données des composants des entités spatiales existantes. L'application peut utiliser xrCreateSpatialUpdateSnapshotEXT pour suivre les mises à jour des données de composants pour les entités spatiales qui l'intéressent.
Un runtime peut mettre en file d'attente un événement de recommandation de découverte sans attendre que l'application appelle d'abord xrCreateSpatialDiscoverySnapshotAsyncEXT . Par exemple, un environnement d'exécution peut baser la décision de mise en file d'attente de l'événement de recommandation de découverte sur la configuration de XrSpatialContextEXT , sa propre compréhension de l'environnement autour de l'utilisateur (découverte de nouvelles entités ou perte d'entités existantes), ou pour suggérer une cadence de demande de découverte appropriée à l'application afin de ne pas surcharger les ressources système. Le runtime peut choisir de ne jamais mettre en file d'attente cet événement pour un XrSpatialContextEXT si aucune entité n'est trouvée dans l'environnement de l'utilisateur pendant toute la durée de vie de cet XrSpatialContextEXT .
L'exécution ne doit pas mettre en file d'attente cet événement pour un spatialContext donné tant que l'application n'a pas terminé sa création à l'aide de xrCreateSpatialContextCompleteEXT .
Une fois que l'application a appelé xrDestroySpatialContextEXT , le moteur d'exécution ne doit pas mettre en file d'attente d'autres événements de recommandation de découverte pour ce contexte spatial ni renvoyer de tels événements pour ce contexte à partir de xrPollEvent .
Utilisation valide (implicite)
- L'extension
XR_EXT_spatial_entitydoit être activée avant d'utiliser XrEventDataSpatialDiscoveryRecommendedEXT. -
typedoit êtreXR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT. -
nextdoit êtreNULLou un pointeur valide vers la structure suivante dans une chaîne de structures.
Interroger les données des composants
La fonction xrQuerySpatialComponentDataEXT est définie comme suit :
XrResult xrQuerySpatialComponentDataEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialComponentDataQueryConditionEXT* queryCondition,
XrSpatialComponentDataQueryResultEXT* queryResult);
Descriptions des paramètres
snapshotest un XrSpatialSnapshotEXT précédemment fourni par xrCreateSpatialDiscoverySnapshotCompleteEXT ou xrCreateSpatialUpdateSnapshotEXT .queryConditionest un pointeur vers une structure XrSpatialComponentDataQueryConditionEXT.queryResultest un pointeur vers une structure XrSpatialComponentDataQueryResultEXT.
L'application peut utiliser xrQuerySpatialComponentDataEXT pour interroger les données de composant des entités dans l'instantané en associant une structure de liste à XrSpatialComponentDataQueryResultEXT :: next correspondant à chaque XrSpatialComponentTypeEXT dans XrSpatialComponentDataQueryConditionEXT :: componentTypes .
Si l'application associe une structure de liste à XrSpatialComponentDataQueryResultEXT :: next qui ne correspond à aucun des composants listés dans XrSpatialComponentDataQueryConditionEXT :: componentTypes , le runtime doit renvoyer XR_ERROR_VALIDATION_FAILURE .
L'application peut choisir de joindre les structures de liste correspondant uniquement à un sous-ensemble de composants listés dans XrSpatialComponentDataQueryConditionEXT :: componentTypes . L'application peut choisir d'omettre complètement les structures de liste si elle ne souhaite connaître que les ID et l'état de suivi des entités spatiales qui satisfont queryCondition . L'exécution ne doit pas traiter l'absence de structures de liste de la chaîne XrSpatialComponentDataQueryResultEXT :: next comme un échec.
Si XrEventDataReferenceSpaceChangePending est mis en file d'attente et que XrEventDataReferenceSpaceChangePending :: changeTime s'est écoulé pendant que l'application interroge les données des composants à partir d'un XrSpatialSnapshotEXT , l'application peut utiliser les données d'événement pour ajuster les poses en conséquence.
L'exécution doit remplir XrSpatialComponentDataQueryResultEXT :: entityIds uniquement avec les entités qui comportent tous les composants spécifiés dans XrSpatialComponentDataQueryConditionEXT :: componentTypes . Si XrSpatialComponentDataQueryConditionEXT :: componentTypeCount est défini sur 0, l'environnement d'exécution doit remplir queryResult avec toutes les entités (et leurs états de suivi) qui se trouvent dans l'instantané. Si des conditions de requête supplémentaires sont ajoutées à XrSpatialComponentDataQueryConditionEXT :: next, le runtime doit les traiter comme un "AND" avec la disponibilité des types de composants, c'est-à-dire que le runtime doit remplir XrSpatialComponentDataQueryResultEXT ::entityIds uniquement avec les entités qui remplissent toutes les conditions fournies. L'exécution doit remplir les données du composant dans les structures de liste dans le même ordre que les entités dans XrSpatialComponentDataQueryResultEXT :: entityIds, c'est-à-dire que les données du composant à un index donné dans le tableau de structure de liste doivent correspondre à l'entité au même index.
Si l'état de suivi d'une entité n'est pas XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT , le runtime ne doit pas modifier les données à l'index correspondant à cette entité dans le tableau contenu dans les structures de liste associées à XrSpatialComponentDataQueryResultEXT .
Utilisation valide (implicite)
- L'extension
XR_EXT_spatial_entitydoit être activée avant d'appeler xrQuerySpatialComponentDataEXT. -
snapshotdoit être un handle XrSpatialSnapshotEXT valide -
queryConditionmust être un pointeur vers une structure XrSpatialComponentDataQueryConditionEXT valide -
queryResultdoit être un pointeur vers une structure XrSpatialComponentDataQueryResultEXT.
Codes de retour
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
Par exemple, l'application crée un XrSpatialSnapshotEXT qui contient cinq entités, où :
- Les entités 1 et 2 ont des composants
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTetXR_SPATIAL_COMPONENT_TYPE_PARENT_EXT. - Les entités 3 et 4 comportent les composants
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXTetXR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT. - L'entité 5 comporte les composants
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTetXR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT.
XrSpatialEntityIdEXT
XrSpatialEntityIdEXT
1
1
2
2
3
3
4
4
5
5
Bounded2D
Bounded2D
Oui
Oui
Oui
Oui
Non
Non
Non
Non
Oui
Oui
Parent
Parent
Oui
Oui
Oui
Oui
Non
Non
Non
Non
Non
Non
Mesh3D
Mesh3D
Non
Non
Non
Non
Oui
Oui
Oui
Oui
Oui
Oui
Bounded3D
Bounded3D
Non
Non
Non
Non
Oui
Oui
Oui
Oui
Non
Le texte n'est pas au format SVG et ne peut pas être affiché
Figure 20. Exemple d'instantané
xrQuerySpatialComponentDataEXT sur l'instantané ci-dessus avec XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT listé dans la condition de requête renverra les entités 1, 2 et 5 à l'application, et l'application peut joindre un tableau de XrSpatialBounded2DDataEXT dans la structure XrSpatialComponentBounded2DListEXT à la chaîne suivante de XrSpatialComponentDataQueryResultEXT pour obtenir les données bounded2D.
XrSpatialEntityIdEXT
XrSpatialEntityIdEXT
1
1
2
2
5
5
Bounded2D
Bounded2D
Données pour l'entityId 1
Données pour l'entité…
Données pour l'entityId 2
Données pour les entités…
Données pour l'entityId 5
Données pour l'entité…
entityIds
entityIds
suivant
suivant
XrSpatialComponent DataQueryResultEXT
XrSpatialComponent Dat...
limites
limites
XrSpatialComponent Bounded2DListEXT
XrSpatialComponent Bou... Le texte n'est pas au format SVG et ne peut pas s'afficher
Figure 21. Exemple de résultat de requête
xrQuerySpatialComponentDataEXT sur l'instantané ci-dessus avec les composants XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT et XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT listés dans la condition de requête renverra les entités 3 et 4 à l'application, et l'application peut joindre des tableaux de XrBoxf et XrSpatialMeshDataEXT dans le cadre des structures XrSpatialComponentBounded3DListEXT et XrSpatialComponentMesh3DListEXT respectivement à la prochaine chaîne de XrSpatialComponentDataQueryResultEXT pour obtenir les données du composant.
XrSpatialEntityIdEXT
XrSpatialEntityIdEXT
3
3
4
4
Bounded3D
Bounded3D
Données pour l'entityId 3
Données pour les entités…
Données pour l'entityId 4
Données pour les entités…
Mesh3D
Mesh3D
Données pour l'entityId 3
Données pour les entités…
Données pour l'entityId 4
Données pour les entités…
entityIds
entityIds
suivant
suivant
XrSpatialComponent DataQueryResultEXT
XrSpatialComponent Da...
limites
limites
suivant
suivant
XrSpatialComponent Bounded3DListEXT
XrSpatialComponent Bo...
XrSpatialComponent Mesh3DListEXT
XrSpatialComponent Me...
mailles
meshes Text is not SVG - cannot display
Figure 22. Exemple de résultat de requête
La structure XrSpatialComponentDataQueryConditionEXT est définie comme suit :
typedef struct XrSpatialComponentDataQueryConditionEXT {
XrStructureType type;
const void* next;
uint32_t componentTypeCount;
const XrSpatialComponentTypeEXT* componentTypes;
} XrSpatialComponentDataQueryConditionEXT;
Descriptions des membres
typeest le XrStructureType de cette structure.nextestNULLou un pointeur vers la structure suivante dans une chaîne de structures.componentTypeCountest unuint32_tdécrivant le nombre d'éléments dans le tableaucomponentTypes.componentTypesest un tableau de XrSpatialComponentTypeEXT pour lequel obtenir les données de l'instantané.
Utilisation valide (implicite)
- L'extension
XR_EXT_spatial_entitydoit être activée avant d'utiliser XrSpatialComponentDataQueryConditionEXT. -
typedoit êtreXR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT. -
nextdoit êtreNULLou un pointeur valide vers la structure suivante dans une chaîne de structures . Voir aussi : XrSpatialDiscoveryPersistenceUuidFilterEXT , XrSpatialFilterArchetypeEXT , XrSpatialFilterTrackingStateEXT - Si
componentTypeCountn'est pas0,componentTypesdoit être un pointeur vers un tableau decomponentTypeCountvaleurs XrSpatialComponentTypeEXT valides.
La structure XrSpatialComponentDataQueryResultEXT est définie comme suit :
typedef struct XrSpatialComponentDataQueryResultEXT {
XrStructureType type;
void* next;
uint32_t entityIdCapacityInput;
uint32_t entityIdCountOutput;
XrSpatialEntityIdEXT* entityIds;
uint32_t entityStateCapacityInput;
uint32_t entityStateCountOutput;
XrSpatialEntityTrackingStateEXT* entityStates;
} XrSpatialComponentDataQueryResultEXT;
Descriptions des membres
typeest le XrStructureType de cette structure.nextestNULLou un pointeur vers la structure suivante dans une chaîne de structures.entityIdCapacityInputcorrespond à la capacité du tableauentityIdsou à 0 pour indiquer une demande de récupération de la capacité requise.entityIdCountOutputcorrespond au nombre deXrSpatialEntityIdEXTdansentityIdsou à la capacité requise sientityIdCapacityInputest insuffisant.entityIdsest un tableau deXrSpatialEntityIdEXT. Elle peut êtreNULLsientityIdCapacityInputest défini sur 0.entityStateCapacityInputcorrespond à la capacité du tableauentityStatesou à 0 pour indiquer une demande de récupération de la capacité requise.entityStateCountOutputcorrespond au nombre de XrSpatialEntityTrackingStateEXT dansentityStatesou à la capacité requise sientityStateCapacityInputest insuffisant. Cette valeur doit toujours être identique àentityIdCountOutput.entityStatesest un tableau de XrSpatialEntityTrackingStateEXT . Elle peut êtreNULLsientityStateCapacityInputest défini sur 0.- Pour obtenir une description détaillée de la récupération de la taille
entityIdsrequise, consultez la section Paramètres de taille du tampon.
Une application peut utiliser entityIds avec xrCreateSpatialEntityFromIdEXT pour créer des handles XrSpatialEntityEXT pour les entités pour lesquelles elle souhaite recevoir des mises à jour régulières. L'application peut ensuite utiliser ces handles XrSpatialEntityEXT avec xrCreateSpatialUpdateSnapshotEXT pour créer un instantané de mise à jour contenant les dernières données connues du runtime concernant les composants des entités fournies.
Utilisation valide (implicite)
- L'extension
XR_EXT_spatial_entitydoit être activée avant d'utiliser XrSpatialComponentDataQueryResultEXT. -
typedoit êtreXR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT. -
nextdoit êtreNULLou un pointeur valide vers la structure suivante dans une chaîne de structures . Voir aussi : XrSpatialComponentAnchorListEXT , XrSpatialComponentAnnotationQuadListANDROID , XrSpatialComponentBounded2DListEXT , XrSpatialComponentBounded3DListEXT , XrSpatialComponentConfidenceListANDROIDSYS , XrSpatialComponentImage2DListEXT , XrSpatialComponentKeyboardSemanticLabelListEXT , XrSpatialComponentMarkerListEXT , XrSpatialComponentMaterialTypeListANDROIDSYS , XrSpatialComponentMesh2DListEXT , XrSpatialComponentMesh3DListEXT , XrSpatialComponentMesh3DNormalsListEXT , XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT , XrSpatialComponentMesh3DVertexSemanticLabelsListEXT , XrSpatialComponentMouseSemanticLabelListEXT , XrSpatialComponentObjectSemanticLabelListANDROID , XrSpatialComponentObjectSemanticLabelListEXT , XrSpatialComponentOccupancyGridListANDROIDX1 , XrSpatialComponentParentListEXT , XrSpatialComponentPersistenceListEXT , XrSpatialComponentPlaneAlignmentListEXT , XrSpatialComponentPlaneSemanticLabelListEXT , XrSpatialComponentPolygon2DListEXT , XrSpatialComponentRaycastResultListANDROID , XrSpatialComponentRoomEmptinessListANDROIDSYS , XrSpatialComponentRoomListANDROIDSYS , XrSpatialComponentStreetscapeGeometryMetadataListANDROIDX2 , XrSpatialComponentSubsumedByListANDROID - Si
entityIdCapacityInputn'est pas0,entityIdsdoit être un pointeur vers un tableau de valeursXrSpatialEntityIdEXTde typeentityIdCapacityInput. - Si
entityStateCapacityInputn'est pas0,entityStatesdoit être un pointeur vers un tableau de valeurs XrSpatialEntityTrackingStateEXT deentityStateCapacityInput.
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'énumération XrSpatialEntityTrackingStateEXT liste les états de suivi des entités spatiales possibles :
Les énumérations ont les significations suivantes :
Description de l'enum
XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT
L'exécution a cessé de suivre cette entité et ne reprendra jamais le suivi.
XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT
L'exécution a suspendu le suivi de cette entité, mais pourrait le reprendre à l'avenir.
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT
Le runtime suit actuellement cette entité et les données de ses composants sont valides.
SUIVI
MISE EN VEILLE
ARRÊTÉ
Figure 23. XrSpatialEntityTrackingStateEXT
- Le runtime peut modifier l'état de l'entité spatiale de
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXTàXR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXTs'il suspend le suivi de cette entité spatiale, mais qu'il a la possibilité de le reprendre à l'avenir. Voici quelques exemples de cas où le runtime peut le faire (sans s'y limiter) : si l'application perd le focus d'entrée, si l'entité spatiale donnée est trop éloignée de l'utilisateur pour être suivie avec précision ou si le nombre d'entités suivies est trop élevé et que le runtime souhaite réduire le coût du suivi. XrSpatialEntityTrackingStateEXT aide l'application à s'isoler des différentes stratégies de suivi de chaque environnement d'exécution. - L'exécution peut modifier l'état d'une entité de
XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXTàXR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXTouXR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT. - L'exécution doit modifier l'état de l'entité spatiale de
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXTouXR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXTàXR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXTsi l'entité spatiale est perdue et que son suivi ne sera jamais récupéré ni repris. Par exemple, si l'appareil perd le suivi, redémarre sa session de suivi, mais ne parvient pas à se relocaliser dans son environnement, il traite les entités découvertes lors de cette session de suivi comme de nouvelles entités. - Une fois l'état de suivi d'une entité défini sur
XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT, le runtime ne doit jamais le modifier pour un autre état. - Lors de l'interrogation des données de composant d'une entité spatiale à l'aide de xrQuerySpatialComponentDataEXT , le runtime doit définir des données valides dans le contenu des tampons fournis par l'application dans la chaîne suivante de XrSpatialComponentDataQueryResultEXT si l'état de l'entité est
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT. Si l'état de l'entité estXR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXTouXR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT, le runtime ne doit pas modifier le contenu des tampons.
Expression à deux appels pour les données de composants
La structure XrSpatialBufferEXT est définie comme suit :
typedef struct XrSpatialBufferEXT {
XrSpatialBufferIdEXT bufferId;
XrSpatialBufferTypeEXT bufferType;
} XrSpatialBufferEXT;
Descriptions des membres
bufferId:XrSpatialBufferIdEXTdes données du tampon.bufferTypeest XrSpatialBufferTypeEXT pour indiquer le type de données dansbufferId. L'application peut utiliserbufferTypepour déterminer la fonction à utiliser pour récupérer les données réelles du tampon.
Certains composants spatiaux contiennent des données de taille variable et nécessitent donc l'utilisation de l'idiome à deux appels pour récupérer leurs données. Dans ce cas, la structure de données du composant spatial fournit un XrSpatialBufferEXT pour chaque tampon de taille variable nécessaire dans les données de ce composant.
Pour le même bufferId , le runtime doit fournir les mêmes données d'une requête de données de composant à une autre, même d'un instantané à un autre. Un bufferId différent entre les appels de requête de données de composants indique à l'application que les données de ce composant peuvent avoir changé.
Utilisation valide (implicite)
- L'extension
XR_EXT_spatial_entitydoit être activée avant d'utiliser XrSpatialBufferEXT. -
bufferTypemust be a valid XrSpatialBufferTypeEXT value
XR_DEFINE_ATOM(XrSpatialBufferIdEXT)
XrSpatialBufferIdEXT permet de représenter n'importe quel type de données de taille variable pour un composant spatial.
L'exécution doit conserver XrSpatialBufferIdEXT et ses données en mémoire pendant au moins le cycle de vie de XrSpatialSnapshotEXT qui le contient. Le runtime peut conserver le XrSpatialBufferIdEXT et ses données en mémoire plus longtemps que le cycle de vie de XrSpatialSnapshotEXT afin de renvoyer le même ID que celui des instantanés créés ultérieurement par l'application. Pour le même XrSpatialBufferIdEXT , le runtime doit toujours renvoyer les mêmes données via la fonction xrGetSpatialBuffer* appropriée.
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'énumération XrSpatialBufferTypeEXT identifie les différents types de données du tampon représenté par XrSpatialBufferIdEXT .
Descriptions des énumérants
XR_SPATIAL_BUFFER_TYPE_STRING_EXT. Le canXrSpatialBufferIdEXTpeut être transmis à xrGetSpatialBufferStringEXT pour récupérer un tampon de chaîne.XR_SPATIAL_BUFFER_TYPE_UINT8_EXT. Le canXrSpatialBufferIdEXTpeut être transmis à xrGetSpatialBufferUint8EXT pour récupérer un tamponuint8_t.XR_SPATIAL_BUFFER_TYPE_UINT16_EXT. Le canXrSpatialBufferIdEXTpeut être transmis à xrGetSpatialBufferUint16EXT pour récupérer un tamponuint16_t.XR_SPATIAL_BUFFER_TYPE_UINT32_EXT. Le canXrSpatialBufferIdEXTpeut être transmis à xrGetSpatialBufferUint32EXT pour récupérer un tamponuint32_t.XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT. LeXrSpatialBufferIdEXTpeut être transmis à xrGetSpatialBufferFloatEXT pour récupérer un tamponfloat.XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT. LeXrSpatialBufferIdEXTcan peut être transmis à xrGetSpatialBufferVector2fEXT pour récupérer un tampon XrVector2f.XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT. LeXrSpatialBufferIdEXTpeut être transmis à xrGetSpatialBufferVector3fEXT pour récupérer un tampon XrVector3f.
La fonction xrGetSpatialBufferStringEXT est définie comme suit :
XrResult xrGetSpatialBufferStringEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
char* buffer);
Descriptions des paramètres
snapshotest un handle pour un XrSpatialSnapshotEXT .infocontient les informations sur la mémoire tampon à interroger.bufferCapacityInputcorrespond à la capacité du tableau ou à 0 pour indiquer une demande de récupération de la capacité requise.bufferCountOutputcorrespond au nombre de caractères ou à la capacité requise sibufferCapacityInputest insuffisant.bufferest un tableau dechar. Elle peut êtreNULLsibufferCapacityInputest défini sur 0.- Pour obtenir une description détaillée de la récupération de la taille
bufferrequise, consultez la section Paramètres de taille du tampon.
L'application peut obtenir les données d'un XrSpatialBufferEXT fourni par un composant, où XrSpatialBufferEXT :: bufferType est XR_SPATIAL_BUFFER_TYPE_STRING_EXT en utilisant xrGetSpatialBufferStringEXT .
L'exécution doit renvoyer XR_ERROR_VALIDATION_FAILURE si XrSpatialBufferTypeEXT pour XrSpatialBufferGetInfoEXT :: bufferId n'est pas XR_SPATIAL_BUFFER_TYPE_STRING_EXT .
L'exécution doit renvoyer XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT si XrSpatialBufferGetInfoEXT :: bufferId n'appartient pas à snapshot .
buffer rempli par le runtime doit être une chaîne UTF-8 terminée par un caractère nul.
Utilisation valide (implicite)
- L'extension
XR_EXT_spatial_entitydoit être activée avant d'appeler xrGetSpatialBufferStringEXT. -
snapshotdoit être un handle XrSpatialSnapshotEXT valide -
infomust être un pointeur vers une structure XrSpatialBufferGetInfoEXT valide -
bufferCountOutputmust être un pointeur vers une valeuruint32_t - Si
bufferCapacityInputn'est pas0,bufferdoit être un pointeur vers un tableau de valeurs charbufferCapacityInput.
Codes de retour
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 fonction xrGetSpatialBufferUint8EXT est définie comme suit :
XrResult xrGetSpatialBufferUint8EXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
uint8_t* buffer);
Descriptions des paramètres
snapshotest un handle pour un XrSpatialSnapshotEXT .infocontient les informations sur la mémoire tampon à interroger.bufferCapacityInputcorrespond à la capacité du tableau ou à 0 pour indiquer une demande de récupération de la capacité requise.bufferCountOutputcorrespond au nombre d'éléments du tableaubufferou à la capacité requise sibufferCapacityInputest insuffisant.bufferest un tableau deuint8_t. Elle peut êtreNULLsibufferCapacityInputest défini sur 0.- Pour obtenir une description détaillée de la récupération de la taille
bufferrequise, consultez la section Paramètres de taille du tampon.
L'application peut obtenir les données d'un XrSpatialBufferEXT fourni par un composant, où XrSpatialBufferEXT :: bufferType est XR_SPATIAL_BUFFER_TYPE_UINT8_EXT en utilisant xrGetSpatialBufferUint8EXT .
L'exécution doit renvoyer XR_ERROR_VALIDATION_FAILURE si XrSpatialBufferTypeEXT pour XrSpatialBufferGetInfoEXT :: bufferId n'est pas XR_SPATIAL_BUFFER_TYPE_UINT8_EXT .
L'exécution doit renvoyer XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT si XrSpatialBufferGetInfoEXT :: bufferId n'appartient pas à snapshot .
Utilisation valide (implicite)
- L'extension
XR_EXT_spatial_entitydoit être activée avant d'appeler xrGetSpatialBufferUint8EXT. -
snapshotdoit être un handle XrSpatialSnapshotEXT valide -
infomust être un pointeur vers une structure XrSpatialBufferGetInfoEXT valide -
bufferCountOutputmust être un pointeur vers une valeuruint32_t - Si
bufferCapacityInputn'est pas0,bufferdoit être un pointeur vers un tableau de valeursuint8_tde typebufferCapacityInput.
Codes de retour
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 fonction xrGetSpatialBufferUint16EXT est définie comme suit :
XrResult xrGetSpatialBufferUint16EXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
uint16_t* buffer);
Descriptions des paramètres
snapshotest un handle vers un XrSpatialSnapshotEXT .infocontient les informations sur la mémoire tampon à interroger.bufferCapacityInputcorrespond à la capacité du tableau ou à 0 pour indiquer une demande de récupération de la capacité requise.bufferCountOutputcorrespond au nombre d'éléments du tableaubufferou à la capacité requise sibufferCapacityInputest insuffisant.bufferest un tableau deuint16_t. Elle peut êtreNULLsibufferCapacityInputest défini sur 0.- Pour obtenir une description détaillée de la récupération de la taille
bufferrequise, consultez la section Paramètres de taille du tampon.
L'application peut obtenir les données d'un XrSpatialBufferEXT fourni par un composant, où XrSpatialBufferEXT :: bufferType est XR_SPATIAL_BUFFER_TYPE_UINT16_EXT en utilisant xrGetSpatialBufferUint16EXT .
L'exécution doit renvoyer XR_ERROR_VALIDATION_FAILURE si XrSpatialBufferTypeEXT pour XrSpatialBufferGetInfoEXT :: bufferId n'est pas XR_SPATIAL_BUFFER_TYPE_UINT16_EXT .
L'exécution doit renvoyer XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT si XrSpatialBufferGetInfoEXT :: bufferId n'appartient pas à snapshot .
Utilisation valide (implicite)
- L'extension
XR_EXT_spatial_entitydoit être activée avant d'appeler xrGetSpatialBufferUint16EXT. -
snapshotdoit être un handle XrSpatialSnapshotEXT valide -
infomust être un pointeur vers une structure XrSpatialBufferGetInfoEXT valide -
bufferCountOutputmust être un pointeur vers une valeuruint32_t - Si
bufferCapacityInputn'est pas0,bufferdoit être un pointeur vers un tableau de valeursuint16_tde typebufferCapacityInput.
Codes de retour
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 fonction xrGetSpatialBufferUint32EXT est définie comme suit :
XrResult xrGetSpatialBufferUint32EXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
uint32_t* buffer);
Descriptions des paramètres
snapshotest un handle pour un XrSpatialSnapshotEXT .infocontient les informations sur la mémoire tampon à interroger.bufferCapacityInputcorrespond à la capacité du tableau ou à 0 pour indiquer une demande de récupération de la capacité requise.bufferCountOutputcorrespond au nombre d'éléments du tableaubufferou à la capacité requise sibufferCapacityInputest insuffisant.bufferest un tableau deuint32_t. Elle peut êtreNULLsibufferCapacityInputest défini sur 0.- Pour obtenir une description détaillée de la récupération de la taille
bufferrequise, consultez la section Paramètres de taille du tampon.
L'application peut obtenir les données d'un XrSpatialBufferEXT fourni par un composant, où XrSpatialBufferEXT :: bufferType est XR_SPATIAL_BUFFER_TYPE_UINT32_EXT en utilisant xrGetSpatialBufferUint32EXT .
L'exécution doit renvoyer XR_ERROR_VALIDATION_FAILURE si XrSpatialBufferTypeEXT pour XrSpatialBufferGetInfoEXT :: bufferId n'est pas XR_SPATIAL_BUFFER_TYPE_UINT32_EXT .
L'exécution doit renvoyer XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT si XrSpatialBufferGetInfoEXT :: bufferId n'appartient pas à snapshot .
Utilisation valide (implicite)
- L'extension
XR_EXT_spatial_entitydoit être activée avant d'appeler xrGetSpatialBufferUint32EXT. -
snapshotdoit être un handle XrSpatialSnapshotEXT valide -
infomust être un pointeur vers une structure XrSpatialBufferGetInfoEXT valide -
bufferCountOutputmust être un pointeur vers une valeuruint32_t - Si
bufferCapacityInputn'est pas0,bufferdoit être un pointeur vers un tableau de valeursuint32_tde typebufferCapacityInput.
Codes de retour
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 fonction xrGetSpatialBufferFloatEXT est définie comme suit :
XrResult xrGetSpatialBufferFloatEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
float* buffer);
Descriptions des paramètres
snapshotest un handle pour un XrSpatialSnapshotEXT .infocontient les informations sur la mémoire tampon à interroger.bufferCapacityInputcorrespond à la capacité du tableau ou à 0 pour indiquer une demande de récupération de la capacité requise.bufferCountOutputcorrespond au nombre d'éléments du tableaubufferou à la capacité requise sibufferCapacityInputest insuffisant.bufferest un tableau defloat. Elle peut êtreNULLsibufferCapacityInputest défini sur 0.- Pour obtenir une description détaillée de la récupération de la taille
bufferrequise, consultez la section Paramètres de taille du tampon.
L'application peut obtenir les données d'un XrSpatialBufferEXT fourni par un composant, où XrSpatialBufferEXT :: bufferType est XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT en utilisant xrGetSpatialBufferFloatEXT .
L'exécution doit renvoyer XR_ERROR_VALIDATION_FAILURE si XrSpatialBufferTypeEXT pour XrSpatialBufferGetInfoEXT :: bufferId n'est pas XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT .
L'exécution doit renvoyer XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT si XrSpatialBufferGetInfoEXT :: bufferId n'appartient pas à snapshot .
Utilisation valide (implicite)
- L'extension
XR_EXT_spatial_entitydoit être activée avant d'appeler xrGetSpatialBufferFloatEXT. -
snapshotdoit être un handle XrSpatialSnapshotEXT valide -
infomust être un pointeur vers une structure XrSpatialBufferGetInfoEXT valide -
bufferCountOutputmust être un pointeur vers une valeuruint32_t - Si
bufferCapacityInputn'est pas0,bufferdoit être un pointeur vers un tableau de valeursfloatde typebufferCapacityInput.
Codes de retour
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 fonction xrGetSpatialBufferVector2fEXT est définie comme suit :
XrResult xrGetSpatialBufferVector2fEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
XrVector2f* buffer);
Descriptions des paramètres
snapshotest un handle pour un XrSpatialSnapshotEXT .infocontient les informations sur la mémoire tampon à interroger.bufferCapacityInputcorrespond à la capacité du tableau ou à 0 pour indiquer une demande de récupération de la capacité requise.bufferCountOutputcorrespond au nombre d'éléments du tableaubufferou à la capacité requise sibufferCapacityInputest insuffisant.bufferest un tableau de XrVector2f . Elle peut êtreNULLsibufferCapacityInputest défini sur 0.- Pour obtenir une description détaillée de la récupération de la taille
bufferrequise, consultez la section Paramètres de taille du tampon.
L'application peut obtenir les données d'un XrSpatialBufferEXT fourni par un composant, où XrSpatialBufferEXT :: bufferType est XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT en utilisant xrGetSpatialBufferVector2fEXT .
L'exécution doit renvoyer XR_ERROR_VALIDATION_FAILURE si XrSpatialBufferTypeEXT pour XrSpatialBufferGetInfoEXT :: bufferId n'est pas XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT .
L'exécution doit renvoyer XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT si XrSpatialBufferGetInfoEXT :: bufferId n'appartient pas à snapshot .
Utilisation valide (implicite)
- L'extension
XR_EXT_spatial_entitydoit être activée avant d'appeler xrGetSpatialBufferVector2fEXT. -
snapshotdoit être un handle XrSpatialSnapshotEXT valide -
infomust être un pointeur vers une structure XrSpatialBufferGetInfoEXT valide -
bufferCountOutputmust être un pointeur vers une valeuruint32_t - Si
bufferCapacityInputn'est pas0,bufferdoit être un pointeur vers un tableau de structures XrVector2fbufferCapacityInput.
Codes de retour
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 fonction xrGetSpatialBufferVector3fEXT est définie comme suit :
XrResult xrGetSpatialBufferVector3fEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
XrVector3f* buffer);
Descriptions des paramètres
snapshotest un handle vers un XrSpatialSnapshotEXT .infocontient les informations sur la mémoire tampon à interroger.bufferCapacityInputcorrespond à la capacité du tableau ou à 0 pour indiquer une demande de récupération de la capacité requise.bufferCountOutputcorrespond au nombre d'éléments du tableaubufferou à la capacité requise sibufferCapacityInputest insuffisant.bufferest un tableau de XrVector3f . Elle peut êtreNULLsibufferCapacityInputest défini sur 0.- Pour obtenir une description détaillée de la récupération de la taille
bufferrequise, consultez la section Paramètres de taille du tampon.
L'application peut obtenir les données d'un XrSpatialBufferEXT fourni par un composant, où XrSpatialBufferEXT :: bufferType est XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT en utilisant xrGetSpatialBufferVector3fEXT .
L'exécution doit renvoyer XR_ERROR_VALIDATION_FAILURE si XrSpatialBufferTypeEXT pour XrSpatialBufferGetInfoEXT :: bufferId n'est pas XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT .
L'exécution doit renvoyer XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT si XrSpatialBufferGetInfoEXT :: bufferId n'appartient pas à snapshot .
Utilisation valide (implicite)
- L'extension
XR_EXT_spatial_entitydoit être activée avant d'appeler xrGetSpatialBufferVector3fEXT. -
snapshotdoit être un handle XrSpatialSnapshotEXT valide -
infomust être un pointeur vers une structure XrSpatialBufferGetInfoEXT valide -
bufferCountOutputmust être un pointeur vers une valeuruint32_t - Si
bufferCapacityInputn'est pas0,bufferdoit être un pointeur vers un tableau de structures XrVector3f debufferCapacityInput.
Codes de retour
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 structure XrSpatialBufferGetInfoEXT est définie comme suit :
typedef struct XrSpatialBufferGetInfoEXT {
XrStructureType type;
const void* next;
XrSpatialBufferIdEXT bufferId;
} XrSpatialBufferGetInfoEXT;
Descriptions des membres
typeest le XrStructureType de cette structure.nextestNULLou un pointeur vers la structure suivante dans une chaîne de structures.bufferId:XrSpatialBufferIdEXTpour le tampon dont les données doivent être récupérées.
Utilisation valide (implicite)
- L'extension
XR_EXT_spatial_entitydoit être activée avant d'utiliser XrSpatialBufferGetInfoEXT. -
typedoit êtreXR_TYPE_SPATIAL_BUFFER_GET_INFO_EXT. -
nextdoit êtreNULLou un pointeur valide vers la structure suivante dans une chaîne de structures.
#define XR_NULL_SPATIAL_BUFFER_ID_EXT 0
XR_NULL_SPATIAL_BUFFER_ID_EXT est une valeur réservée représentant un XrSpatialBufferIdEXT non valide . Il peut être transmis aux fonctions d'API et renvoyé par celles-ci uniquement lorsque cela est spécifiquement autorisé.
Créer un instantané de mise à jour
La fonction xrCreateSpatialUpdateSnapshotEXT est définie comme suit :
XrResult xrCreateSpatialUpdateSnapshotEXT(
XrSpatialContextEXT spatialContext,
const XrSpatialUpdateSnapshotCreateInfoEXT* createInfo,
XrSpatialSnapshotEXT* snapshot);
Descriptions des paramètres
spatialContextest un XrSpatialContextEXT créé précédemment à l'aide de xrCreateSpatialContextAsyncEXT .createInfoest un pointeur vers une XrSpatialUpdateSnapshotCreateInfoEXT .snapshotest un pointeur vers le résultat XrSpatialSnapshotEXT .
L'application peut utiliser xrCreateSpatialUpdateSnapshotEXT pour créer un instantané et obtenir les dernières données de composants pour des entités spécifiques telles qu'elles sont connues par le moteur d'exécution. Les applications peuvent fournir les handles XrSpatialEntityEXT et les types de composants qui les intéressent lors de la création de l'instantané.
L'application peut utiliser XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes pour filtrer la liste des composants dont les données doivent être incluses dans l'instantané. Si l'application fournit une liste valide de types de composants spatiaux dans XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes , le runtime doit uniquement inclure dans le snapshot les entités spatiales qui comportent au moins l'un des composants fournis dans XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes . De plus, le runtime doit uniquement inclure les données de ces composants dans l'instantané.
L'exécution doit renvoyer XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT si l'un des XrSpatialComponentTypeEXT dans XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes n'est pas activé pour les capacités spatiales transmises à XrSpatialContextCreateInfoEXT :: capabilityConfigs lors de la création de spatialContext .
Si l'application ne fournit pas de liste de types de composants spatiaux dans XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes , le runtime doit inclure toutes les entités spatiales listées dans XrSpatialUpdateSnapshotCreateInfoEXT :: entities dans le snapshot et doit inclure les données de tous les composants activés des fonctionnalités configurées pour spatialContext .
L'exécution ne doit pas inclure d'entités spatiales qui ne sont pas listées dans XrSpatialUpdateSnapshotCreateInfoEXT :: entities dans snapshot .
L'application peut créer autant d'instantanés qu'elle le souhaite, mais elle doit tenir compte de la mémoire allouée à chaque nouvel instantané et doit détruire les instantanés une fois qu'elle n'en a plus besoin.
Utilisation valide (implicite)
- L'extension
XR_EXT_spatial_entitydoit être activée avant d'appeler xrCreateSpatialUpdateSnapshotEXT. -
spatialContextmust être un handle XrSpatialContextEXT valide -
createInfodoit être un pointeur vers une structure XrSpatialUpdateSnapshotCreateInfoEXT valide. -
snapshotdoit être un pointeur vers un handle XrSpatialSnapshotEXT.
Codes de retour
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 structure XrSpatialUpdateSnapshotCreateInfoEXT est définie comme suit :
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;
Descriptions des membres
typeest le XrStructureType de cette structure.nextestNULLou un pointeur vers la structure suivante dans une chaîne de structures. Aucune structure de ce type n'est définie dans l'extension ni dans le cœur d'OpenXR.entityCountest unuint32_tdécrivant le nombre d'éléments dans le tableauentities.entitiesest un tableau de XrSpatialEntityEXT pour lequel le runtime doit inclure les données du composant dans l'instantané.componentTypeCountest unuint32_tdécrivant le nombre d'éléments dans le tableaucomponentTypes.componentTypesest un tableau de XrSpatialComponentTypeEXT pour lequel le runtime doit inclure les données dans l'instantané.baseSpaceest le XrSpace par rapport auquel tous les emplacements de la mise à jour XrSpatialSnapshotEXT seront situés.timeest leXrTimedans lequel se trouveront tous les emplacements de la mise à jour XrSpatialSnapshotEXT.
Utilisation valide (implicite)
- L'extension
XR_EXT_spatial_entitydoit être activée avant d'utiliser XrSpatialUpdateSnapshotCreateInfoEXT. -
typedoit êtreXR_TYPE_SPATIAL_UPDATE_SNAPSHOT_CREATE_INFO_EXT. -
nextdoit êtreNULLou un pointeur valide vers la structure suivante dans une chaîne de structures. -
entitiesdoit être un pointeur vers un tableau deentityCountdescripteurs XrSpatialEntityEXT valides. - Si
componentTypeCountn'est pas0,componentTypesdoit être un pointeur vers un tableau decomponentTypeCountvaleurs XrSpatialComponentTypeEXT valides. -
baseSpacedoit être un handle XrSpace valide - Le paramètre
entityCountdoit être supérieur à0 -
baseSpaceet les éléments deentitiesdoivent avoir été créés, alloués ou récupérés à partir de la même XrSession.
Détruire un instantané
La fonction xrDestroySpatialSnapshotEXT est définie comme suit :
XrResult xrDestroySpatialSnapshotEXT(
XrSpatialSnapshotEXT snapshot);
Descriptions des paramètres
snapshotest un XrSpatialSnapshotEXT précédemment fourni par xrCreateSpatialDiscoverySnapshotCompleteEXT ou xrCreateSpatialUpdateSnapshotEXT .
L'application peut appeler xrDestroySpatialSnapshotEXT pour détruire le handle XrSpatialSnapshotEXT et les ressources qui y sont associées.
Utilisation valide (implicite)
- L'extension
XR_EXT_spatial_entitydoit être activée avant d'appeler xrDestroySpatialSnapshotEXT. -
snapshotdoit être un handle XrSpatialSnapshotEXT valide
Sécurité des threads
- L'accès à
snapshotet à tous les identifiants enfants doit être synchronisé en externe.
Codes de retour
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
Composants courants
2D limitée
Données des composants
La structure XrSpatialBounded2DDataEXT est définie comme suit :
typedef struct XrSpatialBounded2DDataEXT {
XrPosef center;
XrExtent2Df extents;
} XrSpatialBounded2DDataEXT;
Descriptions des membres
centerest une XrPosef qui définit le centre géométrique du composant 2D limité.extentscorrespond aux limites du composant 2D limité le long de l'axe X (extents.width) et de l'axe Y (extents.height), centré surcenter.
Les extents de XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT font référence à la taille de l'entité dans le plan x-y du système de coordonnées du plan. Un plan avec une position de {0, 0, 0}, une rotation de {0, 0, 0, 1} (aucune rotation) et une étendue de {1, 1} fait référence à un plan de 1 mètre x 1 mètre centré sur {0, 0, 0} avec son vecteur normal de face avant pointant vers la direction +Z dans l'espace du composant.
X X Y Y Z Z Hauteur Hauteur Y Y Z Z X X Plan vertical Plan vertical Plan horizontal Plan horizontal Largeur Largeur Largeur Largeur Hauteur Hauteur
Figure 24. Système de coordonnées du composant Bounded2D
Remarque
OpenXR utilise un plan X-Y avec +Z comme normale du plan, mais d'autres API peuvent utiliser un plan X-Z avec +Y comme normale du plan. Le plan X-Y peut être converti en plan X-Z en effectuant une rotation de -π/2 radians autour de l'axe X positif.
Utilisation valide (implicite)
- L'extension
XR_EXT_spatial_entitydoit être activée avant d'utiliser XrSpatialBounded2DDataEXT.
Structure de la liste des composants pour interroger les données
La structure XrSpatialComponentBounded2DListEXT est définie comme suit :
typedef struct XrSpatialComponentBounded2DListEXT {
XrStructureType type;
void* next;
uint32_t boundCount;
XrSpatialBounded2DDataEXT* bounds;
} XrSpatialComponentBounded2DListEXT;
Descriptions des membres
typeest le XrStructureType de cette structure.nextestNULLou un pointeur vers la structure suivante dans une chaîne de structures. Aucune structure de ce type n'est définie dans l'extension ni dans le cœur d'OpenXR.boundCountest unuint32_tdécrivant le nombre d'éléments dans le tableaubounds.boundsest un tableau de XrSpatialBounded2DDataEXT .
Le runtime doit renvoyer XR_ERROR_VALIDATION_FAILURE à partir de xrQuerySpatialComponentDataEXT si XrSpatialComponentBounded2DListEXT se trouve dans la chaîne suivante de XrSpatialComponentDataQueryResultEXT :: next, mais que XrSpatialComponentDataQueryConditionEXT ::componentTypeCount n'est pas nul et que XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT n'est pas inclus dans XrSpatialComponentDataQueryConditionEXT :: componentTypes .
Le runtime doit renvoyer XR_ERROR_SIZE_INSUFFICIENT à partir de xrQuerySpatialComponentDataEXT si boundCount est inférieur à XrSpatialComponentDataQueryResultEXT::entityIdCountOutput .
Si xrQuerySpatialComponentDataEXT :: snapshot a été créé à partir de xrCreateSpatialDiscoverySnapshotCompleteEXT , le runtime doit fournir XrSpatialBounded2DDataEXT :: center dans XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace et XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time .
Si xrQuerySpatialComponentDataEXT :: snapshot a été créé à partir de xrCreateSpatialUpdateSnapshotEXT , le runtime doit fournir XrSpatialBounded2DDataEXT :: center dans XrSpatialUpdateSnapshotCreateInfoEXT :: baseSpace et XrSpatialUpdateSnapshotCreateInfoEXT :: time .
Utilisation valide (implicite)
- L'extension
XR_EXT_spatial_entitydoit être activée avant d'utiliser XrSpatialComponentBounded2DListEXT. -
typedoit êtreXR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXT. -
nextdoit êtreNULLou un pointeur valide vers la structure suivante dans une chaîne de structures. -
boundsdoit être un pointeur vers un tableau de structures XrSpatialBounded2DDataEXTboundCount - Le paramètre
boundCountdoit être supérieur à0
Configuration
Si XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT est énuméré dans XrSpatialCapabilityComponentTypesEXT :: componentTypes pour une fonctionnalité, l'application peut l'activer en incluant la valeur d'énumération dans la liste XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents. Ce composant ne nécessite aucune configuration spéciale pour être inclus dans la prochaine chaîne de XrSpatialCapabilityConfigurationBaseHeaderEXT .
3D limitée
Données des composants
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT utilise XrBoxf pour ses données.
Structure de la liste des composants pour interroger les données
La structure XrSpatialComponentBounded3DListEXT est définie comme suit :
typedef struct XrSpatialComponentBounded3DListEXT {
XrStructureType type;
void* next;
uint32_t boundCount;
XrBoxf* bounds;
} XrSpatialComponentBounded3DListEXT;
Descriptions des membres
typeest le XrStructureType de cette structure.nextestNULLou un pointeur vers la structure suivante dans une chaîne de structures. Aucune structure de ce type n'est définie dans l'extension ni dans le cœur d'OpenXR.boundCountest unuint32_tdécrivant le nombre d'éléments dans le tableaubounds.boundsest un tableau de XrBoxf .
Le runtime doit renvoyer XR_ERROR_VALIDATION_FAILURE à partir de xrQuerySpatialComponentDataEXT si XrSpatialComponentBounded3DListEXT se trouve dans la chaîne suivante de XrSpatialComponentDataQueryResultEXT :: next, mais que XrSpatialComponentDataQueryConditionEXT ::componentTypeCount n'est pas nul et que XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT n'est pas inclus dans XrSpatialComponentDataQueryConditionEXT :: componentTypes .
Le runtime doit renvoyer XR_ERROR_SIZE_INSUFFICIENT à partir de xrQuerySpatialComponentDataEXT si boundCount est inférieur à XrSpatialComponentDataQueryResultEXT::entityIdCountOutput .
Si xrQuerySpatialComponentDataEXT :: snapshot a été créé à partir de xrCreateSpatialDiscoverySnapshotCompleteEXT , le runtime doit fournir XrBoxf :: center dans XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace à XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time .
Si xrQuerySpatialComponentDataEXT :: snapshot a été créé à partir de xrCreateSpatialUpdateSnapshotEXT , le runtime doit fournir XrBoxf :: center dans XrSpatialUpdateSnapshotCreateInfoEXT :: baseSpace à XrSpatialUpdateSnapshotCreateInfoEXT :: time .
Utilisation valide (implicite)
- L'extension
XR_EXT_spatial_entitydoit être activée avant d'utiliser XrSpatialComponentBounded3DListEXT. -
typedoit êtreXR_TYPE_SPATIAL_COMPONENT_BOUNDED_3D_LIST_EXT. -
nextdoit êtreNULLou un pointeur valide vers la structure suivante dans une chaîne de structures. -
boundsmust être un pointeur vers un tableau de structures XrBoxfboundCount - Le paramètre
boundCountdoit être supérieur à0
Configuration
Si XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT est énuméré dans XrSpatialCapabilityComponentTypesEXT :: componentTypes pour une fonctionnalité, l'application peut l'activer en incluant l'énumération dans la liste XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents. Ce composant ne nécessite aucune configuration spéciale pour être inclus dans la prochaine chaîne de XrSpatialCapabilityConfigurationBaseHeaderEXT .
Parent
Données des composants
XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT utilise XrSpatialEntityIdEXT pour ses données.
Structure de la liste des composants pour interroger les données
La structure XrSpatialComponentParentListEXT est définie comme suit :
typedef struct XrSpatialComponentParentListEXT {
XrStructureType type;
void* next;
uint32_t parentCount;
XrSpatialEntityIdEXT* parents;
} XrSpatialComponentParentListEXT;
Descriptions des membres
typeest le XrStructureType de cette structure.nextestNULLou un pointeur vers la structure suivante dans une chaîne de structures. Aucune structure de ce type n'est définie dans l'extension ni dans le cœur d'OpenXR.parentCountest unuint32_tdécrivant le nombre d'éléments dans le tableauparents.parentsest un tableau deXrSpatialEntityIdEXT.
Le runtime doit renvoyer XR_ERROR_VALIDATION_FAILURE à partir de xrQuerySpatialComponentDataEXT si XrSpatialComponentParentListEXT se trouve dans la chaîne suivante de XrSpatialComponentDataQueryResultEXT : next, mais XrSpatialComponentDataQueryConditionEXT::componentTypeCount n'est pas nul et XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT n'est pas inclus dans XrSpatialComponentDataQueryConditionEXT::componentTypes .
Le runtime doit renvoyer XR_ERROR_SIZE_INSUFFICIENT à partir de xrQuerySpatialComponentDataEXT si parentCount est inférieur à XrSpatialComponentDataQueryResultEXT::entityIdCountOutput .
Utilisation valide (implicite)
- L'extension
XR_EXT_spatial_entitydoit être activée avant d'utiliser XrSpatialComponentParentListEXT. -
typedoit êtreXR_TYPE_SPATIAL_COMPONENT_PARENT_LIST_EXT. -
nextdoit êtreNULLou un pointeur valide vers la structure suivante dans une chaîne de structures. -
parentsmust être un pointeur vers un tableau de valeursparentCountXrSpatialEntityIdEXT - Le paramètre
parentCountdoit être supérieur à0
Configuration
Si XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT est énuméré dans XrSpatialCapabilityComponentTypesEXT :: componentTypes pour une fonctionnalité, l'application peut l'activer en incluant l'énumération dans la liste XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents. Ce composant ne nécessite aucune configuration spéciale pour être inclus dans la prochaine chaîne de XrSpatialCapabilityConfigurationBaseHeaderEXT .
Maillage 3D
Données des composants
La structure XrSpatialMeshDataEXT est définie comme suit :
typedef struct XrSpatialMeshDataEXT {
XrPosef origin;
XrSpatialBufferEXT vertexBuffer;
XrSpatialBufferEXT indexBuffer;
} XrSpatialMeshDataEXT;
Descriptions des membres
originest une XrPosef qui définit l'origine du maillage. Tous les sommets du maillage doivent être relatifs à cette origine.vertexBufferest un XrSpatialBufferEXT qui fournit l'ID d'un tampon représentant le tampon de vertex de l'entité sur laquelle se trouve ce composant. La position des sommets doit être relative àorigin.indexBufferest un XrSpatialBufferEXT qui fournit l'ID d'un tampon représentant un tableau d'indices de triangles, spécifiant les indices des sommets du maillage dansvertexBuffer. Les indices de triangle doivent être renvoyés dans le sens inverse des aiguilles d'une montre, et trois indices désignent un triangle.
Le type de composant utilisant XrSpatialMeshDataEXT doit spécifier le XrSpatialBufferTypeEXT de vertexBuffer et indexBuffer .
Utilisation valide (implicite)
- L'extension
XR_EXT_spatial_entitydoit être activée avant d'utiliser XrSpatialMeshDataEXT. -
vertexBufferdoit être une structure XrSpatialBufferEXT valide -
indexBufferdoit être une structure XrSpatialBufferEXT valide
Structure de la liste des composants pour interroger les données
La structure XrSpatialComponentMesh3DListEXT est définie comme suit :
typedef struct XrSpatialComponentMesh3DListEXT {
XrStructureType type;
void* next;
uint32_t meshCount;
XrSpatialMeshDataEXT* meshes;
} XrSpatialComponentMesh3DListEXT;
Descriptions des membres
typeest le XrStructureType de cette structure.nextestNULLou un pointeur vers la structure suivante dans une chaîne de structures.meshCountest unuint32_tdécrivant le nombre d'éléments dans le tableaumeshes.meshesest un tableau de XrSpatialMeshDataEXT .
L'application peut interroger le composant 3D du maillage des entités spatiales dans un XrSpatialSnapshotEXT en ajoutant XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT dans XrSpatialComponentDataQueryConditionEXT::componentTypes et en ajoutant XrSpatialComponentMesh3DListEXT à la chaîne de pointeurs suivante de XrSpatialComponentDataQueryResultEXT .
Le runtime doit renvoyer XR_ERROR_VALIDATION_FAILURE à partir de xrQuerySpatialComponentDataEXT si XrSpatialComponentMesh3DListEXT se trouve dans la chaîne suivante de XrSpatialComponentDataQueryResultEXT :: next, mais que XrSpatialComponentDataQueryConditionEXT ::componentTypeCount n'est pas nul et que XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT n'est pas inclus dans XrSpatialComponentDataQueryConditionEXT :: componentTypes .
Le runtime doit renvoyer XR_ERROR_SIZE_INSUFFICIENT à partir de xrQuerySpatialComponentDataEXT si meshCount est inférieur à XrSpatialComponentDataQueryResultEXT::entityIdCountOutput .
Pour XrSpatialMeshDataEXT rempli par le runtime dans le tableau meshes, XrSpatialBufferEXT :: bufferType pour XrSpatialMeshDataEXT :: vertexBuffer doit être XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT et XrSpatialBufferEXT :: bufferType pour XrSpatialMeshDataEXT :: indexBuffer doit être XR_SPATIAL_BUFFER_TYPE_UINT32_EXT .
Utilisation valide (implicite)
- L'extension
XR_EXT_spatial_entitydoit être activée avant d'utiliser XrSpatialComponentMesh3DListEXT. -
typedoit êtreXR_TYPE_SPATIAL_COMPONENT_MESH_3D_LIST_EXT. -
nextdoit êtreNULLou un pointeur valide vers la structure suivante dans une chaîne de structures. -
meshesdoit être un pointeur vers un tableau de structures XrSpatialMeshDataEXTmeshCount - Le paramètre
meshCountdoit être supérieur à0
Configuration
Si XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT est énuméré dans XrSpatialCapabilityComponentTypesEXT :: componentTypes pour une fonctionnalité, l'application peut l'activer en incluant l'énumération dans la liste XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents de la structure dérivée XrSpatialCapabilityConfigurationBaseHeaderEXT de la fonctionnalité qui prend en charge ce composant.
Ce composant ne nécessite aucune configuration spéciale pour être inclus dans la prochaine chaîne de XrSpatialCapabilityConfigurationBaseHeaderEXT .
Filtres d'état du suivi
La structure XrSpatialFilterTrackingStateEXT est définie comme suit :
typedef struct XrSpatialFilterTrackingStateEXT {
XrStructureType type;
const void* next;
XrSpatialEntityTrackingStateEXT trackingState;
} XrSpatialFilterTrackingStateEXT;
Descriptions des membres
typeest le XrStructureType de cette structure.nextestNULLou un pointeur vers la structure suivante dans une chaîne de structures.trackingStatecorrespond à XrSpatialEntityTrackingStateEXT pour lequel l'application souhaite appliquer le filtre.
L'application peut utiliser XrSpatialFilterTrackingStateEXT dans la chaîne suivante de XrSpatialDiscoverySnapshotCreateInfoEXT pour limiter la découverte aux entités dont l'état de suivi est trackingState .
L'application peut utiliser XrSpatialFilterTrackingStateEXT dans la chaîne suivante de XrSpatialComponentDataQueryConditionEXT pour limiter la requête de données de composant à partir d'un instantané uniquement aux entités dont l'état de suivi est trackingState .
Utilisation valide (implicite)
- L'extension
XR_EXT_spatial_entitydoit être activée avant d'utiliser XrSpatialFilterTrackingStateEXT. -
typedoit êtreXR_TYPE_SPATIAL_FILTER_TRACKING_STATE_EXT. -
nextdoit êtreNULLou un pointeur valide vers la structure suivante dans une chaîne de structures. -
trackingStatedoit être une valeur XrSpatialEntityTrackingStateEXT valide
Exemple de code
Utilisation des applications
Les applications utilisent généralement l'extension d'entité spatiale comme suit :
- Une application énumère d'abord les capacités spatiales du système à l'aide de xrEnumerateSpatialCapabilitiesEXT . Il inspecte ensuite le tableau XrSpatialCapabilityEXT renvoyé et énumère les composants et les fonctionnalités compatibles pour chacune de ces capacités à l'aide de xrEnumerateSpatialCapabilityComponentTypesEXT et xrEnumerateSpatialCapabilityFeaturesEXT, respectivement. L'application obtient ainsi une vue d'ensemble des composants qu'elle peut activer et des configurations acceptées par la fonctionnalité.
- L'application crée ensuite un ou plusieurs handles XrSpatialContextEXT avec des configurations de capacités spatiales spécifiques, dans lesquelles les configurations activent et configurent une capacité spécifique dans le contexte spatial, et activent et configurent les composants pour ces capacités.
- Pour chaque XrSpatialContextEXT , l'application attend de recevoir des événements XrEventDataSpatialDiscoveryRecommendedEXT pour ce XrSpatialContextEXT avant d'utiliser xrCreateSpatialDiscoverySnapshotAsyncEXT pour découvrir les entités spatiales. Une fois cette opération asynchrone terminée, l'application reçoit un handle XrSpatialSnapshotEXT.
- L'application interroge les entités et les données de composants incluses dans XrSpatialSnapshotEXT à l'aide de xrQuerySpatialComponentDataEXT . L'application lit les dernières données de composant des entités interrogées à partir des structures associées à la chaîne suivante de XrSpatialComponentDataQueryResultEXT si l'état de l'entité est
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT. - Si l'application identifie des entités spécifiques qui l'intéressent et pour lesquelles elle souhaite recevoir des mises à jour au fil du temps, elle crée des handles XrSpatialEntityEXT pour ces entités à l'aide de xrCreateSpatialEntityFromIdEXT . L'application obtient les mises à jour de ces entités intéressantes à l'aide de xrCreateSpatialUpdateSnapshotEXT et utilise la même fonction xrQuerySpatialComponentDataEXT sur le XrSpatialSnapshotEXT nouvellement créé pour obtenir les dernières données de composant pour ces entités.
Découvrir les entités spatiales et interroger les données des composants
L'exemple de code suivant montre comment découvrir des entités spatiales pour la requête de capacité "Foo" et interroger ses données de composants.
/****************************/
/* 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));
Interroger les données du tampon de requête
L'exemple de code suivant montre comment obtenir les données d'un composant qui fournit 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.
}
}
Consignes relatives aux extensions
Si une extension définit un nouveau XrSpatialComponentTypeEXT qui fournit des données supplémentaires sur une entité spatiale,
- L'extension doit également définir une structure de liste pour ce composant, ce qui permet à l'application de transmettre un tableau au runtime pour le remplir avec les données de chacune des entités spatiales qui satisfont xrQuerySpatialComponentDataEXT ::
queryCondition. XrSpatialComponentParentListEXT et XrSpatialComponentBounded2DListEXT sont des exemples de structures de liste de ce type . Si la taille des données du composant est variable et nécessite que l'application utilise l'idiome à deux appels pour l'interroger, les données du composant doivent fournir un XrSpatialBufferEXT pour chaque donnée de taille variable dans la structure de liste et doivent spécifier le XrSpatialBufferTypeEXT pour chaque tampon. L'application peut ensuite interroger les données du tampon à l'aide des fonctions définies dans Idiome à deux appels pour les données de composants . XrSpatialMeshDataEXT, qui est inclus dans XrSpatialComponentMesh3DListEXT, est un exemple de ce type de structure . - L'extension peut également fournir des structures que l'application peut chaîner à XrSpatialComponentDataQueryConditionEXT ::
nextpour fournir des filtres supplémentaires pour la requête concernant les données de ce composant.
- L'extension doit également définir une structure de liste pour ce composant, ce qui permet à l'application de transmettre un tableau au runtime pour le remplir avec les données de chacune des entités spatiales qui satisfont xrQuerySpatialComponentDataEXT ::
Les extensions peuvent définir des structures qui étendent XrSpatialDiscoverySnapshotCreateInfoEXT pour fournir des filtres de découverte supplémentaires. Les filtres permettant de créer l'instantané ne doivent pas affecter la configuration du contexte spatial. Ils doivent plutôt être utilisés pour fournir des indications au runtime sur les entités et les données à inclure dans l'instantané, telles qu'elles sont suivies par la configuration actuelle du contexte spatial (et donc par la configuration actuelle des services sous-jacents).
Si une extension définit une nouvelle XrSpatialCapabilityEXT ,
- Il doit également spécifier la liste des XrSpatialComponentTypeEXT que les runtimes doivent fournir sur les entités pour cette fonctionnalité.
- Il doit également fournir des structures dérivées de XrSpatialCapabilityConfigurationBaseHeaderEXT qui permettront de configurer cette fonctionnalité.
Si une extension définit une nouvelle XrSpatialCapabilityFeatureEXT , elle doit également définir une structure de configuration correspondante qui peut être enchaînée au pointeur suivant de XrSpatialCapabilityConfigurationBaseHeaderEXT , que l'application peut utiliser pour activer la fonctionnalité lors de la création d'un XrSpatialContextEXT .
Une extension définissant une nouvelle XrSpatialCapabilityEXT doit suivre ce modèle pour la spécification :
- Présentation
- Prise en charge des environnements d'exécution
- Configuration
- Composants garantis
- Exemple de code
Une extension définissant un nouveau XrSpatialComponentTypeEXT doit suivre ce modèle pour la spécification :
- Données des composants
- Structure de la liste des composants pour interroger les données
- Configuration
Lors de l'écriture d'une API qui fournit à l'application un
XrSpatialBufferIdEXT, elle doit être accompagnée d'un XrSpatialBufferTypeEXT pour informer l'application du type de données du tampon. L'application peut utiliser une fonctionxrGetSpatialBuffer*appropriée pour récupérer le contenu réel du tampon.
Consignes de conception et d'extension des libellés sémantiques
Bien que cette extension ne définisse aucun composant permettant de transmettre les informations sur le libellé sémantique d'une entité, elle établit les règles de conception et les consignes pour toutes les extensions qui définissent un tel composant. Dans le texte suivant, les termes should (devrait) et must (doit) contraignent les auteurs de telles fonctionnalités, plutôt qu'une implémentation d'exécution ou une application utilisant l'API.
- Si une extension définit des libellés sémantiques pour une XrSpatialCapabilityEXT , elle doit le faire en définissant une nouvelle XrSpatialComponentTypeEXT ainsi qu'une nouvelle énumération avec un ensemble de libellés (un "ensemble de libellés sémantiques") pour être les données de ce composant.
- Une énumération représentant un ensemble de libellés sémantiques doit avoir une valeur pour indiquer que l'entité n'est classée dans aucun des libellés de cet ensemble. Le nom de cet énumérant doit inclure "UNCATEGORIZED", par exemple
XR_SPATIAL_PLANE_SEMANTIC_LABEL_UNCATEGORIZED_EXT. Cette valeur indique aux applications que le runtime reconnaît cette entité, mais qu'il existe d'autres ensembles d'étiquettes sémantiques dans lesquels cette entité est classée. - L'énumération de ce XrSpatialComponentTypeEXT nouvellement défini dans xrEnumerateSpatialCapabilityComponentTypesEXT implique que le runtime est compatible avec l'ensemble de libellés sémantiques (et donc avec les libellés définis dans l'ensemble) correspondant à ce type de composant.
- Les applications expriment leur souhait de découvrir des entités dont les libellés appartiennent à cet ensemble de libellés sémantiques en incluant le XrSpatialComponentTypeEXT correspondant dans le tableau
enabledComponentsde XrSpatialCapabilityConfigurationBaseHeaderEXT de la structure de configuration pour la fonctionnalité pour laquelle le type de composant est énuméré. - Il est possible qu'une même entité spatiale comporte plusieurs composants, chacun lui fournissant un libellé à partir de son propre ensemble de libellés sémantiques. Prenons l'exemple suivant avec des ensembles de libellés sémantiques hypothétiques :
XrSpatialObjectSemanticLabel, qui peuvent avoir des valeurs telles que "chaise", "canapé", "table", etc.XrSpatialSofaBrand, qui peut avoir des valeurs telles que IKEA, Wayfair, etc., etXrSpatialIkeaSofa, qui peut avoir des noms de modèles IKEA spécifiques pour les canapés. Dans ce scénario, la même entité de canapé comporte les trois composants (libellés des trois ensembles de libellés sémantiques), chacun fournissant un niveau de précision différent sur l'entité. - Si une extension définit un nouveau XrSpatialComponentTypeEXT qui fournit un nouvel ensemble d'étiquettes sémantiques contenant plusieurs étiquettes en plus de l'étiquette
UNCATEGORIZED, l'extension doit envisager de définir un XrSpatialCapabilityFeatureEXT qui permet aux applications d'activer uniquement un sous-ensemble des étiquettes définies dans l'ensemble d'étiquettes sémantiques correspondant à ce type de composant. Ce sous-ensemble, fourni dans la chaîne suivante de la configuration des capacités, sert d'indication aux runtimes pour optimiser leurs pipelines de suivi et ne suivre que le sous-ensemble fourni. Vous trouverez un exemple de structure de caractéristiques ci-dessous . - Les extensions ne doivent pas ajouter de libellés à l'énumération existante de l'ensemble de libellés sémantiques. Ils doivent plutôt définir une nouvelle énumération contenant des énumérants équivalents avec une sémantique identique et des valeurs égales à celles de l'autre ensemble, en plus des énumérants nouvellement ajoutés. La spécification du nouvel ensemble de libellés sémantiques doit également établir le mappage entre l'ancien et le nouveau. Consultez l'exemple ci-dessous .
Exemple de définition de fonctionnalité spatiale pour un sous-ensemble de libellés sémantiques
// 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;
Exemple d'extension de libellé sémantique spatial
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;
Prenons l'exemple ci-dessus, où une extension définit une énumération XrSpatialExamplePlaneSemanticLabelExtensionEXT afin d'étendre XrSpatialPlaneSemanticLabelEXT avec des valeurs représentant des portes et des fenêtres. La spécification de la nouvelle énumération doit inclure du texte pour le formulaire suivant :
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
|====
Nouvelles macros
Nouveaux types de bases
XrSpatialBufferIdEXTXrSpatialEntityIdEXT
Nouveaux types d'objets
Nouvelles commandes
- xrCreateSpatialContextAsyncEXT
- xrCreateSpatialContextCompleteEXT
- xrCreateSpatialDiscoverySnapshotAsyncEXT
- xrCreateSpatialDiscoverySnapshotCompleteEXT
- xrCreateSpatialEntityFromIdEXT
- xrCreateSpatialUpdateSnapshotEXT
- xrDestroySpatialContextEXT
- xrDestroySpatialEntityEXT
- xrDestroySpatialSnapshotEXT
- xrEnumerateSpatialCapabilitiesEXT
- xrEnumerateSpatialCapabilityComponentTypesEXT
- xrEnumerateSpatialCapabilityFeaturesEXT
- xrGetSpatialBufferFloatEXT
- xrGetSpatialBufferStringEXT
- xrGetSpatialBufferUint16EXT
- xrGetSpatialBufferUint32EXT
- xrGetSpatialBufferUint8EXT
- xrGetSpatialBufferVector2fEXT
- xrGetSpatialBufferVector3fEXT
- xrQuerySpatialComponentDataEXT
Nouvelles structures
- XrCreateSpatialContextCompletionEXT
- XrCreateSpatialDiscoverySnapshotCompletionEXT
- XrCreateSpatialDiscoverySnapshotCompletionInfoEXT
- XrEventDataSpatialDiscoveryRecommendedEXT
- XrSpatialBounded2DDataEXT
- XrSpatialBufferEXT
- XrSpatialBufferGetInfoEXT
- XrSpatialCapabilityComponentTypesEXT
- XrSpatialCapabilityConfigurationBaseHeaderEXT
- XrSpatialComponentDataQueryConditionEXT
- XrSpatialComponentDataQueryResultEXT
- XrSpatialContextCreateInfoEXT
- XrSpatialDiscoverySnapshotCreateInfoEXT
- XrSpatialEntityFromIdCreateInfoEXT
- XrSpatialMeshDataEXT
- XrSpatialUpdateSnapshotCreateInfoEXT
Extension de XrSpatialComponentDataQueryResultEXT :
Extension de XrSpatialDiscoverySnapshotCreateInfoEXT , XrSpatialComponentDataQueryConditionEXT :
Nouveaux enums
- XrSpatialBufferTypeEXT
- XrSpatialCapabilityEXT
- XrSpatialCapabilityFeatureEXT
- XrSpatialComponentTypeEXT
- XrSpatialEntityTrackingStateEXT
Nouvelles constantes d'énumération
XR_EXT_SPATIAL_ENTITY_EXTENSION_NAMEXR_EXT_spatial_entity_SPEC_VERSIONExtension de XrObjectType :
XR_OBJECT_TYPE_SPATIAL_CONTEXT_EXTXR_OBJECT_TYPE_SPATIAL_ENTITY_EXTXR_OBJECT_TYPE_SPATIAL_SNAPSHOT_EXT
Prolonger 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
Extension de XrStructureType :
XR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXTXR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXTXR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXTXR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXTXR_TYPE_SPATIAL_BUFFER_GET_INFO_EXTXR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXTXR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXTXR_TYPE_SPATIAL_COMPONENT_BOUNDED_3D_LIST_EXTXR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXTXR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXTXR_TYPE_SPATIAL_COMPONENT_MESH_3D_LIST_EXTXR_TYPE_SPATIAL_COMPONENT_PARENT_LIST_EXTXR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXTXR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXTXR_TYPE_SPATIAL_ENTITY_FROM_ID_CREATE_INFO_EXTXR_TYPE_SPATIAL_FILTER_TRACKING_STATE_EXTXR_TYPE_SPATIAL_UPDATE_SNAPSHOT_CREATE_INFO_EXT
Problèmes
Une seule entité dérive-t-elle toujours d'une seule capacité ?
- Résolu
- Réponse : Non. C'est entièrement au runtime de décider, en fonction de ses propres capacités de suivi et de la manière dont il souhaite représenter une entité détectée. La spécification ne prescrit aucune représentation particulière d'une entité spatiale, à l'exception des composants garantis d'une capacité donnée pour définir une attente minimale. Un environnement d'exécution peut être en mesure de fusionner des entités détectées par des fonctionnalités distinctes et de les représenter sous la forme d'une seule entité avec les composants garantis de toutes les fonctionnalités qui ont permis de l'identifier. Par exemple, les tables peuvent être détectées à la fois par une fonctionnalité de suivi des plans et une fonctionnalité de suivi des objets. Le suivi des plans fournit le composant
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTsur l'entité, tandis que le suivi des objets fournitXR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT. Un certain environnement d'exécution peut fournir le tableau sous la forme de deux entités distinctes, chacune avec son propre ensemble de composants garantis, tandis que certains environnements d'exécution peuvent ne fournir qu'une seule entité pour représenter le tableau, et avoir à la foisXR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTetXR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXTsur la même entité. Il est important de noter qu'une entité spatiale donnée ne peut comporter qu'un seul composant d'un type de composant donné . Par conséquent, si les données de composants produites par les différentes fonctionnalités sont en conflit pour une entité donnée, le runtime doit les représenter sous la forme de deux entités distinctes.
Historique des versions
Révision 1, 12/04/2024 (Nihav Jain, Google)
- Description initiale de l'extension