XR_EXT_spatial_entity
String Nama
XR_EXT_spatial_entity
Jenis Ekstensi
Ekstensi instance
Nomor Ekstensi Terdaftar
741
Revisi
1
Status Ratifikasi
Diratifikasi
Dependensi Ekstensi dan Versi
XR_EXT_future
Kontributor
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
Ringkasan
Ekstensi ini memperkenalkan konsep dan fondasi untuk pemahaman scene dan penalaran spasial di OpenXR. Hal ini menyatukan beberapa area fungsi yang terkait tetapi berbeda, yang dihitung, dikonfigurasi, dan berinteraksi dengan cara yang seragam secara luas sebagaimana ditentukan oleh ekstensi ini. Karena ekstensi ini tidak memiliki definisi konkret untuk salah satu area fungsional ini, teks spesifikasi formal cenderung agak abstrak. Contoh yang disertakan dalam teks spesifikasi ekstensi ini terkadang merujuk pada fungsi yang ditentukan dalam ekstensi terkait yang akan datang atau hipotetis untuk tujuan ilustrasi, tanpa secara inheren membatasi atau menentukan fungsi tambahan tersebut.
Bagian luas dari ekstensi ini adalah sebagai berikut:
- Entitas spasial : Fungsi ini berpusat pada entitas , yang hanya memberikan sedikit fungsi dengan sendirinya.
- Komponen spasial : Entitas ini memiliki komponen yang terkait dengannya yang menyediakan data dan perilaku.
- Jenis komponen spasial : Setiap komponen spasial memiliki jenis komponen tertentu , dan setiap entitas memiliki paling banyak satu komponen dari jenis komponen tertentu .
- Konteks spasial : Semua interaksi entitas spasial terjadi dalam konteks setelah fase inisialisasi dan konfigurasi.
- Kemampuan spasial : Manipulasi entity spasial secara luas disediakan oleh kemampuan . Kemampuan adalah beberapa unit fungsi, misalnya (tanpa batasan) anchor yang ditentukan aplikasi, deteksi bidang, atau pelacakan gambar. Setiap kemampuan biasanya ditentukan dalam ekstensi terpisah (diaktifkan saat pembuatan instance seperti biasa) dan diaktifkan untuk konteks tertentu pada saat pembuatan.
- Setiap kemampuan dikaitkan dengan serangkaian jenis komponen yang komponennya ada di setiap entitas yang diekspos oleh kemampuan tersebut . Ekstensi yang menentukan kemampuan menentukan jenis komponen mana yang wajib ada untuk kemampuan ("dijamin"), sementara ekstensi yang sama atau ekstensi lainnya dapat menentukan jenis komponen opsional yang disediakan oleh beberapa kemungkinan penerapan. Sejumlah kemampuan dapat menyediakan entitas dengan komponen dari jenis komponen tertentu , yang dapat digunakan secara seragam terlepas dari kemampuan yang menghasilkannya.
- Fitur kemampuan spasial : Selain itu, beberapa kemampuan memerlukan konfigurasi, sehingga diparameterkan oleh fitur kemampuan .
Ekstensi ini menyediakan mekanisme untuk menghitung komponen yang disediakan oleh setiap kemampuan yang didukung di sistem saat ini, baik yang wajib maupun komponen opsional .
Karena beberapa penerapan mungkin memerlukan tingkat parameterisasi yang berbeda untuk kemampuan , ekstensi ini menyediakan mekanisme untuk menghitung fitur kemampuan yang didukung yang terkait dengan kemampuan tertentu dalam sistem saat ini.
Ekstensi ini juga menentukan beberapa komponen umum yang diharapkan akan digunakan di berbagai kemampuan .
Entitas Spasial
Entitas spasial adalah entitas yang ada di beberapa ruang, yang memiliki berbagai data terkait yang disusun ke dalam komponen. Mungkin berupa salah satu dari berikut:
- Fisik (misalnya, permukaan planar seperti dinding dan lantai, objek seperti kursi dan rak buku, dll.)
- Virtual (misalnya, konten yang ditempatkan dan dibagikan oleh aplikasi atau pengguna lain),
- Ditentukan aplikasi (misalnya, aplikasi menandai area sebagai "ruang keluarga" atau "dapur", atau menandai titik sebagai lokasi untuk menempatkan TV, dll.)
Hal-hal yang diekspos melalui sistem tindakan, seperti pengontrol atau tatapan mata, tidak dimaksudkan untuk dimodelkan sebagai entitas spasial.
Entitas spasial di OpenXR dimodelkan sebagai sistem Entity-Component . Setiap entitas spasial memiliki serangkaian komponen, dan setiap komponen menyediakan serangkaian data dan perilaku unik untuk entitas tersebut.
Entitas spasial direpresentasikan oleh atom XrSpatialEntityIdEXT atau handle XrSpatialEntityEXT, yang detailnya diberikan di bagian Representasi Entitas Spasial.
Jenis Komponen Spasial
Entitas spasial memiliki satu atau beberapa komponen yang menyediakan data atau perilaku untuk entitas tersebut. Lihat Komponen Umum untuk beberapa komponen umum yang ditentukan oleh ekstensi ini.
typedef enum XrSpatialComponentTypeEXT {
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT = 1,
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT = 2,
XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT = 3,
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT = 4,
XR_SPATIAL_COMPONENT_TYPE_PLANE_ALIGNMENT_EXT = 1000741000,
XR_SPATIAL_COMPONENT_TYPE_MESH_2D_EXT = 1000741001,
XR_SPATIAL_COMPONENT_TYPE_POLYGON_2D_EXT = 1000741002,
XR_SPATIAL_COMPONENT_TYPE_PLANE_SEMANTIC_LABEL_EXT = 1000741003,
XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT = 1000743000,
XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT = 1000744000,
XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT = 1000744001,
XR_SPATIAL_COMPONENT_TYPE_MOUSE_SEMANTIC_LABEL_EXT = 1000744002,
XR_SPATIAL_COMPONENT_TYPE_ANCHOR_EXT = 1000762000,
XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_EXT = 1000763000,
XR_SPATIAL_COMPONENT_TYPE_IMAGE_2D_EXT = 1000782000,
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT = 1000783000,
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT = 1000783001,
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT = 1000783002,
XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_ANDROID = 1000785000,
XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID = 1000786000,
XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID = 1000791000,
XR_SPATIAL_COMPONENT_TYPE_ROOM_ANDROIDSYS = 1000792002,
XR_SPATIAL_COMPONENT_TYPE_MATERIAL_TYPE_ANDROIDSYS = 1000792003,
XR_SPATIAL_COMPONENT_TYPE_CONFIDENCE_ANDROIDSYS = 1000792004,
XR_SPATIAL_COMPONENT_TYPE_ROOM_EMPTINESS_ANDROIDSYS = 1000792005,
XR_SPATIAL_COMPONENT_TYPE_OCCUPANCY_GRID_ANDROIDX1 = 1000793000,
XR_SPATIAL_COMPONENT_TYPE_ANNOTATION_QUAD_ANDROID = 1000794000,
XR_SPATIAL_COMPONENT_TYPE_STREETSCAPE_GEOMETRY_METADATA_ANDROIDX2 = 1000798000,
XR_SPATIAL_COMPONENT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialComponentTypeEXT;
Enumerasi XrSpatialComponentTypeEXT mengidentifikasi berbagai jenis komponen yang mungkin didukung oleh runtime.
Tidak semua jenis komponen yang tercantum disediakan oleh ekstensi ini sendiri: beberapa memerlukan ekstensi tambahan untuk diaktifkan pada waktu pembuatan instance, seperti yang didokumentasikan.
Enumeran memiliki nilai berikut:
Deskripsi Enum
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT
Komponen yang menyediakan batas 2D untuk entity spasial. Struktur daftar yang sesuai adalah XrSpatialComponentBounded2DListEXT; Struktur data yang sesuai adalah XrSpatialBounded2DDataEXT
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT
Komponen yang menyediakan batas 3D untuk entity spasial. Struktur daftar yang sesuai adalah XrSpatialComponentBounded3DListEXT; Struktur data yang sesuai adalah XrBoxf
XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT
Komponen yang menyediakan XrSpatialEntityIdEXT induk untuk entity spasial. Struktur daftar yang sesuai adalah XrSpatialComponentParentListEXT ; Struktur data yang sesuai adalah XrSpatialEntityIdEXT
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT
Komponen yang menyediakan mesh 3D untuk entitas spasial. Struktur daftar yang sesuai adalah XrSpatialComponentMesh3DListEXT; Struktur data yang sesuai adalah XrSpatialMeshDataEXT
XR_SPATIAL_COMPONENT_TYPE_PLANE_ALIGNMENT_EXT
Komponen yang menyediakan enum penyelarasan bidang untuk entity spasial. Struktur daftar yang sesuai adalah XrSpatialComponentPlaneAlignmentListEXT; Struktur data yang sesuai adalah XrSpatialPlaneAlignmentEXT (Ditambahkan oleh ekstensi XR_EXT_spatial_plane_tracking)
XR_SPATIAL_COMPONENT_TYPE_MESH_2D_EXT
Komponen yang menyediakan mesh 2D untuk entitas spasial. Struktur daftar yang sesuai adalah XrSpatialComponentMesh2DListEXT; Struktur data yang sesuai adalah XrSpatialMeshDataEXT (Ditambahkan oleh ekstensi XR_EXT_spatial_plane_tracking)
XR_SPATIAL_COMPONENT_TYPE_POLYGON_2D_EXT
Komponen yang menyediakan poligon batas 2D untuk entity spasial. Struktur daftar yang sesuai adalah XrSpatialComponentPolygon2DListEXT; Struktur data yang sesuai adalah XrSpatialPolygon2DDataEXT (Ditambahkan oleh ekstensi XR_EXT_spatial_plane_tracking)
XR_SPATIAL_COMPONENT_TYPE_PLANE_SEMANTIC_LABEL_EXT
Komponen yang memberikan label semantik untuk bidang. Struktur daftar yang sesuai adalah XrSpatialComponentPlaneSemanticLabelListEXT; Struktur data yang sesuai adalah XrSpatialPlaneSemanticLabelEXT (Ditambahkan oleh ekstensi XR_EXT_spatial_plane_tracking)
XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT
Komponen yang menjelaskan jenis, ID, dan lokasi penanda. Struktur daftar yang sesuai adalah XrSpatialComponentMarkerListEXT; Struktur data yang sesuai adalah XrSpatialMarkerDataEXT (Ditambahkan oleh ekstensi XR_EXT_spatial_marker_tracking)
XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT
Komponen yang memberikan label semantik untuk adegan; Struktur daftar yang sesuai adalah XrSpatialComponentObjectSemanticLabelListEXT . Struktur data yang sesuai adalah XrSpatialObjectSemanticLabelEXT . (Ditambahkan oleh ekstensi XR_EXT_spatial_object_tracking)
XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT
Komponen yang menyediakan label semantik untuk keyboard; Struktur daftar yang sesuai adalah XrSpatialComponentKeyboardSemanticLabelListEXT . Struktur data yang sesuai adalah XrSpatialKeyboardSemanticLabelEXT (Ditambahkan oleh ekstensi XR_EXT_spatial_object_tracking)
XR_SPATIAL_COMPONENT_TYPE_MOUSE_SEMANTIC_LABEL_EXT
Komponen yang menyediakan label semantik untuk mouse; Struktur daftar yang sesuai adalah XrSpatialComponentMouseSemanticLabelListEXT . Struktur data yang sesuai adalah XrSpatialMouseSemanticLabelEXT (Ditambahkan oleh ekstensi XR_EXT_spatial_object_tracking)
XR_SPATIAL_COMPONENT_TYPE_ANCHOR_EXT
Komponen yang menyediakan lokasi untuk penanda. Struktur daftar yang sesuai adalah XrSpatialComponentAnchorListEXT; Struktur data yang sesuai adalah XrPosef (Ditambahkan oleh ekstensi XR_EXT_spatial_anchor)
XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_EXT
Komponen yang menyediakan UUID persisten untuk entity spasial. Struktur daftar yang sesuai adalah XrSpatialComponentPersistenceListEXT; Struktur data yang sesuai adalah XrSpatialPersistenceDataEXT (Ditambahkan oleh ekstensi XR_EXT_spatial_persistence)
XR_SPATIAL_COMPONENT_TYPE_IMAGE_2D_EXT
Komponen yang menjelaskan jenis gambar planar. Struktur daftar yang sesuai adalah XrSpatialComponentImage2DListEXT; Struktur data yang sesuai adalah XrSpatialImageSizeEXT . (Ditambahkan oleh ekstensi XR_EXT_spatial_image_tracking)
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT
Komponen yang menyediakan normal untuk mesh 3D entitas spasial. Struktur daftar yang sesuai adalah XrSpatialComponentMesh3DNormalsListEXT; Struktur data yang sesuai adalah XrSpatialBufferEXT (Ditambahkan oleh ekstensi XR_EXT_spatial_mesh_tracking)
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT
Komponen yang menyediakan label semantik per-vertex untuk mesh 3D entitas spasial. Struktur daftar yang sesuai adalah XrSpatialComponentMesh3DVertexSemanticLabelsListEXT; Struktur data yang sesuai adalah XrSpatialBufferEXT; Data dalam buffer dipetakan ke XrSpatialMeshSemanticLabelEXT (Ditambahkan oleh ekstensi XR_EXT_spatial_mesh_tracking)
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT
Komponen yang menyediakan label semantik per-segitiga-muka untuk mesh 3D entitas spasial. Struktur daftar yang sesuai adalah XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT; Struktur data yang sesuai adalah XrSpatialBufferEXT; Data dalam buffer dipetakan ke XrSpatialMeshSemanticLabelEXT (Ditambahkan oleh ekstensi XR_EXT_spatial_mesh_tracking)
XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_ANDROID
Komponen yang menyediakan label semantik untuk objek; Struktur daftar yang sesuai adalah XrSpatialComponentObjectSemanticLabelListANDROID; Struktur data yang sesuai adalah XrSpatialObjectSemanticLabelANDROID (Ditambahkan oleh ekstensi XR_ANDROID_spatial_object_tracking)
XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID
Komponen yang menyediakan pose hit raycast pada entitas. Struktur daftar yang sesuai adalah XrSpatialComponentRaycastResultListANDROID; Struktur data yang sesuai adalah XrSpatialRaycastResultDataANDROID (Ditambahkan oleh ekstensi XR_ANDROID_spatial_discovery_raycast)
XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID
Komponen yang menyediakan ID entitas dari entitas yang mencakup entitas terlampir. Struktur daftar yang sesuai adalah XrSpatialComponentSubsumedByListANDROID; Struktur data yang sesuai adalah XrSpatialEntityIdEXT (Ditambahkan oleh ekstensi XR_ANDROID_spatial_component_subsumed_by)
XR_SPATIAL_COMPONENT_TYPE_ROOM_ANDROIDSYS
Komponen yang menyediakan dimensi dan jenis kamar shoebox; Struktur daftar yang sesuai adalah XrSpatialComponentRoomListANDROIDSYS; Struktur data yang sesuai adalah XrSpatialRoomDataANDROIDSYS (Ditambahkan oleh ekstensi XR_ANDROIDSYS_spatial_room_tracking)
XR_SPATIAL_COMPONENT_TYPE_MATERIAL_TYPE_ANDROIDSYS
Komponen yang menyediakan jenis material permukaan batas; Struktur daftar yang sesuai adalah XrSpatialComponentMaterialTypeListANDROIDSYS; Struktur data yang sesuai adalah XrSpatialMaterialTypeANDROIDSYS (Ditambahkan oleh ekstensi XR_ANDROIDSYS_spatial_room_tracking)
XR_SPATIAL_COMPONENT_TYPE_CONFIDENCE_ANDROIDSYS
Komponen yang memberikan keyakinan dapat dilacak; Struktur daftar yang sesuai adalah XrSpatialComponentConfidenceListANDROIDSYS; Struktur data yang sesuai adalah float (Ditambahkan oleh ekstensi XR_ANDROIDSYS_spatial_room_tracking)
XR_SPATIAL_COMPONENT_TYPE_ROOM_EMPTINESS_ANDROIDSYS
Komponen yang menunjukkan kekosongan ruangan; Struktur daftar yang sesuai adalah XrSpatialComponentRoomEmptinessListANDROIDSYS; Struktur data yang sesuai adalah float (Ditambahkan oleh ekstensi XR_ANDROIDSYS_spatial_room_tracking)
XR_SPATIAL_COMPONENT_TYPE_OCCUPANCY_GRID_ANDROIDX1
Komponen yang memberikan informasi petak hunian pada entity terlampir. Struktur daftar yang sesuai adalah XrSpatialComponentOccupancyGridListANDROIDX1 ; Struktur data yang sesuai adalah XrSpatialOccupancyGridDataANDROIDX1 (Ditambahkan oleh ekstensi XR_ANDROIDX1_spatial_occupancy_grid)
XR_SPATIAL_COMPONENT_TYPE_ANNOTATION_QUAD_ANDROID
Komponen yang menjelaskan anotasi quad. Struktur daftar yang sesuai adalah XrSpatialComponentAnnotationQuadListANDROID; Struktur data yang sesuai adalah XrSpatialAnnotationQuadDataANDROID (Ditambahkan oleh ekstensi XR_ANDROID_spatial_annotation_tracking)
XR_SPATIAL_COMPONENT_TYPE_STREETSCAPE_GEOMETRY_METADATA_ANDROIDX2
Komponen yang menyediakan metadata untuk geometri streetscape; Struktur daftar yang sesuai adalah XrSpatialComponentStreetscapeGeometryMetadataListANDROIDX2; Struktur data yang sesuai adalah XrSpatialStreetscapeGeometryMetadataANDROIDX2 (Ditambahkan oleh ekstensi XR_ANDROIDX2_geospatial_streetscape)
Kemampuan Spasial dan Penyiapan
Kemampuan spasial menentukan kemampuan runtime untuk menemukan entitas yang memiliki kumpulan komponen yang dijamin. Aplikasi mengaktifkan komponen kemampuan spasial saat membuat XrSpatialContextEXT, dan runtime pada gilirannya harus menyediakan hanya komponen yang diaktifkan pada entity yang ditemukan. Misalnya, jika runtime melaporkan bahwa salah satu komponen untuk kemampuan tertentu adalah "label semantik", berarti aplikasi dapat mengaktifkan label semantik melalui konfigurasi untuk kemampuan tersebut dan runtime harus hanya menyediakan komponen label semantik jika dikonfigurasi.
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;
Enumerasi XrSpatialCapabilityEXT mengidentifikasi berbagai jenis kemampuan yang mungkin didukung oleh runtime.
Enumeran memiliki nilai berikut:
Deskripsi Enum
XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT
Pelacakan pesawat (Ditambahkan oleh ekstensi XR_EXT_spatial_plane_tracking)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT
Kemampuan untuk mendeteksi dan melacak kode QR. (Ditambahkan oleh ekstensi XR_EXT_spatial_marker_tracking)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE_EXT
Kemampuan untuk mendeteksi dan melacak kode QR Mikro. (Ditambahkan oleh ekstensi XR_EXT_spatial_marker_tracking)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_EXT
Kemampuan untuk mendeteksi dan melacak Penanda Aruco. (Ditambahkan oleh ekstensi XR_EXT_spatial_marker_tracking)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXT
Kemampuan untuk mendeteksi dan melacak AprilTag. (Ditambahkan oleh ekstensi XR_EXT_spatial_marker_tracking)
XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT
Pelacakan objek (Ditambahkan oleh ekstensi XR_EXT_spatial_object_tracking)
XR_SPATIAL_CAPABILITY_ANCHOR_EXT
Kemampuan untuk membuat anchor spasial (Ditambahkan oleh ekstensi XR_EXT_spatial_anchor)
XR_SPATIAL_CAPABILITY_IMAGE_TRACKING_EXT
Kemampuan untuk mendeteksi dan melacak gambar referensi planar. (Ditambahkan oleh ekstensi XR_EXT_spatial_image_tracking)
XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT
Kemampuan untuk melacak mesh lingkungan. (Ditambahkan oleh ekstensi XR_EXT_spatial_mesh_tracking)
XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_ANDROID
Pelacakan objek (Ditambahkan oleh ekstensi XR_ANDROID_spatial_object_tracking)
XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID
Raycast terhadap buffer kedalaman (Ditambahkan oleh ekstensi XR_ANDROID_spatial_discovery_raycast)
XR_SPATIAL_CAPABILITY_ROOM_TRACKING_ANDROIDSYS
Kemampuan untuk melacak ruangan (Ditambahkan oleh ekstensi XR_ANDROIDSYS_spatial_room_tracking)
XR_SPATIAL_CAPABILITY_ROOM_BOUNDARY_TRACKING_ANDROIDSYS
Kemampuan untuk melacak batas ruangan (Ditambahkan oleh ekstensi XR_ANDROIDSYS_spatial_room_tracking)
XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID
Pelacakan anotasi (Ditambahkan oleh ekstensi XR_ANDROID_spatial_annotation_tracking)
XR_SPATIAL_CAPABILITY_STREETSCAPE_GEOMETRY_ANDROIDX2
Streetscape geometry (Ditambahkan oleh ekstensi XR_ANDROIDX2_geospatial_streetscape)
Fungsi xrEnumerateSpatialCapabilitiesEXT ditentukan sebagai:
XrResult xrEnumerateSpatialCapabilitiesEXT(
XrInstance instance,
XrSystemId systemId,
uint32_t capabilityCapacityInput,
uint32_t* capabilityCountOutput,
XrSpatialCapabilityEXT* capabilities);
Deskripsi Parameter
instanceadalah tuas untuk XrInstance .systemIdadalahXrSystemIdyang kemampuan spasialnya akan dihitung.capabilityCapacityInputadalah kapasitas arraycapabilities, atau 0 untuk menunjukkan permintaan guna mengambil kapasitas yang diperlukan.capabilityCountOutputadalah jumlah kemampuan, atau kapasitas yang diperlukan jikacapabilityCapacityInputtidak mencukupi.capabilitiesadalah array XrSpatialCapabilityEXT . Nilainya dapat berupaNULLjikacapabilityCapacityInputadalah 0.- Lihat bagian Parameter Ukuran Buffer untuk mengetahui deskripsi mendetail tentang pengambilan ukuran
capabilitiesyang diperlukan.
Aplikasi dapat menghitung daftar kemampuan spasial yang didukung oleh XrSystemId tertentu menggunakan xrEnumerateSpatialCapabilitiesEXT .
Runtime tidak boleh menghitung kemampuan spasial yang ekstensinya tidak diaktifkan untuk instance .
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_entityharus diaktifkan sebelum memanggil xrEnumerateSpatialCapabilitiesEXT -
instanceharus berupa handle XrInstance yang valid -
capabilityCountOutputharus berupa pointer ke nilaiuint32_t - Jika
capabilityCapacityInputbukan0,capabilitiesharus berupa pointer ke array nilai XrSpatialCapabilityEXTcapabilityCapacityInput
Kode Status
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
Fungsi xrEnumerateSpatialCapabilityComponentTypesEXT ditentukan sebagai:
XrResult xrEnumerateSpatialCapabilityComponentTypesEXT(
XrInstance instance,
XrSystemId systemId,
XrSpatialCapabilityEXT capability,
XrSpatialCapabilityComponentTypesEXT* capabilityComponents);
Deskripsi Parameter
instanceadalah tuas untuk XrInstance .systemIdadalahXrSystemIdyang komponen kemampuan spasialnya akan dihitung.capabilityadalah XrSpatialCapabilityEXT yang komponennya akan dihitung.capabilityComponentsadalah pointer ke XrSpatialCapabilityComponentTypesEXT , yang merupakan struktur input/output tempat array yang dialokasikan aplikasi diisi.
Fungsi ini mencantumkan jenis komponen yang disediakan oleh kemampuan tertentu pada entitasnya dalam sistem seperti yang dikonfigurasi.
Aplikasi dapat menggunakan jenis komponen yang tercantum dalam XrSpatialCapabilityComponentTypesEXT :: componentTypes untuk memahami kumpulan lengkap komponen yang didukung systemId untuk capability dan dapat menggunakan daftar ini untuk menentukan konfigurasi yang valid untuk capability saat membuat XrSpatialContextEXT untuknya.
Runtime harus menampilkan XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT jika capability tidak di-enum oleh xrEnumerateSpatialCapabilitiesEXT .
Runtime tidak boleh menghitung jenis komponen spasial yang ekstensinya tidak diaktifkan untuk instance .
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_entityharus diaktifkan sebelum memanggil xrEnumerateSpatialCapabilityComponentTypesEXT -
instanceharus berupa handle XrInstance yang valid -
capabilityharus berupa nilai XrSpatialCapabilityEXT yang valid -
capabilityComponentsharus berupa pointer ke struktur XrSpatialCapabilityComponentTypesEXT
Kode Status
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
Struktur XrSpatialCapabilityComponentTypesEXT ditentukan sebagai:
typedef struct XrSpatialCapabilityComponentTypesEXT {
XrStructureType type;
void* next;
uint32_t componentTypeCapacityInput;
uint32_t componentTypeCountOutput;
XrSpatialComponentTypeEXT* componentTypes;
} XrSpatialCapabilityComponentTypesEXT;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur. Tidak ada struktur seperti itu yang ditentukan dalam OpenXR inti atau ekstensi ini.componentTypeCapacityInputadalah kapasitas array, atau 0 untuk menunjukkan permintaan guna mengambil kapasitas yang diperlukan.componentTypeCountOutputadalah jumlah jenis komponen, atau kapasitas yang diperlukan jikacomponentTypeCapacityInputtidak mencukupi.componentTypesadalah array XrSpatialComponentTypeEXT . Nilainya dapat berupaNULLjikacomponentTypeCapacityInputadalah 0.- Lihat bagian Parameter Ukuran Buffer untuk mengetahui deskripsi mendetail tentang pengambilan ukuran
componentTypesyang diperlukan.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_entityharus diaktifkan sebelum menggunakan XrSpatialCapabilityComponentTypesEXT -
typeharus berupaXR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXT -
nextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur - Jika
componentTypeCapacityInputbukan0,componentTypesharus berupa pointer ke array nilaicomponentTypeCapacityInputXrSpatialComponentTypeEXT
Fitur kemampuan spasial
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;
Beberapa kemampuan memiliki parameter yang diekspos ke aplikasi untuk mengonfigurasi cara data komponen dihitung oleh runtime. Dimensi parameterisasi/kemampuan konfigurasi ini dikenal sebagai fitur kemampuan. Misalnya, untuk kemampuan pelacakan gambar, runtime dapat mendukung fitur bagi aplikasi untuk menentukan apakah gambar yang dilacak statis atau tidak.
Memberikan informasi ini ke runtime melalui struktur konfigurasi tidak boleh mengubah kumpulan jenis komponen yang ada pada entitas terkait, misalnya pada gambar yang dilacak. Namun, runtime dapat mengoptimalkan, misalnya, kemampuan pelacakan dari kemampuan pelacakan gambar dan memberikan pengalaman yang lebih baik ke aplikasi.
Fitur tersebut direpresentasikan oleh XrSpatialCapabilityFeatureEXT dan aplikasi mencantumkannya menggunakan xrEnumerateSpatialCapabilityFeaturesEXT .
Setiap fitur kemampuan memiliki struktur konfigurasi yang sesuai untuk mengaktifkannya. Struktur konfigurasi tersebut harus dirantai ke XrSpatialCapabilityConfigurationBaseHeaderEXT :: next dari kemampuan yang sesuai.
Enumeran memiliki nilai berikut:
Deskripsi Enum
XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_FIXED_SIZE_MARKERS_EXT
Fitur kemampuan untuk memungkinkan aplikasi menentukan ukuran penanda. Struktur konfigurasi yang sesuai adalah XrSpatialMarkerSizeEXT (Ditambahkan oleh ekstensi XR_EXT_spatial_marker_tracking)
XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_STATIC_MARKERS_EXT
Fitur kemampuan untuk mengizinkan aplikasi menentukan apakah penanda bersifat statis. Struktur konfigurasi yang sesuai adalah XrSpatialMarkerStaticOptimizationEXT (Ditambahkan oleh ekstensi XR_EXT_spatial_marker_tracking)
XR_SPATIAL_CAPABILITY_FEATURE_OBJECT_SEMANTIC_LABEL_SUBSET_EXT
Fitur spasial yang memungkinkan aplikasi menentukan subset label dari XrSpatialObjectSemanticLabelEXT untuk dilacak oleh runtime. Struktur konfigurasi yang sesuai adalah XrSpatialFeatureObjectSemanticLabelSubsetEXT . (Ditambahkan oleh ekstensi XR_EXT_spatial_object_tracking)
XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID
Runtime mendukung filter XrSpatialBoundsSpherefANDROID untuk XrSpatialDiscoverySnapshotCreateInfoEXT; Hal ini tidak memerlukan struktur konfigurasi apa pun untuk disertakan selama pembuatan konteks spasial. (Ditambahkan oleh ekstensi XR_ANDROID_spatial_discovery_bounds)
XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID
Runtime mendukung filter XrSpatialBoundsBoxfANDROID untuk XrSpatialDiscoverySnapshotCreateInfoEXT; Hal ini tidak memerlukan struktur konfigurasi apa pun untuk disertakan selama pembuatan konteks spasial. (Ditambahkan oleh ekstensi XR_ANDROID_spatial_discovery_bounds)
XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID
Runtime mendukung filter XrSpatialBoundsFrustumfANDROID untuk XrSpatialDiscoverySnapshotCreateInfoEXT; Hal ini tidak memerlukan struktur konfigurasi apa pun untuk disertakan selama pembuatan konteks spasial. (Ditambahkan oleh ekstensi XR_ANDROID_spatial_discovery_bounds)
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_AUTOMATIC_SIZE_IMAGES_EXT
Runtime mendukung penyimpulan otomatis ukuran fisik gambar yang terdeteksi dan dilacak. Struktur konfigurasi yang sesuai adalah XrSpatialImageSizeEXT (Ditambahkan oleh ekstensi XR_EXT_spatial_image_tracking)
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_STATIC_IMAGES_EXT
Runtime mendukung XrSpatialImageStaticOptimizationEXT . Struktur konfigurasi yang sesuai adalah XrSpatialImageStaticOptimizationEXT . (Ditambahkan oleh ekstensi XR_EXT_spatial_image_tracking)
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_FIXED_SIZE_IMAGES_EXT
Runtime mendukung XrSpatialImageSizeEXT . Struktur konfigurasi yang sesuai adalah XrSpatialImageSizeEXT (Ditambahkan oleh ekstensi XR_EXT_spatial_image_tracking)
XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT
Fitur kemampuan untuk melacak mesh lingkungan yang kedap air. Struktur konfigurasi yang sesuai adalah XrSpatialFeatureTrackWatertightMeshEXT . (Ditambahkan oleh ekstensi XR_EXT_spatial_mesh_tracking)
Fungsi xrEnumerateSpatialCapabilityFeaturesEXT ditentukan sebagai:
XrResult xrEnumerateSpatialCapabilityFeaturesEXT(
XrInstance instance,
XrSystemId systemId,
XrSpatialCapabilityEXT capability,
uint32_t capabilityFeatureCapacityInput,
uint32_t* capabilityFeatureCountOutput,
XrSpatialCapabilityFeatureEXT* capabilityFeatures);
Deskripsi Parameter
instanceadalah tuas untuk XrInstance .systemIdadalahXrSystemIdyang fitur kemampuan spasialnya akan dihitung.capabilityadalah XrSpatialCapabilityEXT yang fiturnya akan dihitung.capabilityFeatureCapacityInputadalah kapasitas array, atau 0 untuk menunjukkan permintaan guna mengambil kapasitas yang diperlukan.capabilityFeatureCountOutputadalah jumlah fitur, atau kapasitas yang diperlukan jikacapabilityFeatureCapacityInputtidak mencukupi.capabilityFeaturesadalah array XrSpatialCapabilityFeatureEXT . Nilainya dapat berupaNULLjikacapabilityFeatureCapacityInputadalah 0.- Lihat bagian Parameter Ukuran Buffer untuk mengetahui deskripsi mendetail tentang pengambilan ukuran
capabilityFeaturesyang diperlukan.
Aplikasi menemukan fitur yang didukung oleh sistem tertentu untuk XrSpatialCapabilityEXT menggunakan xrEnumerateSpatialCapabilityFeaturesEXT .
Untuk kemampuan yang memiliki fitur yang diekspos, aplikasi memilih fitur yang akan diaktifkan dan menyediakan struktur konfigurasi yang sesuai dalam rantai berikutnya dari struktur konfigurasi kemampuan di XrSpatialContextCreateInfoEXT :: capabilityConfigs .
Jika capability bukan kemampuan yang di-enumerasi oleh xrEnumerateSpatialCapabilitiesEXT , runtime harus menampilkan XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT .
Runtime tidak boleh menghitung fitur kemampuan spasial yang ekstensinya tidak diaktifkan untuk instance .
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_entityharus diaktifkan sebelum memanggil xrEnumerateSpatialCapabilityFeaturesEXT -
instanceharus berupa handle XrInstance yang valid -
capabilityharus berupa nilai XrSpatialCapabilityEXT yang valid -
capabilityFeatureCountOutputharus berupa pointer ke nilaiuint32_t - Jika
capabilityFeatureCapacityInputbukan0,capabilityFeaturesharus berupa pointer ke array nilai XrSpatialCapabilityFeatureEXTcapabilityFeatureCapacityInput
Kode Status
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
Konteks Spasial
Membuat konteks spasial
XR_DEFINE_HANDLE(XrSpatialContextEXT)
Handle XrSpatialContextEXT merepresentasikan resource untuk menemukan dan memperbarui sejumlah entitas spasial di lingkungan pengguna. Aplikasi dapat menggunakan handle ini untuk menemukan dan memperbarui entitas spasial menggunakan fungsi lain dalam ekstensi ini.
Fungsi xrCreateSpatialContextAsyncEXT ditentukan sebagai:
XrResult xrCreateSpatialContextAsyncEXT(
XrSession session,
const XrSpatialContextCreateInfoEXT* createInfo,
XrFutureEXT* future);
Deskripsi Parameter
sessionadalah XrSession yang konteks spasialnya akan aktif.createInfoadalah XrSpatialContextCreateInfoEXT yang digunakan untuk menentukan parameter konteks spasial.futureadalah pointer keXrFutureEXT.
Aplikasi dapat membuat handle XrSpatialContextEXT dengan:
- Menyediakan struktur turunan XrSpatialCapabilityConfigurationBaseHeaderEXT di XrSpatialContextCreateInfoEXT ::
capabilityConfigsuntuk mengaktifkan kemampuan dan mengaktifkan komponen untuk kemampuan tersebut. - Mengonfigurasi kemampuan itu sendiri dengan struktur konfigurasi yang sesuai dari XrSpatialCapabilityFeatureEXT .
Runtime harus menampilkan XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT jika XrSpatialContextCreateInfoEXT ::capabilityConfigCount adalah 0. Handle konteks spasial memerlukan setidaknya satu kemampuan.
Runtime harus menampilkan XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT jika ada kemampuan dalam array XrSpatialContextCreateInfoEXT :: capabilityConfigs yang tidak di-enumerasi oleh xrEnumerateSpatialCapabilitiesEXT .
Runtime harus menampilkan XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT jika ada XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponentCount dalam XrSpatialContextCreateInfoEXT :: capabilityConfigs yang bernilai 0. Konfigurasi kemampuan tidak lengkap tanpa daftar jenis komponen yang akan diaktifkan untuk kemampuan tersebut.
Runtime harus menampilkan XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT jika ada jenis komponen yang tercantum dalam XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents yang tidak di-enum untuk XrSpatialCapabilityConfigurationBaseHeaderEXT :: capability dalam xrEnumerateSpatialCapabilityComponentTypesEXT .
Jika ada struktur dalam rantai XrSpatialContextCreateInfoEXT :: capabilityConfigs berikutnya yang sesuai dengan XrSpatialCapabilityFeatureEXT yang tidak di-enum untuk kemampuan tersebut di xrEnumerateSpatialCapabilityFeaturesEXT , runtime harus mengabaikan struktur XrSpatialCapabilityFeatureEXT tersebut.
Runtime harus menampilkan XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT jika XrSpatialContextCreateInfoEXT :: capabilityConfigs berisi beberapa struktur dengan XrSpatialCapabilityConfigurationBaseHeaderEXT :: capability yang sama .
Untuk memastikan penggunaan resource sistem yang optimal, runtime dapat menggunakan konfigurasi yang disediakan dalam array XrSpatialContextCreateInfoEXT untuk mempersiapkan diri menerima permintaan spasial yang akan masuk. Misalnya, runtime yang mendukung kemampuan pelacakan bidang mungkin hanya memulai pipeline pelacakan bidangnya jika handle konteks spasial yang berisi kemampuan pelacakan bidang dibuat oleh aplikasi. Jika kemampuan yang dikonfigurasi memiliki waktu pemanasan yang lama, panggilan ke xrCreateSpatialDiscoverySnapshotAsyncEXT dapat menghasilkan snapshot kosong. Aplikasi dapat menunggu XrEventDataSpatialDiscoveryRecommendedEXT sebelum menggunakan xrCreateSpatialDiscoverySnapshotAsyncEXT untuk memastikan bahwa layanan pelacakan yang mendasarinya telah siap.
Jika runtime menerapkan sistem izin untuk mengontrol akses aplikasi ke kemampuan spasial yang dikonfigurasi untuk XrSpatialContextEXT , maka runtime harus menampilkan XR_ERROR_PERMISSION_INSUFFICIENT jika izin tersebut belum diberikan ke aplikasi ini.
Fungsi ini memulai operasi asinkron dan membuat XrFutureEXT yang sesuai , yang dapat digunakan dengan xrPollFutureEXT dan fungsi terkait. Nilai yang ditampilkan dari fungsi ini hanya menunjukkan apakah parameter dapat diterima untuk menjadwalkan operasi asinkron. Fungsi penyelesaian yang sesuai adalah xrCreateSpatialContextCompleteEXT , yang dapat digunakan saat future dari fungsi ini dalam status SIAP, dengan output yang diisi oleh fungsi tersebut dalam struktur penyelesaian XrCreateSpatialContextCompletionEXT .
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_entityharus diaktifkan sebelum memanggil xrCreateSpatialContextAsyncEXT -
sessionharus berupa handle XrSession yang valid -
createInfoharus berupa pointer ke struktur XrSpatialContextCreateInfoEXT yang valid -
futureharus berupa pointer ke nilaiXrFutureEXT
Kode Status
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_PERMISSION_INSUFFICIENTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXTXR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXTXR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXTXR_ERROR_VALIDATION_FAILURE
Struktur XrSpatialContextCreateInfoEXT ditentukan sebagai:
typedef struct XrSpatialContextCreateInfoEXT {
XrStructureType type;
const void* next;
uint32_t capabilityConfigCount;
const XrSpatialCapabilityConfigurationBaseHeaderEXT* const* capabilityConfigs;
} XrSpatialContextCreateInfoEXT;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur. Tidak ada struktur seperti itu yang ditentukan dalam OpenXR inti atau ekstensi ini.capabilityConfigCountadalahuint32_tyang menjelaskan jumlah elemen dalam arraycapabilityConfigs.capabilityConfigsadalah pointer ke array pointer XrSpatialCapabilityConfigurationBaseHeaderEXT.
Struktur XrSpatialContextCreateInfoEXT menjelaskan informasi untuk membuat handle XrSpatialContextEXT.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_entityharus diaktifkan sebelum menggunakan XrSpatialContextCreateInfoEXT -
typeharus berupaXR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXT -
nextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur . Lihat juga: XrSpatialContextPersistenceConfigEXT -
capabilityConfigsharus berupa pointer ke array struktur berbasis XrSpatialCapabilityConfigurationBaseHeaderEXT yang validcapabilityConfigCount. Lihat juga: XrSpatialCapabilityConfigurationAnchorEXT , XrSpatialCapabilityConfigurationAprilTagEXT , XrSpatialCapabilityConfigurationArucoMarkerEXT , XrSpatialCapabilityConfigurationDepthRaycastANDROID , XrSpatialCapabilityConfigurationImageTrackingEXT , XrSpatialCapabilityConfigurationMeshTrackingEXT , XrSpatialCapabilityConfigurationMicroQrCodeEXT , XrSpatialCapabilityConfigurationObjectTrackingANDROID , XrSpatialCapabilityConfigurationObjectTrackingEXT , XrSpatialCapabilityConfigurationPlaneTrackingEXT , XrSpatialCapabilityConfigurationQrCodeEXT , XrSpatialCapabilityConfigurationRoomBoundaryTrackingANDROIDSYS , XrSpatialCapabilityConfigurationRoomTrackingANDROIDSYS , XrSpatialCapabilityConfigurationStreetscapeGeometryANDROIDX2 - Parameter
capabilityConfigCountharus lebih besar dari0
Struktur XrSpatialCapabilityConfigurationBaseHeaderEXT ditentukan sebagai:
typedef struct XrSpatialCapabilityConfigurationBaseHeaderEXT {
XrStructureType type;
const void* next;
XrSpatialCapabilityEXT capability;
uint32_t enabledComponentCount;
const XrSpatialComponentTypeEXT* enabledComponents;
} XrSpatialCapabilityConfigurationBaseHeaderEXT;
Struktur ini tidak digunakan secara langsung di API, tetapi struktur turunannya dapat digunakan dengan XrSpatialContextCreateInfoEXT untuk mengonfigurasi kemampuan spasial.
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur.capabilityadalah XrSpatialCapabilityEXT .enabledComponentCountadalahuint32_tyang menjelaskan jumlah elemen dalam arrayenabledComponents.enabledComponentsadalah pointer ke array XrSpatialComponentTypeEXT .
Runtime harus menampilkan XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT jika capability tidak di-enum oleh xrEnumerateSpatialCapabilitiesEXT . Runtime harus menampilkan XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT jika ada jenis komponen yang tercantum dalam enabledComponents tidak di-enum untuk capability di xrEnumerateSpatialCapabilityComponentTypesEXT .
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_entityharus diaktifkan sebelum menggunakan XrSpatialCapabilityConfigurationBaseHeaderEXT -
nextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur -
capabilityharus berupa nilai XrSpatialCapabilityEXT yang valid -
enabledComponentsmust berupa pointer ke array nilaienabledComponentCountXrSpatialComponentTypeEXT yang valid - Parameter
enabledComponentCountharus lebih besar dari0
Fungsi xrCreateSpatialContextCompleteEXT ditentukan sebagai:
XrResult xrCreateSpatialContextCompleteEXT(
XrSession session,
XrFutureEXT future,
XrCreateSpatialContextCompletionEXT* completion);
Deskripsi Parameter
sessionadalah XrSession yang sebelumnya diteruskan ke xrCreateSpatialContextAsyncEXT ::session.futureadalahXrFutureEXTyang diterima dari xrCreateSpatialContextAsyncEXT .completionadalah pointer ke XrCreateSpatialContextCompletionEXT .
xrCreateSpatialContextCompleteEXT menyelesaikan operasi asinkron yang dimulai oleh xrCreateSpatialContextAsyncEXT . Runtime harus menampilkan XR_ERROR_FUTURE_PENDING_EXT jika future tidak dalam status siap. Runtime harus menampilkan XR_ERROR_FUTURE_INVALID_EXT jika future telah selesai atau dibatalkan.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_entityharus diaktifkan sebelum memanggil xrCreateSpatialContextCompleteEXT -
sessionharus berupa handle XrSession yang valid -
completionharus berupa pointer ke struktur XrCreateSpatialContextCompletionEXT
Kode Status
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
Struktur XrCreateSpatialContextCompletionEXT ditentukan sebagai:
typedef struct XrCreateSpatialContextCompletionEXT {
XrStructureType type;
void* next;
XrResult futureResult;
XrSpatialContextEXT spatialContext;
} XrCreateSpatialContextCompletionEXT;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur.futureResultadalah XrResult dari operasi pembuatan konteks spasial.spatialContextadalah XrSpatialContextEXT yang dibuat menggunakan data dan konfigurasi di xrCreateSpatialContextAsyncEXT ::createInfo.
Kode Pengembalian Mendatang
Nilai 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
Jika futureResult adalah kode keberhasilan, spatialContext harus valid. Jika valid, spatialContext tetap valid hanya dalam siklus proses xrCreateSpatialContextAsyncEXT :: session atau hingga aplikasi menghancurkan spatialContext dengan xrDestroySpatialContextEXT , mana saja yang lebih dulu.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_entityharus diaktifkan sebelum menggunakan XrCreateSpatialContextCompletionEXT -
typeharus berupaXR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXT -
nextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur -
futureResultharus berupa nilai XrResult yang valid - Jika
spatialContextbukan XR_NULL_HANDLE ,spatialContextharus berupa handle XrSpatialContextEXT yang valid
Menghancurkan konteks spasial
Fungsi xrDestroySpatialContextEXT ditentukan sebagai:
XrResult xrDestroySpatialContextEXT(
XrSpatialContextEXT spatialContext);
Deskripsi Parameter
spatialContextadalah XrSpatialContextEXT yang sebelumnya dibuat oleh xrCreateSpatialContextAsyncEXT .
Aplikasi dapat memanggil fungsi xrDestroySpatialContextEXT untuk melepaskan handle spatialContext dan resource pokok saat selesai melakukan tugas penemuan dan pembaruan entitas spasial. Jika tidak ada XrSpatialContextEXT valid lain yang dibuat dengan kemampuan spasial yang sama seperti spatialContext , panggilan ini berfungsi sebagai saran ke runtime untuk menonaktifkan layanan pelacakan yang diperlukan agar kemampuan tersebut dapat menghemat resource sistem.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_entityharus diaktifkan sebelum memanggil xrDestroySpatialContextEXT -
spatialContextharus berupa handle XrSpatialContextEXT yang valid
Keamanan Thread
- Akses ke
spatialContext, dan semua handle turunan, harus disinkronkan secara eksternal
Kode Status
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
Representasi Entitas Spasial
ID Entitas Spasial
XR_DEFINE_ATOM(XrSpatialEntityIdEXT)
XrSpatialEntityIdEXT digunakan untuk merepresentasikan semua jenis entity yang ditemukan oleh runtime di lingkungan spasial pengguna. XrSpatialEntityIdEXT valid untuk XrSpatialContextEXT tempat XrSpatialEntityIdEXT ditemukan, dan runtime tidak boleh menggunakan kembali XrSpatialEntityIdEXT yang sama untuk entitas yang berbeda dalam XrSpatialContextEXT yang sama . Selain itu, runtime tidak boleh menggunakan kembali XrSpatialEntityIdEXT yang sama di beberapa XrSpatialContextEXT dalam XrSession yang sama, terlepas dari apakah XrSpatialEntityIdEXT tersebut merepresentasikan entitas yang sama atau berbeda.
#define XR_NULL_SPATIAL_ENTITY_ID_EXT 0
XR_NULL_SPATIAL_ENTITY_ID_EXT adalah nilai yang dicadangkan yang merepresentasikan XrSpatialEntityIdEXT yang tidak valid . Nilai ini dapat diteruskan ke dan ditampilkan dari fungsi API hanya jika diizinkan secara khusus.
Handle Entitas Spasial
XR_DEFINE_HANDLE(XrSpatialEntityEXT)
Handle XrSpatialEntityEXT mewakili entitas spasial. Aplikasi dapat membuat handle tersebut untuk menyatakan minatnya pada entity tertentu ke runtime.
Membuat Spatial Entity Handle dari ID
Fungsi xrCreateSpatialEntityFromIdEXT ditentukan sebagai:
XrResult xrCreateSpatialEntityFromIdEXT(
XrSpatialContextEXT spatialContext,
const XrSpatialEntityFromIdCreateInfoEXT* createInfo,
XrSpatialEntityEXT* spatialEntity);
Deskripsi Parameter
spatialContextadalah XrSpatialContextEXT yang sebelumnya dibuat menggunakan xrCreateSpatialContextAsyncEXT .createInfoadalah pointer ke struktur XrSpatialEntityFromIdCreateInfoEXT.spatialEntityadalah handle XrSpatialEntityEXT yang ditampilkan.
Aplikasi dapat menggunakan xrCreateSpatialEntityFromIdEXT untuk membuat handle XrSpatialEntityEXT yang merupakan referensi ke entity yang ada di lingkungan pengguna.
Runtime harus menampilkan XR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXT jika XrSpatialEntityFromIdCreateInfoEXT :: entityId bukan ID yang valid untuk spatialContext .
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_entityharus diaktifkan sebelum memanggil xrCreateSpatialEntityFromIdEXT -
spatialContextharus berupa handle XrSpatialContextEXT yang valid -
createInfoharus berupa pointer ke struktur XrSpatialEntityFromIdCreateInfoEXT yang valid -
spatialEntityharus berupa pointer ke handle XrSpatialEntityEXT
Kode Status
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
Struktur XrSpatialEntityFromIdCreateInfoEXT ditentukan sebagai:
typedef struct XrSpatialEntityFromIdCreateInfoEXT {
XrStructureType type;
const void* next;
XrSpatialEntityIdEXT entityId;
} XrSpatialEntityFromIdCreateInfoEXT;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur. Tidak ada struktur seperti itu yang ditentukan dalam OpenXR inti atau ekstensi ini.entityIdadalahXrSpatialEntityIdEXTentity yang ingin dibuatkan handle-nya oleh aplikasi.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_entityharus diaktifkan sebelum menggunakan XrSpatialEntityFromIdCreateInfoEXT -
typeharus berupaXR_TYPE_SPATIAL_ENTITY_FROM_ID_CREATE_INFO_EXT -
nextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur
Menghancurkan Handle Entitas Spasial
Fungsi xrDestroySpatialEntityEXT ditentukan sebagai:
XrResult xrDestroySpatialEntityEXT(
XrSpatialEntityEXT spatialEntity);
Deskripsi Parameter
spatialEntityadalah handle ke XrSpatialEntityEXT yang sebelumnya dibuat oleh fungsi seperti xrCreateSpatialEntityFromIdEXT .
Aplikasi dapat menggunakan xrDestroySpatialEntityEXT untuk melepaskan handle spatialEntity jika tidak lagi tertarik dengan entity yang dirujuk oleh handle ini.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_entityharus diaktifkan sebelum memanggil xrDestroySpatialEntityEXT -
spatialEntityharus berupa handle XrSpatialEntityEXT yang valid
Keamanan Thread
- Akses ke
spatialEntity, dan semua handle turunan, harus disinkronkan secara eksternal
Kode Status
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
Snapshot Spasial
XR_DEFINE_HANDLE(XrSpatialSnapshotEXT)
Aplikasi dapat membuat snapshot spasial untuk tujuan menemukan entity spasial atau untuk memperbarui informasinya tentang entity spasial yang diketahui. Handle XrSpatialSnapshotEXT merepresentasikan data yang tidak dapat diubah untuk entitas spasial yang ditemukan atau diperbarui dan subset komponennya seperti yang dipilih oleh aplikasi. Snapshot spasial merepresentasikan tampilan yang koheren dari entity dan data komponennya. Setelah snapshot dibuat, data snapshot harus tetap konstan selama snapshot valid.
Aplikasi dapat membuat sejumlah snapshot yang diinginkan, tetapi harus memperhatikan memori yang dialokasikan untuk setiap snapshot baru dan harus menghapus snapshot setelah tidak lagi diperlukan.
Membuat snapshot penemuan
Fungsi xrCreateSpatialDiscoverySnapshotAsyncEXT ditentukan sebagai:
XrResult xrCreateSpatialDiscoverySnapshotAsyncEXT(
XrSpatialContextEXT spatialContext,
const XrSpatialDiscoverySnapshotCreateInfoEXT* createInfo,
XrFutureEXT* future);
Deskripsi Parameter
spatialContextadalah XrSpatialContextEXT yang sebelumnya dibuat menggunakan xrCreateSpatialContextAsyncEXT .createInfoadalah pointer ke XrSpatialDiscoverySnapshotCreateInfoEXT .futureadalah pointer keXrFutureEXT.
Aplikasi dapat menemukan entity spasial dengan membuat snapshot penemuan menggunakan xrCreateSpatialDiscoverySnapshotAsyncEXT .
Fungsi ini memulai operasi asinkron dan membuat XrFutureEXT yang sesuai , yang dapat digunakan dengan xrPollFutureEXT dan fungsi terkait. Nilai yang ditampilkan dari fungsi ini hanya menunjukkan apakah parameter dapat diterima untuk menjadwalkan operasi asinkron. Fungsi penyelesaian yang sesuai adalah xrCreateSpatialDiscoverySnapshotCompleteEXT , yang dapat digunakan saat future dari fungsi ini dalam status SIAP, dengan output yang diisi oleh fungsi tersebut dalam struktur penyelesaian XrCreateSpatialDiscoverySnapshotCompletionEXT .
Aplikasi dapat mengirimkan beberapa permintaan pembuatan snapshot penemuan tanpa perlu menunggu permintaan sebelumnya selesai. Proses dan penyelesaian pembuatan snapshot dapat dilakukan dalam urutan apa pun. Runtime dapat menunda penyelesaian pembuatan snapshot penemuan untuk membatasi aplikasi jika perlu mengurangi penggunaan resource sistem karena daya, termal, atau kebijakan perangkat lainnya.
Aplikasi dapat menggunakan XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes untuk memfilter daftar entitas dan komponen yang datanya harus disertakan dalam snapshot oleh runtime. Jika aplikasi menyediakan daftar jenis komponen spasial yang valid di XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes , maka runtime harus hanya menyertakan entitas spasial dalam snapshot yang memiliki setidaknya salah satu komponen yang disediakan di XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes . Selain itu, runtime harus hanya menyertakan data untuk komponen tersebut dalam snapshot.
Runtime harus menampilkan XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT jika ada XrSpatialComponentTypeEXT di XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes yang tidak diaktifkan untuk kemampuan spasial yang diteruskan ke XrSpatialContextCreateInfoEXT :: capabilityConfigs saat membuat spatialContext .
Jika aplikasi tidak menyediakan daftar jenis komponen spasial di XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes , runtime harus menyertakan semua entitas spasial dalam snapshot yang memiliki kumpulan komponen yang tercantum di XrSpatialCapabilityConfigurationBaseHeaderEXT ::enabledComponents untuk kemampuan yang dikonfigurasi untuk spatialContext . Runtime harus menyertakan data untuk semua komponen yang diaktifkan dari kemampuan yang dikonfigurasi untuk spatialContext .
Jika XrEventDataReferenceSpaceChangePending diantrekan sebelum penyelesaian future , dan XrEventDataReferenceSpaceChangePending :: poseValid salah (false), maka runtime dapat membuat XrSpatialSnapshotEXT yang tidak memiliki entitas di dalamnya atau menyetel XrSpatialEntityTrackingStateEXT dari entitas yang tidak lagi dapat dilokasikan di XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace pada XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time ke XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT atau XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT . Runtime tidak boleh menetapkan XrCreateSpatialContextCompletionEXT :: futureResult ke kode error karena XrEventDataReferenceSpaceChangePending .
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_entityharus diaktifkan sebelum memanggil xrCreateSpatialDiscoverySnapshotAsyncEXT -
spatialContextharus berupa handle XrSpatialContextEXT yang valid -
createInfoharus berupa pointer ke struktur XrSpatialDiscoverySnapshotCreateInfoEXT yang valid -
futureharus berupa pointer ke nilaiXrFutureEXT
Kode Status
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
Struktur XrSpatialDiscoverySnapshotCreateInfoEXT ditentukan sebagai:
typedef struct XrSpatialDiscoverySnapshotCreateInfoEXT {
XrStructureType type;
const void* next;
uint32_t componentTypeCount;
const XrSpatialComponentTypeEXT* componentTypes;
} XrSpatialDiscoverySnapshotCreateInfoEXT;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur. Tidak ada struktur seperti itu yang ditentukan dalam OpenXR inti atau ekstensi ini.componentTypeCountadalahuint32_tyang menjelaskan jumlah elemen dalam arraycomponentTypes.componentTypesadalah array XrSpatialComponentTypeEXT .
Struktur XrSpatialDiscoverySnapshotCreateInfoEXT menjelaskan informasi untuk membuat handle XrSpatialSnapshotEXT saat menemukan entitas spasial.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_entityharus diaktifkan sebelum menggunakan XrSpatialDiscoverySnapshotCreateInfoEXT -
typeharus berupaXR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT -
nextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur . Lihat juga: XrSpatialBoundsBoxfANDROID , XrSpatialBoundsFrustumfANDROID , XrSpatialBoundsSpherefANDROID , XrSpatialDiscoveryPersistenceUuidFilterEXT , XrSpatialDiscoveryRoomBoundaryFilterANDROIDSYS , XrSpatialDiscoveryUniqueEntitiesFilterANDROID , XrSpatialFilterTrackingStateEXT , XrSpatialRaycastInfoANDROID - Jika
componentTypeCountbukan0,componentTypesharus berupa pointer ke array nilai XrSpatialComponentTypeEXT yang validcomponentTypeCount
Fungsi xrCreateSpatialDiscoverySnapshotCompleteEXT ditentukan sebagai:
XrResult xrCreateSpatialDiscoverySnapshotCompleteEXT(
XrSpatialContextEXT spatialContext,
const XrCreateSpatialDiscoverySnapshotCompletionInfoEXT* createSnapshotCompletionInfo,
XrCreateSpatialDiscoverySnapshotCompletionEXT* completion);
Deskripsi Parameter
spatialContextadalah XrSpatialContextEXT yang sebelumnya diteruskan ke xrCreateSpatialDiscoverySnapshotAsyncEXT ::spatialContext.createSnapshotCompletionInfoadalah pointer ke XrCreateSpatialDiscoverySnapshotCompletionInfoEXT yang memberikan info tentang penyelesaian permintaan pembuatan snapshot penemuan.completionadalah pointer ke XrCreateSpatialDiscoverySnapshotCompletionEXT .
xrCreateSpatialDiscoverySnapshotCompleteEXT menyelesaikan operasi asinkron yang dimulai oleh xrCreateSpatialDiscoverySnapshotAsyncEXT . Runtime harus menampilkan XR_ERROR_FUTURE_PENDING_EXT jika XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: future tidak dalam status siap. Runtime harus menampilkan XR_ERROR_FUTURE_INVALID_EXT jika XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: future telah selesai atau dibatalkan.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_entityharus diaktifkan sebelum memanggil xrCreateSpatialDiscoverySnapshotCompleteEXT -
spatialContextharus berupa handle XrSpatialContextEXT yang valid -
createSnapshotCompletionInfoharus berupa pointer ke struktur XrCreateSpatialDiscoverySnapshotCompletionInfoEXT yang valid -
completionharus berupa pointer ke struktur XrCreateSpatialDiscoverySnapshotCompletionEXT
Kode Status
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
Struktur XrCreateSpatialDiscoverySnapshotCompletionInfoEXT ditentukan sebagai:
typedef struct XrCreateSpatialDiscoverySnapshotCompletionInfoEXT {
XrStructureType type;
const void* next;
XrSpace baseSpace;
XrTime time;
XrFutureEXT future;
} XrCreateSpatialDiscoverySnapshotCompletionInfoEXT;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur.baseSpaceadalah XrSpace tempat semua lokasi XrSpatialSnapshotEXT penemuan akan berada.timeadalahXrTimetempat semua lokasi penemuan XrSpatialSnapshotEXT akan berada.futureadalahXrFutureEXTyang diterima dari xrCreateSpatialDiscoverySnapshotAsyncEXT
Lokasi dalam berbagai data komponen yang disertakan dalam snapshot yang dibuat akan ditampilkan di baseSpace , yang berada di time .
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_entityharus diaktifkan sebelum menggunakan XrCreateSpatialDiscoverySnapshotCompletionInfoEXT -
typeharus berupaXR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXT -
nextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur -
baseSpaceharus berupa handle XrSpace yang valid
Struktur XrCreateSpatialDiscoverySnapshotCompletionEXT ditentukan sebagai:
typedef struct XrCreateSpatialDiscoverySnapshotCompletionEXT {
XrStructureType type;
void* next;
XrResult futureResult;
XrSpatialSnapshotEXT snapshot;
} XrCreateSpatialDiscoverySnapshotCompletionEXT;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur.futureResultadalah XrResult dari operasi pembuatan snapshot penemuan spasial.snapshotadalah XrSpatialSnapshotEXT yang dapat digunakan untuk mengkueri data komponen entity spasial yang ditemukan.
Kode Pengembalian Mendatang
Nilai futureResult:
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_RUNTIME_FAILUREXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHED
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_entityharus diaktifkan sebelum menggunakan XrCreateSpatialDiscoverySnapshotCompletionEXT -
typeharus berupaXR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXT -
nextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur -
futureResultharus berupa nilai XrResult yang valid - Jika
snapshotbukan XR_NULL_HANDLE ,snapshotharus berupa handle XrSpatialSnapshotEXT yang valid
Acara Rekomendasi Penemuan
Struktur XrEventDataSpatialDiscoveryRecommendedEXT ditentukan sebagai:
typedef struct XrEventDataSpatialDiscoveryRecommendedEXT {
XrStructureType type;
const void* next;
XrSpatialContextEXT spatialContext;
} XrEventDataSpatialDiscoveryRecommendedEXT;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur.spatialContextadalah XrSpatialContextEXT yang penemuannya direkomendasikan oleh runtime.
Aplikasi dapat mengambil peristiwa ini menggunakan xrPollEvent . Aplikasi dapat menghindari panggilan berlebihan ke xrCreateSpatialDiscoverySnapshotAsyncEXT untuk menemukan entitas spasial dengan menunggu peristiwa ini. Jika aplikasi membuat beberapa snapshot penemuan dengan XrSpatialDiscoverySnapshotCreateInfoEXT yang sama di antara dua peristiwa XrEventDataSpatialDiscoveryRecommendedEXT, snapshot yang dihasilkan mungkin berisi entity yang sama sehingga pembuatan snapshot dan kueri data akan sia-sia.
Menunggu peristiwa ini untuk membuat snapshot penemuan baru memastikan bahwa aplikasi tidak membebani sistem dengan permintaan penemuan yang mungkin tidak menampilkan data baru dan membantu menghindari risiko penggunaan berlebihan sumber daya sistem, dan mengalami pembatasan karena kebijakan daya atau termal perangkat. Hal ini juga membantu menciptakan kesamaan antara runtime yang menemukan entitas spasial secara langsung dengan pelacakan langsung dan runtime yang menyediakan entitas spasial dari status yang direkam sebelumnya (tempat runtime dapat mengantrekan peristiwa rekomendasi penemuan hanya sekali untuk setiap XrSpatialContextEXT).
Runtime tidak boleh mengantrekan peristiwa ini untuk memberi tahu aplikasi tentang perubahan atau penyesuaian yang dilakukan pada data komponen entitas spasial yang ada. Aplikasi dapat menggunakan xrCreateSpatialUpdateSnapshotEXT untuk melacak pembaruan data komponen untuk entity spasial yang diminatinya.
Runtime dapat mengantrekan peristiwa rekomendasi penemuan tanpa menunggu aplikasi memanggil xrCreateSpatialDiscoverySnapshotAsyncEXT terlebih dahulu . Misalnya, runtime dapat mendasarkan keputusan untuk mengantrekan peristiwa rekomendasi penemuan pada konfigurasi XrSpatialContextEXT , pemahaman runtime sendiri tentang lingkungan di sekitar pengguna (penemuan entitas baru atau hilangnya entitas yang ada), atau untuk memberikan petunjuk tentang irama permintaan penemuan yang sesuai ke aplikasi agar tidak membebani sumber daya sistem. Runtime dapat memilih untuk tidak pernah mengantrekan peristiwa ini untuk XrSpatialContextEXT jika tidak ada entity yang ditemukan di lingkungan pengguna selama masa aktif XrSpatialContextEXT tersebut .
Runtime tidak boleh mengantrekan peristiwa ini untuk spatialContext tertentu hingga aplikasi menyelesaikan pembuatannya dengan menggunakan xrCreateSpatialContextCompleteEXT .
Setelah aplikasi memanggil xrDestroySpatialContextEXT, runtime tidak boleh mengantrekan peristiwa rekomendasi penemuan lebih lanjut untuk konteks spasial tersebut, atau menampilkan peristiwa tersebut untuk konteks tersebut dari xrPollEvent .
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_entityharus diaktifkan sebelum menggunakan XrEventDataSpatialDiscoveryRecommendedEXT -
typeharus berupaXR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT -
nextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur
Membuat Kueri Data Komponen
Fungsi xrQuerySpatialComponentDataEXT ditentukan sebagai:
XrResult xrQuerySpatialComponentDataEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialComponentDataQueryConditionEXT* queryCondition,
XrSpatialComponentDataQueryResultEXT* queryResult);
Deskripsi Parameter
snapshotadalah XrSpatialSnapshotEXT yang sebelumnya disediakan oleh xrCreateSpatialDiscoverySnapshotCompleteEXT atau xrCreateSpatialUpdateSnapshotEXT .queryConditionadalah pointer ke struktur XrSpatialComponentDataQueryConditionEXT.queryResultadalah pointer ke struktur XrSpatialComponentDataQueryResultEXT.
Aplikasi dapat menggunakan xrQuerySpatialComponentDataEXT untuk membuat kueri data komponen entitas dalam snapshot dengan melampirkan struktur daftar ke XrSpatialComponentDataQueryResultEXT :: next yang sesuai dengan setiap XrSpatialComponentTypeEXT dalam XrSpatialComponentDataQueryConditionEXT :: componentTypes .
Jika aplikasi melampirkan struktur daftar ke XrSpatialComponentDataQueryResultEXT :: next yang tidak sesuai dengan salah satu komponen yang tercantum dalam XrSpatialComponentDataQueryConditionEXT :: componentTypes , runtime harus menampilkan XR_ERROR_VALIDATION_FAILURE .
Aplikasi dapat memilih untuk melampirkan struktur daftar yang sesuai dengan hanya sebagian kecil komponen yang tercantum dalam XrSpatialComponentDataQueryConditionEXT :: componentTypes . Aplikasi dapat memilih untuk menghilangkan struktur daftar sepenuhnya jika hanya ingin mengetahui ID dan status pelacakan entitas spasial yang memenuhi queryCondition . Runtime tidak boleh memperlakukan tidak adanya struktur daftar dari rantai XrSpatialComponentDataQueryResultEXT :: next sebagai kegagalan.
Jika XrEventDataReferenceSpaceChangePending diantrekan dan XrEventDataReferenceSpaceChangePending :: changeTime berlalu saat aplikasi mengkueri data komponen dari XrSpatialSnapshotEXT , aplikasi dapat menggunakan data peristiwa untuk menyesuaikan pose yang sesuai.
Runtime harus mengisi XrSpatialComponentDataQueryResultEXT :: entityIds hanya dengan entity yang memiliki semua komponen yang ditentukan dalam XrSpatialComponentDataQueryConditionEXT :: componentTypes . Jika XrSpatialComponentDataQueryConditionEXT :: componentTypeCount adalah 0, runtime harus mengisi queryResult dengan semua entity (dan status pelacakannya) yang ada dalam snapshot. Jika kondisi kueri tambahan ditambahkan ke XrSpatialComponentDataQueryConditionEXT :: next , runtime harus memperlakukannya sebagai "AND" dengan ketersediaan jenis komponen, yaitu runtime harus mengisi XrSpatialComponentDataQueryResultEXT ::entityIds hanya dengan entity yang memenuhi semua kondisi yang diberikan. Runtime harus mengisi data komponen dalam struktur daftar dalam urutan yang sama dengan entitas di XrSpatialComponentDataQueryResultEXT :: entityIds yaitu data komponen pada indeks tertentu dalam array struktur daftar harus sesuai dengan entitas pada indeks yang sama.
Jika status pelacakan untuk entity bukan XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT , runtime tidak boleh mengubah data pada indeks yang sesuai dengan entity tersebut dalam array yang terdapat dalam struktur daftar yang terlampir ke XrSpatialComponentDataQueryResultEXT .
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_entityharus diaktifkan sebelum memanggil xrQuerySpatialComponentDataEXT -
snapshotharus berupa handle XrSpatialSnapshotEXT yang valid -
queryConditionharus berupa pointer ke struktur XrSpatialComponentDataQueryConditionEXT yang valid -
queryResultharus berupa pointer ke struktur XrSpatialComponentDataQueryResultEXT
Kode Status
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
Sebagai contoh, aplikasi membuat XrSpatialSnapshotEXT yang berisi 5 entitas, dengan -
- Entitas 1 dan 2 memiliki komponen
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTdanXR_SPATIAL_COMPONENT_TYPE_PARENT_EXT - Entitas 3 dan 4 memiliki komponen
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXTdanXR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT - Entitas 5 memiliki komponen
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTdanXR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT.
XrSpatialEntityIdEXT
XrSpatialEntityIdEXT
1
1
2
2
3
3
4
4
5
5
Bounded2D
Bounded2D
Ya
Ya
Ya
Ya
Tidak
Tidak
Tidak
Tidak
Ya
Ya
Orang tua
Orang tua
Ya
Ya
Ya
Ya
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Mesh3D
Mesh3D
Tidak
Tidak
Tidak
Tidak
Ya
Ya
Ya
Ya
Ya
Ya
Bounded3D
Bounded3D
Tidak
Tidak
Tidak
Tidak
Ya
Ya
Ya
Ya
Tidak
Tidak ada Teks bukan SVG - tidak dapat ditampilkan
Gambar 20. Contoh ringkasan
xrQuerySpatialComponentDataEXT pada snapshot di atas dengan XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT yang tercantum dalam kondisi kueri akan menghasilkan entity #1, #2, dan #5 yang ditampilkan ke aplikasi dan aplikasi dapat melampirkan array XrSpatialBounded2DDataEXT sebagai bagian dari struktur XrSpatialComponentBounded2DListEXT ke rantai XrSpatialComponentDataQueryResultEXT berikutnya untuk mendapatkan data bounded2D.
XrSpatialEntityIdEXT
XrSpatialEntityIdEXT
1
1
2
2
5
5
Bounded2D
Bounded2D
Data untuk entityId #1
Data untuk entit...
Data untuk entityId #2
Data untuk entit...
Data untuk entityId #5
Data untuk entit...
entityIds
entityIds
berikutnya
berikutnya
XrSpatialComponent DataQueryResultEXT
XrSpatialComponent Dat...
batas
batas
XrSpatialComponent Bounded2DListEXT
XrSpatialComponent Bou... Teks bukan SVG - tidak dapat ditampilkan
Gambar 21. Contoh hasil kueri
xrQuerySpatialComponentDataEXT pada snapshot di atas dengan komponen XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT dan XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT yang tercantum dalam kondisi kueri akan menghasilkan entitas #3 dan #4 yang ditampilkan ke aplikasi dan aplikasi dapat melampirkan array XrBoxf dan XrSpatialMeshDataEXT sebagai bagian dari struktur XrSpatialComponentBounded3DListEXT dan XrSpatialComponentMesh3DListEXT masing-masing ke rantai XrSpatialComponentDataQueryResultEXT berikutnya untuk mendapatkan data komponen.
XrSpatialEntityIdEXT
XrSpatialEntityIdEXT
3
3
4
4
Bounded3D
Bounded3D
Data untuk entityId #3
Data untuk entit...
Data untuk entityId #4
Data untuk entit...
Mesh3D
Mesh3D
Data untuk entityId #3
Data untuk entit...
Data untuk entityId #4
Data untuk entit...
entityIds
entityIds
berikutnya
berikutnya
XrSpatialComponent DataQueryResultEXT
XrSpatialComponent Da...
batas
batas
berikutnya
berikutnya
XrSpatialComponent Bounded3DListEXT
XrSpatialComponent Bo...
XrSpatialComponent Mesh3DListEXT
XrSpatialComponent Me...
mesh
meshes Text is not SVG - cannot display
Gambar 22. Contoh hasil kueri
Struktur XrSpatialComponentDataQueryConditionEXT ditentukan sebagai:
typedef struct XrSpatialComponentDataQueryConditionEXT {
XrStructureType type;
const void* next;
uint32_t componentTypeCount;
const XrSpatialComponentTypeEXT* componentTypes;
} XrSpatialComponentDataQueryConditionEXT;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur.componentTypeCountadalahuint32_tyang menjelaskan jumlah elemen dalam arraycomponentTypes.componentTypesadalah array XrSpatialComponentTypeEXT yang datanya akan diambil dari snapshot.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_entityharus diaktifkan sebelum menggunakan XrSpatialComponentDataQueryConditionEXT -
typeharus berupaXR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT -
nextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur . Lihat juga: XrSpatialDiscoveryPersistenceUuidFilterEXT , XrSpatialFilterArchetypeEXT , XrSpatialFilterTrackingStateEXT - Jika
componentTypeCountbukan0,componentTypesharus berupa pointer ke array nilai XrSpatialComponentTypeEXT yang validcomponentTypeCount
Struktur XrSpatialComponentDataQueryResultEXT ditentukan sebagai:
typedef struct XrSpatialComponentDataQueryResultEXT {
XrStructureType type;
void* next;
uint32_t entityIdCapacityInput;
uint32_t entityIdCountOutput;
XrSpatialEntityIdEXT* entityIds;
uint32_t entityStateCapacityInput;
uint32_t entityStateCountOutput;
XrSpatialEntityTrackingStateEXT* entityStates;
} XrSpatialComponentDataQueryResultEXT;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur.entityIdCapacityInputadalah kapasitas arrayentityIds, atau 0 untuk menunjukkan permintaan guna mengambil kapasitas yang diperlukan.entityIdCountOutputadalah jumlahXrSpatialEntityIdEXTdalamentityIds, atau kapasitas yang diperlukan jikaentityIdCapacityInputtidak mencukupi.entityIdsadalah arrayXrSpatialEntityIdEXT. Nilainya dapat berupaNULLjikaentityIdCapacityInputadalah 0.entityStateCapacityInputadalah kapasitas arrayentityStates, atau 0 untuk menunjukkan permintaan guna mengambil kapasitas yang diperlukan.entityStateCountOutputadalah jumlah XrSpatialEntityTrackingStateEXT dalamentityStates, atau kapasitas yang diperlukan jikaentityStateCapacityInputtidak mencukupi. Harus selalu sama denganentityIdCountOutput.entityStatesadalah array XrSpatialEntityTrackingStateEXT . Nilainya dapat berupaNULLjikaentityStateCapacityInputadalah 0.- Lihat bagian Parameter Ukuran Buffer untuk mengetahui deskripsi mendetail tentang pengambilan ukuran
entityIdsyang diperlukan.
Aplikasi dapat menggunakan entityIds dengan xrCreateSpatialEntityFromIdEXT untuk membuat handle XrSpatialEntityEXT untuk entity yang ingin mendapatkan update rutinnya. Aplikasi dapat menggunakan handle XrSpatialEntityEXT ini dengan xrCreateSpatialUpdateSnapshotEXT untuk membuat snapshot update yang memiliki data komponen terbaru yang diketahui runtime untuk entitas yang disediakan.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_entityharus diaktifkan sebelum menggunakan XrSpatialComponentDataQueryResultEXT -
typeharus berupaXR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT -
nextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur . Lihat juga: XrSpatialComponentAnchorListEXT , XrSpatialComponentAnnotationQuadListANDROID , XrSpatialComponentBounded2DListEXT , XrSpatialComponentBounded3DListEXT , XrSpatialComponentConfidenceListANDROIDSYS , XrSpatialComponentImage2DListEXT , XrSpatialComponentKeyboardSemanticLabelListEXT , XrSpatialComponentMarkerListEXT , XrSpatialComponentMaterialTypeListANDROIDSYS , XrSpatialComponentMesh2DListEXT , XrSpatialComponentMesh3DListEXT , XrSpatialComponentMesh3DNormalsListEXT , XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT , XrSpatialComponentMesh3DVertexSemanticLabelsListEXT , XrSpatialComponentMouseSemanticLabelListEXT , XrSpatialComponentObjectSemanticLabelListANDROID , XrSpatialComponentObjectSemanticLabelListEXT , XrSpatialComponentOccupancyGridListANDROIDX1 , XrSpatialComponentParentListEXT , XrSpatialComponentPersistenceListEXT , XrSpatialComponentPlaneAlignmentListEXT , XrSpatialComponentPlaneSemanticLabelListEXT , XrSpatialComponentPolygon2DListEXT , XrSpatialComponentRaycastResultListANDROID , XrSpatialComponentRoomEmptinessListANDROIDSYS , XrSpatialComponentRoomListANDROIDSYS , XrSpatialComponentStreetscapeGeometryMetadataListANDROIDX2 , XrSpatialComponentSubsumedByListANDROID - Jika
entityIdCapacityInputbukan0,entityIdsharus berupa pointer ke array nilaientityIdCapacityInputXrSpatialEntityIdEXT - Jika
entityStateCapacityInputbukan0,entityStatesharus berupa pointer ke array nilaientityStateCapacityInputXrSpatialEntityTrackingStateEXT
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 menghitung kemungkinan status pelacakan entity spasial:
Enum memiliki arti berikut:
Deskripsi Enum
XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT
Runtime telah berhenti melacak entitas ini dan tidak akan pernah melanjutkan pelacakannya.
XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT
Runtime telah menjeda pelacakan entitas ini, tetapi dapat melanjutkan pelacakannya pada masa mendatang.
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT
Runtime saat ini melacak entitas ini dan data komponennya valid.
PELACAKAN
DIJEDA
DIHENTIKAN
Gambar 23. XrSpatialEntityTrackingStateEXT
- Runtime dapat mengubah status entitas spasial dari
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXTmenjadiXR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXTjika menangguhkan pelacakan entitas spasial tersebut, tetapi memiliki kemungkinan untuk melanjutkan pelacakannya pada masa mendatang. Beberapa contoh saat runtime dapat melakukan hal ini mencakup (tetapi tidak terbatas pada) jika aplikasi kehilangan fokus input; atau jika entitas spasial yang diberikan terlalu jauh dari pengguna untuk dilacak secara akurat; atau jika ada terlalu banyak entitas yang dilacak dan runtime ingin mengurangi biaya pelacakan. XrSpatialEntityTrackingStateEXT membantu aplikasi mengisolasi dirinya dari berbagai kebijakan pelacakan setiap runtime. - Runtime dapat mengubah status entitas dari
XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXTmenjadiXR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXTatauXR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT. - Runtime harus mengubah status entity spasial dari
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXTatauXR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXTmenjadiXR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXTjika entity spasial hilang dan pelacakannya tidak akan pernah dipulihkan atau dilanjutkan. Contoh kasus seperti ini adalah jika perangkat kehilangan pelacakan, memulai ulang sesi pelacakannya, tetapi tidak dapat melokalisasi ulang di lingkungannya, sehingga memperlakukan entity yang ditemukan dalam sesi pelacakan ini sebagai entity baru. - Setelah status pelacakan entity disetel ke
XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT, runtime tidak boleh mengubahnya ke status lain. - Saat membuat kueri data komponen entitas spasial menggunakan xrQuerySpatialComponentDataEXT , runtime harus menyetel data yang valid dalam konten buffer yang disediakan oleh aplikasi dalam rantai XrSpatialComponentDataQueryResultEXT berikutnya jika status entitas adalah
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT. Jika status entitas adalahXR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXTatauXR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT, runtime tidak boleh mengubah konten buffer.
Idiom dua panggilan untuk data komponen
Struktur XrSpatialBufferEXT ditentukan sebagai:
typedef struct XrSpatialBufferEXT {
XrSpatialBufferIdEXT bufferId;
XrSpatialBufferTypeEXT bufferType;
} XrSpatialBufferEXT;
Deskripsi Anggota
bufferIdXrSpatialBufferIdEXTdata buffer.bufferTypeadalah XrSpatialBufferTypeEXT untuk menunjukkan jenis data dibufferId. Aplikasi dapat menggunakanbufferTypeuntuk menentukan fungsi mana yang akan digunakan untuk mengambil data buffer yang sebenarnya.
Beberapa komponen spasial memiliki data berukuran variabel dan oleh karena itu memerlukan penggunaan idioma dua panggilan untuk mengambil datanya. Dalam kasus seperti itu, struktur data komponen spasial menyediakan XrSpatialBufferEXT untuk setiap buffer berukuran variabel yang diperlukan dalam data komponen tersebut.
Untuk bufferId yang sama , runtime harus memberikan data yang sama dari satu kueri data komponen ke kueri data komponen lainnya, bahkan dari satu snapshot ke snapshot lainnya. bufferId yang berbeda di antara panggilan kueri data komponen menunjukkan kepada aplikasi bahwa data untuk komponen tersebut mungkin telah berubah.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_entityharus diaktifkan sebelum menggunakan XrSpatialBufferEXT -
bufferTypeharus berupa nilai XrSpatialBufferTypeEXT yang valid
XR_DEFINE_ATOM(XrSpatialBufferIdEXT)
XrSpatialBufferIdEXT digunakan untuk merepresentasikan semua jenis data berukuran variabel untuk komponen spasial.
Runtime harus menyimpan XrSpatialBufferIdEXT dan datanya dalam memori setidaknya selama siklus proses XrSpatialSnapshotEXT yang memuatnya. Runtime dapat menyimpan XrSpatialBufferIdEXT dan datanya dalam memori lebih lama daripada siklus proses XrSpatialSnapshotEXT untuk menampilkan ID yang sama sebagai bagian dari snapshot yang dibuat nanti oleh aplikasi. Untuk XrSpatialBufferIdEXT yang sama , runtime harus selalu menampilkan data yang sama melalui fungsi xrGetSpatialBuffer* yang sesuai.
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;
Enumerasi XrSpatialBufferTypeEXT mengidentifikasi berbagai jenis data buffer yang direpresentasikan XrSpatialBufferIdEXT .
Deskripsi Enumeran
XR_SPATIAL_BUFFER_TYPE_STRING_EXT.XrSpatialBufferIdEXTdapat diteruskan ke xrGetSpatialBufferStringEXT untuk mengambil buffer string.XR_SPATIAL_BUFFER_TYPE_UINT8_EXT.XrSpatialBufferIdEXTdapat diteruskan ke xrGetSpatialBufferUint8EXT untuk mengambil bufferuint8_t.XR_SPATIAL_BUFFER_TYPE_UINT16_EXT.XrSpatialBufferIdEXTdapat diteruskan ke xrGetSpatialBufferUint16EXT untuk mengambil bufferuint16_t.XR_SPATIAL_BUFFER_TYPE_UINT32_EXT.XrSpatialBufferIdEXTdapat diteruskan ke xrGetSpatialBufferUint32EXT untuk mengambil bufferuint32_t.XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT.XrSpatialBufferIdEXTdapat diteruskan ke xrGetSpatialBufferFloatEXT untuk mengambil bufferfloat.XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT.XrSpatialBufferIdEXTdapat diteruskan ke xrGetSpatialBufferVector2fEXT untuk mengambil buffer XrVector2f.XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT. DapatXrSpatialBufferIdEXTditeruskan ke xrGetSpatialBufferVector3fEXT untuk mengambil buffer XrVector3f.
Fungsi xrGetSpatialBufferStringEXT ditentukan sebagai:
XrResult xrGetSpatialBufferStringEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
char* buffer);
Deskripsi Parameter
snapshotadalah handle ke XrSpatialSnapshotEXT .infomenyimpan informasi tentang buffer yang akan dikueri.bufferCapacityInputadalah kapasitas array, atau 0 untuk menunjukkan permintaan guna mengambil kapasitas yang diperlukan.bufferCountOutputadalah jumlah karakter, atau kapasitas yang diperlukan jikabufferCapacityInputtidak mencukupi.bufferadalah arraychar. Nilainya dapat berupaNULLjikabufferCapacityInputadalah 0.- Lihat bagian Parameter Ukuran Buffer untuk mengetahui deskripsi mendetail tentang pengambilan ukuran
bufferyang diperlukan.
Aplikasi dapat mendapatkan data untuk XrSpatialBufferEXT yang disediakan oleh komponen, dengan XrSpatialBufferEXT :: bufferType adalah XR_SPATIAL_BUFFER_TYPE_STRING_EXT dengan menggunakan xrGetSpatialBufferStringEXT .
Runtime harus menampilkan XR_ERROR_VALIDATION_FAILURE jika XrSpatialBufferTypeEXT untuk XrSpatialBufferGetInfoEXT :: bufferId bukan XR_SPATIAL_BUFFER_TYPE_STRING_EXT .
Runtime harus menampilkan XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT jika XrSpatialBufferGetInfoEXT :: bufferId bukan milik snapshot .
buffer yang diisi oleh runtime harus berupa string UTF-8 yang diakhiri dengan null.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_entityharus diaktifkan sebelum memanggil xrGetSpatialBufferStringEXT -
snapshotharus berupa handle XrSpatialSnapshotEXT yang valid -
infoharus berupa pointer ke struktur XrSpatialBufferGetInfoEXT yang valid -
bufferCountOutputharus berupa pointer ke nilaiuint32_t - Jika
bufferCapacityInputbukan0,bufferharus berupa pointer ke array nilai charbufferCapacityInput
Kode Status
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
Fungsi xrGetSpatialBufferUint8EXT ditentukan sebagai:
XrResult xrGetSpatialBufferUint8EXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
uint8_t* buffer);
Deskripsi Parameter
snapshotadalah handle ke XrSpatialSnapshotEXT .infomenyimpan informasi tentang buffer yang akan dikueri.bufferCapacityInputadalah kapasitas array, atau 0 untuk menunjukkan permintaan guna mengambil kapasitas yang diperlukan.bufferCountOutputadalah jumlah elemen dalam arraybuffer, atau kapasitas yang diperlukan jikabufferCapacityInputtidak mencukupi.bufferadalah arrayuint8_t. Nilainya dapat berupaNULLjikabufferCapacityInputadalah 0.- Lihat bagian Parameter Ukuran Buffer untuk mengetahui deskripsi mendetail tentang pengambilan ukuran
bufferyang diperlukan.
Aplikasi dapat mendapatkan data untuk XrSpatialBufferEXT yang disediakan oleh komponen, dengan XrSpatialBufferEXT :: bufferType adalah XR_SPATIAL_BUFFER_TYPE_UINT8_EXT dengan menggunakan xrGetSpatialBufferUint8EXT .
Runtime harus menampilkan XR_ERROR_VALIDATION_FAILURE jika XrSpatialBufferTypeEXT untuk XrSpatialBufferGetInfoEXT :: bufferId bukan XR_SPATIAL_BUFFER_TYPE_UINT8_EXT .
Runtime harus menampilkan XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT jika XrSpatialBufferGetInfoEXT :: bufferId bukan milik snapshot .
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_entityharus diaktifkan sebelum memanggil xrGetSpatialBufferUint8EXT -
snapshotharus berupa handle XrSpatialSnapshotEXT yang valid -
infoharus berupa pointer ke struktur XrSpatialBufferGetInfoEXT yang valid -
bufferCountOutputharus berupa pointer ke nilaiuint32_t - Jika
bufferCapacityInputbukan0,bufferharus berupa pointer ke array nilaibufferCapacityInputuint8_t
Kode Status
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
Fungsi xrGetSpatialBufferUint16EXT ditentukan sebagai:
XrResult xrGetSpatialBufferUint16EXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
uint16_t* buffer);
Deskripsi Parameter
snapshotadalah handle ke XrSpatialSnapshotEXT .infomenyimpan informasi tentang buffer yang akan dikueri.bufferCapacityInputadalah kapasitas array, atau 0 untuk menunjukkan permintaan guna mengambil kapasitas yang diperlukan.bufferCountOutputadalah jumlah elemen dalam arraybuffer, atau kapasitas yang diperlukan jikabufferCapacityInputtidak mencukupi.bufferadalah arrayuint16_t. Nilainya dapat berupaNULLjikabufferCapacityInputadalah 0.- Lihat bagian Parameter Ukuran Buffer untuk mengetahui deskripsi mendetail tentang pengambilan ukuran
bufferyang diperlukan.
Aplikasi dapat mendapatkan data untuk XrSpatialBufferEXT yang disediakan oleh komponen, dengan XrSpatialBufferEXT :: bufferType adalah XR_SPATIAL_BUFFER_TYPE_UINT16_EXT menggunakan xrGetSpatialBufferUint16EXT .
Runtime harus menampilkan XR_ERROR_VALIDATION_FAILURE jika XrSpatialBufferTypeEXT untuk XrSpatialBufferGetInfoEXT :: bufferId bukan XR_SPATIAL_BUFFER_TYPE_UINT16_EXT .
Runtime harus menampilkan XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT jika XrSpatialBufferGetInfoEXT :: bufferId bukan milik snapshot .
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_entityharus diaktifkan sebelum memanggil xrGetSpatialBufferUint16EXT -
snapshotharus berupa handle XrSpatialSnapshotEXT yang valid -
infoharus berupa pointer ke struktur XrSpatialBufferGetInfoEXT yang valid -
bufferCountOutputharus berupa pointer ke nilaiuint32_t - Jika
bufferCapacityInputbukan0,bufferharus berupa pointer ke array nilaibufferCapacityInputuint16_t
Kode Status
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
Fungsi xrGetSpatialBufferUint32EXT ditentukan sebagai:
XrResult xrGetSpatialBufferUint32EXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
uint32_t* buffer);
Deskripsi Parameter
snapshotadalah handle ke XrSpatialSnapshotEXT .infomenyimpan informasi tentang buffer yang akan dikueri.bufferCapacityInputadalah kapasitas array, atau 0 untuk menunjukkan permintaan guna mengambil kapasitas yang diperlukan.bufferCountOutputadalah jumlah elemen dalam arraybuffer, atau kapasitas yang diperlukan jikabufferCapacityInputtidak mencukupi.bufferadalah arrayuint32_t. Nilainya dapat berupaNULLjikabufferCapacityInputadalah 0.- Lihat bagian Parameter Ukuran Buffer untuk mengetahui deskripsi mendetail tentang pengambilan ukuran
bufferyang diperlukan.
Aplikasi dapat mendapatkan data untuk XrSpatialBufferEXT yang disediakan oleh komponen, dengan XrSpatialBufferEXT :: bufferType adalah XR_SPATIAL_BUFFER_TYPE_UINT32_EXT menggunakan xrGetSpatialBufferUint32EXT .
Runtime harus menampilkan XR_ERROR_VALIDATION_FAILURE jika XrSpatialBufferTypeEXT untuk XrSpatialBufferGetInfoEXT :: bufferId bukan XR_SPATIAL_BUFFER_TYPE_UINT32_EXT .
Runtime harus menampilkan XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT jika XrSpatialBufferGetInfoEXT :: bufferId bukan milik snapshot .
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_entityharus diaktifkan sebelum memanggil xrGetSpatialBufferUint32EXT -
snapshotharus berupa handle XrSpatialSnapshotEXT yang valid -
infoharus berupa pointer ke struktur XrSpatialBufferGetInfoEXT yang valid -
bufferCountOutputharus berupa pointer ke nilaiuint32_t - Jika
bufferCapacityInputbukan0,bufferharus berupa pointer ke array nilaibufferCapacityInputuint32_t
Kode Status
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
Fungsi xrGetSpatialBufferFloatEXT ditentukan sebagai:
XrResult xrGetSpatialBufferFloatEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
float* buffer);
Deskripsi Parameter
snapshotadalah handle ke XrSpatialSnapshotEXT .infomenyimpan informasi tentang buffer yang akan dikueri.bufferCapacityInputadalah kapasitas array, atau 0 untuk menunjukkan permintaan guna mengambil kapasitas yang diperlukan.bufferCountOutputadalah jumlah elemen dalam arraybuffer, atau kapasitas yang diperlukan jikabufferCapacityInputtidak mencukupi.bufferadalah arrayfloat. Nilainya dapat berupaNULLjikabufferCapacityInputadalah 0.- Lihat bagian Parameter Ukuran Buffer untuk mengetahui deskripsi mendetail tentang pengambilan ukuran
bufferyang diperlukan.
Aplikasi dapat mendapatkan data untuk XrSpatialBufferEXT yang disediakan oleh komponen, dengan XrSpatialBufferEXT :: bufferType adalah XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT menggunakan xrGetSpatialBufferFloatEXT .
Runtime harus menampilkan XR_ERROR_VALIDATION_FAILURE jika XrSpatialBufferTypeEXT untuk XrSpatialBufferGetInfoEXT :: bufferId bukan XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT .
Runtime harus menampilkan XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT jika XrSpatialBufferGetInfoEXT :: bufferId bukan milik snapshot .
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_entityharus diaktifkan sebelum memanggil xrGetSpatialBufferFloatEXT -
snapshotharus berupa handle XrSpatialSnapshotEXT yang valid -
infoharus berupa pointer ke struktur XrSpatialBufferGetInfoEXT yang valid -
bufferCountOutputharus berupa pointer ke nilaiuint32_t - Jika
bufferCapacityInputbukan0,bufferharus berupa pointer ke array nilaibufferCapacityInputfloat
Kode Status
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
Fungsi xrGetSpatialBufferVector2fEXT ditentukan sebagai:
XrResult xrGetSpatialBufferVector2fEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
XrVector2f* buffer);
Deskripsi Parameter
snapshotadalah handle ke XrSpatialSnapshotEXT .infomenyimpan informasi tentang buffer yang akan dikueri.bufferCapacityInputadalah kapasitas array, atau 0 untuk menunjukkan permintaan guna mengambil kapasitas yang diperlukan.bufferCountOutputadalah jumlah elemen dalam arraybuffer, atau kapasitas yang diperlukan jikabufferCapacityInputtidak mencukupi.bufferadalah array XrVector2f . Nilainya dapat berupaNULLjikabufferCapacityInputadalah 0.- Lihat bagian Parameter Ukuran Buffer untuk mengetahui deskripsi mendetail tentang pengambilan ukuran
bufferyang diperlukan.
Aplikasi dapat mendapatkan data untuk XrSpatialBufferEXT yang disediakan oleh komponen, dengan XrSpatialBufferEXT :: bufferType adalah XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT menggunakan xrGetSpatialBufferVector2fEXT .
Runtime harus menampilkan XR_ERROR_VALIDATION_FAILURE jika XrSpatialBufferTypeEXT untuk XrSpatialBufferGetInfoEXT :: bufferId bukan XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT .
Runtime harus menampilkan XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT jika XrSpatialBufferGetInfoEXT :: bufferId bukan milik snapshot .
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_entityharus diaktifkan sebelum memanggil xrGetSpatialBufferVector2fEXT -
snapshotharus berupa handle XrSpatialSnapshotEXT yang valid -
infoharus berupa pointer ke struktur XrSpatialBufferGetInfoEXT yang valid -
bufferCountOutputharus berupa pointer ke nilaiuint32_t - Jika
bufferCapacityInputbukan0,bufferharus berupa pointer ke array strukturbufferCapacityInputXrVector2f
Kode Status
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
Fungsi xrGetSpatialBufferVector3fEXT ditentukan sebagai:
XrResult xrGetSpatialBufferVector3fEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
XrVector3f* buffer);
Deskripsi Parameter
snapshotadalah handle ke XrSpatialSnapshotEXT .infomenyimpan informasi tentang buffer yang akan dikueri.bufferCapacityInputadalah kapasitas array, atau 0 untuk menunjukkan permintaan guna mengambil kapasitas yang diperlukan.bufferCountOutputadalah jumlah elemen dalam arraybuffer, atau kapasitas yang diperlukan jikabufferCapacityInputtidak mencukupi.bufferadalah array XrVector3f . Nilainya dapat berupaNULLjikabufferCapacityInputadalah 0.- Lihat bagian Parameter Ukuran Buffer untuk mengetahui deskripsi mendetail tentang pengambilan ukuran
bufferyang diperlukan.
Aplikasi dapat mendapatkan data untuk XrSpatialBufferEXT yang disediakan oleh komponen, dengan XrSpatialBufferEXT :: bufferType adalah XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT menggunakan xrGetSpatialBufferVector3fEXT .
Runtime harus menampilkan XR_ERROR_VALIDATION_FAILURE jika XrSpatialBufferTypeEXT untuk XrSpatialBufferGetInfoEXT :: bufferId bukan XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT .
Runtime harus menampilkan XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT jika XrSpatialBufferGetInfoEXT :: bufferId bukan milik snapshot .
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_entityharus diaktifkan sebelum memanggil xrGetSpatialBufferVector3fEXT -
snapshotharus berupa handle XrSpatialSnapshotEXT yang valid -
infoharus berupa pointer ke struktur XrSpatialBufferGetInfoEXT yang valid -
bufferCountOutputharus berupa pointer ke nilaiuint32_t - Jika
bufferCapacityInputbukan0,bufferharus berupa pointer ke array strukturbufferCapacityInputXrVector3f
Kode Status
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
Struktur XrSpatialBufferGetInfoEXT ditentukan sebagai:
typedef struct XrSpatialBufferGetInfoEXT {
XrStructureType type;
const void* next;
XrSpatialBufferIdEXT bufferId;
} XrSpatialBufferGetInfoEXT;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur.bufferIdXrSpatialBufferIdEXTuntuk buffer yang datanya akan diambil.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_entityharus diaktifkan sebelum menggunakan XrSpatialBufferGetInfoEXT -
typeharus berupaXR_TYPE_SPATIAL_BUFFER_GET_INFO_EXT -
nextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur
#define XR_NULL_SPATIAL_BUFFER_ID_EXT 0
XR_NULL_SPATIAL_BUFFER_ID_EXT adalah nilai yang dicadangkan yang merepresentasikan XrSpatialBufferIdEXT yang tidak valid . Nilai ini dapat diteruskan ke dan ditampilkan dari fungsi API hanya jika diizinkan secara khusus.
Buat Update Snapshot
Fungsi xrCreateSpatialUpdateSnapshotEXT ditentukan sebagai:
XrResult xrCreateSpatialUpdateSnapshotEXT(
XrSpatialContextEXT spatialContext,
const XrSpatialUpdateSnapshotCreateInfoEXT* createInfo,
XrSpatialSnapshotEXT* snapshot);
Deskripsi Parameter
spatialContextadalah XrSpatialContextEXT yang sebelumnya dibuat menggunakan xrCreateSpatialContextAsyncEXT .createInfoadalah pointer ke XrSpatialUpdateSnapshotCreateInfoEXT .snapshotadalah pointer ke hasil XrSpatialSnapshotEXT .
Aplikasi dapat menggunakan xrCreateSpatialUpdateSnapshotEXT untuk membuat snapshot dan mendapatkan data komponen terbaru untuk entity tertentu seperti yang diketahui oleh runtime. Aplikasi dapat memberikan handle XrSpatialEntityEXT dan jenis komponen yang mereka minati saat membuat snapshot.
Aplikasi dapat menggunakan XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes untuk memfilter daftar komponen yang datanya harus disertakan dalam snapshot. Jika aplikasi menyediakan daftar jenis komponen spasial yang valid di XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes , maka runtime harus hanya menyertakan entitas spasial dalam snapshot yang memiliki setidaknya salah satu komponen yang disediakan di XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes . Selain itu, runtime hanya boleh menyertakan data untuk komponen tersebut dalam snapshot.
Runtime harus menampilkan XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT jika ada XrSpatialComponentTypeEXT di XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes yang tidak diaktifkan untuk kemampuan spasial yang diteruskan ke XrSpatialContextCreateInfoEXT :: capabilityConfigs saat membuat spatialContext .
Jika aplikasi tidak menyediakan daftar jenis komponen spasial di XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes , runtime harus menyertakan semua entitas spasial yang tercantum di XrSpatialUpdateSnapshotCreateInfoEXT :: entities dalam snapshot dan harus menyertakan data untuk semua komponen yang diaktifkan dari kemampuan yang dikonfigurasi untuk spatialContext .
Runtime tidak boleh menyertakan entitas spasial yang tidak tercantum dalam XrSpatialUpdateSnapshotCreateInfoEXT :: entities di snapshot .
Aplikasi dapat membuat sejumlah snapshot yang diinginkan, tetapi harus memperhatikan memori yang dialokasikan untuk setiap snapshot baru dan harus menghapus snapshot setelah tidak lagi diperlukan.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_entityharus diaktifkan sebelum memanggil xrCreateSpatialUpdateSnapshotEXT -
spatialContextharus berupa handle XrSpatialContextEXT yang valid -
createInfoharus berupa pointer ke struktur XrSpatialUpdateSnapshotCreateInfoEXT yang valid -
snapshotharus berupa pointer ke handle XrSpatialSnapshotEXT
Kode Status
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
Struktur XrSpatialUpdateSnapshotCreateInfoEXT ditentukan sebagai:
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;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur. Tidak ada struktur seperti itu yang ditentukan dalam OpenXR inti atau ekstensi ini.entityCountadalahuint32_tyang menjelaskan jumlah elemen dalam arrayentities.entitiesadalah array XrSpatialEntityEXT yang komponen datanya harus disertakan dalam snapshot oleh runtime.componentTypeCountadalahuint32_tyang menjelaskan jumlah elemen dalam arraycomponentTypes.componentTypesadalah array XrSpatialComponentTypeEXT yang datanya harus disertakan dalam snapshot oleh runtime.baseSpaceadalah XrSpace relatif terhadap semua lokasi XrSpatialSnapshotEXT yang diperbarui.timeadalahXrTimetempat semua lokasi update XrSpatialSnapshotEXT akan berada.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_entityharus diaktifkan sebelum menggunakan XrSpatialUpdateSnapshotCreateInfoEXT -
typeharus berupaXR_TYPE_SPATIAL_UPDATE_SNAPSHOT_CREATE_INFO_EXT -
nextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur -
entitiesharus berupa pointer ke arrayentityCounthandle XrSpatialEntityEXT yang valid - Jika
componentTypeCountbukan0,componentTypesharus berupa pointer ke array nilai XrSpatialComponentTypeEXT yang validcomponentTypeCount -
baseSpaceharus berupa handle XrSpace yang valid - Parameter
entityCountharus lebih besar dari0 -
baseSpacedan elemenentitiesharus dibuat, dialokasikan, atau diambil dari XrSession yang sama
Menghancurkan snapshot
Fungsi xrDestroySpatialSnapshotEXT ditentukan sebagai:
XrResult xrDestroySpatialSnapshotEXT(
XrSpatialSnapshotEXT snapshot);
Deskripsi Parameter
snapshotadalah XrSpatialSnapshotEXT yang sebelumnya disediakan oleh xrCreateSpatialDiscoverySnapshotCompleteEXT atau xrCreateSpatialUpdateSnapshotEXT .
Aplikasi dapat memanggil xrDestroySpatialSnapshotEXT untuk menghancurkan handle XrSpatialSnapshotEXT dan resource yang terkait dengannya.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_entityharus diaktifkan sebelum memanggil xrDestroySpatialSnapshotEXT -
snapshotharus berupa handle XrSpatialSnapshotEXT yang valid
Keamanan Thread
- Akses ke
snapshot, dan semua handle turunan, harus disinkronkan secara eksternal
Kode Status
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
Komponen Umum
2D Terikat
Data komponen
Struktur XrSpatialBounded2DDataEXT ditentukan sebagai:
typedef struct XrSpatialBounded2DDataEXT {
XrPosef center;
XrExtent2Df extents;
} XrSpatialBounded2DDataEXT;
Deskripsi Anggota
centeradalah XrPosef yang menentukan pusat geometris komponen 2D yang dibatasi.extentsadalah rentang komponen 2D yang dibatasi di sepanjang sumbu x (extents.width), sumbu y (extents.height), yang berpusat padacenter.
extents dari XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT mengacu pada ukuran entitas dalam bidang x-y dari sistem koordinat bidang. Bidang dengan posisi {0, 0, 0}, rotasi {0, 0, 0, 1} (tanpa rotasi), dan rentang {1, 1} mengacu pada bidang 1 meter x 1 meter yang berpusat di {0, 0, 0} dengan vektor normal permukaan depannya mengarah ke arah +Z dalam ruang komponen.
X X Y Y Z Z Tinggi Tinggi Y Y Z Z X X Bidang vertikal Bidang vertikal Bidang Horizontal Bidang Horizontal Lebar Lebar Lebar Lebar Tinggi Tinggi
Gambar 24. Sistem Koordinat Komponen Bounded2D
Catatan
OpenXR menggunakan bidang X-Y dengan +Z sebagai normal bidang, tetapi API lain dapat menggunakan bidang X-Z dengan +Y sebagai normal bidang. Bidang X-Y dapat dikonversi menjadi bidang X-Z dengan memutar -π/2 radian di sekitar sumbu +X.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_entityharus diaktifkan sebelum menggunakan XrSpatialBounded2DDataEXT
Struktur daftar komponen untuk membuat kueri data
Struktur XrSpatialComponentBounded2DListEXT ditentukan sebagai:
typedef struct XrSpatialComponentBounded2DListEXT {
XrStructureType type;
void* next;
uint32_t boundCount;
XrSpatialBounded2DDataEXT* bounds;
} XrSpatialComponentBounded2DListEXT;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur. Tidak ada struktur seperti itu yang ditentukan dalam OpenXR inti atau ekstensi ini.boundCountadalahuint32_tyang menjelaskan jumlah elemen dalam arraybounds.boundsadalah array XrSpatialBounded2DDataEXT .
Runtime harus menampilkan XR_ERROR_VALIDATION_FAILURE dari xrQuerySpatialComponentDataEXT jika XrSpatialComponentBounded2DListEXT ada di rantai XrSpatialComponentDataQueryResultEXT berikutnya :: next tetapi XrSpatialComponentDataQueryConditionEXT ::componentTypeCount tidak nol dan XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT tidak disertakan dalam XrSpatialComponentDataQueryConditionEXT :: componentTypes .
Runtime harus menampilkan XR_ERROR_SIZE_INSUFFICIENT dari xrQuerySpatialComponentDataEXT jika boundCount kurang dari XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .
Jika xrQuerySpatialComponentDataEXT :: snapshot dibuat dari xrCreateSpatialDiscoverySnapshotCompleteEXT , maka runtime harus menyediakan XrSpatialBounded2DDataEXT :: center di XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace dan XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time .
Jika xrQuerySpatialComponentDataEXT :: snapshot dibuat dari xrCreateSpatialUpdateSnapshotEXT , maka runtime harus menyediakan XrSpatialBounded2DDataEXT :: center di XrSpatialUpdateSnapshotCreateInfoEXT :: baseSpace dan XrSpatialUpdateSnapshotCreateInfoEXT :: time .
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_entityharus diaktifkan sebelum menggunakan XrSpatialComponentBounded2DListEXT -
typeharus berupaXR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXT -
nextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur -
boundsharus berupa pointer ke array strukturboundCountXrSpatialBounded2DDataEXT - Parameter
boundCountharus lebih besar dari0
Konfigurasi
Jika XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT tercantum dalam XrSpatialCapabilityComponentTypesEXT :: componentTypes untuk beberapa kemampuan, aplikasi dapat mengaktifkannya dengan menyertakan nilai enum dalam daftar XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents. Komponen ini tidak memerlukan konfigurasi khusus untuk disertakan dalam rantai XrSpatialCapabilityConfigurationBaseHeaderEXT berikutnya .
3D yang dibatasi
Data komponen
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT menggunakan XrBoxf untuk datanya.
Struktur daftar komponen untuk membuat kueri data
Struktur XrSpatialComponentBounded3DListEXT ditentukan sebagai:
typedef struct XrSpatialComponentBounded3DListEXT {
XrStructureType type;
void* next;
uint32_t boundCount;
XrBoxf* bounds;
} XrSpatialComponentBounded3DListEXT;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur. Tidak ada struktur seperti itu yang ditentukan dalam OpenXR inti atau ekstensi ini.boundCountadalahuint32_tyang menjelaskan jumlah elemen dalam arraybounds.boundsadalah array XrBoxf .
Runtime harus menampilkan XR_ERROR_VALIDATION_FAILURE dari xrQuerySpatialComponentDataEXT jika XrSpatialComponentBounded3DListEXT ada di rantai XrSpatialComponentDataQueryResultEXT :: next berikutnya, tetapi XrSpatialComponentDataQueryConditionEXT ::componentTypeCount tidak nol dan XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT tidak disertakan dalam XrSpatialComponentDataQueryConditionEXT :: componentTypes .
Runtime harus menampilkan XR_ERROR_SIZE_INSUFFICIENT dari xrQuerySpatialComponentDataEXT jika boundCount kurang dari XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .
Jika xrQuerySpatialComponentDataEXT :: snapshot dibuat dari xrCreateSpatialDiscoverySnapshotCompleteEXT , maka runtime harus menyediakan XrBoxf :: center di XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace pada XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time .
Jika xrQuerySpatialComponentDataEXT :: snapshot dibuat dari xrCreateSpatialUpdateSnapshotEXT , maka runtime harus menyediakan XrBoxf :: center di XrSpatialUpdateSnapshotCreateInfoEXT :: baseSpace pada XrSpatialUpdateSnapshotCreateInfoEXT :: time .
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_entityharus diaktifkan sebelum menggunakan XrSpatialComponentBounded3DListEXT -
typeharus berupaXR_TYPE_SPATIAL_COMPONENT_BOUNDED_3D_LIST_EXT -
nextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur -
boundsharus berupa pointer ke array strukturboundCountXrBoxf - Parameter
boundCountharus lebih besar dari0
Konfigurasi
Jika XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT tercantum dalam XrSpatialCapabilityComponentTypesEXT :: componentTypes untuk beberapa kemampuan, aplikasi dapat mengaktifkannya dengan menyertakan enum dalam daftar XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents. Komponen ini tidak memerlukan konfigurasi khusus untuk disertakan dalam rantai XrSpatialCapabilityConfigurationBaseHeaderEXT berikutnya .
Orang tua
Data komponen
XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT menggunakan XrSpatialEntityIdEXT untuk datanya.
Struktur daftar komponen untuk membuat kueri data
Struktur XrSpatialComponentParentListEXT ditentukan sebagai:
typedef struct XrSpatialComponentParentListEXT {
XrStructureType type;
void* next;
uint32_t parentCount;
XrSpatialEntityIdEXT* parents;
} XrSpatialComponentParentListEXT;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur. Tidak ada struktur seperti itu yang ditentukan dalam OpenXR inti atau ekstensi ini.parentCountadalahuint32_tyang menjelaskan jumlah elemen dalam arrayparents.parentsadalah arrayXrSpatialEntityIdEXT.
Runtime harus menampilkan XR_ERROR_VALIDATION_FAILURE dari xrQuerySpatialComponentDataEXT jika XrSpatialComponentParentListEXT ada di rantai XrSpatialComponentDataQueryResultEXT berikutnya :: next, tetapi XrSpatialComponentDataQueryConditionEXT ::componentTypeCount bukan nol dan XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT tidak disertakan dalam XrSpatialComponentDataQueryConditionEXT :: componentTypes .
Runtime harus menampilkan XR_ERROR_SIZE_INSUFFICIENT dari xrQuerySpatialComponentDataEXT jika parentCount kurang dari XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_entityharus diaktifkan sebelum menggunakan XrSpatialComponentParentListEXT -
typeharus berupaXR_TYPE_SPATIAL_COMPONENT_PARENT_LIST_EXT -
nextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur -
parentsharus berupa pointer ke array nilaiparentCountXrSpatialEntityIdEXT - Parameter
parentCountharus lebih besar dari0
Konfigurasi
Jika XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT tercantum dalam XrSpatialCapabilityComponentTypesEXT :: componentTypes untuk beberapa kemampuan, aplikasi dapat mengaktifkannya dengan menyertakan enum dalam daftar XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents. Komponen ini tidak memerlukan konfigurasi khusus untuk disertakan dalam rantai XrSpatialCapabilityConfigurationBaseHeaderEXT berikutnya .
Mesh 3D
Data komponen
Struktur XrSpatialMeshDataEXT ditentukan sebagai:
typedef struct XrSpatialMeshDataEXT {
XrPosef origin;
XrSpatialBufferEXT vertexBuffer;
XrSpatialBufferEXT indexBuffer;
} XrSpatialMeshDataEXT;
Deskripsi Anggota
originadalah XrPosef yang menentukan asal mesh. Semua verteks mesh harus relatif terhadap asal ini.vertexBufferadalah XrSpatialBufferEXT yang menyediakan ID untuk buffer yang merepresentasikan buffer vertex entitas yang menggunakan komponen ini. Posisi verteks harus relatif terhadaporigin.indexBufferadalah XrSpatialBufferEXT yang memberikan ID untuk buffer yang merepresentasikan array indeks segitiga, yang menentukan indeks verteks mesh divertexBuffer. Indeks segitiga harus ditampilkan dalam urutan berlawanan arah jarum jam dan tiga indeks menunjukkan satu segitiga.
Jenis komponen yang menggunakan XrSpatialMeshDataEXT harus menentukan XrSpatialBufferTypeEXT dari vertexBuffer dan indexBuffer .
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_entityharus diaktifkan sebelum menggunakan XrSpatialMeshDataEXT -
vertexBufferharus berupa struktur XrSpatialBufferEXT yang valid -
indexBufferharus berupa struktur XrSpatialBufferEXT yang valid
Struktur daftar komponen untuk membuat kueri data
Struktur XrSpatialComponentMesh3DListEXT ditentukan sebagai:
typedef struct XrSpatialComponentMesh3DListEXT {
XrStructureType type;
void* next;
uint32_t meshCount;
XrSpatialMeshDataEXT* meshes;
} XrSpatialComponentMesh3DListEXT;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur.meshCountadalahuint32_tyang menjelaskan jumlah elemen dalam arraymeshes.meshesadalah array XrSpatialMeshDataEXT .
Aplikasi dapat mengkueri komponen 3D mesh entitas spasial dalam XrSpatialSnapshotEXT dengan menambahkan XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT di XrSpatialComponentDataQueryConditionEXT :: componentTypes dan menambahkan XrSpatialComponentMesh3DListEXT ke rantai penunjuk berikutnya dari XrSpatialComponentDataQueryResultEXT .
Runtime harus menampilkan XR_ERROR_VALIDATION_FAILURE dari xrQuerySpatialComponentDataEXT jika XrSpatialComponentMesh3DListEXT ada di rantai XrSpatialComponentDataQueryResultEXT :: next berikutnya, tetapi XrSpatialComponentDataQueryConditionEXT ::componentTypeCount tidak nol dan XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT tidak disertakan dalam XrSpatialComponentDataQueryConditionEXT :: componentTypes .
Runtime harus menampilkan XR_ERROR_SIZE_INSUFFICIENT dari xrQuerySpatialComponentDataEXT jika meshCount kurang dari XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .
Untuk XrSpatialMeshDataEXT yang diisi oleh runtime dalam array meshes, XrSpatialBufferEXT :: bufferType untuk XrSpatialMeshDataEXT :: vertexBuffer harus berupa XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT dan XrSpatialBufferEXT :: bufferType untuk XrSpatialMeshDataEXT :: indexBuffer harus berupa XR_SPATIAL_BUFFER_TYPE_UINT32_EXT .
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_entityharus diaktifkan sebelum menggunakan XrSpatialComponentMesh3DListEXT -
typeharus berupaXR_TYPE_SPATIAL_COMPONENT_MESH_3D_LIST_EXT -
nextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur -
meshesharus berupa pointer ke array strukturmeshCountXrSpatialMeshDataEXT - Parameter
meshCountharus lebih besar dari0
Konfigurasi
Jika XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT tercantum dalam XrSpatialCapabilityComponentTypesEXT :: componentTypes untuk beberapa kemampuan, aplikasi dapat mengaktifkannya dengan menyertakan enum dalam daftar XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents dari kemampuan yang mendukung komponen ini dalam struktur turunan XrSpatialCapabilityConfigurationBaseHeaderEXT.
Komponen ini tidak memerlukan konfigurasi khusus untuk disertakan dalam rantai XrSpatialCapabilityConfigurationBaseHeaderEXT berikutnya .
Filter status pelacakan
Struktur XrSpatialFilterTrackingStateEXT ditentukan sebagai:
typedef struct XrSpatialFilterTrackingStateEXT {
XrStructureType type;
const void* next;
XrSpatialEntityTrackingStateEXT trackingState;
} XrSpatialFilterTrackingStateEXT;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur.trackingStateadalah XrSpatialEntityTrackingStateEXT yang filternya ingin diterapkan oleh aplikasi.
Aplikasi dapat menggunakan XrSpatialFilterTrackingStateEXT dalam rangkaian XrSpatialDiscoverySnapshotCreateInfoEXT berikutnya untuk mencakup penemuan hanya pada entitas yang status pelacakannya adalah trackingState .
Aplikasi dapat menggunakan XrSpatialFilterTrackingStateEXT dalam rantai XrSpatialComponentDataQueryConditionEXT berikutnya untuk mencakup kueri data komponen dari hanya snapshot ke entitas yang status pelacakannya adalah trackingState .
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_entityharus diaktifkan sebelum menggunakan XrSpatialFilterTrackingStateEXT -
typeharus berupaXR_TYPE_SPATIAL_FILTER_TRACKING_STATE_EXT -
nextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur -
trackingStateharus berupa nilai XrSpatialEntityTrackingStateEXT yang valid
Kode contoh
Penggunaan Aplikasi
Aplikasi biasanya menggunakan ekstensi entitas spasial dengan pola berikut:
- Aplikasi pertama-tama menghitung kemampuan spasial sistem menggunakan xrEnumerateSpatialCapabilitiesEXT . Kemudian, aplikasi memeriksa array XrSpatialCapabilityEXT yang ditampilkan dan menghitung komponen serta fitur yang didukung untuk setiap kemampuan tersebut dengan menggunakan xrEnumerateSpatialCapabilityComponentTypesEXT dan xrEnumerateSpatialCapabilityFeaturesEXT. Hal ini memberi aplikasi gambaran lengkap tentang komponen yang dapat diaktifkan dan konfigurasi yang diterima oleh kemampuan tersebut.
- Kemudian, aplikasi membuat satu atau banyak handle XrSpatialContextEXT dengan konfigurasi kemampuan spasial tertentu, yang mana konfigurasi tersebut mengaktifkan & mengonfigurasi kemampuan tertentu dalam konteks spasial, serta mengaktifkan & mengonfigurasi komponen untuk kemampuan tersebut.
- Untuk setiap XrSpatialContextEXT , aplikasi menunggu untuk menerima peristiwa XrEventDataSpatialDiscoveryRecommendedEXT untuk XrSpatialContextEXT tersebut sebelum menggunakan xrCreateSpatialDiscoverySnapshotAsyncEXT untuk menemukan entitas spasial. Setelah operasi asinkron ini selesai, aplikasi akan menerima handle XrSpatialSnapshotEXT.
- Aplikasi membuat kueri untuk entity dan data komponen yang disertakan dalam XrSpatialSnapshotEXT ini menggunakan xrQuerySpatialComponentDataEXT . Aplikasi membaca data komponen terbaru dari entity yang dikueri dari struktur yang terlampir ke rantai XrSpatialComponentDataQueryResultEXT berikutnya jika status entity adalah
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT. - Jika ada entity tertentu yang diidentifikasi aplikasi sebagai menarik dan ingin mendapatkan update dari waktu ke waktu, aplikasi akan membuat handle XrSpatialEntityEXT untuk entity tersebut menggunakan xrCreateSpatialEntityFromIdEXT . Aplikasi mendapatkan update untuk entitas menarik tersebut dengan menggunakan xrCreateSpatialUpdateSnapshotEXT dan menggunakan fungsi xrQuerySpatialComponentDataEXT yang sama pada XrSpatialSnapshotEXT yang baru dibuat untuk mendapatkan data komponen terbaru untuk entitas tersebut.
Menemukan entitas spasial & data komponen kueri
Contoh kode berikut menunjukkan cara menemukan entitas spasial untuk kemampuan "Foo" dan mengkueri data komponennya.
/****************************/
/* 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));
Mengkueri data buffer
Contoh kode berikut menunjukkan cara mendapatkan data komponen yang menyediakan 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.
}
}
Panduan ekstensi
Jika ekstensi menentukan XrSpatialComponentTypeEXT baru yang memberikan data tambahan tentang entitas spasial,
- Ekstensi harus juga menentukan struktur daftar untuk komponen tersebut yang memungkinkan aplikasi meneruskan array ke runtime untuk diisi dengan data untuk setiap entity spasial yang memenuhi xrQuerySpatialComponentDataEXT ::
queryCondition. Beberapa contoh struktur daftar tersebut adalah XrSpatialComponentParentListEXT dan XrSpatialComponentBounded2DListEXT . Jika ukuran data komponen bervariasi dan mengharuskan aplikasi menggunakan idioma dua panggilan untuk membuat kueri, data komponen harus menyediakan XrSpatialBufferEXT untuk setiap data berukuran variabel dalam struktur daftar dan harus menentukan XrSpatialBufferTypeEXT untuk setiap buffer. Aplikasi dapat membuat kueri data buffer menggunakan fungsi yang ditentukan dalam Idiom dua panggilan untuk data komponen . Contoh struktur tersebut adalah XrSpatialMeshDataEXT yang disertakan dalam XrSpatialComponentMesh3DListEXT . - Ekstensi dapat juga menyediakan struktur yang dapat dirangkai aplikasi ke XrSpatialComponentDataQueryConditionEXT ::
nextuntuk memberikan filter tambahan untuk kueri yang berkaitan dengan data komponen ini.
- Ekstensi harus juga menentukan struktur daftar untuk komponen tersebut yang memungkinkan aplikasi meneruskan array ke runtime untuk diisi dengan data untuk setiap entity spasial yang memenuhi xrQuerySpatialComponentDataEXT ::
Ekstensi dapat menentukan struktur yang memperluas XrSpatialDiscoverySnapshotCreateInfoEXT untuk memberikan filter tambahan untuk penemuan. Filter untuk membuat snapshot tidak boleh memengaruhi konfigurasi konteks spasial, tetapi harus digunakan untuk memberikan petunjuk kepada runtime tentang entitas dan data apa yang akan disertakan dalam snapshot seperti yang dilacak oleh konfigurasi konteks spasial saat ini (dan oleh karena itu konfigurasi layanan pokok saat ini).
Jika ekstensi menentukan XrSpatialCapabilityEXT baru ,
- Harus juga menentukan daftar XrSpatialComponentTypeEXT yang harus disediakan runtime pada entity untuk kemampuan tersebut.
- harus juga menyediakan struktur yang berasal dari XrSpatialCapabilityConfigurationBaseHeaderEXT yang akan memungkinkan konfigurasi kemampuan tersebut.
Jika ekstensi menentukan XrSpatialCapabilityFeatureEXT baru , ekstensi tersebut juga harus menentukan struktur konfigurasi yang sesuai yang dapat dihubungkan ke pointer berikutnya dari XrSpatialCapabilityConfigurationBaseHeaderEXT , yang dapat digunakan aplikasi untuk mengaktifkan fitur saat membuat XrSpatialContextEXT .
Ekstensi yang menentukan XrSpatialCapabilityEXT baru harus mengikuti template ini untuk spesifikasinya -
- Ringkasan
- Dukungan runtime
- Konfigurasi
- Komponen yang dijamin
- Kode Contoh
Ekstensi yang menentukan XrSpatialComponentTypeEXT baru harus mengikuti template ini untuk spesifikasi -
- Data komponen
- Struktur daftar komponen untuk membuat kueri data
- Konfigurasi
Saat menulis API yang menyediakan
XrSpatialBufferIdEXTuntuk aplikasi , API tersebut harus disertai dengan XrSpatialBufferTypeEXT untuk memberi tahu aplikasi jenis data buffer dan aplikasi dapat menggunakan fungsixrGetSpatialBuffer*yang sesuai untuk mengambil konten buffer yang sebenarnya.
Pedoman Desain & Ekstensi Label Semantik
Meskipun ekstensi ini tidak menentukan komponen apa pun untuk menyampaikan informasi label semantik suatu entitas, ekstensi ini menetapkan aturan dan panduan desain untuk ekstensi apa pun yang menentukan komponen tersebut. Dalam teks berikut, " sebaiknya " dan " harus " membatasi penulis fungsi tersebut, bukan membatasi penerapan runtime atau aplikasi yang menggunakan API.
- Jika ekstensi menentukan label semantik untuk XrSpatialCapabilityEXT , ekstensi tersebut harus melakukannya dengan menentukan XrSpatialComponentTypeEXT baru serta enumerasi baru dengan sekumpulan label ("kumpulan label semantik") sebagai data untuk komponen tersebut.
- Enumerasi yang merepresentasikan set label semantik harus memiliki nilai untuk menunjukkan bahwa entitas tidak dikategorikan ke dalam label apa pun dalam set ini. Nama enumerasi ini harus menyertakan 'UNCATEGORIZED', misalnya
XR_SPATIAL_PLANE_SEMANTIC_LABEL_UNCATEGORIZED_EXT. Nilai ini menunjukkan kepada aplikasi bahwa runtime mengenali entitas ini, tetapi ada kumpulan label semantik lain tempat entitas ini dikategorikan. - Pencacahan XrSpatialComponentTypeEXT yang baru ditentukan ini di xrEnumerateSpatialCapabilityComponentTypesEXT menyiratkan bahwa runtime mendukung set label semantik (dan oleh karena itu, label yang ditentukan dalam set) yang sesuai dengan jenis komponen tersebut.
- Aplikasi menyatakan keinginannya untuk menemukan entitas yang memiliki label yang termasuk dalam set label semantik ini dengan menyertakan XrSpatialComponentTypeEXT yang sesuai dalam array XrSpatialCapabilityConfigurationBaseHeaderEXT ::
enabledComponentsdari struct konfigurasi untuk kemampuan yang jenis komponennya di-enum. - Satu entity spasial dapat memiliki beberapa komponen, yang masing-masing memberikan label dari set label semantiknya sendiri. Pertimbangkan contoh berikut dengan beberapa set label semantik hipotetis -
XrSpatialObjectSemanticLabel, yang mungkin memiliki nilai seperti kursi, sofa, meja, dll.,XrSpatialSofaBrand, yang mungkin memiliki nilai seperti IKEA, Wayfair, dll., danXrSpatialIkeaSofa, yang mungkin memiliki nama model sofa IKEA tertentu. Dalam skenario ini, entitas sofa yang sama memiliki ketiga komponen (label dari ketiga set label semantik) di dalamnya, yang masing-masing memberikan informasi dengan perincian yang berbeda tentang entitas tersebut. - Jika ekstensi menentukan XrSpatialComponentTypeEXT baru yang menyediakan set label semantik baru yang berisi beberapa label selain label
UNCATEGORIZED, ekstensi harus mempertimbangkan untuk menentukan XrSpatialCapabilityFeatureEXT yang memungkinkan aplikasi mengaktifkan hanya subset label yang ditentukan dalam set label semantik yang sesuai dengan jenis komponen tersebut. Subkumpulan ini, yang disediakan dalam rantai konfigurasi kemampuan berikutnya, berfungsi sebagai petunjuk bagi runtime untuk mengoptimalkan pipeline pelacakan dan hanya melacak subkumpulan yang disediakan. Contoh struct fitur tersebut diberikan di bawah . - Ekstensi tidak boleh menambahkan label ke enumerasi set label semantik yang ada. Sebagai gantinya, mereka harus menentukan enumerasi baru yang berisi enumeran yang setara dengan semantik yang identik dan dengan nilai yang sama dengan yang ada di set lainnya, selain enumeran yang baru ditambahkan. Spesifikasi set label semantik yang baru ditentukan harus juga menetapkan pemetaan antara set label lama dan yang baru. Lihat contoh di bawah .
Contoh Definisi Fitur Spasial untuk Subkumpulan Label Semantik
// 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;
Contoh Ekstensi Label Semantik Spasial
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;
Pertimbangkan contoh di atas saat ekstensi menentukan enumerasi XrSpatialExamplePlaneSemanticLabelExtensionEXT untuk memperluas XrSpatialPlaneSemanticLabelEXT yang ada dengan nilai untuk merepresentasikan pintu dan jendela. Spesifikasi untuk enumerasi baru harus menyertakan teks untuk formulir berikut -
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
|====
Makro Baru
Jenis Dudukan Baru
XrSpatialBufferIdEXTXrSpatialEntityIdEXT
Jenis Objek Baru
Perintah Baru
- xrCreateSpatialContextAsyncEXT
- xrCreateSpatialContextCompleteEXT
- xrCreateSpatialDiscoverySnapshotAsyncEXT
- xrCreateSpatialDiscoverySnapshotCompleteEXT
- xrCreateSpatialEntityFromIdEXT
- xrCreateSpatialUpdateSnapshotEXT
- xrDestroySpatialContextEXT
- xrDestroySpatialEntityEXT
- xrDestroySpatialSnapshotEXT
- xrEnumerateSpatialCapabilitiesEXT
- xrEnumerateSpatialCapabilityComponentTypesEXT
- xrEnumerateSpatialCapabilityFeaturesEXT
- xrGetSpatialBufferFloatEXT
- xrGetSpatialBufferStringEXT
- xrGetSpatialBufferUint16EXT
- xrGetSpatialBufferUint32EXT
- xrGetSpatialBufferUint8EXT
- xrGetSpatialBufferVector2fEXT
- xrGetSpatialBufferVector3fEXT
- xrQuerySpatialComponentDataEXT
Struktur Baru
- XrCreateSpatialContextCompletionEXT
- XrCreateSpatialDiscoverySnapshotCompletionEXT
- XrCreateSpatialDiscoverySnapshotCompletionInfoEXT
- XrEventDataSpatialDiscoveryRecommendedEXT
- XrSpatialBounded2DDataEXT
- XrSpatialBufferEXT
- XrSpatialBufferGetInfoEXT
- XrSpatialCapabilityComponentTypesEXT
- XrSpatialCapabilityConfigurationBaseHeaderEXT
- XrSpatialComponentDataQueryConditionEXT
- XrSpatialComponentDataQueryResultEXT
- XrSpatialContextCreateInfoEXT
- XrSpatialDiscoverySnapshotCreateInfoEXT
- XrSpatialEntityFromIdCreateInfoEXT
- XrSpatialMeshDataEXT
- XrSpatialUpdateSnapshotCreateInfoEXT
Memperluas XrSpatialComponentDataQueryResultEXT :
Memperluas XrSpatialDiscoverySnapshotCreateInfoEXT , XrSpatialComponentDataQueryConditionEXT :
Enum Baru
- XrSpatialBufferTypeEXT
- XrSpatialCapabilityEXT
- XrSpatialCapabilityFeatureEXT
- XrSpatialComponentTypeEXT
- XrSpatialEntityTrackingStateEXT
Konstanta Enum Baru
XR_EXT_SPATIAL_ENTITY_EXTENSION_NAMEXR_EXT_spatial_entity_SPEC_VERSIONMemperluas XrObjectType :
XR_OBJECT_TYPE_SPATIAL_CONTEXT_EXTXR_OBJECT_TYPE_SPATIAL_ENTITY_EXTXR_OBJECT_TYPE_SPATIAL_SNAPSHOT_EXT
Memperluas 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
Memperluas 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
Masalah
Apakah satu entitas selalu berasal dari satu kemampuan saja?
- Selesai
- Jawaban: Tidak. Hal ini sepenuhnya bergantung pada runtime berdasarkan kemampuan pelacakannya sendiri dan cara yang diinginkannya untuk merepresentasikan entitas yang terdeteksi. Spesifikasi tidak menetapkan representasi entitas spasial tertentu, kecuali untuk komponen terjamin dari kemampuan tertentu untuk menetapkan ekspektasi minimum. Runtime dapat menggabungkan entitas yang terdeteksi oleh kemampuan terpisah dan merepresentasikannya sebagai satu entitas dengan komponen terjamin dari semua kemampuan yang membantu mengidentifikasinya. Contohnya, meja dapat dideteksi oleh kemampuan pelacakan bidang dan kemampuan pelacakan objek, dengan pelacakan bidang menyediakan komponen
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTpada entity dan pelacakan objek menyediakanXR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT. Runtime tertentu dapat menyediakan tabel sebagai 2 entitas terpisah, yang masing-masing memiliki serangkaian komponen yang dijamin, sementara runtime tertentu dapat menyediakan hanya 1 entitas untuk merepresentasikan tabel, dan memilikiXR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTdanXR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXTpada entitas yang sama. Yang penting untuk diperhatikan di sini adalah bahwa entity spasial tertentu dapat memiliki paling banyak satu komponen dari jenis komponen tertentu . Oleh karena itu, jika data komponen yang dihasilkan oleh berbagai kemampuan bertentangan untuk entitas tertentu, runtime harus merepresentasikannya sebagai 2 entitas terpisah.
Riwayat Versi
Revisi 1, 12-04-2024 (Nihav Jain, Google)
- Deskripsi ekstensi awal