这里只是一个快速问题。。。
所以,正如你所知,当你创建Vulkan设备时,你需要确保你选择的物理设备支持用vkGetPhysicalDeviceSurfaceSupportKHR()
呈现在曲面上,对吧?,也就是说,您需要在创建设备之前创建曲面。
现在假设在运行时,用户可以按下一个按钮,打开一个新窗口,然后会在该窗口中绘制内容,所以你需要一个新的表面,对吗?,但设备已经创建。。。
这是否意味着我必须在创建设备之前创建所有表面,或者我必须重新创建设备,但是,如果需要重新创建,从该设备创建/分配的所有东西会发生什么?
这是否意味着我必须在创建设备之前创建所有表面,还是必须重新创建设备
两者都没有。
如果物理设备无法绘制到表面。。。然后你需要找到一个可以的物理设备。如果您有2个GPU,并且每个GPU都插入不同的监视器,则可能会发生这种情况。每个GPU只能绘制到其监视器上的表面(尽管有时有一些实现方法可以绕过这一点(。
因此,如果你正在使用的逻辑VkDevice
的物理设备无法绘制到表面,你就不会">re创建";设备。您创建了一个新的设备,这个设备几乎肯定无法绘制到旧设备可以绘制的表面。因此,在这种情况下,您需要两个独立的设备来渲染到两个表面。
但对于大多数多监视器的情况来说,这不是问题。如果你有一个支持多监视器输出的GPU,那么你创建的任何窗口几乎肯定都会与该GPU兼容。集成GPU+离散GPU的情况也倾向于支持相同的表面。
Vulkan API只是要求您检查是否存在不兼容,然后尽可能地进行处理。这可能涉及到将窗口移动到适当的监视器或其他操作系统特定的东西。