Renderizar seu app de RA usando Vulkan no SDK do Android (Kotlin/Java)
Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
Quando o Config.TextureUpdateMode
é definido como TextureUpdateMode.EXPOSE_HARDWARE_BUFFER
, o ARCore fornece um buffer de hardware do Android quando Session.update()
é chamado. Esse buffer de hardware pode ser vinculado a um VkImage
do Vulkan.
Conferir o aplicativo de exemplo
O suporte à renderização do Vulkan é demonstrado no app de exemplo hello_ar_vulkan_c.
Ativar o modo de saída de buffer de hardware
O Config.TextureUpdateMode
configurado determina como o ARCore vai atualizar a textura da câmera. Quando definido como TextureUpdateMode.EXPOSE_HARDWARE_BUFFER
, o ARCore fornece a imagem da câmera por meio de um HardwareBuffer
.
Configure a sessão 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 }
)
Conseguir o buffer de hardware
Quando TextureUpdateMode.EXPOSE_HARDWARE_BUFFER
estiver ativado, use Frame.getHardwareBuffer()
para acessar o buffer 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.
}
Usar o buffer de hardware durante a renderização do Vulkan
Consulte vulkan_handler.cc
para conferir um exemplo de como renderizar um app de RA usando o Vulkan.
Dispositivos compatíveis
O suporte à renderização do Vulkan está disponível apenas nos níveis 27 e
mais recentes da API do Android. Além disso, o dispositivo precisa oferecer suporte à extensão VK_ANDROID_external_memory_android_hardware_buffer
.
Exigir o Vulkan no manifesto do app
O Google Play usa <uses-feature>
declarado no manifesto do app para filtrar o
app de dispositivos que não atendem aos requisitos de recursos de hardware e software.
Os dispositivos que usam o Vulkan 1.0 podem não oferecer suporte à extensão necessária, mas os dispositivos
compatíveis com o Vulkan 1.1 precisam ter a extensão necessária a partir do Android 10 (nível 29 da API).
Exceto em caso de indicação contrária, o conteúdo desta página é licenciado de acordo com a Licença de atribuição 4.0 do Creative Commons, e as amostras de código são licenciadas de acordo com a Licença Apache 2.0. Para mais detalhes, consulte as políticas do site do Google Developers. Java é uma marca registrada da Oracle e/ou afiliadas.
Última atualização 2025-07-26 UTC.
[null,null,["Última atualização 2025-07-26 UTC."],[[["\u003cp\u003eARCore can provide the camera image as an Android hardware buffer for efficient Vulkan rendering when \u003ccode\u003eTextureUpdateMode.EXPOSE_HARDWARE_BUFFER\u003c/code\u003e is enabled.\u003c/p\u003e\n"],["\u003cp\u003eThis hardware buffer can be accessed using \u003ccode\u003eFrame.getHardwareBuffer()\u003c/code\u003e and bound to a Vulkan \u003ccode\u003eVkImage\u003c/code\u003e for rendering.\u003c/p\u003e\n"],["\u003cp\u003eVulkan rendering with ARCore requires Android API level 27 or higher and device support for the \u003ccode\u003eVK_ANDROID_external_memory_android_hardware_buffer\u003c/code\u003e extension.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003ehello_ar_vulkan_c\u003c/code\u003e sample app demonstrates how to implement Vulkan rendering with ARCore.\u003c/p\u003e\n"],["\u003cp\u003eTo ensure your app is only available on compatible devices, declare the Vulkan feature requirement in your app's manifest.\u003c/p\u003e\n"]]],["To utilize hardware buffer output, set `Config.TextureUpdateMode` to `EXPOSE_HARDWARE_BUFFER` during session configuration. This enables ARCore to provide a hardware buffer via `Session.update()`. Retrieve this buffer using `Frame.getHardwareBuffer()`. It can then be bound to a Vulkan `VkImage`. Vulkan rendering is demonstrated in the `hello_ar_vulkan_c` sample app. Support requires Android API level 27+, with the `VK_ANDROID_external_memory_android_hardware_buffer` extension and ensure your manifest declares Vulkan usage.\n"],null,["# Render your AR app using Vulkan on Android SDK (Kotlin/Java)\n\nWhen the [`Config.TextureUpdateMode`](/ar/reference/java/com/google/ar/core/Config.TextureUpdateMode) is set to [`TextureUpdateMode.EXPOSE_HARDWARE_BUFFER`](/ar/reference/java/com/google/ar/core/Config.TextureUpdateMode#expose_hardware_buffer), ARCore will provide an Android [hardware buffer](https://developer.android.com/ndk/reference/group/a-hardware-buffer) when [`Session.update()`](/ar/reference/java/com/google/ar/core/Session#update-) is called. This hardware buffer can be bound to a Vulkan [`VkImage`](https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImage.html).\n\nView the sample application\n---------------------------\n\nVulkan rendering support is demonstrated in the [hello_ar_vulkan_c sample app](https://github.com/google-ar/arcore-android-sdk/tree/master/samples/hello_ar_vulkan_c).\n\nEnable the hardware buffer output mode\n--------------------------------------\n\nThe configured [`Config.TextureUpdateMode`](/ar/reference/java/com/google/ar/core/Config.TextureUpdateMode) determines how ARCore will update the camera texture. When it is set to [`TextureUpdateMode.EXPOSE_HARDWARE_BUFFER`](/ar/reference/java/com/google/ar/core/Config.TextureUpdateMode#expose_hardware_buffer), ARCore will provide the camera image through a [`HardwareBuffer`](https://developer.android.com/reference/android/hardware/HardwareBuffer).\n\nConfigure the session to use [`TextureUpdateMode.EXPOSE_HARDWARE_BUFFER`](/ar/reference/java/com/google/ar/core/Config.TextureUpdateMode#expose_hardware_buffer): \n\n### Java\n\n```java\nConfig config = session.getConfig();\nconfig.setTextureUpdateMode(Config.TextureUpdateMode.EXPOSE_HARDWARE_BUFFER);\nsession.configure(config);\n```\n\n### Kotlin\n\n```kotlin\nsession.configure(\n session.config.apply { textureUpdateMode = Config.TextureUpdateMode.EXPOSE_HARDWARE_BUFFER }\n)\n```\n| **Note:** When using [`TextureUpdateMode.EXPOSE_HARDWARE_BUFFER`](/ar/reference/java/com/google/ar/core/Config.TextureUpdateMode#expose_hardware_buffer) on incompatible devices, [`Session.configure()`](/ar/reference/java/com/google/ar/core/Session#configure(com.google.ar.core.Config)) will fail and throw [`UnsupportedConfigurationException`](/ar/reference/java/com/google/ar/core/exceptions/UnsupportedConfigurationException).\n\nObtain the hardware buffer\n--------------------------\n\nWhen [`TextureUpdateMode.EXPOSE_HARDWARE_BUFFER`](/ar/reference/java/com/google/ar/core/Config.TextureUpdateMode#expose_hardware_buffer) is enabled, use [`Frame.getHardwareBuffer()`](/ar/reference/java/com/google/ar/core/Frame#getHardwareBuffer-) to get the hardware buffer: \n\n### Java\n\n```java\ntry {\n HardwareBuffer buffer = frame.getHardwareBuffer();\n // Use the buffer object in your rendering.\n} catch (NotYetAvailableException e) {\n // The hardware buffer is not ready yet.\n}\n```\n\n### Kotlin\n\n```kotlin\ntry {\n val buffer = frame.hardwareBuffer\n // Use the buffer object in your rendering.\n} catch (e: NotYetAvailableException) {\n // The hardware buffer is not ready yet.\n}\n```\n\nUse the hardware buffer during Vulkan rendering\n-----------------------------------------------\n\nSee [`vulkan_handler.cc`](https://github.com/google-ar/arcore-android-sdk/blob/master/samples/hello_ar_vulkan_c/app/src/main/cpp/vulkan_handler.cc) for an example of how to render an AR application using Vulkan.\n\nSupported devices\n-----------------\n\nVulkan rendering support is only available on Android API levels **27** and\nabove. Additionally, the device must support the `VK_ANDROID_external_memory_android_hardware_buffer` extension.\n\n### Require Vulkan in your app's manifest\n\nGoogle Play uses `\u003cuses-feature\u003e` declared in your app manifest to filter your\napp from devices that don't meet its hardware and software feature requirements.\nDevices using Vulkan 1.0 **might not** support the required extension, but devices\ncompatible with Vulkan 1.1 **must** have the required extension starting in Android 10 (API level 29)."]]