instance之后,开始选取设备VkPhysicalDevice,教程说要通过instance找到一个支持我们需要的功能的显卡,这里并且指出其实可以同时创建使用多个VkPhysicalDevice。
先枚举出物理设备们,然后判断是否适用,由于入门不需要花里胡哨的,这只需要找出一个适用的就可以采纳了。
教程还教了一个给设备估分选出最合适的选取方法。。暂且不管吧,往下走。
这里教程就提到queue families
VK里操作都基于提交到队列,但是不同的queue family支持不同的功能,所以要找出需要的功能对应的queue family才行,像我们这会儿要画画肯定要支持graphic。
这个结构体用来判断是否成功找出合适的queue family。
这里先枚举出该设备的所有queue families,然后看flag是不是VK_QUEUE_GRAPHICS_BIT,咱们这需要一个支持图形的所以用的这个flag。
我们根据family找到合适的physicalDevice之后,要创建一个逻辑设备作为操作物理设备的接口,
这里说还能对一个物理设备创建好多个逻辑设备如果有需求。
VkDevice device;
教程说一个queue family仅仅允许你创建几个queue,而且你用不完,因为用多线程提交command buffer开销更低
这个indices好像。。刚刚找到过了,感觉不需要再来一次?
首先是指定需要使用的功能VkPhysicalDeviceFeatures deviceFeatures{} ,但教程说这个后面再填充。
然后就创建逻辑设备的createInfo,创建队列的createinfo以及别的属性填上,vkGetDeviceQueue创建。
VkQueue graphicsQueue会持有队列句柄。
总结 : 拿着instance枚举物理设备,然后遍历物理设备的queue families找出一个能用的就拿到物理设备,然后指定需要用到的设备功能,然后填好队列信息,extension信息,拿着物理设备以及他的family的索引,创建逻辑设备,创建逻辑设备会顺便把队列建立完毕。