이름 문자열
XR_ANDROID_device_anchor_persistence
확장 프로그램 유형
인스턴스 연장
등록된 부속 번호
458
버전
1
확장 프로그램 및 버전 종속 항목
XR_EXT_uuid 및 XR_ANDROID_trackables
최종 수정일
2024-10-10
IP 상태
알려진 IP 소유권 주장이 없습니다.
도움을 주신 분들
Nihav Jain, Google
레바나 첸, Google
스펜서 퀸, Google
케니 베르카머, Google
개요
이 확장 프로그램을 사용하면 애플리케이션이 애플리케이션과 기기 세션 전반에서 현재 사용자의 현재 기기에 있는 앵커를 유지, 검색, 유지 해제할 수 있습니다.
시스템 기능 검사
XrSystemDeviceAnchorPersistencePropertiesANDROID 구조는 다음과 같이 정의됩니다.
typedef struct XrSystemDeviceAnchorPersistencePropertiesANDROID {
    XrStructureType    type;
    void*              next;
    XrBool32           supportsAnchorPersistence;
} XrSystemDeviceAnchorPersistencePropertiesANDROID;
회원 설명
- type은 이 구조의 XrStructureType입니다.
- next는- NULL또는 구조 체인의 다음 구조에 대한 포인터입니다. 핵심 OpenXR 또는 이 확장 프로그램에는 이러한 구조가 정의되어 있지 않습니다.
- supportsAnchorPersistence는 현재 시스템이 공간 앵커의 앵커 지속성을 지원하는지 나타내는- XrBool32입니다.
애플리케이션은 xrGetSystemProperties를 호출할 때 XrSystemProperties를 XrSystemDeviceAnchorPersistencePropertiesANDROID 구조로 확장하여 시스템이 공간 앵커를 유지할 수 있는지 검사 (xrCreateAnchorSpaceANDROID 참고) 할 수 있습니다. 지원되는 추적 가능한 앵커의 경우 애플리케이션은 xrEnumerateSupportedPersistenceAnchorTypesANDROID를 사용하여 지원되는 유형을 쿼리할 수 있습니다.
supportsAnchorPersistence에 XR_FALSE이 반환되면 공간 앵커에서 작동하는 기기 앵커 지속성 함수에서 XR_ERROR_FEATURE_UNSUPPORTED이 반환됩니다.
유효한 사용 (암시적)
- XrSystemDeviceAnchorPersistencePropertiesANDROID를 사용하기 전에 XR_ANDROID_device_anchor_persistence확장 프로그램을 사용 설정해야 합니다.
- type는- XR_TYPE_SYSTEM_DEVICE_ANCHOR_PERSISTENCE_PROPERTIES_ANDROID여야 합니다.
- next는- NULL이거나 구조 체인의 다음 구조에 대한 유효한 포인터여야 합니다.
xrEnumerateSupportedPersistenceAnchorTypesANDROID 함수는 다음과 같이 정의됩니다.
XrResult xrEnumerateSupportedPersistenceAnchorTypesANDROID(
    XrInstance                                  instance,
    XrSystemId                                  systemId,
    uint32_t                                    trackableTypeCapacityInput,
    uint32_t*                                   trackableTypeCountOutput,
    XrTrackableTypeANDROID*                     trackableTypes);
