XR_EXT_spatial_entity

Name String

XR_EXT_spatial_entity

Erweiterungstyp

Instanzerweiterung

Registrierte Durchwahlnummer

741

Revision

1

Ratification Status (Status der Ratifizierung)

Ratifiziert

Abhängigkeiten von Erweiterungen und Versionen

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

Diese Erweiterung führt die Konzepte und Grundlagen für das Erkennen von Szenen und räumliches Denken in OpenXR ein. Dadurch werden mehrere zusammenhängende, aber unterschiedliche Funktionsbereiche vereinheitlicht, die gemäß dieser Erweiterung auf weitgehend einheitliche Weise aufgelistet, konfiguriert und verwendet werden. Da diese Erweiterung keine konkreten Definitionen für einen dieser Funktionsbereiche enthält, ist der formale Spezifikationstext eher abstrakt. Die in diesem Erweiterungsspezifikationstext enthaltenen Beispiele beziehen sich manchmal auf Funktionen, die in einer bevorstehenden oder hypothetischen zugehörigen Erweiterung definiert sind. Dies dient nur der Veranschaulichung und schränkt solche zusätzlichen Funktionen nicht ein oder legt sie nicht fest.

Die wichtigsten Teile dieser Erweiterung sind:

  • Räumliche Einheiten : Die Funktionalität dreht sich um Einheiten , die für sich genommen nur sehr wenige Funktionen bieten.
  • Räumliche Komponenten : Diese Einheiten sind mit Komponenten verknüpft, die Daten und Verhaltensweisen bereitstellen.
  • Räumliche Komponententypen : Jede räumliche Komponente hat einen bestimmten Komponententyp. Jede Entität hat höchstens eine Komponente eines bestimmten Komponententyps.
  • Räumlicher Kontext : Alle Interaktionen mit räumlichen Einheiten erfolgen in einem Kontext nach einer Initialisierungs- und Konfigurationsphase.
  • Räumliche Funktionen : Die Bearbeitung räumlicher Einheiten wird weitgehend durch Funktionen bereitgestellt . Eine Funktionseinheit, z. B. anwendungsdefinierte Anker, Erkennung von Ebenen oder Bild-Tracking. Jede Funktion wird in der Regel in einer separaten Erweiterung definiert (wie gewohnt bei der Instanzerstellung aktiviert) und zum Zeitpunkt der Erstellung für einen bestimmten Kontext aktiviert.
  • Jede Funktion ist einer Reihe von Komponententypen zugeordnet, 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 („garantiert“) sind. Dieselbe oder andere Erweiterungen können optionale Komponententypen angeben, die von einigen potenziellen Implementierungen bereitgestellt werden. Eine beliebige Anzahl von Capabilities kann Entitäten mit Komponenten eines bestimmten Komponententyps bereitstellen, die unabhängig von der Capability, die sie erzeugt hat, einheitlich verwendet werden können.
  • Funktionen für räumliche Fähigkeiten : Einige Funktionen erfordern eine Konfiguration und werden daher durch Funktionen für Fähigkeiten parametrisiert .

Diese Erweiterung bietet einen Mechanismus zum Auflisten der Komponenten, die von jeder Funktion bereitgestellt werden, die auf dem aktuellen System unterstützt wird. Dies gilt sowohl für die obligatorischen als auch für die optionalen Komponenten.

Da für einige Implementierungen möglicherweise unterschiedliche Parametrisierungsgrade für Funktionen erforderlich sind, bietet diese Erweiterung einen Mechanismus zum Auflisten der unterstützten Funktionsmerkmale, die mit einer bestimmten Funktion im aktuellen System verknüpft sind.

Diese Erweiterung definiert auch mehrere gängige Komponenten, die voraussichtlich für eine Vielzahl von Funktionen verwendet werden .

Räumliche Einheit

Räumliche Einheiten sind Einheiten, die in einem bestimmten Raum existieren und deren zugehörige Daten in Komponenten organisiert sind. Sie können Folgendes sein:

  • Physisch (z.B. planare Oberflächen wie Wände und Böden, Objekte wie Stühle und Bücherregale usw.)
  • virtuell (z.B. Inhalte, die von einer anderen Anwendung oder einem anderen Nutzer platziert und geteilt werden)
  • App-definiert (z.B. wenn eine App einen Bereich als „Wohnzimmer“ oder „Küche“ oder einen Punkt als Standort für den Fernseher usw. markiert)

Elemente, die über das Aktionssystem verfügbar gemacht werden, z. B. Controller oder Blicksteuerung, sollten nicht als räumliche Einheiten modelliert werden.

Räumliche Entitäten in OpenXR werden als Entity-Component-System modelliert . Jede räumliche Einheit hat eine Reihe von Komponenten, die jeweils einen eindeutigen Satz von Daten und Verhaltensweisen für diese Einheit bereitstellen.

Räumliche Entitäten werden entweder durch ein XrSpatialEntityIdEXT-Atom oder ein XrSpatialEntityEXT-Handle dargestellt. Details dazu finden Sie im Abschnitt Spatial Entity Representations.

Räumliche Komponententypen

Eine räumliche Einheit hat eine oder mehrere Komponenten, die Daten oder Verhaltensweisen für diese Einheit bereitstellen. Unter Common Components finden Sie einige gängige Komponenten, die von dieser 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_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialComponentTypeEXT;

Die Enumeration XrSpatialComponentTypeEXT identifiziert die verschiedenen Arten von Komponenten, 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 in der Dokumentation beschrieben.

Die Enumeratoren haben die folgenden Werte:

Enum-Beschreibung

XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT

Komponente, die die 2D-Begrenzungen für eine räumliche Einheit bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentBounded2DListEXT und die entsprechende Datenstruktur ist XrSpatialBounded2DDataEXT.

XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT

Komponente, die die 3D-Begrenzungen für eine räumliche Einheit bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentBounded3DListEXT. Die entsprechende Datenstruktur ist 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 Einheit bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentMesh3DListEXT. Die entsprechende Datenstruktur ist XrSpatialMeshDataEXT.

XR_SPATIAL_COMPONENT_TYPE_PLANE_ALIGNMENT_EXT

Komponente, die die Enumeration für die Ausrichtung der Ebene für eine räumliche Einheit bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentPlaneAlignmentListEXT. Die entsprechende Datenstruktur ist XrSpatialPlaneAlignmentEXT (hinzugefügt durch die XR_EXT_spatial_plane_tracking-Erweiterung).

XR_SPATIAL_COMPONENT_TYPE_MESH_2D_EXT

Komponente, die ein 2D-Mesh für eine räumliche Einheit bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentMesh2DListEXT. Die entsprechende Datenstruktur ist XrSpatialMeshDataEXT (hinzugefügt durch die Erweiterung XR_EXT_spatial_plane_tracking).

XR_SPATIAL_COMPONENT_TYPE_POLYGON_2D_EXT

Komponente, die ein 2D-Begrenzungspolygon für eine räumliche Einheit bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentPolygon2DListEXT. Die entsprechende Datenstruktur ist XrSpatialPolygon2DDataEXT (hinzugefügt durch die XR_EXT_spatial_plane_tracking-Erweiterung).

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 (hinzugefügt durch die Erweiterung XR_EXT_spatial_plane_tracking).

XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT

Eine Komponente, die den Markierungstyp, die ID und den Standort beschreibt. Die entsprechende Listenstruktur ist XrSpatialComponentMarkerListEXT. Die entsprechende Datenstruktur ist XrSpatialMarkerDataEXT (hinzugefügt durch die Erweiterung XR_EXT_spatial_marker_tracking).

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 XR_EXT_spatial_object_tracking-Erweiterung).

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 XR_EXT_spatial_object_tracking-Erweiterung).

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 (hinzugefügt durch die XR_EXT_spatial_anchor-Erweiterung).

XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_EXT

Komponente, die die persistente UUID für eine räumliche Einheit bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentPersistenceListEXT. Die entsprechende Datenstruktur ist XrSpatialPersistenceDataEXT (hinzugefügt durch die Erweiterung XR_EXT_spatial_persistence).

XR_SPATIAL_COMPONENT_TYPE_IMAGE_2D_EXT

Eine Komponente, die den planaren Bildtyp beschreibt. Die entsprechende Listenstruktur ist XrSpatialComponentImage2DListEXT und die entsprechende Datenstruktur ist 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 einer räumlichen Einheit bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentMesh3DNormalsListEXT. Die entsprechende Datenstruktur ist XrSpatialBufferEXT (hinzugefügt durch die XR_EXT_spatial_mesh_tracking-Erweiterung).

XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT

Komponente, die die semantischen Labels pro Vertex für das 3D-Mesh eines räumlichen Objekts bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentMesh3DVertexSemanticLabelsListEXT. Die entsprechende Datenstruktur ist XrSpatialBufferEXT. Die Daten im Puffer werden XrSpatialMeshSemanticLabelEXT zugeordnet (hinzugefügt durch die XR_EXT_spatial_mesh_tracking-Erweiterung).

XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT

Komponente, die die semantischen Labels für die einzelnen Dreiecksflächen des 3D-Netzes einer räumlichen Einheit bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT. Die entsprechende Datenstruktur ist XrSpatialBufferEXT. Die Daten im Puffer werden XrSpatialMeshSemanticLabelEXT zugeordnet (hinzugefügt durch die XR_EXT_spatial_mesh_tracking-Erweiterung).

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 XR_ANDROID_spatial_object_tracking-Erweiterung).

XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID

