当 Config.TextureUpdateMode
设置为 TextureUpdateMode.EXPOSE_HARDWARE_BUFFER
时,ARCore 会在调用 Session.update()
时提供 Android 硬件缓冲区。此硬件缓冲区可以绑定到 Vulkan VkImage
。
查看示例应用
hello_ar_vulkan_c 示例应用演示了 Vulkan 渲染支持。
启用硬件缓冲区输出模式
配置的 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 渲染期间使用硬件缓冲区
如需查看有关如何使用 Vulkan 渲染 AR 应用的示例,请参阅 vulkan_handler.cc
。
支持的设备
Vulkan 渲染支持仅适用于 Android API 级别 27 和
。此外,设备还必须支持 VK_ANDROID_external_memory_android_hardware_buffer
扩展。
在应用清单中要求使用 Vulkan
Google Play 会根据您的应用清单中声明的 <uses-feature>
来过滤您的
应用在不符合其硬件和软件功能要求的设备上提供。
使用 Vulkan 1.0 的设备可能不支持所需的扩展,但从 Android 10(API 级别 29)开始,与 Vulkan 1.1 兼容的设备必须具有所需的扩展。