Skip to content

Commit 914f3cb

Browse files
committed
Bring changes forward for resize.
1 parent e37bb22 commit 914f3cb

File tree

2 files changed

+41
-22
lines changed

2 files changed

+41
-22
lines changed

attachments/35_gltf_ktx.cpp

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,7 @@ class VulkanApplication {
302302
glfwInit();
303303

304304
glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
305+
glfwWindowHint(GLFW_RESIZABLE, GLFW_TRUE);
305306

306307
window = glfwCreateWindow(WIDTH, HEIGHT, "Vulkan", nullptr, nullptr);
307308
glfwSetWindowUserPointer(window, this);
@@ -1308,15 +1309,23 @@ class VulkanApplication {
13081309
.signalSemaphoreCount = 1, .pSignalSemaphores = &*renderFinishedSemaphore[imageIndex] };
13091310
queue.submit(submitInfo, *inFlightFences[currentFrame]);
13101311

1311-
1312-
const vk::PresentInfoKHR presentInfoKHR{ .waitSemaphoreCount = 1, .pWaitSemaphores = &*renderFinishedSemaphore[imageIndex],
1313-
.swapchainCount = 1, .pSwapchains = &*swapChain, .pImageIndices = &imageIndex };
1314-
result = queue.presentKHR(presentInfoKHR);
1315-
if (result == vk::Result::eErrorOutOfDateKHR || result == vk::Result::eSuboptimalKHR || framebufferResized) {
1316-
framebufferResized = false;
1317-
recreateSwapChain();
1318-
} else if (result != vk::Result::eSuccess) {
1319-
throw std::runtime_error("failed to present swap chain image!");
1312+
try {
1313+
const vk::PresentInfoKHR presentInfoKHR{ .waitSemaphoreCount = 1, .pWaitSemaphores = &*renderFinishedSemaphore[imageIndex],
1314+
.swapchainCount = 1, .pSwapchains = &*swapChain, .pImageIndices = &imageIndex };
1315+
result = queue.presentKHR(presentInfoKHR);
1316+
if (result == vk::Result::eErrorOutOfDateKHR || result == vk::Result::eSuboptimalKHR || framebufferResized) {
1317+
framebufferResized = false;
1318+
recreateSwapChain();
1319+
} else if (result != vk::Result::eSuccess) {
1320+
throw std::runtime_error("failed to present swap chain image!");
1321+
}
1322+
} catch (const vk::SystemError& e) {
1323+
if (e.code().value() == static_cast<int>(vk::Result::eErrorOutOfDateKHR)) {
1324+
recreateSwapChain();
1325+
return;
1326+
} else {
1327+
throw;
1328+
}
13201329
}
13211330
currentFrame = (currentFrame + 1) % MAX_FRAMES_IN_FLIGHT;
13221331
}

attachments/36_multiple_objects.cpp

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -348,6 +348,7 @@ class VulkanApplication {
348348
glfwInit();
349349

350350
glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
351+
glfwWindowHint(GLFW_RESIZABLE, GLFW_TRUE);
351352

352353
window = glfwCreateWindow(WIDTH, HEIGHT, "Vulkan", nullptr, nullptr);
353354
glfwSetWindowUserPointer(window, this);
@@ -1437,19 +1438,28 @@ class VulkanApplication {
14371438
};
14381439
queue.submit(submitInfo, *inFlightFences[currentFrame]);
14391440

1440-
const vk::PresentInfoKHR presentInfoKHR{
1441-
.waitSemaphoreCount = 1,
1442-
.pWaitSemaphores = &*renderFinishedSemaphore[imageIndex],
1443-
.swapchainCount = 1,
1444-
.pSwapchains = &*swapChain,
1445-
.pImageIndices = &imageIndex
1446-
};
1447-
result = queue.presentKHR(presentInfoKHR);
1448-
if (result == vk::Result::eErrorOutOfDateKHR || result == vk::Result::eSuboptimalKHR || framebufferResized) {
1449-
framebufferResized = false;
1450-
recreateSwapChain();
1451-
} else if (result != vk::Result::eSuccess) {
1452-
throw std::runtime_error("failed to present swap chain image!");
1441+
try {
1442+
const vk::PresentInfoKHR presentInfoKHR{
1443+
.waitSemaphoreCount = 1,
1444+
.pWaitSemaphores = &*renderFinishedSemaphore[imageIndex],
1445+
.swapchainCount = 1,
1446+
.pSwapchains = &*swapChain,
1447+
.pImageIndices = &imageIndex
1448+
};
1449+
result = queue.presentKHR(presentInfoKHR);
1450+
if (result == vk::Result::eErrorOutOfDateKHR || result == vk::Result::eSuboptimalKHR || framebufferResized) {
1451+
framebufferResized = false;
1452+
recreateSwapChain();
1453+
} else if (result != vk::Result::eSuccess) {
1454+
throw std::runtime_error("failed to present swap chain image!");
1455+
}
1456+
} catch (const vk::SystemError& e) {
1457+
if (e.code().value() == static_cast<int>(vk::Result::eErrorOutOfDateKHR)) {
1458+
recreateSwapChain();
1459+
return;
1460+
} else {
1461+
throw;
1462+
}
14531463
}
14541464
currentFrame = (currentFrame + 1) % MAX_FRAMES_IN_FLIGHT;
14551465
}

0 commit comments

Comments
 (0)