Я следовал учебному руководству на https://vulkan -tutorial.com ... Я создал его без использования GLFW etension.Пока что я дошёл до «Перестановки цепочек обмена», и все правильно настроено и отрисовано.
Однако я не могу заставить работать корректно изменение размера!
Я подключилв XCB_RESIZE_REQUEST
и я устанавливаю свою структуру информации w / h следующим образом:
if (resize->width > 0) { info.width = resize->width; }
if (resize->height > 0) { info.height = resize->height; }
info.framebufferResized = true;
Что вызывает (при следующем вызове drawFrame()
) recreateSwapchain()
, который будет вызван:
if (res == VK_ERROR_OUT_OF_DATE_KHR || res == VK_SUBOPTIMAL_KHR || info.framebufferResized) {
info.framebufferResized = false;
recreateSwapchain();
} else if (res != VK_SUCCESS) {
throw runtime_error("failed to present swap chain image!");
}
recreateSwapchain() {
vkDeviceWaitIdle(info.device);
cleanupSwapchain();
querySwapchainSupport(info.physicalDevice);
createSwapchain();
createImageViews();
createRenderPass();
createGraphicsPipeline();
createFramebuffers();
createCommandBuffers();
}
Я выполнил некоторую отладку и обнаружил, что swapchainSupport.capabilities.minImageExtent.width
(и высота) не отличаются от начальных значений! .. То есть этот вызов
querySwapchainSupport(VkPhysicalDevice physicalDevice) {
VkResult res = vkGetPhysicalDeviceSurfaceCapabilitiesKHR(
physicalDevice, info.surface, &info.swapchainSupport.capabilities);
assert(res == VK_SUCCESS);
не обновляетinfo.swapchainSupport.capabilities
с новым размером окна.
Любая помощь или комментарии будут с благодарностью.
Пример снимка экрана: