问题描述
如果我们按照我的理解分配 error_data
,我们有一个缓冲区,并且图像会立即呈现在表面上,
但同时 VkSwapchainCreateInfoKHR.presentMode = VK_PRESENT_MODE_IMMEDIATE_KHR;
在我的 GTX 1070 上。SwapChainDetails.surfaceCapabilities.minImageCount = 2;
是否意味着缓冲区的最小数量应该是 2 ?
它是如何工作的?
解决方法
他们根本没有关系。您有多少缓冲区与它们的显示方式无关。
立即呈现意味着,当您呈现图像时,它会立即显示。如标准所述:
呈现引擎不会等待垂直消隐期来更新当前图像
如果演示引擎只允许您使用一张交换链图像,那么这意味着获取必须等到图像完成显示。这会使立即演示变得毫无意义。
现在,您可能认为获取这样的图像应该立即发生。但这意味着您可以在演示引擎仍在读取图像时渲染图像,从而导致潜在的损坏。但这不是即时演示的用途。立即呈现不会改变呈现引擎和用户代码之间的所有权动态;它只会改变交换链图像的呈现方式。
写入实际呈现的图像的能力受“共享”呈现模式(VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR
和 VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR
)的控制。