繁体   English   中英

Vulkan,您可以直接公开扩展吗?

[英]Vulkan, can you expose extensions directly?

获取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;
    }
}

我想知道是否可以直接链接到文件以显示扩展名。

问题是您要链接的运行时库是平台Vulkan驱动程序。 驱动程序可能未实现扩展,因为它是可选的,因此尝试直接解析链接只会导致您的应用程序无法在没有扩展的平台上以动态链接器符号解析错误开始。

通常,您会在加载时将通过扩展加载机制加载的扩展缓存到本地函数指针中,并且该本地函数指针可以具有您想要为其赋予的任何好名字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM