获取Vulkan扩展中定义的函数的一种方法是使用:vkGetInstanceProcAddr
查询我们正在寻找的函数的字符串名称。如果一切顺利,我们将获得指向正确方法的函数指针。
我想知道是否可以直接链接到文件以显示扩展名。
例如在此功能中启用注释掉的呼叫:
VkResult CreateDebugUtilsMessengerEXT(VkInstance instance,
const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo,
const VkAllocationCallbacks* pAllocator,
VkDebugUtilsMessengerEXT* pDebugMessenger)
{
auto func = (PFN_vkCreateDebugUtilsMessengerEXT) vkGetInstanceProcAddr(instance,
"vkCreateDebugUtilsMessengerEXT");
if (func != nullptr)
{
return func(instance, pCreateInfo, pAllocator, pDebugMessenger); //comment
//return vkCreateDebugUtilsMessengerEXT(instance, pCreateInfo, pAllocator, pDebugMessenger); //uncomment
}
else
{
return VK_ERROR_EXTENSION_NOT_PRESENT;
}
}
答案 0 :(得分:4)
我想知道是否可以直接链接到文件以显示扩展名。
问题在于,您要链接的运行时库是平台Vulkan驱动程序。驱动程序可能未实现该扩展,因为它是可选的,因此尝试直接解析链接只会导致您的应用程序无法在没有扩展的平台上以动态链接程序符号解析错误开始。
通常,您会在加载时将通过扩展加载机制加载的扩展缓存到本地函数指针中,并且该本地函数指针可以具有您想要为其赋予的任何好名字。