XR_EXT_spatial_entity
Name String
XR_EXT_spatial_entity
Typ rozszerzenia
Rozszerzenie instancji
Zarejestrowany numer wewnętrzny
741
Wersja
1
Stan ratyfikacji
Ratified
Zależności rozszerzeń i wersji
XR_EXT_future
Twórcy
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
Przegląd
To rozszerzenie wprowadza koncepcje i podstawy rozpoznawania scen i rozumowania przestrzennego w OpenXR. Ujednolica to kilka powiązanych, ale odrębnych obszarów funkcjonalności, które są wyliczane, konfigurowane i używane w ogólnie jednolity sposób, zgodnie z definicją tego rozszerzenia. Ponieważ w tym rozszerzeniu brakuje konkretnych definicji któregokolwiek z tych obszarów funkcjonalnych, tekst formalnej specyfikacji jest nieco abstrakcyjny. Przykłady zawarte w tym tekście specyfikacji rozszerzenia odnoszą się czasami do funkcji zdefiniowanych w nadchodzącym lub hipotetycznym powiązanym rozszerzeniu w celu ilustracji, bez nieodłącznego ograniczania lub określania takich dodatkowych funkcji.
Główne elementy tego rozszerzenia to:
- Elementy przestrzenne: funkcje są skoncentrowane wokół elementów , które same w sobie zapewniają bardzo ograniczoną funkcjonalność.
- Komponenty przestrzenne: te elementy mają powiązane komponenty, które dostarczają dane i zachowania.
- Typy komponentów przestrzennych: każdy komponent przestrzenny ma określony typ komponentu , a każdy element ma co najwyżej 1 komponent danego typu .
- Kontekst przestrzenny: wszystkie interakcje z elementami przestrzennymi odbywają się w kontekście po fazie inicjowania i konfiguracji.
- Funkcje przestrzenne: manipulowanie elementami przestrzennymi jest w dużej mierze możliwe dzięki funkcjom . Funkcja to jednostka funkcjonalności, np. (bez ograniczeń) kotwice zdefiniowane przez aplikację, wykrywanie płaszczyzny lub śledzenie obrazu. Każda funkcja jest zwykle definiowana w osobnym rozszerzeniu (włączanym podczas tworzenia instancji) i włączana dla określonego kontekstu w momencie tworzenia.
- Każda funkcja jest powiązana z zestawem typów komponentów, dla których komponenty są obecne w każdym elemencie udostępnianym przez tę funkcję . Rozszerzenie definiujące funkcję określa, które typy komponentów są dla niej obowiązkowe („gwarantowane”), a to samo rozszerzenie lub inne mogą określać opcjonalne typy komponentów udostępniane przez niektóre potencjalne implementacje. Dowolna liczba funkcji może dostarczać encjom komponenty danego typu, które są jednolicie użyteczne niezależnie od funkcji, która je wygenerowała.
- Funkcje możliwości przestrzennych : niektóre możliwości wymagają konfiguracji, dlatego są parametryzowane przez funkcje możliwości .
To rozszerzenie udostępnia mechanizm wyliczania komponentów dostarczanych przez każdą funkcję obsługiwaną w bieżącym systemie, zarówno obowiązkowych, jak i opcjonalnych komponentów .
Niektóre implementacje mogą wymagać różnych poziomów parametryzacji funkcji , dlatego to rozszerzenie udostępnia mechanizm wyliczania obsługiwanych funkcji powiązanych z daną funkcją w bieżącym systemie.
To rozszerzenie definiuje też kilka typowych komponentów, które powinny być używane w szerokim zakresie funkcji .
Podmiot przestrzenny
Encje przestrzenne to encje, które istnieją w jakiejś przestrzeni i mają różne powiązane dane uporządkowane w komponenty. Może to być dowolny z tych elementów:
- fizyczne (np. płaskie powierzchnie, takie jak ściany i podłogi, obiekty, takie jak krzesła i regały itp.);
- wirtualne (np. treści umieszczone i udostępnione przez inną aplikację lub innego użytkownika),
- Zdefiniowane przez aplikację (np. aplikacja oznaczająca obszar jako „salon” lub „kuchnia” albo oznaczająca punkt jako lokalizację, w której ma zostać umieszczony telewizor itp.)
Elementy, które są udostępniane przez system działań, takie jak kontrolery czy spojrzenie, nie powinny być modelowane jako elementy przestrzenne.
Elementy przestrzenne w OpenXR są modelowane jako system Entity-Component . Każda encja przestrzenna ma zestaw komponentów, a każdy komponent zapewnia unikalny zestaw danych i zachowań dla tej encji.
Elementy przestrzenne są reprezentowane przez atom XrSpatialEntityIdEXT lub uchwyt XrSpatialEntityEXT, których szczegóły znajdziesz w sekcji Reprezentacje elementów przestrzennych.
Typy komponentów przestrzennych
Encja przestrzenna ma co najmniej 1 komponent, który dostarcza jej dane lub zachowania. Więcej informacji o niektórych typowych komponentach zdefiniowanych przez to rozszerzenie znajdziesz w sekcji Typowe komponenty.
typedef enum XrSpatialComponentTypeEXT {
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT = 1,
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT = 2,
XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT = 3,
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT = 4,
XR_SPATIAL_COMPONENT_TYPE_PLANE_ALIGNMENT_EXT = 1000741000,
XR_SPATIAL_COMPONENT_TYPE_MESH_2D_EXT = 1000741001,
XR_SPATIAL_COMPONENT_TYPE_POLYGON_2D_EXT = 1000741002,
XR_SPATIAL_COMPONENT_TYPE_PLANE_SEMANTIC_LABEL_EXT = 1000741003,
XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT = 1000743000,
XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT = 1000744000,
XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT = 1000744001,
XR_SPATIAL_COMPONENT_TYPE_MOUSE_SEMANTIC_LABEL_EXT = 1000744002,
XR_SPATIAL_COMPONENT_TYPE_ANCHOR_EXT = 1000762000,
XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_EXT = 1000763000,
XR_SPATIAL_COMPONENT_TYPE_IMAGE_2D_EXT = 1000782000,
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT = 1000783000,
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT = 1000783001,
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT = 1000783002,
XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_ANDROID = 1000785000,
XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID = 1000786000,
XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID = 1000791000,
XR_SPATIAL_COMPONENT_TYPE_ROOM_ANDROIDSYS = 1000792002,
XR_SPATIAL_COMPONENT_TYPE_MATERIAL_TYPE_ANDROIDSYS = 1000792003,
XR_SPATIAL_COMPONENT_TYPE_CONFIDENCE_ANDROIDSYS = 1000792004,
XR_SPATIAL_COMPONENT_TYPE_ROOM_EMPTINESS_ANDROIDSYS = 1000792005,
XR_SPATIAL_COMPONENT_TYPE_OCCUPANCY_GRID_ANDROIDX1 = 1000793000,
XR_SPATIAL_COMPONENT_TYPE_ANNOTATION_QUAD_ANDROID = 1000794000,
XR_SPATIAL_COMPONENT_TYPE_STREETSCAPE_GEOMETRY_METADATA_ANDROIDX2 = 1000798000,
XR_SPATIAL_COMPONENT_TYPE_GEOMETRY_POINT_ANDROID = 1000803000,
XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_SCOPES_ANDROIDX1 = 1000808000,
XR_SPATIAL_COMPONENT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialComponentTypeEXT;
Wyliczenie XrSpatialComponentTypeEXT identyfikuje różne typy komponentów, które środowisko wykonawcze może obsługiwać.
Nie wszystkie wymienione typy komponentów są dostarczane przez to rozszerzenie: niektóre wymagają włączenia dodatkowych rozszerzeń podczas tworzenia instancji, zgodnie z dokumentacją.
Elementy wyliczenia mają te wartości:
Opis typu wyliczeniowego
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT
Komponent, który udostępnia granice 2D elementu przestrzennego. Odpowiednia struktura listy to XrSpatialComponentBounded2DListEXT, a odpowiednia struktura danych to XrSpatialBounded2DDataEXT.
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT
Komponent, który zapewnia granice 3D dla encji przestrzennej. Odpowiednia struktura listy to XrSpatialComponentBounded3DListEXT, a odpowiednia struktura danych to XrBoxf.
XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT
Komponent, który podaje XrSpatialEntityIdEXT elementu nadrzędnego dla encji przestrzennej. Odpowiednia struktura listy to XrSpatialComponentParentListEXT. Odpowiednia struktura danych to XrSpatialEntityIdEXT
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT
Komponent, który udostępnia siatkę 3D dla encji przestrzennej. Odpowiednia struktura listy to XrSpatialComponentMesh3DListEXT, a odpowiednia struktura danych to XrSpatialMeshDataEXT.
XR_SPATIAL_COMPONENT_TYPE_PLANE_ALIGNMENT_EXT
Komponent, który udostępnia typ wyliczeniowy wyrównania płaszczyzny dla encji przestrzennej. Odpowiednia struktura listy to XrSpatialComponentPlaneAlignmentListEXT, a odpowiednia struktura danych to XrSpatialPlaneAlignmentEXT (dodana przez rozszerzenie XR_EXT_spatial_plane_tracking).
XR_SPATIAL_COMPONENT_TYPE_MESH_2D_EXT
Komponent, który udostępnia siatkę 2D dla encji przestrzennej. Odpowiednia struktura listy to XrSpatialComponentMesh2DListEXT, a odpowiednia struktura danych to XrSpatialMeshDataEXT (dodana przez rozszerzenie XR_EXT_spatial_plane_tracking).
XR_SPATIAL_COMPONENT_TYPE_POLYGON_2D_EXT
Komponent, który udostępnia wielokąt granicy 2D dla encji przestrzennej. Odpowiednia struktura listy to XrSpatialComponentPolygon2DListEXT. Odpowiednia struktura danych to XrSpatialPolygon2DDataEXT (dodana przez rozszerzenie XR_EXT_spatial_plane_tracking).
XR_SPATIAL_COMPONENT_TYPE_PLANE_SEMANTIC_LABEL_EXT
Komponent, który udostępnia etykietę semantyczną dla płaszczyzny. Odpowiednia struktura listy to XrSpatialComponentPlaneSemanticLabelListEXT, a odpowiednia struktura danych to XrSpatialPlaneSemanticLabelEXT (dodana przez rozszerzenie XR_EXT_spatial_plane_tracking).
XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT
Komponent opisujący typ, identyfikator i lokalizację znacznika. Odpowiednia struktura listy to XrSpatialComponentMarkerListEXT, a odpowiednia struktura danych to XrSpatialMarkerDataEXT (dodane przez rozszerzenie XR_EXT_spatial_marker_tracking).
XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT
Komponent, który udostępnia etykietę semantyczną sceny. Odpowiednia struktura listy to XrSpatialComponentObjectSemanticLabelListEXT. Odpowiednia struktura danych to XrSpatialObjectSemanticLabelEXT . (dodane przez rozszerzenie XR_EXT_spatial_object_tracking)
XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT
Komponent, który udostępnia etykietę semantyczną klawiatury. Odpowiednia struktura listy to XrSpatialComponentKeyboardSemanticLabelListEXT. Odpowiednia struktura danych to XrSpatialKeyboardSemanticLabelEXT (dodana przez rozszerzenie XR_EXT_spatial_object_tracking).
XR_SPATIAL_COMPONENT_TYPE_MOUSE_SEMANTIC_LABEL_EXT
Komponent, który udostępnia etykietę semantyczną myszy. Odpowiednia struktura listy to XrSpatialComponentMouseSemanticLabelListEXT. Odpowiednia struktura danych to XrSpatialMouseSemanticLabelEXT (dodana przez rozszerzenie XR_EXT_spatial_object_tracking).
XR_SPATIAL_COMPONENT_TYPE_ANCHOR_EXT
Komponent, który podaje lokalizację kotwicy. Odpowiednia struktura listy to XrSpatialComponentAnchorListEXT, a odpowiednia struktura danych to XrPosef (dodana przez rozszerzenie XR_EXT_spatial_anchor).
XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_EXT
Komponent, który udostępnia trwały identyfikator UUID encji przestrzennej. Odpowiednia struktura listy to XrSpatialComponentPersistenceListEXT, a odpowiednia struktura danych to XrSpatialPersistenceDataEXT (dodane przez rozszerzenie XR_EXT_spatial_persistence).
XR_SPATIAL_COMPONENT_TYPE_IMAGE_2D_EXT
Komponent opisujący typ obrazu planarnego. Odpowiednia struktura listy to XrSpatialComponentImage2DListEXT, a odpowiednia struktura danych to XrSpatialImageSizeEXT . (dodane przez rozszerzenie XR_EXT_spatial_image_tracking)
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT
Komponent, który dostarcza wektory normalne dla siatki 3D elementu przestrzennego. Odpowiednia struktura listy to XrSpatialComponentMesh3DNormalsListEXT, a odpowiednia struktura danych to XrSpatialBufferEXT (dodana przez rozszerzenie XR_EXT_spatial_mesh_tracking).
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT
Komponent, który dostarcza etykiety semantyczne dla każdego wierzchołka siatki 3D elementu przestrzennego. Odpowiednia struktura listy to XrSpatialComponentMesh3DVertexSemanticLabelsListEXT. Odpowiednia struktura danych to XrSpatialBufferEXT. Dane w buforze są mapowane na XrSpatialMeshSemanticLabelEXT (dodane przez rozszerzenie XR_EXT_spatial_mesh_tracking).
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT
Komponent, który dostarcza etykiety semantyczne dla każdej powierzchni trójkąta siatki 3D elementu przestrzennego. Odpowiednia struktura listy to XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT. Odpowiednia struktura danych to XrSpatialBufferEXT. Dane w buforze są mapowane na XrSpatialMeshSemanticLabelEXT (dodane przez rozszerzenie XR_EXT_spatial_mesh_tracking).
XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_ANDROID
Komponent, który udostępnia etykietę semantyczną obiektu. Odpowiednia struktura listy to XrSpatialComponentObjectSemanticLabelListANDROID. Odpowiednia struktura danych to XrSpatialObjectSemanticLabelANDROID (dodana przez rozszerzenie XR_ANDROID_spatial_object_tracking).
XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID
Komponent, który podaje pozycję trafienia promienia w element. Odpowiednia struktura listy to XrSpatialComponentRaycastResultListANDROID, a odpowiednia struktura danych to XrSpatialRaycastResultDataANDROID (dodane przez rozszerzenie XR_ANDROID_spatial_discovery_raycast).
XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID
Komponent, który podaje identyfikator encji nadrzędnej względem dołączonej encji. Odpowiednia struktura listy to XrSpatialComponentSubsumedByListANDROID. Odpowiednia struktura danych to XrSpatialEntityIdEXT (dodana przez rozszerzenie XR_ANDROID_spatial_component_subsumed_by).
XR_SPATIAL_COMPONENT_TYPE_ROOM_ANDROIDSYS
Komponent, który podaje wymiary i typ pomieszczenia w przestrzeni; odpowiednia struktura listy to XrSpatialComponentRoomListANDROIDSYS, a odpowiednia struktura danych to XrSpatialRoomDataANDROIDSYS (dodane przez rozszerzenie XR_ANDROIDSYS_spatial_room_tracking).
XR_SPATIAL_COMPONENT_TYPE_MATERIAL_TYPE_ANDROIDSYS
Komponent, który udostępnia typ materiału powierzchni granicznej. Odpowiednia struktura listy to XrSpatialComponentMaterialTypeListANDROIDSYS, a odpowiednia struktura danych to XrSpatialMaterialTypeANDROIDSYS (dodane przez rozszerzenie XR_ANDROIDSYS_spatial_room_tracking).
XR_SPATIAL_COMPONENT_TYPE_CONFIDENCE_ANDROIDSYS
Komponent, który zapewnia pewność elementu możliwego do śledzenia. Odpowiednia struktura listy to XrSpatialComponentConfidenceListANDROIDSYS. Odpowiednia struktura danych to float (dodana przez rozszerzenie XR_ANDROIDSYS_spatial_room_tracking).
XR_SPATIAL_COMPONENT_TYPE_ROOM_EMPTINESS_ANDROIDSYS
Komponent, który określa, czy pomieszczenie jest puste. Odpowiednia struktura listy to XrSpatialComponentRoomEmptinessListANDROIDSYS. Odpowiednia struktura danych to float (dodana przez rozszerzenie XR_ANDROIDSYS_spatial_room_tracking).
XR_SPATIAL_COMPONENT_TYPE_OCCUPANCY_GRID_ANDROIDX1
Komponent, który dostarcza informacje o siatce zajętości dołączonego elementu. Odpowiednia struktura listy to XrSpatialComponentOccupancyGridListANDROIDX1. Odpowiednia struktura danych to XrSpatialOccupancyGridDataANDROIDX1 (dodana przez rozszerzenie XR_ANDROIDX1_spatial_occupancy_grid).
XR_SPATIAL_COMPONENT_TYPE_ANNOTATION_QUAD_ANDROID
Komponent opisujący adnotację czworokątną. Odpowiednia struktura listy to XrSpatialComponentAnnotationQuadListANDROID. Odpowiednia struktura danych to XrSpatialAnnotationQuadDataANDROID (dodana przez rozszerzenie XR_ANDROID_spatial_annotation_tracking).
XR_SPATIAL_COMPONENT_TYPE_STREETSCAPE_GEOMETRY_METADATA_ANDROIDX2
Komponent, który dostarcza metadane geometrii widoku ulicy. Odpowiednia struktura listy to XrSpatialComponentStreetscapeGeometryMetadataListANDROIDX2, a odpowiednia struktura danych to XrSpatialStreetscapeGeometryMetadataANDROIDX2 (dodane przez rozszerzenie XR_ANDROIDX2_geospatial_streetscape).
XR_SPATIAL_COMPONENT_TYPE_GEOMETRY_POINT_ANDROID
Komponent, który identyfikuje encję jako punkt geometryczny. Nie ma odpowiedniej listy ani struktury danych dla tego typu komponentu. Obecność tego komponentu wskazuje jedynie, że dany element można dołączyć do kotwicy. (dodane przez rozszerzenie XR_ANDROID_spatial_geometry_point)
XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_SCOPES_ANDROIDX1
Komponent opisujący zakresy trwałości, w których element jest przechowywany. Jeśli środowisko wykonawcze obsługuje XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_EXT, musi też obsługiwać ten komponent. Odpowiednia struktura danych to XrSpatialBufferEXT . Odpowiednia struktura listy to XrSpatialComponentPersistenceScopeDataListANDROIDX1 . (dodane przez rozszerzenie XR_ANDROIDX1_spatial_anchor_cloud_sharing)
Funkcje i konfiguracja przestrzenna
Funkcje przestrzenne określają możliwości środowiska wykonawczego w zakresie wykrywania elementów, które mają gwarantowany zestaw komponentów. Aplikacje włączają komponenty funkcji przestrzennej podczas tworzenia XrSpatialContextEXT, a środowisko wykonawcze musi udostępniać tylko włączone komponenty w wykrytych elementach. Jeśli na przykład środowisko wykonawcze zgłasza, że jednym z komponentów danej funkcji są „etykiety semantyczne”, oznacza to, że aplikacja może włączyć etykiety semantyczne za pomocą konfiguracji tej funkcji, a środowisko wykonawcze musi udostępniać komponent etykiety semantycznej tylko wtedy, gdy jest on skonfigurowany.
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;
Wyliczenie XrSpatialCapabilityEXT określa różne typy funkcji, które środowisko wykonawcze może obsługiwać.
Elementy wyliczenia mają te wartości:
Opis typu wyliczeniowego
XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT
Śledzenie samolotów (dodane przez rozszerzenie XR_EXT_spatial_plane_tracking)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT
Możliwość wykrywania i śledzenia kodów QR. (dodane przez rozszerzenie XR_EXT_spatial_marker_tracking)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE_EXT
Możliwość wykrywania i śledzenia kodów Micro QR. (dodane przez rozszerzenie XR_EXT_spatial_marker_tracking)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_EXT
Możliwość wykrywania i śledzenia znaczników Aruco. (dodane przez rozszerzenie XR_EXT_spatial_marker_tracking)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXT
Możliwość wykrywania i śledzenia AprilTagów. (dodane przez rozszerzenie XR_EXT_spatial_marker_tracking)
XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT
Śledzenie obiektów (dodane przez rozszerzenie XR_EXT_spatial_object_tracking)
XR_SPATIAL_CAPABILITY_ANCHOR_EXT
Możliwość tworzenia kotwic przestrzennych (dodana przez rozszerzenie XR_EXT_spatial_anchor)
XR_SPATIAL_CAPABILITY_IMAGE_TRACKING_EXT
Możliwość wykrywania i śledzenia płaskich obrazów referencyjnych. (dodane przez rozszerzenie XR_EXT_spatial_image_tracking)
XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT
Możliwość śledzenia siatki środowiska. (dodane przez rozszerzenie XR_EXT_spatial_mesh_tracking)
XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_ANDROID
Śledzenie obiektów (dodane przez rozszerzenie XR_ANDROID_spatial_object_tracking)
XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID
Rzutowanie promieni na bufor głębokości (dodane przez rozszerzenie XR_ANDROID_spatial_discovery_raycast)
XR_SPATIAL_CAPABILITY_ROOM_TRACKING_ANDROIDSYS
Możliwość śledzenia pokoju (dodana przez rozszerzenie XR_ANDROIDSYS_spatial_room_tracking)
XR_SPATIAL_CAPABILITY_ROOM_BOUNDARY_TRACKING_ANDROIDSYS
Możliwość śledzenia granic pomieszczenia (dodana przez rozszerzenie XR_ANDROIDSYS_spatial_room_tracking)
XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID
Śledzenie adnotacji (dodane przez rozszerzenie XR_ANDROID_spatial_annotation_tracking)
XR_SPATIAL_CAPABILITY_STREETSCAPE_GEOMETRY_ANDROIDX2
Geometria widoku ulicy (dodana przez rozszerzenie XR_ANDROIDX2_geospatial_streetscape)
Funkcja xrEnumerateSpatialCapabilitiesEXT jest zdefiniowana w ten sposób:
XrResult xrEnumerateSpatialCapabilitiesEXT(
XrInstance instance,
XrSystemId systemId,
uint32_t capabilityCapacityInput,
uint32_t* capabilityCountOutput,
XrSpatialCapabilityEXT* capabilities);
Opisy parametrów
instanceto uchwyt do XrInstance .systemIdtoXrSystemId, którego możliwości przestrzenne zostaną wyliczone.capabilityCapacityInputto pojemność tablicycapabilitieslub 0, co oznacza prośbę o pobranie wymaganej pojemności.capabilityCountOutputto liczba funkcji lub wymagana pojemność, jeślicapabilityCapacityInputjest niewystarczająca.capabilitiesto tablica XrSpatialCapabilityEXT . Może mieć wartośćNULL, jeślicapabilityCapacityInputwynosi 0.- Szczegółowy opis pobierania wymaganego rozmiaru
capabilitiesznajdziesz w sekcji Parametry rozmiaru bufora.
Aplikacja może wyświetlić listę funkcji przestrzennych obsługiwanych przez dany element XrSystemId za pomocą xrEnumerateSpatialCapabilitiesEXT .
Środowisko wykonawcze nie może wyliczać funkcji przestrzennych, których rozszerzenie nie jest włączone w przypadku instance .
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed wywołaniem xrEnumerateSpatialCapabilitiesEXT. -
instancemusi być prawidłowym uchwytem XrInstance -
capabilityCountOutputmusi być wskaźnikiem do wartościuint32_t - Jeśli
capabilityCapacityInputnie jest równe0,capabilitiesmusi być wskaźnikiem do tablicy wartościcapabilityCapacityInputXrSpatialCapabilityEXT.
Kody zwrotu
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
Funkcja xrEnumerateSpatialCapabilityComponentTypesEXT jest zdefiniowana w ten sposób:
XrResult xrEnumerateSpatialCapabilityComponentTypesEXT(
XrInstance instance,
XrSystemId systemId,
XrSpatialCapabilityEXT capability,
XrSpatialCapabilityComponentTypesEXT* capabilityComponents);
Opisy parametrów
instanceto uchwyt do XrInstance .systemIdtoXrSystemId, którego komponenty funkcji przestrzennych zostaną wyliczone.capabilityto XrSpatialCapabilityEXT, dla którego komponenty zostaną wyliczone.capabilityComponentsto wskaźnik do XrSpatialCapabilityComponentTypesEXT, czyli struktury wejściowej/wyjściowej, w której jest wypełniana tablica przydzielona przez aplikację.
Ta funkcja wylicza typy komponentów, które dana funkcja udostępnia w swoich encjach w systemie zgodnie z konfiguracją.
Aplikacja może używać typów komponentów wymienionych w XrSpatialCapabilityComponentTypesEXT :: componentTypes, aby poznać pełny zestaw komponentów, które systemId obsługuje w przypadku capability, i może użyć tej listy do określenia prawidłowej konfiguracji dla capability podczas tworzenia dla niego XrSpatialContextEXT.
Środowisko wykonawcze musi zwracać XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT, jeśli capability nie jest wyliczany przez xrEnumerateSpatialCapabilitiesEXT .
Środowisko wykonawcze nie może wyliczać typów komponentów przestrzennych, których rozszerzenie nie jest włączone w przypadku instance .
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed wywołaniem xrEnumerateSpatialCapabilityComponentTypesEXT. -
instancemusi być prawidłowym uchwytem XrInstance -
capabilitymusi być prawidłową wartością XrSpatialCapabilityEXT -
capabilityComponentsmusi być wskaźnikiem do struktury XrSpatialCapabilityComponentTypesEXT.
Kody zwrotu
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXTXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
Struktura XrSpatialCapabilityComponentTypesEXT jest zdefiniowana w ten sposób:
typedef struct XrSpatialCapabilityComponentTypesEXT {
XrStructureType type;
void* next;
uint32_t componentTypeCapacityInput;
uint32_t componentTypeCountOutput;
XrSpatialComponentTypeEXT* componentTypes;
} XrSpatialCapabilityComponentTypesEXT;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur. W podstawowym interfejsie OpenXR ani w tym rozszerzeniu nie zdefiniowano takich struktur.componentTypeCapacityInputto pojemność tablicy lub 0, co oznacza prośbę o pobranie wymaganej pojemności.componentTypeCountOutputto liczba typów komponentów lub wymagana pojemność, jeślicomponentTypeCapacityInputjest niewystarczająca.componentTypesto tablica XrSpatialComponentTypeEXT . Może mieć wartośćNULL, jeślicomponentTypeCapacityInputwynosi 0.- Szczegółowy opis pobierania wymaganego rozmiaru
componentTypesznajdziesz w sekcji Parametry rozmiaru bufora.
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed użyciem XrSpatialCapabilityComponentTypesEXT. -
typemusi mieć wartośćXR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXT -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur - Jeśli
componentTypeCapacityInputnie jest równe0,componentTypesmusi być wskaźnikiem do tablicy wartościcomponentTypeCapacityInputXrSpatialComponentTypeEXT
Funkcje przestrzenne
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;
Niektóre funkcje mają parametry udostępniane aplikacji, które umożliwiają skonfigurowanie sposobu obliczania danych komponentu przez środowisko wykonawcze. Te wymiary parametryzacji/konfigurowalności są nazywane funkcjami możliwości. Na przykład w przypadku funkcji śledzenia obrazu środowisko wykonawcze może obsługiwać funkcję, która pozwala aplikacji określić, czy śledzone obrazy są nieruchome.
Przekazanie tych informacji do środowiska wykonawczego za pomocą struktury konfiguracji nie może zmienić zestawu typów komponentów obecnych w powiązanych elementach, np. w śledzonym obrazie. Środowisko wykonawcze może jednak zoptymalizować np. możliwości śledzenia obrazu i zapewnić lepsze działanie aplikacji.
Takie funkcje są reprezentowane przez XrSpatialCapabilityFeatureEXT, a aplikacja wylicza je za pomocą xrEnumerateSpatialCapabilityFeaturesEXT .
Każda funkcja ma odpowiednią strukturę konfiguracji, która umożliwia jej włączenie. Takie struktury konfiguracji muszą być połączone z XrSpatialCapabilityConfigurationBaseHeaderEXT :: next odpowiedniej funkcji.
Elementy wyliczenia mają te wartości:
Opis typu wyliczeniowego
XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_FIXED_SIZE_MARKERS_EXT
Funkcja umożliwiająca aplikacjom określanie rozmiaru znaczników. Odpowiednia struktura konfiguracji to XrSpatialMarkerSizeEXT (dodana przez rozszerzenie XR_EXT_spatial_marker_tracking).
XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_STATIC_MARKERS_EXT
Funkcja umożliwiająca aplikacjom określanie, czy znaczniki są statyczne. Odpowiednia struktura konfiguracji to XrSpatialMarkerStaticOptimizationEXT (dodana przez rozszerzenie XR_EXT_spatial_marker_tracking).
XR_SPATIAL_CAPABILITY_FEATURE_OBJECT_SEMANTIC_LABEL_SUBSET_EXT
Funkcja przestrzenna, która umożliwia aplikacjom określenie podzbioru etykiet z XrSpatialObjectSemanticLabelEXT do śledzenia przez środowisko wykonawcze. Odpowiednia struktura konfiguracji to XrSpatialFeatureObjectSemanticLabelSubsetEXT . (dodane przez rozszerzenie XR_EXT_spatial_object_tracking)
XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID
Środowisko wykonawcze obsługuje filtr XrSpatialBoundsSpherefANDROID dla XrSpatialDiscoverySnapshotCreateInfoEXT. Nie wymaga to uwzględniania żadnej struktury konfiguracji podczas tworzenia kontekstu przestrzennego. (dodane przez rozszerzenie XR_ANDROID_spatial_discovery_bounds)
XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID
Środowisko wykonawcze obsługuje filtr XrSpatialBoundsBoxfANDROID dla XrSpatialDiscoverySnapshotCreateInfoEXT. Nie wymaga to uwzględnienia żadnej struktury konfiguracji podczas tworzenia kontekstu przestrzennego. (dodane przez rozszerzenie XR_ANDROID_spatial_discovery_bounds)
XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID
Środowisko wykonawcze obsługuje filtr XrSpatialBoundsFrustumfANDROID dla XrSpatialDiscoverySnapshotCreateInfoEXT. Nie wymaga to uwzględnienia żadnej struktury konfiguracji podczas tworzenia kontekstu przestrzennego. (dodane przez rozszerzenie XR_ANDROID_spatial_discovery_bounds)
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_AUTOMATIC_SIZE_IMAGES_EXT
Środowisko wykonawcze obsługuje automatyczne określanie fizycznego rozmiaru wykrytych i śledzonych obrazów. Odpowiednia struktura konfiguracji to XrSpatialImageSizeEXT (dodana przez rozszerzenie XR_EXT_spatial_image_tracking).
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_STATIC_IMAGES_EXT
Środowisko wykonawcze obsługuje XrSpatialImageStaticOptimizationEXT . Odpowiednia struktura konfiguracji to XrSpatialImageStaticOptimizationEXT . (dodane przez rozszerzenie XR_EXT_spatial_image_tracking)
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_FIXED_SIZE_IMAGES_EXT
Środowisko wykonawcze obsługuje XrSpatialImageSizeEXT . Odpowiednia struktura konfiguracji to XrSpatialImageSizeEXT (dodana przez rozszerzenie XR_EXT_spatial_image_tracking).
XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT
Funkcja umożliwiająca śledzenie wodoszczelnej siatki środowiska. Odpowiednia struktura konfiguracji to XrSpatialFeatureTrackWatertightMeshEXT . (dodane przez rozszerzenie XR_EXT_spatial_mesh_tracking)
Funkcja xrEnumerateSpatialCapabilityFeaturesEXT jest zdefiniowana w ten sposób:
XrResult xrEnumerateSpatialCapabilityFeaturesEXT(
XrInstance instance,
XrSystemId systemId,
XrSpatialCapabilityEXT capability,
uint32_t capabilityFeatureCapacityInput,
uint32_t* capabilityFeatureCountOutput,
XrSpatialCapabilityFeatureEXT* capabilityFeatures);
Opisy parametrów
instanceto uchwyt do XrInstance .systemIdtoXrSystemId, którego funkcje przestrzenne zostaną wyliczone.capabilityto XrSpatialCapabilityEXT, dla którego funkcje zostaną wyliczone.capabilityFeatureCapacityInputto pojemność tablicy lub 0, co oznacza prośbę o pobranie wymaganej pojemności.capabilityFeatureCountOutputto liczba funkcji lub wymagana pojemność, jeślicapabilityFeatureCapacityInputjest niewystarczająca.capabilityFeaturesto tablica XrSpatialCapabilityFeatureEXT . Może mieć wartośćNULL, jeślicapabilityFeatureCapacityInputwynosi 0.- Szczegółowy opis pobierania wymaganego rozmiaru
capabilityFeaturesznajdziesz w sekcji Parametry rozmiaru bufora.
Aplikacja wykrywa funkcje obsługiwane przez dany system dla XrSpatialCapabilityEXT za pomocą xrEnumerateSpatialCapabilityFeaturesEXT .
W przypadku funkcji, które mają udostępnione funkcje, aplikacja wybiera funkcję lub funkcje do włączenia i udostępnia odpowiednią strukturę konfiguracji w następnym łańcuchu struktur konfiguracji funkcji w XrSpatialContextCreateInfoEXT :: capabilityConfigs .
Jeśli capability nie jest funkcją wymienioną przez xrEnumerateSpatialCapabilitiesEXT , środowisko wykonawcze musi zwrócić XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT .
Środowisko wykonawcze nie może wyliczać funkcji przestrzennych, których rozszerzenie nie jest włączone w przypadku instance .
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed wywołaniem xrEnumerateSpatialCapabilityFeaturesEXT. -
instancemusi być prawidłowym uchwytem XrInstance -
capabilitymusi być prawidłową wartością XrSpatialCapabilityEXT -
capabilityFeatureCountOutputmusi być wskaźnikiem do wartościuint32_t - Jeśli
capabilityFeatureCapacityInputnie jest równe0,capabilityFeaturesmusi być wskaźnikiem do tablicy wartościcapabilityFeatureCapacityInputXrSpatialCapabilityFeatureEXT
Kody zwrotu
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXTXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
Kontekst przestrzenny
Tworzenie kontekstu przestrzennego
XR_DEFINE_HANDLE(XrSpatialContextEXT)
Uchwyt XrSpatialContextEXT reprezentuje zasoby do wykrywania i aktualizowania określonej liczby elementów przestrzennych w środowisku użytkownika. Aplikacja może używać tego uchwytu do wykrywania i aktualizowania elementów przestrzennych za pomocą innych funkcji tego rozszerzenia.
Funkcja xrCreateSpatialContextAsyncEXT jest zdefiniowana w ten sposób:
XrResult xrCreateSpatialContextAsyncEXT(
XrSession session,
const XrSpatialContextCreateInfoEXT* createInfo,
XrFutureEXT* future);
Opisy parametrów
sessionto XrSession, w której kontekst przestrzenny będzie aktywny.createInfoto XrSpatialContextCreateInfoEXT używany do określania parametrów kontekstu przestrzennego.futureto wskaźnik doXrFutureEXT.
Aplikacja może utworzyć uchwyt XrSpatialContextEXT przez:
- Podanie struktur pochodnych XrSpatialCapabilityConfigurationBaseHeaderEXT w XrSpatialContextCreateInfoEXT ::
capabilityConfigs, aby włączyć funkcje i komponenty dla danej funkcji. - Konfigurowanie samych funkcji za pomocą odpowiednich struktur konfiguracji XrSpatialCapabilityFeatureEXT .
Środowisko wykonawcze musi zwracać XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT, jeśli XrSpatialContextCreateInfoEXT ::capabilityConfigCount wynosi 0. Uchwyt kontekstu przestrzennego musi mieć co najmniej 1 funkcję.
Środowisko wykonawcze musi zwracać XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT, jeśli jakakolwiek funkcja w tablicy XrSpatialContextCreateInfoEXT :: capabilityConfigs nie jest wyliczana przez xrEnumerateSpatialCapabilitiesEXT .
Środowisko wykonawcze musi zwracać XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT, jeśli dowolny element XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponentCount w XrSpatialContextCreateInfoEXT :: capabilityConfigs ma wartość 0. Konfiguracja funkcji jest niekompletna bez listy typów komponentów, które mają być włączone dla tej funkcji.
Środowisko wykonawcze musi zwracać XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT, jeśli jakikolwiek typ komponentu wymieniony w XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents nie jest wyliczany dla XrSpatialCapabilityConfigurationBaseHeaderEXT :: capability w xrEnumerateSpatialCapabilityComponentTypesEXT .
Jeśli któraś ze struktur w następnym łańcuchu XrSpatialContextCreateInfoEXT :: capabilityConfigs odpowiada XrSpatialCapabilityFeatureEXT, która nie jest wymieniona dla tej funkcji w xrEnumerateSpatialCapabilityFeaturesEXT, środowisko wykonawcze musi zignorować tę strukturę XrSpatialCapabilityFeatureEXT.
Środowisko wykonawcze musi zwracać XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT, jeśli XrSpatialContextCreateInfoEXT :: capabilityConfigs zawiera wiele struktur z tym samym XrSpatialCapabilityConfigurationBaseHeaderEXT :: capability .
Aby zapewnić optymalne wykorzystanie zasobów systemowych, środowisko wykonawcze może używać konfiguracji podanych w tablicy XrSpatialContextCreateInfoEXT, aby przygotować się na nadchodzące żądania przestrzenne. Na przykład środowisko wykonawcze, które obsługuje funkcję śledzenia płaszczyzny, może rozpocząć potok śledzenia płaszczyzny tylko wtedy, gdy aplikacja utworzy uchwyt kontekstu przestrzennego zawierający funkcję śledzenia płaszczyzny. Jeśli skonfigurowane funkcje mają długi czas rozgrzewania, wywołania funkcji xrCreateSpatialDiscoverySnapshotAsyncEXT mogą zwracać pusty zrzut. Aplikacja może poczekać na XrEventDataSpatialDiscoveryRecommendedEXT, zanim użyje xrCreateSpatialDiscoverySnapshotAsyncEXT, aby mieć pewność, że usługi śledzenia są gotowe do działania.
Jeśli środowisko wykonawcze wymusza system uprawnień do kontrolowania dostępu aplikacji do funkcji przestrzennych konfigurowanych dla XrSpatialContextEXT, środowisko wykonawcze musi zwrócić XR_ERROR_PERMISSION_INSUFFICIENT, jeśli te uprawnienia nie zostały przyznane tej aplikacji.
Ta funkcja rozpoczyna operację asynchroniczną i tworzy odpowiedni obiekt XrFutureEXT , którego można używać z funkcją xrPollFutureEXT i powiązanymi funkcjami. Wartość zwracana przez tę funkcję wskazuje tylko, czy parametry były akceptowalne do zaplanowania operacji asynchronicznej. Odpowiednia funkcja uzupełniania to xrCreateSpatialContextCompleteEXT, której można używać, gdy przyszłość z tej funkcji jest w stanie READY, a dane wyjściowe są wypełniane przez tę funkcję w strukturze uzupełniania XrCreateSpatialContextCompletionEXT .
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed wywołaniem xrCreateSpatialContextAsyncEXT. -
sessionmusi być prawidłowym uchwytem XrSession -
createInfomusi być wskaźnikiem do prawidłowej struktury XrSpatialContextCreateInfoEXT. -
futuremusi być wskaźnikiem do wartościXrFutureEXT
Kody zwrotu
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_PERMISSION_INSUFFICIENTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXTXR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXTXR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXTXR_ERROR_VALIDATION_FAILUREXR_ERROR_TIME_INVALID(jeśli włączona jest opcjaXR_ANDROID_spatial_annotation_tracking)
Struktura XrSpatialContextCreateInfoEXT jest zdefiniowana w ten sposób:
typedef struct XrSpatialContextCreateInfoEXT {
XrStructureType type;
const void* next;
uint32_t capabilityConfigCount;
const XrSpatialCapabilityConfigurationBaseHeaderEXT* const* capabilityConfigs;
} XrSpatialContextCreateInfoEXT;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur. W podstawowym interfejsie OpenXR ani w tym rozszerzeniu nie zdefiniowano takich struktur.capabilityConfigCounttouint32_topisujący liczbę elementów w tablicycapabilityConfigs.capabilityConfigsto wskaźnik do tablicy wskaźników XrSpatialCapabilityConfigurationBaseHeaderEXT.
Struktura XrSpatialContextCreateInfoEXT opisuje informacje potrzebne do utworzenia uchwytu XrSpatialContextEXT.
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed użyciem XrSpatialContextCreateInfoEXT. -
typemusi mieć wartośćXR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXT -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur . Zobacz też: XrSpatialContextPersistenceConfigEXT -
capabilityConfigsmusi być wskaźnikiem do tablicy prawidłowych strukturcapabilityConfigCountopartych na XrSpatialCapabilityConfigurationBaseHeaderEXT. Zobacz też: XrSpatialCapabilityConfigurationAnchorEXT , XrSpatialCapabilityConfigurationAnnotationTrackingANDROID , XrSpatialCapabilityConfigurationAprilTagEXT , XrSpatialCapabilityConfigurationArucoMarkerEXT , XrSpatialCapabilityConfigurationDepthRaycastANDROID , XrSpatialCapabilityConfigurationImageTrackingEXT , XrSpatialCapabilityConfigurationMeshTrackingEXT , XrSpatialCapabilityConfigurationMicroQrCodeEXT , XrSpatialCapabilityConfigurationObjectTrackingANDROID , XrSpatialCapabilityConfigurationObjectTrackingEXT , XrSpatialCapabilityConfigurationPlaneTrackingEXT , XrSpatialCapabilityConfigurationQrCodeEXT , XrSpatialCapabilityConfigurationRoomBoundaryTrackingANDROIDSYS , XrSpatialCapabilityConfigurationRoomTrackingANDROIDSYS , XrSpatialCapabilityConfigurationStreetscapeGeometryANDROIDX2 - Parametr
capabilityConfigCountmusi być większy niż0
Struktura XrSpatialCapabilityConfigurationBaseHeaderEXT jest zdefiniowana w ten sposób:
typedef struct XrSpatialCapabilityConfigurationBaseHeaderEXT {
XrStructureType type;
const void* next;
XrSpatialCapabilityEXT capability;
uint32_t enabledComponentCount;
const XrSpatialComponentTypeEXT* enabledComponents;
} XrSpatialCapabilityConfigurationBaseHeaderEXT;
Ta struktura nie jest używana bezpośrednio w interfejsie API, ale jej struktury podrzędne mogą być używane z XrSpatialContextCreateInfoEXT do konfigurowania funkcji przestrzennych.
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur.capabilityto XrSpatialCapabilityEXT .enabledComponentCounttouint32_topisujący liczbę elementów w tablicyenabledComponents.enabledComponentsto wskaźnik do tablicy XrSpatialComponentTypeEXT .
Środowisko wykonawcze musi zwracać XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT, jeśli capability nie jest wyliczany przez xrEnumerateSpatialCapabilitiesEXT . Środowisko wykonawcze musi zwracać XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT, jeśli jakikolwiek typ komponentu wymieniony w enabledComponents nie jest wyliczany dla capability w xrEnumerateSpatialCapabilityComponentTypesEXT .
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed użyciem XrSpatialCapabilityConfigurationBaseHeaderEXT. -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur -
capabilitymusi być prawidłową wartością XrSpatialCapabilityEXT -
enabledComponentsmusi być wskaźnikiem do tablicy zenabledComponentCountprawidłowymi wartościami XrSpatialComponentTypeEXT - Parametr
enabledComponentCountmusi być większy niż0
Funkcja xrCreateSpatialContextCompleteEXT jest zdefiniowana w ten sposób:
XrResult xrCreateSpatialContextCompleteEXT(
XrSession session,
XrFutureEXT future,
XrCreateSpatialContextCompletionEXT* completion);
Opisy parametrów
sessionto XrSession przekazany wcześniej do xrCreateSpatialContextAsyncEXT ::session.futuretoXrFutureEXTotrzymany z xrCreateSpatialContextAsyncEXT .completionto wskaźnik do XrCreateSpatialContextCompletionEXT .
xrCreateSpatialContextCompleteEXT kończy operację asynchroniczną rozpoczętą przez xrCreateSpatialContextAsyncEXT . Środowisko wykonawcze musi zwracać XR_ERROR_FUTURE_PENDING_EXT, jeśli future nie jest w stanie gotowości. Środowisko wykonawcze musi zwrócić XR_ERROR_FUTURE_INVALID_EXT, jeśli future zostało już ukończone lub anulowane.
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed wywołaniem xrCreateSpatialContextCompleteEXT. -
sessionmusi być prawidłowym uchwytem XrSession -
completionmusi być wskaźnikiem do struktury XrCreateSpatialContextCompletionEXT.
Kody zwrotu
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_FUTURE_INVALID_EXTXR_ERROR_FUTURE_PENDING_EXTXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_VALIDATION_FAILURE
Struktura XrCreateSpatialContextCompletionEXT jest zdefiniowana w ten sposób:
typedef struct XrCreateSpatialContextCompletionEXT {
XrStructureType type;
void* next;
XrResult futureResult;
XrSpatialContextEXT spatialContext;
} XrCreateSpatialContextCompletionEXT;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur.futureResultto XrResult operacji tworzenia kontekstu przestrzennego.spatialContextto XrSpatialContextEXT utworzony przy użyciu danych i konfiguracji w xrCreateSpatialContextAsyncEXT ::createInfo.
Kody zwrotu w przyszłości
Wartości futureResult:
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_RUNTIME_FAILUREXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHEDXR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT
Jeśli futureResult jest kodem powodzenia, spatialContext musi być prawidłowy. Jeśli spatialContext jest prawidłowy, pozostaje taki tylko w cyklu życia xrCreateSpatialContextAsyncEXT :: session lub do momentu, gdy aplikacja zniszczy spatialContext za pomocą xrDestroySpatialContextEXT (w zależności od tego, co nastąpi wcześniej).
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed użyciem XrCreateSpatialContextCompletionEXT. -
typemusi mieć wartośćXR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXT -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur -
futureResultmusi być prawidłową wartością XrResult - Jeśli
spatialContextnie jest XR_NULL_HANDLE ,spatialContextmusi być prawidłowym uchwytem XrSpatialContextEXT
zniszczyć kontekst przestrzenny,
Funkcja xrDestroySpatialContextEXT jest zdefiniowana w ten sposób:
XrResult xrDestroySpatialContextEXT(
XrSpatialContextEXT spatialContext);
Opisy parametrów
spatialContextto obiekt XrSpatialContextEXT utworzony wcześniej przez xrCreateSpatialContextAsyncEXT .
Aplikacja może wywołać funkcję xrDestroySpatialContextEXT, aby zwolnić uchwyt spatialContext i powiązane zasoby po zakończeniu wykrywania i aktualizowania elementów przestrzennych. Jeśli nie ma innego prawidłowego obiektu XrSpatialContextEXT, który został utworzony z tymi samymi funkcjami przestrzennymi co spatialContext, to wywołanie służy jako sugestia dla środowiska wykonawczego, aby wyłączyć usługi śledzenia wymagane przez te funkcje w celu oszczędzania zasobów systemowych.
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed wywołaniem xrDestroySpatialContextEXT. -
spatialContextmusi być prawidłowym uchwytem XrSpatialContextEXT
Bezpieczeństwo wątków
- Dostęp do
spatialContexti wszystkich uchwytów podrzędnych musi być synchronizowany zewnętrznie.
Kody zwrotu
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
Reprezentacje elementów przestrzennych
Identyfikator elementu przestrzennego
XR_DEFINE_ATOM(XrSpatialEntityIdEXT)
XrSpatialEntityIdEXT reprezentuje dowolny rodzaj elementu wykrytego przez środowisko wykonawcze w środowisku przestrzennym użytkownika. Identyfikator XrSpatialEntityIdEXT jest prawidłowy dla elementu XrSpatialContextEXT, w którym został wykryty, a środowisko wykonawcze nie może używać tego samego identyfikatora XrSpatialEntityIdEXT w przypadku różnych elementów w tym samym elemencie XrSpatialContextEXT . Środowisko wykonawcze nie może też używać tego samego identyfikatora XrSpatialEntityIdEXT w wielu elementach XrSpatialContextEXT w ramach tej samej sesji XrSession, niezależnie od tego, czy reprezentuje on ten sam element czy różne elementy.
#define XR_NULL_SPATIAL_ENTITY_ID_EXT 0
XR_NULL_SPATIAL_ENTITY_ID_EXT to zarezerwowana wartość reprezentująca nieprawidłowy identyfikator XrSpatialEntityIdEXT . Może być przekazywany do funkcji interfejsu API i zwracany przez nie tylko wtedy, gdy jest to wyraźnie dozwolone.
Uchwyt elementu przestrzennego
XR_DEFINE_HANDLE(XrSpatialEntityEXT)
Uchwyt XrSpatialEntityEXT reprezentuje element przestrzenny. Aplikacja może utworzyć taki uchwyt, aby poinformować środowisko wykonawcze o swoim zainteresowaniu konkretnym elementem.
Utwórz uchwyt elementu przestrzennego na podstawie identyfikatora
Funkcja xrCreateSpatialEntityFromIdEXT jest zdefiniowana w ten sposób:
XrResult xrCreateSpatialEntityFromIdEXT(
XrSpatialContextEXT spatialContext,
const XrSpatialEntityFromIdCreateInfoEXT* createInfo,
XrSpatialEntityEXT* spatialEntity);
Opisy parametrów
spatialContextto obiekt XrSpatialContextEXT utworzony wcześniej za pomocą xrCreateSpatialContextAsyncEXT .createInfoto wskaźnik do struktury XrSpatialEntityFromIdCreateInfoEXT.spatialEntityto zwrócony uchwyt XrSpatialEntityEXT.
Aplikacja może używać funkcji xrCreateSpatialEntityFromIdEXT do utworzenia uchwytu XrSpatialEntityEXT, który jest odwołaniem do encji istniejącej w środowisku użytkownika.
Środowisko wykonawcze musi zwracać XR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXT, jeśli XrSpatialEntityFromIdCreateInfoEXT :: entityId nie jest prawidłowym identyfikatorem dla spatialContext .
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed wywołaniem xrCreateSpatialEntityFromIdEXT. -
spatialContextmusi być prawidłowym uchwytem XrSpatialContextEXT -
createInfomusi być wskaźnikiem do prawidłowej struktury XrSpatialEntityFromIdCreateInfoEXT -
spatialEntitymusi być wskaźnikiem do uchwytu XrSpatialEntityEXT.
Kody zwrotu
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
Struktura XrSpatialEntityFromIdCreateInfoEXT jest zdefiniowana w ten sposób:
typedef struct XrSpatialEntityFromIdCreateInfoEXT {
XrStructureType type;
const void* next;
XrSpatialEntityIdEXT entityId;
} XrSpatialEntityFromIdCreateInfoEXT;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur. W podstawowym interfejsie OpenXR ani w tym rozszerzeniu nie zdefiniowano takich struktur.entityIdtoXrSpatialEntityIdEXTelementu, dla którego aplikacja chce utworzyć uchwyt.
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed użyciem XrSpatialEntityFromIdCreateInfoEXT. -
typemusi mieć wartośćXR_TYPE_SPATIAL_ENTITY_FROM_ID_CREATE_INFO_EXT -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur
Zniszcz uchwyt encji przestrzennej
Funkcja xrDestroySpatialEntityEXT jest zdefiniowana w ten sposób:
XrResult xrDestroySpatialEntityEXT(
XrSpatialEntityEXT spatialEntity);
Opisy parametrów
spatialEntityto uchwyt do XrSpatialEntityEXT utworzonego wcześniej przez funkcję taką jak xrCreateSpatialEntityFromIdEXT .
Aplikacja może używać funkcji xrDestroySpatialEntityEXT, aby zwolnić uchwyt spatialEntity, gdy nie jest już zainteresowana elementem, do którego odwołuje się ten uchwyt.
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed wywołaniem xrDestroySpatialEntityEXT. -
spatialEntitymusi być prawidłowym uchwytem XrSpatialEntityEXT
Bezpieczeństwo wątków
- Dostęp do
spatialEntityi wszystkich uchwytów podrzędnych musi być synchronizowany zewnętrznie.
Kody zwrotu
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
Zdjęcie przestrzenne
XR_DEFINE_HANDLE(XrSpatialSnapshotEXT)
Aplikacja może tworzyć migawki przestrzenne w celu wykrywania elementów przestrzennych lub aktualizowania informacji o znanych elementach przestrzennych. Uchwyt XrSpatialSnapshotEXT reprezentuje niezmienne dane wykrytych lub zaktualizowanych elementów przestrzennych oraz podzbiór ich komponentów wybranych przez aplikację. Zrzut przestrzenny przedstawia spójny widok encji i ich danych składowych. Po utworzeniu zrzutu jego dane muszą pozostać niezmienione przez cały okres jego ważności.
Aplikacja może utworzyć dowolną liczbę zrzutów, ale musi pamiętać o pamięci przydzielonej dla każdego nowego zrzutu i musi zniszczyć zrzuty, gdy nie są już potrzebne.
Utwórz zrzut wykrywania
Funkcja xrCreateSpatialDiscoverySnapshotAsyncEXT jest zdefiniowana w ten sposób:
XrResult xrCreateSpatialDiscoverySnapshotAsyncEXT(
XrSpatialContextEXT spatialContext,
const XrSpatialDiscoverySnapshotCreateInfoEXT* createInfo,
XrFutureEXT* future);
Opisy parametrów
spatialContextto obiekt XrSpatialContextEXT utworzony wcześniej za pomocą xrCreateSpatialContextAsyncEXT .createInfoto wskaźnik do XrSpatialDiscoverySnapshotCreateInfoEXT .futureto wskaźnik doXrFutureEXT.
Aplikacja może wykrywać elementy przestrzenne, tworząc zdjęcie wykrywania za pomocą funkcji xrCreateSpatialDiscoverySnapshotAsyncEXT .
Ta funkcja rozpoczyna operację asynchroniczną i tworzy odpowiedni obiekt XrFutureEXT , którego można używać z funkcją xrPollFutureEXT i powiązanymi funkcjami. Wartość zwracana przez tę funkcję wskazuje tylko, czy parametry były akceptowalne do zaplanowania operacji asynchronicznej. Odpowiednia funkcja zakończenia to xrCreateSpatialDiscoverySnapshotCompleteEXT, której można użyć, gdy przyszłość z tej funkcji jest w stanie READY, a dane wyjściowe są wypełniane przez tę funkcję w strukturze zakończenia XrCreateSpatialDiscoverySnapshotCompletionEXT .
Aplikacja może przesłać wiele żądań utworzenia migawki wykrywania bez konieczności czekania na zakończenie poprzedniego. Środowisko wykonawcze może przetwarzać i tworzyć zrzuty w dowolnej kolejności. Środowisko wykonawcze może opóźnić zakończenie tworzenia migawki wykrywania, aby ograniczyć działanie aplikacji, jeśli musi zmniejszyć wykorzystanie zasobów systemowych ze względu na zasady dotyczące zasilania, temperatury lub inne zasady urządzenia.
Aplikacja może używać XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes do filtrowania listy elementów i komponentów, których dane środowisko wykonawcze musi uwzględnić w zdjęciu. Jeśli aplikacja udostępnia prawidłową listę typów komponentów przestrzennych w XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes, środowisko wykonawcze musi uwzględniać w migawce tylko te elementy przestrzenne, które mają co najmniej 1 z komponentów podanych w XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes . Środowisko wykonawcze musi też zawierać dane tylko o tych komponentach, które znajdują się w migawce.
Środowisko wykonawcze musi zwracać XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT, jeśli którykolwiek z parametrów XrSpatialComponentTypeEXT w XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes nie jest włączony dla funkcji przestrzennych przekazanych do XrSpatialContextCreateInfoEXT :: capabilityConfigs podczas tworzenia spatialContext .
Jeśli aplikacja nie udostępnia listy typów komponentów przestrzennych w XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes, środowisko wykonawcze musi uwzględnić w migawce wszystkie elementy przestrzenne, które mają zestaw komponentów wymienionych w XrSpatialCapabilityConfigurationBaseHeaderEXT ::enabledComponents dla funkcji skonfigurowanych dla spatialContext . Środowisko wykonawcze musi zawierać dane dotyczące wszystkich włączonych komponentów funkcji skonfigurowanych dla spatialContext .
Jeśli zdarzenie XrEventDataReferenceSpaceChangePending zostanie umieszczone w kolejce przed zakończeniem future, a XrEventDataReferenceSpaceChangePending :: poseValid ma wartość false, środowisko wykonawcze może utworzyć XrSpatialSnapshotEXT, który nie zawiera żadnych elementów, lub ustawić XrSpatialEntityTrackingStateEXT elementów, których nie można już zlokalizować w XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace w XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time na XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT lub XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT . Środowisko wykonawcze nie może ustawić XrCreateSpatialContextCompletionEXT :: futureResult na kod błędu z powodu XrEventDataReferenceSpaceChangePending .
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed wywołaniem xrCreateSpatialDiscoverySnapshotAsyncEXT. -
spatialContextmusi być prawidłowym uchwytem XrSpatialContextEXT -
createInfomusi być wskaźnikiem do prawidłowej struktury XrSpatialDiscoverySnapshotCreateInfoEXT -
futuremusi być wskaźnikiem do wartościXrFutureEXT
Kody zwrotu
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXTXR_ERROR_VALIDATION_FAILURE
Struktura XrSpatialDiscoverySnapshotCreateInfoEXT jest zdefiniowana w ten sposób:
typedef struct XrSpatialDiscoverySnapshotCreateInfoEXT {
XrStructureType type;
const void* next;
uint32_t componentTypeCount;
const XrSpatialComponentTypeEXT* componentTypes;
} XrSpatialDiscoverySnapshotCreateInfoEXT;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur. W podstawowym interfejsie OpenXR ani w tym rozszerzeniu nie zdefiniowano takich struktur.componentTypeCounttouint32_topisujący liczbę elementów w tablicycomponentTypes.componentTypesto tablica XrSpatialComponentTypeEXT .
Struktura XrSpatialDiscoverySnapshotCreateInfoEXT opisuje informacje potrzebne do utworzenia uchwytu XrSpatialSnapshotEXT podczas wykrywania elementów przestrzennych.
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed użyciem XrSpatialDiscoverySnapshotCreateInfoEXT. -
typemusi mieć wartośćXR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur . Zobacz też: XrSpatialBoundsBoxfANDROID , XrSpatialBoundsFrustumfANDROID , XrSpatialBoundsSpherefANDROID , XrSpatialDiscoveryPersistenceContextFilterANDROIDX1 , XrSpatialDiscoveryPersistenceUuidFilterEXT , XrSpatialDiscoveryRoomBoundaryFilterANDROIDSYS , XrSpatialDiscoveryUniqueEntitiesFilterANDROID , XrSpatialFilterTrackingStateEXT , XrSpatialRaycastInfoANDROID - Jeśli
componentTypeCountnie jest równe0,componentTypesmusi być wskaźnikiem do tablicy prawidłowych wartościcomponentTypeCountXrSpatialComponentTypeEXT.
Funkcja xrCreateSpatialDiscoverySnapshotCompleteEXT jest zdefiniowana w ten sposób:
XrResult xrCreateSpatialDiscoverySnapshotCompleteEXT(
XrSpatialContextEXT spatialContext,
const XrCreateSpatialDiscoverySnapshotCompletionInfoEXT* createSnapshotCompletionInfo,
XrCreateSpatialDiscoverySnapshotCompletionEXT* completion);
Opisy parametrów
spatialContextto XrSpatialContextEXT przekazany wcześniej do xrCreateSpatialDiscoverySnapshotAsyncEXT ::spatialContext.createSnapshotCompletionInfoto wskaźnik do XrCreateSpatialDiscoverySnapshotCompletionInfoEXT, który dostarcza informacji o zakończeniu żądania utworzenia migawki wykrywania.completionto wskaźnik do XrCreateSpatialDiscoverySnapshotCompletionEXT .
xrCreateSpatialDiscoverySnapshotCompleteEXT kończy operację asynchroniczną rozpoczętą przez xrCreateSpatialDiscoverySnapshotAsyncEXT . Środowisko wykonawcze musi zwracać XR_ERROR_FUTURE_PENDING_EXT, jeśli XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: future nie jest w stanie gotowości. Środowisko wykonawcze musi zwrócić XR_ERROR_FUTURE_INVALID_EXT, jeśli XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: future zostało już ukończone lub anulowane.
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed wywołaniem xrCreateSpatialDiscoverySnapshotCompleteEXT. -
spatialContextmusi być prawidłowym uchwytem XrSpatialContextEXT -
createSnapshotCompletionInfomusi być wskaźnikiem do prawidłowej struktury XrCreateSpatialDiscoverySnapshotCompletionInfoEXT. -
completionmusi być wskaźnikiem do struktury XrCreateSpatialDiscoverySnapshotCompletionEXT.
Kody zwrotu
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_FUTURE_INVALID_EXTXR_ERROR_FUTURE_PENDING_EXTXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
Struktura XrCreateSpatialDiscoverySnapshotCompletionInfoEXT jest zdefiniowana w ten sposób:
typedef struct XrCreateSpatialDiscoverySnapshotCompletionInfoEXT {
XrStructureType type;
const void* next;
XrSpace baseSpace;
XrTime time;
XrFutureEXT future;
} XrCreateSpatialDiscoverySnapshotCompletionInfoEXT;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur.baseSpaceto XrSpace, w której będą się znajdować wszystkie lokalizacje wykrywania XrSpatialSnapshotEXT.timetoXrTime, w którym będą znajdować się wszystkie lokalizacje wykrywania XrSpatialSnapshotEXT.futuretoXrFutureEXTotrzymany z xrCreateSpatialDiscoverySnapshotAsyncEXT
Lokalizacje w różnych danych komponentów uwzględnionych w utworzonym zrzucie będą reprezentowane w baseSpace , który znajduje się w time .
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed użyciem XrCreateSpatialDiscoverySnapshotCompletionInfoEXT. -
typemusi mieć wartośćXR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXT -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur -
baseSpacemusi być prawidłowym nickiem XrSpace
Struktura XrCreateSpatialDiscoverySnapshotCompletionEXT jest zdefiniowana w ten sposób:
typedef struct XrCreateSpatialDiscoverySnapshotCompletionEXT {
XrStructureType type;
void* next;
XrResult futureResult;
XrSpatialSnapshotEXT snapshot;
} XrCreateSpatialDiscoverySnapshotCompletionEXT;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur.futureResultto XrResult operacji tworzenia zrzutu wykrywania przestrzennego.snapshotto XrSpatialSnapshotEXT, który można wykorzystać do wysyłania zapytań o dane komponentów wykrytych encji przestrzennych.
Kody zwrotu w przyszłości
Wartości futureResult:
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_RUNTIME_FAILUREXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHED
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed użyciem XrCreateSpatialDiscoverySnapshotCompletionEXT. -
typemusi mieć wartośćXR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXT -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur -
futureResultmusi być prawidłową wartością XrResult - Jeśli
snapshotnie jest XR_NULL_HANDLE ,snapshotmusi być prawidłowym uchwytem XrSpatialSnapshotEXT
Zdarzenie rekomendacji Discovery
Struktura XrEventDataSpatialDiscoveryRecommendedEXT jest zdefiniowana w ten sposób:
typedef struct XrEventDataSpatialDiscoveryRecommendedEXT {
XrStructureType type;
const void* next;
XrSpatialContextEXT spatialContext;
} XrEventDataSpatialDiscoveryRecommendedEXT;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur.spatialContextto XrSpatialContextEXT, dla którego środowisko wykonawcze zaleca wykrywanie.
Aplikacja może pobrać to zdarzenie za pomocą xrPollEvent . Aplikacja może uniknąć nadmiernych wywołań funkcji xrCreateSpatialDiscoverySnapshotAsyncEXT w celu wykrywania elementów przestrzennych, czekając na to zdarzenie. Jeśli aplikacja utworzy wiele zrzutów wykrywania z tym samym XrSpatialDiscoverySnapshotCreateInfoEXT między 2 zdarzeniami XrEventDataSpatialDiscoveryRecommendedEXT, wynikowe zrzuty mogą zawierać te same elementy, co oznacza, że tworzenie zrzutów i zapytania o dane będą niepotrzebne.
Oczekiwanie na to zdarzenie w celu utworzenia nowego zdjęcia wykrywania gwarantuje, że aplikacja nie przeciąży systemu żądaniami wykrywania, w przypadku których środowisko wykonawcze może nie zwrócić żadnych nowych danych. Pomaga to też uniknąć ryzyka nadmiernego wykorzystania zasobów systemowych i ograniczenia przepustowości ze względu na zasady dotyczące zasilania lub temperatury urządzenia. Pomaga to również zachować równowagę między środowiskami wykonawczymi, które wykrywają elementy przestrzenne na bieżąco za pomocą śledzenia na żywo, a środowiskami wykonawczymi, które dostarczają elementy przestrzenne na podstawie wcześniej zarejestrowanego stanu (gdzie środowisko wykonawcze może umieścić zdarzenie rekomendacji wykrywania w kolejce tylko raz dla każdego elementu XrSpatialContextEXT).
Środowisko wykonawcze nie może umieszczać tego zdarzenia w kolejce, aby powiadomić aplikację o zmianach lub dostosowaniach wprowadzonych w danych komponentu istniejących elementów przestrzennych. Aplikacja może używać funkcji xrCreateSpatialUpdateSnapshotEXT do śledzenia aktualizacji danych komponentów w przypadku interesujących ją elementów przestrzennych.
Środowisko wykonawcze może dodać do kolejki zdarzenie rekomendacji wykrywania bez czekania, aż aplikacja najpierw wywoła funkcję xrCreateSpatialDiscoverySnapshotAsyncEXT . Na przykład środowisko wykonawcze może podjąć decyzję o dodaniu zdarzenia rekomendacji wykrywania do kolejki na podstawie konfiguracji XrSpatialContextEXT, własnego rozumienia środowiska wokół użytkownika (wykrywanie nowych elementów lub utrata istniejących) lub w celu zasugerowania aplikacji odpowiedniej częstotliwości żądań wykrywania, aby nie przeciążać zasobów systemowych. Środowisko wykonawcze może nigdy nie dodać tego zdarzenia do kolejki dla XrSpatialContextEXT, jeśli w środowisku użytkownika nie zostaną znalezione żadne elementy przez cały okres istnienia tego XrSpatialContextEXT .
Środowisko wykonawcze nie może umieszczać tego zdarzenia w kolejce dla danego elementu spatialContext, dopóki aplikacja nie zakończy tworzenia za pomocą funkcji xrCreateSpatialContextCompleteEXT .
Po wywołaniu przez aplikację funkcji xrDestroySpatialContextEXT środowisko wykonawcze nie może dodawać do kolejki żadnych zdarzeń rekomendacji dotyczących wykrywania dla tego kontekstu przestrzennego ani zwracać takich zdarzeń dla tego kontekstu z funkcji xrPollEvent .
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed użyciem XrEventDataSpatialDiscoveryRecommendedEXT. -
typemusi mieć wartośćXR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur
Dane komponentu zapytania
Funkcja xrQuerySpatialComponentDataEXT jest zdefiniowana w ten sposób:
XrResult xrQuerySpatialComponentDataEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialComponentDataQueryConditionEXT* queryCondition,
XrSpatialComponentDataQueryResultEXT* queryResult);
Opisy parametrów
snapshotto XrSpatialSnapshotEXT dostarczony wcześniej przez xrCreateSpatialDiscoverySnapshotCompleteEXT lub xrCreateSpatialUpdateSnapshotEXT .queryConditionto wskaźnik do struktury XrSpatialComponentDataQueryConditionEXT.queryResultto wskaźnik do struktury XrSpatialComponentDataQueryResultEXT.
Aplikacja może używać funkcji xrQuerySpatialComponentDataEXT do wysyłania zapytań o dane komponentów encji w zrzucie, dołączając strukturę listy do XrSpatialComponentDataQueryResultEXT :: next odpowiadającej każdemu XrSpatialComponentTypeEXT w XrSpatialComponentDataQueryConditionEXT :: componentTypes .
Jeśli aplikacja dołącza strukturę listy do XrSpatialComponentDataQueryResultEXT :: next, która nie odpowiada żadnemu z komponentów wymienionych w XrSpatialComponentDataQueryConditionEXT :: componentTypes, środowisko wykonawcze musi zwrócić XR_ERROR_VALIDATION_FAILURE .
Aplikacja może dołączyć struktury listy odpowiadające tylko podzbiorowi komponentów wymienionych w XrSpatialComponentDataQueryConditionEXT :: componentTypes . Aplikacja może całkowicie pominąć struktury listy, jeśli chce tylko poznać identyfikatory i stan śledzenia elementów przestrzennych, które spełniają warunek queryCondition . Środowisko wykonawcze nie może traktować braku struktur listy z łańcucha XrSpatialComponentDataQueryResultEXT :: next jako błędu.
Jeśli zdarzenie XrEventDataReferenceSpaceChangePending jest w kolejce i XrEventDataReferenceSpaceChangePending :: changeTime upłynęło, gdy aplikacja wysyła zapytanie o dane komponentu z XrSpatialSnapshotEXT, aplikacja może użyć danych zdarzenia, aby odpowiednio dostosować pozy.
Środowisko wykonawcze musi wypełniać XrSpatialComponentDataQueryResultEXT :: entityIds tylko encjami, które mają wszystkie komponenty określone w XrSpatialComponentDataQueryConditionEXT :: componentTypes . Jeśli XrSpatialComponentDataQueryConditionEXT :: componentTypeCount ma wartość 0, środowisko wykonawcze musi wypełnić queryResult wszystkimi encjami (i ich stanami śledzenia), które znajdują się w zrzucie. Jeśli do XrSpatialComponentDataQueryConditionEXT :: next zostaną dodane dodatkowe warunki zapytania, środowisko wykonawcze musi traktować je jako „ORAZ” z dostępnością typów komponentów, tzn. środowisko wykonawcze musi wypełnić XrSpatialComponentDataQueryResultEXT ::entityIds tylko encjami, które spełniają wszystkie podane warunki. Środowisko wykonawcze musi wypełniać dane komponentu w strukturach listy w tej samej kolejności co encje w XrSpatialComponentDataQueryResultEXT :: entityIds, tzn. dane komponentu o danym indeksie w tablicy struktury listy muszą odpowiadać encji o tym samym indeksie.
Jeśli stan śledzenia encji nie jest XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT , środowisko wykonawcze nie może zmieniać danych w indeksie odpowiadającym tej encji w tablicy zawartej w strukturach listy dołączonych do XrSpatialComponentDataQueryResultEXT .
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed wywołaniem xrQuerySpatialComponentDataEXT. -
snapshotmusi być prawidłowym uchwytem XrSpatialSnapshotEXT -
queryConditionmusi być wskaźnikiem do prawidłowej struktury XrSpatialComponentDataQueryConditionEXT. -
queryResultmusi być wskaźnikiem do struktury XrSpatialComponentDataQueryResultEXT.
Kody zwrotu
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_VALIDATION_FAILURE
Na przykład aplikacja tworzy obiekt XrSpatialSnapshotEXT, który zawiera 5 elementów:
- Encje 1 i 2 mają komponenty
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTiXR_SPATIAL_COMPONENT_TYPE_PARENT_EXT - Jednostki 3 i 4 mają komponenty
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXTiXR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT - Encja 5 ma komponenty
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTiXR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT.
XrSpatialEntityIdEXT
XrSpatialEntityIdEXT
1
1
2
2
3
3
4
4
5
5
Bounded2D
Bounded2D
Tak
Tak
Tak
Tak
Nie
Nie
Nie
Nie
Tak
Tak
Rodzic
Rodzic
Tak
Tak
Tak
Tak
Nie
Nie
Nie
Nie
Nie
Nie
Mesh3D
Mesh3D
Nie
Nie
Nie
Nie
Tak
Tak
Tak
Tak
Tak
Tak
Bounded3D
Bounded3D
Nie
Nie
Nie
Nie
Tak
Tak
Tak
Tak
Nie
Nie Tekst nie jest plikiem SVG – nie można wyświetlić
Rysunek 20. Przykładowy zrzut ekranu
Wywołanie funkcji xrQuerySpatialComponentDataEXT na powyższym zrzucie z XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT wymienionym w warunku zapytania spowoduje zwrócenie do aplikacji encji 1, 2 i 5. Aplikacja może dołączyć tablicę XrSpatialBounded2DDataEXT jako część struktury XrSpatialComponentBounded2DListEXT do następnego łańcucha XrSpatialComponentDataQueryResultEXT, aby uzyskać dane bounded2D.
XrSpatialEntityIdEXT
XrSpatialEntityIdEXT
1
1
2
2
5
5
Bounded2D
Bounded2D
Dane dla entityId #1
Dane dla podmi...
Dane dla entityId #2
Dane dla podmi...
Dane dla entityId #5
Dane dla podmi...
entityIds
entityIds
dalej
dalej
XrSpatialComponent DataQueryResultEXT
XrSpatialComponent Dat...
bounds
bounds
XrSpatialComponent Bounded2DListEXT
XrSpatialComponent Bou... Tekst nie jest w formacie SVG – nie można go wyświetlić
Rysunek 21. Przykładowy wynik zapytania
xrQuerySpatialComponentDataEXT na powyższym zrzucie ekranu z komponentami XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT i XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT wymienionymi w warunku zapytania spowoduje zwrócenie do aplikacji encji 3 i 4, a aplikacja będzie mogła dołączyć tablice XrBoxf i XrSpatialMeshDataEXT odpowiednio jako część struktur XrSpatialComponentBounded3DListEXT i XrSpatialComponentMesh3DListEXT do następnego łańcucha XrSpatialComponentDataQueryResultEXT, aby uzyskać dane komponentu.
XrSpatialEntityIdEXT
XrSpatialEntityIdEXT
3
3
4
4
Bounded3D
Bounded3D
Dane dla entityId #3
Dane dla podmi...
Dane dla identyfikatora entityId #4
Dane dla podmi...
Mesh3D
Mesh3D
Dane dla entityId #3
Dane dla podmi...
Dane dla identyfikatora entityId #4
Dane dla podmi...
entityIds
entityIds
dalej
dalej
XrSpatialComponent DataQueryResultEXT
XrSpatialComponent Da...
bounds
bounds
dalej
dalej
XrSpatialComponent Bounded3DListEXT
XrSpatialComponent Bo...
XrSpatialComponent Mesh3DListEXT
XrSpatialComponent Me...
siatki,
siatki Tekst nie jest w formacie SVG – nie można wyświetlić
Rysunek 22. Przykładowy wynik zapytania
Struktura XrSpatialComponentDataQueryConditionEXT jest zdefiniowana w ten sposób:
typedef struct XrSpatialComponentDataQueryConditionEXT {
XrStructureType type;
const void* next;
uint32_t componentTypeCount;
const XrSpatialComponentTypeEXT* componentTypes;
} XrSpatialComponentDataQueryConditionEXT;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur.componentTypeCounttouint32_topisujący liczbę elementów w tablicycomponentTypes.componentTypesto tablica XrSpatialComponentTypeEXT, z której można pobrać dane z migawki.
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed użyciem XrSpatialComponentDataQueryConditionEXT. -
typemusi mieć wartośćXR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur . Zobacz też: XrSpatialDiscoveryPersistenceUuidFilterEXT , XrSpatialFilterArchetypeEXT , XrSpatialFilterTrackingStateEXT - Jeśli
componentTypeCountnie jest równe0,componentTypesmusi być wskaźnikiem do tablicy prawidłowych wartościcomponentTypeCountXrSpatialComponentTypeEXT.
Struktura XrSpatialComponentDataQueryResultEXT jest zdefiniowana w ten sposób:
typedef struct XrSpatialComponentDataQueryResultEXT {
XrStructureType type;
void* next;
uint32_t entityIdCapacityInput;
uint32_t entityIdCountOutput;
XrSpatialEntityIdEXT* entityIds;
uint32_t entityStateCapacityInput;
uint32_t entityStateCountOutput;
XrSpatialEntityTrackingStateEXT* entityStates;
} XrSpatialComponentDataQueryResultEXT;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur.entityIdCapacityInputto pojemność tablicyentityIdslub 0, co oznacza prośbę o pobranie wymaganej pojemności.entityIdCountOutputto liczbaXrSpatialEntityIdEXTwentityIdslub wymagana pojemność, jeślientityIdCapacityInputjest niewystarczająca.entityIdsto tablica obiektówXrSpatialEntityIdEXT. Może mieć wartośćNULL, jeślientityIdCapacityInputwynosi 0.entityStateCapacityInputto pojemność tablicyentityStateslub 0, co oznacza prośbę o pobranie wymaganej pojemności.entityStateCountOutputto liczba XrSpatialEntityTrackingStateEXT wentityStateslub wymagana pojemność, jeślientityStateCapacityInputjest niewystarczająca. Ta wartość musi być zawsze taka sama jakentityIdCountOutput.entityStatesto tablica XrSpatialEntityTrackingStateEXT . Może mieć wartośćNULL, jeślientityStateCapacityInputwynosi 0.- Szczegółowy opis pobierania wymaganego rozmiaru
entityIdsznajdziesz w sekcji Parametry rozmiaru bufora.
Aplikacja może używać entityIds z xrCreateSpatialEntityFromIdEXT, aby tworzyć uchwyty XrSpatialEntityEXT dla elementów, w przypadku których chce otrzymywać regularne aktualizacje. Aplikacja może następnie użyć tych uchwytów XrSpatialEntityEXT z xrCreateSpatialUpdateSnapshotEXT, aby utworzyć zrzut aktualizacji, który zawiera najnowsze znane dane środowiska wykonawczego dotyczące komponentów podanych elementów.
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed użyciem XrSpatialComponentDataQueryResultEXT. -
typemusi mieć wartośćXR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur . Zobacz też: XrSpatialComponentAnchorListEXT , XrSpatialComponentAnnotationQuadListANDROID , XrSpatialComponentBounded2DListEXT , XrSpatialComponentBounded3DListEXT , XrSpatialComponentConfidenceListANDROIDSYS , XrSpatialComponentImage2DListEXT , XrSpatialComponentKeyboardSemanticLabelListEXT , XrSpatialComponentMarkerListEXT , XrSpatialComponentMaterialTypeListANDROIDSYS , XrSpatialComponentMesh2DListEXT , XrSpatialComponentMesh3DListEXT , XrSpatialComponentMesh3DNormalsListEXT , XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT , XrSpatialComponentMesh3DVertexSemanticLabelsListEXT , XrSpatialComponentMouseSemanticLabelListEXT , XrSpatialComponentObjectSemanticLabelListANDROID , XrSpatialComponentObjectSemanticLabelListEXT , XrSpatialComponentOccupancyGridListANDROIDX1 , XrSpatialComponentParentListEXT , XrSpatialComponentPersistenceListEXT , XrSpatialComponentPersistenceScopesListANDROIDX1 , XrSpatialComponentPlaneAlignmentListEXT , XrSpatialComponentPlaneSemanticLabelListEXT , XrSpatialComponentPolygon2DListEXT , XrSpatialComponentRaycastResultListANDROID , XrSpatialComponentRoomEmptinessListANDROIDSYS , XrSpatialComponentRoomListANDROIDSYS , XrSpatialComponentStreetscapeGeometryMetadataListANDROIDX2 , XrSpatialComponentSubsumedByListANDROID - Jeśli
entityIdCapacityInputnie jest0,entityIdsmusi być wskaźnikiem do tablicy wartościentityIdCapacityInputXrSpatialEntityIdEXT - Jeśli
entityStateCapacityInputnie jest równe0,entityStatesmusi być wskaźnikiem do tablicy wartościentityStateCapacityInputXrSpatialEntityTrackingStateEXT.
typedef enum XrSpatialEntityTrackingStateEXT {
XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT = 1,
XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT = 2,
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT = 3,
XR_SPATIAL_ENTITY_TRACKING_STATE_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialEntityTrackingStateEXT;
XrSpatialEntityTrackingStateEXT wylicza możliwe stany śledzenia elementów przestrzennych:
Typy wyliczeniowe mają następujące znaczenie:
Opis typu wyliczeniowego
XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT
Środowisko wykonawcze przestało śledzić tę encję i nigdy nie wznowi jej śledzenia.
XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT
Środowisko wykonawcze wstrzymało śledzenie tego elementu, ale może je wznowić w przyszłości.
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT
Środowisko wykonawcze śledzi obecnie ten element, a dane jego komponentu są prawidłowe.
ŚLEDZENIE
WSTRZYMANE
ZATRZYMANO
Rysunek 23. XrSpatialEntityTrackingStateEXT
- Środowisko wykonawcze może zmienić stan elementu przestrzennego z
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXTnaXR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT, jeśli zawiesi śledzenie tego elementu, ale będzie mieć możliwość wznowienia śledzenia w przyszłości. Środowisko wykonawcze może to zrobić na przykład wtedy, gdy aplikacja utraci fokus, dany element przestrzenny jest zbyt daleko od użytkownika, aby można go było dokładnie śledzić, lub gdy śledzonych jest zbyt wiele elementów i środowisko wykonawcze chce zmniejszyć koszt śledzenia. XrSpatialEntityTrackingStateEXT pomaga aplikacji odizolować się od różnych zasad monitorowania w poszczególnych środowiskach wykonawczych. - Środowisko wykonawcze może zmienić stan encji z
XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXTnaXR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXTlubXR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT. - Środowisko wykonawcze musi zmienić stan elementu przestrzennego z
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXTlubXR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXTnaXR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT, jeśli element przestrzenny zostanie utracony, a jego śledzenie nie zostanie przywrócone ani wznowione. Przykładem takiej sytuacji może być utrata śledzenia przez urządzenie, ponowne uruchomienie sesji śledzenia, ale brak możliwości ponownej lokalizacji w środowisku, co powoduje, że wykryte elementy tej sesji śledzenia są traktowane jako nowe. - Gdy stan śledzenia encji zostanie ustawiony na
XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT, środowisko wykonawcze nie może zmienić go na żaden inny stan. - Podczas wysyłania zapytania o dane komponentu elementu przestrzennego za pomocą xrQuerySpatialComponentDataEXT środowisko wykonawcze musi ustawić prawidłowe dane w zawartości buforów dostarczonych przez aplikację w następnym łańcuchu XrSpatialComponentDataQueryResultEXT, jeśli stan elementu to
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT. Jeśli stan encji toXR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXTlubXR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT, środowisko wykonawcze nie może zmieniać zawartości buforów.
Idiom z 2 wywołaniami dla danych komponentu
Struktura XrSpatialBufferEXT jest zdefiniowana w ten sposób:
typedef struct XrSpatialBufferEXT {
XrSpatialBufferIdEXT bufferId;
XrSpatialBufferTypeEXT bufferType;
} XrSpatialBufferEXT;
Opisy członków
bufferIdXrSpatialBufferIdEXTdanych bufora.bufferTypeto XrSpatialBufferTypeEXT, który wskazuje typ danych wbufferId. Aplikacja może używaćbufferType, aby określić, której funkcji użyć do pobrania rzeczywistych danych bufora.
Niektóre komponenty przestrzenne mają dane o zmiennej wielkości, dlatego do pobierania danych wymagają użycia idiomu dwóch wywołań. W takich przypadkach struktura danych komponentu przestrzennego udostępnia XrSpatialBufferEXT dla każdego bufora o zmiennym rozmiarze, który jest potrzebny w danych tego komponentu.
W przypadku tego samego elementu bufferId środowisko wykonawcze musi dostarczać te same dane z jednego zapytania o dane komponentu do drugiego, nawet między różnymi zrzutami. Inna wartość bufferId między wywołaniami zapytania o dane komponentu wskazuje aplikacji, że dane tego komponentu mogły ulec zmianie.
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed użyciem XrSpatialBufferEXT. -
bufferTypemusi być prawidłową wartością XrSpatialBufferTypeEXT
XR_DEFINE_ATOM(XrSpatialBufferIdEXT)
XrSpatialBufferIdEXT służy do reprezentowania dowolnego rodzaju danych o zmiennym rozmiarze dla komponentu przestrzennego.
Środowisko wykonawcze musi przechowywać XrSpatialBufferIdEXT i jego dane w pamięci przez co najmniej cykl życia elementu XrSpatialSnapshotEXT, który go zawiera. Środowisko wykonawcze może przechowywać XrSpatialBufferIdEXT i jego dane w pamięci dłużej niż cykl życia XrSpatialSnapshotEXT, aby zwracać ten sam identyfikator w ramach zrzutów utworzonych później przez aplikację. W przypadku tego samego XrSpatialBufferIdEXT środowisko wykonawcze musi zawsze zwracać te same dane za pomocą odpowiedniej funkcji xrGetSpatialBuffer*.
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;
Wyliczenie XrSpatialBufferTypeEXT identyfikuje różne typy danych reprezentowanego bufora XrSpatialBufferIdEXT .
Opisy elementów wyliczenia
XR_SPATIAL_BUFFER_TYPE_STRING_EXT.XrSpatialBufferIdEXTmożna przekazać do xrGetSpatialBufferStringEXT, aby pobrać bufor ciągów tekstowych.XR_SPATIAL_BUFFER_TYPE_UINT8_EXT.XrSpatialBufferIdEXTmożna przekazać do xrGetSpatialBufferUint8EXT, aby pobrać buforuint8_t.XR_SPATIAL_BUFFER_TYPE_UINT16_EXT.XrSpatialBufferIdEXTmożna przekazać do xrGetSpatialBufferUint16EXT, aby pobrać buforuint16_t.XR_SPATIAL_BUFFER_TYPE_UINT32_EXT.XrSpatialBufferIdEXTmożna przekazać do xrGetSpatialBufferUint32EXT, aby pobrać buforuint32_t.XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT.XrSpatialBufferIdEXTmożna przekazać do xrGetSpatialBufferFloatEXT, aby pobrać buforfloat.XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT.XrSpatialBufferIdEXTmożna przekazać do xrGetSpatialBufferVector2fEXT, aby pobrać bufor XrVector2f.XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT.XrSpatialBufferIdEXTmożna przekazać do xrGetSpatialBufferVector3fEXT, aby pobrać bufor XrVector3f.
Funkcja xrGetSpatialBufferStringEXT jest zdefiniowana w ten sposób:
XrResult xrGetSpatialBufferStringEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
char* buffer);
Opisy parametrów
snapshotto uchwyt do XrSpatialSnapshotEXT .infozawiera informacje o buforze, który ma zostać odpytany.bufferCapacityInputto pojemność tablicy lub 0, co oznacza prośbę o pobranie wymaganej pojemności.bufferCountOutputto liczba znaków lub wymagana pojemność, jeślibufferCapacityInputjest niewystarczająca.bufferto tablica obiektówchar. Może mieć wartośćNULL, jeślibufferCapacityInputwynosi 0.- Szczegółowy opis pobierania wymaganego rozmiaru
bufferznajdziesz w sekcji Parametry rozmiaru bufora.
Aplikacja może pobrać dane dla XrSpatialBufferEXT dostarczone przez komponent, gdzie XrSpatialBufferEXT :: bufferType to XR_SPATIAL_BUFFER_TYPE_STRING_EXT, za pomocą xrGetSpatialBufferStringEXT .
Środowisko wykonawcze musi zwracać XR_ERROR_VALIDATION_FAILURE, jeśli XrSpatialBufferTypeEXT dla XrSpatialBufferGetInfoEXT :: bufferId nie jest XR_SPATIAL_BUFFER_TYPE_STRING_EXT .
Środowisko wykonawcze musi zwracać XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT, jeśli XrSpatialBufferGetInfoEXT :: bufferId nie należy do snapshot .
Wartość buffer wypełniona przez środowisko wykonawcze musi być ciągiem znaków UTF-8 zakończonym znakiem null.
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed wywołaniem xrGetSpatialBufferStringEXT. -
snapshotmusi być prawidłowym uchwytem XrSpatialSnapshotEXT -
infomusi być wskaźnikiem do prawidłowej struktury XrSpatialBufferGetInfoEXT -
bufferCountOutputmusi być wskaźnikiem do wartościuint32_t - Jeśli
bufferCapacityInputnie jest0,buffermusi być wskaźnikiem do tablicy wartości charbufferCapacityInput
Kody zwrotu
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
Funkcja xrGetSpatialBufferUint8EXT jest zdefiniowana w ten sposób:
XrResult xrGetSpatialBufferUint8EXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
uint8_t* buffer);
Opisy parametrów
snapshotto uchwyt do XrSpatialSnapshotEXT .infozawiera informacje o buforze, który ma zostać odpytany.bufferCapacityInputto pojemność tablicy lub 0, co oznacza prośbę o pobranie wymaganej pojemności.bufferCountOutputto liczba elementów w tablicybufferlub wymagana pojemność, jeślibufferCapacityInputjest niewystarczająca.bufferto tablica obiektówuint8_t. Może mieć wartośćNULL, jeślibufferCapacityInputwynosi 0.- Szczegółowy opis pobierania wymaganego rozmiaru
bufferznajdziesz w sekcji Parametry rozmiaru bufora.
Aplikacja może pobrać dane dla XrSpatialBufferEXT dostarczonego przez komponent, gdzie XrSpatialBufferEXT :: bufferType to XR_SPATIAL_BUFFER_TYPE_UINT8_EXT, używając xrGetSpatialBufferUint8EXT .
Środowisko wykonawcze musi zwracać XR_ERROR_VALIDATION_FAILURE, jeśli XrSpatialBufferTypeEXT dla XrSpatialBufferGetInfoEXT :: bufferId nie jest XR_SPATIAL_BUFFER_TYPE_UINT8_EXT .
Środowisko wykonawcze musi zwracać XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT, jeśli XrSpatialBufferGetInfoEXT :: bufferId nie należy do snapshot .
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed wywołaniem xrGetSpatialBufferUint8EXT. -
snapshotmusi być prawidłowym uchwytem XrSpatialSnapshotEXT -
infomusi być wskaźnikiem do prawidłowej struktury XrSpatialBufferGetInfoEXT -
bufferCountOutputmusi być wskaźnikiem do wartościuint32_t - Jeśli
bufferCapacityInputnie jest0,buffermusi być wskaźnikiem do tablicy wartościbufferCapacityInputuint8_t
Kody zwrotu
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
Funkcja xrGetSpatialBufferUint16EXT jest zdefiniowana w ten sposób:
XrResult xrGetSpatialBufferUint16EXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
uint16_t* buffer);
Opisy parametrów
snapshotto uchwyt do XrSpatialSnapshotEXT .infozawiera informacje o buforze, który ma zostać odpytany.bufferCapacityInputto pojemność tablicy lub 0, co oznacza prośbę o pobranie wymaganej pojemności.bufferCountOutputto liczba elementów w tablicybufferlub wymagana pojemność, jeślibufferCapacityInputjest niewystarczająca.bufferto tablica obiektówuint16_t. Może mieć wartośćNULL, jeślibufferCapacityInputwynosi 0.- Szczegółowy opis pobierania wymaganego rozmiaru
bufferznajdziesz w sekcji Parametry rozmiaru bufora.
Aplikacja może pobrać dane dla XrSpatialBufferEXT dostarczone przez komponent, gdzie XrSpatialBufferEXT :: bufferType to XR_SPATIAL_BUFFER_TYPE_UINT16_EXT, używając xrGetSpatialBufferUint16EXT .
Środowisko wykonawcze musi zwracać XR_ERROR_VALIDATION_FAILURE, jeśli XrSpatialBufferTypeEXT dla XrSpatialBufferGetInfoEXT :: bufferId nie jest XR_SPATIAL_BUFFER_TYPE_UINT16_EXT .
Środowisko wykonawcze musi zwracać XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT, jeśli XrSpatialBufferGetInfoEXT :: bufferId nie należy do snapshot .
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed wywołaniem xrGetSpatialBufferUint16EXT. -
snapshotmusi być prawidłowym uchwytem XrSpatialSnapshotEXT -
infomusi być wskaźnikiem do prawidłowej struktury XrSpatialBufferGetInfoEXT -
bufferCountOutputmusi być wskaźnikiem do wartościuint32_t - Jeśli
bufferCapacityInputnie jest0,buffermusi być wskaźnikiem do tablicy wartościbufferCapacityInputuint16_t
Kody zwrotu
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
Funkcja xrGetSpatialBufferUint32EXT jest zdefiniowana w ten sposób:
XrResult xrGetSpatialBufferUint32EXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
uint32_t* buffer);
Opisy parametrów
snapshotto uchwyt do XrSpatialSnapshotEXT .infozawiera informacje o buforze, który ma zostać odpytany.bufferCapacityInputto pojemność tablicy lub 0, co oznacza prośbę o pobranie wymaganej pojemności.bufferCountOutputto liczba elementów w tablicybufferlub wymagana pojemność, jeślibufferCapacityInputjest niewystarczająca.bufferto tablica obiektówuint32_t. Może mieć wartośćNULL, jeślibufferCapacityInputwynosi 0.- Szczegółowy opis pobierania wymaganego rozmiaru
bufferznajdziesz w sekcji Parametry rozmiaru bufora.
Aplikacja może pobrać dane dla XrSpatialBufferEXT dostarczone przez komponent, gdzie XrSpatialBufferEXT :: bufferType to XR_SPATIAL_BUFFER_TYPE_UINT32_EXT, za pomocą xrGetSpatialBufferUint32EXT .
Środowisko wykonawcze musi zwracać XR_ERROR_VALIDATION_FAILURE, jeśli XrSpatialBufferTypeEXT dla XrSpatialBufferGetInfoEXT :: bufferId nie jest XR_SPATIAL_BUFFER_TYPE_UINT32_EXT .
Środowisko wykonawcze musi zwracać XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT, jeśli XrSpatialBufferGetInfoEXT :: bufferId nie należy do snapshot .
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed wywołaniem xrGetSpatialBufferUint32EXT. -
snapshotmusi być prawidłowym uchwytem XrSpatialSnapshotEXT -
infomusi być wskaźnikiem do prawidłowej struktury XrSpatialBufferGetInfoEXT -
bufferCountOutputmusi być wskaźnikiem do wartościuint32_t - Jeśli
bufferCapacityInputnie jest0,buffermusi być wskaźnikiem do tablicy wartościbufferCapacityInputuint32_t
Kody zwrotu
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
Funkcja xrGetSpatialBufferFloatEXT jest zdefiniowana w ten sposób:
XrResult xrGetSpatialBufferFloatEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
float* buffer);
Opisy parametrów
snapshotto uchwyt do XrSpatialSnapshotEXT .infozawiera informacje o buforze, który ma zostać odpytany.bufferCapacityInputto pojemność tablicy lub 0, co oznacza prośbę o pobranie wymaganej pojemności.bufferCountOutputto liczba elementów w tablicybufferlub wymagana pojemność, jeślibufferCapacityInputjest niewystarczająca.bufferto tablica obiektówfloat. Może mieć wartośćNULL, jeślibufferCapacityInputwynosi 0.- Szczegółowy opis pobierania wymaganego rozmiaru
bufferznajdziesz w sekcji Parametry rozmiaru bufora.
Aplikacja może pobrać dane dla XrSpatialBufferEXT dostarczone przez komponent, gdzie XrSpatialBufferEXT :: bufferType to XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT, za pomocą xrGetSpatialBufferFloatEXT .
Środowisko wykonawcze musi zwracać XR_ERROR_VALIDATION_FAILURE, jeśli XrSpatialBufferTypeEXT dla XrSpatialBufferGetInfoEXT :: bufferId nie jest XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT .
Środowisko wykonawcze musi zwracać XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT, jeśli XrSpatialBufferGetInfoEXT :: bufferId nie należy do snapshot .
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed wywołaniem xrGetSpatialBufferFloatEXT. -
snapshotmusi być prawidłowym uchwytem XrSpatialSnapshotEXT -
infomusi być wskaźnikiem do prawidłowej struktury XrSpatialBufferGetInfoEXT -
bufferCountOutputmusi być wskaźnikiem do wartościuint32_t - Jeśli
bufferCapacityInputnie jest0,buffermusi być wskaźnikiem do tablicy wartościbufferCapacityInputfloat
Kody zwrotu
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
Funkcja xrGetSpatialBufferVector2fEXT jest zdefiniowana w ten sposób:
XrResult xrGetSpatialBufferVector2fEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
XrVector2f* buffer);
Opisy parametrów
snapshotto uchwyt do XrSpatialSnapshotEXT .infozawiera informacje o buforze, który ma zostać odpytany.bufferCapacityInputto pojemność tablicy lub 0, co oznacza prośbę o pobranie wymaganej pojemności.bufferCountOutputto liczba elementów w tablicybufferlub wymagana pojemność, jeślibufferCapacityInputjest niewystarczająca.bufferto tablica obiektów XrVector2f . Może mieć wartośćNULL, jeślibufferCapacityInputwynosi 0.- Szczegółowy opis pobierania wymaganego rozmiaru
bufferznajdziesz w sekcji Parametry rozmiaru bufora.
Aplikacja może pobrać dane dla XrSpatialBufferEXT dostarczonego przez komponent, gdzie XrSpatialBufferEXT :: bufferType to XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT, używając xrGetSpatialBufferVector2fEXT .
Środowisko wykonawcze musi zwracać XR_ERROR_VALIDATION_FAILURE, jeśli XrSpatialBufferTypeEXT dla XrSpatialBufferGetInfoEXT :: bufferId nie jest XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT .
Środowisko wykonawcze musi zwracać XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT, jeśli XrSpatialBufferGetInfoEXT :: bufferId nie należy do snapshot .
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed wywołaniem xrGetSpatialBufferVector2fEXT. -
snapshotmusi być prawidłowym uchwytem XrSpatialSnapshotEXT -
infomusi być wskaźnikiem do prawidłowej struktury XrSpatialBufferGetInfoEXT -
bufferCountOutputmusi być wskaźnikiem do wartościuint32_t - Jeśli
bufferCapacityInputnie jest równe0,buffermusi być wskaźnikiem do tablicy strukturbufferCapacityInputXrVector2f
Kody zwrotu
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
Funkcja xrGetSpatialBufferVector3fEXT jest zdefiniowana w ten sposób:
XrResult xrGetSpatialBufferVector3fEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
XrVector3f* buffer);
Opisy parametrów
snapshotto uchwyt do XrSpatialSnapshotEXT .infozawiera informacje o buforze, który ma zostać odpytany.bufferCapacityInputto pojemność tablicy lub 0, co oznacza prośbę o pobranie wymaganej pojemności.bufferCountOutputto liczba elementów w tablicybufferlub wymagana pojemność, jeślibufferCapacityInputjest niewystarczająca.bufferto tablica XrVector3f . Może mieć wartośćNULL, jeślibufferCapacityInputwynosi 0.- Szczegółowy opis pobierania wymaganego rozmiaru
bufferznajdziesz w sekcji Parametry rozmiaru bufora.
Aplikacja może pobrać dane dla XrSpatialBufferEXT dostarczonego przez komponent, gdzie XrSpatialBufferEXT :: bufferType to XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT, używając xrGetSpatialBufferVector3fEXT .
Środowisko wykonawcze musi zwracać XR_ERROR_VALIDATION_FAILURE, jeśli XrSpatialBufferTypeEXT dla XrSpatialBufferGetInfoEXT :: bufferId nie jest XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT .
Środowisko wykonawcze musi zwracać XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT, jeśli XrSpatialBufferGetInfoEXT :: bufferId nie należy do snapshot .
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed wywołaniem xrGetSpatialBufferVector3fEXT. -
snapshotmusi być prawidłowym uchwytem XrSpatialSnapshotEXT -
infomusi być wskaźnikiem do prawidłowej struktury XrSpatialBufferGetInfoEXT -
bufferCountOutputmusi być wskaźnikiem do wartościuint32_t - Jeśli
bufferCapacityInputnie jest0,buffermusi być wskaźnikiem do tablicy strukturbufferCapacityInputXrVector3f
Kody zwrotu
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
Struktura XrSpatialBufferGetInfoEXT jest zdefiniowana w ten sposób:
typedef struct XrSpatialBufferGetInfoEXT {
XrStructureType type;
const void* next;
XrSpatialBufferIdEXT bufferId;
} XrSpatialBufferGetInfoEXT;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur.bufferIdXrSpatialBufferIdEXTbufora, którego dane chcesz pobrać.
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed użyciem XrSpatialBufferGetInfoEXT. -
typemusi mieć wartośćXR_TYPE_SPATIAL_BUFFER_GET_INFO_EXT -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur
#define XR_NULL_SPATIAL_BUFFER_ID_EXT 0
XR_NULL_SPATIAL_BUFFER_ID_EXT to zarezerwowana wartość reprezentująca nieprawidłowy identyfikator XrSpatialBufferIdEXT . Może być przekazywany do funkcji interfejsu API i zwracany przez nie tylko wtedy, gdy jest to wyraźnie dozwolone.
Utwórz zrzut aktualizacji
Funkcja xrCreateSpatialUpdateSnapshotEXT jest zdefiniowana w ten sposób:
XrResult xrCreateSpatialUpdateSnapshotEXT(
XrSpatialContextEXT spatialContext,
const XrSpatialUpdateSnapshotCreateInfoEXT* createInfo,
XrSpatialSnapshotEXT* snapshot);
Opisy parametrów
spatialContextto obiekt XrSpatialContextEXT utworzony wcześniej za pomocą xrCreateSpatialContextAsyncEXT .createInfoto wskaźnik do XrSpatialUpdateSnapshotCreateInfoEXT .snapshotto wskaźnik do wyniku XrSpatialSnapshotEXT .
Aplikacja może używać funkcji xrCreateSpatialUpdateSnapshotEXT do tworzenia migawki i pobierania najnowszych danych komponentów dla określonych encji znanych środowisku wykonawczemu. Podczas tworzenia migawki aplikacje mogą podawać uchwyty XrSpatialEntityEXT i typy komponentów, które ich interesują.
Aplikacja może używać XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes do filtrowania listy komponentów, których dane muszą być uwzględnione w zdjęciu. Jeśli aplikacja udostępnia prawidłową listę typów komponentów przestrzennych w XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes, środowisko wykonawcze musi uwzględniać w migawce tylko te elementy przestrzenne, które mają co najmniej 1 z komponentów podanych w XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes . Środowisko wykonawcze musi też zawierać tylko dane dotyczące tych komponentów w zrzucie.
Środowisko wykonawcze musi zwracać XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT, jeśli którykolwiek z parametrów XrSpatialComponentTypeEXT w XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes nie jest włączony dla funkcji przestrzennych przekazanych do XrSpatialContextCreateInfoEXT :: capabilityConfigs podczas tworzenia spatialContext .
Jeśli aplikacja nie udostępnia listy typów komponentów przestrzennych w XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes , środowisko wykonawcze musi uwzględnić w migawce wszystkie elementy przestrzenne wymienione w XrSpatialUpdateSnapshotCreateInfoEXT :: entities i musi uwzględnić dane wszystkich włączonych komponentów funkcji skonfigurowanych dla spatialContext .
Środowisko wykonawcze nie może zawierać elementów przestrzennych, które nie są wymienione w XrSpatialUpdateSnapshotCreateInfoEXT :: entities w snapshot .
Aplikacja może utworzyć dowolną liczbę zrzutów, ale musi pamiętać o pamięci przydzielonej dla każdego nowego zrzutu i musi zniszczyć zrzuty, gdy nie są już potrzebne.
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed wywołaniem xrCreateSpatialUpdateSnapshotEXT. -
spatialContextmusi być prawidłowym uchwytem XrSpatialContextEXT -
createInfomusi być wskaźnikiem do prawidłowej struktury XrSpatialUpdateSnapshotCreateInfoEXT -
snapshotmusi być wskaźnikiem do uchwytu XrSpatialSnapshotEXT
Kody zwrotu
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
Struktura XrSpatialUpdateSnapshotCreateInfoEXT jest zdefiniowana w ten sposób:
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;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur. W podstawowym interfejsie OpenXR ani w tym rozszerzeniu nie zdefiniowano takich struktur.entityCounttouint32_topisujący liczbę elementów w tablicyentities.entitiesto tablica XrSpatialEntityEXT, dla której środowisko wykonawcze musi uwzględnić dane komponentu w zrzucie.componentTypeCounttouint32_topisujący liczbę elementów w tablicycomponentTypes.componentTypesto tablica XrSpatialComponentTypeEXT, dla której środowisko wykonawcze musi uwzględnić dane w migawce.baseSpaceto XrSpace, względem którego będą znajdować się wszystkie lokalizacje aktualizacji XrSpatialSnapshotEXT.timetoXrTime, w której będą znajdować się wszystkie lokalizacje aktualizacji XrSpatialSnapshotEXT.
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed użyciem XrSpatialUpdateSnapshotCreateInfoEXT. -
typemusi mieć wartośćXR_TYPE_SPATIAL_UPDATE_SNAPSHOT_CREATE_INFO_EXT -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur -
entitiesmusi być wskaźnikiem do tablicyentityCountprawidłowych uchwytów XrSpatialEntityEXT. - Jeśli
componentTypeCountnie jest równe0,componentTypesmusi być wskaźnikiem do tablicy prawidłowych wartościcomponentTypeCountXrSpatialComponentTypeEXT. -
baseSpacemusi być prawidłowym nickiem XrSpace - Parametr
entityCountmusi być większy niż0 - Zarówno
baseSpace, jak i elementyentitiesmuszą zostać utworzone, przydzielone lub pobrane z tej samej sesji XrSession.
Zniszcz zrzut
Funkcja xrDestroySpatialSnapshotEXT jest zdefiniowana w ten sposób:
XrResult xrDestroySpatialSnapshotEXT(
XrSpatialSnapshotEXT snapshot);
Opisy parametrów
snapshotto XrSpatialSnapshotEXT dostarczony wcześniej przez xrCreateSpatialDiscoverySnapshotCompleteEXT lub xrCreateSpatialUpdateSnapshotEXT .
Aplikacja może wywołać funkcję xrDestroySpatialSnapshotEXT, aby zniszczyć uchwyt XrSpatialSnapshotEXT i powiązane z nim zasoby.
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed wywołaniem xrDestroySpatialSnapshotEXT. -
snapshotmusi być prawidłowym uchwytem XrSpatialSnapshotEXT
Bezpieczeństwo wątków
- Dostęp do
snapshoti wszystkich uchwytów podrzędnych musi być synchronizowany zewnętrznie.
Kody zwrotu
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
Typowe komponenty
Ograniczony 2D
Dane komponentu
Struktura XrSpatialBounded2DDataEXT jest zdefiniowana w ten sposób:
typedef struct XrSpatialBounded2DDataEXT {
XrPosef center;
XrExtent2Df extents;
} XrSpatialBounded2DDataEXT;
Opisy członków
centerto XrPosef określający geometryczny środek ograniczonego komponentu 2D.extentsto zakresy ograniczonego komponentu 2D wzdłuż osi X (extents.width) i osi Y (extents.height) wyśrodkowane nacenter.
extents i XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT odnoszą się do rozmiaru elementu na płaszczyźnie x-y układu współrzędnych płaszczyzny. Płaszczyzna o pozycji {0, 0, 0}, obrocie {0, 0, 0, 1} (brak obrotu) i rozmiarze {1, 1} odnosi się do płaszczyzny o wymiarach 1 m x 1 m wyśrodkowanej w punkcie {0, 0, 0} z wektorem normalnym przedniej powierzchni skierowanym w kierunku +Z w przestrzeni komponentu.
X X Y Y Z Z Wysokość Wysokość Y Y Z Z X X Płaszczyzna pionowa Płaszczyzna pionowa Płaszczyzna pozioma Płaszczyzna pozioma Szerokość Szerokość Szerokość Szerokość Wysokość Wysokość
Rysunek 24. Układ współrzędnych komponentu Bounded2D
Uwaga
OpenXR używa płaszczyzny X-Y z +Z jako wektorem normalnym, ale inne interfejsy API mogą używać płaszczyzny X-Z z +Y jako wektorem normalnym. Płaszczyznę X-Y można przekształcić w płaszczyznę X-Z, obracając ją o -π/2 radianów wokół osi +X.
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed użyciem XrSpatialBounded2DDataEXT.
Struktura listy komponentów do wysyłania zapytań o dane
Struktura XrSpatialComponentBounded2DListEXT jest zdefiniowana w ten sposób:
typedef struct XrSpatialComponentBounded2DListEXT {
XrStructureType type;
void* next;
uint32_t boundCount;
XrSpatialBounded2DDataEXT* bounds;
} XrSpatialComponentBounded2DListEXT;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur. W podstawowym interfejsie OpenXR ani w tym rozszerzeniu nie zdefiniowano takich struktur.boundCounttouint32_topisujący liczbę elementów w tablicybounds.boundsto tablica XrSpatialBounded2DDataEXT .
Środowisko wykonawcze musi zwrócić XR_ERROR_VALIDATION_FAILURE z xrQuerySpatialComponentDataEXT, jeśli XrSpatialComponentBounded2DListEXT znajduje się w następnym łańcuchu XrSpatialComponentDataQueryResultEXT :: next, ale XrSpatialComponentDataQueryConditionEXT ::componentTypeCount nie jest równe zero, a XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT nie jest uwzględnione w XrSpatialComponentDataQueryConditionEXT :: componentTypes .
Środowisko wykonawcze musi zwracać XR_ERROR_SIZE_INSUFFICIENT z xrQuerySpatialComponentDataEXT, jeśli boundCount jest mniejsze niż XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .
Jeśli funkcja xrQuerySpatialComponentDataEXT :: snapshot została utworzona za pomocą funkcji xrCreateSpatialDiscoverySnapshotCompleteEXT , środowisko wykonawcze musi podać XrSpatialBounded2DDataEXT :: center w XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace i XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time .
Jeśli funkcja xrQuerySpatialComponentDataEXT :: snapshot została utworzona za pomocą funkcji xrCreateSpatialUpdateSnapshotEXT , środowisko wykonawcze musi podać XrSpatialBounded2DDataEXT :: center w XrSpatialUpdateSnapshotCreateInfoEXT :: baseSpace i XrSpatialUpdateSnapshotCreateInfoEXT :: time .
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed użyciem XrSpatialComponentBounded2DListEXT. -
typemusi mieć wartośćXR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXT -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur -
boundsmusi być wskaźnikiem do tablicy strukturboundCountXrSpatialBounded2DDataEXT. - Parametr
boundCountmusi być większy niż0
Konfiguracja
Jeśli XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT jest wymieniony w XrSpatialCapabilityComponentTypesEXT :: componentTypes dla danej funkcji, aplikacja może ją włączyć, dodając wartość wyliczeniową do listy XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents. Ten komponent nie wymaga żadnej specjalnej konfiguracji, aby można go było uwzględnić w następnym łańcuchu XrSpatialCapabilityConfigurationBaseHeaderEXT .
Ograniczony 3D
Dane komponentu
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT używa XrBoxf do przechowywania danych.
Struktura listy komponentów do wysyłania zapytań o dane
Struktura XrSpatialComponentBounded3DListEXT jest zdefiniowana w ten sposób:
typedef struct XrSpatialComponentBounded3DListEXT {
XrStructureType type;
void* next;
uint32_t boundCount;
XrBoxf* bounds;
} XrSpatialComponentBounded3DListEXT;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur. W podstawowym interfejsie OpenXR ani w tym rozszerzeniu nie zdefiniowano takich struktur.boundCounttouint32_topisujący liczbę elementów w tablicybounds.boundsto tablica obiektów XrBoxf .
Środowisko wykonawcze musi zwracać XR_ERROR_VALIDATION_FAILURE z xrQuerySpatialComponentDataEXT, jeśli XrSpatialComponentBounded3DListEXT znajduje się w następnym łańcuchu XrSpatialComponentDataQueryResultEXT :: next, ale XrSpatialComponentDataQueryConditionEXT ::componentTypeCount nie jest równe zero, a XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT nie jest uwzględnione w XrSpatialComponentDataQueryConditionEXT :: componentTypes .
Środowisko wykonawcze musi zwracać XR_ERROR_SIZE_INSUFFICIENT z xrQuerySpatialComponentDataEXT, jeśli boundCount jest mniejsze niż XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .
Jeśli funkcja xrQuerySpatialComponentDataEXT :: snapshot została utworzona z funkcji xrCreateSpatialDiscoverySnapshotCompleteEXT , środowisko wykonawcze musi udostępnić XrBoxf :: center w XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace w XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time .
Jeśli funkcja xrQuerySpatialComponentDataEXT :: snapshot została utworzona za pomocą funkcji xrCreateSpatialUpdateSnapshotEXT , środowisko wykonawcze musi udostępnić XrBoxf :: center w XrSpatialUpdateSnapshotCreateInfoEXT :: baseSpace w XrSpatialUpdateSnapshotCreateInfoEXT :: time .
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed użyciem XrSpatialComponentBounded3DListEXT. -
typemusi mieć wartośćXR_TYPE_SPATIAL_COMPONENT_BOUNDED_3D_LIST_EXT -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur -
boundsmusi być wskaźnikiem do tablicy strukturboundCountXrBoxf - Parametr
boundCountmusi być większy niż0
Konfiguracja
Jeśli XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT jest wymieniony w XrSpatialCapabilityComponentTypesEXT :: componentTypes dla danej funkcji, aplikacja może ją włączyć, dodając enum do listy XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents. Ten komponent nie wymaga żadnej specjalnej konfiguracji, aby można go było uwzględnić w następnym łańcuchu XrSpatialCapabilityConfigurationBaseHeaderEXT .
Rodzic
Dane komponentu
XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT używa XrSpatialEntityIdEXT do przechowywania danych.
Struktura listy komponentów do wysyłania zapytań o dane
Struktura XrSpatialComponentParentListEXT jest zdefiniowana w ten sposób:
typedef struct XrSpatialComponentParentListEXT {
XrStructureType type;
void* next;
uint32_t parentCount;
XrSpatialEntityIdEXT* parents;
} XrSpatialComponentParentListEXT;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur. W podstawowym interfejsie OpenXR ani w tym rozszerzeniu nie zdefiniowano takich struktur.parentCounttouint32_topisujący liczbę elementów w tablicyparents.parentsto tablica obiektówXrSpatialEntityIdEXT.
Środowisko wykonawcze musi zwracać XR_ERROR_VALIDATION_FAILURE z xrQuerySpatialComponentDataEXT, jeśli XrSpatialComponentParentListEXT znajduje się w następnym łańcuchu XrSpatialComponentDataQueryResultEXT :: next, ale XrSpatialComponentDataQueryConditionEXT ::componentTypeCount nie jest równe 0, a XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT nie jest uwzględnione w XrSpatialComponentDataQueryConditionEXT :: componentTypes .
Środowisko wykonawcze musi zwracać XR_ERROR_SIZE_INSUFFICIENT z xrQuerySpatialComponentDataEXT, jeśli parentCount jest mniejsze niż XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed użyciem XrSpatialComponentParentListEXT. -
typemusi mieć wartośćXR_TYPE_SPATIAL_COMPONENT_PARENT_LIST_EXT -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur -
parentsmusi być wskaźnikiem do tablicy wartościparentCountXrSpatialEntityIdEXT - Parametr
parentCountmusi być większy niż0
Konfiguracja
Jeśli XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT jest wymieniony w XrSpatialCapabilityComponentTypesEXT :: componentTypes dla danej funkcji, aplikacja może ją włączyć, dodając enum do listy XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents. Ten komponent nie wymaga żadnej specjalnej konfiguracji, aby można go było uwzględnić w następnym łańcuchu XrSpatialCapabilityConfigurationBaseHeaderEXT .
Siatka 3D
Dane komponentu
Struktura XrSpatialMeshDataEXT jest zdefiniowana w ten sposób:
typedef struct XrSpatialMeshDataEXT {
XrPosef origin;
XrSpatialBufferEXT vertexBuffer;
XrSpatialBufferEXT indexBuffer;
} XrSpatialMeshDataEXT;
Opisy członków
originto XrPosef określający punkt początkowy siatki. Wszystkie wierzchołki siatki muszą być określone względem tego punktu początkowego.vertexBufferto XrSpatialBufferEXT, który podaje identyfikator bufora reprezentującego bufor wierzchołków encji, na której znajduje się ten komponent. Pozycja wierzchołków musi być względna doorigin.indexBufferto XrSpatialBufferEXT, który podaje identyfikator bufora reprezentującego tablicę indeksów trójkątów, określając indeksy wierzchołków siatki wvertexBuffer. Indeksy trójkątów muszą być zwracane w kolejności w lewo, a 3 indeksy oznaczają 1 trójkąt.
Typ komponentu używający XrSpatialMeshDataEXT musi określać XrSpatialBufferTypeEXT dla vertexBuffer i indexBuffer .
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed użyciem XrSpatialMeshDataEXT. -
vertexBuffermusi być prawidłową strukturą XrSpatialBufferEXT -
indexBuffermusi być prawidłową strukturą XrSpatialBufferEXT
Struktura listy komponentów do wysyłania zapytań o dane
Struktura XrSpatialComponentMesh3DListEXT jest zdefiniowana w ten sposób:
typedef struct XrSpatialComponentMesh3DListEXT {
XrStructureType type;
void* next;
uint32_t meshCount;
XrSpatialMeshDataEXT* meshes;
} XrSpatialComponentMesh3DListEXT;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur.meshCounttouint32_topisujący liczbę elementów w tablicymeshes.meshesto tablica XrSpatialMeshDataEXT .
Aplikacja może wysyłać zapytania do komponentu siatki 3D elementów przestrzennych w XrSpatialSnapshotEXT, dodając XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT w XrSpatialComponentDataQueryConditionEXT :: componentTypes i dodając XrSpatialComponentMesh3DListEXT do następnego łańcucha wskaźników XrSpatialComponentDataQueryResultEXT .
Środowisko wykonawcze musi zwracać XR_ERROR_VALIDATION_FAILURE z xrQuerySpatialComponentDataEXT, jeśli XrSpatialComponentMesh3DListEXT znajduje się w następnym łańcuchu XrSpatialComponentDataQueryResultEXT :: next, ale XrSpatialComponentDataQueryConditionEXT ::componentTypeCount nie jest równe zero, a XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT nie jest uwzględnione w XrSpatialComponentDataQueryConditionEXT :: componentTypes .
Środowisko wykonawcze musi zwracać XR_ERROR_SIZE_INSUFFICIENT z xrQuerySpatialComponentDataEXT, jeśli meshCount jest mniejsze niż XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .
W przypadku XrSpatialMeshDataEXT wypełnionego przez środowisko wykonawcze w tablicy meshes, XrSpatialBufferEXT :: bufferType dla XrSpatialMeshDataEXT :: vertexBuffer musi być XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT, a XrSpatialBufferEXT :: bufferType dla XrSpatialMeshDataEXT :: indexBuffer musi być XR_SPATIAL_BUFFER_TYPE_UINT32_EXT .
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed użyciem XrSpatialComponentMesh3DListEXT. -
typemusi mieć wartośćXR_TYPE_SPATIAL_COMPONENT_MESH_3D_LIST_EXT -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur -
meshesmusi być wskaźnikiem do tablicy strukturmeshCountXrSpatialMeshDataEXT - Parametr
meshCountmusi być większy niż0
Konfiguracja
Jeśli XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT jest wymieniony w XrSpatialCapabilityComponentTypesEXT :: componentTypes dla danej funkcji, aplikacja może go włączyć, dodając enum do listy XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents struktury pochodnej XrSpatialCapabilityConfigurationBaseHeaderEXT funkcji, która obsługuje ten komponent.
Ten komponent nie wymaga żadnej specjalnej konfiguracji, aby można go było uwzględnić w następnym łańcuchu XrSpatialCapabilityConfigurationBaseHeaderEXT .
Filtry stanu śledzenia
Struktura XrSpatialFilterTrackingStateEXT jest zdefiniowana w ten sposób:
typedef struct XrSpatialFilterTrackingStateEXT {
XrStructureType type;
const void* next;
XrSpatialEntityTrackingStateEXT trackingState;
} XrSpatialFilterTrackingStateEXT;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur.trackingStateto XrSpatialEntityTrackingStateEXT, do którego aplikacja chce zastosować filtr.
Aplikacja może używać XrSpatialFilterTrackingStateEXT w następnym łańcuchu XrSpatialDiscoverySnapshotCreateInfoEXT, aby ograniczyć wykrywanie tylko do tych elementów, których stan śledzenia to trackingState .
Aplikacja może używać XrSpatialFilterTrackingStateEXT w następnym łańcuchu XrSpatialComponentDataQueryConditionEXT, aby ograniczyć zakres zapytania o dane komponentu z migawki tylko do encji, których stan śledzenia to trackingState .
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed użyciem XrSpatialFilterTrackingStateEXT. -
typemusi mieć wartośćXR_TYPE_SPATIAL_FILTER_TRACKING_STATE_EXT -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur -
trackingStatemusi być prawidłową wartością XrSpatialEntityTrackingStateEXT
Przykładowy kod
Korzystanie z aplikacji
Aplikacje zwykle używają rozszerzenia elementu przestrzennego w następujący sposób:
- Aplikacja najpierw wylicza możliwości przestrzenne systemu za pomocą funkcji xrEnumerateSpatialCapabilitiesEXT . Następnie sprawdza zwróconą tablicę XrSpatialCapabilityEXT i wylicza komponenty oraz funkcje obsługiwane w przypadku każdej z tych funkcji, używając odpowiednio xrEnumerateSpatialCapabilityComponentTypesEXT i xrEnumerateSpatialCapabilityFeaturesEXT. Dzięki temu aplikacja ma pełny obraz komponentów, które może włączyć, oraz konfiguracji, które akceptuje dana funkcja.
- Następnie aplikacja tworzy co najmniej 1 uchwyt XrSpatialContextEXT z określonymi konfiguracjami funkcji przestrzennych, w których konfiguracje włączają i konfigurują określoną funkcję w kontekście przestrzennym oraz włączają i konfigurują komponenty tych funkcji.
- W przypadku każdego XrSpatialContextEXT aplikacja czeka na otrzymanie zdarzeń XrEventDataSpatialDiscoveryRecommendedEXT dla tego XrSpatialContextEXT, zanim użyje xrCreateSpatialDiscoverySnapshotAsyncEXT do wykrywania elementów przestrzennych. Po zakończeniu tej operacji asynchronicznej aplikacja otrzymuje uchwyt XrSpatialSnapshotEXT.
- Aplikacja wysyła zapytania o elementy i dane komponentów zawarte w tym XrSpatialSnapshotEXT za pomocą xrQuerySpatialComponentDataEXT . Aplikacja odczytuje najnowsze dane komponentów zapytanych encji ze struktur dołączonych do następnego łańcucha XrSpatialComponentDataQueryResultEXT, jeśli stan encji to
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT. - Jeśli aplikacja zidentyfikuje konkretne elementy jako interesujące i będzie chciała otrzymywać ich aktualizacje, utworzy dla nich uchwyty XrSpatialEntityEXT za pomocą xrCreateSpatialEntityFromIdEXT . Aplikacja otrzymuje aktualizacje dotyczące takich interesujących encji za pomocą funkcji xrCreateSpatialUpdateSnapshotEXT i używa tej samej funkcji xrQuerySpatialComponentDataEXT w nowo utworzonym XrSpatialSnapshotEXT, aby uzyskać najnowsze dane komponentów dla tych encji.
Odkrywanie elementów przestrzennych i wykonywanie zapytań o dane komponentów
Poniższy przykładowy kod pokazuje, jak wykrywać elementy przestrzenne dla funkcji „Foo” i odpytywać dane komponentu.
/****************************/
/* 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));
Dane bufora zapytań
Poniższy przykładowy kod pokazuje, jak uzyskać dane komponentu, który udostępnia XrSpatialBufferEXT .
/****************************/
/* Component definition */
/****************************/
// Foo component that provides an XrVector3f buffer
#define XR_SPATIAL_COMPONENT_TYPE_FOO_EXT ((XrSpatialComponentTypeEXT)1000740000U)
#define XR_TYPE_SPATIAL_COMPONENT_FOO_LIST_EXT ((XrStructureType)1000740000U)
// XrSpatialComponentFooListEXT extends XrSpatialComponentDataQueryResultEXT
typedef struct XrSpatialComponentFooListEXT {
XrStructureType type;
void* XR_MAY_ALIAS next;
uint32_t fooCount;
XrSpatialBufferEXT* foo;
} XrSpatialComponentFooListEXT;
/******************************/
/* End Component definition */
/******************************/
// Query for the foo component data
XrSpatialComponentTypeEXT componentToQuery = XR_SPATIAL_COMPONENT_TYPE_FOO_EXT;
XrSpatialComponentDataQueryConditionEXT queryCond{XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT};
queryCond.componentTypeCount = 1;
queryCond.componentTypes = &componentToQuery;
XrSpatialComponentDataQueryResultEXT queryResult{XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT};
CHK_XR(xrQuerySpatialComponentDataEXT(snapshot, &queryCond, &queryResult));
std::vector<XrSpatialEntityIdEXT> entityIds(queryResult.entityIdCountOutput);
queryResult.entityIdCapacityInput = entityIds.size();
queryResult.entityIds = entityIds.data();
std::vector<XrSpatialBufferEXT> fooBuffers(queryResult.entityIdCountOutput);
XrSpatialComponentFooListEXT fooList{XR_TYPE_SPATIAL_COMPONENT_FOO_LIST_EXT};
fooList.fooCount = fooBuffers.size();
fooList.foo = fooBuffers.data();
queryResult.next = &fooList;
CHK_XR(xrQuerySpatialComponentDataEXT(snapshot, &queryCond, &queryResult));
for (int32_t i = 0; i < queryResult.entityIdCountOutput; ++i) {
// foo component data for entity entityIds[i]
if (fooBuffers[i].bufferType == XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT) {
XrSpatialBufferGetInfoEXT getInfo{XR_TYPE_SPATIAL_BUFFER_GET_INFO_EXT};
getInfo.bufferId = fooBuffers[i].bufferId;
uint32_t bufferCountOutput;
CHK_XR(xrGetSpatialBufferVector3fEXT(snapshot, &getInfo, 0, &bufferCountOutput, nullptr));
std::vector<XrVector3f> vertexBuffer(bufferCountOutput);
CHK_XR(xrGetSpatialBufferVector3fEXT(snapshot, &getInfo, bufferCountOutput, &bufferCountOutput, vertexBuffer.data()));
// XrVertex3f buffer for entity entityIds[i] is now available in vertexBuffer vector.
}
}
Wytyczne dotyczące rozszerzeń
Jeśli rozszerzenie definiuje nowy element XrSpatialComponentTypeEXT, który dostarcza dodatkowe dane o obiekcie przestrzennym,
- rozszerzenie musi też definiować strukturę listy dla tego komponentu, która umożliwia aplikacji przekazanie tablicy do środowiska wykonawczego w celu wypełnienia jej danymi dla każdej encji przestrzennej, która spełnia warunek xrQuerySpatialComponentDataEXT ::
queryCondition. Przykłady takich struktur list to XrSpatialComponentParentListEXT i XrSpatialComponentBounded2DListEXT . Jeśli rozmiar danych komponentu jest zmienny i wymaga od aplikacji użycia idiomu dwóch wywołań do wysłania zapytania, dane komponentu powinny udostępniać XrSpatialBufferEXT dla wszystkich danych o zmiennym rozmiarze w strukturze listy i muszą określać XrSpatialBufferTypeEXT dla każdego bufora. Aplikacja może następnie wysyłać zapytania o dane bufora za pomocą funkcji zdefiniowanych w sekcji Idiom dwóch wywołań dotyczący danych komponentu . Przykładem takiej struktury jest XrSpatialMeshDataEXT, która jest zawarta w XrSpatialComponentMesh3DListEXT . - Rozszerzenie może też udostępniać struktury, które aplikacja może połączyć z XrSpatialComponentDataQueryConditionEXT ::
next, aby udostępnić dodatkowe filtry zapytania dotyczącego danych tego komponentu.
- rozszerzenie musi też definiować strukturę listy dla tego komponentu, która umożliwia aplikacji przekazanie tablicy do środowiska wykonawczego w celu wypełnienia jej danymi dla każdej encji przestrzennej, która spełnia warunek xrQuerySpatialComponentDataEXT ::
Rozszerzenia mogą definiować struktury, które rozszerzają XrSpatialDiscoverySnapshotCreateInfoEXT, aby udostępniać dodatkowe filtry do wykrywania. Filtry do tworzenia zrzutu nie mogą wpływać na konfigurację kontekstu przestrzennego, ale mają służyć do dostarczania środowisku wykonawczemu wskazówek dotyczących tego, jakie encje i dane mają być uwzględnione w zrzucie zgodnie z bieżącą konfiguracją kontekstu przestrzennego (a tym samym bieżącą konfiguracją usług podstawowych).
Jeśli rozszerzenie definiuje nowy element XrSpatialCapabilityEXT ,
- powinna też określać listę XrSpatialComponentTypeEXT, które środowiska wykonawcze muszą udostępniać encjom w ramach tej funkcji.
- musi też udostępniać struktury pochodzące z XrSpatialCapabilityConfigurationBaseHeaderEXT, które umożliwią konfigurację tej funkcji.
Jeśli rozszerzenie definiuje nową funkcję XrSpatialCapabilityFeatureEXT, musi też definiować odpowiednią strukturę konfiguracji, którą można połączyć z następnym wskaźnikiem XrSpatialCapabilityConfigurationBaseHeaderEXT, którego aplikacja może użyć do włączenia tej funkcji podczas tworzenia XrSpatialContextEXT .
Rozszerzenie definiujące nowy element XrSpatialCapabilityEXT powinno być zgodne z tym szablonem specyfikacji:
- Przegląd
- Obsługa środowiska wykonawczego
- Konfiguracja
- Komponenty gwarantowane
- Przykładowy kod
Rozszerzenie definiujące nowy element XrSpatialComponentTypeEXT powinno być zgodne z tym szablonem specyfikacji:
- Dane komponentu
- Struktura listy komponentów do wysyłania zapytań o dane
- Konfiguracja
Podczas pisania interfejsu API, który udostępnia aplikacji
XrSpatialBufferIdEXT, musi mu towarzyszyć XrSpatialBufferTypeEXT, aby poinformować aplikację, jaki jest typ danych bufora, a aplikacja może użyć odpowiedniej funkcjixrGetSpatialBuffer*, aby pobrać rzeczywistą zawartość bufora.
Wytyczne dotyczące projektowania i rozszerzania etykiet semantycznych
Chociaż to rozszerzenie nie definiuje żadnego komponentu do przekazywania informacji o etykiecie semantycznej elementu, określa ono reguły i wytyczne dotyczące projektowania dla wszystkich rozszerzeń, które definiują taki komponent. W poniższym tekście słowa „powinien” i „musi” ograniczają autorów takich funkcji, a nie implementację środowiska wykonawczego lub aplikację korzystającą z interfejsu API.
- Jeśli rozszerzenie definiuje etykiety semantyczne dla dowolnego elementu XrSpatialCapabilityEXT, powinno to zrobić, definiując nowy element XrSpatialComponentTypeEXT oraz nowe wyliczenie ze zbiorem etykiet („zbiór etykiet semantycznych”), które będą danymi dla tego komponentu.
- Wyliczenie reprezentujące zbiór etykiet semantycznych musi mieć wartość wskazującą, że encja nie jest sklasyfikowana w żadnej z etykiet tego zbioru. Nazwa tego elementu wyliczeniowego musi zawierać ciąg „UNCATEGORIZED”, np.
XR_SPATIAL_PLANE_SEMANTIC_LABEL_UNCATEGORIZED_EXT. Ta wartość wskazuje aplikacjom, że środowisko wykonawcze rozpoznaje ten element, ale istnieją inne zestawy etykiet semantycznych, w których ten element jest skategoryzowany. - Wyliczenie nowo zdefiniowanego typu XrSpatialComponentTypeEXT w xrEnumerateSpatialCapabilityComponentTypesEXT oznacza, że środowisko wykonawcze obsługuje zestaw etykiet semantycznych (a tym samym etykiety zdefiniowane w zestawie) odpowiadający temu typowi komponentu.
- Aplikacje wyrażają chęć wykrywania elementów, które mają etykiety należące do tego zbioru etykiet semantycznych, przez uwzględnienie odpowiedniego elementu XrSpatialComponentTypeEXT w tablicy XrSpatialCapabilityConfigurationBaseHeaderEXT ::
enabledComponentsstruktury konfiguracji funkcji, dla której typ komponentu jest wyliczany. - Możliwe, że pojedynczy element przestrzenny ma wiele komponentów, z których każdy ma etykietę z własnego zestawu etykiet semantycznych. Rozważmy ten przykład z hipotetycznymi zestawami etykiet semantycznych –
XrSpatialObjectSemanticLabel, które mogą mieć wartości takie jak krzesło, sofa, stół itp.XrSpatialSofaBrand, który może mieć wartości takie jak IKEA, Wayfair itp., orazXrSpatialIkeaSofa, który może zawierać nazwy konkretnych modeli sof IKEA. W tym scenariuszu ta sama encja „sofa” ma wszystkie 3 komponenty (etykiety ze wszystkich 3 zestawów etykiet semantycznych), z których każdy dostarcza informacji o encji o różnym stopniu szczegółowości. - Jeśli rozszerzenie definiuje nowy element XrSpatialComponentTypeEXT, który udostępnia nowy zestaw etykiet semantycznych zawierający wiele etykiet oprócz etykiety
UNCATEGORIZED, rozszerzenie powinno rozważyć zdefiniowanie elementu XrSpatialCapabilityFeatureEXT, który umożliwia aplikacjom aktywowanie tylko podzbioru etykiet zdefiniowanych w zestawie etykiet semantycznych odpowiadających temu typowi komponentu. Ten podzbiór, podany w następnym łańcuchu konfiguracji funkcji, działa jako wskazówka dla środowisk wykonawczych, aby zoptymalizować potoki śledzenia i śledzić tylko podany podzbiór. Przykład takiej struktury funkcji znajdziesz poniżej . - Rozszerzenia nie mogą dodawać etykiet do istniejącego zbioru etykiet semantycznych. Muszą zamiast tego zdefiniować nowy typ wyliczeniowy, który zawiera równoważne elementy wyliczeniowe o identycznej semantyce i wartościach równych wartościom z drugiego zbioru, a także nowo dodane elementy wyliczeniowe. Specyfikacja nowo zdefiniowanego zestawu etykiet semantycznych musi też określać mapowanie między starym a nowym zestawem etykiet. Zobacz przykład poniżej .
Przykładowa definicja cechy przestrzennej dla podzbioru etykiet semantycznych
// 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;
Przykładowe rozszerzenie etykiety semantycznej przestrzeni
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;
Weźmy pod uwagę powyższy przykład, w którym rozszerzenie definiuje wyliczenie XrSpatialExamplePlaneSemanticLabelExtensionEXT, aby rozszerzyć istniejący element XrSpatialPlaneSemanticLabelEXT o wartości reprezentujące drzwi i okna. Specyfikacja nowego wyliczenia musi zawierać tekst w następującej postaci:
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
|====
Nowe makra
Nowe typy gwintów
XrSpatialBufferIdEXTXrSpatialEntityIdEXT
Nowe typy obiektów
Nowe polecenia
- xrCreateSpatialContextAsyncEXT
- xrCreateSpatialContextCompleteEXT
- xrCreateSpatialDiscoverySnapshotAsyncEXT
- xrCreateSpatialDiscoverySnapshotCompleteEXT
- xrCreateSpatialEntityFromIdEXT
- xrCreateSpatialUpdateSnapshotEXT
- xrDestroySpatialContextEXT
- xrDestroySpatialEntityEXT
- xrDestroySpatialSnapshotEXT
- xrEnumerateSpatialCapabilitiesEXT
- xrEnumerateSpatialCapabilityComponentTypesEXT
- xrEnumerateSpatialCapabilityFeaturesEXT
- xrGetSpatialBufferFloatEXT
- xrGetSpatialBufferStringEXT
- xrGetSpatialBufferUint16EXT
- xrGetSpatialBufferUint32EXT
- xrGetSpatialBufferUint8EXT
- xrGetSpatialBufferVector2fEXT
- xrGetSpatialBufferVector3fEXT
- xrQuerySpatialComponentDataEXT
Nowe domy
- XrCreateSpatialContextCompletionEXT
- XrCreateSpatialDiscoverySnapshotCompletionEXT
- XrCreateSpatialDiscoverySnapshotCompletionInfoEXT
- XrEventDataSpatialDiscoveryRecommendedEXT
- XrSpatialBounded2DDataEXT
- XrSpatialBufferEXT
- XrSpatialBufferGetInfoEXT
- XrSpatialCapabilityComponentTypesEXT
- XrSpatialCapabilityConfigurationBaseHeaderEXT
- XrSpatialComponentDataQueryConditionEXT
- XrSpatialComponentDataQueryResultEXT
- XrSpatialContextCreateInfoEXT
- XrSpatialDiscoverySnapshotCreateInfoEXT
- XrSpatialEntityFromIdCreateInfoEXT
- XrSpatialMeshDataEXT
- XrSpatialUpdateSnapshotCreateInfoEXT
Rozszerzenie XrSpatialComponentDataQueryResultEXT :
Rozszerzenie XrSpatialDiscoverySnapshotCreateInfoEXT , XrSpatialComponentDataQueryConditionEXT :
Nowe wartości w polu enum
- XrSpatialBufferTypeEXT
- XrSpatialCapabilityEXT
- XrSpatialCapabilityFeatureEXT
- XrSpatialComponentTypeEXT
- XrSpatialEntityTrackingStateEXT
Nowe stałe typu wyliczeniowego
XR_EXT_SPATIAL_ENTITY_EXTENSION_NAMEXR_EXT_spatial_entity_SPEC_VERSIONRozszerzanie XrObjectType :
XR_OBJECT_TYPE_SPATIAL_CONTEXT_EXTXR_OBJECT_TYPE_SPATIAL_ENTITY_EXTXR_OBJECT_TYPE_SPATIAL_SNAPSHOT_EXT
Rozszerzenie XrResult :
XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXTXR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXTXR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXTXR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXTXR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXT
Rozszerzanie XrStructureType :
XR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXTXR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXTXR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXTXR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXTXR_TYPE_SPATIAL_BUFFER_GET_INFO_EXTXR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXTXR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXTXR_TYPE_SPATIAL_COMPONENT_BOUNDED_3D_LIST_EXTXR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXTXR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXTXR_TYPE_SPATIAL_COMPONENT_MESH_3D_LIST_EXTXR_TYPE_SPATIAL_COMPONENT_PARENT_LIST_EXTXR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXTXR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXTXR_TYPE_SPATIAL_ENTITY_FROM_ID_CREATE_INFO_EXTXR_TYPE_SPATIAL_FILTER_TRACKING_STATE_EXTXR_TYPE_SPATIAL_UPDATE_SNAPSHOT_CREATE_INFO_EXT
Problemy
Does a single entity always derive from solely a single capability?
- Rozwiązane
- Odpowiedź: Nie. Zależy to całkowicie od środowiska wykonawczego, jego możliwości śledzenia i sposobu, w jaki chce reprezentować wykryty element. Specyfikacja nie określa żadnej konkretnej reprezentacji elementu przestrzennego, z wyjątkiem gwarantowanych komponentów danej funkcji, które mają spełniać minimalne oczekiwania. Środowisko wykonawcze może scalać elementy wykryte przez osobne funkcje i reprezentować je jako pojedynczy element z gwarantowanymi komponentami wszystkich funkcji, które pomogły go zidentyfikować. Przykładem może być sytuacja, w której stoły mogą być wykrywane zarówno przez funkcję śledzenia płaszczyzny, jak i funkcję śledzenia obiektów, przy czym śledzenie płaszczyzny zapewnia komponent
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTw encji, a śledzenie obiektów zapewniaXR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT. Niektóre środowiska wykonawcze mogą udostępniać tabelę jako 2 osobne elementy, z których każdy ma własny zestaw gwarantowanych komponentów, podczas gdy inne środowiska wykonawcze mogą udostępniać tylko 1 element reprezentujący tabelę i zawierający zarównoXR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT, jak iXR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT. Ważne jest, aby pamiętać, że dany element przestrzenny może mieć co najwyżej 1 komponent danego typu . Dlatego jeśli dane komponentu wygenerowane przez różne funkcje są sprzeczne w przypadku określonego elementu, środowisko wykonawcze musi przedstawić je jako 2 osobne elementy.
Historia zmian
Wersja 1, 12 kwietnia 2024 r. (Nihav Jain, Google)
- Początkowy opis rozszerzenia