สตริงชื่อ
XR_ANDROID_device_anchor_persistence
ประเภทชิ้นงาน
การขยายเวลาอินสแตนซ์
หมายเลขต่อที่จดทะเบียน
458
การแก้ไข
1
การพึ่งพาส่วนขยายและเวอร์ชัน
XR_EXT_uuid
และ XR_ANDROID_trackables
วันที่แก้ไขล่าสุด
2024-10-10
สถานะ IP
ไม่มีการอ้างสิทธิ์ IP ที่รู้จัก
ผู้เขียน
Nihav Jain จาก Google
Levana Chen จาก Google
Spencer Quin จาก Google
Kenny Vercaemer จาก Google
ภาพรวม
ส่วนขยายนี้ช่วยให้แอปพลิเคชันเก็บรักษา เรียกข้อมูล และยกเลิกการเก็บรักษาจุดยึดในอุปกรณ์ปัจจุบันสําหรับผู้ใช้ปัจจุบันในแอปพลิเคชันและเซสชันอุปกรณ์ต่างๆ ได้
ตรวจสอบความสามารถของระบบ
โครงสร้าง XrSystemDeviceAnchorPersistencePropertiesANDROID ได้รับการกําหนดดังนี้
typedef struct XrSystemDeviceAnchorPersistencePropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsAnchorPersistence;
} XrSystemDeviceAnchorPersistencePropertiesANDROID;
คำอธิบายสมาชิก
type
คือ XrStructureType ของโครงสร้างนี้next
คือNULL
หรือพอยน์เตอร์ไปยังโครงสร้างถัดไปในเชนโครงสร้าง ไม่มีการกำหนดโครงสร้างดังกล่าวใน OpenXR หลักหรือส่วนขยายนี้supportsAnchorPersistence
คือXrBool32
ซึ่งระบุว่าระบบปัจจุบันรองรับการคงอยู่ของหมุดสำหรับหมุดเชิงพื้นที่หรือไม่
แอปพลิเคชันสามารถตรวจสอบว่าระบบจัดเก็บข้อมูลหมุดยึดเชิงพื้นที่ได้หรือไม่ (ดู xrCreateAnchorSpaceANDROID) โดยการขยาย XrSystemProperties ด้วยโครงสร้าง XrSystemDeviceAnchorPersistencePropertiesANDROID เมื่อเรียกใช้ xrGetSystemProperties สําหรับหมุดติดตามที่รองรับ แอปพลิเคชันสามารถใช้ xrEnumerateSupportedPersistenceAnchorTypesANDROID เพื่อค้นหาประเภทที่รองรับ
หากระบบแสดงผล XR_FALSE
สำหรับ supportsAnchorPersistence
ระบบจะแสดงผล XR_ERROR_FEATURE_UNSUPPORTED
จากฟังก์ชันการคงอยู่ของหมุดอุปกรณ์ที่ทำงานกับหมุดเชิงพื้นที่
การใช้งานที่ถูกต้อง (โดยนัย)
- คุณต้องเปิดใช้ส่วนขยาย
XR_ANDROID_device_anchor_persistence
ก่อนใช้ XrSystemDeviceAnchorPersistencePropertiesANDROID 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
คือ XrSession ที่สร้าง XrDeviceAnchorPersistenceANDROIDtrackableTypeCapacityInput
คือความจุของtrackableTypes
หรือ 0 เพื่อดึงข้อมูลความจุที่จําเป็นtrackableTypeCountOutput
คือพอยน์เตอร์ไปยังจํานวนอาร์เรย์ หรือพอยน์เตอร์ไปยังความจุที่จําเป็นในกรณีที่trackableTypeCapacityInput
ไม่เพียงพอtrackableTypes
เป็นพอยน์เตอร์ไปยังอาร์เรย์ของ XrTrackableTypeANDROID แต่สามารถเป็นNULL
ได้หากtrackableTypeCapacityInput
เป็น0
- ดูรายละเอียดเกี่ยวกับการดึงข้อมูล
trackableTypes
ขนาดที่ต้องการได้ที่ส่วนพารามิเตอร์ขนาดบัฟเฟอร์
แอปพลิเคชันสามารถใช้ xrEnumerateSupportedPersistenceAnchorTypesANDROID เพื่อตรวจสอบการรองรับการคงอยู่ของหมุดในองค์ประกอบที่ติดตามได้อื่นๆ ของ XrTrackableTypeANDROID
หากXrTrackableTypeANDROID หนึ่งๆ ไม่แสดงในอาร์เรย์ trackableTypes
ระบบจะแสดง XR_ERROR_FEATURE_UNSUPPORTED
จากฟังก์ชันการคงที่ของอุปกรณ์แองเคอร์ที่ทำงานกับแองเคอร์ประเภทนั้น
การใช้งานที่ถูกต้อง (โดยนัย)
- คุณต้องเปิดใช้ส่วนขยาย
XR_ANDROID_device_anchor_persistence
ก่อนเรียกใช้ xrEnumerateSupportedPersistenceAnchorTypesANDROID instance
ต้องเป็นตัวแฮนเดิล XrInstance ที่ถูกต้องtrackableTypeCountOutput
ต้องเป็นพอยน์เตอร์ไปยังค่าuint32_t
- หาก
trackableTypeCapacityInput
ไม่ใช่0, trackableTypes
ต้องเป็นพอยน์เตอร์ไปยังอาร์เรย์ของค่าtrackableTypeCapacityInput
XrTrackableTypeANDROID
รหัสการคืนสินค้า
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
คือ XrSession ที่สร้าง XrDeviceAnchorPersistenceANDROIDcreateInfo
คือ XrDeviceAnchorPersistenceCreateInfoANDROID ที่มีพารามิเตอร์สําหรับ XrDeviceAnchorPersistenceANDROIDoutHandle
คือพอยน์เตอร์ไปยังแฮนเดิลที่แสดงXrDeviceAnchorPersistenceANDROID ที่สร้างขึ้น
แอปพลิเคชันสามารถสร้างตัวแฮนเดิล XrDeviceAnchorPersistenceANDROID ได้โดยเรียกใช้ xrCreateDeviceAnchorPersistenceANDROID XrDeviceAnchorPersistenceANDROID สามารถใช้ในคำเรียก API ถัดไปเพื่อเก็บหรือยกเลิกการเก็บรักษาหมุด ต้องยกเลิกการจองหน่วยความจำของตัวแฮนเดิล XrDeviceAnchorPersistenceANDROID โดยใช้ฟังก์ชัน xrDestroyDeviceAnchorPersistenceANDROID ในที่สุด
การใช้งานที่ถูกต้อง (โดยนัย)
- คุณต้องเปิดใช้ส่วนขยาย
XR_ANDROID_device_anchor_persistence
ก่อนเรียกใช้ xrCreateDeviceAnchorPersistenceANDROID 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 มีตัวเลือกการสร้างสำหรับ XrDeviceAnchorPersistenceANDROID เมื่อส่งไปยัง xrCreateDeviceAnchorPersistenceANDROID
การใช้งานที่ถูกต้อง (โดยนัย)
- คุณต้องเปิดใช้ส่วนขยาย
XR_ANDROID_device_anchor_persistence
ก่อนจึงจะใช้ XrDeviceAnchorPersistenceCreateInfoANDROID ได้ type
ต้องเป็นXR_TYPE_DEVICE_ANCHOR_PERSISTENCE_CREATE_INFO_ANDROID
next
ต้องเป็นNULL
หรือพอยน์เตอร์ที่ถูกต้องไปยังโครงสร้างถัดไปในเชนโครงสร้าง
ฟังก์ชัน xrDestroyDeviceAnchorPersistenceANDROID มีคำจำกัดความดังนี้
XrResult xrDestroyDeviceAnchorPersistenceANDROID(
XrDeviceAnchorPersistenceANDROID handle);
คําอธิบายพารามิเตอร์
handle
เป็นตัวแฮนเดิล XrDeviceAnchorPersistenceANDROID ที่xrCreateDeviceAnchorPersistenceANDROID
สร้างขึ้นก่อนหน้านี้
ฟังก์ชัน xrDestroyDeviceAnchorPersistenceANDROID จะทำลายตัวแฮนเดิลการคงข้อมูลของอุปกรณ์แองเคอร์
การใช้งานที่ถูกต้อง (โดยนัย)
- คุณต้องเปิดใช้ส่วนขยาย
XR_ANDROID_device_anchor_persistence
ก่อนเรียกใช้ xrDestroyDeviceAnchorPersistenceANDROID handle
ต้องเป็นแฮนเดิล XrDeviceAnchorPersistenceANDROID ที่ถูกต้อง
ความปลอดภัยของชุดข้อความ
- การเข้าถึง
handle
และตัวแฮนเดิลย่อยต้องมีการซิงค์จากภายนอก
รหัสการคืนสินค้า
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_HANDLE_INVALID
เก็บ Anchor ไว้
ฟังก์ชัน xrPersistAnchorANDROID มีคำจำกัดความดังนี้
XrResult xrPersistAnchorANDROID(
XrDeviceAnchorPersistenceANDROID handle,
const XrPersistedAnchorSpaceInfoANDROID* persistedInfo,
XrUuidEXT* anchorIdOutput);
คําอธิบายพารามิเตอร์
handle
คือ XrDeviceAnchorPersistenceANDROIDpersistedInfo
คือ XrPersistedAnchorSpaceInfoANDROID ที่มีพารามิเตอร์สำหรับการจัดเก็บข้อมูลหมุดanchorIdOutput
คือพอยน์เตอร์ไปยัง XrUuidEXT ซึ่งจะแสดง UUID ของแฮนเดิลที่เก็บไว้
แอปพลิเคชันสามารถขอให้ระบบเก็บหมุดไว้โดยเรียกใช้ xrPersistAnchorANDROID แอปพลิเคชันต้องไม่ถือว่าค่าที่แสดงผลเป็น "สำเร็จ" หมายความว่าระบบเก็บข้อมูล Anchor ไว้ทันที แอปพลิเคชันควรใช้ xrGetAnchorPersistStateANDROID เพื่อตรวจสอบสถานะการคงอยู่ของแอนคอร์โดยใช้แอนคอร์ที่แสดงผล XrUuidEXT แอปพลิเคชันสามารถใช้ xrUnpersistAnchorANDROID เพื่อยกเลิกการเก็บรักษา Anchor
- ระบบจะแสดงผล
XR_ERROR_ANCHOR_NOT_TRACKING_ANDROID
หากไม่มีการติดตามหมุด ณ เวลาที่มีการเรียกใช้ - ระบบจะแสดง
XR_SUCCESS
เมื่อระบบจัดคิวหมุดเพื่อเก็บรักษาแล้ว
การใช้งานที่ถูกต้อง (โดยนัย)
- คุณต้องเปิดใช้ส่วนขยาย
XR_ANDROID_device_anchor_persistence
ก่อนเรียกใช้ xrPersistAnchorANDROID 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
คือ XrSpace ที่ใช้ยึดตำแหน่งซึ่งสร้างขึ้นก่อนหน้านี้โดย xrCreateAnchorSpaceANDROID
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_device_anchor_persistence
ก่อนจึงจะใช้ XrPersistedAnchorSpaceInfoANDROID ได้ type
ต้องเป็นXR_TYPE_PERSISTED_ANCHOR_SPACE_INFO_ANDROID
next
ต้องเป็นNULL
หรือพอยน์เตอร์ที่ถูกต้องไปยังโครงสร้างถัดไปในเชนโครงสร้างanchor
ต้องเป็นแฮนเดิล XrSpace ที่ถูกต้อง
ฟังก์ชัน xrGetAnchorPersistStateANDROID มีคำจำกัดความดังนี้
XrResult xrGetAnchorPersistStateANDROID(
XrDeviceAnchorPersistenceANDROID handle,
const XrUuidEXT* anchorId,
XrAnchorPersistStateANDROID* persistState);
คําอธิบายพารามิเตอร์
handle
คือ XrDeviceAnchorPersistenceANDROIDanchorId
คือ XrUuidEXT ของหมุดpersistState
เป็นพอยน์เตอร์ไปยัง XrAnchorPersistStateANDROID ซึ่งจะแสดงสถานะของหมุด- ระบบจะแสดงผล
XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROID
หากไม่พบXrUuidEXT - ระบบจะแสดง
XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROID
หากข้อมูลanchorId
ที่เก็บถาวรยังไม่พร้อม
การใช้งานที่ถูกต้อง (โดยนัย)
- คุณต้องเปิดใช้ส่วนขยาย
XR_ANDROID_device_anchor_persistence
ก่อนเรียกใช้ xrGetAnchorPersistStateANDROID 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
มีคำจำกัดความดังนี้
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 |
คำอธิบาย |
|
แอปไม่ได้ขอให้เก็บหมุดไว้ |
|
มีคำขอเก็บรักษาหมุด แต่ยังไม่ได้เก็บรักษา |
|
รันไทม์เก็บข้อมูล Anchor ไว้เรียบร้อยแล้ว |
สร้างหมุดจากข้อมูลที่เก็บถาวร
ฟังก์ชัน xrCreatePersistedAnchorSpaceANDROID มีคำจำกัดความดังนี้
XrResult xrCreatePersistedAnchorSpaceANDROID(
XrDeviceAnchorPersistenceANDROID handle,
const XrPersistedAnchorSpaceCreateInfoANDROID* createInfo,
XrSpace* anchorOutput);
คําอธิบายพารามิเตอร์
handle
คือ XrDeviceAnchorPersistenceANDROIDcreateInfo
คือ XrPersistedAnchorSpaceCreateInfoANDROID ที่มีพารามิเตอร์สำหรับการสร้างหมุดanchorOutput
คือพอยน์เตอร์ไปยัง XrSpace ซึ่งจะแสดงผลพื้นที่ยึดใหม่
แอปพลิเคชันสามารถสร้างหมุด XrSpace จากหมุดที่เก็บไว้ก่อนหน้านี้โดยเรียกใช้ xrCreatePersistedAnchorSpaceANDROID ที่มี XrUuidEXT เดียวกัน วิธีนี้เป็นวิธีสร้างจุดยึดอีกวิธีหนึ่งตามที่ระบุไว้ใน XR_ANDROID_trackables
- ระบบจะแสดงผล
XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROID
หากไม่พบXrUuidEXT
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_device_anchor_persistence
ก่อนเรียกใช้ xrCreatePersistedAnchorSpaceANDROID 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
คือ XrUuidEXT ของหมุดที่เก็บไว้เพื่อสร้างXrSpace
โครงสร้าง XrPersistedAnchorSpaceCreateInfoANDROID มีตัวเลือกการสร้างสำหรับหมุดเมื่อส่งไปยัง xrCreateDeviceAnchorPersistenceANDROID
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_device_anchor_persistence
ก่อนจึงจะใช้ XrPersistedAnchorSpaceCreateInfoANDROID ได้ type
ต้องเป็นXR_TYPE_PERSISTED_ANCHOR_SPACE_CREATE_INFO_ANDROID
next
ต้องเป็นNULL
หรือพอยน์เตอร์ที่ถูกต้องไปยังโครงสร้างถัดไปในเชนโครงสร้าง
แจกแจง Anchor ที่เก็บไว้
ฟังก์ชัน xrEnumeratePersistedAnchorsANDROID มีคำจำกัดความดังนี้
XrResult xrEnumeratePersistedAnchorsANDROID(
XrDeviceAnchorPersistenceANDROID handle,
uint32_t anchorIdsCapacityInput,
uint32_t* anchorIdsCountOutput,
XrUuidEXT* anchorIds);
คําอธิบายพารามิเตอร์
handle
คือ XrDeviceAnchorPersistenceANDROIDanchorIdsCapacityInput
คือความจุของอาร์เรย์anchorIds
หรือ 0 เพื่อบ่งบอกคําขอดึงข้อมูลความจุที่จําเป็นanchorIdsCountOutput
คือพอยน์เตอร์ไปยังจํานวนanchorIds
ที่เขียน หรือพอยน์เตอร์ไปยังความจุที่จําเป็นในกรณีที่anchorIdsCapacityInput
ไม่เพียงพอanchorIds
คือตัวชี้ไปยังอาร์เรย์ของโครงสร้าง XrUuidEXT สามารถเป็นNULL
ได้หากanchorIdsCapacityInput
เป็น 0- ดูรายละเอียดเกี่ยวกับการดึงข้อมูล
anchorIds
ขนาดที่ต้องการได้ที่ส่วนพารามิเตอร์ขนาดบัฟเฟอร์
แอปพลิเคชันอาจแจกแจงหมุดคงที่ปัจจุบันทั้งหมดโดยเรียกใช้ xrEnumeratePersistedAnchorsANDROID anchorIds
จะเก็บ UUID ของแอนคอร์ที่เก็บไว้ตามความจุของอาร์เรย์ หากมีจำนวนไม่เพียงพอ แอปพลิเคชันจะไม่มีการรับประกันว่าระบบจะแสดงหมุดใด
การใช้งานที่ถูกต้อง (โดยนัย)
- คุณต้องเปิดใช้ส่วนขยาย
XR_ANDROID_device_anchor_persistence
ก่อนเรียกใช้ xrEnumeratePersistedAnchorsANDROID handle
ต้องเป็นแฮนเดิล XrDeviceAnchorPersistenceANDROID ที่ถูกต้องanchorIdsCountOutput
ต้องเป็นพอยน์เตอร์ไปยังค่าuint32_t
- หาก
anchorIdsCapacityInput
ไม่ใช่0, anchorIds
ต้องเป็นพอยน์เตอร์ไปยังอาร์เรย์ของโครงสร้างanchorIdsCapacityInput
XrUuidEXT
รหัสการคืนสินค้า
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
คือ XrDeviceAnchorPersistenceANDROIDanchorId
คือ XrUuidEXT ของแอนคอร์ที่จะเลิกเก็บไว้
แอปพลิเคชันอาจทำให้หมุดที่เก็บถาวรอยู่คงอยู่ต่อไปไม่ได้โดยเรียกใช้ xrUnpersistAnchorANDROID และส่งหมุด XrUuidEXT ของหมุดที่จะคงอยู่ต่อไปไม่ได้
- ระบบจะแสดงผลลัพธ์เป็น
XR_ERROR_PERSISTED_DATA_NOT_READY_ANDROID
หากข้อมูลถาวรยังไม่พร้อม - ระบบจะแสดงผล
XR_ERROR_ANCHOR_ID_NOT_FOUND_ANDROID
หากไม่พบXrUuidEXT
การใช้งานที่ถูกต้อง (โดยนัย)
- คุณต้องเปิดใช้ส่วนขยาย
XR_ANDROID_device_anchor_persistence
ก่อนเรียกใช้ xrUnpersistAnchorANDROID 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
ตัวอย่างโค้ดสำหรับการจัดเก็บข้อมูล Anchor
โค้ดตัวอย่างต่อไปนี้แสดงวิธีตรวจสอบความสามารถของระบบ เก็บ แสดงรายการ และยกเลิกการเก็บรักษาหมุด รวมถึงสร้างหมุดจากหมุดที่เก็บไว้ 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;
CHK_XR(xrPersistAnchorANDROID(persistenceHandle, &anchorSpaceInfo, &anchorId));
// ... 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;
// 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 (Kenny Vercaemer)
- คำอธิบายส่วนขยายเริ่มต้น