0、序
最近终于把games101差不多追完了,打算接下来学一下图形学的API,参考了网上的一些资料,比较了一下directX系列,opengl,vulkan,决定学习vulkan(立下自己不轻易狗带的flag)。
自己比较喜欢在linux环境下写代码,决定在VM虚拟机中的Ubuntu18.04中搭建vulkan环境。
1、虚拟机下的踩坑
结论:虚拟机下安装vulkan环境失败
- 在官网上下载了SDK后,运行vulkaninfo命令总是失败,报错如下
vulkaninfo.h 248 vkEnumeratePhysicalDevice: failed with ERROR_INITIALIZATION_FAILED
- Google了一下并没有找到合适的解答,寻思了一下,这报错像是在找GPU的时候失败了。因为主机中是nvidia的GPU,我尝试在虚拟机中搜索了nvidia_icd,果然无果,看来是虚拟机中没有nvidia GPU的icd。
- 接下来我又尝试查看了一下虚拟机中的显卡情况
$ lspci | grep -i vga
00:0f.0 VGA compatible controller: VMware SVGA II Adapter
阿勒勒,nvidia的显卡呢?
- 又Google了一下,大概解释是,虚拟机并没有权限直接使用GPU,而是VM虚拟一个GPU出来,比如上面的 SVGA II,然后再间接利用主机的GPU实现图形化加速,因此在Ubuntu看来,机器上只有这个SVGA II的GPU。(http://vmware-svga.sourceforge.net/index.old.html)。
- 下面是来自vulkan官网的一个结构图
- 按照我的理解,下载的SDK,主要是loader和layer部分的代码,而ICD则由GPU厂商提供(比如在linux中,nvidia的GPU对应的icd的json文件为nvidia_icd)。
- 现在Ubuntu中的GPU为SVGA II的GPU,那么就需要VMware提供相应的icd,搜索了一下,目前VMware虚拟的GPU貌似并不支持这一点,这样就没办法在VM虚拟机中搭建vulkan环境。
2. windows下的安装
于是我回到win10的主机环境,安装了官网提供的windows的SDK,这次在命令行输入vkcube检测:
哈哈,不愧是windows,瞬间成功!
3. vs2019中的环境配置
最后在vs2019中配置头文件和库的搜索路径,使得编译的时候能够找到需要的文件。
最简单的可以参考官网的windows安装文档,把SDK中的template复制到vs的C++ template中,每次要创建一个vulkan项目的时候就打开这个模板就好了。
不过我更希望自己来配置路径,这样出了问题或者换了一些库自己能更好出来。
因为接下来打算跟着这个教程学习,所以按照这上面的教程配置了路径,默认的模板中(或者说官方的SDK)使用的是SDL库来创建窗口,而教程中使用GLFW库来创建窗口。
具体来说,在VS2019中要配置好路径需要设置3个变量
- 属性页/C++/常规/附加包含目录(指定头文件搜索路径)
- 属性页/链接器/常规/附件库目录(指定链接时库文件的搜索路径)
- 属性页/链接器/输入/附加依赖项(指定需要连接的动态库)
百度了一下,windows下动态库文件有两种,一种是.lib, 一种是.dll,.lib类似于头文件,记录了.dll的各种符号等等,不包含实际的代码。.dll则对应linux下的.so。
最后,把配置好的vulkan编程环境导出为模板即可。以后便可以直接用该模版而不需要重新设置路径。
如果要删除自定义的模板,需要删除两个地方对应的zip文件
usr家目录\Visual Studio 2019\My Exported Templates
usr家目录\Visual Studio 2019\Templates\ProjectTemplates
OK,整个环境配置完成!