แสดงผลแอป AR โดยใช้ Vulkan ใน Android SDK (Kotlin/Java)

เมื่อตั้งค่า Config.TextureUpdateMode เป็น TextureUpdateMode.EXPOSE_HARDWARE_BUFFER แล้ว ARCore จะส่งบัฟเฟอร์ฮาร์ดแวร์ของ Android เมื่อมีการเรียกใช้ Session.update() บัฟเฟอร์ฮาร์ดแวร์นี้สามารถเชื่อมโยงกับ VkImage ของ Vulkan ได้

ดูแอปพลิเคชันตัวอย่าง

การสนับสนุนการแสดงผล Vulkan จะแสดงในแอปตัวอย่าง hello_ar_vulkan_c

เปิดใช้โหมดเอาต์พุตบัฟเฟอร์ฮาร์ดแวร์

Config.TextureUpdateMode ที่กำหนดค่าไว้จะกำหนดวิธีที่ ARCore จะอัปเดตพื้นผิวกล้อง เมื่อตั้งค่าเป็น TextureUpdateMode.EXPOSE_HARDWARE_BUFFER ARCore จะส่งรูปภาพจากกล้องผ่าน HardwareBuffer

กำหนดค่าเซสชันให้ใช้ TextureUpdateMode.EXPOSE_HARDWARE_BUFFER

Java

Config config = session.getConfig();
config.setTextureUpdateMode(Config.TextureUpdateMode.EXPOSE_HARDWARE_BUFFER);
session.configure(config);

Kotlin

session.configure(
  session.config.apply { textureUpdateMode = Config.TextureUpdateMode.EXPOSE_HARDWARE_BUFFER }
)

รับบัฟเฟอร์ของฮาร์ดแวร์

เมื่อเปิดใช้ TextureUpdateMode.EXPOSE_HARDWARE_BUFFER ให้ใช้ Frame.getHardwareBuffer() เพื่อรับบัฟเฟอร์ฮาร์ดแวร์

Java

try {
  HardwareBuffer buffer = frame.getHardwareBuffer();
  // Use the buffer object in your rendering.
} catch (NotYetAvailableException e) {
  // The hardware buffer is not ready yet.
}

Kotlin

try {
  val buffer = frame.hardwareBuffer
  // Use the buffer object in your rendering.
} catch (e: NotYetAvailableException) {
  // The hardware buffer is not ready yet.
}

ใช้บัฟเฟอร์ฮาร์ดแวร์ระหว่างการแสดงผล 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) เป็นต้นไป