hello_xr (Openxr)样本如何检索Vulkan API指针的Oculus Quest? &



我一直认为在android平台上我们应该使用dlopen()dlsym()来加载指向Vulkan库的指针(类似于:

)
libVulkan = dlopen("libvulkan.so", RTLD_NOW | RTLD_LOCAL);
vkEnumerateInstanceExtensionProperties = reinterpret_cast<PFN_vkEnumerateInstanceExtensionProperties(dlsym(libVulkan,"vkEnumerateInstanceExtensionProperties"));

(来源:https://github.com/SaschaWillems/Vulkan/blob/master/base/VulkanAndroid.cpp)

)

或使用"vulkan_wrapper.h"动态加载器(如谷歌的Vulkan Android样本https://github.com/googlesamples/android-vulkan-tutorials)

我能够在oculus任务中构建和运行hello_xr示例,这要感谢的博客Gayan Ediriweera (https://gayanediriweera.github.io/code/2021/04/06/how-to-run-helloxr-on-oculus-quest.html)

然而,当我查看vulkan的hello_xr示例代码时,我没有看到对loopen()或dlsym()的调用。例如,在第1287行(https://github.com/KhronosGroup/OpenXR-SDK-Source/blob/master/src/tests/hello_xr/graphicsplugin_vulkan.cpp),示例调用vkEnumerateInstanceLayerProperties,但我没有看到这个基本函数的指针加载在哪里,这让我感到困惑。

这里发生的是什么黑魔法?OpenXR运行时是否在引擎盖下加载这些,或者我在代码中遗漏了什么?

提前感谢您的帮助

当您想要调用某个库中的函数时,有两种方法:

  1. 告诉编译器你想使用这个库。然后,使用该功能即可。
  2. 不要告诉编译器你想使用这个库。相反,调用dlopen来加载库,然后调用dlsym来查找库中的函数,并调用它们。

第一种方法是使用库的常规方法。第二种方法只有在有充分理由的情况下才能使用——例如,如果您不确定库是否已经安装。

我猜Android有一些很好的理由使用dlopen(也许旧版本的Android没有安装Vulkan ?),而OpenXR没有。

最新更新