Dav*_*oia 3 windows graphics gpu vulkan
我正在关注 Vulkan 教程,窗口表面部分表示在 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!");
}
Run Code Online (Sandbox Code Playgroud)
但我们从不指定对象表面的范围createInfo。
然而,调用该vkGetPhysicalDeviceSurfaceCapabilitiesKHR函数会返回一个VkSurfaceCapabilitiesKHR对象,该对象具有一个currentExtent字段,根据文档该字段是
表面的当前宽度和高度,或特殊值(0xFFFFFFFF、0xFFFFFFFF),表示表面大小将由针对该表面的交换链的范围确定。
因此,在等于 (0xFFFFFFFF, 0xFFFFFFFF) 的特殊情况下,currentExtent我们知道表面的大小是由针对该表面的交换链决定的,但在所有其他情况下,表面似乎已经具有源自其他地方的大小,我们是期望将交换链的范围与该大小相匹配。
那么,当表面的大小不是由交换链确定时,它从何而来呢?
在 Windows 上,表面的初始范围等于您在创建窗口时设置的宽度和高度值(减去窗口边框、菜单等)。
vkGetPhysicalDeviceSurfaceCapabilitiesKHR当用户调整窗口大小时(在 Windows 上),返回的范围值也会自动更新。
还需要注意的是,在不同的平台上,max、min和current范围的行为有所不同。在 Windows 上,输出表面必须始终等于可绘制窗口大小,因此它们都相等。
| 归档时间: |
|
| 查看次数: |
1524 次 |
| 最近记录: |