매개변수 설명
- session는 XrDeviceAnchorPersistenceANDROID를 만드는 XrSession입니다.
- trackableTypeCapacityInput는- trackableTypes의 용량 또는 필요한 용량을 검색하기 위한 0입니다.
- trackableTypeCountOutput는 배열의 개수에 대한 포인터이거나- trackableTypeCapacityInput가 충분하지 않은 경우 필요한 용량에 대한 포인터입니다.
- trackableTypes는 XrTrackableTypeANDROID 배열에 대한 포인터이지만- trackableTypeCapacityInput이- 0인 경우- NULL일 수 있습니다.
- 필요한 trackableTypes크기를 검색하는 방법에 관한 자세한 내용은 버퍼 크기 매개변수 섹션을 참고하세요.
애플리케이션은 xrEnumerateSupportedPersistenceAnchorTypesANDROID를 사용하여 다른 XrTrackableTypeANDROID 추적 가능한 항목에서 앵커 지속성 지원을 확인할 수 있습니다.
지정된 XrTrackableTypeANDROID가 trackableTypes 배열에서 반환되지 않으면 해당 유형의 앵커에서 작동하는 기기 앵커 지속성 함수에서 XR_ERROR_FEATURE_UNSUPPORTED이 반환됩니다.
유효한 사용 (암시적)
- xrEnumerateSupportedPersistenceAnchorTypesANDROID를 호출하기 전에 XR_ANDROID_device_anchor_persistence확장 프로그램을 사용 설정해야 합니다.
- instance는 유효한 XrInstance 핸들 이어야 합니다.
- trackableTypeCountOutput은(는)- uint32_t값에 대한 포인터여야 합니다.
- trackableTypeCapacityInput가- 0, trackableTypes이 아닌 경우- trackableTypeCapacityInputXrTrackableTypeANDROID 값 배열의 포인터여야 함
반품 코드
- XR_SUCCESS
- XR_ERROR_SYSTEM_INVALID
- XR_ERROR_VALIDATION_FAILURE
- XR_ERROR_RUNTIME_FAILURE
- XR_ERROR_HANDLE_INVALID
- XR_ERROR_INSTANCE_LOST
- XR_ERROR_SIZE_INSUFFICIENT
- XR_ERROR_FUNCTION_UNSUPPORTED
기기 앵커 지속성 핸들 만들기
XrDeviceAnchorPersistenceANDROID는 영구 앵커를 유지하고 추적하는 데 필요한 리소스를 나타내는 핸들입니다.
XR_DEFINE_HANDLE(XrDeviceAnchorPersistenceANDROID)
xrCreateDeviceAnchorPersistenceANDROID 함수는 다음과 같이 정의됩니다.
XrResult xrCreateDeviceAnchorPersistenceANDROID(
    XrSession                                   session,
    const XrDeviceAnchorPersistenceCreateInfoANDROID* createInfo,
    XrDeviceAnchorPersistenceANDROID*           outHandle);
매개변수 설명
- session는 XrDeviceAnchorPersistenceANDROID를 만드는 XrSession입니다.
- createInfo는 XrDeviceAnchorPersistenceANDROID의 매개변수를 포함하는 XrDeviceAnchorPersistenceCreateInfoANDROID입니다.
- outHandle는 생성된 XrDeviceAnchorPersistenceANDROID가 반환되는 핸들의 포인터입니다.
애플리케이션은 xrCreateDeviceAnchorPersistenceANDROID를 호출하여 XrDeviceAnchorPersistenceANDROID 핸들을 만들 수 있습니다(있음). XrDeviceAnchorPersistenceANDROID는 후속 API 호출에서 앵커를 유지하거나 유지 해제하는 데 사용할 수 있습니다. XrDeviceAnchorPersistenceANDROID 핸들은 결국 xrDestroyDeviceAnchorPersistenceANDROID 함수를 사용하여 해제해야 합니다.
유효한 사용 (암시적)
- xrCreateDeviceAnchorPersistenceANDROID를 호출하기 전에 XR_ANDROID_device_anchor_persistence확장 프로그램을 사용 설정해야 합니다.
- session는 유효한 XrSession 핸들여야 합니다.
- createInfo는 유효한 XrDeviceAnchorPersistenceCreateInfoANDROID 구조를 가리키는 포인터여야 합니다.
- outHandle는 XrDeviceAnchorPersistenceANDROID 핸들의 포인터여야 함
반품 코드
- XR_SUCCESS
- XR_SESSION_LOSS_PENDING
- XR_ERROR_FUNCTION_UNSUPPORTED
- XR_ERROR_VALIDATION_FAILURE
- XR_ERROR_RUNTIME_FAILURE
- XR_ERROR_HANDLE_INVALID
- XR_ERROR_INSTANCE_LOST
- XR_ERROR_SESSION_LOST
- XR_ERROR_OUT_OF_MEMORY
- XR_ERROR_LIMIT_REACHED
XrDeviceAnchorPersistenceCreateInfoANDROID 구조는 다음과 같이 정의됩니다.
typedef struct XrDeviceAnchorPersistenceCreateInfoANDROID {
    XrStructureType    type;
    void*              next;
} XrDeviceAnchorPersistenceCreateInfoANDROID;
회원 설명
- type은 이 구조의 XrStructureType입니다.
- next는- NULL또는 구조 체인의 다음 구조에 대한 포인터입니다. 핵심 OpenXR 또는 이 확장 프로그램에는 이러한 구조가 정의되어 있지 않습니다.
XrDeviceAnchorPersistenceCreateInfoANDROID 구조는 xrCreateDeviceAnchorPersistenceANDROID에 전달될 때 XrDeviceAnchorPersistenceANDROID의 생성 옵션을 제공합니다.
유효한 사용 (암시적)
- XrDeviceAnchorPersistenceCreateInfoANDROID를 사용하기 전에 XR_ANDROID_device_anchor_persistence확장 프로그램을 사용 설정해야 합니다.
- type는- XR_TYPE_DEVICE_ANCHOR_PERSISTENCE_CREATE_INFO_ANDROID여야 합니다.
- next는- NULL이거나 구조 체인의 다음 구조에 대한 유효한 포인터여야 합니다.
xrDestroyDeviceAnchorPersistenceANDROID 함수는 다음과 같이 정의됩니다.
XrResult xrDestroyDeviceAnchorPersistenceANDROID(
    XrDeviceAnchorPersistenceANDROID            handle);
