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.

Consulta la aplicación de ejemplo

La compatibilidad con la renderización de Vulkan se demuestra 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 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 }
)

Cómo obtener 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 el procesamiento de Vulkan solo está disponible en los niveles de API 27 y arriba. 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 compatible con Vulkan 1.1 debe tener la extensión requerida a partir de Android 10 (nivel de API 29).