XR_ANDROID_enumerate_system_extension_properties
이름 문자열
XR_ANDROID_enumerate_system_extension_properties
확장 프로그램 유형
인스턴스 확장 프로그램
등록된 확장 프로그램 번호
725
버전
1
비준 상태
비준되지 않음
확장 프로그램 및 버전 종속 항목
최종 수정일
2026-02-11
IP 상태
알려진 IP 클레임이 없습니다.
도움을 주신 분들
Spencer Quin, Google
Nihav Jain, Google
Kenny Vercaemer, Google
개요
이 확장 프로그램을 사용하면 애플리케이션에서 현재 시스템 구성에서 지원되는 확장 프로그램을 확인할 수 있습니다. 확장 프로그램이 런타임에서 지원되더라도 현재 시스템 하드웨어에서 지원되지 않을 수 있습니다.
XrSystemExtensionPropertiesANDROID 구조는 다음과 같이 정의됩니다.
typedef struct XrSystemExtensionPropertiesANDROID {
XrStructureType type;
void* next;
XrExtensionProperties properties;
XrBool32 isSupported;
} XrSystemExtensionPropertiesANDROID;
회원 설명
type은 이 구조의 XrStructureType입니다.next는NULL이거나 구조 체인의 다음 구조를 가리키는 포인터입니다.properties는 확장 프로그램 이름이 있는 XrExtensionProperties입니다.isSupported는 확장 프로그램이 현재 시스템에서 지원되는지 여부를 나타내는 불리언입니다.
유효한 사용 (암시적)
- XrSystemExtensionPropertiesANDROID를 사용하기 전에
XR_ANDROID_enumerate_system_extension_properties확장 프로그램을 사용 설정해야 합니다. -
type여야 합니다.XR_TYPE_SYSTEM_EXTENSION_PROPERTIES_ANDROID -
next는NULL이거나 구조 체인의 다음 구조를 가리키는 유효한 포인터여야 합니다
XrEventDataSystemPropertiesChangedANDROID 구조는 다음과 같이 정의됩니다.
typedef struct XrEventDataSystemPropertiesChangedANDROID {
XrStructureType type;
const void* next;
} XrEventDataSystemPropertiesChangedANDROID;
회원 설명
type은 이 구조의 XrStructureType입니다.next는NULL이거나 구조 체인의 다음 구조를 가리키는 포인터입니다.
시스템 확장 프로그램 속성이 변경되면 런타임에서 이 이벤트를 대기열에 추가해야 합니다. 예를 들어 새 주변기기가 연결되어 새 기능을 사용 설정하는 경우입니다.
새 XrEventDataSystemPropertiesChangedANDROID 이벤트가 대기열에 추가될 때까지 xrEnumerateSystemExtensionPropertiesANDROID에 대한 모든 호출은 동일한 값을 반환해야 합니다.
애플리케이션이 이 이벤트를 수신하면 xrEnumerateSystemExtensionPropertiesANDROID를 다시 호출하여 최신 시스템 확장 프로그램 속성을 확인하고 필요에 따라 이러한 확장 프로그램과 연결된 트래커를 만들거나 삭제해야 합니다.
유효한 사용 (암시적)
-
XR_ANDROID_enumerate_system_extension_properties확장 프로그램을 사용하기 전에 XrEventDataSystemPropertiesChangedANDROID를 사용 설정해야 합니다. -
type여야 **합니다**.XR_TYPE_EVENT_DATA_SYSTEM_PROPERTIES_CHANGED_ANDROID -
next는NULL이거나 구조 체인의 다음 구조를 가리키는 유효한 포인터여야 합니다
xrEnumerateSystemExtensionPropertiesANDROID 함수는 다음과 같이 정의됩니다.
XrResult xrEnumerateSystemExtensionPropertiesANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t propertyCapacityInput,
uint32_t* propertyCountOutput,
XrSystemExtensionPropertiesANDROID* properties);
매개변수 설명
instance는 유효한 XrInstance입니다 .systemId는 확장 프로그램 속성을 가져올 시스템의 유효한 sliink:XrSystemId입니다.propertyCapacityInput은properties배열의 용량이거나 필요한 용량을 가져오는 요청을 나타내는 0입니다.propertyCountOutput은 요청된 확장 프로그램 속성의 수입니다.properties는 XrSystemExtensionPropertiesANDROID 구조의 배열입니다.propertyCapacityInput이 0인 경우NULL일 수 있습니다.- 필요한
properties크기를 가져오는 방법에 관한 자세한 설명은 버퍼 크기 매개변수 섹션을 참고하세요.
유효한 사용 (암시적)
-
XR_ANDROID_enumerate_system_extension_properties확장 프로그램을 호출하기 전에 xrEnumerateSystemExtensionPropertiesANDROID를 사용 설정해야 합니다. -
instance는 유효한 XrInstance 핸들이어야 합니다 -
propertyCountOutput은uint32_t값을 가리키는 포인터여야 합니다. -
propertyCapacityInput이0이 아닌 경우properties는propertyCapacityInputXrSystemExtensionPropertiesANDROID 구조의 배열을 가리키는 포인터여야 합니다.
반환 코드
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
예
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()
);
문제
버전 기록
버전 1, 2026-03-17 (Kenny Vercaemer)
- 첫 번째 확장 프로그램 버전입니다.