Komponente, die die Position eines Raycast-Treffers auf einer Entität bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentRaycastResultListANDROID. Die entsprechende Datenstruktur ist XrSpatialRaycastResultDataANDROID (wird durch die XR_ANDROID_spatial_discovery_raycast-Erweiterung 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 umfasst. Die entsprechende Listenstruktur ist XrSpatialComponentSubsumedByListANDROID. Die entsprechende Datenstruktur ist XrSpatialEntityIdEXT (wird durch die Erweiterung XR_ANDROID_spatial_component_subsumed_by hinzugefügt).

XR_SPATIAL_COMPONENT_TYPE_ROOM_ANDROIDSYS

Komponente, die die Abmessungen und den Zimmertyp eines Schuhkartons bereitstellt; die entsprechende Listenstruktur ist XrSpatialComponentRoomListANDROIDSYS; die entsprechende Datenstruktur ist XrSpatialRoomDataANDROIDSYS (hinzugefügt durch die XR_ANDROIDSYS_spatial_room_tracking-Erweiterung)

XR_SPATIAL_COMPONENT_TYPE_MATERIAL_TYPE_ANDROIDSYS

Komponente, die den Materialtyp einer Grenzfläche angibt; entsprechende Listenstruktur: XrSpatialComponentMaterialTypeListANDROIDSYS; entsprechende Datenstruktur: XrSpatialMaterialTypeANDROIDSYS (hinzugefügt durch die XR_ANDROIDSYS_spatial_room_tracking-Erweiterung)

XR_SPATIAL_COMPONENT_TYPE_CONFIDENCE_ANDROIDSYS

Komponente, die das Konfidenzniveau eines verfolgbaren Elements 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 (wird durch die Erweiterung XR_ANDROIDSYS_spatial_room_tracking hinzugefügt).

XR_SPATIAL_COMPONENT_TYPE_OCCUPANCY_GRID_ANDROIDX1

Komponente, die Informationen zum Belegungsgitter der angehängten Entität bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentOccupancyGridListANDROIDX1. Die entsprechende Datenstruktur ist XrSpatialOccupancyGridDataANDROIDX1 (wird durch die Erweiterung XR_ANDROIDX1_spatial_occupancy_grid hinzugefügt).

XR_SPATIAL_COMPONENT_TYPE_ANNOTATION_QUAD_ANDROID

Eine Komponente, die eine Quad-Annotation beschreibt. Die entsprechende Listenstruktur ist XrSpatialComponentAnnotationQuadListANDROID. Die entsprechende Datenstruktur ist XrSpatialAnnotationQuadDataANDROID (wird durch die XR_ANDROID_spatial_annotation_tracking-Erweiterung 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 (hinzugefügt durch die XR_ANDROIDX2_geospatial_streetscape-Erweiterung).

Räumliche Funktionen und Einrichtung

Räumliche Funktionen definieren die Möglichkeiten einer Laufzeit, Entitäten zu erkennen, die eine garantierte Reihe von Komponenten enthalten. Anwendungen aktivieren die Komponenten einer räumlichen Funktion beim Erstellen von XrSpatialContextEXT. Die Laufzeit muss wiederum nur die aktivierten Komponenten für erkannte Einheiten 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 Enumeration XrSpatialCapabilityEXT identifiziert die verschiedenen Arten von Funktionen, die die Laufzeit möglicherweise unterstützt.

Die Enumeratoren haben die folgenden Werte:

Enum-Beschreibung

XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT

Flugzeug-Tracking (von der Erweiterung XR_EXT_spatial_plane_tracking hinzugefügt)

XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT

QR-Codes erkennen und verfolgen (Hinzugefügt durch die Erweiterung XR_EXT_spatial_marker_tracking)

XR_SPATIAL_CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE_EXT

Micro-QR-Codes können erkannt und getrackt werden. (Hinzugefügt durch die Erweiterung XR_EXT_spatial_marker_tracking)

XR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_EXT

Aruco-Marker erkennen und verfolgen (Hinzugefügt durch die Erweiterung XR_EXT_spatial_marker_tracking)

XR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXT

AprilTags erkennen und verfolgen können. (Hinzugefügt durch die Erweiterung XR_EXT_spatial_marker_tracking)

XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT

Objekt-Tracking (hinzugefügt durch die Erweiterung XR_EXT_spatial_object_tracking)

XR_SPATIAL_CAPABILITY_ANCHOR_EXT

Möglichkeit zum Erstellen räumlicher Anker (hinzugefügt durch die XR_EXT_spatial_anchor-Erweiterung)

XR_SPATIAL_CAPABILITY_IMAGE_TRACKING_EXT

Ebene Referenzbilder erkennen und verfolgen können. (Hinzugefügt durch die Erweiterung XR_EXT_spatial_image_tracking)

XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT

Möglichkeit, das Mesh einer Umgebung zu verfolgen. (Hinzugefügt durch die Erweiterung XR_EXT_spatial_mesh_tracking)

XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_ANDROID

Objekt-Tracking (hinzugefügt durch die Erweiterung XR_ANDROID_spatial_object_tracking)

XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID

Raycast für Tiefenpuffer (von der Erweiterung XR_ANDROID_spatial_discovery_raycast hinzugefügt)

XR_SPATIAL_CAPABILITY_ROOM_TRACKING_ANDROIDSYS

Möglichkeit, einen Raum zu verfolgen (hinzugefügt durch die Erweiterung XR_ANDROIDSYS_spatial_room_tracking)

XR_SPATIAL_CAPABILITY_ROOM_BOUNDARY_TRACKING_ANDROIDSYS

Möglichkeit, eine Raumgrenze zu verfolgen (hinzugefügt durch die XR_ANDROIDSYS_spatial_room_tracking-Erweiterung)

XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID

Vermerk-Tracking (hinzugefügt durch die Erweiterung XR_ANDROID_spatial_annotation_tracking)

XR_SPATIAL_CAPABILITY_STREETSCAPE_GEOMETRY_ANDROIDX2

Streetscape-Geometrie (hinzugefügt durch die XR_ANDROIDX2_geospatial_streetscape-Erweiterung)

Die Funktion xrEnumerateSpatialCapabilitiesEXT ist so definiert:

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

Parameterbeschreibungen

  • instance ist ein Handle für eine XrInstance .
  • systemId ist das XrSystemId, dessen räumliche Funktionen aufgelistet werden.
  • capabilityCapacityInput ist die Kapazität des capabilities-Arrays oder 0, um eine Anfrage zum Abrufen der erforderlichen Kapazität anzugeben.
  • capabilityCountOutput ist die Anzahl der Funktionen oder die erforderliche Kapazität, falls capabilityCapacityInput nicht ausreicht.
  • capabilities ist ein Array von XrSpatialCapabilityEXT . Kann NULL sein, wenn capabilityCapacityInput = 0.
  • Eine detaillierte Beschreibung zum Abrufen der erforderlichen capabilities-Größe finden Sie im Abschnitt Puffergrößenparameter.

Die Anwendung kann die Liste der räumlichen Funktionen, die von einem bestimmten XrSystemId unterstützt werden, mit xrEnumerateSpatialCapabilitiesEXT aufzählen .

Die Laufzeit darf die räumlichen Funktionen, deren Erweiterung für instance nicht aktiviert ist, nicht aufzählen .

Gültige Nutzung (implizit)

  •  Die XR_EXT_spatial_entity-Erweiterung muss aktiviert werden, bevor xrEnumerateSpatialCapabilitiesEXT aufgerufen wird.
  • instance muss ein gültiger XrInstance-Handle sein.
  • capabilityCountOutput muss ein Zeiger auf einen uint32_t-Wert sein.
  •  – Wenn capabilityCapacityInput nicht 0 ist , capabilities muss ein Zeiger auf ein Array von capabilityCapacityInput XrSpatialCapabilityEXT-Werten sein.

Rückgabecodes

Erfolg

  • XR_SUCCESS

Fehler

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SYSTEM_INVALID
  • XR_ERROR_VALIDATION_FAILURE

Die Funktion xrEnumerateSpatialCapabilityComponentTypesEXT ist so definiert:

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

Parameterbeschreibungen

  • instance ist ein Handle für eine XrInstance .
  • systemId ist die XrSystemId, deren Komponenten für räumliche Funktionen aufgelistet werden.
  • capability ist die XrSpatialCapabilityEXT, für die die Komponenten aufgelistet werden.
  • capabilityComponents ist ein Zeiger auf einen XrSpatialCapabilityComponentTypesEXT, der eine Ein-/Ausgabestruktur ist, 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 konfigurierten System bereitstellt.

Die Anwendung kann die in XrSpatialCapabilityComponentTypesEXT :: componentTypes aufgeführten Komponententypen verwenden, um die vollständige Gruppe von Komponenten zu ermitteln, die das systemId für capability unterstützt. Sie kann diese Liste verwenden, um eine gültige Konfiguration für capability zu ermitteln, 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 für instance nicht aktiviert ist, nicht aufzählen .

Gültige Nutzung (implizit)

Rückgabecodes

Erfolg

  • XR_SUCCESS

Fehler

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT
  • XR_ERROR_SYSTEM_INVALID
  • XR_ERROR_VALIDATION_FAILURE

Die Struktur XrSpatialCapabilityComponentTypesEXT ist so definiert:

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

Mitgliederbeschreibungen

  • type ist der XrStructureType dieser Struktur.
  • next ist NULL oder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind in OpenXR oder dieser Erweiterung nicht definiert.
  • componentTypeCapacityInput ist die Kapazität des Arrays oder 0, um die erforderliche Kapazität abzurufen.
  • componentTypeCountOutput ist die Anzahl der Komponententypen oder die erforderliche Kapazität, falls componentTypeCapacityInput nicht ausreicht.
  • componentTypes ist ein Array von XrSpatialComponentTypeEXT . Kann NULL sein, wenn componentTypeCapacityInput = 0.
  • Eine detaillierte Beschreibung zum Abrufen der erforderlichen componentTypes-Größe finden Sie im Abschnitt Puffergrößenparameter.

Gültige Nutzung (implizit)

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;

Für einige Funktionen sind Parameter für die Anwendung verfügbar, mit denen konfiguriert werden kann, wie die Komponentendaten von der Laufzeit berechnet werden. Diese Dimensionen der Parametrisierung/Konfigurierbarkeit werden als Funktionsmerkmale bezeichnet. Bei einer Funktion zum Verfolgen von Bildern kann eine Laufzeitumgebung möglicherweise eine Funktion unterstützen, mit der die Anwendung angeben kann, ob die verfolgten Bilder statisch sind oder nicht.

Wenn diese Informationen über eine Konfigurationsstruktur an die Laufzeit übergeben werden, darf sich die Menge der Komponententypen, die in den zugehörigen Einheiten vorhanden sind, z.B. im verfolgten Bild, nicht ändern. Die Laufzeit kann jedoch z.B. die Tracking-Funktionen der Bild-Tracking-Funktion optimieren und so die Nutzerfreundlichkeit der Anwendung verbessern.

Solche Funktionen werden durch XrSpatialCapabilityFeatureEXT dargestellt und die Anwendung listet sie mit xrEnumerateSpatialCapabilityFeaturesEXT auf .

Für jede Funktion gibt es eine entsprechende Konfigurationsstruktur, mit der sie aktiviert werden kann. Solche Konfigurationsstrukturen müssen mit XrSpatialCapabilityConfigurationBaseHeaderEXT :: next der entsprechenden Funktion verkettet werden.

Die Enumeratoren 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 XR_EXT_spatial_marker_tracking-Erweiterung).

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 (wird durch die Erweiterung XR_EXT_spatial_marker_tracking hinzugefügt).

XR_SPATIAL_CAPABILITY_FEATURE_OBJECT_SEMANTIC_LABEL_SUBSET_EXT

Räumliche Funktion, mit der Anwendungen eine Teilmenge von Labels aus XrSpatialObjectSemanticLabelEXT für die Laufzeit angeben können, die 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. Bei der Erstellung des räumlichen Kontexts ist keine Konfigurationsstruktur erforderlich. (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. Bei der Erstellung des räumlichen Kontexts muss keine Konfigurationsstruktur enthalten sein. (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. Für die Erstellung des räumlichen Kontexts ist keine Konfigurationsstruktur erforderlich. (Hinzugefügt durch die Erweiterung XR_ANDROID_spatial_discovery_bounds)

XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_AUTOMATIC_SIZE_IMAGES_EXT

Die Laufzeit unterstützt das automatische Ableiten der physischen Größe erkannter und verfolgter Bilder. Die entsprechende Konfigurationsstruktur ist XrSpatialImageSizeEXT (hinzugefügt durch die XR_EXT_spatial_image_tracking-Erweiterung).

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 XR_EXT_spatial_image_tracking-Erweiterung).

XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT

Funktion zum Erstellen eines wasserdichten Mesh 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

  • instance ist ein Handle für eine XrInstance .
  • systemId ist die XrSystemId, deren räumliche Funktionen aufgelistet werden.
  • capability ist die XrSpatialCapabilityEXT, für die die Funktionen aufgelistet werden.
  • capabilityFeatureCapacityInput ist die Kapazität des Arrays oder 0, um die erforderliche Kapazität abzurufen.
  • capabilityFeatureCountOutput ist die Anzahl der Funktionen oder die erforderliche Kapazität, falls capabilityFeatureCapacityInput nicht ausreicht.
  • capabilityFeatures ist ein Array von XrSpatialCapabilityFeatureEXT . Kann NULL sein, wenn capabilityFeatureCapacityInput = 0.
  • Eine detaillierte Beschreibung zum Abrufen der erforderlichen capabilityFeatures-Größe finden Sie im Abschnitt Puffergrößenparameter.

Die Anwendung ermittelt die von einem bestimmten System für eine XrSpatialCapabilityEXT unterstützten Funktionen mit xrEnumerateSpatialCapabilityFeaturesEXT .

Bei Funktionen, die Funktionen verfügbar machen, wählt die Anwendung die zu aktivierende Funktion oder die zu aktivierenden Funktionen aus und stellt die entsprechende Konfigurationsstruktur in der nächsten Kette der Funktionskonfigurationsstrukturen in XrSpatialContextCreateInfoEXT :: capabilityConfigs bereit .

Wenn capability keine Funktion ist, die von xrEnumerateSpatialCapabilitiesEXT aufgezählt wird, muss die Laufzeit XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT zurückgeben .

Die Laufzeit darf die Funktionen für räumliche Fähigkeiten, deren Erweiterung für instance nicht aktiviert ist, nicht aufzählen .

Gültige Nutzung (implizit)

Rückgabecodes

Erfolg

  • XR_SUCCESS

Fehler

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT
  • XR_ERROR_SYSTEM_INVALID
  • XR_ERROR_VALIDATION_FAILURE

Räumlicher Kontext

Räumlichen Kontext erstellen

XR_DEFINE_HANDLE(XrSpatialContextEXT)

Das Handle XrSpatialContextEXT stellt die Ressourcen zum Ermitteln und Aktualisieren einer bestimmten Anzahl von räumlichen Einheiten in der Umgebung des Nutzers dar. Die Anwendung kann diesen Handle verwenden, um räumliche Einheiten mit anderen Funktionen in dieser Erweiterung zu ermitteln und zu aktualisieren.

Die Funktion xrCreateSpatialContextAsyncEXT ist so definiert:

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

Parameterbeschreibungen

  • session ist eine XrSession, in der der räumliche Kontext aktiv ist.
  • createInfo ist das XrSpatialContextCreateInfoEXT, das zum Angeben der Parameter für den räumlichen Kontext verwendet wird.
  • future ist ein Zeiger auf ein XrFutureEXT .

Die Anwendung kann ein XrSpatialContextEXT-Handle erstellen, indem sie:

Die Laufzeit muss XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT zurückgeben, wenn XrSpatialContextCreateInfoEXT ::capabilityConfigCount 0 ist. Für ein Handle für räumlichen Kontext ist mindestens eine Funktion erforderlich.

Die Laufzeit muss XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT zurückgeben, wenn eine Funktion im XrSpatialContextCreateInfoEXT :: capabilityConfigs-Array nicht von xrEnumerateSpatialCapabilitiesEXT aufgezählt wird .

Die Laufzeit muss XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT zurückgeben, wenn XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponentCount in XrSpatialContextCreateInfoEXT :: capabilityConfigs 0 ist. Eine Funktionskonfiguration ist ohne eine Liste der 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 einer XrSpatialCapabilityFeatureEXT entspricht, die 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. Eine Laufzeit, die die Funktion zum Erfassen von Ebenen unterstützt, kann beispielsweise nur dann mit der Pipeline zum Erfassen von Ebenen beginnen, wenn die Anwendung ein Handle für den räumlichen Kontext mit der Funktion zum Erfassen von Ebenen erstellt. Wenn die konfigurierten Funktionen eine lange Aufwärmzeit haben, kann es bei Aufrufen von xrCreateSpatialDiscoverySnapshotAsyncEXT zu einem leeren Snapshot kommen. Die Anwendung kann auf XrEventDataSpatialDiscoveryRecommendedEXT warten, bevor xrCreateSpatialDiscoverySnapshotAsyncEXT verwendet wird, um sicherzustellen, dass die zugrunde liegenden Trackingdienste bereit sind.

Wenn eine Laufzeit ein Berechtigungssystem erzwingt, um den Anwendungszugriff 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 nicht für diese Anwendung erteilt 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 akzeptabel waren, um den asynchronen Vorgang zu planen. Die entsprechende Vervollständigungsfunktion ist xrCreateSpatialContextCompleteEXT , die verwendet werden kann, wenn sich ein Future aus dieser Funktion im Status READY befindet und die Ausgaben von dieser Funktion in der Vervollständigungsstruktur XrCreateSpatialContextCompletionEXT enthalten sind .

Gültige Nutzung (implizit)

Rückgabecodes

Erfolg

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Fehler

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_PERMISSION_INSUFFICIENT
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT
  • XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT
  • XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT
  • XR_ERROR_VALIDATION_FAILURE

Die Struktur XrSpatialContextCreateInfoEXT ist so definiert:

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

Mitgliederbeschreibungen

  • type ist der XrStructureType dieser Struktur.
  • next ist NULL oder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind in OpenXR oder dieser Erweiterung nicht definiert.
  • capabilityConfigCount ist ein uint32_t, das die Anzahl der Elemente im capabilityConfigs-Array beschreibt.
  • capabilityConfigs ist ein Zeiger auf ein Array von XrSpatialCapabilityConfigurationBaseHeaderEXT-Zeigern.

Die Struktur XrSpatialContextCreateInfoEXT beschreibt die Informationen zum Erstellen eines XrSpatialContextEXT-Handles.

Gültige Nutzung (implizit)

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, sondern ihre untergeordneten Strukturen können mit XrSpatialContextCreateInfoEXT verwendet werden, um räumliche Funktionen zu konfigurieren.

Mitgliederbeschreibungen

  • type ist der XrStructureType dieser Struktur.
  • next ist NULL oder ein Zeiger auf die nächste Struktur in einer Strukturkette.
  • capability ist eine XrSpatialCapabilityEXT .
  • enabledComponentCount ist ein uint32_t, das die Anzahl der Elemente im enabledComponents-Array beschreibt.
  • enabledComponents ist ein Zeiger auf ein Array vom Typ 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 für capability in xrEnumerateSpatialCapabilityComponentTypesEXT nicht aufgezählt wird .

Gültige Nutzung (implizit)

Die Funktion xrCreateSpatialContextCompleteEXT ist so definiert:

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

Parameterbeschreibungen

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 bereit ist. Die Laufzeit muss XR_ERROR_FUTURE_INVALID_EXT zurückgeben, wenn future bereits abgeschlossen oder abgebrochen wurde.

Gültige Nutzung (implizit)

Rückgabecodes

Erfolg

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Fehler

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_FUTURE_INVALID_EXT
  • XR_ERROR_FUTURE_PENDING_EXT
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_VALIDATION_FAILURE

Die Struktur XrCreateSpatialContextCompletionEXT ist so definiert:

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

Mitgliederbeschreibungen

Zukünftige Rückgabecodes

futureResult-Werte:

Erfolg

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Fehler

  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT

Wenn futureResult ein Erfolgscode ist, muss spatialContext gültig sein. Wenn spatialContext gültig ist, bleibt es nur innerhalb des Lebenszyklus von xrCreateSpatialContextAsyncEXT :: session oder bis die Anwendung spatialContext mit xrDestroySpatialContextEXT zerstört, je nachdem, was zuerst eintritt.

Gültige Nutzung (implizit)

Räumlichen Kontext entfernen

Die Funktion xrDestroySpatialContextEXT ist so definiert:

XrResult xrDestroySpatialContextEXT(
    XrSpatialContextEXT                         spatialContext);

Parameterbeschreibungen

Die Anwendung kann die Funktion xrDestroySpatialContextEXT aufrufen, um das spatialContext-Handle und die zugrunde liegenden Ressourcen freizugeben, wenn die Aufgaben zur Erkennung und Aktualisierung räumlicher Einheiten abgeschlossen sind. Wenn kein anderer gültiger XrSpatialContextEXT vorhanden ist, 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 Nutzung (implizit)

Threadsicherheit

  • Der Zugriff auf spatialContext und alle untergeordneten Handles muss extern synchronisiert werden.

Rückgabecodes

Erfolg

  • XR_SUCCESS

Fehler

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_RUNTIME_FAILURE

Räumliche Entitätsdarstellungen

Räumliche Entitäts-ID

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 dasselbe XrSpatialEntityIdEXT nicht für verschiedene Einheiten innerhalb desselben XrSpatialContextEXT verwenden. Außerdem darf die Laufzeit nicht denselben XrSpatialEntityIdEXT für mehrere XrSpatialContextEXT innerhalb derselben XrSession wiederverwenden, unabhängig davon, ob er dieselbe 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 . Sie dürfen 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äten

XR_DEFINE_HANDLE(XrSpatialEntityEXT)

Das Handle XrSpatialEntityEXT stellt eine räumliche Einheit dar. Eine Anwendung kann ein solches Handle erstellen, um ihr Interesse an einer bestimmten Entität gegenüber der Laufzeit auszudrücken.

Spatial Entity-Handle aus ID erstellen

Die Funktion xrCreateSpatialEntityFromIdEXT ist so definiert:

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

Parameterbeschreibungen

Die Anwendung kann xrCreateSpatialEntityFromIdEXT verwenden, um ein XrSpatialEntityEXT-Handle zu erstellen, das eine Referenz auf eine Entität ist, die in der Umgebung des Nutzers vorhanden ist.

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 Nutzung (implizit)

Rückgabecodes

Erfolg

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Fehler

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXT
  • XR_ERROR_VALIDATION_FAILURE

Die Struktur XrSpatialEntityFromIdCreateInfoEXT ist so definiert:

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

Mitgliederbeschreibungen

  • type ist der XrStructureType dieser Struktur.
  • next ist NULL oder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind in OpenXR oder dieser Erweiterung nicht definiert.
  • entityId ist die XrSpatialEntityIdEXT der Entität, für die die Anwendung ein Handle erstellen möchte.

Gültige Nutzung (implizit)

Handle für räumliche Entität zerstören

Die Funktion xrDestroySpatialEntityEXT ist so definiert:

XrResult xrDestroySpatialEntityEXT(
    XrSpatialEntityEXT                          spatialEntity);

Parameterbeschreibungen

Die Anwendung kann xrDestroySpatialEntityEXT verwenden, um das spatialEntity-Handle freizugeben, wenn sie nicht mehr an der durch dieses Handle referenzierten Entität interessiert ist.

Gültige Nutzung (implizit)

Threadsicherheit

  • Der Zugriff auf spatialEntity und alle untergeordneten Handles muss extern synchronisiert werden.

Rückgabecodes

Erfolg

  • XR_SUCCESS

Fehler

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_RUNTIME_FAILURE

Räumlicher Snapshot

XR_DEFINE_HANDLE(XrSpatialSnapshotEXT)

Die Anwendung kann räumliche Snapshots erstellen, um räumliche Einheiten zu erkennen oder ihre Informationen zu bekannten räumlichen Einheiten zu aktualisieren. Der Handle XrSpatialSnapshotEXT stellt die unveränderlichen Daten für die erkannten oder aktualisierten räumlichen Einheiten und eine Teilmenge ihrer Komponenten dar, die von der Anwendung ausgewählt wurden. Der räumliche Snapshot stellt eine zusammenhängende Ansicht der Einheiten und ihrer Komponentendaten dar. Nachdem ein Snapshot erstellt wurde, müssen die Daten des Snapshots konstant bleiben, solange der Snapshot gültig ist.

Die Anwendung kann beliebig viele Snapshots erstellen, muss jedoch den für jeden neuen Snapshot zugewiesenen Speicherplatz berücksichtigen und die Snapshots muss löschen, sobald sie nicht mehr benötigt werden.

Erkennungssnapshot erstellen

Die Funktion xrCreateSpatialDiscoverySnapshotAsyncEXT ist so definiert:

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

Parameterbeschreibungen

Die Anwendung kann räumliche Einheiten erkennen, indem sie mit xrCreateSpatialDiscoverySnapshotAsyncEXT einen Discovery-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 akzeptabel waren, um den asynchronen Vorgang zu planen. Die entsprechende Completion-Funktion ist xrCreateSpatialDiscoverySnapshotCompleteEXT. Sie kann verwendet werden, wenn sich ein Future aus dieser Funktion im Status READY befindet und die Ausgaben von dieser Funktion in der Completion-Struktur XrCreateSpatialDiscoverySnapshotCompletionEXT enthalten sind.

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 sie aufgrund von Energie-, Wärme- oder anderen Richtlinien des Geräts die Nutzung von Systemressourcen reduzieren muss.

Die Anwendung kann XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes verwenden, um die Liste der Entitäten und Komponenten zu filtern, deren Daten die Laufzeit in den Snapshot aufnehmen muss. Wenn die Anwendung eine gültige Liste von räumlichen Komponententypen in XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes bereitstellt, muss die Laufzeit nur räumliche Einheiten in den Snapshot aufnehmen, die mindestens eine der in XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes bereitgestellten Komponenten haben . Außerdem muss 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 XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes nicht für die räumlichen Funktionen aktiviert ist, die beim Erstellen von spatialContext an XrSpatialContextCreateInfoEXT :: capabilityConfigs übergeben werden .

Wenn die Anwendung keine Liste der räumlichen Komponententypen in XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes bereitstellt, muss die Laufzeit alle räumlichen Einheiten im Snapshot mit der Gruppe von Komponenten einschließen, die in XrSpatialCapabilityConfigurationBaseHeaderEXT ::enabledComponents für die für spatialContext konfigurierten Funktionen aufgeführt sind . Die Laufzeit muss die Daten für alle aktivierten Komponenten der für spatialContext konfigurierten Funktionen enthalten .

Wenn XrEventDataReferenceSpaceChangePending vor Abschluss von future in die Warteschlange gestellt wird und XrEventDataReferenceSpaceChangePending :: poseValid „false“ ist, kann die Laufzeit entweder einen XrSpatialSnapshotEXT ohne Entitäten erstellen oder den XrSpatialEntityTrackingStateEXT der Entitäten, die in XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace nicht mehr lokalisiert werden können, in XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time auf XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT oder XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT festlegen . Die Laufzeit darf XrCreateSpatialContextCompletionEXT :: futureResult aufgrund von XrEventDataReferenceSpaceChangePending nicht auf einen Fehlercode setzen .

Gültige Nutzung (implizit)

Rückgabecodes

Erfolg

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Fehler

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT
  • XR_ERROR_VALIDATION_FAILURE

Die Struktur XrSpatialDiscoverySnapshotCreateInfoEXT ist so definiert:

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

Mitgliederbeschreibungen

  • type ist der XrStructureType dieser Struktur.
  • next ist NULL oder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind in OpenXR oder dieser Erweiterung nicht definiert.
  • componentTypeCount ist ein uint32_t, das die Anzahl der Elemente im componentTypes-Array beschreibt.
  • componentTypes ist ein Array von XrSpatialComponentTypeEXT .

Die Struktur XrSpatialDiscoverySnapshotCreateInfoEXT beschreibt die Informationen zum Erstellen eines XrSpatialSnapshotEXT-Handles beim Ermitteln räumlicher Einheiten.

Gültige Nutzung (implizit)

Die Funktion xrCreateSpatialDiscoverySnapshotCompleteEXT ist so definiert:

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

Parameterbeschreibungen

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 Bereitschaftszustand ist. Die Laufzeit muss XR_ERROR_FUTURE_INVALID_EXT zurückgeben, wenn XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: future bereits abgeschlossen oder abgebrochen wurde.

Gültige Nutzung (implizit)

Rückgabecodes

Erfolg

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Fehler

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_FUTURE_INVALID_EXT
  • XR_ERROR_FUTURE_PENDING_EXT
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_TIME_INVALID
  • XR_ERROR_VALIDATION_FAILURE

Die Struktur XrCreateSpatialDiscoverySnapshotCompletionInfoEXT ist so definiert:

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

Mitgliederbeschreibungen

Die Standorte in den verschiedenen Komponentendaten, die im erstellten Snapshot enthalten sind, werden in baseSpace unter time dargestellt .

Gültige Nutzung (implizit)

Die Struktur XrCreateSpatialDiscoverySnapshotCompletionEXT ist so definiert:

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

Mitgliederbeschreibungen

  • type ist der XrStructureType dieser Struktur.
  • next ist NULL oder ein Zeiger auf die nächste Struktur in einer Strukturkette.
  • futureResult ist das XrResult des Vorgangs zum Erstellen des räumlichen Erkennungssnapshots.
  • snapshot ist ein XrSpatialSnapshotEXT, mit dem die Komponentendaten der erkannten räumlichen Einheiten abgefragt werden können.

Zukünftige Rückgabecodes

futureResult-Werte:

Erfolg

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Fehler

  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_LIMIT_REACHED

Gültige Nutzung (implizit)

Ereignis für Discovery-Empfehlung

Die Struktur XrEventDataSpatialDiscoveryRecommendedEXT ist so definiert:

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

Mitgliederbeschreibungen

  • type ist der XrStructureType dieser Struktur.
  • next ist NULL oder ein Zeiger auf die nächste Struktur in einer Strukturkette.
  • spatialContext ist 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 vermeiden, um räumliche Einheiten zu erkennen, indem sie auf dieses Ereignis wartet. Wenn die Anwendung zwischen zwei XrEventDataSpatialDiscoveryRecommendedEXT-Ereignissen mehrere Discovery-Snapshots mit demselben XrSpatialDiscoverySnapshotCreateInfoEXT erstellt, können die resultierenden Snapshots dieselben Entitäten enthalten. Die Snapshot-Erstellung und Datenabfragen wären dann unnötig.

Wenn Sie warten, bis dieses Ereignis eintritt, um einen neuen Discovery-Snapshot zu erstellen, wird sichergestellt, dass die Anwendung das System nicht mit Discovery-Anfragen überlastet, für die die Laufzeit möglicherweise keine neuen Daten zurückgibt. Außerdem wird so das Risiko vermieden, dass die Systemressourcen überlastet werden und die Anwendung aufgrund von Energie- oder Temperaturrichtlinien des Geräts gedrosselt wird. Dies trägt auch dazu bei, dass Laufzeiten, die räumliche Einheiten spontan mit Live-Tracking erkennen, und Laufzeiten, die räumliche Einheiten auf Grundlage eines zuvor aufgezeichneten Zustands bereitstellen, gleichwertig sind. In diesem Fall kann die Laufzeit das Ereignis für die Empfehlung zur 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 Einheiten zu informieren. Die Anwendung kann die Funktion xrCreateSpatialUpdateSnapshotEXT verwenden, um Komponentendatenaktualisierungen für die räumlichen Entitäten zu verfolgen, die für sie von Interesse sind.

Eine Laufzeit kann ein Empfehlungsereignis für die Suche in die Warteschlange stellen, ohne darauf zu warten, dass die Anwendung zuerst xrCreateSpatialDiscoverySnapshotAsyncEXT aufruft . Eine Laufzeitumgebung kann die Entscheidung, das Ereignis für die Empfehlung zur Erkennung in die Warteschlange zu stellen, beispielsweise auf der Konfiguration von XrSpatialContextEXT, dem eigenen Verständnis der Umgebung des Nutzers (Erkennung neuer oder Verlust vorhandener Einheiten) oder auf dem Hinweis auf eine geeignete Häufigkeit von Erkennungsanfragen an die Anwendung stützen, um die Systemressourcen nicht zu überlasten. Die Laufzeit kann dieses Ereignis für einen XrSpatialContextEXT nie in die Warteschlange stellen, wenn während der gesamten Lebensdauer dieses XrSpatialContextEXT keine Objekte 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 diesen räumlichen Kontext in die Warteschlange stellen und keine solchen Ereignisse für diesen Kontext von xrPollEvent zurückgeben .

Gültige Nutzung (implizit)

Komponentendaten abfragen

Die Funktion xrQuerySpatialComponentDataEXT ist so definiert:

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

Parameterbeschreibungen

Die Anwendung kann xrQuerySpatialComponentDataEXT verwenden, um die Komponentendaten der Entitäten im Snapshot abzufragen, indem sie eine Listenstruktur an XrSpatialComponentDataQueryResultEXT :: next anhä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 einem Teil der in XrSpatialComponentDataQueryConditionEXT :: componentTypes aufgeführten Komponenten entsprechen . Die Anwendung kann die Listenstrukturen auch ganz weglassen, wenn sie nur die IDs und den Tracking-Status der räumlichen Einheiten wissen möchte, die queryCondition erfüllen . Die Laufzeit darf das Fehlen von Listenstrukturen in der XrSpatialComponentDataQueryResultEXT :: next-Kette nicht als Fehler behandeln.

Wenn XrEventDataReferenceSpaceChangePending in der Warteschlange steht und XrEventDataReferenceSpaceChangePending :: changeTime verstrichen ist, während die Anwendung Komponentendaten aus einem XrSpatialSnapshotEXT abfragt, kann die Anwendung die Ereignisdaten verwenden, um die Posen entsprechend anzupassen.

Die Laufzeit muss XrSpatialComponentDataQueryResultEXT :: entityIds nur mit Entitäten füllen, die alle in XrSpatialComponentDataQueryConditionEXT :: componentTypes angegebenen Komponenten haben . Wenn XrSpatialComponentDataQueryConditionEXT :: componentTypeCount gleich 0 ist, muss die Laufzeit queryResult mit allen Entitäten (und ihren Tracking-Status) im Snapshot füllen. Wenn XrSpatialComponentDataQueryConditionEXT :: next zusätzliche Abfragebedingungen hinzugefügt werden, muss die Laufzeit diese als „AND“ mit der Verfügbarkeit der Komponententypen behandeln. Das bedeutet, dass die Laufzeit XrSpatialComponentDataQueryResultEXT ::entityIds nur mit Entitäten füllen darf, die alle angegebenen Bedingungen erfüllen. Die Laufzeit muss die Komponentendaten in den Listenstrukturen in derselben Reihenfolge wie die Entitäten in XrSpatialComponentDataQueryResultEXT :: entityIds einfügen. Das bedeutet, dass die Komponentendaten an einem bestimmten Index im Listenstruktur-Array muss der Entität am selben Index entsprechen.

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 im Array in den Listenstrukturen entspricht, die an XrSpatialComponentDataQueryResultEXT angehängt sind, nicht ändern .

Gültige Nutzung (implizit)

Rückgabecodes

Erfolg

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Fehler

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_VALIDATION_FAILURE

Die Anwendung erstellt beispielsweise einen XrSpatialSnapshotEXT, der 5 Entitäten enthält:

  • Die Einheiten 1 und 2 haben die Komponenten XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT und XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT.
  • Die Einheiten 3 und 4 haben die Komponenten XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT und XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT.
  • Entität 5 hat die Komponenten XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT und XR_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

Kein Text is not SVG - cannot display

Abbildung 20: Beispiel für einen Snapshot

xrQuerySpatialComponentDataEXT für den oben genannten 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 und 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…

Daten für entityId #2

Daten für…

Daten für entityId #5

Daten für…

entityIds

entityIds

Weiter

Weiter

XrSpatialComponent
DataQueryResultEXT

XrSpatialComponent
Dat...

Grenzwerte

Grenzwerte

XrSpatialComponent
Bounded2DListEXT

XrSpatialComponent
Bou... Text is not SVG - cannot display (Text ist kein SVG-Element – kann nicht angezeigt werden)

Abbildung 21: Beispiel für ein Abfrageergebnis

xrQuerySpatialComponentDataEXT für den oben genannten 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 und 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…

Daten für entityId #4

Daten für…

Mesh3D

Mesh3D

Daten für entityId 3

Daten für…

Daten für entityId #4

Daten für…

entityIds

entityIds

Weiter

Weiter

XrSpatialComponent
DataQueryResultEXT

XrSpatialComponent
Da...

Grenzwerte

Grenzwerte

Weiter

Weiter

XrSpatialComponent
Bounded3DListEXT

XrSpatialComponent
Bo...

XrSpatialComponent
Mesh3DListEXT

XrSpatialComponent
Me...

Mesh-Netzwerke

meshes Text is not SVG - cannot display (meshes Text ist kein SVG-Element – kann nicht angezeigt werden)

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

  • type ist der XrStructureType dieser Struktur.
  • next ist NULL oder ein Zeiger auf die nächste Struktur in einer Strukturkette.
  • componentTypeCount ist ein uint32_t, das die Anzahl der Elemente im componentTypes-Array beschreibt.
  • componentTypes ist ein Array von XrSpatialComponentTypeEXT, für die die Daten aus dem Snapshot abgerufen werden sollen.

Gültige Nutzung (implizit)

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

  • type ist der XrStructureType dieser Struktur.
  • next ist NULL oder ein Zeiger auf die nächste Struktur in einer Strukturkette.
  • entityIdCapacityInput ist die Kapazität des entityIds-Arrays oder 0, um eine Anfrage zum Abrufen der erforderlichen Kapazität anzugeben.
  • entityIdCountOutput ist die Anzahl der XrSpatialEntityIdEXT in entityIds oder die erforderliche Kapazität , falls entityIdCapacityInput nicht ausreicht.
  • entityIds ist ein Array von XrSpatialEntityIdEXT . Kann NULL sein, wenn entityIdCapacityInput = 0.
  • entityStateCapacityInput ist die Kapazität des entityStates-Arrays oder 0, um eine Anfrage zum Abrufen der erforderlichen Kapazität anzugeben.
  • entityStateCountOutput ist die Anzahl der XrSpatialEntityTrackingStateEXT in entityStates oder die erforderliche Kapazität , falls entityStateCapacityInput nicht ausreicht. Dieser muss immer mit entityIdCountOutput übereinstimmen .
  • entityStates ist ein Array von XrSpatialEntityTrackingStateEXT . Kann NULL sein, wenn entityStateCapacityInput = 0.
  • Eine detaillierte Beschreibung zum Abrufen der erforderlichen entityIds-Größe finden Sie im Abschnitt Puffergrößenparameter.

Eine Anwendung kann die entityIds mit xrCreateSpatialEntityFromIdEXT verwenden, um XrSpatialEntityEXT-Handles für die Entitäten zu erstellen, für die sie regelmäßige Updates erhalten möchte. Die Anwendung kann diese XrSpatialEntityEXT-Handles dann mit xrCreateSpatialUpdateSnapshotEXT verwenden, um einen Aktualisierungs-Snapshot zu erstellen, der die neuesten bekannten Daten der Komponenten für die bereitgestellten Entitäten enthält.

Gültige Nutzung (implizit)

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;

Die möglichen Tracking-Status für räumliche Einheiten werden in XrSpatialEntityTrackingStateEXT aufgeführt:

Die Enums haben die folgenden Bedeutungen:

Enum-Beschreibung

XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT

Die Laufzeit hat die Verfolgung dieses Elements beendet und wird sie nie wieder aufnehmen.

XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT

Die Laufzeit hat die Erfassung dieses Elements pausiert, kann sie aber in Zukunft wieder aufnehmen.

XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT

Die Laufzeit verfolgt diese Einheit derzeit und ihre Komponentendaten sind gültig.

Tracking

PAUSIERT

ANGEHALTEN

Abbildung 23: XrSpatialEntityTrackingStateEXT

  • Die Laufzeit kann den Status der räumlichen Einheit von XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT in XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT ändern, wenn die Erfassung dieser räumlichen Einheit unterbrochen wird, aber die Möglichkeit besteht, die Erfassung in Zukunft fortzusetzen. Einige Beispiele dafür, wann die Laufzeit dies möglicherweise tut, sind (aber nicht beschränkt auf): wenn die Anwendung den Eingabefokus verliert, wenn die angegebene räumliche Einheit zu weit vom Nutzer entfernt ist, um genau verfolgt zu werden, oder wenn zu viele Einheiten verfolgt werden und die Laufzeit die Kosten für die Verfolgung senken möchte. XrSpatialEntityTrackingStateEXT hilft der Anwendung, sich vor den unterschiedlichen Trackingrichtlinien der einzelnen Laufzeiten zu schützen.
  • Die Laufzeit kann den Status einer Entität von XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT in XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT oder XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT ändern .
  • Die Laufzeit muss den Status der räumlichen Einheit von XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT oder XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT in XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT ändern, wenn die räumliche Einheit verloren geht und die Nachverfolgung nie wiederhergestellt oder fortgesetzt wird. 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_EXT festgelegt ist , darf die Laufzeit ihn niemals in einen anderen Status ändern.
  • Wenn die Komponentendaten einer räumlichen Einheit mit xrQuerySpatialComponentDataEXT abgefragt werden, muss die Laufzeit gültige Daten in den Inhalten der von der Anwendung bereitgestellten Puffer in der nächsten Kette von XrSpatialComponentDataQueryResultEXT festlegen, wenn der Status der Einheit XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT ist . Wenn der Entitätsstatus XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT oder XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT ist , darf die Laufzeit den Inhalt der Puffer nicht ändern.

Idiom mit zwei Aufrufen für Komponentendaten

Die Struktur XrSpatialBufferEXT wird so definiert:

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

Mitgliederbeschreibungen

  • bufferId die XrSpatialBufferIdEXT der Pufferdaten.
  • bufferType ist der XrSpatialBufferTypeEXT, der den Datentyp in bufferId angibt . Die Anwendung kann bufferType verwenden, um zu bestimmen, mit welcher Funktion die tatsächlichen Daten des Puffers abgerufen werden sollen.

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 für jeden Puffer mit variabler Größe, der in den Daten dieser Komponente benötigt wird, einen XrSpatialBufferEXT bereit.

Für dieselbe bufferId muss die Laufzeit dieselben Daten aus einer Komponentendatenabfrage für eine andere bereitstellen, auch von einem Snapshot zum nächsten. Eine andere bufferId zwischen den Aufrufen der Komponentendatenabfrage weist die Anwendung darauf hin, dass sich die Daten für diese Komponente möglicherweise geändert haben.

Gültige Nutzung (implizit)

XR_DEFINE_ATOM(XrSpatialBufferIdEXT)

XrSpatialBufferIdEXT wird verwendet, um Daten beliebiger Größe für eine räumliche Komponente darzustellen.

Die Laufzeit muss das XrSpatialBufferIdEXT und seine Daten mindestens für den Lebenszyklus des XrSpatialSnapshotEXT, das es enthält, im Arbeitsspeicher behalten. Die Laufzeit kann die XrSpatialBufferIdEXT und ihre Daten länger als den Lebenszyklus von 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 Enumeration XrSpatialBufferTypeEXT gibt die verschiedenen Datentypen des Puffers an, der durch XrSpatialBufferIdEXT dargestellt wird .

Beschreibungen der Aufzählungstypen

  • XR_SPATIAL_BUFFER_TYPE_STRING_EXT . Der XrSpatialBufferIdEXT kann an xrGetSpatialBufferStringEXT übergeben werden, um einen Stringpuffer abzurufen.
  • XR_SPATIAL_BUFFER_TYPE_UINT8_EXT . Der XrSpatialBufferIdEXT can kann an xrGetSpatialBufferUint8EXT übergeben werden, um einen uint8_t-Puffer abzurufen.
  • XR_SPATIAL_BUFFER_TYPE_UINT16_EXT . Der XrSpatialBufferIdEXT kann an xrGetSpatialBufferUint16EXT übergeben werden, um einen uint16_t-Puffer abzurufen.
  • XR_SPATIAL_BUFFER_TYPE_UINT32_EXT . Der XrSpatialBufferIdEXT kann an xrGetSpatialBufferUint32EXT übergeben werden, um einen uint32_t-Puffer abzurufen.
  • XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT . Der XrSpatialBufferIdEXT kann an xrGetSpatialBufferFloatEXT übergeben werden, um einen float-Puffer abzurufen.
  • XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT . Der XrSpatialBufferIdEXT kann an xrGetSpatialBufferVector2fEXT übergeben werden, um einen XrVector2f-Puffer abzurufen.
  • XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT . Der XrSpatialBufferIdEXT kann an xrGetSpatialBufferVector3fEXT übergeben werden, um einen XrVector3f-Puffer abzurufen.

Die Funktion xrGetSpatialBufferStringEXT ist so definiert:

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

Parameterbeschreibungen

  • snapshot ist ein Handle für einen XrSpatialSnapshotEXT .
  • info enthält die Informationen zum abzufragenden Puffer.
  • bufferCapacityInput ist die Kapazität des Arrays oder 0, um die erforderliche Kapazität abzurufen.
  • bufferCountOutput ist die Anzahl der Zeichen oder die erforderliche Kapazität, falls bufferCapacityInput nicht ausreicht.
  • buffer ist ein Array von char . Kann NULL sein, wenn bufferCapacityInput = 0.
  • Eine detaillierte Beschreibung zum Abrufen der erforderlichen buffer-Größe finden Sie im Abschnitt Puffergrößenparameter.

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 Laufzeitumgebung ausgefüllt wird, muss ein nullterminierter UTF-8-String sein.

Gültige Nutzung (implizit)

  •  Die XR_EXT_spatial_entity-Erweiterung muss aktiviert sein, bevor xrGetSpatialBufferStringEXT aufgerufen wird.
  • snapshot muss ein gültiger XrSpatialSnapshotEXT-Handle sein
  • info muss ein Zeiger auf eine gültige XrSpatialBufferGetInfoEXT-Struktur sein.
  • bufferCountOutput muss ein Zeiger auf einen uint32_t-Wert sein.
  • Wenn bufferCapacityInput nicht 0 ist , buffer muss ein Zeiger auf ein Array von bufferCapacityInput-Zeichenwerten sein.

Rückgabecodes

Erfolg

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Fehler

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT
  • XR_ERROR_VALIDATION_FAILURE

Die Funktion xrGetSpatialBufferUint8EXT ist so definiert:

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

Parameterbeschreibungen

  • snapshot ist ein Handle für einen XrSpatialSnapshotEXT .
  • info enthält die Informationen zum abzufragenden Puffer.
  • bufferCapacityInput ist die Kapazität des Arrays oder 0, um die erforderliche Kapazität abzurufen.
  • bufferCountOutput ist die Anzahl der Elemente im buffer-Array oder die erforderliche Kapazität, falls bufferCapacityInput nicht ausreicht.
  • buffer ist ein Array von uint8_t . Kann NULL sein, wenn bufferCapacityInput = 0.
  • Eine detaillierte Beschreibung zum Abrufen der erforderlichen buffer-Größe finden Sie im Abschnitt Puffergrößenparameter.

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 Nutzung (implizit)

  •  Die Erweiterung XR_EXT_spatial_entity muss aktiviert sein, bevor xrGetSpatialBufferUint8EXT aufgerufen wird.
  • snapshot muss ein gültiger XrSpatialSnapshotEXT-Handle sein
  • info muss ein Zeiger auf eine gültige XrSpatialBufferGetInfoEXT-Struktur sein.
  • bufferCountOutput muss ein Zeiger auf einen uint32_t-Wert sein.
  • Wenn bufferCapacityInput nicht 0 ist , buffer muss ein Zeiger auf ein Array von bufferCapacityInput uint8_t-Werten sein.

Rückgabecodes

Erfolg

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Fehler

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT
  • XR_ERROR_VALIDATION_FAILURE

Die Funktion xrGetSpatialBufferUint16EXT ist so definiert:

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

Parameterbeschreibungen

  • snapshot ist ein Handle für einen XrSpatialSnapshotEXT .
  • info enthält die Informationen zum abzufragenden Puffer.
  • bufferCapacityInput ist die Kapazität des Arrays oder 0, um die erforderliche Kapazität abzurufen.
  • bufferCountOutput ist die Anzahl der Elemente im buffer-Array oder die erforderliche Kapazität, falls bufferCapacityInput nicht ausreicht.
  • buffer ist ein Array von uint16_t . Kann NULL sein, wenn bufferCapacityInput = 0.
  • Eine detaillierte Beschreibung zum Abrufen der erforderlichen buffer-Größe finden Sie im Abschnitt Puffergrößenparameter.

Die Anwendung kann die Daten für einen XrSpatialBufferEXT abrufen, der von einer Komponente bereitgestellt wird, 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 Nutzung (implizit)

  •  Die Erweiterung XR_EXT_spatial_entity muss aktiviert sein, bevor xrGetSpatialBufferUint16EXT aufgerufen wird.
  • snapshot muss ein gültiger XrSpatialSnapshotEXT-Handle sein
  • info muss ein Zeiger auf eine gültige XrSpatialBufferGetInfoEXT-Struktur sein.
  • bufferCountOutput muss ein Zeiger auf einen uint32_t-Wert sein.
  • Wenn bufferCapacityInput nicht 0 ist , buffer muss ein Zeiger auf ein Array von bufferCapacityInput uint16_t-Werten sein.

Rückgabecodes

Erfolg

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Fehler

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT
  • XR_ERROR_VALIDATION_FAILURE

Die Funktion xrGetSpatialBufferUint32EXT ist so definiert:

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

Parameterbeschreibungen

  • snapshot ist ein Handle für einen XrSpatialSnapshotEXT .
  • info enthält die Informationen zum abzufragenden Puffer.
  • bufferCapacityInput ist die Kapazität des Arrays oder 0, um die erforderliche Kapazität abzurufen.
  • bufferCountOutput ist die Anzahl der Elemente im buffer-Array oder die erforderliche Kapazität, falls bufferCapacityInput nicht ausreicht.
  • buffer ist ein Array von uint32_t . Kann NULL sein, wenn bufferCapacityInput = 0.
  • Eine detaillierte Beschreibung zum Abrufen der erforderlichen buffer-Größe finden Sie im Abschnitt Puffergrößenparameter.

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 Nutzung (implizit)

  •  Die Erweiterung XR_EXT_spatial_entity muss aktiviert sein, bevor xrGetSpatialBufferUint32EXT aufgerufen wird.
  • snapshot muss ein gültiger XrSpatialSnapshotEXT-Handle sein
  • info muss ein Zeiger auf eine gültige XrSpatialBufferGetInfoEXT-Struktur sein.
  • bufferCountOutput muss ein Zeiger auf einen uint32_t-Wert sein.
  • Wenn bufferCapacityInput nicht 0 ist , buffer muss ein Zeiger auf ein Array von bufferCapacityInput uint32_t-Werten sein.

Rückgabecodes

Erfolg

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Fehler

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT
  • XR_ERROR_VALIDATION_FAILURE

Die Funktion xrGetSpatialBufferFloatEXT ist so definiert:

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

Parameterbeschreibungen

  • snapshot ist ein Handle für einen XrSpatialSnapshotEXT .
  • info enthält die Informationen zum abzufragenden Puffer.
  • bufferCapacityInput ist die Kapazität des Arrays oder 0, um die erforderliche Kapazität abzurufen.
  • bufferCountOutput ist die Anzahl der Elemente im buffer-Array oder die erforderliche Kapazität, falls bufferCapacityInput nicht ausreicht.
  • buffer ist ein Array von float . Kann NULL sein, wenn bufferCapacityInput = 0.
  • Eine detaillierte Beschreibung zum Abrufen der erforderlichen buffer-Größe finden Sie im Abschnitt Puffergrößenparameter.

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 Nutzung (implizit)

  •  Die XR_EXT_spatial_entity-Erweiterung muss aktiviert sein, bevor xrGetSpatialBufferFloatEXT aufgerufen wird.
  • snapshot muss ein gültiger XrSpatialSnapshotEXT-Handle sein
  • info muss ein Zeiger auf eine gültige XrSpatialBufferGetInfoEXT-Struktur sein.
  • bufferCountOutput muss ein Zeiger auf einen uint32_t-Wert sein.
  • Wenn bufferCapacityInput nicht 0 ist , buffer muss ein Zeiger auf ein Array von bufferCapacityInput float-Werten sein.

Rückgabecodes

Erfolg

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Fehler

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT
  • XR_ERROR_VALIDATION_FAILURE

Die Funktion xrGetSpatialBufferVector2fEXT ist so definiert:

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

Parameterbeschreibungen

  • snapshot ist ein Handle für einen XrSpatialSnapshotEXT .
  • info enthält die Informationen zum abzufragenden Puffer.
  • bufferCapacityInput ist die Kapazität des Arrays oder 0, um die erforderliche Kapazität abzurufen.
  • bufferCountOutput ist die Anzahl der Elemente im buffer-Array oder die erforderliche Kapazität, falls bufferCapacityInput nicht ausreicht.
  • buffer ist ein Array von XrVector2f . Kann NULL sein, wenn bufferCapacityInput = 0.
  • Eine detaillierte Beschreibung zum Abrufen der erforderlichen buffer-Größe finden Sie im Abschnitt Puffergrößenparameter.

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 Nutzung (implizit)

  •  Die Erweiterung XR_EXT_spatial_entity muss aktiviert werden, bevor xrGetSpatialBufferVector2fEXT aufgerufen wird.
  • snapshot muss ein gültiger XrSpatialSnapshotEXT-Handle sein
  • info muss ein Zeiger auf eine gültige XrSpatialBufferGetInfoEXT-Struktur sein.
  • bufferCountOutput muss ein Zeiger auf einen uint32_t-Wert sein.
  •  Wenn bufferCapacityInput nicht 0 ist , buffer muss ein Zeiger auf ein Array von bufferCapacityInput XrVector2f-Strukturen sein.

Rückgabecodes

Erfolg

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Fehler

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT
  • XR_ERROR_VALIDATION_FAILURE

Die Funktion xrGetSpatialBufferVector3fEXT ist so definiert:

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

Parameterbeschreibungen

  • snapshot ist ein Handle für einen XrSpatialSnapshotEXT .
  • info enthält die Informationen zum abzufragenden Puffer.
  • bufferCapacityInput ist die Kapazität des Arrays oder 0, um die erforderliche Kapazität abzurufen.
  • bufferCountOutput ist die Anzahl der Elemente im buffer-Array oder die erforderliche Kapazität, falls bufferCapacityInput nicht ausreicht.
  • buffer ist ein Array von XrVector3f . Kann NULL sein, wenn bufferCapacityInput = 0.
  • Eine detaillierte Beschreibung zum Abrufen der erforderlichen buffer-Größe finden Sie im Abschnitt Puffergrößenparameter.

Die Anwendung kann die Daten für einen XrSpatialBufferEXT abrufen, der von einer Komponente bereitgestellt wird, 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 Nutzung (implizit)

  •  Die Erweiterung XR_EXT_spatial_entity muss aktiviert werden, bevor xrGetSpatialBufferVector3fEXT aufgerufen wird.
  • snapshot muss ein gültiger XrSpatialSnapshotEXT-Handle sein
  • info muss ein Zeiger auf eine gültige XrSpatialBufferGetInfoEXT-Struktur sein.
  • bufferCountOutput muss ein Zeiger auf einen uint32_t-Wert sein.
  • : Wenn bufferCapacityInput nicht 0 ist , buffer muss ein Zeiger auf ein Array von bufferCapacityInput XrVector3f-Strukturen sein.

Rückgabecodes

Erfolg

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Fehler

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT
  • XR_ERROR_VALIDATION_FAILURE

Die Struktur XrSpatialBufferGetInfoEXT ist so definiert:

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

Mitgliederbeschreibungen

  • type ist der XrStructureType dieser Struktur.
  • next ist NULL oder ein Zeiger auf die nächste Struktur in einer Strukturkette.
  • bufferId ein XrSpatialBufferIdEXT für den Puffer, dessen Daten abgerufen werden sollen.

Gültige Nutzung (implizit)

#define XR_NULL_SPATIAL_BUFFER_ID_EXT 0

XR_NULL_SPATIAL_BUFFER_ID_EXT ist ein reservierter Wert, der eine ungültige XrSpatialBufferIdEXT darstellt . Sie dürfen 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

Die Anwendung kann xrCreateSpatialUpdateSnapshotEXT verwenden, um einen Snapshot zu erstellen und die neuesten Komponentendaten für bestimmte Entitäten abzurufen, die von der Laufzeit bekannt sind. Anwendungen können die XrSpatialEntityEXT-Handles und die Komponententypen angeben, die sie beim Erstellen des Snapshots benötigen.

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, muss die Laufzeit nur räumliche Einheiten in den Snapshot aufnehmen, die mindestens eine der in XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes bereitgestellten Komponenten haben . Außerdem muss die Laufzeit nur Daten für diese Komponenten im Snapshot enthalten.

Die Laufzeit muss XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT zurückgeben, wenn eine der XrSpatialComponentTypeEXT in XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes nicht für die räumlichen Funktionen aktiviert ist, die beim Erstellen von spatialContext an XrSpatialContextCreateInfoEXT :: capabilityConfigs übergeben werden .

Wenn die Anwendung keine Liste der räumlichen Komponententypen in XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes bereitstellt, muss die Laufzeit alle räumlichen Einheiten, die in XrSpatialUpdateSnapshotCreateInfoEXT :: entities aufgeführt sind, in den Snapshot aufnehmen und muss die Daten für alle aktivierten Komponenten der für spatialContext konfigurierten Funktionen enthalten .

Die Laufzeit darf keine räumlichen Einheiten 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 Speicherplatz berücksichtigen und die Snapshots muss löschen, sobald sie nicht mehr benötigt werden.

Gültige Nutzung (implizit)

Rückgabecodes

Erfolg

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Fehler

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT
  • XR_ERROR_TIME_INVALID
  • XR_ERROR_VALIDATION_FAILURE

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

  • type ist der XrStructureType dieser Struktur.
  • next ist NULL oder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind in OpenXR oder dieser Erweiterung nicht definiert.
  • entityCount ist ein uint32_t, das die Anzahl der Elemente im entities-Array beschreibt.
  • entities ist ein Array von XrSpatialEntityEXT, für die die Laufzeit muss die Komponentendaten in den Snapshot aufnehmen.
  • componentTypeCount ist ein uint32_t, das die Anzahl der Elemente im componentTypes-Array beschreibt.
  • componentTypes ist ein Array von XrSpatialComponentTypeEXT, für die die Laufzeit die Daten einbeziehen muss.
  • baseSpace ist der XrSpace, relativ zu dem sich alle Positionen des Updates XrSpatialSnapshotEXT befinden.
  • time ist die XrTime, an der sich alle Standorte des Updates XrSpatialSnapshotEXT befinden.

Gültige Nutzung (implizit)

  •  Die XR_EXT_spatial_entity-Erweiterung muss aktiviert werden, bevor XrSpatialUpdateSnapshotCreateInfoEXT verwendet wird.
  • type muss XR_TYPE_SPATIAL_UPDATE_SNAPSHOT_CREATE_INFO_EXT sein
  • next muss NULL oder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein.
  • entities muss ein Zeiger auf ein Array von entityCount gültigen XrSpatialEntityEXT-Handles sein.
  • Wenn componentTypeCount nicht 0 ist , componentTypes muss ein Zeiger auf ein Array von componentTypeCount gültigen XrSpatialComponentTypeEXT-Werten sein.
  • baseSpace muss ein gültiger XrSpace-Handle sein.
  •  Der Parameter entityCount muss größer als 0 sein.
  •  Sowohl baseSpace als auch die Elemente von entities müssen in derselben XrSession erstellt, zugewiesen oder abgerufen worden sein.

Snapshot löschen

Die Funktion xrDestroySpatialSnapshotEXT ist so definiert:

XrResult xrDestroySpatialSnapshotEXT(
    XrSpatialSnapshotEXT                        snapshot);

Parameterbeschreibungen

Die Anwendung kann xrDestroySpatialSnapshotEXT aufrufen, um das Handle XrSpatialSnapshotEXT und die zugehörigen Ressourcen zu löschen.

Gültige Nutzung (implizit)

Threadsicherheit

  • Der Zugriff auf snapshot und alle untergeordneten Handles muss extern synchronisiert werden.

Rückgabecodes

Erfolg

  • XR_SUCCESS

Fehler

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_RUNTIME_FAILURE

Allgemeine Komponenten

Begrenzte 2D-Ansicht

Komponentendaten

Die Struktur XrSpatialBounded2DDataEXT ist so definiert:

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

Mitgliederbeschreibungen

  • center ist ein XrPosef, der den geometrischen Mittelpunkt der begrenzten 2D-Komponente definiert.
  • extents ist die Ausdehnung der begrenzten 2D-Komponente entlang der x-Achse (extents.width) und der y-Achse (extents.height), zentriert auf center .

Die extents des XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT beziehen sich auf die Größe der Einheit in der XY-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 Meter × 1 Meter große Ebene, die auf {0, 0, 0} zentriert ist und deren Normalenvektor der Vorderseite in Richtung der +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: Koordinatensystem der Komponente „Bounded2D“

Hinweis

OpenXR verwendet eine XY-Ebene mit +Z als Ebenennormal, andere APIs verwenden möglicherweise eine XZ-Ebene mit +Y als Ebenennormal. Die XY-Ebene kann in eine XZ-Ebene umgewandelt werden, indem sie um -π/2 Radiant um die +X-Achse gedreht wird.

Gültige Nutzung (implizit)

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

  • type ist der XrStructureType dieser Struktur.
  • next ist NULL oder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind in OpenXR oder dieser Erweiterung nicht definiert.
  • boundCount ist ein uint32_t, das die Anzahl der Elemente im bounds-Array beschreibt.
  • bounds ist ein Array von XrSpatialBounded2DDataEXT .

Die Laufzeit muss XR_ERROR_VALIDATION_FAILURE von xrQuerySpatialComponentDataEXT zurückgeben, wenn XrSpatialComponentBounded2DListEXT in der nächsten Kette von XrSpatialComponentDataQueryResultEXT :: next ist, 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 Nutzung (implizit)

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

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

  • type ist der XrStructureType dieser Struktur.
  • next ist NULL oder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind in OpenXR oder dieser Erweiterung nicht definiert.
  • boundCount ist ein uint32_t, das die Anzahl der Elemente im bounds-Array beschreibt.
  • bounds ist ein Array von XrBoxf .

Die Laufzeit muss XR_ERROR_VALIDATION_FAILURE von xrQuerySpatialComponentDataEXT zurückgeben, wenn XrSpatialComponentBounded3DListEXT in der nächsten Kette von XrSpatialComponentDataQueryResultEXT :: next enthalten ist, 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 Nutzung (implizit)

  •  Die XR_EXT_spatial_entity-Erweiterung muss aktiviert sein, bevor XrSpatialComponentBounded3DListEXT verwendet wird.
  • type muss XR_TYPE_SPATIAL_COMPONENT_BOUNDED_3D_LIST_EXT sein
  • next muss NULL oder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein.
  • bounds muss ein Zeiger auf ein Array von boundCount XrBoxf-Strukturen sein.
  •  Der Parameter boundCount muss größer als 0 sein.
Konfiguration

Wenn XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT in XrSpatialCapabilityComponentTypesEXT :: componentTypes für eine bestimmte Funktion aufgeführt ist, kann die Anwendung sie aktivieren, indem sie die Enumeration 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

  • type ist der XrStructureType dieser Struktur.
  • next ist NULL oder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind in OpenXR oder dieser Erweiterung nicht definiert.
  • parentCount ist ein uint32_t, das die Anzahl der Elemente im parents-Array beschreibt.
  • parents ist ein Array von XrSpatialEntityIdEXT .

Die Laufzeit muss XR_ERROR_VALIDATION_FAILURE von xrQuerySpatialComponentDataEXT zurückgeben, wenn XrSpatialComponentParentListEXT in der nächsten Kette von XrSpatialComponentDataQueryResultEXT :: next enthalten ist, 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 Nutzung (implizit)

  •  Die Erweiterung XR_EXT_spatial_entity muss aktiviert werden, bevor XrSpatialComponentParentListEXT verwendet wird.
  • type muss XR_TYPE_SPATIAL_COMPONENT_PARENT_LIST_EXT sein
  • next muss NULL oder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein.
  • parents muss ein Zeiger auf ein Array von parentCount XrSpatialEntityIdEXT-Werten sein.
  •  Der Parameter parentCount muss größer als 0 sein.
Konfiguration

Wenn XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT in XrSpatialCapabilityComponentTypesEXT :: componentTypes für eine bestimmte Funktion aufgeführt ist, kann die Anwendung sie aktivieren, indem sie die Enumeration 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

  • origin ist ein XrPosef, der den Ursprung des Mesh definiert. Alle Eckpunkte des Mesh müssen relativ zu diesem Ursprung sein.
  • vertexBuffer ist ein XrSpatialBufferEXT, der die ID für einen Puffer bereitstellt, der den Vertex-Puffer der Entität darstellt, zu der diese Komponente gehört. Die Position der Eckpunkte muss relativ zu origin sein .
  • indexBuffer ist ein XrSpatialBufferEXT, der die ID für einen Puffer mit einem Array von Dreiecksindizes bereitstellt. Diese geben die Indizes der Mesh-Vertices in vertexBuffer an. Die Dreiecksindizes müssen in der Reihenfolge gegen den Uhrzeigersinn zurückgegeben werden. Drei Indizes stehen für ein Dreieck.

Für den Komponententyp, der XrSpatialMeshDataEXT verwendet, muss der XrSpatialBufferTypeEXT von vertexBuffer und indexBuffer angegeben werden .

Gültige Nutzung (implizit)

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

  • type ist der XrStructureType dieser Struktur.
  • next ist NULL oder ein Zeiger auf die nächste Struktur in einer Strukturkette.
  • meshCount ist ein uint32_t, das die Anzahl der Elemente im meshes-Array beschreibt.
  • meshes ist ein Array von XrSpatialMeshDataEXT .

Die Anwendung kann die 3D-Mesh-Komponente der räumlichen Einheiten in einem XrSpatialSnapshotEXT abfragen, indem sie XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT in XrSpatialComponentDataQueryConditionEXT :: componentTypes hinzufügt und XrSpatialComponentMesh3DListEXT der Next-Pointer-Kette 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 wird, muss XrSpatialBufferEXT :: bufferType für XrSpatialMeshDataEXT :: vertexBuffer XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT und XrSpatialBufferEXT :: bufferType für XrSpatialMeshDataEXT :: indexBuffer XR_SPATIAL_BUFFER_TYPE_UINT32_EXT sein .

Gültige Nutzung (implizit)

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 die Enumeration in die XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents-Liste der 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 Tracking-Status

Die Struktur XrSpatialFilterTrackingStateEXT ist so definiert:

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

Mitgliederbeschreibungen

  • type ist der XrStructureType dieser Struktur.
  • next ist NULL oder ein Zeiger auf die nächste Struktur in einer Strukturkette.
  • trackingState ist der XrSpatialEntityTrackingStateEXT, für den die Anwendung den Filter anwenden möchte.

Die Anwendung kann XrSpatialFilterTrackingStateEXT in der nächsten Kette von XrSpatialDiscoverySnapshotCreateInfoEXT verwenden, um die Suche 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 Nutzung (implizit)

Beispielcode

App-Nutzung

Anwendungen verwenden die Erweiterung für räumliche Entitäten in der Regel nach folgendem Muster:

Räumliche Einheiten ermitteln und Komponentendaten abfragen

Im folgenden Beispielcode wird gezeigt, wie räumliche Einheiten für die Funktion „Foo“ ermittelt und die zugehörigen Komponentendaten abgefragt werden.

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

Im folgenden Beispielcode wird gezeigt, 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 Einheit bereitstellt,

  • 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 der Laufzeit Hinweise darauf geben, welche Einheiten und Daten in den Snapshot aufgenommen werden sollen, wie sie durch die aktuelle Konfiguration des räumlichen Kontexts (und damit die aktuelle Konfiguration der zugrunde liegenden Dienste) erfasst werden.

  • Wenn in einer Erweiterung eine neue XrSpatialCapabilityEXT definiert wird ,

  • 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 die Anwendung verwenden kann, 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 XrSpatialBufferIdEXT bereitstellt, muss dieser mit einem XrSpatialBufferTypeEXT einhergehen, um die Anwendung darüber zu informieren, welcher Datentyp der Puffer hat. Die Anwendung kann eine geeignete xrGetSpatialBuffer*-Funktion verwenden, um den tatsächlichen Inhalt des Puffers abzurufen.

Richtlinien für semantische Labels und Erweiterungen

Diese Erweiterung definiert zwar keine Komponente zum Übermitteln der semantischen Labelinformationen einer Rechtspersönlichkeit, 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 und nicht 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 eine semantische Labelgruppe darstellt, muss einen Wert haben, der angibt, dass die Entität keiner der Labels dieser Gruppe zugeordnet ist. Der Name dieses Enumerationswerts muss „UNCATEGORIZED“ enthalten, z.B. XR_SPATIAL_PLANE_SEMANTIC_LABEL_UNCATEGORIZED_EXT . Dieser Wert gibt Anwendungen an, dass die Laufzeit diese Entität erkennt, sie aber auch in anderen semantischen Label-Sets kategorisiert wird.
  • Die Aufzählung dieses neu definierten XrSpatialComponentTypeEXT in xrEnumerateSpatialCapabilityComponentTypesEXT impliziert, dass die Laufzeit die semantische Labelgruppe (und damit die in der Gruppe definierten Labels) unterstützt, die diesem Komponententyp entspricht.
  • Anwendungen geben an, dass sie Entitäten mit Labels aus diesem semantischen Label-Set erkennen möchten, indem sie den entsprechenden XrSpatialComponentTypeEXT in das XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents-Array der Konfigurationsstruktur für die Funktion aufnehmen, für die der Komponententyp aufgezählt wird.
  • Es ist möglich, dass eine einzelne räumliche Einheit mehrere Komponenten hat, die jeweils ein Label aus ihrem eigenen semantischen Labelset bereitstellen. Sehen Sie sich das folgende Beispiel mit einigen hypothetischen semantischen Labelsets an – XrSpatialObjectSemanticLabel, die Werte wie „chair“, „sofa“, „table“ usw. haben können. XrSpatialSofaBrand, das Werte wie IKEA, Wayfair usw. haben kann, und XrSpatialIkeaSofa, das bestimmte IKEA-Modellnamen von Sofas haben kann. In diesem Szenario hat dieselbe Sofa-Einheit alle drei Komponenten (Labels aus allen drei semantischen Label-Sets), die jeweils eine unterschiedliche Granularität der Informationen zur Einheit liefern.
  • Wenn in einer Erweiterung ein neuer XrSpatialComponentTypeEXT definiert wird, der zusätzlich zum Label UNCATEGORIZED eine neue semantische Labelgruppe mit mehreren Labels bereitstellt, sollte in der Erweiterung ein XrSpatialCapabilityFeatureEXT definiert werden. Dadurch können Anwendungen nur eine Teilmenge der Labels aktivieren, die in der semantischen Labelgruppe definiert sind, die diesem Komponententyp entspricht. Diese Teilmenge, die in der nächsten Kette der Funktionskonfiguration bereitgestellt wird, dient als Hinweis für Runtimes, um ihre Tracking-Pipelines zu optimieren und nur die bereitgestellte Teilmenge zu erfassen. Ein Beispiel für eine solche Feature-Struktur finden Sie unten .
  • Mit Erweiterungen dürfen keine Labels zur vorhandenen Aufzählung semantischer Labels hinzugefügt werden. Stattdessen muss eine neue Aufzählung definiert werden, die neben den neu hinzugefügten Aufzählungselementen auch entsprechende Aufzählungselemente mit identischer Semantik und Werten enthält, die denen aus der anderen Gruppe entsprechen. In der Spezifikation des neu definierten Bedingungssatzes von semantischen Labels muss auch die Zuordnung zwischen dem alten und dem neuen Bedingungssatz festgelegt werden. Beispiel
Beispiel für die Definition einer räumlichen Funktion 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 räumliche semantische Label-Erweiterung
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;

Im obigen Beispiel definiert eine Erweiterung die Enumeration XrSpatialExamplePlaneSemanticLabelExtensionEXT, um die vorhandene XrSpatialPlaneSemanticLabelEXT mit Werten für Türen und Fenster zu erweitern. Die Spezifikation für die neue Aufzählung muss Text für das folgende Formular 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 Basistypen

  • XrSpatialBufferIdEXT
  • XrSpatialEntityIdEXT

Neue Objekttypen

Neue Befehle

Neue Strukturen

Neue Enums

Neue Enum-Konstanten

  • XR_EXT_SPATIAL_ENTITY_EXTENSION_NAME
  • XR_EXT_spatial_entity_SPEC_VERSION
  • XrObjectType erweitern :

    • XR_OBJECT_TYPE_SPATIAL_CONTEXT_EXT
    • XR_OBJECT_TYPE_SPATIAL_ENTITY_EXT
    • XR_OBJECT_TYPE_SPATIAL_SNAPSHOT_EXT
  • XrResult erweitern :

    • XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT
    • XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT
    • XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT
    • XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT
    • XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT
    • XR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXT
  • XrStructureType erweitern :

    • XR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXT
    • XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXT
    • XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXT
    • XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT
    • XR_TYPE_SPATIAL_BUFFER_GET_INFO_EXT
    • XR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXT
    • XR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXT
    • XR_TYPE_SPATIAL_COMPONENT_BOUNDED_3D_LIST_EXT
    • XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT
    • XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT
    • XR_TYPE_SPATIAL_COMPONENT_MESH_3D_LIST_EXT
    • XR_TYPE_SPATIAL_COMPONENT_PARENT_LIST_EXT
    • XR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXT
    • XR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT
    • XR_TYPE_SPATIAL_ENTITY_FROM_ID_CREATE_INFO_EXT
    • XR_TYPE_SPATIAL_FILTER_TRACKING_STATE_EXT
    • XR_TYPE_SPATIAL_UPDATE_SNAPSHOT_CREATE_INFO_EXT

Probleme

  • Wird eine einzelne Entität immer nur aus einer einzigen Funktion abgeleitet?

    • Geklärt
    • Antwort: Nein. Das liegt ganz bei der Laufzeit, die auf ihren eigenen Trackingfunktionen basiert und bestimmt, wie eine erkannte Einheit dargestellt werden soll. Die Spezifikation schreibt keine bestimmte Darstellung räumlicher Einheiten vor, mit Ausnahme der garantierten Komponenten einer bestimmten Funktion, um eine Mindestanforderung festzulegen. Eine Laufzeitumgebung kann in der Lage sein, von separaten Funktionen erkannte Einheiten zusammenzuführen und als eine einzelne Einheit mit den garantierten Komponenten aller Funktionen darzustellen, die zur Identifizierung beigetragen haben. Ein Beispiel hierfür ist, dass Tabellen sowohl durch die Funktion zum Erfassen von Ebenen als auch durch die Funktion zum Erfassen von Objekten erkannt werden können. Dabei wird die XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT-Komponente der Entität durch das Erfassen von Ebenen und XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT durch das Erfassen von Objekten bereitgestellt. In einer bestimmten Laufzeit kann die Tabelle als zwei separate Einheiten mit jeweils eigenen garantierten Komponenten bereitgestellt werden, während in bestimmten Laufzeiten nur eine Einheit zur Darstellung der Tabelle bereitgestellt wird, wobei sowohl XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT als auch XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT in derselben Einheit enthalten sind. Wichtig ist, dass eine bestimmte räumliche Einheit höchstens eine Komponente eines bestimmten Komponententyps haben kann . Wenn die von den verschiedenen Funktionen erstellten Komponentendaten für eine bestimmte Einheit in Konflikt stehen, muss die Laufzeit sie als zwei separate Einheiten darstellen.

Versionsverlauf

  • Version 1, 12.04.2024 (Nihav Jain, Google)

    • Erste Beschreibung der Erweiterung