用min sdk16添加vulkan支持

时间:2018-02-23 21:09:29

标签: android vulkan

我想创建一个应用程序,可以在各种设备上运行,如果支持Vulkan,则使用Vulkan进行渲染。所以我将目标SDK版本设置为26,将min sdk版本设置为16.有没有办法以这种方式使用Vulkan,或者我必须创建两个不同的应用程序。

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

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

,别无其他。

但如果我使用minsdk 26进行构建它可以正常工作。

1 个答案:

答案 0 :(得分:0)

您无法链接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