매개변수 설명
- handle는 이전에- xrCreateDeviceAnchorPersistenceANDROID에서 만든 XrDeviceAnchorPersistenceANDROID 핸들입니다.
xrDestroyDeviceAnchorPersistenceANDROID 함수는 기기 앵커 지속성 핸들을 소멸합니다.
유효한 사용 (암시적)
- xrDestroyDeviceAnchorPersistenceANDROID를 호출하기 전에 XR_ANDROID_device_anchor_persistence확장 프로그램을 사용 설정해야 합니다.
- handle는 유효한 XrDeviceAnchorPersistenceANDROID 핸들여야 합니다.
스레드 안전
- handle및 모든 하위 핸들에 대한 액세스는 외부에서 동기화해야 함
반품 코드
- XR_SUCCESS
- XR_ERROR_FUNCTION_UNSUPPORTED
- XR_ERROR_HANDLE_INVALID
앵커 유지
xrPersistAnchorANDROID 함수는 다음과 같이 정의됩니다.
XrResult xrPersistAnchorANDROID(
    XrDeviceAnchorPersistenceANDROID            handle,
    const XrPersistedAnchorSpaceInfoANDROID*    persistedInfo,
    XrUuidEXT*                                  anchorIdOutput);
매개변수 설명
- handle는 XrDeviceAnchorPersistenceANDROID입니다.
- persistedInfo는 앵커 지속성의 매개변수를 포함하는 XrPersistedAnchorSpaceInfoANDROID입니다.
- anchorIdOutput는 저장된 앵커의 UUID가 반환되는 XrUuidEXT의 포인터입니다.
애플리케이션은 xrPersistAnchorANDROID를 호출하여 앵커가 유지되도록 요청할 수 있습니다. 애플리케이션은 성공 반환 값이 앵커가 즉시 유지된다는 것을 의미한다고 가정해서는 안 됩니다. 애플리케이션은 반환된 앵커 XrUuidEXT를 사용하여 앵커의 지속 상태를 확인하기 위해 xrGetAnchorPersistStateANDROID를 사용해야 합니다. 애플리케이션은 xrUnpersistAnchorANDROID를 사용하여 앵커의 지속성을 해제할 수 있습니다.
- 호출 시 앵커가 추적되지 않으면 XR_ERROR_ANCHOR_NOT_TRACKING_ANDROID이 반환됩니다.
- 저장된 데이터가 준비되지 않은 경우 XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROID이 반환됩니다.
- 앵커가 지속성을 위해 대기열에 추가되면 XR_SUCCESS이 반환됩니다.
유효한 사용 (암시적)
- xrPersistAnchorANDROID를 호출하기 전에 XR_ANDROID_device_anchor_persistence확장 프로그램을 사용 설정해야 합니다.
- handle는 유효한 XrDeviceAnchorPersistenceANDROID 핸들여야 합니다.
- persistedInfo는 유효한 XrPersistedAnchorSpaceInfoANDROID 구조체에 대한 포인터여야 합니다.
- anchorIdOutput는 XrUuidEXT 구조를 가리키는 포인터여야 함
반품 코드
- XR_SUCCESS
- XR_SESSION_LOSS_PENDING
- XR_ERROR_ANCHOR_NOT_TRACKING_ANDROID
- XR_ERROR_FUNCTION_UNSUPPORTED
- XR_ERROR_VALIDATION_FAILURE
- XR_ERROR_RUNTIME_FAILURE
- XR_ERROR_HANDLE_INVALID
- XR_ERROR_INSTANCE_LOST
- XR_ERROR_SESSION_LOST
- XR_ERROR_OUT_OF_MEMORY
- XR_ERROR_LIMIT_REACHED
XrPersistedAnchorSpaceInfoANDROID 구조는 다음과 같이 정의됩니다.
typedef struct XrPersistedAnchorSpaceInfoANDROID {
    XrStructureType    type;
    void*              next;
    XrSpace            anchor;
} XrPersistedAnchorSpaceInfoANDROID;
회원 설명
- type은 이 구조의 XrStructureType입니다.
- next는- NULL또는 구조 체인의 다음 구조에 대한 포인터입니다. 핵심 OpenXR 또는 이 확장 프로그램에는 이러한 구조가 정의되어 있지 않습니다.
- anchor는 이전에 xrCreateAnchorSpaceANDROID로 생성하여 유지하는 앵커 XrSpace입니다.
유효한 사용 (암시적)
- XrPersistedAnchorSpaceInfoANDROID를 사용하기 전에 XR_ANDROID_device_anchor_persistence확장 프로그램을 사용 설정해야 합니다.
- type는- XR_TYPE_PERSISTED_ANCHOR_SPACE_INFO_ANDROID여야 합니다.
- next는- NULL이거나 구조 체인의 다음 구조에 대한 유효한 포인터여야 합니다.
- anchor는 유효한 XrSpace 핸들여야 합니다.
xrGetAnchorPersistStateANDROID 함수는 다음과 같이 정의됩니다.
XrResult xrGetAnchorPersistStateANDROID(
    XrDeviceAnchorPersistenceANDROID            handle,
    const XrUuidEXT*                            anchorId,
    XrAnchorPersistStateANDROID*                persistState);
