Vulkan Cookbook 第一章 3 连接Vulkan Loader库

连接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的函数地址了。

 

你可能感兴趣的:(Vulkan,Cookbook)