交换范围
现在只剩下一个属性需要设置了,我们添加一个叫做chooseSwapExtent的函数来设置它:
VkExtent2D chooseSwapExtent(const VkSurfaceCapabilitiesKHR &capabilities) {
}
交换范围是交换链中图像的分辨率,它几乎总是和我们要显示图像的窗口的分辨率相同。VkSurfaceCapabilitiesKHR结构体定义了可用的分辨率范围。Vulkan通过currentExtent成员变量来告知适合我们窗口的交换范围。一些窗口系统会使用一个特殊值,uint32_t变量类型的最大值,表示允许我们自己选择对于窗口最合适的交换范围,但我们选择的交换范围需要在minImageExtent与maxImageExtent的范围内。
VkExtent2D chooseSwapExtent(const VkSurfaceCapabilitiesKHR &capabilities) {
if (capabilities.currentExtent.width != std::numeric_limits<uint32_t>::max()) {
return capabilities.currentExtent;
} else {
VkExtent2D actualExtent = {WIDTH, HEIGHT};
actualExtent.width = std::max(capabilities.minImageExtent.width, std::min(capabilities.maxImageExtent.width, actualExtent.width));
actualExtent.height = std::max(capabilities.minImageExtent.height, std::min(capabilities.maxImageExtent.height, actualExtent.height));
return actualExtent;
}
}
代码中max和min函数用于在允许的范围内选择交换范围的高度值和宽度值,需要在源文件中包含algorithm头文件才能够使用它们。