매개변수 설명
- handle는 XrDeviceAnchorPersistenceANDROID입니다.
- anchorId는 앵커의 XrUuidEXT입니다.
- persistState는 앵커의 상태가 반환되는 XrAnchorPersistStateANDROID에 대한 포인터입니다.
- 앵커 XrUuidEXT를 찾을 수 없는 경우 XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROID이 반환됩니다.
- anchorId의 영구 저장 데이터가 준비되지 않은 경우- XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROID이 반환됩니다.
유효한 사용 (암시적)
- xrGetAnchorPersistStateANDROID를 호출하기 전에 XR_ANDROID_device_anchor_persistence확장 프로그램을 사용 설정해야 합니다.
- handle는 유효한 XrDeviceAnchorPersistenceANDROID 핸들여야 합니다.
- anchorId는 유효한 XrUuidEXT 구조를 가리키는 포인터여야 합니다.
- persistState는 XrAnchorPersistStateANDROID 값을 가리키는 포인터여야 합니다.
반품 코드
- XR_SUCCESS
- XR_SESSION_LOSS_PENDING
- XR_ERROR_FUNCTION_UNSUPPORTED
- XR_ERROR_VALIDATION_FAILURE
- XR_ERROR_RUNTIME_FAILURE
- XR_ERROR_HANDLE_INVALID
- XR_ERROR_INSTANCE_LOST
- XR_ERROR_SESSION_LOST
- XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROID
XrAnchorPersistStateANDROID enum은 다음과 같이 정의됩니다.
typedef enum XrAnchorPersistStateANDROID {
    XR_ANCHOR_PERSIST_STATE_PERSIST_NOT_REQUESTED_ANDROID = 0,
    XR_ANCHOR_PERSIST_STATE_PERSIST_PENDING_ANDROID = 1,
    XR_ANCHOR_PERSIST_STATE_PERSISTED_ANDROID = 2
} XrAnchorPersistStateANDROID;
| enum | 설명 | 
| 
 | 앱에서 고정되도록 요청된 앵커가 없습니다. | 
