From c50a989f4b767b9a724d2c7204c395b5286e6c14 Mon Sep 17 00:00:00 2001
From: Tobias Frisch <tfrisch@uni-koblenz.de>
Date: Tue, 17 May 2022 23:15:02 +0200
Subject: [PATCH] SPH demo window can now be resized

Signed-off-by: Tobias Frisch <tfrisch@uni-koblenz.de>
---
 projects/sph/src/main.cpp | 30 ++++++++++++++++++++++--------
 1 file changed, 22 insertions(+), 8 deletions(-)

diff --git a/projects/sph/src/main.cpp b/projects/sph/src/main.cpp
index 4e98a301..dafea942 100644
--- a/projects/sph/src/main.cpp
+++ b/projects/sph/src/main.cpp
@@ -23,7 +23,7 @@ int main(int argc, const char **argv) {
         { VK_KHR_SWAPCHAIN_EXTENSION_NAME }
     );
 
-    vkcv::WindowHandle windowHandle = core.createWindow(applicationName, 1920, 1080, false);
+    vkcv::WindowHandle windowHandle = core.createWindow(applicationName, 1280, 720, true);
     vkcv::Window& window = core.getWindow(windowHandle);
 
     vkcv::camera::CameraManager cameraManager(window);
@@ -226,7 +226,7 @@ int main(int argc, const char **argv) {
     cameraManager.getCamera(camIndex1).setPosition(glm::vec3(0.0f, 0.0f, -2.5f));
     cameraManager.getCamera(camIndex1).setCenter(glm::vec3(0.0f, 0.0f, 0.0f));
 
-	auto swapchainExtent = core.getSwapchain(window.getSwapchainHandle()).getExtent();
+	const auto swapchainExtent = core.getSwapchain(window.getSwapchainHandle()).getExtent();
 	
     vkcv::ImageHandle colorBuffer = core.createImage(
 			colorFormat,
@@ -240,9 +240,12 @@ int main(int argc, const char **argv) {
 
     //tone mapping shader & pipeline
     vkcv::ComputePipelineHandle tonemappingPipe;
-    vkcv::DescriptorSetHandle tonemappingDescriptor = PipelineInit::ComputePipelineInit(&core, vkcv::ShaderStage::COMPUTE,
-                                                                                        "shaders/tonemapping.comp", tonemappingPipe);
-
+    vkcv::DescriptorSetHandle tonemappingDescriptor = PipelineInit::ComputePipelineInit(
+			&core,
+			vkcv::ShaderStage::COMPUTE,
+			"shaders/tonemapping.comp",
+			tonemappingPipe
+	);
 
     while (vkcv::Window::hasOpenWindow()) {
         vkcv::Window::pollEvents();
@@ -251,6 +254,16 @@ int main(int argc, const char **argv) {
         if (!core.beginFrame(swapchainWidth, swapchainHeight, windowHandle)) {
             continue;
         }
+		
+		if ((core.getImageWidth(colorBuffer) != swapchainWidth) ||
+			(core.getImageHeight(colorBuffer) != swapchainHeight)) {
+			colorBuffer = core.createImage(
+					colorFormat,
+					swapchainWidth,
+					swapchainHeight,
+					1, false, true, true
+			).getHandle();
+		}
 
         color.fill(&colorData);
         position.fill(&pos);
@@ -376,7 +389,8 @@ int main(int argc, const char **argv) {
 				pushConstantsDraw,
                 {drawcalls},
                 { colorBuffer },
-                windowHandle);
+                windowHandle
+		);
 	
 		bloomAndFlares.recordEffect(cmdStream, colorBuffer, colorBuffer);
 
@@ -391,8 +405,8 @@ int main(int argc, const char **argv) {
         core.writeDescriptorSet(tonemappingDescriptor, tonemappingDescriptorWrites);
 
         uint32_t tonemappingDispatchCount[3];
-        tonemappingDispatchCount[0] = std::ceil(swapchainExtent.width / 8.f);
-        tonemappingDispatchCount[1] = std::ceil(swapchainExtent.height / 8.f);
+        tonemappingDispatchCount[0] = std::ceil(swapchainWidth / 8.f);
+        tonemappingDispatchCount[1] = std::ceil(swapchainHeight / 8.f);
         tonemappingDispatchCount[2] = 1;
 
         core.recordComputeDispatchToCmdStream(
-- 
GitLab