使用 min sdk16 添加 vulkan 支持

Add vulkan support with min sdk16

我想制作一个应用程序,可以 运行 在各种设备上运行,如果支持 Vulkan,则它会使用 Vulkan 呈现。所以我将目标SDK版本设置为26,最小sdk版本设置为16。有没有办法这样使用Vulkan,或者我必须制作两个不同的应用程序。

当我使用 min sdk 16 时,我得到这个,错误消息:

Error:error: linker command failed with exit code 1 (use -v to see invocation)

仅此而已。

但如果我使用 minsdk 26 构建它,它工作正常。

你不能 link 反对 libvulkan.so 因为它不会在 API 26 之前出现在大多数设备上。所以你需要在运行时手动加载它:

struct VulkanFuncs {
    PFN_vkGetInstanceProcAddr GetInstanceProcAddr;
    // ...
};

VulkanFuncs vk;
libvulkan = dlopen("libvulkan.so", RTLD_NOW | RTLD_LOCAL);
if (!libvulkan) { /* must be on API < 26 */ }
vk.GetInstanceProcAddr = (PFN_vkGetInstanceProcAddr)dlsym(libvulkan, "vkGetInstanceProcAddr");
// use vkGetInstanceProcAddr(NULL, ...) to get address of other "global" funcs
// after creating the instance, use vkGetInstanceProcAddr(instance, ...)
// to get address of all other Vulkan funcs