| 
 | 고정된 상태로 유지하도록 요청되었지만 아직 유지되지 않았습니다. | 
| 
 | 런타임에서 앵커를 성공적으로 유지했습니다. | 
영구 저장된 데이터에서 앵커 만들기
xrCreatePersistedAnchorSpaceANDROID 함수는 다음과 같이 정의됩니다.
XrResult xrCreatePersistedAnchorSpaceANDROID(
    XrDeviceAnchorPersistenceANDROID            handle,
    const XrPersistedAnchorSpaceCreateInfoANDROID* createInfo,
    XrSpace*                                    anchorOutput);
매개변수 설명
- handle는 XrDeviceAnchorPersistenceANDROID입니다.
- createInfo는 앵커 생성의 매개변수를 포함하는 XrPersistedAnchorSpaceCreateInfoANDROID입니다.
- anchorOutput는 새 앵커 공간이 반환되는 XrSpace에 대한 포인터입니다.
애플리케이션은 동일한 XrUuidEXT를 사용하여 xrCreatePersistedAnchorSpaceANDROID를 호출하여 이전에 저장된 앵커에서 XrSpace 앵커를 만들 수 있습니다. 이는 XR_ANDROID_trackables에 정의된 앵커를 만드는 또 다른 방법입니다.
- 앵커 XrUuidEXT를 찾을 수 없는 경우 XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROID이 반환됩니다.
유효한 사용 (암시적)
- xrCreatePersistedAnchorSpaceANDROID를 호출하기 전에 XR_ANDROID_device_anchor_persistence확장 프로그램을 사용 설정해야 합니다.
- handle는 유효한 XrDeviceAnchorPersistenceANDROID 핸들여야 합니다.
- createInfo는 유효한 XrPersistedAnchorSpaceCreateInfoANDROID 구조체에 대한 포인터여야 합니다.
- anchorOutput는 XrSpace 핸들의 포인터여야 합니다.
반품 코드
- XR_SUCCESS
- XR_SESSION_LOSS_PENDING
- XR_ERROR_FUNCTION_UNSUPPORTED
- XR_ERROR_VALIDATION_FAILURE
- XR_ERROR_RUNTIME_FAILURE
- XR_ERROR_HANDLE_INVALID
- XR_ERROR_INSTANCE_LOST
- XR_ERROR_SESSION_LOST
- XR_ERROR_OUT_OF_MEMORY
- XR_ERROR_LIMIT_REACHED
- XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROID
- XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROID
XrPersistedAnchorSpaceCreateInfoANDROID 구조는 다음과 같이 정의됩니다.
typedef struct XrPersistedAnchorSpaceCreateInfoANDROID {
    XrStructureType    type;
    void*              next;
    XrUuidEXT          anchorId;
} XrPersistedAnchorSpaceCreateInfoANDROID;
회원 설명
- type은 이 구조의 XrStructureType입니다.
- next는- NULL또는 구조 체인의 다음 구조에 대한 포인터입니다. 핵심 OpenXR 또는 이 확장 프로그램에는 이러한 구조가 정의되어 있지 않습니다.
- anchorId는 앵커 XrSpace를 만드는 데 사용할 영구 앵커의 XrUuidEXT입니다.
XrPersistedAnchorSpaceCreateInfoANDROID 구조는 xrCreateDeviceAnchorPersistenceANDROID에 전달될 때 앵커의 생성 옵션을 제공합니다.
유효한 사용 (암시적)
- XrPersistedAnchorSpaceCreateInfoANDROID를 사용하기 전에 XR_ANDROID_device_anchor_persistence확장 프로그램을 사용 설정해야 합니다.
- type는- XR_TYPE_PERSISTED_ANCHOR_SPACE_CREATE_INFO_ANDROID여야 합니다.
- next는- NULL이거나 구조 체인의 다음 구조에 대한 유효한 포인터여야 합니다.
유지된 앵커 열거
xrEnumeratePersistedAnchorsANDROID 함수는 다음과 같이 정의됩니다.
XrResult xrEnumeratePersistedAnchorsANDROID(
    XrDeviceAnchorPersistenceANDROID            handle,
    uint32_t                                    anchorIdsCapacityInput,
    uint32_t*                                   anchorIdsCountOutput,
    XrUuidEXT*                                  anchorIds);
