连接Vulkan Loader库
译者注:示例代码点击此处
对Vulkan API的支持由图形硬件供应商实现,并通过图形驱动程序提供。每个供应商都可以在他们选择的任何动态库中实现它,甚至可以通过驱动程序更新来更改它。
这就是为什么和驱动程序一起安装Vulkan Loader的原因。我们也可以从安装SDK的文件夹中安装它。它允许开发人员通过Windows操作系统上的vulkan-1.dll库或Linux操作系统上的libvulkan.so.1库访问Vulkan API入口点。
Vulkan Loader负责将Vulkan API调用传输到适当的图形驱动程序。在一台计算机上可能有很多的硬件组件支持Vulkan,但是使用Vulkan Loader我们不需要知道应该使用哪个驱动程序,或者我们应该连接哪个库以便能够使用Vulkan。开发人员只需要知道Vulkan库的名称:Windows上的vulkan-1.dll或Linux上的libvulkan.so.1。当我们想在我们的应用程序中使用Vulkan时,我们只需要在我们的代码中连接它(加载它)。
提示:在Windows操作系统上,Vulkan Loader库名为vulkan-1.dll。 在Linux OS上,Vulkan Loader库名为libvulkan.so.1。
怎么做...
在Windows操作系统上:
1.准备一个名为vulkan_library的HMODULE类型的变量。
2.调用LoadLibrary("vulkan-1.dll")并将此操作的结果存储在vulkan_library变量中。
3.通过检查vulkan_library变量的值是否与nullptr不同,确认此操作已成功。
在Liunx操作系统上:
1.准备一个名为vulkan_library的void*类型的变量。
2.调用dloepn("libvulkan.so.1",RTLD_NOW)并将此操作的结果存储在vulkan_library变量中。
3.通过检查vulkan_library变量的值是否与nullptr不同,确认此操作已成功。
这个怎么运作...
LoadLibrary()是Windows操作系统上可用的功能。 dlopen()是Linux操作系统上可用的函数。 它们都将指定的动态链接库加载(打开)到我们应用程序的内存空间中。 这样我们就可以加载(获取指针)从给定库实现和导出的函数,并在我们的应用程序中使用它们。
如下所示:
#if defined _WIN32
vulkan_library = LoadLibrary( "vulkan-1.dll" );
#elif defined __linux
vulkan_library = dlopen( "libvulkan.so.1", RTLD_NOW ); #endif
if( vulkan_library == nullptr ) {
std::cout << "Could not connect with a Vulkan Runtime library." << std::endl; return false;
}
return true;
成功调用后,我们可以加载使用Vulkan获取所有API的函数地址了。