Android NDK (C)에서 Vulkan을 사용하여 AR 앱 렌더링
ArTextureUpdateMode
이 AR_TEXTURE_UPDATE_MODE_EXPOSE_HARDWARE_BUFFER
로 설정되면 ArSession_update()
이 호출될 때 ARCore에서 Android 하드웨어 버퍼를 제공합니다. 이 하드웨어 버퍼는 Vulkan VkImage
에 바인딩할 수 있습니다.
샘플 애플리케이션 보기
Vulkan 렌더링 지원은 hello_ar_vulkan_c 샘플 앱에서 보여줍니다.
하드웨어 버퍼 출력 모드 사용 설정
구성된 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을 사용하여 AR 애플리케이션을 렌더링하는 방법의 예는 vulkan_handler.cc
를 참고하세요.
지원되는 기기
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)부터 필요한 확장 프로그램을 반드시 포함해야 합니다.
달리 명시되지 않는 한 이 페이지의 콘텐츠에는 Creative Commons Attribution 4.0 라이선스에 따라 라이선스가 부여되며, 코드 샘플에는 Apache 2.0 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 Google Developers 사이트 정책을 참조하세요. 자바는 Oracle 및/또는 Oracle 계열사의 등록 상표입니다.
최종 업데이트: 2025-02-28(UTC)
[null,null,["최종 업데이트: 2025-02-28(UTC)"],[[["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"]]