Renderiza tu app de RA con Vulkan en el SDK de Android (Kotlin/Java)

Cuando Config.TextureUpdateMode se establece en TextureUpdateMode.EXPOSE_HARDWARE_BUFFER, ARCore proporcionará un búfer de hardware de Android cuando se llame a Session.update(). Este búfer de hardware se puede vincular a un VkImage de Vulkan.

Ve la aplicación de ejemplo

La compatibilidad con la renderización de Vulkan se demuestra en la app de ejemplo hello_ar_vulkan_c.

Cómo habilitar el modo de salida de búfer de hardware

El Config.TextureUpdateMode configurado determina cómo ARCore actualizará la textura de la cámara. Cuando se establece en TextureUpdateMode.EXPOSE_HARDWARE_BUFFER, ARCore proporcionará la imagen de la cámara a través de un HardwareBuffer.

Configura la sesión para usar 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 }
)

Obtén el búfer de hardware

Cuando TextureUpdateMode.EXPOSE_HARDWARE_BUFFER esté habilitado, usa Frame.getHardwareBuffer() para obtener el búfer de hardware:

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.
}

Cómo usar el búfer de hardware durante la renderización de Vulkan

Consulta vulkan_handler.cc para ver un ejemplo de cómo renderizar una aplicación de RA con Vulkan.

Dispositivos compatibles

La compatibilidad con la renderización de Vulkan solo está disponible en la API nivel 27 y superiores de Android. Además, el dispositivo debe admitir la extensión VK_ANDROID_external_memory_android_hardware_buffer.

Cómo solicitar Vulkan en el manifiesto de tu app

Google Play usa <uses-feature> declarado en el manifiesto de tu app para aplicarle filtrado y excluir dispositivos que no cumplan con sus requisitos de las funciones de software y hardware. Los dispositivos que usan Vulkan 1.0 podrían no admitir la extensión requerida, pero los dispositivos compatibles con Vulkan 1.1 deben tener la extensión requerida a partir de Android 10 (nivel de API 29).