Я следую Учебному пособию по 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!");
}
Но мы никогда не указывайте экстенты поверхности в объекте createInfo
.
Однако при вызове функции vkGetPhysicalDeviceSurfaceCapabilitiesKHR
возвращается объект VkSurfaceCapabilitiesKHR
с полем currentExtent
, которое согласно документации *
текущая ширина и высота поверхности или специальное значение (0xFFFFFFFF, 0xFFFFFFFF), указывающее, что размер поверхности будет определяться степенью свапчейна, нацеленного на поверхность.
Итак, в частном случае, когда currentExtent
равно (0xFFFFFFFF, 0xFFFFFFFF), мы знаем, что размер поверхности определяется цепью свопинга, нацеленной на поверхность, но во всех других случаях кажется, что поверхность уже имеет размер, происходящий откуда-то еще, и мы должны соответствовать экстентам цепочки подкачки этому размеру.
Так, где же размер s urface приходит, когда он не определяется swapchain?