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 buffer 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 muestra en la app de ejemplo hello_ar_vulkan_c.

Habilita el modo de salida del 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 que use 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 los niveles de API de Android 27 y versiones posteriores. Además, el dispositivo debe admitir la extensión VK_ANDROID_external_memory_android_hardware_buffer.

Cómo exigir 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. Es posible que los dispositivos que usan Vulkan 1.0 no admitan 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).