Vulkan 中如何确定曲面的大小?
How is the size of a surface determined in Vulkan?
我正在学习 Vulkan 教程,Window Surface 部分说在 Windows 上使用以下代码创建了一个 VkSurfaceKHR
对象:
VkWin32SurfaceCreateInfoKHR createInfo = {};
createInfo.sType = VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR;
createInfo.hwnd = glfwGetWin32Window(window);
createInfo.hinstance = GetModuleHandle(nullptr);
if (vkCreateWin32SurfaceKHR(instance, &createInfo, nullptr, &surface) != VK_SUCCESS) {
throw std::runtime_error("failed to create window surface!");
}
但我们从未在 createInfo
对象中指定表面的范围。
但是调用 vkGetPhysicalDeviceSurfaceCapabilitiesKHR
函数 returns 一个 VkSurfaceCapabilitiesKHR
对象,它有一个 currentExtent
字段,根据 documentation 是
the current width and height of the surface, or the special value (0xFFFFFFFF, 0xFFFFFFFF) indicating that the surface size will be determined by the extent of a swapchain targeting the surface.
所以在 currentExtent
等于 (0xFFFFFFFF, 0xFFFFFFFF) 的特殊情况下,我们知道表面的大小是由针对表面的交换链决定的,但在所有其他情况下,表面似乎已经有一个来自其他地方的大小,我们应该将交换链的范围与该大小相匹配。
那么当表面的大小不由交换链决定时,它从何而来?
在 Windows 上,表面的初始范围等于您在创建 window 时设置的宽度和高度值(减去 window 边框、菜单等) .
vkGetPhysicalDeviceSurfaceCapabilitiesKHR
返回的范围值也会在用户调整 window 大小时(在 Windows 上)自动更新。
同样重要的是要注意,在不同的平台上,max
、min
和 current
范围的行为不同。在 Windows 上,输出表面必须始终等于可绘制的 window 大小,因此它们都将相等。
我正在学习 Vulkan 教程,Window Surface 部分说在 Windows 上使用以下代码创建了一个 VkSurfaceKHR
对象:
VkWin32SurfaceCreateInfoKHR createInfo = {};
createInfo.sType = VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR;
createInfo.hwnd = glfwGetWin32Window(window);
createInfo.hinstance = GetModuleHandle(nullptr);
if (vkCreateWin32SurfaceKHR(instance, &createInfo, nullptr, &surface) != VK_SUCCESS) {
throw std::runtime_error("failed to create window surface!");
}
但我们从未在 createInfo
对象中指定表面的范围。
但是调用 vkGetPhysicalDeviceSurfaceCapabilitiesKHR
函数 returns 一个 VkSurfaceCapabilitiesKHR
对象,它有一个 currentExtent
字段,根据 documentation 是
the current width and height of the surface, or the special value (0xFFFFFFFF, 0xFFFFFFFF) indicating that the surface size will be determined by the extent of a swapchain targeting the surface.
所以在 currentExtent
等于 (0xFFFFFFFF, 0xFFFFFFFF) 的特殊情况下,我们知道表面的大小是由针对表面的交换链决定的,但在所有其他情况下,表面似乎已经有一个来自其他地方的大小,我们应该将交换链的范围与该大小相匹配。
那么当表面的大小不由交换链决定时,它从何而来?
在 Windows 上,表面的初始范围等于您在创建 window 时设置的宽度和高度值(减去 window 边框、菜单等) .
vkGetPhysicalDeviceSurfaceCapabilitiesKHR
返回的范围值也会在用户调整 window 大小时(在 Windows 上)自动更新。
同样重要的是要注意,在不同的平台上,max
、min
和 current
范围的行为不同。在 Windows 上,输出表面必须始终等于可绘制的 window 大小,因此它们都将相等。