แสดงผลแอป AR โดยใช้ Vulkan บน Android NDK (C)

เมื่อตั้งค่า ArTextureUpdateMode เป็น AR_TEXTURE_UPDATE_MODE_EXPOSE_HARDWARE_BUFFER แล้ว ARCore จะส่งบัฟเฟอร์ฮาร์ดแวร์ของ 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 มีเฉพาะใน API ของ Android ระดับ 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)