매개변수 설명
- handle는 XrDeviceAnchorPersistenceANDROID입니다.
- anchorIdsCapacityInput는- anchorIds배열의 용량 또는 0으로, 필요한 용량을 검색하라는 요청을 나타냅니다.
- anchorIdsCountOutput는 작성된- anchorIds개수의 포인터이거나- anchorIdsCapacityInput가 충분하지 않은 경우 필요한 용량의 포인터입니다.
- anchorIds는 XrUuidEXT 구조 배열에 대한 포인터입니다.- anchorIdsCapacityInput이 0인 경우- NULL일 수 있습니다.
- 필요한 anchorIds크기를 검색하는 방법에 관한 자세한 내용은 버퍼 크기 매개변수 섹션을 참고하세요.
애플리케이션은 xrEnumeratePersistedAnchorsANDROID를 호출하여 현재 유지되는 모든 앵커를 열거할 수 있습니다. anchorIds는 배열의 용량까지 유지되는 앵커의 UUID를 보유합니다. 용량이 충분하지 않으면 애플리케이션은 어떤 앵커가 반환되는지 보장할 수 없습니다.
유효한 사용 (암시적)
- xrEnumeratePersistedAnchorsANDROID를 호출하기 전에 XR_ANDROID_device_anchor_persistence확장 프로그램을 사용 설정해야 합니다.
- handle는 유효한 XrDeviceAnchorPersistenceANDROID 핸들여야 합니다.
- anchorIdsCountOutput은(는)- uint32_t값에 대한 포인터여야 합니다.
- anchorIdsCapacityInput가- 0, anchorIds가 아닌 경우- anchorIdsCapacityInputXrUuidEXT 구조 배열의 포인터여야 함
반품 코드
- XR_SUCCESS
- XR_SESSION_LOSS_PENDING
- XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROID
- XR_ERROR_FUNCTION_UNSUPPORTED
- XR_ERROR_VALIDATION_FAILURE
- XR_ERROR_RUNTIME_FAILURE
- XR_ERROR_HANDLE_INVALID
- XR_ERROR_INSTANCE_LOST
- XR_ERROR_SESSION_LOST
- XR_ERROR_SIZE_INSUFFICIENT
영구 앵커의 지속성 해제
xrUnpersistAnchorANDROID 함수는 다음과 같이 정의됩니다.
XrResult xrUnpersistAnchorANDROID(
    XrDeviceAnchorPersistenceANDROID            handle,
    const XrUuidEXT*                            anchorId);
