XR_ANDROID_enumerate_system_extension_properties
Ciąg znaków nazwy
XR_ANDROID_enumerate_system_extension_properties
Typ rozszerzenia
Rozszerzenie instancji
Zarejestrowany numer wewnętrzny
725
Wersja
1
Stan ratyfikacji
Nie ratyfikowano
Zależności rozszerzeń i wersji
Data ostatniej modyfikacji
2026-02-11
Stan adresu IP
Brak znanych roszczeń dotyczących własności intelektualnej.
Twórcy
Spencer Quin, Google
Nihav Jain, Google
Kenny Vercaemer, Google
Omówienie
To rozszerzenie umożliwia aplikacjom określanie, które rozszerzenia są obsługiwane przez bieżącą konfigurację systemu. Nawet jeśli rozszerzenie jest obsługiwane przez środowisko wykonawcze, może nie być obsługiwane przez obecny sprzęt systemowy.
Struktura XrSystemExtensionPropertiesANDROID jest zdefiniowana w ten sposób:
typedef struct XrSystemExtensionPropertiesANDROID {
XrStructureType type;
void* next;
XrExtensionProperties properties;
XrBool32 isSupported;
} XrSystemExtensionPropertiesANDROID;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur.propertiesto XrExtensionProperties z nazwą rozszerzenia.isSupportedto wartość logiczna wskazująca, czy rozszerzenie jest obecnie obsługiwane przez system.
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_ANDROID_enumerate_system_extension_propertiesmusi być włączone przed użyciem XrSystemExtensionPropertiesANDROID. -
typemusi mieć wartośćXR_TYPE_SYSTEM_EXTENSION_PROPERTIES_ANDROID -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur.
Struktura XrEventDataSystemPropertiesChangedANDROID jest zdefiniowana w ten sposób:
typedef struct XrEventDataSystemPropertiesChangedANDROID {
XrStructureType type;
const void* next;
} XrEventDataSystemPropertiesChangedANDROID;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur.
Środowisko wykonawcze musi umieścić to zdarzenie w kolejce, gdy zmienią się właściwości rozszerzenia systemowego. Na przykład po podłączeniu nowych urządzeń peryferyjnych, które umożliwiają korzystanie z nowych funkcji.
Wszystkie wywołania funkcji xrEnumerateSystemExtensionPropertiesANDROID muszą zwracać te same wartości, dopóki nie zostanie umieszczone w kolejce nowe zdarzenie XrEventDataSystemPropertiesChangedANDROID.
Gdy aplikacja otrzyma to zdarzenie, powinna ponownie wywołać funkcję xrEnumerateSystemExtensionPropertiesANDROID, aby określić najnowsze właściwości rozszerzenia systemu, w razie potrzeby tworząc lub usuwając trackery powiązane z tymi rozszerzeniami.
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_ANDROID_enumerate_system_extension_propertiesmusi być włączone przed użyciem XrEventDataSystemPropertiesChangedANDROID. -
typemusi mieć wartośćXR_TYPE_EVENT_DATA_SYSTEM_PROPERTIES_CHANGED_ANDROID -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur.
Funkcja xrEnumerateSystemExtensionPropertiesANDROID jest zdefiniowana w ten sposób:
XrResult xrEnumerateSystemExtensionPropertiesANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t propertyCapacityInput,
uint32_t* propertyCountOutput,
XrSystemExtensionPropertiesANDROID* properties);
Opisy parametrów
instancejest prawidłową wartością XrInstance .systemIdto prawidłowy identyfikator sliink:XrSystemId systemu, z którego mają zostać pobrane właściwości rozszerzenia.propertyCapacityInputto pojemność tablicypropertieslub 0, aby wskazać żądanie pobrania wymaganej pojemności.propertyCountOutputto liczba żądanych właściwości rozszerzenia.propertiesto tablica struktur XrSystemExtensionPropertiesANDROID. Może to byćNULL, jeślipropertyCapacityInputwynosi 0.- Szczegółowy opis pobierania wymaganego rozmiaru
propertiesznajdziesz w sekcji Parametry rozmiaru bufora.
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_ANDROID_enumerate_system_extension_propertiesmusi być włączone przed wywołaniem funkcji xrEnumerateSystemExtensionPropertiesANDROID. -
instancemusi być prawidłowym uchwytem XrInstance. -
propertyCountOutputmusi być wskaźnikiem wartościuint32_t - Jeśli
propertyCapacityInputnie jest równe0,propertiesmusi być wskaźnikiem do tablicy strukturpropertyCapacityInputXrSystemExtensionPropertiesANDROID.
Kody zwrotne
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
Przykład
XrInstance instance; // XrInstance previously created
XrSystemId systemId; // XrSystemId from a previously created instance
PFN_xrEnumerateSystemExtensionPropertiesANDROID xrEnumerateSystemExtensionPropertiesANDROID;
// Poll events for recommended resolution changes.
XrEventDataBuffer event = {XR_TYPE_EVENT_DATA_BUFFER};
XrResult result = xrPollEvent(instance, &event);
if (result == XR_SUCCESS) {
switch (event.type) {
case XR_TYPE_EVENT_DATA_SYSTEM_PROPERTIES_CHANGED_ANDROID:
// It's possible that the system was lost and a new id will be returned
XrSystemId newSystemId;
XrSystemGetInfo getInfo = {XR_TYPE_SYSTEM_GET_INFO};
getInfo.formFactor = XR_FORM_FACTOR_HEAD_MOUNTED_DISPLAY;
if(XR_SUCCESS == xrGetSystem(instance, &getInfo, &newSystemId)) {
if(systemId != newSystemId) {
//Do things like recreate the session
systemId = newSystemId;
}
}
// Enumerate the extensions to see which ones are now supported based on hardware changes
uint32_t extensionsCount;
xrEnumerateSystemExtensionPropertiesANDROID(instance, systemId, 0, &extensionsCount, NULL);
std::vector<XrSystemExtensionPropertiesANDROID> properties(extensionsCount,
{.type = XR_TYPE_SYSTEM_EXTENSION_PROPERTIES_ANDROID});
XrResult result = xrEnumerateSystemExtensionPropertiesANDROID(
instance,
systemId,
extensionsCount,
&extensionsCount,
properties.data()
);
// Do something based on which extensions are now supported by the system
break;
}
}
PFN_xrEnumerateSystemExtensionPropertiesANDROID xrEnumerateSystemExtensionPropertiesANDROID;
XrInstance instance;
XrInstanceCreateInfo createInfo = {XR_TYPE_INSTANCE_CREATE_INFO};
// Initialize the createInfo with appropriate values for the application
CHK_XR(xrCreateInstance(&createInfo, &instance));
// Get the systemId for the system.
XrSystemId systemId;
XrSystemGetInfo getInfo = {XR_TYPE_SYSTEM_GET_INFO};
getInfo.formFactor = XR_FORM_FACTOR_HEAD_MOUNTED_DISPLAY;
CHK_XR(xrGetSystem(instance, &getInfo, &systemId));
// Enumerate the system extension properties.
uint32_t extensionsCount;
xrEnumerateSystemExtensionPropertiesANDROID(instance, systemId, 0, &extensionsCount, NULL);
std::vector<XrSystemExtensionPropertiesANDROID> properties(extensionsCount,
{.type = XR_TYPE_SYSTEM_EXTENSION_PROPERTIES_ANDROID});
XrResult result = xrEnumerateSystemExtensionPropertiesANDROID(
instance,
systemId,
extensionsCount,
&extensionsCount,
properties.data()
);
Problemy
Historia zmian
Wersja 1, 17.03.2026 (Kenny Vercaemer)
- Początkowa wersja rozszerzenia.