windows - Vulkan 中如何确定曲面的大小?

标签 windows graphics gpu 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 函数会返回一个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 上,表面的初始范围等于您在创建窗口时设置的宽度和高度值(减去窗口边框、菜单等)。

vkGetPhysicalDeviceSurfaceCapabilitiesKHR 返回的范围值也会在用户调整窗口大小时(在 Windows 上)自动更新。

同样重要的是要注意,在不同的平台上,maxmincurrent 范围的行为不同。在 Windows 上,输出表面必须始终等于可绘制窗口的大小,因此它们都是相等的。

关于windows - Vulkan 中如何确定曲面的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59620313/

相关文章:

python - 如何在 python3 代码中找到 python2 路径?

android - 如何知道OpenCv4Android native中是否使用了GPU计算

gpu - Tensorflow 不使用 GPU

tensorflow - Keras CNN 如何减少大图像尺寸的 GPU 内存使用?

c# - 为什么 Process.Start 会意外返回 false

.net - 是否值得同步 I/O 密集型线程以提高总体磁盘性能?

math - 从平面上的 2D 点转换为 3D

c# - 如何在 .Net 中可视化复杂图形?

java - 我如何找出 BufferedImage 在 Java 中有 Alpha 的位置?

c++ - Main 只接收参数的首字母