เมื่อตั้งค่า ArTextureUpdateMode
เป็น AR_TEXTURE_UPDATE_MODE_EXPOSE_HARDWARE_BUFFER
แล้ว ARCore จะให้ hardware buffer ของ Android เมื่อเรียกใช้ ArSession_update()
บัฟเฟอร์ของฮาร์ดแวร์นี้สามารถเชื่อมโยงกับ Vulkan VkImage
ดูตัวอย่างแอปพลิเคชัน
การรองรับการแสดงผล Vulkan จะสาธิตอยู่ในแอป Hello_ar_vulkan_c ตัวอย่าง
เปิดใช้โหมดเอาต์พุตของบัฟเฟอร์ฮาร์ดแวร์
ArTextureUpdateMode
ที่กำหนดค่าไว้จะกำหนดวิธีที่ ARCore จะอัปเดตพื้นผิวกล้อง เมื่อตั้งค่าเป็น AR_TEXTURE_UPDATE_MODE_EXPOSE_HARDWARE_BUFFER
ARCore จะส่งรูปภาพจากกล้องผ่าน AHardwareBuffer
กำหนดค่าเซสชันเพื่อใช้ AR_TEXTURE_UPDATE_MODE_EXPOSE_HARDWARE_BUFFER
ดังนี้
ArConfig* ar_config = NULL; ArConfig_create(ar_session, &ar_config); ArConfig_setTextureUpdateMode(ar_session, ar_config, AR_TEXTURE_UPDATE_MODE_EXPOSE_HARDWARE_BUFFER); CHECK(ArSession_configure(ar_session, ar_config) == AR_SUCCESS); ArConfig_destroy(ar_config);
รับบัฟเฟอร์ของฮาร์ดแวร์
เมื่อเปิดใช้ AR_TEXTURE_UPDATE_MODE_EXPOSE_HARDWARE_BUFFER
ให้ใช้ ArFrame_getHardwareBuffer()
เพื่อรับบัฟเฟอร์ของฮาร์ดแวร์ ดังนี้
void* native_hardware_buffer = NULL; ArFrame_getHardwareBuffer(ar_session, ar_frame, &native_hardware_buffer); if ((int64_t)native_hardware_buffer == 0) { // The hardware buffer isn't ready yet. return; }
ใช้บัฟเฟอร์ฮาร์ดแวร์ระหว่างการแสดงผล Vulkan
ดูตัวอย่างวิธีแสดงผลแอปพลิเคชัน AR โดยใช้ Vulkan ได้ที่ vulkan_handler.cc
อุปกรณ์ที่รองรับ
การรองรับการแสดงผล Vulkan ใช้ได้ใน Android API ระดับ 27 ขึ้นไปเท่านั้น นอกจากนี้ อุปกรณ์ต้องรองรับส่วนขยาย VK_ANDROID_external_memory_android_hardware_buffer
ด้วย
กำหนดให้ต้องใช้ Vulkan ในไฟล์ Manifest ของแอป
Google Play ใช้ <uses-feature>
ที่ประกาศไว้ในไฟล์ Manifest ของแอปเพื่อกรอง
จากอุปกรณ์ที่ไม่เป็นไปตามข้อกำหนดด้านฟีเจอร์ด้านฮาร์ดแวร์และซอฟต์แวร์
อุปกรณ์ที่ใช้ Vulkan 1.0 อาจไม่สนับสนุนส่วนขยายที่จำเป็น แต่อุปกรณ์
ใช้ร่วมกับ Vulkan 1.1 ได้ ต้องมีส่วนขยายที่จำเป็นตั้งแต่ Android 10 (API ระดับ 29)