在 Android NDK (C) 上使用 Vulkan 轉譯 AR 應用程式
將 ArTextureUpdateMode
設為 AR_TEXTURE_UPDATE_MODE_EXPOSE_HARDWARE_BUFFER
後,ARCore 會在呼叫 ArSession_update()
時提供 Android 硬體緩衝區。這個硬體緩衝區可繫結至 Vulkan VkImage
。
查看範例應用程式
hello_ar_vulkan_c 範例應用程式示範了 Vulkan 算繪支援功能。
啟用硬體緩衝區輸出模式
已設定的 ArTextureUpdateMode
會決定 ARCore 如何更新相機紋理。設為 AR_TEXTURE_UPDATE_MODE_EXPOSE_HARDWARE_BUFFER
時,ARCore 會透過 AHardwareBuffer
提供相機影像。
設定工作階段以使用 AR_TEXTURE_UPDATE_MODE_EXPOSE_HARDWARE_BUFFER
:
ArConfig* ar_config = NULL;
ArConfig_create(ar_session, &ar_config);
ArConfig_setTextureUpdateMode(ar_session, ar_config,
AR_TEXTURE_UPDATE_MODE_EXPOSE_HARDWARE_BUFFER);
CHECK(ArSession_configure(ar_session, ar_config) == AR_SUCCESS);
ArConfig_destroy(ar_config);
取得硬體緩衝區
啟用 AR_TEXTURE_UPDATE_MODE_EXPOSE_HARDWARE_BUFFER
後,請使用 ArFrame_getHardwareBuffer()
取得硬體緩衝區:
void* native_hardware_buffer = NULL;
ArFrame_getHardwareBuffer(ar_session, ar_frame, &native_hardware_buffer);
if ((int64_t)native_hardware_buffer == 0) {
// The hardware buffer isn't ready yet.
return;
}
在 Vulkan 算繪期間使用硬體緩衝區
請參閱 vulkan_handler.cc
,瞭解如何使用 Vulkan 算繪 AR 應用程式。
支援的裝置
Vulkan 算繪支援功能僅適用於 Android API 級別 27 以上版本。此外,裝置必須支援 VK_ANDROID_external_memory_android_hardware_buffer
擴充功能。
在應用程式資訊清單中要求 Vulkan
Google Play 會使用應用程式資訊清單中宣告的 <uses-feature>
,篩除不符合應用程式硬體和軟體功能需求的裝置。使用 Vulkan 1.0 的裝置「可能」支援必要的擴充功能,但與 Vulkan 1.1 相容的裝置「必須」從 Android 10 (API 級別 29) 開始具備必要的擴充功能。
除非另有註明,否則本頁面中的內容是採用創用 CC 姓名標示 4.0 授權,程式碼範例則為阿帕契 2.0 授權。詳情請參閱《Google Developers 網站政策》。Java 是 Oracle 和/或其關聯企業的註冊商標。
上次更新時間:2025-02-28 (世界標準時間)。
[null,null,["上次更新時間:2025-02-28 (世界標準時間)。"],[[["ARCore can provide the camera image as an Android hardware buffer for efficient Vulkan rendering by setting `ArTextureUpdateMode` to `AR_TEXTURE_UPDATE_MODE_EXPOSE_HARDWARE_BUFFER`."],["This hardware buffer can be accessed using `ArFrame_getHardwareBuffer()` and bound to a Vulkan `VkImage` for rendering."],["Vulkan rendering with ARCore is supported on Android API levels 27 and above, requiring devices to support the `VK_ANDROID_external_memory_android_hardware_buffer` extension."],["To ensure compatibility, declare Vulkan requirements in your app's manifest using `\u003cuses-feature\u003e`, targeting devices with Vulkan 1.1 for guaranteed support on Android 10 and above."],["A sample implementation of Vulkan rendering with ARCore can be found in the `hello_ar_vulkan_c` sample app."]]],["To enable hardware buffer access, set `ArTextureUpdateMode` to `AR_TEXTURE_UPDATE_MODE_EXPOSE_HARDWARE_BUFFER` using `ArConfig_setTextureUpdateMode`. After calling `ArSession_update()`, use `ArFrame_getHardwareBuffer()` to obtain the `AHardwareBuffer`. If using the buffer beyond the next `ArSession_update()`, call `AHardwareBuffer_acquire()` and `AHardwareBuffer_release()`. Vulkan rendering is supported on Android API 27+ with the `VK_ANDROID_external_memory_android_hardware_buffer` extension. Incompatible devices will return an error.\n"]]