매개변수 설명
- handle는 XrDeviceAnchorPersistenceANDROID입니다.
- anchorId는 유지하지 않을 앵커의 XrUuidEXT입니다.
애플리케이션은 xrUnpersistAnchorANDROID를 호출하고 유지되지 않도록 할 앵커의 앵커 XrUuidEXT를 전달하여 유지되는 앵커를 유지 해제할 수 있습니다.
- 영구 저장된 데이터가 준비되지 않은 경우 XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROID이 반환됩니다.
- 앵커 XrUuidEXT를 찾을 수 없는 경우 XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROID이 반환됩니다.
유효한 사용 (암시적)
- xrUnpersistAnchorANDROID를 호출하기 전에 XR_ANDROID_device_anchor_persistence확장 프로그램을 사용 설정해야 합니다.
- handle는 유효한 XrDeviceAnchorPersistenceANDROID 핸들여야 합니다.
- anchorId는 유효한 XrUuidEXT 구조를 가리키는 포인터여야 합니다.
반품 코드
- XR_SUCCESS
- XR_SESSION_LOSS_PENDING
- XR_ERROR_FUNCTION_UNSUPPORTED
- XR_ERROR_VALIDATION_FAILURE
- XR_ERROR_RUNTIME_FAILURE
- XR_ERROR_HANDLE_INVALID
- XR_ERROR_INSTANCE_LOST
- XR_ERROR_SESSION_LOST
- XR_ERROR_OUT_OF_MEMORY
- XR_ERROR_LIMIT_REACHED
- XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROID
- XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROID
앵커 지속성 코드 예시
다음 코드 예는 시스템 기능을 검사하고, 앵커를 유지, 열거, 유지 해제하는 방법과 유지된 앵커 XrUuidEXT에서 앵커를 만드는 방법을 보여줍니다.
XrSession session; // previously initialized
XrSpace anchor; // previously initialized
// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrEnumerateSupportedPersistenceAnchorTypesANDROID xrEnumerateSupportedPersistenceAnchorTypesANDROID; // previously initialized
PFN_xrCreateDeviceAnchorPersistenceANDROID xrCreateDeviceAnchorPersistenceANDROID; // previously initialized
PFN_xrDestroyDeviceAnchorPersistenceANDROID xrDestroyDeviceAnchorPersistenceANDROID; // previously initialized
PFN_xrPersistAnchorANDROID xrPersistAnchorANDROID; // previously initialized
PFN_xrGetAnchorPersistStateANDROID xrGetAnchorPersistStateANDROID; // previously initialized
PFN_xrCreatePersistedAnchorSpaceANDROID xrCreatePersistedAnchorSpaceANDROID; // previously initialized
PFN_xrEnumeratePersistedAnchorsANDROID xrEnumeratePersistedAnchorsANDROID; // previously initialized
PFN_xrUnpersistAnchorANDROID xrUnpersistAnchorANDROID; // previously initialized
// Create a device anchor persistence handle
XrDeviceAnchorPersistenceCreateInfoANDROID persistenceHandleCreateInfo;
persistenceHandleCreateInfo.type = XR_TYPE_DEVICE_ANCHOR_PERSISTENCE_CREATE_INFO_ANDROID;
persistenceHandleCreateInfo.next = nullptr;
XrDeviceAnchorPersistenceANDROID persistenceHandle;
CHK_XR(xrCreateDeviceAnchorPersistenceANDROID(session, &persistenceHandleCreateInfo, &persistenceHandle));
/// Persist an anchor
XrPersistedAnchorSpaceInfo anchorSpaceInfo;
anchorSpaceInfo.type = XR_TYPE_PERSISTED_ANCHOR_SPACE_INFO_ANDROID;
anchorSpaceInfo.next = nullptr;
anchorSpaceInfo.anchor = anchor;
XrUuidEXT anchorId;
do {
  XrResult result = xrPersistAnchorANDROID(
    persistenceHandle, &anchorSpaceInfo, &anchorId);
} while (result == XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROID ||
         result == XR_ERROR_ANCHOR_NOT_TRACKING_ANDROID);
