สตริงชื่อ
XR_ANDROID_composition_layer_passthrough_mesh
ประเภทชิ้นงาน
การขยายอินสแตนซ์
หมายเลขต่อที่จดทะเบียน
463
การแก้ไข
1
การพึ่งพาส่วนขยายและเวอร์ชัน
วันที่แก้ไขล่าสุด
2024-09-18
สถานะ IP
ไม่มีการอ้างสิทธิ์ IP ที่ทราบ
ผู้เขียน
Grant Yoshida จาก Google
Kevin Moule จาก Google
Vasiliy Baranov จาก Google
Peter Chen จาก Google
Levana Chen จาก Google
ภาพรวม
สำหรับอุปกรณ์ที่รองรับโหมดการผสมผสานสภาพแวดล้อมหลายโหมด ระบบอาจให้การกำหนดค่าการส่งผ่านเพื่อแสดงสภาพแวดล้อมจริงของผู้ใช้จากมุมมองที่สมจริง
ส่วนขยายนี้ช่วยให้แอปพลิเคชันสามารถโปรเจ็กต์พื้นผิวแบบส่งผ่านไปยังเรขาคณิตที่กำหนดเองผ่านเลเยอร์การคอมโพสเพิ่มเติม XrCompositionLayerPassthroughANDROID
ลักษณะของเลเยอร์พาสทรูจะระบุด้วยพารามิเตอร์ต่อไปนี้ ซึ่งโปรเจ็กชันจะแสดงด้วย XrPassthroughLayerANDROID
XrPosef pose;
XrVector3f scale;
float opacity;
XrPassthroughLayerANDROID layer;
สําหรับการส่งผ่านแบบเต็มหน้าจอ แอปพลิเคชันสามารถใช้โหมดการผสมสภาพแวดล้อม
ตรวจสอบความสามารถของระบบ
แอปพลิเคชันสามารถตรวจสอบว่าระบบสามารถแสดงผลเมชที่ส่งผ่านเลเยอร์ขององค์ประกอบได้หรือไม่โดยเชื่อมโยงโครงสร้าง XrSystemPassthroughLayerPropertiesANDROID กับ XrSystemProperties เมื่อเรียกใช้ xrGetSystemProperties
typedef struct XrSystemPassthroughLayerPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsPassthroughLayer;
uint32_t maxMeshIndexCount;
uint32_t maxMeshVertexCount;
} XrSystemPassthroughLayerPropertiesANDROID;
คำอธิบายสมาชิก
typeคือ XrStructureType ของโครงสร้างนี้nextคือNULLหรือพอยน์เตอร์ไปยังโครงสร้างถัดไปในเชนโครงสร้าง ไม่มีการกำหนดโครงสร้างดังกล่าวใน OpenXR หลักหรือส่วนขยายนี้supportsPassthroughLayerคือXrBool32ซึ่งระบุว่าระบบปัจจุบันรองรับเมชการส่งผ่านเลเยอร์องค์ประกอบหรือไม่maxMeshIndexCountคือuint32_tแสดงผลจํานวนอินเด็กซ์สูงสุดที่จะยอมรับสําหรับเมชที่ส่งผ่านmaxMeshVertexCountคือuint32_tซึ่งแสดงผลจํานวนจุดยอดสูงสุดที่ระบบจะยอมรับสําหรับเมชที่ส่งผ่าน
หาก supportsPassthroughLayer แสดงผลเป็น XR_FALSE แสดงว่าระบบไม่รองรับเมชการส่งผ่านเลเยอร์การคอมโพสชัน และระบบจะได้รับ XR_ERROR_FEATURE_UNSUPPORTED จาก xrCreatePassthroughLayerANDROID แอปพลิเคชันควรหลีกเลี่ยงการใช้เมชการส่งผ่านเลเยอร์การคอมโพสเมื่อ supportsPassthroughLayer เป็น XR_FALSE
หาก supportsPassthroughLayer แสดงผลเป็น XR_TRUE แสดงว่าระบบรองรับเมชการส่งผ่านเลเยอร์องค์ประกอบ ในกรณีนี้ maxMeshIndexCount และ maxMeshVertexCount จะแสดงผลเป็นตัวเลขที่ไม่ใช่ 0 แอปพลิเคชันควรใช้ maxMeshIndexCount และ maxMeshVertexCount เป็นค่าสูงสุดเพื่อตั้งค่าเมชที่ส่งผ่านเมื่อเรียกใช้ xrCreatePassthroughLayerANDROID และ xrSetPassthroughLayerMeshANDROID มิเช่นนั้นระบบอาจแสดงผล XR_ERROR_MESH_DATA_LIMIT_EXCEEDED_ANDROID เพื่อระบุว่าข้อมูลเมชเกินขีดจำกัดที่รองรับ
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_composition_layer_passthrough_meshก่อนใช้ XrSystemPassthroughLayerPropertiesANDROID typeต้องเป็นXR_TYPE_SYSTEM_PASSTHROUGH_LAYER_PROPERTIES_ANDROIDnextต้องเป็นNULLหรือพอยน์เตอร์ที่ถูกต้องไปยังโครงสร้างถัดไปในเชนโครงสร้าง
องค์ประกอบเลเยอร์การแสดงผลผ่าน
XrCompositionLayerPassthroughANDROID มีข้อมูลที่จําเป็นในการเรนเดอร์พื้นผิวแบบพาสทรูบนเมชรูปสามเหลี่ยมเมื่อเรียกใช้ xrEndFrame XrCompositionLayerPassthroughANDROID เป็นประเภทแทนสำหรับโครงสร้างพื้นฐาน XrCompositionLayerBaseHeader ที่ใช้ใน XrFrameEndInfo
typedef struct XrCompositionLayerPassthroughANDROID {
XrStructureType type;
const void* next;
XrCompositionLayerFlags layerFlags;
XrSpace space;
XrPosef pose;
XrVector3f scale;
float opacity;
XrPassthroughLayerANDROID layer;
} XrCompositionLayerPassthroughANDROID;
คำอธิบายสมาชิก
typeคือ XrStructureType ของโครงสร้างนี้nextคือNULLหรือพอยน์เตอร์ไปยังโครงสร้างถัดไปในเชนโครงสร้าง ไม่มีการกำหนดโครงสร้างดังกล่าวใน OpenXR หลักหรือส่วนขยายนี้layerFlagsคือบิตมาสก์ของ XrCompositionLayerFlags ที่อธิบาย Flag ที่จะใช้กับเลเยอร์spaceคือ XrSpace ซึ่งประเมินposeของเมชเลเยอร์เมื่อเวลาผ่านไปposeคือXrPosefที่กําหนดตําแหน่งและการวางแนวของเลเยอร์ เมชในเฟรมอ้างอิงของspacescaleคือXrVector3fที่กำหนดขนาดของเมชเลเยอร์opacityคือfloatที่กำหนดระดับทึบแสงของพื้นผิวแบบส่งผ่านใน [0, 1]layerคือ XrPassthroughLayerANDROID ที่สร้างขึ้นก่อนหน้านี้โดย xrCreatePassthroughLayerANDROID
แอปพลิเคชันสามารถสร้างโครงสร้าง XrCompositionLayerPassthroughANDROID ด้วย layer ที่สร้างขึ้นและเมชที่เกี่ยวข้องซึ่งได้จาก XrPassthroughLayerMeshANDROID
อาจส่งพอยน์เตอร์ไปยัง XrCompositionLayerPassthroughANDROID ใน xrEndFrame เป็นพอยน์เตอร์ไปยังโครงสร้างพื้นฐาน XrCompositionLayerBaseHeader ตามลําดับเลเยอร์ที่เลือก เพื่อขอให้รันไทม์คอมโพสเลเยอร์พาสทรูลงในเอาต์พุตเฟรมสุดท้าย
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_composition_layer_passthrough_meshก่อนใช้ XrCompositionLayerPassthroughANDROID typeต้องเป็นXR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_ANDROIDnextต้องเป็นNULLหรือพอยน์เตอร์ที่ถูกต้องไปยังโครงสร้างถัดไปในเชนโครงสร้างlayerFlagsต้องเป็น0หรือชุดค่าผสมที่ถูกต้องของค่า XrCompositionLayerFlagBitsspaceต้องเป็นแฮนเดิล XrSpace ที่ถูกต้องlayerต้องเป็นแฮนเดิล XrPassthroughLayerANDROID ที่ถูกต้อง- ทั้ง
layerและspaceต้องสร้างขึ้น จัดสรร หรือดึงมาจาก XrSession เดียวกัน
สร้างแฮนเดิลเลเยอร์การส่งผ่าน
แฮนเดิล XrPassthroughLayerANDROID แสดงเลเยอร์พาสทรูซึ่งกำหนดลักษณะการทํางานของ XrCompositionLayerPassthroughANDROID
XR_DEFINE_HANDLE(XrPassthroughLayerANDROID)
แอปพลิเคชันสามารถสร้างตัวแฮนเดิล XrPassthroughLayerANDROID ได้โดยเรียกใช้ xrCreatePassthroughLayerANDROID แฮนเดิล XrPassthroughLayerANDROID ที่แสดงผลสามารถนําไปใช้กับการเรียก API ในภายหลัง
XrResult xrCreatePassthroughLayerANDROID(
XrSession session,
const XrPassthroughLayerCreateInfoANDROID* createInfo,
XrPassthroughLayerANDROID* layer);
คําอธิบายพารามิเตอร์
sessionคือ XrSession ที่จะสร้างเลเยอร์การส่งผ่านcreateInfoคือพอยน์เตอร์ไปยังโครงสร้าง XrPassthroughLayerCreateInfoANDROID ที่ระบุพารามิเตอร์เลเยอร์การส่งผ่านเริ่มต้น ฟิลด์นี้สามารถเชื่อมโยงกับโครงสร้าง XrPassthroughLayerMeshANDROID เพื่อตั้งค่าเมชในเวลาเดียวกันได้ด้วยlayerคือพอยน์เตอร์ไปยังแฮนเดิลที่แสดงผลXrPassthroughLayerANDROID ที่สร้างขึ้น
แอปพลิเคชันควรระบุจำนวนดัชนีเมชที่ส่งผ่านใน XrPassthroughLayerCreateInfoANDROID::vertexCapacity และ XrPassthroughLayerCreateInfoANDROID::indexCapacity ให้น้อยกว่าหรือเท่ากับค่าสูงสุดที่แสดงผลโดย XrSystemPassthroughLayerPropertiesANDROID::maxMeshIndexCount และ XrSystemPassthroughLayerPropertiesANDROID::maxMeshVertexCount เมื่อเรียกใช้ xrGetSystemProperties xrCreatePassthroughLayerANDROID จะแสดงข้อผิดพลาด XR_ERROR_MESH_DATA_LIMIT_EXCEEDED_ANDROID หากจำนวนดัชนีเมชที่ระบุโดย createInfo มากกว่าค่าสูงสุด
ต้องปล่อยแฮนเดิล XrPassthroughLayerANDROID โดยใช้ฟังก์ชัน xrDestroyPassthroughLayerANDROID ในท้ายที่สุด
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_composition_layer_passthrough_meshก่อนเรียกใช้ xrCreatePassthroughLayerANDROID sessionต้องเป็นแฮนเดิล XrSession ที่ถูกต้องcreateInfoต้องเป็นพอยน์เตอร์ไปยังโครงสร้าง XrPassthroughLayerCreateInfoANDROID ที่ถูกต้องlayerต้องเป็นพอยน์เตอร์ไปยังแฮนเดิล XrPassthroughLayerANDROID
รหัสการคืนสินค้า
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHEDXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_MESH_DATA_LIMIT_EXCEEDED_ANDROID
โครงสร้าง XrPassthroughLayerCreateInfoANDROID มีคำจำกัดความดังนี้
typedef struct XrPassthroughLayerCreateInfoANDROID {
XrStructureType type;
const void* next;
uint32_t vertexCapacity;
uint32_t indexCapacity;
} XrPassthroughLayerCreateInfoANDROID;
คำอธิบายสมาชิก
typeคือ XrStructureType ของโครงสร้างนี้nextเป็น NULL หรือพอยน์เตอร์ไปยังโครงสร้างถัดไปในเชนโครงสร้าง XrPassthroughLayerMeshANDROID สามารถระบุได้ในเชนถัดไปเพื่อระบุเมชเริ่มต้นของเลเยอร์พาสทรูเมื่อเรียกใช้ xrCreatePassthroughLayerANDROIDvertexCapacityคือuint32_tที่แสดงถึงความจุสูงสุดของบัฟเฟอร์เวิร์กเท็กซ์สำหรับเมชของเลเยอร์นี้ หรือ0หากไม่ได้ระบุ หากระบุ XrPassthroughLayerMeshANDROID::vertexCount ของเมชที่ตั้งค่าไว้สําหรับเลเยอร์นี้ต้องน้อยกว่าหรือเท่ากับvertexCapacityindexCapacityคือuint32_tที่แสดงถึงความจุสูงสุดของบัฟเฟอร์อินเด็กซ์สำหรับเมชของเลเยอร์นี้ หรือ0หากไม่ได้ระบุ หากระบุไว้ XrPassthroughLayerMeshANDROID::indexCount ของเมชที่ตั้งค่าไว้สําหรับเลเยอร์นี้ต้องน้อยกว่าหรือเท่ากับindexCapacity
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_composition_layer_passthrough_meshก่อนจึงจะใช้ XrPassthroughLayerCreateInfoANDROID ได้ typeต้องเป็นXR_TYPE_PASSTHROUGH_LAYER_CREATE_INFO_ANDROIDnextต้องเป็นNULLหรือพอยน์เตอร์ที่ถูกต้องไปยังโครงสร้างถัดไปในเชนโครงสร้าง ดูข้อมูลเพิ่มเติมได้ที่ XrPassthroughLayerMeshANDROID
แอปพลิเคชันสามารถใช้ฟังก์ชัน xrDestroyPassthroughLayerANDROID เพื่อปล่อยเลเยอร์การส่งผ่านและทรัพยากรที่อยู่เบื้องหลัง
XrResult xrDestroyPassthroughLayerANDROID(
XrPassthroughLayerANDROID layer);
คําอธิบายพารามิเตอร์
layerคือ XrPassthroughLayerANDROID ที่จะทำลาย
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_composition_layer_passthrough_meshก่อนโทรหาxrDestroyPassthroughLayerANDROID layerต้องเป็นแฮนเดิล XrPassthroughLayerANDROID ที่ถูกต้อง
ความปลอดภัยของชุดข้อความ
- การเข้าถึง
layerและตัวแฮนเดิลย่อยต้องมีการซิงค์จากภายนอก
รหัสการคืนสินค้า
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALID
ตั้งค่าเมชเลเยอร์การแสดงภาพ
แอปพลิเคชันสามารถใช้ฟังก์ชัน xrSetPassthroughLayerMeshANDROID เพื่อตั้งค่าเมชสำหรับเลเยอร์พาสทรู
XrResult xrSetPassthroughLayerMeshANDROID(
XrPassthroughLayerANDROID layer,
const XrPassthroughLayerMeshANDROID* mesh);
คําอธิบายพารามิเตอร์
layerคือแฮนเดิล XrPassthroughLayerANDROID ที่จะอัปเดตด้วยmeshที่ระบุmeshคือพอยน์เตอร์ไปยังโครงสร้าง XrPassthroughLayerMeshANDROID ที่ระบุข้อมูลของเมช
แอปพลิเคชันควรระบุจำนวนดัชนีของเมชที่ส่งผ่านใน XrPassthroughLayerMeshANDROID::vertexCount และ XrPassthroughLayerMeshANDROID::indexCount ให้น้อยกว่าหรือเท่ากับค่าสูงสุดที่ได้จาก XrSystemPassthroughLayerPropertiesANDROID::maxMeshIndexCount และ XrSystemPassthroughLayerPropertiesANDROID::maxMeshVertexCount เมื่อเรียกใช้ xrGetSystemProperties หากจํานวนอินเด็กซ์ของเมชที่ได้จาก mesh จาก xrSetPassthroughLayerMeshANDROID มากกว่าค่าสูงสุด ระบบจะแสดงผล XR_ERROR_MESH_DATA_LIMIT_EXCEEDED_ANDROID
หากระบุความจุของบัฟเฟอร์เมชโดย XrPassthroughLayerCreateInfoANDROID::vertexCapacity และ XrPassthroughLayerCreateInfoANDROID::indexCapacity เมื่อสร้าง layer โดยใช้ xrCreatePassthroughLayerANDROID ระบบจะแสดงข้อผิดพลาด XR_ERROR_SIZE_INSUFFICIENT ใน xrSetPassthroughLayerMeshANDROID หากจํานวนอินเด็กซ์เมชที่กําหนดโดย mesh มากกว่าความจุ
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_composition_layer_passthrough_meshก่อนเรียกใช้ xrSetPassthroughLayerMeshANDROID layerต้องเป็นแฮนเดิล XrPassthroughLayerANDROID ที่ถูกต้องmeshต้องเป็นพอยน์เตอร์ไปยังโครงสร้าง XrPassthroughLayerMeshANDROID ที่ถูกต้อง
รหัสการคืนสินค้า
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHEDXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_MESH_DATA_LIMIT_EXCEEDED_ANDROID
โครงสร้าง XrPassthroughLayerMeshANDROID มีคำจำกัดความดังนี้
typedef struct XrPassthroughLayerMeshANDROID {
XrStructureType type;
const void* next;
XrWindingOrderANDROID windingOrder;
uint32_t vertexCount;
const XrVector3f* vertices;
uint32_t indexCount;
const uint16_t* indices;
} XrPassthroughLayerMeshANDROID;
คำอธิบายสมาชิก
typeคือ XrStructureType ของโครงสร้างนี้nextคือNULLหรือพอยน์เตอร์ไปยังโครงสร้างถัดไปในเชนโครงสร้างwindingOrderคือ XrWindingOrderANDROID ของสามเหลี่ยมเมช ซึ่งจะใช้สำหรับการคัดทิ้งพื้นหลังเมื่อแสดงผลเมชvertexCountคือuint32_tที่แสดงจํานวนจุดยอดในเมช เมื่อระบุ XrPassthroughLayerCreateInfoANDROID::vertexCapacity แล้วvertexCountต้องน้อยกว่าหรือเท่ากับvertexCapacityverticesคือพอยน์เตอร์ไปยังอาร์เรย์ของXrVector3fซึ่งมีตำแหน่งเวิร์กเท็กซ์ของเมชรูปสามเหลี่ยม
indexCountคือuint32_tที่แสดงจํานวนอินเด็กซ์ในเมชรูปสามเหลี่ยม ระบบจะไม่วาดดัชนีindexCount % 3รายการสุดท้าย (หากมี) เมื่อระบุ XrPassthroughLayerCreateInfoANDROID::indexCapacityindexCountต้องน้อยกว่าหรือเท่ากับindexCapacityindicesเป็นพอยน์เตอร์ไปยังอาร์เรย์ของuint16_tซึ่งมีดัชนีของเมชสามเหลี่ยม
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_composition_layer_passthrough_meshก่อนใช้ XrPassthroughLayerMeshANDROID typeต้องเป็นXR_TYPE_PASSTHROUGH_LAYER_MESH_ANDROIDnextต้องเป็นNULLหรือพอยน์เตอร์ที่ถูกต้องไปยังโครงสร้างถัดไปในเชนโครงสร้างwindingOrderต้องเป็นค่า XrWindingOrderANDROID ที่ถูกต้อง- หาก
vertexCountไม่ใช่0, verticesต้องเป็นพอยน์เตอร์ไปยังอาร์เรย์ของโครงสร้างvertexCountXrVector3f - หาก
indexCountไม่ใช่0, indicesต้องเป็นพอยน์เตอร์ไปยังอาร์เรย์ของค่าindexCount uint16_t
การแจกแจงค่า XrWindingOrderANDROID จะระบุลําดับการเลี้ยวของสามเหลี่ยมของเมช ซึ่งรันไทม์ใช้สำหรับการคัดทิ้งด้านหลังเมื่อแสดงผลเมชของเลเยอร์การส่งผ่าน
typedef enum XrWindingOrderANDROID {
XR_WINDING_ORDER_UNKNOWN_ANDROID = 0,
XR_WINDING_ORDER_CW_ANDROID = 1,
XR_WINDING_ORDER_CCW_ANDROID = 2
} XrWindingOrderANDROID;
คำอธิบายรายการ
XR_WINDING_ORDER_UNKNOWN_ANDROID— ไม่ทราบลําดับการเลี้ยวของสามเหลี่ยมของตาข่ายXR_WINDING_ORDER_CW_ANDROID— ลําดับการต่อรูปสามเหลี่ยมของตาข่ายคือตามเข็มนาฬิกาXR_WINDING_ORDER_CCW_ANDROID— ลําดับการต่อรูปสามเหลี่ยมของตาข่ายคือทวนเข็มนาฬิกา
ตัวอย่างโค้ดสำหรับองค์ประกอบเลเยอร์การส่งผ่าน
โค้ดตัวอย่างต่อไปนี้แสดงวิธีสร้างเลเยอร์การส่งผ่านและใช้ในการคอมโพส
XrInstance instance; // previously initialized
XrSystemId systemId; // previously initialized
XrSession session; // previously initialized
XrSpace space; // previously initialized
// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrCreatePassthroughLayerANDROID xrCreatePassthroughLayerANDROID; // previously initialized
PFN_xrDestroyPassthroughLayerANDROID xrDestroyPassthroughLayerANDROID; // previously initialized
PFN_xrSetPassthroughLayerMeshANDROID xrSetPassthroughLayerMeshANDROID; // previously initialized
// Inspect passthrough mesh system properties
XrSystemPassthroughLayerPropertiesANDROID passthroughLayerSystemProperties{
XR_TYPE_SYSTEM_PASSTHROUGH_LAYER_PROPERTIES_ANDROID};
XrSystemProperties systemProperties{
XR_TYPE_SYSTEM_PROPERTIES, &passthroughLayerSystemProperties};
CHK_XR(xrGetSystemProperties(instance, systemId, &systemProperties));
if (!passthroughLayerSystemProperties.supportsPassthroughLayer) {
// the system does not support composite layer passthrough mesh.
return;
}
// The initial mesh for the layer.
XrPassthroughLayerMeshANDROID mesh = {
.type = XR_TYPE_PASSTHROUGH_LAYER_MESH_ANDROID,
.windingOrder = XR_WINDING_ORDER_CW_ANDROID,
.vertexCount = 4,
.vertices = {
{ 0, 0, 0 }, { 0, 1, 0 }, { 1, 1, 0 }, { 1, 0, 0 }
},
.indexCount = 6,
.indices = {
0, 1, 2,
0, 2, 3
},
};
// Create the layer. Layers are expected to persist across frames.
XrPassthroughLayerCreateInfoANDROID create_info = {
.type = XR_TYPE_PASSTHROUGH_LAYER_CREATE_INFO_ANDROID,
.next = &mesh,
.vertexCapacity = 0,
.indexCapacity = 0,
};
XrPassthroughLayerANDROID layer;
CHK_XR(xrCreatePassthroughLayerANDROID(session, &create_info, &layer));
// Create a composition layer. Composition layers are submitted per frame.
XrCompositionLayerPassthroughANDROID passthrough_layer = {
.type = XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_ANDROID,
.next = nullptr,
.layerFlags = 0,
.space = space,
.pose = {
.orientation = { 0.0f, 0.0f, 0.0f, 1.0f }
.position = { 0.0f, 0.0f, 0.0f }
},
.scale = { 1.0f, 1.0f, 1.0f },
.opacity = 1.0f,
.layer = layer
};
while (1) {
// ...
// For every frame in frame loop
// ...
// Submit composition layer in xrEndFrame.
std::vector<XrCompositionLayerBaseHeader*> layers = {
...,
&passthrough_layer,
...,
};
XrFrameEndInfo end_frame_info = { XR_TYPE_FRAME_END_INFO, nullptr };
end_frame_info.layerCount = (uint32_t)layers.size();
end_frame_info.layers = layers.data();
CHK_XR(xrEndFrame(session, &end_frame_info));
// Update the layer. Results can be seen the next time a passthrough composition
// layer is submitted.
mesh.indexCount = 9;
const uint16_t new_index_buffer[] = {
0, 1, 2,
0, 2, 3,
0, 1, 2
};
mesh.indexBuffer = &new_index_buffer[0];
CHK_XR(xrSetPassthroughLayerMeshANDROID(&layer, &mesh));
// ...
// Finish frame loop
// ...
}
// Clean up.
CHK_XR(xrDestroyPassthroughLayerANDROID(layer));
ประเภทออบเจ็กต์ใหม่
ค่าคงที่ Enum ใหม่
เพิ่มรายการต่อไปนี้ในคําจํากัดความของ XrObjectType
XR_OBJECT_TYPE_PASSTHROUGH_LAYER_ANDROID
เพิ่มรายการต่อไปนี้ในอนุกรม XrStructureType
XR_TYPE_PASSTHROUGH_LAYER_CREATE_INFO_ANDROIDXR_TYPE_PASSTHROUGH_LAYER_MESH_ANDROIDXR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_ANDROIDXR_TYPE_SYSTEM_PASSTHROUGH_LAYER_PROPERTIES_ANDROID
การแจกแจงค่า XrResult ขยายการทำงานด้วยรายการต่อไปนี้
XR_ERROR_MESH_DATA_LIMIT_EXCEEDED_ANDROID
Enum ใหม่
โครงสร้างใหม่
- XrPassthroughLayerCreateInfoANDROID
- XrPassthroughLayerMeshANDROID
- XrCompositionLayerPassthroughANDROID
- XrSystemPassthroughLayerPropertiesANDROID
ฟังก์ชันใหม่
- xrCreatePassthroughLayerANDROID
xrDestroyPassthroughLayerANDROID- xrSetPassthroughLayerMeshANDROID
ปัญหา
ประวัติเวอร์ชัน
- การแก้ไข 1, 11-09-2024 (Levana Chen)
- คำอธิบายส่วนขยายเริ่มต้น
OpenXR™ และโลโก้ OpenXR เป็นเครื่องหมายการค้าของ The Khronos Group Inc. และจดทะเบียนเป็นเครื่องหมายการค้าในจีน สหภาพยุโรป ญี่ปุ่น และสหราชอาณาจักร