首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >hello_xr (Openxr)示例如何检索Oculus的Vulkan指针?

hello_xr (Openxr)示例如何检索Oculus的Vulkan指针?
EN

Stack Overflow用户
提问于 2021-07-30 10:25:59
回答 1查看 498关注 0票数 0

我一直认为,在安卓平台上,我们应该使用dlopen()dlsym()加载指向Vulkan库的指针(类似于以下内容):

代码语言:javascript
复制
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“动态加载器(类似于google https://github.com/googlesamples/android-vulkan-tutorials的Vulkan Android示例)

由于Gayan (https://gayanediriweera.github.io/code/2021/04/06/how-to-run-helloxr-on-oculus-quest.html)的博客,我能够在oculus任务上构建并运行hello_xr示例。

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

这里到底发生了什么黑魔法?OpenXR运行时是在幕后加载这些内容,还是代码中遗漏了什么?

谢谢您在这方面的任何帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-30 12:24:33

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

  1. 告诉编译器您要使用库。然后,只需使用function.
  2. Don't告诉编译器您想要使用库。相反,调用dlopen加载库,然后调用dlsym查找库中的函数,并调用它们。

第一种方法是使用库的正常方式。第二种方法是只有有一个很好的理由才能做的事情--例如,如果您不确定库是否安装了。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68589407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档