diff --git a/include/vkcv/Core.hpp b/include/vkcv/Core.hpp index 67973ba18bf11cc53b10b907f2c08bcfc78a5900..81b1defb95b74ae57b86cc5e581087a3407e6f5a 100644 --- a/include/vkcv/Core.hpp +++ b/include/vkcv/Core.hpp @@ -218,7 +218,7 @@ namespace vkcv /** * @brief start recording command buffers and increment frame index */ - void beginFrame(); + void beginFrame(uint32_t& width, uint32_t& height); void recordDrawcallsToCmdStream( const CommandStreamHandle cmdStreamHandle, diff --git a/projects/cmd_sync_test/src/main.cpp b/projects/cmd_sync_test/src/main.cpp index 55c11577295badb4459a57b47035fbb77379ab05..e3283fb188c2b15fc84cc05dd8a1be41456dd8fb 100644 --- a/projects/cmd_sync_test/src/main.cpp +++ b/projects/cmd_sync_test/src/main.cpp @@ -8,8 +8,9 @@ int main(int argc, const char** argv) { const char* applicationName = "First Mesh"; - const int windowWidth = 800; - const int windowHeight = 600; + uint32_t windowWidth = 800; + uint32_t windowHeight = 600; + vkcv::Window window = vkcv::Window::create( applicationName, windowWidth, @@ -138,10 +139,6 @@ int main(int argc, const char** argv) { vkcv::ImageHandle depthBuffer = core.createImage(vk::Format::eD32Sfloat, windowWidth, windowHeight).getHandle(); - window.e_resize.add([&](int width, int height) { - depthBuffer = core.createImage(vk::Format::eD32Sfloat, width, height).getHandle(); - }); - const vkcv::ImageHandle swapchainInput = vkcv::ImageHandle::createSwapchainImageHandle(); const vkcv::DescriptorSetUsage descriptorUsage(0, core.getDescriptorSet(descriptorSet).vulkanHandle); @@ -164,8 +161,18 @@ int main(int argc, const char** argv) { auto start = std::chrono::system_clock::now(); while (window.isWindowOpen()) { - window.pollEvents(); - core.beginFrame(); + vkcv::Window::pollEvents(); + + uint32_t swapchainWidth, swapchainHeight; + core.beginFrame(swapchainWidth, swapchainHeight); + + if ((swapchainWidth != windowWidth) || ((swapchainHeight != windowHeight))) { + depthBuffer = core.createImage(vk::Format::eD32Sfloat, swapchainWidth, swapchainHeight).getHandle(); + + windowWidth = swapchainWidth; + windowHeight = swapchainHeight; + } + auto end = std::chrono::system_clock::now(); auto deltatime = end - start; start = end; diff --git a/projects/first_mesh/src/main.cpp b/projects/first_mesh/src/main.cpp index 27b255c3a3413d747ea8e351d26eb1671bf9ebef..97e866c3687640e6b6c7b489aedf747d15d8dd2b 100644 --- a/projects/first_mesh/src/main.cpp +++ b/projects/first_mesh/src/main.cpp @@ -8,8 +8,8 @@ int main(int argc, const char** argv) { const char* applicationName = "First Mesh"; - const int windowWidth = 800; - const int windowHeight = 600; + uint32_t windowWidth = 800; + uint32_t windowHeight = 600; vkcv::Window window = vkcv::Window::create( applicationName, @@ -137,10 +137,6 @@ int main(int argc, const char** argv) { vkcv::ImageHandle depthBuffer = core.createImage(vk::Format::eD32Sfloat, windowWidth, windowHeight).getHandle(); - window.e_resize.add([&](int width, int height) { - depthBuffer = core.createImage(vk::Format::eD32Sfloat, width, height).getHandle(); - }); - const vkcv::ImageHandle swapchainInput = vkcv::ImageHandle::createSwapchainImageHandle(); const vkcv::Mesh renderMesh(vertexBufferBindings, indexBuffer.getVulkanHandle(), mesh.vertexGroups[0].numIndices); @@ -151,11 +147,20 @@ int main(int argc, const char** argv) { auto start = std::chrono::system_clock::now(); while (window.isWindowOpen()) { vkcv::Window::pollEvents(); - - if(window.getHeight() == 0 || window.getWidth() == 0) - continue; - - core.beginFrame(); + + if(window.getHeight() == 0 || window.getWidth() == 0) + continue; + + uint32_t swapchainWidth, swapchainHeight; + core.beginFrame(swapchainWidth, swapchainHeight); + + if ((swapchainWidth != windowWidth) || ((swapchainHeight != windowHeight))) { + depthBuffer = core.createImage(vk::Format::eD32Sfloat, swapchainWidth, swapchainHeight).getHandle(); + + windowWidth = swapchainWidth; + windowHeight = swapchainHeight; + } + auto end = std::chrono::system_clock::now(); auto deltatime = end - start; start = end; diff --git a/projects/first_triangle/src/main.cpp b/projects/first_triangle/src/main.cpp index b4a08659a94b2de63e7b47efc07b1cc8ba601b8d..70366d1325bc101d9cfaa82272d70afc5a3865ae 100644 --- a/projects/first_triangle/src/main.cpp +++ b/projects/first_triangle/src/main.cpp @@ -142,7 +142,10 @@ int main(int argc, const char** argv) { while (window.isWindowOpen()) { window.pollEvents(); - core.beginFrame(); + + uint32_t swapchainWidth, swapchainHeight; // No resizing = No problem + core.beginFrame(swapchainWidth, swapchainHeight); + auto end = std::chrono::system_clock::now(); auto deltatime = end - start; start = end; diff --git a/src/vkcv/Core.cpp b/src/vkcv/Core.cpp index c9ac4decbc5ae19d77fa33726566ecb5c8b31d3c..ddcb0086db0053a4c0afdf70b9b95a27f822567e 100644 --- a/src/vkcv/Core.cpp +++ b/src/vkcv/Core.cpp @@ -127,7 +127,7 @@ namespace vkcv return Result::SUCCESS; } - void Core::beginFrame() { + void Core::beginFrame(uint32_t& width, uint32_t& height) { if (m_swapchain.shouldUpdateSwapchain()) { m_Context.getDevice().waitIdle(); @@ -149,6 +149,11 @@ namespace vkcv } m_Context.getDevice().waitIdle(); // TODO: this is a sin against graphics programming, but its getting late - Alex + + const auto& extent = m_swapchain.getExtent(); + + width = extent.width; + height = extent.height; } void Core::recordDrawcallsToCmdStream(