if (result != XR_SUCCESS) {
  // Handle errors
}
// ... Update loop ...
// Poll for anchor persist state to confirm if it was successfully persisted
XrAnchorPersistStateANDROID persistState;
CHK_XR(xrGetAnchorPersistStateANDROID(persistenceHandle, &anchorId, &persistState));
if (persistState == XR_ANCHOR_PERSIST_STATE_PERSISTED_ANDROID)  {
  // The anchor was persisted successfully
}
// Enumerate all persisted anchors
uint32_t anchorCountOutput = 0;
std::vector<XrUuidEXT> allAnchors;
CHK_XR(xrEnumeratePersistedAnchorsANDROID(
  persistenceHandle,
  anchorCountOutput,
  &anchorCountOutput,
  nullptr
));
allAnchors.resize(anchorCountOutput, XR_NULL_HANDLE);
// Fetch the actual anchors in an appropriately resized array.
CHK_XR(xrEnumeratePersistedAnchorsANDROID(
  persistenceHandle,
  anchorCountOutput,
  &anchorCountOutput,
  allAnchors.data()
));
// Creating an anchor from a previously persisted anchor using its UUID
XrTime updateTime; // Time used for the current frame's simulation update.
XrUuidEXT anchorId = allAnchors[0];
XrPersistedAnchorSpaceCreateInfo createInfo;
createInfo.type = XR_TYPE_PERSISTED_ANCHOR_CREATE_INFO_ANDROID;
createInfo.next = nullptr;
createInfo.anchorId = anchorId;
XrSpace anchorSpace = XR_NULL_HANDLE;
CHK_XR(xrCreatePersistedAnchorSpaceANDROID(
  persistenceHandle,
  &createInfo,
  &anchorSpace
));
// The anchor was found and retrieved from the local device successfully.
XrSpaceLocation anchorLocation = { XR_TYPE_SPACE_LOCATION };
CHK_XR(xrLocateSpace(anchorSpace, appSpace, updateTime, &anchorLocation));
XrPosef pose = anchorLocation.pose;
// Unpersist the anchor
do {
  XrResult result = xrUnpersistAnchorANDROID(persistenceHandle, &anchorId);
} while (result == XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROID);
if (result != XR_SUCCESS) {
  // Handle errors
}
// Once app is done with all persistence related tasks
CHK_XR(xrDestroySpace(anchorSpace));
CHK_XR(xrDestroyDeviceAnchorPersistenceANDROID(persistenceHandle));
새로운 객체 유형
새로운 enum 상수
XrObjectType 열거형은 다음으로 확장됩니다.
- XR_OBJECT_TYPE_DEVICE_ANCHOR_PERSISTENCE_ANDROID
XrResult 열거형이 다음과 같이 확장되었습니다.
- XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROID
- XR_ERROR_ANCHOR_ALREADY_PERSISTED_ANDROID
- XR_ERROR_ANCHOR_NOT_TRACKING_ANDROID
- XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROID
XrStructureType 열거형이 다음과 같이 확장되었습니다.
- XR_TYPE_PERSISTED_ANCHOR_ANDROID
- XR_TYPE_PERSISTED_ANCHOR_SPACE_CREATE_INFO_ANDROID
- XR_TYPE_PERSISTED_ANCHOR_SPACE_INFO_ANDROID
- XR_TYPE_DEVICE_ANCHOR_PERSISTENCE_CREATE_INFO_ANDROID
새로운 enum
새로운 구조
- XrDeviceAnchorPersistenceCreateInfoANDROID
- XrPersistedAnchorSpaceCreateInfoANDROID
- XrPersistedAnchorSpaceInfoANDROID
- XrSystemDeviceAnchorPersistencePropertiesANDROID
새로운 함수
- xrEnumerateSupportedPersistenceAnchorTypesANDROID
- xrCreateDeviceAnchorPersistenceANDROID
- xrDestroyDeviceAnchorPersistenceANDROID
- xrPersistAnchorANDROID
- xrGetAnchorPersistStateANDROID
- xrCreatePersistedAnchorSpaceANDROID
- xrEnumeratePersistedAnchorsANDROID
- xrUnpersistAnchorANDROID
문제
버전 기록
- 버전 1, 2024년 10월 10일 (케니 베르카머)
- 초기 확장 프로그램 설명
 
OpenXR™ 및 OpenXR 로고는 Khronos Group Inc. 소유의 상표이며 중국, 유럽연합, 일본, 영국에서 상표로 등록되어 있습니다.
