Я следил за учебником на 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
с новым размером окна.
Любая помощь или комментарии будут очень благодарны.
Пример снимка экрана:
minImageExtent
вместоcurrentExtent
? - person Jherico   schedule 28.10.2018