XR_EXT_spatial_entity
Name String
XR_EXT_spatial_entity
Erweiterungstyp
Instanzerweiterung
Registrierte Durchwahl
741
Revision
1
Ratification Status
Ratified
Erweiterungs- und Versionsabhängigkeiten
XR_EXT_future
Mitwirkende
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
Übersicht
Mit dieser Erweiterung werden die Konzepte und Grundlagen für das Szenenverständnis und die räumliche Orientierung in OpenXR eingeführt. Dadurch werden mehrere verwandte, aber unterschiedliche Funktionsbereiche vereinheitlicht, die gemäß dieser Erweiterung auf weitgehend einheitliche Weise aufgezählt, konfiguriert und interagiert werden. Da in dieser Erweiterung keine konkreten Definitionen für diese Funktionsbereiche enthalten sind, ist der formale Spezifikationstext eher abstrakt. Die in diesem Text zur Erweiterungsspezifikation enthaltenen Beispiele beziehen sich zu Veranschaulichungszwecken manchmal auf Funktionen, die in einer künftigen oder hypothetischen zugehörigen Erweiterung definiert sind, ohne diese zusätzlichen Funktionen von vornherein einzuschränken oder zu spezifizieren.
Die wichtigsten Teile dieser Erweiterung sind:
- Räumliche Entitäten : Die Funktionalität konzentriert sich auf Entitäten , die für sich genommen nur sehr wenige Funktionen bieten.
- Räumliche Komponenten : Mit diesen Entitäten sind Komponenten verknüpft, die Daten und Verhaltensweisen bereitstellen.
- Räumliche Komponententypen : Jede räumliche Komponente hat einen bestimmten Komponententyp und jede Entität hat höchstens eine Komponente eines bestimmten Komponententyps .
- Räumlicher Kontext : Alle Interaktionen mit räumlichen Entitäten finden nach einer Initialisierungs- und Konfigurationsphase in einem Kontext statt.
- Räumliche Funktionen : Die Bearbeitung räumlicher Entitäten wird weitgehend durch Funktionen ermöglicht. Eine Funktion ist eine Funktionseinheit, z. B. (ohne Einschränkung) anwendungsdefinierte Anker, Ebenenerkennung oder Bild-Tracking. Jede Funktion wird in der Regel in einer separaten Erweiterung definiert (wie üblich bei der Instanzerstellung aktiviert) und bei der Erstellung für einen bestimmten Kontext aktiviert.
- Jede Funktion ist mit einer Reihe von Komponententypen verknüpft, für die Komponenten für jede Entität vorhanden sind, die von dieser Funktion bereitgestellt wird. Die Erweiterung, die eine Funktion definiert, gibt an, welche Komponententypen für die Funktion obligatorisch sind („garantiert“). Dieselbe Erweiterung oder andere Erweiterungen können optionale Komponententypen angeben, die von einigen potenziellen Implementierungen bereitgestellt werden. Eine beliebige Anzahl von Funktionen kann Entitäten mit Komponenten eines bestimmten Komponententyps bereitstellen, die unabhängig von der Funktion, die sie erzeugt hat, einheitlich verwendet werden können.
- Räumliche Funktionen : Einige Funktionen müssen konfiguriert werden und werden daher durch Funktionsmerkmale parametrisiert.
Diese Erweiterung bietet einen Mechanismus zum Auflisten der Komponenten, die von jeder auf dem aktuellen System unterstützten Funktion bereitgestellt werden, sowohl der obligatorischen als auch aller optionalen Komponenten .
Da für einige Implementierungen möglicherweise unterschiedliche Grade der Parametrisierung für Fähigkeiten erforderlich sind, bietet diese Erweiterung einen Mechanismus zum Aufzählen der unterstützten Fähigkeitsfunktionen, die mit einer bestimmten Fähigkeit im aktuellen System verknüpft sind.
Diese Erweiterung definiert auch mehrere gängige Komponenten, die voraussichtlich in einer Vielzahl von Funktionen verwendet werden.
Räumliche Entität
Räumliche Entitäten sind Entitäten, die in einem Raum existieren und verschiedene zugehörige Daten haben, die in Komponenten organisiert sind. Sie können Folgendes sein:
- Physisch (z.B. ebene Oberflächen wie Wände und Böden, Objekte wie Stühle und Bücherregale usw.)
- Virtuell (z.B. Inhalte, die von einer anderen App oder einem anderen Nutzer platziert und geteilt werden)
- Von der App definiert (z. B. wenn eine App einen Bereich als „Wohnzimmer“ oder „Küche“ oder einen Punkt als Standort für den Fernseher markiert)
Dinge, die über das Aktionssystem verfügbar gemacht werden, wie Controller oder Blickrichtung, sind nicht als räumliche Entitäten gedacht.
Räumliche Entitäten in OpenXR werden als Entitäts-Komponenten-System modelliert. Jede räumliche Entität hat eine Reihe von Komponenten, die jeweils eindeutige Daten und Verhaltensweisen für diese Entität bereitstellen.
Räumliche Entitäten werden entweder durch ein XrSpatialEntityIdEXT-Atom oder ein XrSpatialEntityEXT-Handle dargestellt. Weitere Informationen dazu findest du im Abschnitt Darstellungen räumlicher Entitäten.
Räumliche Komponententypen
Eine räumliche Entität hat eine oder mehrere Komponenten, die Daten oder Verhaltensweisen für diese Entität bereitstellen. Unter Allgemeine Komponenten finden Sie einige allgemeine Komponenten, die durch diese Erweiterung definiert werden.
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_GEOMETRY_POINT_ANDROID = 1000803000,
XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_SCOPES_ANDROIDX1 = 1000808000,
XR_SPATIAL_COMPONENT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialComponentTypeEXT;
Die Aufzählung XrSpatialComponentTypeEXT gibt die verschiedenen Arten von Komponenten an, die die Laufzeit möglicherweise unterstützt.
Nicht alle aufgeführten Komponententypen werden von dieser Erweiterung allein bereitgestellt: Für einige müssen zusätzliche Erweiterungen bei der Instanzerstellung aktiviert werden, wie dokumentiert.
Die Enumeranten haben die folgenden Werte:
Enum-Beschreibung
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT
Komponente, die die 2D-Grenzen für eine räumliche Entität bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentBounded2DListEXT; die entsprechende Datenstruktur ist XrSpatialBounded2DDataEXT.
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT
Komponente, die die 3D-Grenzen für eine räumliche Entität bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentBounded3DListEXT, die entsprechende Datenstruktur XrBoxf.
XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT
Komponente, die die XrSpatialEntityIdEXT des übergeordneten Elements für eine räumliche Entität bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentParentListEXT. Die entsprechende Datenstruktur ist XrSpatialEntityIdEXT.
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT
Komponente, die ein 3D-Mesh für eine räumliche Entität bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentMesh3DListEXT. Die entsprechende Datenstruktur ist XrSpatialMeshDataEXT.
XR_SPATIAL_COMPONENT_TYPE_PLANE_ALIGNMENT_EXT
Komponente, die die Enum für die Ebenenausrichtung für eine räumliche Entität bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentPlaneAlignmentListEXT. Die entsprechende Datenstruktur ist XrSpatialPlaneAlignmentEXT (durch die Erweiterung XR_EXT_spatial_plane_tracking hinzugefügt).
XR_SPATIAL_COMPONENT_TYPE_MESH_2D_EXT
Komponente, die ein 2D-Mesh für eine räumliche Entität bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentMesh2DListEXT. Die entsprechende Datenstruktur ist XrSpatialMeshDataEXT (durch die Erweiterung XR_EXT_spatial_plane_tracking hinzugefügt).
XR_SPATIAL_COMPONENT_TYPE_POLYGON_2D_EXT
Komponente, die ein 2D-Begrenzungspolygon für eine räumliche Entität bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentPolygon2DListEXT. Die entsprechende Datenstruktur ist XrSpatialPolygon2DDataEXT (durch die Erweiterung XR_EXT_spatial_plane_tracking hinzugefügt).
XR_SPATIAL_COMPONENT_TYPE_PLANE_SEMANTIC_LABEL_EXT
Komponente, die ein semantisches Label für eine Ebene bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentPlaneSemanticLabelListEXT. Die entsprechende Datenstruktur ist XrSpatialPlaneSemanticLabelEXT (durch die Erweiterung XR_EXT_spatial_plane_tracking hinzugefügt).
XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT
Eine Komponente, die den Markertyp, die ID und den Standort beschreibt. Die entsprechende Listenstruktur ist XrSpatialComponentMarkerListEXT. Die entsprechende Datenstruktur ist XrSpatialMarkerDataEXT (durch die Erweiterung XR_EXT_spatial_marker_tracking hinzugefügt).
XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT
Komponente, die ein semantisches Label für eine Szene bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentObjectSemanticLabelListEXT. Die entsprechende Datenstruktur ist XrSpatialObjectSemanticLabelEXT . (Hinzugefügt durch die Erweiterung „XR_EXT_spatial_object_tracking“)
XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT
Komponente, die ein semantisches Label für eine Tastatur bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentKeyboardSemanticLabelListEXT. Die entsprechende Datenstruktur ist XrSpatialKeyboardSemanticLabelEXT (hinzugefügt durch die Erweiterung XR_EXT_spatial_object_tracking).
XR_SPATIAL_COMPONENT_TYPE_MOUSE_SEMANTIC_LABEL_EXT
Komponente, die ein semantisches Label für eine Maus bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentMouseSemanticLabelListEXT. Die entsprechende Datenstruktur ist XrSpatialMouseSemanticLabelEXT (hinzugefügt durch die Erweiterung XR_EXT_spatial_object_tracking).
XR_SPATIAL_COMPONENT_TYPE_ANCHOR_EXT
Komponente, die den Standort für einen Anker bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentAnchorListEXT. Die entsprechende Datenstruktur ist XrPosef (durch die Erweiterung XR_EXT_spatial_anchor hinzugefügt).
XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_EXT
Komponente, die die persistente UUID für eine räumliche Entität bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentPersistenceListEXT. Die entsprechende Datenstruktur ist XrSpatialPersistenceDataEXT (durch die Erweiterung XR_EXT_spatial_persistence hinzugefügt).
XR_SPATIAL_COMPONENT_TYPE_IMAGE_2D_EXT
Eine Komponente, die den planaren Bildtyp beschreibt. Die entsprechende Listenstruktur ist XrSpatialComponentImage2DListEXT, die entsprechende Datenstruktur XrSpatialImageSizeEXT . (Hinzugefügt durch die Erweiterung „XR_EXT_spatial_image_tracking“)
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT
Komponente, die die Normalen für das 3D-Mesh eines räumlichen Elements bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentMesh3DNormalsListEXT. Die entsprechende Datenstruktur ist XrSpatialBufferEXT (durch die Erweiterung XR_EXT_spatial_mesh_tracking hinzugefügt).
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT
Komponente, die die semantischen Labels pro Eckpunkt für das 3D-Mesh eines räumlichen Elements bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentMesh3DVertexSemanticLabelsListEXT. Die entsprechende Datenstruktur ist XrSpatialBufferEXT. Die Daten im Zwischenspeicher werden XrSpatialMeshSemanticLabelEXT zugeordnet (durch die Erweiterung XR_EXT_spatial_mesh_tracking hinzugefügt).
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT
Komponente, die die semantischen Labels pro Dreiecksfläche für das 3D-Mesh eines räumlichen Elements bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT. Die entsprechende Datenstruktur ist XrSpatialBufferEXT. Die Daten im Zwischenspeicher werden XrSpatialMeshSemanticLabelEXT zugeordnet (hinzugefügt durch die Erweiterung XR_EXT_spatial_mesh_tracking).
XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_ANDROID
Komponente, die ein semantisches Label für ein Objekt bereitstellt; die entsprechende Listenstruktur ist XrSpatialComponentObjectSemanticLabelListANDROID; die entsprechende Datenstruktur ist XrSpatialObjectSemanticLabelANDROID (hinzugefügt durch die Erweiterung XR_ANDROID_spatial_object_tracking)
XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID
Komponente, die die Position eines Raycast-Treffers auf einer Entität angibt. Die entsprechende Listenstruktur ist XrSpatialComponentRaycastResultListANDROID. Die entsprechende Datenstruktur ist XrSpatialRaycastResultDataANDROID (durch die Erweiterung XR_ANDROID_spatial_discovery_raycast hinzugefügt).
XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID
Komponente, die die Entitäts-ID der Entität bereitstellt, die die angehängte Entität enthält. Die entsprechende Listenstruktur ist XrSpatialComponentSubsumedByListANDROID. Die entsprechende Datenstruktur ist XrSpatialEntityIdEXT (durch die Erweiterung XR_ANDROID_spatial_component_subsumed_by hinzugefügt).
XR_SPATIAL_COMPONENT_TYPE_ROOM_ANDROIDSYS
Komponente, die die Abmessungen und den Raumtyp eines Shoebox-Modells bereitstellt; die entsprechende Listenstruktur ist XrSpatialComponentRoomListANDROIDSYS; die entsprechende Datenstruktur ist XrSpatialRoomDataANDROIDSYS (durch die XR_ANDROIDSYS_spatial_room_tracking-Erweiterung hinzugefügt)
XR_SPATIAL_COMPONENT_TYPE_MATERIAL_TYPE_ANDROIDSYS
Komponente, die den Materialtyp einer Grenzfläche bereitstellt; die entsprechende Listenstruktur ist XrSpatialComponentMaterialTypeListANDROIDSYS; die entsprechende Datenstruktur ist XrSpatialMaterialTypeANDROIDSYS (hinzugefügt durch die Erweiterung XR_ANDROIDSYS_spatial_room_tracking)
XR_SPATIAL_COMPONENT_TYPE_CONFIDENCE_ANDROIDSYS
Komponente, die die Konfidenz eines trackbaren Objekts angibt. Die entsprechende Listenstruktur ist XrSpatialComponentConfidenceListANDROIDSYS. Die entsprechende Datenstruktur ist float (hinzugefügt durch die Erweiterung XR_ANDROIDSYS_spatial_room_tracking).
XR_SPATIAL_COMPONENT_TYPE_ROOM_EMPTINESS_ANDROIDSYS
Komponente, die die Leere eines Raums angibt; die entsprechende Listenstruktur ist XrSpatialComponentRoomEmptinessListANDROIDSYS; die entsprechende Datenstruktur ist float (durch die Erweiterung XR_ANDROIDSYS_spatial_room_tracking hinzugefügt)
XR_SPATIAL_COMPONENT_TYPE_OCCUPANCY_GRID_ANDROIDX1
Komponente, die Informationen zum Belegungsraster der angehängten Entität bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentOccupancyGridListANDROIDX1. Die entsprechende Datenstruktur ist XrSpatialOccupancyGridDataANDROIDX1 (hinzugefügt durch die Erweiterung XR_ANDROIDX1_spatial_occupancy_grid).
XR_SPATIAL_COMPONENT_TYPE_ANNOTATION_QUAD_ANDROID
Eine Komponente, die eine Quad-Annotation beschreibt. Die entsprechende Listenstruktur ist XrSpatialComponentAnnotationQuadListANDROID. Die entsprechende Datenstruktur ist XrSpatialAnnotationQuadDataANDROID (durch die Erweiterung XR_ANDROID_spatial_annotation_tracking hinzugefügt).
XR_SPATIAL_COMPONENT_TYPE_STREETSCAPE_GEOMETRY_METADATA_ANDROIDX2
Komponente, die die Metadaten für eine Streetscape-Geometrie bereitstellt; die entsprechende Listenstruktur ist XrSpatialComponentStreetscapeGeometryMetadataListANDROIDX2; die entsprechende Datenstruktur ist XrSpatialStreetscapeGeometryMetadataANDROIDX2 (durch die Erweiterung XR_ANDROIDX2_geospatial_streetscape hinzugefügt)
XR_SPATIAL_COMPONENT_TYPE_GEOMETRY_POINT_ANDROID
Komponente, die eine Entität als Geometriepunkt identifiziert. Für diesen Komponententyp gibt es keine entsprechende Liste oder Datenstruktur. Das Vorhandensein dieser Komponente zeigt lediglich an, dass eine Entität an einen Anker angehängt werden kann. (Hinzugefügt durch die Erweiterung „XR_ANDROID_spatial_geometry_point“)
XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_SCOPES_ANDROIDX1
Eine Komponente, die die Persistenzbereiche beschreibt, in denen die Entität beibehalten wird. Wenn die Laufzeit XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_EXT unterstützt, muss sie auch diese Komponente unterstützen. Die entsprechende Datenstruktur ist XrSpatialBufferEXT . Die entsprechende Listenstruktur ist XrSpatialComponentPersistenceScopeDataListANDROIDX1 . (Hinzugefügt durch die Erweiterung „XR_ANDROIDX1_spatial_anchor_cloud_sharing“)
Räumliche Funktionen und Einrichtung
Räumliche Funktionen definieren die Fähigkeiten einer Laufzeit, Entitäten zu erkennen, die einen garantierten Satz von Komponenten enthalten. Anwendungen aktivieren die Komponenten einer räumlichen Funktion, wenn der XrSpatialContextEXT erstellt wird. Die Laufzeit muss dann nur die aktivierten Komponenten für erkannte Entitäten bereitstellen. Wenn eine Laufzeit beispielsweise meldet, dass eine der Komponenten für eine bestimmte Funktion „semantische Labels“ ist, bedeutet das, dass die Anwendung semantische Labels über die Konfiguration für diese Funktion aktivieren kann und die Laufzeit die Komponente für semantische Labels nur bereitstellen muss, wenn sie konfiguriert ist.
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;
Die Aufzählung XrSpatialCapabilityEXT gibt die verschiedenen Arten von Funktionen an, die die Laufzeit möglicherweise unterstützt.
Die Enumeranten haben die folgenden Werte:
Enum-Beschreibung
XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT
Flugzeug-Tracking (durch die Erweiterung „XR_EXT_spatial_plane_tracking“ hinzugefügt)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT
Funktion zum Erkennen und Verfolgen von QR-Codes. (Hinzugefügt durch die Erweiterung „XR_EXT_spatial_marker_tracking“)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE_EXT
Funktion zum Erkennen und Verfolgen von Micro-QR-Codes. (Hinzugefügt durch die Erweiterung „XR_EXT_spatial_marker_tracking“)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_EXT
Fähigkeit, Aruco-Marker zu erkennen und zu verfolgen. (Hinzugefügt durch die Erweiterung „XR_EXT_spatial_marker_tracking“)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXT
Fähigkeit, AprilTags zu erkennen und zu verfolgen. (Hinzugefügt durch die Erweiterung „XR_EXT_spatial_marker_tracking“)
XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT
Objekt-Tracking (durch die XR_EXT_spatial_object_tracking-Erweiterung hinzugefügt)
XR_SPATIAL_CAPABILITY_ANCHOR_EXT
Möglichkeit, räumliche Anker zu erstellen (durch die XR_EXT_spatial_anchor-Erweiterung hinzugefügt)
XR_SPATIAL_CAPABILITY_IMAGE_TRACKING_EXT
Fähigkeit, planare Referenzbilder zu erkennen und zu verfolgen. (Hinzugefügt durch die Erweiterung „XR_EXT_spatial_image_tracking“)
XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT
Möglichkeit, das Mesh-Netzwerk einer Umgebung zu verfolgen. (Hinzugefügt durch die Erweiterung „XR_EXT_spatial_mesh_tracking“)
XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_ANDROID
Objekt-Tracking (durch die XR_ANDROID_spatial_object_tracking-Erweiterung hinzugefügt)
XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID
Raycast gegen Tiefenpuffer (durch die XR_ANDROID_spatial_discovery_raycast-Erweiterung hinzugefügt)
XR_SPATIAL_CAPABILITY_ROOM_TRACKING_ANDROIDSYS
Möglichkeit, einen Raum zu verfolgen (durch die Erweiterung „XR_ANDROIDSYS_spatial_room_tracking“ hinzugefügt)
XR_SPATIAL_CAPABILITY_ROOM_BOUNDARY_TRACKING_ANDROIDSYS
Fähigkeit, eine Raumgrenze zu verfolgen (hinzugefügt durch die Erweiterung XR_ANDROIDSYS_spatial_room_tracking)
XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID
Anmerkungs-Tracking (von der Erweiterung „XR_ANDROID_spatial_annotation_tracking“ hinzugefügt)
XR_SPATIAL_CAPABILITY_STREETSCAPE_GEOMETRY_ANDROIDX2
Streetscape Geometry (durch die XR_ANDROIDX2_geospatial_streetscape-Erweiterung hinzugefügt)
Die Funktion xrEnumerateSpatialCapabilitiesEXT ist so definiert:
XrResult xrEnumerateSpatialCapabilitiesEXT(
XrInstance instance,
XrSystemId systemId,
uint32_t capabilityCapacityInput,
uint32_t* capabilityCountOutput,
XrSpatialCapabilityEXT* capabilities);
Parameterbeschreibungen
instanceist ein Handle für eine XrInstance .systemIdist dieXrSystemId, deren räumliche Funktionen aufgezählt werden.capabilityCapacityInputist die Kapazität descapabilities-Arrays oder 0, um eine Anfrage zum Abrufen der erforderlichen Kapazität anzugeben.capabilityCountOutputist die Anzahl der Funktionen oder die erforderliche Kapazität, fallscapabilityCapacityInputnicht ausreicht.capabilitiesist ein Array von XrSpatialCapabilityEXT . Er kannNULLsein, wenncapabilityCapacityInput0 ist.- Eine detaillierte Beschreibung zum Abrufen der erforderlichen
capabilities-Größe finden Sie im Abschnitt Parameter für die Puffergröße.
Die Anwendung kann die Liste der räumlichen Funktionen, die von einem bestimmten XrSystemId unterstützt werden, mit xrEnumerateSpatialCapabilitiesEXT auflisten.
Die Laufzeit darf die räumlichen Funktionen, deren Erweiterung nicht für instance aktiviert ist, nicht aufzählen.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert werden, bevor xrEnumerateSpatialCapabilitiesEXT aufgerufen wird. -
instancemuss ein gültiges XrInstance-Handle sein -
capabilityCountOutputmuss ein Zeiger auf einenuint32_t-Wert sein - Wenn
capabilityCapacityInputnicht0ist, musscapabilitiesein Zeiger auf ein Array voncapabilityCapacityInputXrSpatialCapabilityEXT-Werten sein
Rückgabecodes
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
Die Funktion xrEnumerateSpatialCapabilityComponentTypesEXT ist so definiert:
XrResult xrEnumerateSpatialCapabilityComponentTypesEXT(
XrInstance instance,
XrSystemId systemId,
XrSpatialCapabilityEXT capability,
XrSpatialCapabilityComponentTypesEXT* capabilityComponents);
Parameterbeschreibungen
instanceist ein Handle für eine XrInstance .systemIdist dieXrSystemId, deren räumliche Fähigkeitskomponenten aufgezählt werden.capabilityist die XrSpatialCapabilityEXT, für die die Komponenten aufgezählt werden.capabilityComponentsist ein Zeiger auf einen XrSpatialCapabilityComponentTypesEXT, eine Eingabe-/Ausgabestruktur, in der ein von der Anwendung zugewiesenes Array ausgefüllt wird.
Diese Funktion listet die Komponententypen auf, die die angegebene Funktion für ihre Entitäten im System gemäß der Konfiguration bereitstellt.
Die Anwendung kann die in XrSpatialCapabilityComponentTypesEXT :: componentTypes aufgeführten Komponententypen verwenden, um alle Komponenten zu ermitteln, die die systemId für capability unterstützt. Sie kann diese Liste verwenden, um zu bestimmen, was eine gültige Konfiguration für capability ist, wenn ein XrSpatialContextEXT dafür erstellt wird.
Die Laufzeit muss XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT zurückgeben, wenn capability nicht von xrEnumerateSpatialCapabilitiesEXT aufgezählt wird.
Die Laufzeit darf die räumlichen Komponententypen, deren Erweiterung nicht für instance aktiviert ist, nicht aufzählen.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert werden, bevor xrEnumerateSpatialCapabilityComponentTypesEXT aufgerufen wird. -
instancemuss ein gültiges XrInstance-Handle sein -
capabilitymuss ein gültiger XrSpatialCapabilityEXT-Wert sein -
capabilityComponentsmuss ein Zeiger auf eine XrSpatialCapabilityComponentTypesEXT-Struktur sein.
Rückgabecodes
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
Die Struktur XrSpatialCapabilityComponentTypesEXT ist so definiert:
typedef struct XrSpatialCapabilityComponentTypesEXT {
XrStructureType type;
void* next;
uint32_t componentTypeCapacityInput;
uint32_t componentTypeCountOutput;
XrSpatialComponentTypeEXT* componentTypes;
} XrSpatialCapabilityComponentTypesEXT;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind weder in OpenXR noch in dieser Erweiterung definiert.componentTypeCapacityInputist die Kapazität des Arrays oder 0, um eine Anfrage zum Abrufen der erforderlichen Kapazität anzugeben.componentTypeCountOutputist die Anzahl der Komponententypen oder die erforderliche Kapazität, fallscomponentTypeCapacityInputnicht ausreicht.componentTypesist ein Array von XrSpatialComponentTypeEXT . Er kannNULLsein, wenncomponentTypeCapacityInput0 ist.- Eine detaillierte Beschreibung zum Abrufen der erforderlichen
componentTypes-Größe finden Sie im Abschnitt Parameter für die Puffergröße.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert sein, bevor XrSpatialCapabilityComponentTypesEXT verwendet werden kann. -
typemussXR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXTsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein. - Wenn
componentTypeCapacityInputnicht0ist,componentTypesmuss ein Zeiger auf ein Array voncomponentTypeCapacityInputXrSpatialComponentTypeEXT-Werten sein.
Funktionen für räumliche Fähigkeiten
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;
Einige Funktionen haben Parameter, die der Anwendung zur Verfügung gestellt werden, um zu konfigurieren, wie die Komponentendaten von der Laufzeit berechnet werden. Diese Dimensionen der Parametrisierung/Konfigurierbarkeit werden als Capability-Funktionen bezeichnet. Beispiel: Für eine Bild-Tracking-Funktion kann eine Laufzeit eine Funktion unterstützen, mit der die Anwendung angeben kann, ob die getrackten Bilder stationär sind oder nicht.
Wenn diese Informationen der Laufzeit über eine Konfigurationsstruktur bereitgestellt werden, darf sich die Gruppe der Komponententypen, die in den zugehörigen Entitäten vorhanden sind, z.B. im getrackten Bild, nicht ändern. Die Laufzeit kann jedoch beispielsweise die Tracking-Funktionen der Bild-Tracking-Funktion optimieren und so die Anwendung verbessern.
Solche Funktionen werden durch XrSpatialCapabilityFeatureEXT dargestellt und von der Anwendung mit xrEnumerateSpatialCapabilityFeaturesEXT aufgezählt.
Jedes Funktionsmerkmal hat eine entsprechende Konfigurationsstruktur, um es zu aktivieren. Solche Konfigurationsstrukturen müssen mit XrSpatialCapabilityConfigurationBaseHeaderEXT :: next der entsprechenden Funktion verkettet werden.
Die Enumeranten haben die folgenden Werte:
Enum-Beschreibung
XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_FIXED_SIZE_MARKERS_EXT
Funktion, mit der Anwendungen die Größe der Markierungen angeben können. Die entsprechende Konfigurationsstruktur ist XrSpatialMarkerSizeEXT (hinzugefügt durch die Erweiterung XR_EXT_spatial_marker_tracking).
XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_STATIC_MARKERS_EXT
Funktion, mit der Anwendungen angeben können, ob Markierungen statisch sind. Die entsprechende Konfigurationsstruktur ist XrSpatialMarkerStaticOptimizationEXT (hinzugefügt durch die Erweiterung XR_EXT_spatial_marker_tracking).
XR_SPATIAL_CAPABILITY_FEATURE_OBJECT_SEMANTIC_LABEL_SUBSET_EXT
Spatial-Funktion, mit der Anwendungen eine Teilmenge von Labels aus XrSpatialObjectSemanticLabelEXT angeben können, die von der Laufzeit verfolgt werden sollen. Die entsprechende Konfigurationsstruktur ist XrSpatialFeatureObjectSemanticLabelSubsetEXT . (Hinzugefügt durch die Erweiterung „XR_EXT_spatial_object_tracking“)
XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID
Die Laufzeit unterstützt den Filter XrSpatialBoundsSpherefANDROID für XrSpatialDiscoverySnapshotCreateInfoEXT. Hierfür muss beim Erstellen des räumlichen Kontexts keine Konfigurationsstruktur angegeben werden. (Hinzugefügt durch die Erweiterung „XR_ANDROID_spatial_discovery_bounds“)
XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID
Die Laufzeit unterstützt den Filter XrSpatialBoundsBoxfANDROID für XrSpatialDiscoverySnapshotCreateInfoEXT. Hierfür muss beim Erstellen des räumlichen Kontexts keine Konfigurationsstruktur angegeben werden. (Hinzugefügt durch die Erweiterung „XR_ANDROID_spatial_discovery_bounds“)
XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID
Die Laufzeit unterstützt den Filter XrSpatialBoundsFrustumfANDROID für XrSpatialDiscoverySnapshotCreateInfoEXT. Hierfür muss beim Erstellen des räumlichen Kontexts keine Konfigurationsstruktur einbezogen werden. (Hinzugefügt durch die Erweiterung „XR_ANDROID_spatial_discovery_bounds“)
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_AUTOMATIC_SIZE_IMAGES_EXT
Die Laufzeit unterstützt die automatische Ableitung der physischen Größe erkannter und verfolgter Bilder. Die entsprechende Konfigurationsstruktur ist XrSpatialImageSizeEXT (hinzugefügt durch die Erweiterung XR_EXT_spatial_image_tracking).
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_STATIC_IMAGES_EXT
Die Laufzeit unterstützt XrSpatialImageStaticOptimizationEXT . Die entsprechende Konfigurationsstruktur ist XrSpatialImageStaticOptimizationEXT . (Hinzugefügt durch die Erweiterung „XR_EXT_spatial_image_tracking“)
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_FIXED_SIZE_IMAGES_EXT
Die Laufzeit unterstützt XrSpatialImageSizeEXT . Die entsprechende Konfigurationsstruktur ist XrSpatialImageSizeEXT (hinzugefügt durch die Erweiterung XR_EXT_spatial_image_tracking).
XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT
Funktion zum Erstellen eines wasserdichten Mesh-Netzwerks der Umgebung. Die entsprechende Konfigurationsstruktur ist XrSpatialFeatureTrackWatertightMeshEXT . (Hinzugefügt durch die Erweiterung „XR_EXT_spatial_mesh_tracking“)
Die Funktion xrEnumerateSpatialCapabilityFeaturesEXT ist so definiert:
XrResult xrEnumerateSpatialCapabilityFeaturesEXT(
XrInstance instance,
XrSystemId systemId,
XrSpatialCapabilityEXT capability,
uint32_t capabilityFeatureCapacityInput,
uint32_t* capabilityFeatureCountOutput,
XrSpatialCapabilityFeatureEXT* capabilityFeatures);
Parameterbeschreibungen
instanceist ein Handle für eine XrInstance .systemIdist dieXrSystemId, deren räumliche Funktionen aufgezählt werden.capabilityist die XrSpatialCapabilityEXT, für die die Funktionen aufgelistet werden.capabilityFeatureCapacityInputist die Kapazität des Arrays oder 0, um eine Anfrage zum Abrufen der erforderlichen Kapazität anzugeben.capabilityFeatureCountOutputist die Anzahl der Features oder die erforderliche Kapazität, fallscapabilityFeatureCapacityInputnicht ausreicht.capabilityFeaturesist ein Array von XrSpatialCapabilityFeatureEXT . Er kannNULLsein, wenncapabilityFeatureCapacityInput0 ist.- Eine detaillierte Beschreibung zum Abrufen der erforderlichen
capabilityFeatures-Größe finden Sie im Abschnitt Parameter für die Puffergröße.
Die Anwendung ermittelt die von einem bestimmten System für eine XrSpatialCapabilityEXT unterstützten Funktionen mithilfe von xrEnumerateSpatialCapabilityFeaturesEXT .
Bei Funktionen, die Features verfügbar machen, wählt die Anwendung das oder die zu aktivierenden Features aus und stellt die entsprechende Konfigurationsstruktur in der nächsten Kette der Funktionskonfigurationsstrukturen in XrSpatialContextCreateInfoEXT :: capabilityConfigs bereit.
Wenn capability keine von xrEnumerateSpatialCapabilitiesEXT aufgeführte Funktion ist, muss die Laufzeit XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT zurückgeben.
Die Laufzeit darf nicht die Funktionen für räumliche Fähigkeiten aufzählen, deren Erweiterung nicht für instance aktiviert ist.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert werden, bevor xrEnumerateSpatialCapabilityFeaturesEXT aufgerufen wird. -
instancemuss ein gültiges XrInstance-Handle sein -
capabilitymuss ein gültiger XrSpatialCapabilityEXT-Wert sein -
capabilityFeatureCountOutputmuss ein Zeiger auf einenuint32_t-Wert sein - Wenn
capabilityFeatureCapacityInputnicht0ist,capabilityFeaturesmuss ein Zeiger auf ein Array voncapabilityFeatureCapacityInputXrSpatialCapabilityFeatureEXT-Werten sein.
Rückgabecodes
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
Räumlicher Kontext
Räumlichen Kontext erstellen
XR_DEFINE_HANDLE(XrSpatialContextEXT)
Das XrSpatialContextEXT-Handle stellt die Ressourcen zum Erkennen und Aktualisieren einer Reihe von räumlichen Entitäten in der Umgebung des Nutzers dar. Die Anwendung kann dieses Handle verwenden, um räumliche Entitäten mithilfe anderer Funktionen in dieser Erweiterung zu finden und zu aktualisieren.
Die Funktion xrCreateSpatialContextAsyncEXT ist so definiert:
XrResult xrCreateSpatialContextAsyncEXT(
XrSession session,
const XrSpatialContextCreateInfoEXT* createInfo,
XrFutureEXT* future);
Parameterbeschreibungen
sessionist eine XrSession, in der der räumliche Kontext aktiv ist.createInfoist die XrSpatialContextCreateInfoEXT, mit der die Parameter für den räumlichen Kontext angegeben werden.futureist ein Zeiger auf einXrFutureEXT.
Die Anwendung kann ein XrSpatialContextEXT-Handle so erstellen:
- Bereitstellung von von XrSpatialCapabilityConfigurationBaseHeaderEXT abgeleiteten Strukturen in XrSpatialContextCreateInfoEXT ::
capabilityConfigs, um Funktionen und Komponenten für diese Funktionen zu aktivieren. - Konfiguration der Funktionen selbst mit den entsprechenden Konfigurationsstrukturen des XrSpatialCapabilityFeatureEXT .
Die Laufzeit muss XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT zurückgeben, wenn XrSpatialContextCreateInfoEXT ::capabilityConfigCount 0 ist. Ein Handle für den räumlichen Kontext benötigt mindestens eine Funktion.
Die Laufzeit muss XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT zurückgeben, wenn eine Funktion im Array XrSpatialContextCreateInfoEXT :: capabilityConfigs nicht von xrEnumerateSpatialCapabilitiesEXT aufgezählt wird.
Die Laufzeit muss XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT zurückgeben, wenn ein XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponentCount in XrSpatialContextCreateInfoEXT :: capabilityConfigs 0 ist. Eine Funktionskonfiguration ist ohne eine Liste von Komponententypen, die für diese Funktion aktiviert werden sollen, unvollständig.
Die Laufzeit muss XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT zurückgeben, wenn ein in XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents aufgeführter Komponententyp nicht für XrSpatialCapabilityConfigurationBaseHeaderEXT :: capability in xrEnumerateSpatialCapabilityComponentTypesEXT aufgezählt wird.
Wenn eine der Strukturen in der nächsten Kette von XrSpatialContextCreateInfoEXT :: capabilityConfigs einem XrSpatialCapabilityFeatureEXT entspricht, das für diese Funktion in xrEnumerateSpatialCapabilityFeaturesEXT nicht aufgeführt ist, muss die Laufzeit diese XrSpatialCapabilityFeatureEXT-Struktur ignorieren.
Die Laufzeit muss XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT zurückgeben, wenn XrSpatialContextCreateInfoEXT :: capabilityConfigs mehrere Strukturen mit demselben XrSpatialCapabilityConfigurationBaseHeaderEXT :: capability enthält.
Um eine optimale Nutzung der Systemressourcen zu gewährleisten, kann die Laufzeit die im Array XrSpatialContextCreateInfoEXT bereitgestellten Konfigurationen verwenden, um sich auf eingehende räumliche Anfragen vorzubereiten. Beispielsweise kann eine Laufzeit, die die Funktion zur Ebenenerkennung unterstützt, ihre Pipeline zur Ebenenerkennung nur dann starten, wenn die Anwendung ein Handle für den räumlichen Kontext erstellt, das die Funktion zur Ebenenerkennung enthält. Wenn die konfigurierten Funktionen eine lange Aufwärmzeit haben, können Aufrufe von xrCreateSpatialDiscoverySnapshotAsyncEXT möglicherweise zu einem leeren Snapshot führen. Die Anwendung kann auf XrEventDataSpatialDiscoveryRecommendedEXT warten, bevor sie xrCreateSpatialDiscoverySnapshotAsyncEXT verwendet, um sicherzustellen, dass die zugrunde liegenden Tracking-Dienste bereit sind.
Wenn eine Laufzeit ein Berechtigungssystem erzwingt, um den Zugriff der Anwendung auf die räumlichen Funktionen zu steuern, die für den XrSpatialContextEXT konfiguriert werden, muss die Laufzeit XR_ERROR_PERMISSION_INSUFFICIENT zurückgeben, wenn diese Berechtigungen der Anwendung nicht gewährt wurden.
Diese Funktion startet einen asynchronen Vorgang und erstellt ein entsprechendes XrFutureEXT , das mit xrPollFutureEXT und zugehörigen Funktionen verwendet werden kann. Der Rückgabewert dieser Funktion gibt nur an, ob die Parameter für die Planung des asynchronen Vorgangs akzeptabel waren. Die entsprechende Abschlussfunktion ist xrCreateSpatialContextCompleteEXT. Sie kann verwendet werden, wenn sich ein Future aus dieser Funktion im Status READY befindet. Die Ausgaben werden von dieser Funktion in der Abschlussstruktur XrCreateSpatialContextCompletionEXT ausgegeben.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert werden, bevor xrCreateSpatialContextAsyncEXT aufgerufen wird. -
sessionmuss ein gültiges XrSession-Handle sein -
createInfomuss ein Zeiger auf eine gültige XrSpatialContextCreateInfoEXT-Struktur sein -
futuremuss ein Zeiger auf einenXrFutureEXT-Wert sein
Rückgabecodes
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_FAILUREXR_ERROR_TIME_INVALID(wennXR_ANDROID_spatial_annotation_trackingaktiviert ist)
Die Struktur XrSpatialContextCreateInfoEXT ist so definiert:
typedef struct XrSpatialContextCreateInfoEXT {
XrStructureType type;
const void* next;
uint32_t capabilityConfigCount;
const XrSpatialCapabilityConfigurationBaseHeaderEXT* const* capabilityConfigs;
} XrSpatialContextCreateInfoEXT;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind weder in OpenXR noch in dieser Erweiterung definiert.capabilityConfigCountist einuint32_t, der die Anzahl der Elemente im ArraycapabilityConfigsbeschreibt.capabilityConfigsist ein Zeiger auf ein Array von XrSpatialCapabilityConfigurationBaseHeaderEXT-Zeigern.
Die Struktur XrSpatialContextCreateInfoEXT beschreibt die Informationen zum Erstellen eines XrSpatialContextEXT-Handles.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert werden, bevor XrSpatialContextCreateInfoEXT verwendet werden kann. -
typemussXR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXTsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein. Siehe auch: XrSpatialContextPersistenceConfigEXT -
capabilityConfigsmuss ein Zeiger auf ein Array voncapabilityConfigCountgültigen XrSpatialCapabilityConfigurationBaseHeaderEXT-basierten Strukturen sein. Siehe auch: XrSpatialCapabilityConfigurationAnchorEXT , XrSpatialCapabilityConfigurationAnnotationTrackingANDROID , XrSpatialCapabilityConfigurationAprilTagEXT , XrSpatialCapabilityConfigurationArucoMarkerEXT , XrSpatialCapabilityConfigurationDepthRaycastANDROID , XrSpatialCapabilityConfigurationImageTrackingEXT , XrSpatialCapabilityConfigurationMeshTrackingEXT , XrSpatialCapabilityConfigurationMicroQrCodeEXT , XrSpatialCapabilityConfigurationObjectTrackingANDROID , XrSpatialCapabilityConfigurationObjectTrackingEXT , XrSpatialCapabilityConfigurationPlaneTrackingEXT , XrSpatialCapabilityConfigurationQrCodeEXT , XrSpatialCapabilityConfigurationRoomBoundaryTrackingANDROIDSYS , XrSpatialCapabilityConfigurationRoomTrackingANDROIDSYS , XrSpatialCapabilityConfigurationStreetscapeGeometryANDROIDX2 - Der Parameter
capabilityConfigCountmuss größer als0sein.
Die Struktur XrSpatialCapabilityConfigurationBaseHeaderEXT ist so definiert:
typedef struct XrSpatialCapabilityConfigurationBaseHeaderEXT {
XrStructureType type;
const void* next;
XrSpatialCapabilityEXT capability;
uint32_t enabledComponentCount;
const XrSpatialComponentTypeEXT* enabledComponents;
} XrSpatialCapabilityConfigurationBaseHeaderEXT;
Diese Struktur wird nicht direkt in der API verwendet. Stattdessen können ihre untergeordneten Strukturen mit XrSpatialContextCreateInfoEXT verwendet werden, um räumliche Funktionen zu konfigurieren.
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette.capabilityist ein XrSpatialCapabilityEXT .enabledComponentCountist einuint32_t, der die Anzahl der Elemente im ArrayenabledComponentsbeschreibt.enabledComponentsist ein Zeiger auf ein Array von XrSpatialComponentTypeEXT .
Die Laufzeit muss XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT zurückgeben, wenn capability nicht von xrEnumerateSpatialCapabilitiesEXT aufgezählt wird. Die Laufzeit muss XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT zurückgeben, wenn ein in enabledComponents aufgeführter Komponententyp nicht für capability in xrEnumerateSpatialCapabilityComponentTypesEXT aufgeführt ist.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert sein, bevor XrSpatialCapabilityConfigurationBaseHeaderEXT verwendet werden kann. -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein. -
capabilitymuss ein gültiger XrSpatialCapabilityEXT-Wert sein -
enabledComponentsmuss ein Zeiger auf ein Array mitenabledComponentCountgültigen XrSpatialComponentTypeEXT-Werten sein. - Der Parameter
enabledComponentCountmuss größer als0sein.
Die Funktion xrCreateSpatialContextCompleteEXT ist so definiert:
XrResult xrCreateSpatialContextCompleteEXT(
XrSession session,
XrFutureEXT future,
XrCreateSpatialContextCompletionEXT* completion);
Parameterbeschreibungen
sessionist die XrSession, die zuvor an xrCreateSpatialContextAsyncEXT ::sessionübergeben wurde.futureist der von xrCreateSpatialContextAsyncEXT empfangeneXrFutureEXT.completionist ein Zeiger auf ein XrCreateSpatialContextCompletionEXT .
xrCreateSpatialContextCompleteEXT schließt den asynchronen Vorgang ab, der von xrCreateSpatialContextAsyncEXT gestartet wurde. Die Laufzeit muss XR_ERROR_FUTURE_PENDING_EXT zurückgeben, wenn future nicht im Status „Bereit“ ist. Die Laufzeit muss XR_ERROR_FUTURE_INVALID_EXT zurückgeben, wenn future bereits abgeschlossen oder abgebrochen wurde.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert sein, bevor xrCreateSpatialContextCompleteEXT aufgerufen wird. -
sessionmuss ein gültiges XrSession-Handle sein -
completionmuss ein Zeiger auf eine XrCreateSpatialContextCompletionEXT-Struktur sein.
Rückgabecodes
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
Die Struktur XrCreateSpatialContextCompletionEXT ist so definiert:
typedef struct XrCreateSpatialContextCompletionEXT {
XrStructureType type;
void* next;
XrResult futureResult;
XrSpatialContextEXT spatialContext;
} XrCreateSpatialContextCompletionEXT;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette.futureResultist das XrResult des Vorgangs zum Erstellen des räumlichen Kontexts.spatialContextist ein XrSpatialContextEXT, der mit den Daten und der Konfiguration in xrCreateSpatialContextAsyncEXT ::createInfoerstellt wurde.
Zukünftige Rückgabecodes
futureResult-Werte:
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
Wenn futureResult ein Erfolgscode ist, muss spatialContext gültig sein. Wenn spatialContext gültig ist, bleibt es nur innerhalb des Lebenszyklus von xrCreateSpatialContextAsyncEXT :: session gültig oder bis die Anwendung spatialContext mit xrDestroySpatialContextEXT zerstört, je nachdem, was zuerst eintritt.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert sein, bevor XrCreateSpatialContextCompletionEXT verwendet werden kann. -
typemussXR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXTsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein. -
futureResultmuss ein gültiger XrResult-Wert sein. - Wenn
spatialContextnicht XR_NULL_HANDLE ist, mussspatialContextein gültiges XrSpatialContextEXT-Handle sein.
Räumlichen Kontext zerstören
Die Funktion xrDestroySpatialContextEXT ist so definiert:
XrResult xrDestroySpatialContextEXT(
XrSpatialContextEXT spatialContext);
Parameterbeschreibungen
spatialContextist ein XrSpatialContextEXT, der zuvor von xrCreateSpatialContextAsyncEXT erstellt wurde.
Die Anwendung kann die Funktion xrDestroySpatialContextEXT aufrufen, um das Handle spatialContext und die zugrunde liegenden Ressourcen freizugeben, wenn die Aufgaben zur Erkennung und Aktualisierung von räumlichen Entitäten abgeschlossen sind. Wenn es keinen anderen gültigen XrSpatialContextEXT gibt, der mit denselben räumlichen Funktionen wie spatialContext erstellt wurde, dient dieser Aufruf als Vorschlag für die Laufzeit, die für diese Funktionen erforderlichen Tracking-Dienste zu deaktivieren, um Systemressourcen zu sparen.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert sein, bevor xrDestroySpatialContextEXT aufgerufen wird. -
spatialContextmuss ein gültiges XrSpatialContextEXT-Handle sein
Threadsicherheit
- Der Zugriff auf
spatialContextund alle untergeordneten Handles muss extern synchronisiert werden.
Rückgabecodes
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
Darstellungen räumlicher Entitäten
ID des räumlichen Objekts
XR_DEFINE_ATOM(XrSpatialEntityIdEXT)
XrSpatialEntityIdEXT wird verwendet, um jede Art von Entität darzustellen, die von der Laufzeit in der räumlichen Umgebung des Nutzers erkannt wird. Ein XrSpatialEntityIdEXT ist für den XrSpatialContextEXT gültig, in dem es gefunden wird. Die Laufzeit darf denselben XrSpatialEntityIdEXT nicht für verschiedene Entitäten innerhalb desselben XrSpatialContextEXT wiederverwenden. Außerdem darf die Laufzeit nicht dieselbe XrSpatialEntityIdEXT für mehrere XrSpatialContextEXT innerhalb derselben XrSession wiederverwenden, unabhängig davon, ob sie dieselbe Entität oder verschiedene Entitäten darstellt.
#define XR_NULL_SPATIAL_ENTITY_ID_EXT 0
XR_NULL_SPATIAL_ENTITY_ID_EXT ist ein reservierter Wert, der eine ungültige XrSpatialEntityIdEXT darstellt. Er darf nur dann an API-Funktionen übergeben und von diesen zurückgegeben werden, wenn dies ausdrücklich zulässig ist.
Handle für räumliche Entität
XR_DEFINE_HANDLE(XrSpatialEntityEXT)
Das Handle XrSpatialEntityEXT stellt eine räumliche Entität dar. Eine Anwendung kann ein solches Handle erstellen, um der Laufzeitumgebung ihr Interesse an einer bestimmten Entität mitzuteilen.
Handle für räumliche Entität aus ID erstellen
Die Funktion xrCreateSpatialEntityFromIdEXT ist so definiert:
XrResult xrCreateSpatialEntityFromIdEXT(
XrSpatialContextEXT spatialContext,
const XrSpatialEntityFromIdCreateInfoEXT* createInfo,
XrSpatialEntityEXT* spatialEntity);
Parameterbeschreibungen
spatialContextist ein XrSpatialContextEXT, der zuvor mit xrCreateSpatialContextAsyncEXT erstellt wurde.createInfoist ein Zeiger auf die Struktur XrSpatialEntityFromIdCreateInfoEXT.spatialEntityist das zurückgegebene XrSpatialEntityEXT-Handle.
Die Anwendung kann xrCreateSpatialEntityFromIdEXT verwenden, um ein XrSpatialEntityEXT-Handle zu erstellen, das auf eine Entität in der Umgebung des Nutzers verweist.
Die Laufzeit muss XR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXT zurückgeben, wenn XrSpatialEntityFromIdCreateInfoEXT :: entityId keine gültige ID für spatialContext ist.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert werden, bevor xrCreateSpatialEntityFromIdEXT aufgerufen wird. -
spatialContextmuss ein gültiges XrSpatialContextEXT-Handle sein -
createInfomuss ein Zeiger auf eine gültige XrSpatialEntityFromIdCreateInfoEXT-Struktur sein. -
spatialEntitymuss ein Zeiger auf ein XrSpatialEntityEXT-Handle sein.
Rückgabecodes
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
Die Struktur XrSpatialEntityFromIdCreateInfoEXT ist so definiert:
typedef struct XrSpatialEntityFromIdCreateInfoEXT {
XrStructureType type;
const void* next;
XrSpatialEntityIdEXT entityId;
} XrSpatialEntityFromIdCreateInfoEXT;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind weder in OpenXR noch in dieser Erweiterung definiert.entityIdist derXrSpatialEntityIdEXTder Entität, für die die Anwendung ein Handle erstellen möchte.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert sein, bevor XrSpatialEntityFromIdCreateInfoEXT verwendet werden kann. -
typemussXR_TYPE_SPATIAL_ENTITY_FROM_ID_CREATE_INFO_EXTsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein.
Handle für räumliche Entität löschen
Die Funktion xrDestroySpatialEntityEXT ist so definiert:
XrResult xrDestroySpatialEntityEXT(
XrSpatialEntityEXT spatialEntity);
Parameterbeschreibungen
spatialEntityist ein Handle für eine XrSpatialEntityEXT, die zuvor von einer Funktion wie xrCreateSpatialEntityFromIdEXT erstellt wurde.
Die Anwendung kann xrDestroySpatialEntityEXT verwenden, um das Handle spatialEntity freizugeben, wenn sie nicht mehr an der Entität interessiert ist, auf die dieses Handle verweist.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert werden, bevor xrDestroySpatialEntityEXT aufgerufen wird. -
spatialEntitymuss ein gültiges XrSpatialEntityEXT-Handle sein
Threadsicherheit
- Der Zugriff auf
spatialEntityund alle untergeordneten Handles muss extern synchronisiert werden.
Rückgabecodes
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
Spatial Snapshot
XR_DEFINE_HANDLE(XrSpatialSnapshotEXT)
Die Anwendung kann räumliche Snapshots erstellen, um räumliche Entitäten zu erkennen oder ihre Informationen zu bekannten räumlichen Entitäten zu aktualisieren. Das XrSpatialSnapshotEXT-Handle stellt die unveränderlichen Daten für die erkannten oder aktualisierten räumlichen Entitäten und eine Teilmenge ihrer Komponenten dar, die von der Anwendung ausgewählt wurden. Der räumliche Snapshot stellt eine kohärente Ansicht der Entitäten und ihrer Komponentendaten dar. Nachdem ein Snapshot erstellt wurde, müssen die Daten des Snapshots unverändert bleiben, solange der Snapshot gültig ist.
Die Anwendung kann beliebig viele Snapshots erstellen, muss jedoch den für jeden neuen Snapshot zugewiesenen Arbeitsspeicher berücksichtigen und die Snapshots löschen, sobald sie nicht mehr benötigt werden.
Erkennungs-Snapshot erstellen
Die Funktion xrCreateSpatialDiscoverySnapshotAsyncEXT ist so definiert:
XrResult xrCreateSpatialDiscoverySnapshotAsyncEXT(
XrSpatialContextEXT spatialContext,
const XrSpatialDiscoverySnapshotCreateInfoEXT* createInfo,
XrFutureEXT* future);
Parameterbeschreibungen
spatialContextist ein XrSpatialContextEXT, der zuvor mit xrCreateSpatialContextAsyncEXT erstellt wurde.createInfoist ein Zeiger auf ein XrSpatialDiscoverySnapshotCreateInfoEXT .futureist ein Zeiger auf einXrFutureEXT.
Die Anwendung kann räumliche Entitäten erkennen, indem sie mit xrCreateSpatialDiscoverySnapshotAsyncEXT einen Erkennungs-Snapshot erstellt.
Diese Funktion startet einen asynchronen Vorgang und erstellt ein entsprechendes XrFutureEXT , das mit xrPollFutureEXT und zugehörigen Funktionen verwendet werden kann. Der Rückgabewert dieser Funktion gibt nur an, ob die Parameter für die Planung des asynchronen Vorgangs akzeptabel waren. Die entsprechende Vervollständigungsfunktion ist xrCreateSpatialDiscoverySnapshotCompleteEXT. Sie kann verwendet werden, wenn sich ein Future aus dieser Funktion im Status READY befindet. Die Ausgaben werden von dieser Funktion in der Vervollständigungsstruktur XrCreateSpatialDiscoverySnapshotCompletionEXT ausgegeben.
Die Anwendung kann mehrere Anfragen zum Erstellen von Discovery-Snapshots senden, ohne auf den Abschluss der vorherigen Anfrage warten zu müssen. Die Laufzeit kann die Snapshot-Erstellung in beliebiger Reihenfolge verarbeiten und abschließen. Die Laufzeit kann die Erstellung des Discovery-Snapshots verzögern, um die Anwendung zu drosseln, wenn die Nutzung von Systemressourcen aufgrund von Energie-, Wärme- oder anderen Richtlinien des Geräts reduziert werden muss.
Die Anwendung kann XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes verwenden, um die Liste der Entitäten und Komponenten zu filtern, deren Daten die Laufzeit muss in den Snapshot aufnehmen. Wenn die Anwendung eine gültige Liste von räumlichen Komponententypen in XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes bereitstellt, darf die Laufzeit nur räumliche Entitäten in den Snapshot aufnehmen, die mindestens eine der in XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes bereitgestellten Komponenten enthalten. Außerdem darf die Laufzeit nur Daten für die Komponenten im Snapshot enthalten.
Die Laufzeit muss XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT zurückgeben, wenn einer der XrSpatialComponentTypeEXT-Werte in XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes nicht für die räumlichen Funktionen aktiviert ist, die beim Erstellen von spatialContext an XrSpatialContextCreateInfoEXT :: capabilityConfigs übergeben wurden.
Wenn die Anwendung keine Liste von räumlichen Komponententypen in XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes bereitstellt, muss die Laufzeit alle räumlichen Entitäten in den Snapshot aufnehmen, die die in XrSpatialCapabilityConfigurationBaseHeaderEXT ::enabledComponents aufgeführten Komponenten für die für spatialContext konfigurierten Funktionen enthalten. Die Laufzeit muss die Daten für alle aktivierten Komponenten der für spatialContext konfigurierten Funktionen enthalten.
Wenn XrEventDataReferenceSpaceChangePending vor dem Abschluss von future in die Warteschlange gestellt wird und XrEventDataReferenceSpaceChangePending :: poseValid „false“ ist, kann die Laufzeit entweder ein XrSpatialSnapshotEXT ohne Entitäten erstellen oder den XrSpatialEntityTrackingStateEXT der Entitäten, die nicht mehr auffindbar sind, in XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace bei XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time auf XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT oder XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT setzen. Die Laufzeit darf XrCreateSpatialContextCompletionEXT :: futureResult aufgrund von XrEventDataReferenceSpaceChangePending nicht auf einen Fehlercode setzen.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert werden, bevor xrCreateSpatialDiscoverySnapshotAsyncEXT aufgerufen wird. -
spatialContextmuss ein gültiges XrSpatialContextEXT-Handle sein -
createInfomuss ein Zeiger auf eine gültige XrSpatialDiscoverySnapshotCreateInfoEXT-Struktur sein -
futuremuss ein Zeiger auf einenXrFutureEXT-Wert sein
Rückgabecodes
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
Die Struktur XrSpatialDiscoverySnapshotCreateInfoEXT ist so definiert:
typedef struct XrSpatialDiscoverySnapshotCreateInfoEXT {
XrStructureType type;
const void* next;
uint32_t componentTypeCount;
const XrSpatialComponentTypeEXT* componentTypes;
} XrSpatialDiscoverySnapshotCreateInfoEXT;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind weder in OpenXR noch in dieser Erweiterung definiert.componentTypeCountist einuint32_t, der die Anzahl der Elemente im ArraycomponentTypesbeschreibt.componentTypesist ein Array von XrSpatialComponentTypeEXT .
Die Struktur XrSpatialDiscoverySnapshotCreateInfoEXT beschreibt die Informationen, die zum Erstellen eines XrSpatialSnapshotEXT-Handles beim Erkennen von räumlichen Entitäten erforderlich sind.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert werden, bevor XrSpatialDiscoverySnapshotCreateInfoEXT verwendet werden kann. -
typemussXR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXTsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein. Siehe auch: XrSpatialBoundsBoxfANDROID , XrSpatialBoundsFrustumfANDROID , XrSpatialBoundsSpherefANDROID , XrSpatialDiscoveryPersistenceContextFilterANDROIDX1 , XrSpatialDiscoveryPersistenceUuidFilterEXT , XrSpatialDiscoveryRoomBoundaryFilterANDROIDSYS , XrSpatialDiscoveryUniqueEntitiesFilterANDROID , XrSpatialFilterTrackingStateEXT , XrSpatialRaycastInfoANDROID - Wenn
componentTypeCountnicht0ist, musscomponentTypesein Zeiger auf ein Array mitcomponentTypeCountgültigen XrSpatialComponentTypeEXT-Werten sein.
Die Funktion xrCreateSpatialDiscoverySnapshotCompleteEXT ist so definiert:
XrResult xrCreateSpatialDiscoverySnapshotCompleteEXT(
XrSpatialContextEXT spatialContext,
const XrCreateSpatialDiscoverySnapshotCompletionInfoEXT* createSnapshotCompletionInfo,
XrCreateSpatialDiscoverySnapshotCompletionEXT* completion);
Parameterbeschreibungen
spatialContextist der XrSpatialContextEXT, der zuvor an xrCreateSpatialDiscoverySnapshotAsyncEXT ::spatialContextübergeben wurde.createSnapshotCompletionInfoist ein Zeiger auf ein XrCreateSpatialDiscoverySnapshotCompletionInfoEXT, das Informationen zum Abschluss der Anfrage zur Erstellung eines Discovery-Snapshots enthält.completionist ein Zeiger auf ein XrCreateSpatialDiscoverySnapshotCompletionEXT .
xrCreateSpatialDiscoverySnapshotCompleteEXT schließt den asynchronen Vorgang ab, der von xrCreateSpatialDiscoverySnapshotAsyncEXT gestartet wurde. Die Laufzeit muss XR_ERROR_FUTURE_PENDING_EXT zurückgeben, wenn XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: future nicht im Status „Bereit“ ist. Die Laufzeit muss XR_ERROR_FUTURE_INVALID_EXT zurückgeben, wenn XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: future bereits abgeschlossen oder abgebrochen wurde.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert sein, bevor xrCreateSpatialDiscoverySnapshotCompleteEXT aufgerufen wird. -
spatialContextmuss ein gültiges XrSpatialContextEXT-Handle sein -
createSnapshotCompletionInfomuss ein Zeiger auf eine gültige XrCreateSpatialDiscoverySnapshotCompletionInfoEXT-Struktur sein -
completionmuss ein Zeiger auf eine XrCreateSpatialDiscoverySnapshotCompletionEXT-Struktur sein
Rückgabecodes
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
Die Struktur XrCreateSpatialDiscoverySnapshotCompletionInfoEXT ist so definiert:
typedef struct XrCreateSpatialDiscoverySnapshotCompletionInfoEXT {
XrStructureType type;
const void* next;
XrSpace baseSpace;
XrTime time;
XrFutureEXT future;
} XrCreateSpatialDiscoverySnapshotCompletionInfoEXT;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette.baseSpaceist der XrSpace, in dem sich alle Orte des XrSpatialSnapshotEXT der Erkennung befinden.timeist derXrTime, an dem sich alle Standorte des XrSpatialSnapshotEXT der Erkennung befinden.futureist dieXrFutureEXT, die von xrCreateSpatialDiscoverySnapshotAsyncEXT empfangen wurde.
Die Standorte in den verschiedenen Komponentendaten, die im erstellten Snapshot enthalten sind, werden in baseSpace unter time dargestellt.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert werden, bevor XrCreateSpatialDiscoverySnapshotCompletionInfoEXT verwendet werden kann. -
typemussXR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXTsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein. -
baseSpacemuss ein gültiger XrSpace-Alias sein
Die Struktur XrCreateSpatialDiscoverySnapshotCompletionEXT ist so definiert:
typedef struct XrCreateSpatialDiscoverySnapshotCompletionEXT {
XrStructureType type;
void* next;
XrResult futureResult;
XrSpatialSnapshotEXT snapshot;
} XrCreateSpatialDiscoverySnapshotCompletionEXT;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette.futureResultist das XrResult des Vorgangs zum Erstellen des Snapshots für die räumliche Erkennung.snapshotist ein XrSpatialSnapshotEXT, der verwendet werden kann, um die Komponentendaten der erkannten räumlichen Entitäten abzufragen.
Zukünftige Rückgabecodes
futureResult-Werte:
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_RUNTIME_FAILUREXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHED
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert sein, bevor XrCreateSpatialDiscoverySnapshotCompletionEXT verwendet werden kann. -
typemussXR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXTsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein. -
futureResultmuss ein gültiger XrResult-Wert sein. - Wenn
snapshotnicht XR_NULL_HANDLE ist, musssnapshotein gültiges XrSpatialSnapshotEXT-Handle sein.
Ereignis „Discovery-Empfehlung“
Die Struktur XrEventDataSpatialDiscoveryRecommendedEXT ist so definiert:
typedef struct XrEventDataSpatialDiscoveryRecommendedEXT {
XrStructureType type;
const void* next;
XrSpatialContextEXT spatialContext;
} XrEventDataSpatialDiscoveryRecommendedEXT;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette.spatialContextist der XrSpatialContextEXT, für den die Laufzeit die Erkennung empfiehlt.
Die Anwendung kann dieses Ereignis mit xrPollEvent abrufen. Die Anwendung kann übermäßige Aufrufe von xrCreateSpatialDiscoverySnapshotAsyncEXT zur Erkennung räumlicher Entitäten vermeiden, indem sie auf dieses Ereignis wartet. Wenn die Anwendung zwischen zwei XrEventDataSpatialDiscoveryRecommendedEXT-Ereignissen mehrere Discovery-Snapshots mit demselben XrSpatialDiscoverySnapshotCreateInfoEXT erstellt, enthalten die resultierenden Snapshots möglicherweise dieselben Entitäten. Die Erstellung der Snapshots und die Datenabfragen wären dann überflüssig.
Wenn Sie auf dieses Ereignis warten, um einen neuen Discovery-Snapshot zu erstellen, wird die Anwendung das System nicht mit Discovery-Anfragen überlasten, für die die Laufzeit möglicherweise keine neuen Daten zurückgibt. Außerdem wird so das Risiko einer übermäßigen Nutzung der Systemressourcen und einer Drosselung aufgrund von Energie- oder Temperaturrichtlinien des Geräts vermieden. Dies trägt auch dazu bei, dass Laufzeiten, die räumliche Entitäten spontan mit Live-Tracking erkennen, und Laufzeiten, die räumliche Entitäten aus einem zuvor aufgezeichneten Zustand bereitstellen, gleichgestellt werden. Bei Letzteren kann die Laufzeit das Empfehlungsereignis für die Erkennung nur einmal für jeden XrSpatialContextEXT in die Warteschlange stellen.
Die Laufzeit darf dieses Ereignis nicht in die Warteschlange stellen, um die Anwendung über Änderungen oder Anpassungen an den Komponentendaten vorhandener räumlicher Entitäten zu informieren. Die Anwendung kann xrCreateSpatialUpdateSnapshotEXT verwenden, um Aktualisierungen von Komponentendaten für die räumlichen Entitäten zu verfolgen, die für sie relevant sind.
Eine Laufzeit kann ein Ereignis für eine Erkennungsempfehlung in die Warteschlange stellen, ohne darauf zu warten, dass die Anwendung zuerst xrCreateSpatialDiscoverySnapshotAsyncEXT aufruft. Eine Laufzeit kann die Entscheidung, das Ereignis für die Erkennungsempfehlung in die Warteschlange zu stellen, beispielsweise auf der Konfiguration von XrSpatialContextEXT, ihrem eigenen Verständnis der Umgebung des Nutzers (Erkennung neuer Entitäten oder Verlust vorhandener Entitäten) oder auf der Angabe einer geeigneten Häufigkeit von Erkennungsanfragen an die Anwendung basieren, um die Systemressourcen nicht zu überlasten. Die Laufzeit kann dieses Ereignis für einen XrSpatialContextEXT nicht in die Warteschlange stellen, wenn während der Lebensdauer dieses XrSpatialContextEXT keine Entitäten in der Umgebung des Nutzers gefunden werden.
Die Laufzeit darf dieses Ereignis für einen bestimmten spatialContext erst in die Warteschlange stellen, wenn die Anwendung die Erstellung mit xrCreateSpatialContextCompleteEXT abgeschlossen hat.
Nachdem die Anwendung xrDestroySpatialContextEXT aufgerufen hat, darf die Laufzeit keine weiteren Empfehlungsereignisse für die Erkennung für diesen räumlichen Kontext in die Warteschlange stellen und keine solchen Ereignisse für diesen Kontext von xrPollEvent zurückgeben.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert werden, bevor XrEventDataSpatialDiscoveryRecommendedEXT verwendet werden kann. -
typemussXR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXTsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein.
Komponentendaten abfragen
Die Funktion xrQuerySpatialComponentDataEXT ist so definiert:
XrResult xrQuerySpatialComponentDataEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialComponentDataQueryConditionEXT* queryCondition,
XrSpatialComponentDataQueryResultEXT* queryResult);
Parameterbeschreibungen
snapshotist ein XrSpatialSnapshotEXT, der zuvor von xrCreateSpatialDiscoverySnapshotCompleteEXT oder xrCreateSpatialUpdateSnapshotEXT bereitgestellt wurde.queryConditionist ein Zeiger auf eine XrSpatialComponentDataQueryConditionEXT-Struktur.queryResultist ein Zeiger auf eine XrSpatialComponentDataQueryResultEXT-Struktur.
Die Anwendung kann xrQuerySpatialComponentDataEXT verwenden, um die Komponentendaten der Entitäten im Snapshot abzufragen. Dazu wird eine Listenstruktur an XrSpatialComponentDataQueryResultEXT :: next angehängt, die jedem XrSpatialComponentTypeEXT in XrSpatialComponentDataQueryConditionEXT :: componentTypes entspricht.
Wenn die Anwendung eine Listenstruktur an XrSpatialComponentDataQueryResultEXT :: next anhängt, die keiner der in XrSpatialComponentDataQueryConditionEXT :: componentTypes aufgeführten Komponenten entspricht, muss die Laufzeit XR_ERROR_VALIDATION_FAILURE zurückgeben.
Die Anwendung kann die Listenstrukturen anhängen, die nur einer Teilmenge der in XrSpatialComponentDataQueryConditionEXT :: componentTypes aufgeführten Komponenten entsprechen. Die Anwendung kann die Listenstrukturen vollständig weglassen, wenn sie nur die IDs und den Tracking-Status der räumlichen Entitäten wissen möchte, die die queryCondition erfüllen. Die Laufzeit darf das Fehlen von Listenstrukturen aus der XrSpatialComponentDataQueryResultEXT :: next-Kette nicht als Fehler behandeln.
Wenn XrEventDataReferenceSpaceChangePending in die Warteschlange gestellt wird und XrEventDataReferenceSpaceChangePending :: changeTime verstrichen ist, während die Anwendung Komponentendaten von einem XrSpatialSnapshotEXT abfragt, kann die Anwendung die Ereignisdaten verwenden, um die Positionen entsprechend anzupassen.
Die Laufzeit muss XrSpatialComponentDataQueryResultEXT :: entityIds nur mit Entitäten füllen, die alle in XrSpatialComponentDataQueryConditionEXT :: componentTypes angegebenen Komponenten enthalten. Wenn XrSpatialComponentDataQueryConditionEXT :: componentTypeCount den Wert 0 hat, muss die Laufzeit queryResult mit allen Entitäten (und ihren Tracking-Status) füllen, die sich im Snapshot befinden. Wenn XrSpatialComponentDataQueryConditionEXT :: next zusätzliche Abfragebedingungen hinzugefügt werden, muss die Laufzeit diese als „UND“ mit der Verfügbarkeit der Komponententypen behandeln. Das bedeutet, dass die Laufzeit XrSpatialComponentDataQueryResultEXT ::entityIds nur mit Entitäten füllen muss, die alle angegebenen Bedingungen erfüllen. Die Laufzeit muss die Komponentendaten in den Listenstrukturen in derselben Reihenfolge wie die Entitäten in XrSpatialComponentDataQueryResultEXT :: entityIds füllen. Das bedeutet, dass die Komponentendaten an einem bestimmten Index im Array der Listenstruktur der Entität am selben Index entsprechen müssen.
Wenn der Tracking-Status für eine Entität nicht XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT ist, darf die Laufzeit die Daten am Index, der dieser Entität entspricht, im Array, das in den Listenstrukturen enthalten ist, die an XrSpatialComponentDataQueryResultEXT angehängt sind, nicht ändern.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert werden, bevor xrQuerySpatialComponentDataEXT aufgerufen wird. -
snapshotmuss ein gültiges XrSpatialSnapshotEXT-Handle sein -
queryConditionmuss ein Zeiger auf eine gültige XrSpatialComponentDataQueryConditionEXT-Struktur sein. -
queryResultmuss ein Zeiger auf eine XrSpatialComponentDataQueryResultEXT-Struktur sein.
Rückgabecodes
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
Die Anwendung erstellt beispielsweise einen XrSpatialSnapshotEXT, der 5 Entitäten enthält, wobei:
- Entität 1 und 2 haben die Komponenten
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTundXR_SPATIAL_COMPONENT_TYPE_PARENT_EXT - Entität 3 und 4 haben die Komponenten
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXTundXR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT - Entität 5 hat die Komponenten
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTundXR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT.
XrSpatialEntityIdEXT
XrSpatialEntityIdEXT
1
1
2
2
3
3
4
4
5
5
Bounded2D
Bounded2D
Ja
Ja
Ja
Ja
Nein
Nein
Nein
Nein
Ja
Ja
Elternteil
Elternteil
Ja
Ja
Ja
Ja
Nein
Nein
Nein
Nein
Nein
Nein
Mesh3D
Mesh3D
Nein
Nein
Nein
Nein
Ja
Ja
Ja
Ja
Ja
Ja
Bounded3D
Bounded3D
Nein
Nein
Nein
Nein
Ja
Ja
Ja
Ja
Nein
Nein Text is not SVG - cannot display
Abbildung 20: Beispiel-Snapshot
xrQuerySpatialComponentDataEXT für den obigen Snapshot mit XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT in der Abfragebedingung führt dazu, dass die Entitäten 1, 2 und 5 an die Anwendung zurückgegeben werden. Die Anwendung kann ein Array von XrSpatialBounded2DDataEXT als Teil der XrSpatialComponentBounded2DListEXT-Struktur an die nächste Kette von XrSpatialComponentDataQueryResultEXT anhängen, um die bounded2D-Daten abzurufen.
XrSpatialEntityIdEXT
XrSpatialEntityIdEXT
1
1
2
2
5
5
Bounded2D
Bounded2D
Daten für entityId #1
Daten für Entit...
Daten für entityId #2
Daten für Entit...
Daten für entityId #5
Daten für Entit...
entityIds
entityIds
Weiter
Weiter
XrSpatialComponent DataQueryResultEXT
XrSpatialComponent Dat...
bounds
bounds
XrSpatialComponent Bounded2DListEXT
XrSpatialComponent Bou... Text ist kein SVG – kann nicht angezeigt werden
Abbildung 21: Beispiel für ein Abfrageergebnis
xrQuerySpatialComponentDataEXT für den obigen Snapshot mit den in der Abfragebedingung aufgeführten Komponenten XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT und XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT führt dazu, dass die Entitäten 3 und 4 an die Anwendung zurückgegeben werden. Die Anwendung kann Arrays von XrBoxf und XrSpatialMeshDataEXT als Teil der Strukturen XrSpatialComponentBounded3DListEXT bzw. XrSpatialComponentMesh3DListEXT an die nächste Kette von XrSpatialComponentDataQueryResultEXT anhängen, um die Komponentendaten abzurufen.
XrSpatialEntityIdEXT
XrSpatialEntityIdEXT
3
3
4
4
Bounded3D
Bounded3D
Daten für entityId 3
Daten für Entit...
Daten für entityId #4
Daten für Entit...
Mesh3D
Mesh3D
Daten für entityId 3
Daten für Entit...
Daten für entityId #4
Daten für Entit...
entityIds
entityIds
Weiter
Weiter
XrSpatialComponent DataQueryResultEXT
XrSpatialComponent Da...
bounds
bounds
Weiter
Weiter
XrSpatialComponent Bounded3DListEXT
XrSpatialComponent Bo...
XrSpatialComponent Mesh3DListEXT
XrSpatialComponent Me...
Meshes
meshes Text is not SVG - cannot display
Abbildung 22: Beispiel für ein Abfrageergebnis
Die Struktur XrSpatialComponentDataQueryConditionEXT ist so definiert:
typedef struct XrSpatialComponentDataQueryConditionEXT {
XrStructureType type;
const void* next;
uint32_t componentTypeCount;
const XrSpatialComponentTypeEXT* componentTypes;
} XrSpatialComponentDataQueryConditionEXT;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette.componentTypeCountist einuint32_t, der die Anzahl der Elemente im ArraycomponentTypesbeschreibt.componentTypesist ein Array von XrSpatialComponentTypeEXT, für die die Daten aus dem Snapshot abgerufen werden sollen.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert sein, bevor XrSpatialComponentDataQueryConditionEXT verwendet werden kann. -
typemussXR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXTsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein. Siehe auch: XrSpatialDiscoveryPersistenceUuidFilterEXT , XrSpatialFilterArchetypeEXT , XrSpatialFilterTrackingStateEXT - Wenn
componentTypeCountnicht0ist, musscomponentTypesein Zeiger auf ein Array mitcomponentTypeCountgültigen XrSpatialComponentTypeEXT-Werten sein.
Die Struktur XrSpatialComponentDataQueryResultEXT ist so definiert:
typedef struct XrSpatialComponentDataQueryResultEXT {
XrStructureType type;
void* next;
uint32_t entityIdCapacityInput;
uint32_t entityIdCountOutput;
XrSpatialEntityIdEXT* entityIds;
uint32_t entityStateCapacityInput;
uint32_t entityStateCountOutput;
XrSpatialEntityTrackingStateEXT* entityStates;
} XrSpatialComponentDataQueryResultEXT;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette.entityIdCapacityInputist die Kapazität desentityIds-Arrays oder 0, um eine Anfrage zum Abrufen der erforderlichen Kapazität anzugeben.entityIdCountOutputist die Anzahl derXrSpatialEntityIdEXTinentityIdsoder die erforderliche Kapazität, fallsentityIdCapacityInputnicht ausreicht.entityIdsist ein Array vonXrSpatialEntityIdEXT. Er kannNULLsein, wennentityIdCapacityInput0 ist.entityStateCapacityInputist die Kapazität desentityStates-Arrays oder 0, um eine Anfrage zum Abrufen der erforderlichen Kapazität anzugeben.entityStateCountOutputist die Anzahl der XrSpatialEntityTrackingStateEXT inentityStatesoder die erforderliche Kapazität, fallsentityStateCapacityInputnicht ausreicht. Dieser Wert muss immer mitentityIdCountOutputübereinstimmen.entityStatesist ein Array von XrSpatialEntityTrackingStateEXT . Er kannNULLsein, wennentityStateCapacityInput0 ist.- Eine detaillierte Beschreibung zum Abrufen der erforderlichen
entityIds-Größe finden Sie im Abschnitt Parameter für die Puffergröße.
Eine Anwendung kann die entityIds mit xrCreateSpatialEntityFromIdEXT verwenden, um XrSpatialEntityEXT-Handles für die Entitäten zu erstellen, für die sie regelmäßig Updates erhalten möchte. Die Anwendung kann diese XrSpatialEntityEXT-Handles dann mit xrCreateSpatialUpdateSnapshotEXT verwenden, um einen Update-Snapshot zu erstellen, der die neuesten bekannten Daten der Komponenten für die bereitgestellten Entitäten enthält.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert sein, bevor XrSpatialComponentDataQueryResultEXT verwendet werden kann. -
typemussXR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXTsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein. Siehe auch: XrSpatialComponentAnchorListEXT , XrSpatialComponentAnnotationQuadListANDROID , XrSpatialComponentBounded2DListEXT , XrSpatialComponentBounded3DListEXT , XrSpatialComponentConfidenceListANDROIDSYS , XrSpatialComponentImage2DListEXT , XrSpatialComponentKeyboardSemanticLabelListEXT , XrSpatialComponentMarkerListEXT , XrSpatialComponentMaterialTypeListANDROIDSYS , XrSpatialComponentMesh2DListEXT , XrSpatialComponentMesh3DListEXT , XrSpatialComponentMesh3DNormalsListEXT , XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT , XrSpatialComponentMesh3DVertexSemanticLabelsListEXT , XrSpatialComponentMouseSemanticLabelListEXT , XrSpatialComponentObjectSemanticLabelListANDROID , XrSpatialComponentObjectSemanticLabelListEXT , XrSpatialComponentOccupancyGridListANDROIDX1 , XrSpatialComponentParentListEXT , XrSpatialComponentPersistenceListEXT , XrSpatialComponentPersistenceScopesListANDROIDX1 , XrSpatialComponentPlaneAlignmentListEXT , XrSpatialComponentPlaneSemanticLabelListEXT , XrSpatialComponentPolygon2DListEXT , XrSpatialComponentRaycastResultListANDROID , XrSpatialComponentRoomEmptinessListANDROIDSYS , XrSpatialComponentRoomListANDROIDSYS , XrSpatialComponentStreetscapeGeometryMetadataListANDROIDX2 , XrSpatialComponentSubsumedByListANDROID - Wenn
entityIdCapacityInputnicht0ist, mussentityIdsein Zeiger auf ein Array vonentityIdCapacityInput-XrSpatialEntityIdEXT-Werten sein. - Wenn
entityStateCapacityInputnicht0ist, mussentityStatesein Zeiger auf ein Array vonentityStateCapacityInputXrSpatialEntityTrackingStateEXT-Werten sein.
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;
XrSpatialEntityTrackingStateEXT listet die möglichen Tracking-Status für räumliche Entitäten auf:
Die Enums haben die folgenden Bedeutungen:
Enum-Beschreibung
XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT
Die Laufzeit hat das Tracking dieser Entität beendet und wird es nicht wieder aufnehmen.
XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT
Die Laufzeit hat das Tracking dieser Entität pausiert, kann es aber in Zukunft wieder aufnehmen.
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT
Die Laufzeit verfolgt diese Entität derzeit und die Komponentendaten sind gültig.
Tracking
PAUSIERT
ANGEHALTEN
Abbildung 23: XrSpatialEntityTrackingStateEXT
- Die Laufzeit kann den Status des räumlichen Elements von
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXTinXR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXTändern, wenn das Tracking dieses räumlichen Elements ausgesetzt wird, aber in Zukunft wieder aufgenommen werden kann. Beispiele dafür, wann die Laufzeit dies möglicherweise tut, sind unter anderem, wenn die Anwendung den Eingabefokus verliert, wenn die angegebene räumliche Entität zu weit vom Nutzer entfernt ist, um genau verfolgt zu werden, oder wenn zu viele Entitäten verfolgt werden und die Laufzeit die Kosten für die Verfolgung reduzieren möchte. XrSpatialEntityTrackingStateEXT hilft der Anwendung, sich von den verschiedenen Tracking-Richtlinien der einzelnen Laufzeiten zu isolieren. - Die Laufzeit kann den Status einer Entität von
XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXTinXR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXToderXR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXTändern. - Die Laufzeit muss den Status des räumlichen Elements von
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXToderXR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXTinXR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXTändern, wenn das räumliche Element verloren geht und das Tracking nicht wiederhergestellt oder fortgesetzt werden kann. Ein Beispiel für einen solchen Fall wäre, wenn das Gerät das Tracking verliert, die Tracking-Sitzung neu startet, sich aber nicht in seiner Umgebung neu lokalisieren kann und daher erkannte Entitäten dieser Tracking-Sitzung als neue Entitäten behandelt. - Sobald der Tracking-Status einer Entität auf
XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXTfestgelegt ist, darf die Laufzeit ihn nicht mehr in einen anderen Status ändern. - Wenn die Komponentendaten einer räumlichen Entität mit xrQuerySpatialComponentDataEXT abgefragt werden, muss die Laufzeit gültige Daten in den Inhalten der Puffer festlegen, die von der Anwendung in der nächsten Kette von XrSpatialComponentDataQueryResultEXT bereitgestellt werden, wenn der Entitätsstatus
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXTist. Wenn der EntitätsstatusXR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXToderXR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXTist, darf die Laufzeit den Inhalt der Puffer nicht ändern.
Zwei-Aufruf-Idiom für Komponentendaten
Die Struktur XrSpatialBufferEXT ist so definiert:
typedef struct XrSpatialBufferEXT {
XrSpatialBufferIdEXT bufferId;
XrSpatialBufferTypeEXT bufferType;
} XrSpatialBufferEXT;
Mitgliederbeschreibungen
bufferIddieXrSpatialBufferIdEXTder Pufferdaten.bufferTypeist der XrSpatialBufferTypeEXT, der den Datentyp inbufferIdangibt. Die Anwendung kannbufferTypeverwenden, um zu bestimmen, welche Funktion zum Abrufen der tatsächlichen Daten des Puffers verwendet werden soll.
Einige räumliche Komponenten haben Daten mit variabler Größe und erfordern daher die Verwendung des Two-Call-Idioms, um ihre Daten abzurufen. In solchen Fällen stellt die Datenstruktur der räumlichen Komponente einen XrSpatialBufferEXT für jeden Puffer mit variabler Größe bereit, der in den Daten dieser Komponente benötigt wird.
Für dieselbe bufferId muss die Laufzeit dieselben Daten von einer Komponentendatenabfrage zur anderen bereitstellen, auch von einem Snapshot zum anderen. Ein anderer bufferId zwischen Aufrufen von Komponentendatenabfragen zeigt der Anwendung an, dass sich die Daten für diese Komponente möglicherweise geändert haben.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert sein, bevor XrSpatialBufferEXT verwendet werden kann. -
bufferTypemuss ein gültiger XrSpatialBufferTypeEXT-Wert sein.
XR_DEFINE_ATOM(XrSpatialBufferIdEXT)
XrSpatialBufferIdEXT wird verwendet, um alle Arten von Daten mit variabler Größe für eine räumliche Komponente darzustellen.
Die Laufzeit muss die XrSpatialBufferIdEXT und ihre Daten mindestens für den Lebenszyklus des XrSpatialSnapshotEXT, der sie enthält, im Arbeitsspeicher behalten. Die Laufzeit kann die XrSpatialBufferIdEXT und ihre Daten länger als den Lebenszyklus des XrSpatialSnapshotEXT im Arbeitsspeicher behalten, um dieselbe ID als Teil von Snapshots zurückzugeben, die später von der Anwendung erstellt werden. Für dieselbe XrSpatialBufferIdEXT muss die Laufzeit immer dieselben Daten über die entsprechende xrGetSpatialBuffer*-Funktion zurückgeben.
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;
Die Aufzählung XrSpatialBufferTypeEXT gibt die verschiedenen Datentypen des Puffers an, der durch XrSpatialBufferIdEXT dargestellt wird.
Beschreibungen der Enumeranten
XR_SPATIAL_BUFFER_TYPE_STRING_EXT. DerXrSpatialBufferIdEXTkann an xrGetSpatialBufferStringEXT übergeben werden, um einen Stringpuffer abzurufen.XR_SPATIAL_BUFFER_TYPE_UINT8_EXT. DerXrSpatialBufferIdEXTkann an xrGetSpatialBufferUint8EXT übergeben werden, um einenuint8_t-Zwischenspeicher abzurufen.XR_SPATIAL_BUFFER_TYPE_UINT16_EXT. DerXrSpatialBufferIdEXTkann an xrGetSpatialBufferUint16EXT übergeben werden, um einenuint16_t-Zwischenspeicher abzurufen.XR_SPATIAL_BUFFER_TYPE_UINT32_EXT. DerXrSpatialBufferIdEXTkann an xrGetSpatialBufferUint32EXT übergeben werden, um einenuint32_t-Zwischenspeicher abzurufen.XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT. DerXrSpatialBufferIdEXTkann an xrGetSpatialBufferFloatEXT übergeben werden, um einenfloat-Zwischenspeicher abzurufen.XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT.XrSpatialBufferIdEXTkann an xrGetSpatialBufferVector2fEXT übergeben werden, um einen XrVector2f-Zwischenspeicher abzurufen.XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT.XrSpatialBufferIdEXTkann an xrGetSpatialBufferVector3fEXT übergeben werden, um einen XrVector3f-Zwischenspeicher abzurufen.
Die Funktion xrGetSpatialBufferStringEXT ist so definiert:
XrResult xrGetSpatialBufferStringEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
char* buffer);
Parameterbeschreibungen
snapshotist ein Handle für ein XrSpatialSnapshotEXT .infoenthält die Informationen zum abzufragenden Puffer.bufferCapacityInputist die Kapazität des Arrays oder 0, um eine Anfrage zum Abrufen der erforderlichen Kapazität anzugeben.bufferCountOutputist die Anzahl der Zeichen oder die erforderliche Kapazität, fallsbufferCapacityInputnicht ausreicht.bufferist ein Array vonchar. Er kannNULLsein, wennbufferCapacityInput0 ist.- Eine detaillierte Beschreibung zum Abrufen der erforderlichen
buffer-Größe finden Sie im Abschnitt Parameter für die Puffergröße.
Die Anwendung kann die Daten für einen von einer Komponente bereitgestellten XrSpatialBufferEXT abrufen, wobei XrSpatialBufferEXT :: bufferType XR_SPATIAL_BUFFER_TYPE_STRING_EXT ist, indem xrGetSpatialBufferStringEXT verwendet wird.
Die Laufzeit muss XR_ERROR_VALIDATION_FAILURE zurückgeben, wenn der XrSpatialBufferTypeEXT für XrSpatialBufferGetInfoEXT :: bufferId nicht XR_SPATIAL_BUFFER_TYPE_STRING_EXT ist.
Die Laufzeit muss XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT zurückgeben, wenn XrSpatialBufferGetInfoEXT :: bufferId nicht zu snapshot gehört.
buffer, das von der Laufzeit ausgefüllt wird, muss ein nullterminierter UTF-8-String sein.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert sein, bevor xrGetSpatialBufferStringEXT aufgerufen wird. -
snapshotmuss ein gültiges XrSpatialSnapshotEXT-Handle sein -
infomuss ein Zeiger auf eine gültige XrSpatialBufferGetInfoEXT-Struktur sein. -
bufferCountOutputmuss ein Zeiger auf einenuint32_t-Wert sein - Wenn
bufferCapacityInputnicht0ist, mussbufferein Zeiger auf ein Array vonbufferCapacityInput-Zeichenwerten sein.
Rückgabecodes
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
Die Funktion xrGetSpatialBufferUint8EXT ist so definiert:
XrResult xrGetSpatialBufferUint8EXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
uint8_t* buffer);
Parameterbeschreibungen
snapshotist ein Handle für ein XrSpatialSnapshotEXT .infoenthält die Informationen zum abzufragenden Puffer.bufferCapacityInputist die Kapazität des Arrays oder 0, um eine Anfrage zum Abrufen der erforderlichen Kapazität anzugeben.bufferCountOutputist die Anzahl der Elemente imbuffer-Array oder die erforderliche Kapazität, fallsbufferCapacityInputnicht ausreicht.bufferist ein Array vonuint8_t. Er kannNULLsein, wennbufferCapacityInput0 ist.- Eine detaillierte Beschreibung zum Abrufen der erforderlichen
buffer-Größe finden Sie im Abschnitt Parameter für die Puffergröße.
Die Anwendung kann die Daten für einen von einer Komponente bereitgestellten XrSpatialBufferEXT abrufen, wobei XrSpatialBufferEXT :: bufferType XR_SPATIAL_BUFFER_TYPE_UINT8_EXT ist, indem xrGetSpatialBufferUint8EXT verwendet wird.
Die Laufzeit muss XR_ERROR_VALIDATION_FAILURE zurückgeben, wenn der XrSpatialBufferTypeEXT für XrSpatialBufferGetInfoEXT :: bufferId nicht XR_SPATIAL_BUFFER_TYPE_UINT8_EXT ist.
Die Laufzeit muss XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT zurückgeben, wenn XrSpatialBufferGetInfoEXT :: bufferId nicht zu snapshot gehört.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert sein, bevor xrGetSpatialBufferUint8EXT aufgerufen wird. -
snapshotmuss ein gültiges XrSpatialSnapshotEXT-Handle sein -
infomuss ein Zeiger auf eine gültige XrSpatialBufferGetInfoEXT-Struktur sein. -
bufferCountOutputmuss ein Zeiger auf einenuint32_t-Wert sein - Wenn
bufferCapacityInputnicht0ist, mussbufferein Zeiger auf ein Array vonbufferCapacityInput-uint8_t-Werten sein.
Rückgabecodes
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
Die Funktion xrGetSpatialBufferUint16EXT ist so definiert:
XrResult xrGetSpatialBufferUint16EXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
uint16_t* buffer);
Parameterbeschreibungen
snapshotist ein Handle für ein XrSpatialSnapshotEXT .infoenthält die Informationen zum abzufragenden Puffer.bufferCapacityInputist die Kapazität des Arrays oder 0, um eine Anfrage zum Abrufen der erforderlichen Kapazität anzugeben.bufferCountOutputist die Anzahl der Elemente imbuffer-Array oder die erforderliche Kapazität, fallsbufferCapacityInputnicht ausreicht.bufferist ein Array vonuint16_t. Er kannNULLsein, wennbufferCapacityInput0 ist.- Eine detaillierte Beschreibung zum Abrufen der erforderlichen
buffer-Größe finden Sie im Abschnitt Parameter für die Puffergröße.
Die Anwendung kann die Daten für einen von einer Komponente bereitgestellten XrSpatialBufferEXT abrufen, wobei XrSpatialBufferEXT :: bufferType XR_SPATIAL_BUFFER_TYPE_UINT16_EXT ist, indem xrGetSpatialBufferUint16EXT verwendet wird.
Die Laufzeit muss XR_ERROR_VALIDATION_FAILURE zurückgeben, wenn der XrSpatialBufferTypeEXT für XrSpatialBufferGetInfoEXT :: bufferId nicht XR_SPATIAL_BUFFER_TYPE_UINT16_EXT ist.
Die Laufzeit muss XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT zurückgeben, wenn XrSpatialBufferGetInfoEXT :: bufferId nicht zu snapshot gehört.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert sein, bevor xrGetSpatialBufferUint16EXT aufgerufen wird. -
snapshotmuss ein gültiges XrSpatialSnapshotEXT-Handle sein -
infomuss ein Zeiger auf eine gültige XrSpatialBufferGetInfoEXT-Struktur sein. -
bufferCountOutputmuss ein Zeiger auf einenuint32_t-Wert sein - Wenn
bufferCapacityInputnicht0ist, mussbufferein Zeiger auf ein Array vonbufferCapacityInput-uint16_t-Werten sein.
Rückgabecodes
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
Die Funktion xrGetSpatialBufferUint32EXT ist so definiert:
XrResult xrGetSpatialBufferUint32EXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
uint32_t* buffer);
Parameterbeschreibungen
snapshotist ein Handle für ein XrSpatialSnapshotEXT .infoenthält die Informationen zum abzufragenden Puffer.bufferCapacityInputist die Kapazität des Arrays oder 0, um eine Anfrage zum Abrufen der erforderlichen Kapazität anzugeben.bufferCountOutputist die Anzahl der Elemente imbuffer-Array oder die erforderliche Kapazität, fallsbufferCapacityInputnicht ausreicht.bufferist ein Array vonuint32_t. Er kannNULLsein, wennbufferCapacityInput0 ist.- Eine detaillierte Beschreibung zum Abrufen der erforderlichen
buffer-Größe finden Sie im Abschnitt Parameter für die Puffergröße.
Die Anwendung kann die Daten für einen von einer Komponente bereitgestellten XrSpatialBufferEXT abrufen, wobei XrSpatialBufferEXT :: bufferType XR_SPATIAL_BUFFER_TYPE_UINT32_EXT ist, indem xrGetSpatialBufferUint32EXT verwendet wird.
Die Laufzeit muss XR_ERROR_VALIDATION_FAILURE zurückgeben, wenn der XrSpatialBufferTypeEXT für XrSpatialBufferGetInfoEXT :: bufferId nicht XR_SPATIAL_BUFFER_TYPE_UINT32_EXT ist.
Die Laufzeit muss XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT zurückgeben, wenn XrSpatialBufferGetInfoEXT :: bufferId nicht zu snapshot gehört.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert sein, bevor xrGetSpatialBufferUint32EXT aufgerufen wird. -
snapshotmuss ein gültiges XrSpatialSnapshotEXT-Handle sein -
infomuss ein Zeiger auf eine gültige XrSpatialBufferGetInfoEXT-Struktur sein. -
bufferCountOutputmuss ein Zeiger auf einenuint32_t-Wert sein - Wenn
bufferCapacityInputnicht0ist, mussbufferein Zeiger auf ein Array vonbufferCapacityInput-uint32_t-Werten sein.
Rückgabecodes
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
Die Funktion xrGetSpatialBufferFloatEXT ist so definiert:
XrResult xrGetSpatialBufferFloatEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
float* buffer);
Parameterbeschreibungen
snapshotist ein Handle für ein XrSpatialSnapshotEXT .infoenthält die Informationen zum abzufragenden Puffer.bufferCapacityInputist die Kapazität des Arrays oder 0, um eine Anfrage zum Abrufen der erforderlichen Kapazität anzugeben.bufferCountOutputist die Anzahl der Elemente imbuffer-Array oder die erforderliche Kapazität, fallsbufferCapacityInputnicht ausreicht.bufferist ein Array vonfloat. Er kannNULLsein, wennbufferCapacityInput0 ist.- Eine detaillierte Beschreibung zum Abrufen der erforderlichen
buffer-Größe finden Sie im Abschnitt Parameter für die Puffergröße.
Die Anwendung kann die Daten für einen von einer Komponente bereitgestellten XrSpatialBufferEXT abrufen, wobei XrSpatialBufferEXT :: bufferType XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT ist, indem xrGetSpatialBufferFloatEXT verwendet wird.
Die Laufzeit muss XR_ERROR_VALIDATION_FAILURE zurückgeben, wenn der XrSpatialBufferTypeEXT für XrSpatialBufferGetInfoEXT :: bufferId nicht XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT ist.
Die Laufzeit muss XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT zurückgeben, wenn XrSpatialBufferGetInfoEXT :: bufferId nicht zu snapshot gehört.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert sein, bevor xrGetSpatialBufferFloatEXT aufgerufen wird. -
snapshotmuss ein gültiges XrSpatialSnapshotEXT-Handle sein -
infomuss ein Zeiger auf eine gültige XrSpatialBufferGetInfoEXT-Struktur sein. -
bufferCountOutputmuss ein Zeiger auf einenuint32_t-Wert sein - Wenn
bufferCapacityInputnicht0ist, mussbufferein Zeiger auf ein Array vonbufferCapacityInput-float-Werten sein.
Rückgabecodes
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
Die Funktion xrGetSpatialBufferVector2fEXT ist so definiert:
XrResult xrGetSpatialBufferVector2fEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
XrVector2f* buffer);
Parameterbeschreibungen
snapshotist ein Handle für ein XrSpatialSnapshotEXT .infoenthält die Informationen zum abzufragenden Puffer.bufferCapacityInputist die Kapazität des Arrays oder 0, um eine Anfrage zum Abrufen der erforderlichen Kapazität anzugeben.bufferCountOutputist die Anzahl der Elemente imbuffer-Array oder die erforderliche Kapazität, fallsbufferCapacityInputnicht ausreicht.bufferist ein Array von XrVector2f . Er kannNULLsein, wennbufferCapacityInput0 ist.- Eine detaillierte Beschreibung zum Abrufen der erforderlichen
buffer-Größe finden Sie im Abschnitt Parameter für die Puffergröße.
Die Anwendung kann die Daten für einen von einer Komponente bereitgestellten XrSpatialBufferEXT abrufen, wobei XrSpatialBufferEXT :: bufferType XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT ist, indem xrGetSpatialBufferVector2fEXT verwendet wird.
Die Laufzeit muss XR_ERROR_VALIDATION_FAILURE zurückgeben, wenn der XrSpatialBufferTypeEXT für XrSpatialBufferGetInfoEXT :: bufferId nicht XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT ist.
Die Laufzeit muss XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT zurückgeben, wenn XrSpatialBufferGetInfoEXT :: bufferId nicht zu snapshot gehört.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert sein, bevor xrGetSpatialBufferVector2fEXT aufgerufen wird. -
snapshotmuss ein gültiges XrSpatialSnapshotEXT-Handle sein -
infomuss ein Zeiger auf eine gültige XrSpatialBufferGetInfoEXT-Struktur sein. -
bufferCountOutputmuss ein Zeiger auf einenuint32_t-Wert sein - Wenn
bufferCapacityInputnicht0ist, mussbufferein Zeiger auf ein Array vonbufferCapacityInputXrVector2f-Strukturen sein.
Rückgabecodes
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
Die Funktion xrGetSpatialBufferVector3fEXT ist so definiert:
XrResult xrGetSpatialBufferVector3fEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
XrVector3f* buffer);
Parameterbeschreibungen
snapshotist ein Handle für ein XrSpatialSnapshotEXT .infoenthält die Informationen zum abzufragenden Puffer.bufferCapacityInputist die Kapazität des Arrays oder 0, um eine Anfrage zum Abrufen der erforderlichen Kapazität anzugeben.bufferCountOutputist die Anzahl der Elemente imbuffer-Array oder die erforderliche Kapazität, fallsbufferCapacityInputnicht ausreicht.bufferist ein Array von XrVector3f . Er kannNULLsein, wennbufferCapacityInput0 ist.- Eine detaillierte Beschreibung zum Abrufen der erforderlichen
buffer-Größe finden Sie im Abschnitt Parameter für die Puffergröße.
Die Anwendung kann die Daten für einen von einer Komponente bereitgestellten XrSpatialBufferEXT abrufen, wobei XrSpatialBufferEXT :: bufferType XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT ist, indem xrGetSpatialBufferVector3fEXT verwendet wird.
Die Laufzeit muss XR_ERROR_VALIDATION_FAILURE zurückgeben, wenn der XrSpatialBufferTypeEXT für XrSpatialBufferGetInfoEXT :: bufferId nicht XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT ist.
Die Laufzeit muss XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT zurückgeben, wenn XrSpatialBufferGetInfoEXT :: bufferId nicht zu snapshot gehört.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert sein, bevor xrGetSpatialBufferVector3fEXT aufgerufen wird. -
snapshotmuss ein gültiges XrSpatialSnapshotEXT-Handle sein -
infomuss ein Zeiger auf eine gültige XrSpatialBufferGetInfoEXT-Struktur sein. -
bufferCountOutputmuss ein Zeiger auf einenuint32_t-Wert sein - Wenn
bufferCapacityInputnicht0ist, mussbufferein Zeiger auf ein Array vonbufferCapacityInputXrVector3f-Strukturen sein.
Rückgabecodes
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
Die Struktur XrSpatialBufferGetInfoEXT ist so definiert:
typedef struct XrSpatialBufferGetInfoEXT {
XrStructureType type;
const void* next;
XrSpatialBufferIdEXT bufferId;
} XrSpatialBufferGetInfoEXT;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette.bufferIdeinXrSpatialBufferIdEXTfür den Zwischenspeicher, dessen Daten abgerufen werden sollen.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert sein, bevor XrSpatialBufferGetInfoEXT verwendet werden kann. -
typemussXR_TYPE_SPATIAL_BUFFER_GET_INFO_EXTsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein.
#define XR_NULL_SPATIAL_BUFFER_ID_EXT 0
XR_NULL_SPATIAL_BUFFER_ID_EXT ist ein reservierter Wert, der einen ungültigen XrSpatialBufferIdEXT darstellt. Er darf nur dann an API-Funktionen übergeben und von diesen zurückgegeben werden, wenn dies ausdrücklich zulässig ist.
Update-Snapshot erstellen
Die Funktion xrCreateSpatialUpdateSnapshotEXT ist so definiert:
XrResult xrCreateSpatialUpdateSnapshotEXT(
XrSpatialContextEXT spatialContext,
const XrSpatialUpdateSnapshotCreateInfoEXT* createInfo,
XrSpatialSnapshotEXT* snapshot);
Parameterbeschreibungen
spatialContextist ein XrSpatialContextEXT, der zuvor mit xrCreateSpatialContextAsyncEXT erstellt wurde.createInfoist ein Zeiger auf ein XrSpatialUpdateSnapshotCreateInfoEXT .snapshotist ein Zeiger auf das Ergebnis XrSpatialSnapshotEXT .
Die Anwendung kann xrCreateSpatialUpdateSnapshotEXT verwenden, um einen Snapshot zu erstellen und die neuesten Komponentendaten für bestimmte Entitäten abzurufen, die der Laufzeit bekannt sind. Anwendungen können die XrSpatialEntityEXT-Handles und die Komponententypen angeben, die sie beim Erstellen des Snapshots interessieren.
Die Anwendung kann XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes verwenden, um die Liste der Komponenten zu filtern, deren Daten im Snapshot enthalten sein müssen. Wenn die Anwendung eine gültige Liste von räumlichen Komponententypen in XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes bereitstellt, darf die Laufzeit nur räumliche Entitäten in den Snapshot aufnehmen, die mindestens eine der in XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes bereitgestellten Komponenten haben. Außerdem darf die Laufzeit nur Daten für diese Komponenten im Snapshot enthalten.
Die Laufzeit muss XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT zurückgeben, wenn einer der XrSpatialComponentTypeEXT in XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes nicht für die räumlichen Funktionen aktiviert ist, die beim Erstellen von spatialContext an XrSpatialContextCreateInfoEXT :: capabilityConfigs übergeben wurden.
Wenn die Anwendung keine Liste der räumlichen Komponententypen in XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes bereitstellt, muss die Laufzeit alle in XrSpatialUpdateSnapshotCreateInfoEXT :: entities aufgeführten räumlichen Entitäten in den Snapshot aufnehmen und die Daten für alle aktivierten Komponenten der für spatialContext konfigurierten Funktionen müssen enthalten sein.
Die Laufzeit darf keine räumlichen Entitäten enthalten, die nicht in XrSpatialUpdateSnapshotCreateInfoEXT :: entities in snapshot aufgeführt sind.
Die Anwendung kann beliebig viele Snapshots erstellen, muss jedoch den für jeden neuen Snapshot zugewiesenen Arbeitsspeicher berücksichtigen und die Snapshots löschen, sobald sie nicht mehr benötigt werden.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert werden, bevor xrCreateSpatialUpdateSnapshotEXT aufgerufen wird. -
spatialContextmuss ein gültiges XrSpatialContextEXT-Handle sein -
createInfomuss ein Zeiger auf eine gültige XrSpatialUpdateSnapshotCreateInfoEXT-Struktur sein -
snapshotmuss ein Zeiger auf ein XrSpatialSnapshotEXT-Handle sein
Rückgabecodes
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
Die Struktur XrSpatialUpdateSnapshotCreateInfoEXT ist so definiert:
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;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind weder in OpenXR noch in dieser Erweiterung definiert.entityCountist einuint32_t, der die Anzahl der Elemente im Arrayentitiesbeschreibt.entitiesist ein Array von XrSpatialEntityEXT, für die die Laufzeit die Komponentendaten in den Snapshot aufnehmen muss.componentTypeCountist einuint32_t, der die Anzahl der Elemente im ArraycomponentTypesbeschreibt.componentTypesist ein Array von XrSpatialComponentTypeEXT, für die die Laufzeit die Daten in den Snapshot aufnehmen muss.baseSpaceist der XrSpace, relativ zu dem sich alle Orte des Updates XrSpatialSnapshotEXT befinden.timeist derXrTime, an dem sich alle Orte des Updates XrSpatialSnapshotEXT befinden.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert werden, bevor XrSpatialUpdateSnapshotCreateInfoEXT verwendet werden kann. -
typemussXR_TYPE_SPATIAL_UPDATE_SNAPSHOT_CREATE_INFO_EXTsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein. -
entitiesmuss ein Zeiger auf ein Array vonentityCountgültigen XrSpatialEntityEXT-Handles sein. - Wenn
componentTypeCountnicht0ist, musscomponentTypesein Zeiger auf ein Array mitcomponentTypeCountgültigen XrSpatialComponentTypeEXT-Werten sein. -
baseSpacemuss ein gültiger XrSpace-Alias sein - Der Parameter
entityCountmuss größer als0sein. - Sowohl
baseSpaceals auch die Elemente vonentitiesmüssen aus derselben XrSession erstellt, zugewiesen oder abgerufen worden sein.
Snapshot löschen
Die Funktion xrDestroySpatialSnapshotEXT ist so definiert:
XrResult xrDestroySpatialSnapshotEXT(
XrSpatialSnapshotEXT snapshot);
Parameterbeschreibungen
snapshotist ein XrSpatialSnapshotEXT, der zuvor von xrCreateSpatialDiscoverySnapshotCompleteEXT oder xrCreateSpatialUpdateSnapshotEXT bereitgestellt wurde.
Die Anwendung kann xrDestroySpatialSnapshotEXT aufrufen, um das XrSpatialSnapshotEXT-Handle und die damit verknüpften Ressourcen zu löschen.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert sein, bevor xrDestroySpatialSnapshotEXT aufgerufen wird. -
snapshotmuss ein gültiges XrSpatialSnapshotEXT-Handle sein
Threadsicherheit
- Der Zugriff auf
snapshotund alle untergeordneten Handles muss extern synchronisiert werden.
Rückgabecodes
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
Allgemeine Komponenten
Begrenztes 2D
Komponentendaten
Die Struktur XrSpatialBounded2DDataEXT ist so definiert:
typedef struct XrSpatialBounded2DDataEXT {
XrPosef center;
XrExtent2Df extents;
} XrSpatialBounded2DDataEXT;
Mitgliederbeschreibungen
centerist ein XrPosef, der den geometrischen Mittelpunkt der begrenzten 2D-Komponente definiert.extentsist die Ausdehnung der begrenzten 2D-Komponente entlang der x-Achse (extents.width) und der y-Achse (extents.height), zentriert aufcenter.
Die extents des XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT beziehen sich auf die Größe des Elements in der x-y-Ebene des Koordinatensystems der Ebene. Eine Ebene mit der Position {0, 0, 0}, der Rotation {0, 0, 0, 1} (keine Rotation) und der Ausdehnung {1, 1} bezieht sich auf eine 1 m x 1 m große Ebene, die bei {0, 0, 0} zentriert ist und deren Normalenvektor der Vorderseite in die +Z-Richtung im Raum der Komponente zeigt.
X X Y Y Z Z Höhe Höhe Y Y Z Z X X Vertikale Ebene Vertikale Ebene Horizontale Ebene Horizontale Ebene Breite Breite Breite Breite Höhe Höhe
Abbildung 24: Bounded2D-Komponenten-Koordinatensystem
Hinweis
OpenXR verwendet eine X-Y-Ebene mit +Z als Normalenvektor, andere APIs können jedoch eine X-Z-Ebene mit +Y als Normalenvektor verwenden. Die X-Y-Ebene kann in eine X-Z-Ebene umgewandelt werden, indem sie um -π/2 Radiant um die +X-Achse gedreht wird.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert sein, bevor XrSpatialBounded2DDataEXT verwendet werden kann.
Komponentenlistenstruktur zum Abfragen von Daten
Die Struktur XrSpatialComponentBounded2DListEXT ist so definiert:
typedef struct XrSpatialComponentBounded2DListEXT {
XrStructureType type;
void* next;
uint32_t boundCount;
XrSpatialBounded2DDataEXT* bounds;
} XrSpatialComponentBounded2DListEXT;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind weder in OpenXR noch in dieser Erweiterung definiert.boundCountist einuint32_t, der die Anzahl der Elemente im Arrayboundsbeschreibt.boundsist ein Array von XrSpatialBounded2DDataEXT .
Die Laufzeit muss XR_ERROR_VALIDATION_FAILURE von xrQuerySpatialComponentDataEXT zurückgeben, wenn sich XrSpatialComponentBounded2DListEXT in der nächsten Kette von XrSpatialComponentDataQueryResultEXT :: next befindet, aber XrSpatialComponentDataQueryConditionEXT ::componentTypeCount nicht null ist und XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT nicht in XrSpatialComponentDataQueryConditionEXT :: componentTypes enthalten ist.
Die Laufzeit muss XR_ERROR_SIZE_INSUFFICIENT von xrQuerySpatialComponentDataEXT zurückgeben, wenn boundCount kleiner als XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput ist.
Wenn xrQuerySpatialComponentDataEXT :: snapshot aus xrCreateSpatialDiscoverySnapshotCompleteEXT erstellt wurde, muss die Laufzeit XrSpatialBounded2DDataEXT :: center in XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace und XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time bereitstellen.
Wenn xrQuerySpatialComponentDataEXT :: snapshot aus xrCreateSpatialUpdateSnapshotEXT erstellt wurde, muss die Laufzeit XrSpatialBounded2DDataEXT :: center in XrSpatialUpdateSnapshotCreateInfoEXT :: baseSpace und XrSpatialUpdateSnapshotCreateInfoEXT :: time bereitstellen.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert sein, bevor XrSpatialComponentBounded2DListEXT verwendet werden kann. -
typemussXR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXTsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein. -
boundsmuss ein Zeiger auf ein Array vonboundCountXrSpatialBounded2DDataEXT-Strukturen sein. - Der Parameter
boundCountmuss größer als0sein.
Konfiguration
Wenn XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT in XrSpatialCapabilityComponentTypesEXT :: componentTypes für eine bestimmte Funktion aufgeführt ist, kann die Anwendung sie aktivieren, indem sie den Enum-Wert in die Liste XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents aufnimmt. Für diese Komponente ist keine spezielle Konfiguration erforderlich, um in die nächste Kette von XrSpatialCapabilityConfigurationBaseHeaderEXT aufgenommen zu werden.
Begrenztes 3D-Modell
Komponentendaten
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT verwendet XrBoxf für seine Daten.
Komponentenlistenstruktur zum Abfragen von Daten
Die Struktur XrSpatialComponentBounded3DListEXT ist so definiert:
typedef struct XrSpatialComponentBounded3DListEXT {
XrStructureType type;
void* next;
uint32_t boundCount;
XrBoxf* bounds;
} XrSpatialComponentBounded3DListEXT;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind weder in OpenXR noch in dieser Erweiterung definiert.boundCountist einuint32_t, der die Anzahl der Elemente im Arrayboundsbeschreibt.boundsist ein Array von XrBoxf .
Die Laufzeit muss XR_ERROR_VALIDATION_FAILURE von xrQuerySpatialComponentDataEXT zurückgeben, wenn sich XrSpatialComponentBounded3DListEXT in der nächsten Kette von XrSpatialComponentDataQueryResultEXT :: next befindet, aber XrSpatialComponentDataQueryConditionEXT ::componentTypeCount nicht null ist und XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT nicht in XrSpatialComponentDataQueryConditionEXT :: componentTypes enthalten ist.
Die Laufzeit muss XR_ERROR_SIZE_INSUFFICIENT von xrQuerySpatialComponentDataEXT zurückgeben, wenn boundCount kleiner als XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput ist.
Wenn xrQuerySpatialComponentDataEXT :: snapshot aus xrCreateSpatialDiscoverySnapshotCompleteEXT erstellt wurde, muss die Laufzeit XrBoxf :: center in XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace bei XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time bereitstellen.
Wenn xrQuerySpatialComponentDataEXT :: snapshot aus xrCreateSpatialUpdateSnapshotEXT erstellt wurde, muss die Laufzeit XrBoxf :: center in XrSpatialUpdateSnapshotCreateInfoEXT :: baseSpace bei XrSpatialUpdateSnapshotCreateInfoEXT :: time bereitstellen.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert werden, bevor XrSpatialComponentBounded3DListEXT verwendet werden kann. -
typemussXR_TYPE_SPATIAL_COMPONENT_BOUNDED_3D_LIST_EXTsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein. -
boundsmuss ein Zeiger auf ein Array vonboundCountXrBoxf-Strukturen sein. - Der Parameter
boundCountmuss größer als0sein.
Konfiguration
Wenn XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT in XrSpatialCapabilityComponentTypesEXT :: componentTypes für eine Funktion aufgeführt ist, kann die Anwendung sie aktivieren, indem sie das Enum in die Liste XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents aufnimmt. Für diese Komponente ist keine spezielle Konfiguration erforderlich, um in die nächste Kette von XrSpatialCapabilityConfigurationBaseHeaderEXT aufgenommen zu werden.
Elternteil
Komponentendaten
XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT verwendet XrSpatialEntityIdEXT für seine Daten.
Komponentenlistenstruktur zum Abfragen von Daten
Die Struktur XrSpatialComponentParentListEXT ist so definiert:
typedef struct XrSpatialComponentParentListEXT {
XrStructureType type;
void* next;
uint32_t parentCount;
XrSpatialEntityIdEXT* parents;
} XrSpatialComponentParentListEXT;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind weder in OpenXR noch in dieser Erweiterung definiert.parentCountist einuint32_t, der die Anzahl der Elemente im Arrayparentsbeschreibt.parentsist ein Array vonXrSpatialEntityIdEXT.
Die Laufzeit muss XR_ERROR_VALIDATION_FAILURE von xrQuerySpatialComponentDataEXT zurückgeben, wenn sich XrSpatialComponentParentListEXT in der nächsten Kette von XrSpatialComponentDataQueryResultEXT :: next befindet, aber XrSpatialComponentDataQueryConditionEXT ::componentTypeCount nicht null ist und XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT nicht in XrSpatialComponentDataQueryConditionEXT :: componentTypes enthalten ist.
Die Laufzeit muss XR_ERROR_SIZE_INSUFFICIENT von xrQuerySpatialComponentDataEXT zurückgeben, wenn parentCount kleiner als XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput ist.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert sein, bevor XrSpatialComponentParentListEXT verwendet werden kann. -
typemussXR_TYPE_SPATIAL_COMPONENT_PARENT_LIST_EXTsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein. -
parentsmuss ein Zeiger auf ein Array vonparentCountXrSpatialEntityIdEXT-Werten sein. - Der Parameter
parentCountmuss größer als0sein.
Konfiguration
Wenn XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT in XrSpatialCapabilityComponentTypesEXT :: componentTypes für eine Funktion aufgeführt ist, kann die Anwendung sie aktivieren, indem sie das Enum in die Liste XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents aufnimmt. Für diese Komponente ist keine spezielle Konfiguration erforderlich, um in die nächste Kette von XrSpatialCapabilityConfigurationBaseHeaderEXT aufgenommen zu werden.
Mesh 3D
Komponentendaten
Die Struktur XrSpatialMeshDataEXT ist so definiert:
typedef struct XrSpatialMeshDataEXT {
XrPosef origin;
XrSpatialBufferEXT vertexBuffer;
XrSpatialBufferEXT indexBuffer;
} XrSpatialMeshDataEXT;
Mitgliederbeschreibungen
originist ein XrPosef, der den Ursprung des Mesh definiert. Alle Eckpunkte des Mesh-Netzwerks müssen relativ zu diesem Ursprung sein.vertexBufferist ein XrSpatialBufferEXT, der die ID für einen Zwischenspeicher bereitstellt, der den Vertex-Zwischenspeicher der Entität darstellt, auf der sich diese Komponente befindet. Die Position der Eckpunkte muss relativ zuoriginsein.indexBufferist ein XrSpatialBufferEXT, der die ID für einen Zwischenspeicher bereitstellt, der ein Array von Dreiecksindexen darstellt, die die Indexe der Mesh-Scheitelpunkte invertexBufferangeben. Die Dreiecksindizes müssen gegen den Uhrzeigersinn zurückgegeben werden. Drei Indizes bezeichnen ein Dreieck.
Der Komponententyp, der XrSpatialMeshDataEXT verwendet, muss den XrSpatialBufferTypeEXT von vertexBuffer und indexBuffer angeben.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert werden, bevor XrSpatialMeshDataEXT verwendet werden kann. -
vertexBuffermuss eine gültige XrSpatialBufferEXT-Struktur sein -
indexBuffermuss eine gültige XrSpatialBufferEXT-Struktur sein
Komponentenlistenstruktur zum Abfragen von Daten
Die Struktur XrSpatialComponentMesh3DListEXT ist so definiert:
typedef struct XrSpatialComponentMesh3DListEXT {
XrStructureType type;
void* next;
uint32_t meshCount;
XrSpatialMeshDataEXT* meshes;
} XrSpatialComponentMesh3DListEXT;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette.meshCountist einuint32_t, der die Anzahl der Elemente im Arraymeshesbeschreibt.meshesist ein Array von XrSpatialMeshDataEXT .
Die Anwendung kann die 3D-Mesh-Komponente der räumlichen Entitäten in einem XrSpatialSnapshotEXT abfragen, indem sie XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT in XrSpatialComponentDataQueryConditionEXT :: componentTypes hinzufügt und XrSpatialComponentMesh3DListEXT zur nächsten Zeigerkette von XrSpatialComponentDataQueryResultEXT hinzufügt.
Die Laufzeit muss XR_ERROR_VALIDATION_FAILURE von xrQuerySpatialComponentDataEXT zurückgeben, wenn XrSpatialComponentMesh3DListEXT in der nächsten Kette von XrSpatialComponentDataQueryResultEXT :: next enthalten ist, aber XrSpatialComponentDataQueryConditionEXT ::componentTypeCount nicht null ist und XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT nicht in XrSpatialComponentDataQueryConditionEXT :: componentTypes enthalten ist.
Die Laufzeit muss XR_ERROR_SIZE_INSUFFICIENT von xrQuerySpatialComponentDataEXT zurückgeben, wenn meshCount kleiner als XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput ist.
Für die XrSpatialMeshDataEXT, die von der Laufzeit im meshes-Array ausgefüllt werden, muss XrSpatialBufferEXT :: bufferType für XrSpatialMeshDataEXT :: vertexBuffer XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT sein und XrSpatialBufferEXT :: bufferType für XrSpatialMeshDataEXT :: indexBuffer muss XR_SPATIAL_BUFFER_TYPE_UINT32_EXT sein.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert werden, bevor XrSpatialComponentMesh3DListEXT verwendet werden kann. -
typemussXR_TYPE_SPATIAL_COMPONENT_MESH_3D_LIST_EXTsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein. -
meshesmuss ein Zeiger auf ein Array vonmeshCountXrSpatialMeshDataEXT-Strukturen sein - Der Parameter
meshCountmuss größer als0sein.
Konfiguration
Wenn XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT in XrSpatialCapabilityComponentTypesEXT :: componentTypes für eine bestimmte Funktion aufgeführt ist, kann die Anwendung sie aktivieren, indem sie das Enum in die Liste XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents der von XrSpatialCapabilityConfigurationBaseHeaderEXT abgeleiteten Struktur der Funktion aufnimmt, die diese Komponente unterstützt.
Für diese Komponente ist keine spezielle Konfiguration erforderlich, um in die nächste Kette von XrSpatialCapabilityConfigurationBaseHeaderEXT aufgenommen zu werden.
Filter für den Tracking-Status
Die Struktur XrSpatialFilterTrackingStateEXT ist so definiert:
typedef struct XrSpatialFilterTrackingStateEXT {
XrStructureType type;
const void* next;
XrSpatialEntityTrackingStateEXT trackingState;
} XrSpatialFilterTrackingStateEXT;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette.trackingStateist der XrSpatialEntityTrackingStateEXT, auf den die Anwendung den Filter anwenden möchte.
Die Anwendung kann XrSpatialFilterTrackingStateEXT in der nächsten Kette von XrSpatialDiscoverySnapshotCreateInfoEXT verwenden, um die Erkennung auf Entitäten zu beschränken, deren Tracking-Status trackingState ist.
Die Anwendung kann XrSpatialFilterTrackingStateEXT in der nächsten Kette von XrSpatialComponentDataQueryConditionEXT verwenden, um die Komponentendatenabfrage aus einem Snapshot nur auf Entitäten zu beschränken, deren Tracking-Status trackingState ist.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert werden, bevor XrSpatialFilterTrackingStateEXT verwendet werden kann. -
typemussXR_TYPE_SPATIAL_FILTER_TRACKING_STATE_EXTsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein. -
trackingStatemuss ein gültiger XrSpatialEntityTrackingStateEXT-Wert sein
Beispielcode
Anwendungsnutzung
Anwendungen verwenden die Erweiterung für räumliche Entitäten in der Regel nach dem folgenden Muster:
- Eine Anwendung listet zuerst die räumlichen Funktionen des Systems mit xrEnumerateSpatialCapabilitiesEXT auf. Anschließend wird das zurückgegebene Array von XrSpatialCapabilityEXT geprüft und die Komponenten und Funktionen, die für jede dieser Funktionen unterstützt werden, werden mit xrEnumerateSpatialCapabilityComponentTypesEXT bzw. xrEnumerateSpatialCapabilityFeaturesEXT aufgezählt. So erhält die Anwendung ein vollständiges Bild der Komponenten, die sie aktivieren kann, und der Konfigurationen, die die Funktion akzeptiert.
- Die Anwendung erstellt dann ein oder mehrere XrSpatialContextEXT-Handles mit bestimmten Konfigurationen für räumliche Funktionen. Diese Konfigurationen aktivieren und konfigurieren eine bestimmte Funktion im räumlichen Kontext und aktivieren und konfigurieren Komponenten für diese Funktionen.
- Für jeden XrSpatialContextEXT wartet die Anwendung auf XrEventDataSpatialDiscoveryRecommendedEXT-Ereignisse für diesen XrSpatialContextEXT, bevor sie xrCreateSpatialDiscoverySnapshotAsyncEXT verwendet, um räumliche Entitäten zu finden. Sobald dieser asynchrone Vorgang abgeschlossen ist, erhält die Anwendung ein XrSpatialSnapshotEXT-Handle.
- Die Anwendung fragt die Entitäten und die Komponentendaten in diesem XrSpatialSnapshotEXT mithilfe von xrQuerySpatialComponentDataEXT ab. Die Anwendung liest die neuesten Komponentendaten der abgefragten Entitäten aus Strukturen, die an die nächste Kette von XrSpatialComponentDataQueryResultEXT angehängt sind, wenn der Entitätsstatus
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXTist. - Wenn es bestimmte Entitäten gibt, die die Anwendung als interessant identifiziert und für die sie im Laufe der Zeit Updates erhalten möchte, erstellt sie mit xrCreateSpatialEntityFromIdEXT XrSpatialEntityEXT-Handles für diese Entitäten. Die Anwendung erhält Updates für solche interessanten Entitäten mithilfe von xrCreateSpatialUpdateSnapshotEXT und verwendet dieselbe xrQuerySpatialComponentDataEXT-Funktion für den neu erstellten XrSpatialSnapshotEXT, um die neuesten Komponentendaten für diese Entitäten abzurufen.
Räumliche Entitäten entdecken und Komponentendaten abfragen
Der folgende Beispielcode zeigt, wie Sie räumliche Entitäten für die Funktion „Foo“ ermitteln und die zugehörigen Komponentendaten abfragen.
/****************************/
/* 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));
Pufferdaten abfragen
Der folgende Beispielcode zeigt, wie Sie die Daten einer Komponente abrufen, die einen XrSpatialBufferEXT bereitstellt.
/****************************/
/* 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.
}
}
Richtlinien für Erweiterungen
Wenn eine Erweiterung einen neuen XrSpatialComponentTypeEXT definiert, der zusätzliche Daten zu einer räumlichen Entität bereitstellt,
- Die Erweiterung muss auch eine Listenstruktur für diese Komponente definieren, damit die Anwendung ein Array an die Laufzeit übergeben kann, das mit den Daten für jede der räumlichen Entitäten gefüllt wird, die xrQuerySpatialComponentDataEXT ::
queryConditionerfüllen. Beispiele für solche Listenstrukturen sind XrSpatialComponentParentListEXT und XrSpatialComponentBounded2DListEXT . Wenn die Datengröße der Komponente variabel ist und die Anwendung das Two-Call-Idiom verwenden muss, um sie abzufragen, sollten die Komponentendaten einen XrSpatialBufferEXT für alle Daten mit variabler Größe in der Listenstruktur bereitstellen und es muss der XrSpatialBufferTypeEXT für jeden Zwischenspeicher angegeben werden. Die Anwendung kann dann die Pufferdaten mit Funktionen abfragen, die unter Zwei-Aufruf-Idiom für Komponentendaten definiert sind. Ein Beispiel für eine solche Struktur ist XrSpatialMeshDataEXT, die in XrSpatialComponentMesh3DListEXT enthalten ist. - Die Erweiterung kann auch Strukturen bereitstellen, die die Anwendung mit XrSpatialComponentDataQueryConditionEXT ::
nextverketten kann, um zusätzliche Filter für die Abfrage der Daten dieser Komponente bereitzustellen.
- Die Erweiterung muss auch eine Listenstruktur für diese Komponente definieren, damit die Anwendung ein Array an die Laufzeit übergeben kann, das mit den Daten für jede der räumlichen Entitäten gefüllt wird, die xrQuerySpatialComponentDataEXT ::
Erweiterungen können Strukturen definieren, die XrSpatialDiscoverySnapshotCreateInfoEXT erweitern, um zusätzliche Filter für die Erkennung bereitzustellen. Die Filter zum Erstellen des Snapshots dürfen die Konfiguration des räumlichen Kontexts nicht beeinflussen. Sie sollen stattdessen verwendet werden, um der Laufzeit Hinweise darauf zu geben, welche Entitäten und Daten in den Snapshot aufgenommen werden sollen, wie es von der aktuellen Konfiguration des räumlichen Kontexts (und damit der aktuellen Konfiguration der zugrunde liegenden Dienste) erfasst wird.
Wenn eine Erweiterung eine neue XrSpatialCapabilityEXT definiert,
- Außerdem sollte sie die Liste der XrSpatialComponentTypeEXT angeben, die die Laufzeiten für diese Funktion auf Entitäten bereitstellen müssen.
- muss sie auch Strukturen bereitstellen, die von XrSpatialCapabilityConfigurationBaseHeaderEXT abgeleitet sind und die Konfiguration dieser Funktion ermöglichen.
Wenn eine Erweiterung ein neues XrSpatialCapabilityFeatureEXT definiert, muss sie auch eine entsprechende Konfigurationsstruktur definieren, die mit dem nächsten Zeiger von XrSpatialCapabilityConfigurationBaseHeaderEXT verkettet werden kann. Die Anwendung kann diese Struktur verwenden, um die Funktion beim Erstellen eines XrSpatialContextEXT zu aktivieren.
Eine Erweiterung, die eine neue XrSpatialCapabilityEXT definiert, sollte dieser Vorlage für die Spezifikation folgen:
- Übersicht
- Laufzeitunterstützung
- Konfiguration
- Garantierte Komponenten
- Beispiel-Code
Eine Erweiterung, die einen neuen XrSpatialComponentTypeEXT definiert, sollte dieser Vorlage für die Spezifikation folgen:
- Komponentendaten
- Komponentenlistenstruktur zum Abfragen von Daten
- Konfiguration
Wenn Sie eine API schreiben, die der Anwendung einen
XrSpatialBufferIdEXTbereitstellt, muss sie von einem XrSpatialBufferTypeEXT begleitet werden, um die Anwendung über den Datentyp des Puffers zu informieren. Die Anwendung kann dann eine entsprechendexrGetSpatialBuffer*-Funktion verwenden, um den tatsächlichen Inhalt des Puffers abzurufen.
Richtlinien für das Design und die Erweiterung semantischer Labels
Diese Erweiterung definiert zwar keine Komponente zur Übermittlung der semantischen Labelinformationen einer Entität, legt aber die Designregeln und Richtlinien für alle Erweiterungen fest, die eine solche Komponente definieren. Im folgenden Text schränken „sollte“ und „muss“ die Autoren solcher Funktionen ein, nicht jedoch eine Laufzeitimplementierung oder eine Anwendung, die die API verwendet.
- Wenn eine Erweiterung semantische Labels für eine XrSpatialCapabilityEXT definiert, sollte sie dies tun, indem sie einen neuen XrSpatialComponentTypeEXT sowie eine neue Aufzählung mit einer Reihe von Labels (ein „semantisches Labelset“) als Daten für diese Komponente definiert.
- Eine Aufzählung, die einen semantischen Labelsatz darstellt, muss einen Wert haben, der angibt, dass die Entität keinem der Labels dieses Satzes zugeordnet ist. Der Name dieses Enumeranten muss „UNCATEGORIZED“ enthalten, z.B.
XR_SPATIAL_PLANE_SEMANTIC_LABEL_UNCATEGORIZED_EXT. Dieser Wert gibt Anwendungen an, dass die Laufzeit diese Entität erkennt, es aber andere semantische Labelsets gibt, in denen diese Entität kategorisiert ist. - Die Aufzählung dieses neu definierten XrSpatialComponentTypeEXT in xrEnumerateSpatialCapabilityComponentTypesEXT bedeutet, dass die Laufzeit die semantischen Labels (und damit die im Set definierten Labels) unterstützt, die diesem Komponententyp entsprechen.
- Anwendungen geben an, dass sie Entitäten mit Labels aus diesem semantischen Labelset erkennen möchten, indem sie den entsprechenden XrSpatialComponentTypeEXT in das Array XrSpatialCapabilityConfigurationBaseHeaderEXT ::
enabledComponentsder Konfigurationsstruktur für die Funktion einfügen, für die der Komponententyp aufgezählt wird. - Es ist möglich, dass eine einzelne räumliche Entität mehrere Komponenten hat, die jeweils ein Label aus ihrem eigenen semantischen Labelset bereitstellen. Sehen wir uns das folgende Beispiel mit einigen hypothetischen semantischen Label-Sets an:
XrSpatialObjectSemanticLabel, die Werte wie Stuhl, Sofa, Tisch usw. haben könnten.XrSpatialSofaBrandmit Werten wie IKEA, Wayfair usw. undXrSpatialIkeaSofamit bestimmten IKEA-Modellnamen von Sofas. In diesem Szenario hat dieselbe Sofa-Entität alle drei Komponenten (Labels aus allen drei semantischen Label-Sets), die jeweils einen anderen Detaillierungsgrad der Informationen über die Entität liefern. - Wenn eine Erweiterung einen neuen XrSpatialComponentTypeEXT definiert, der einen neuen Satz semantischer Labels mit mehreren Labels zusätzlich zum Label
UNCATEGORIZEDbereitstellt, sollte die Erweiterung in Betracht ziehen, ein XrSpatialCapabilityFeatureEXT zu definieren, mit dem Anwendungen nur eine Teilmenge der Labels aktivieren können, die im Satz semantischer Labels für diesen Komponententyp definiert sind. Diese Teilmenge, die in der nächsten Kette der Funktionskonfiguration bereitgestellt wird, dient als Hinweis für Laufzeiten, ihre Tracking-Pipelines zu optimieren und nur die bereitgestellte Teilmenge zu verfolgen. Ein Beispiel für eine solche Feature-Struktur finden Sie unten . - Erweiterungen dürfen keine Labels zu vorhandenen semantischen Label-Set-Aufzählungen hinzufügen. Stattdessen müssen sie eine neue Aufzählung definieren, die neben den neu hinzugefügten Aufzählungswerten auch gleichwertige Aufzählungswerte mit identischer Semantik und Werten enthält, die denen aus dem anderen Satz entsprechen. Die Spezifikation des neu definierten Satzes semantischer Labels muss auch die Zuordnung zwischen dem alten und dem neuen Satz von Labels herstellen. Beispiel unten
Beispiel für die Definition eines räumlichen Merkmals für eine Teilmenge semantischer Labels
// 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;
Beispiel für eine Erweiterung für räumliche semantische Labels
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;
Sehen wir uns das obige Beispiel an, in dem eine Erweiterung eine Aufzählung XrSpatialExamplePlaneSemanticLabelExtensionEXT definiert, um die vorhandene XrSpatialPlaneSemanticLabelEXT um Werte für Türen und Fenster zu erweitern. Die Spezifikation für die neue Aufzählung muss Text im folgenden Format enthalten:
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
|====
Neue Makros
Neue Gestellarten
XrSpatialBufferIdEXTXrSpatialEntityIdEXT
Neue Objekttypen
Neue Befehle
- xrCreateSpatialContextAsyncEXT
- xrCreateSpatialContextCompleteEXT
- xrCreateSpatialDiscoverySnapshotAsyncEXT
- xrCreateSpatialDiscoverySnapshotCompleteEXT
- xrCreateSpatialEntityFromIdEXT
- xrCreateSpatialUpdateSnapshotEXT
- xrDestroySpatialContextEXT
- xrDestroySpatialEntityEXT
- xrDestroySpatialSnapshotEXT
- xrEnumerateSpatialCapabilitiesEXT
- xrEnumerateSpatialCapabilityComponentTypesEXT
- xrEnumerateSpatialCapabilityFeaturesEXT
- xrGetSpatialBufferFloatEXT
- xrGetSpatialBufferStringEXT
- xrGetSpatialBufferUint16EXT
- xrGetSpatialBufferUint32EXT
- xrGetSpatialBufferUint8EXT
- xrGetSpatialBufferVector2fEXT
- xrGetSpatialBufferVector3fEXT
- xrQuerySpatialComponentDataEXT
Neue Gebäude
- XrCreateSpatialContextCompletionEXT
- XrCreateSpatialDiscoverySnapshotCompletionEXT
- XrCreateSpatialDiscoverySnapshotCompletionInfoEXT
- XrEventDataSpatialDiscoveryRecommendedEXT
- XrSpatialBounded2DDataEXT
- XrSpatialBufferEXT
- XrSpatialBufferGetInfoEXT
- XrSpatialCapabilityComponentTypesEXT
- XrSpatialCapabilityConfigurationBaseHeaderEXT
- XrSpatialComponentDataQueryConditionEXT
- XrSpatialComponentDataQueryResultEXT
- XrSpatialContextCreateInfoEXT
- XrSpatialDiscoverySnapshotCreateInfoEXT
- XrSpatialEntityFromIdCreateInfoEXT
- XrSpatialMeshDataEXT
- XrSpatialUpdateSnapshotCreateInfoEXT
Erweiterung von XrSpatialComponentDataQueryResultEXT :
Erweiterung von XrSpatialDiscoverySnapshotCreateInfoEXT , XrSpatialComponentDataQueryConditionEXT :
Neue Enums
- XrSpatialBufferTypeEXT
- XrSpatialCapabilityEXT
- XrSpatialCapabilityFeatureEXT
- XrSpatialComponentTypeEXT
- XrSpatialEntityTrackingStateEXT
Neue Enum-Konstanten
XR_EXT_SPATIAL_ENTITY_EXTENSION_NAMEXR_EXT_spatial_entity_SPEC_VERSIONErweiterung von XrObjectType :
XR_OBJECT_TYPE_SPATIAL_CONTEXT_EXTXR_OBJECT_TYPE_SPATIAL_ENTITY_EXTXR_OBJECT_TYPE_SPATIAL_SNAPSHOT_EXT
Erweiterung von 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
Erweiterung von 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
Probleme
Leitet sich eine einzelne Entität immer nur von einer einzigen Fähigkeit ab?
- Behoben
- Antwort: Nein. Das hängt vollständig von der Laufzeit ab, basierend auf ihren eigenen Tracking-Funktionen und wie sie eine erkannte Entität darstellen möchte. Die Spezifikation schreibt keine bestimmte Darstellung von räumlichen Entitäten vor, mit Ausnahme der garantierten Komponenten einer bestimmten Funktion, um eine Mindesterwartung festzulegen. Eine Laufzeit kann Entitäten, die von separaten Funktionen erkannt wurden, zusammenführen und als einzelne Entität mit den garantierten Komponenten aller Funktionen darstellen, die zu ihrer Identifizierung beigetragen haben. Ein Beispiel hierfür wäre, dass Tische sowohl durch eine Funktion zur Ebenenerkennung als auch durch eine Funktion zur Objekterkennung erkannt werden können. Dabei stellt die Ebenenerkennung die Komponente
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTfür die Entität und die Objekterkennung die KomponenteXR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXTbereit. Eine bestimmte Laufzeit kann die Tabelle als zwei separate Entitäten bereitstellen, die jeweils einen eigenen Satz garantierter Komponenten haben. Bestimmte Laufzeiten können aber auch nur eine Entität zur Darstellung der Tabelle bereitstellen und sowohlXR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTals auchXR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXTin derselben Entität enthalten. Wichtig ist hierbei, dass eine bestimmte räumliche Entität höchstens eine einzige Komponente eines bestimmten Komponententyps haben kann. Wenn die von den verschiedenen Funktionen erzeugten Komponentendaten für eine bestimmte Entität in Konflikt stehen, muss die Laufzeit sie daher als zwei separate Entitäten darstellen.
Versionsverlauf
Version 1, 12.04.2024 (Nihav Jain, Google)
- Anfängliche Beschreibung der Erweiterung