From 22d9496cbfacc52d87302daaf1636b1d997d5398 Mon Sep 17 00:00:00 2001
From: Tobias Frisch <tfrisch@uni-koblenz.de>
Date: Sat, 8 Jan 2022 14:35:36 +0100
Subject: [PATCH] Added drawing gui only without clearing

Signed-off-by: Tobias Frisch <tfrisch@uni-koblenz.de>
---
 projects/wobble_bobble/.gitignore     |  1 +
 projects/wobble_bobble/CMakeLists.txt |  4 +-
 projects/wobble_bobble/src/main.cpp   | 76 +++++++++++++++++++++++++++
 3 files changed, 79 insertions(+), 2 deletions(-)
 create mode 100644 projects/wobble_bobble/.gitignore

diff --git a/projects/wobble_bobble/.gitignore b/projects/wobble_bobble/.gitignore
new file mode 100644
index 00000000..7ed07ed4
--- /dev/null
+++ b/projects/wobble_bobble/.gitignore
@@ -0,0 +1 @@
+wobble_bobble
diff --git a/projects/wobble_bobble/CMakeLists.txt b/projects/wobble_bobble/CMakeLists.txt
index 1dd599da..9842b13b 100644
--- a/projects/wobble_bobble/CMakeLists.txt
+++ b/projects/wobble_bobble/CMakeLists.txt
@@ -15,7 +15,7 @@ add_executable(wobble_bobble
 fix_project(wobble_bobble)
 
 # including headers of dependencies and the VkCV framework
-target_include_directories(wobble_bobble SYSTEM BEFORE PRIVATE ${vkcv_include} ${vkcv_includes} ${vkcv_camera_include} ${vkcv_shader_compiler_include})
+target_include_directories(wobble_bobble SYSTEM BEFORE PRIVATE ${vkcv_include} ${vkcv_includes} ${vkcv_camera_include} ${vkcv_gui_include} ${vkcv_shader_compiler_include})
 
 # linking with libraries from all dependencies and the VkCV framework
-target_link_libraries(wobble_bobble vkcv vkcv_camera vkcv_shader_compiler)
+target_link_libraries(wobble_bobble vkcv vkcv_camera vkcv_gui vkcv_shader_compiler)
diff --git a/projects/wobble_bobble/src/main.cpp b/projects/wobble_bobble/src/main.cpp
index 829181d7..28610bf8 100644
--- a/projects/wobble_bobble/src/main.cpp
+++ b/projects/wobble_bobble/src/main.cpp
@@ -1,4 +1,80 @@
 
+#include <vkcv/Core.hpp>
+#include <vkcv/camera/CameraManager.hpp>
+#include <vkcv/gui/GUI.hpp>
+
 int main(int argc, const char **argv) {
+	const char* applicationName = "Wobble Bobble";
+	
+	uint32_t windowWidth = 800;
+	uint32_t windowHeight = 600;
+	
+	vkcv::Core core = vkcv::Core::create(
+			applicationName,
+			VK_MAKE_VERSION(0, 0, 1),
+			{vk::QueueFlagBits::eTransfer, vk::QueueFlagBits::eGraphics, vk::QueueFlagBits::eCompute},
+			{ VK_KHR_SWAPCHAIN_EXTENSION_NAME }
+	);
+	vkcv::WindowHandle windowHandle = core.createWindow(applicationName, windowWidth, windowHeight, true);
+	vkcv::Window& window = core.getWindow(windowHandle);
+	vkcv::camera::CameraManager cameraManager(window);
+	
+	vkcv::gui::GUI gui (core, windowHandle);
+	
+	cameraManager.addCamera(vkcv::camera::ControllerType::PILOT);
+	cameraManager.addCamera(vkcv::camera::ControllerType::TRACKBALL);
+	
+	auto swapchainExtent = core.getSwapchain(windowHandle).getExtent();
+	
+	vkcv::ImageHandle depthBuffer = core.createImage(
+			vk::Format::eD32Sfloat,
+			swapchainExtent.width,
+			swapchainExtent.height
+	).getHandle();
+	
+	auto start = std::chrono::system_clock::now();
+	while (vkcv::Window::hasOpenWindow()) {
+		vkcv::Window::pollEvents();
+		
+		if(window.getHeight() == 0 || window.getWidth() == 0)
+			continue;
+		
+		uint32_t swapchainWidth, swapchainHeight;
+		if (!core.beginFrame(swapchainWidth, swapchainHeight,windowHandle)) {
+			continue;
+		}
+		
+		if ((swapchainWidth != swapchainExtent.width) || ((swapchainHeight != swapchainExtent.height))) {
+			depthBuffer = core.createImage(
+					vk::Format::eD32Sfloat,
+					swapchainWidth,
+					swapchainHeight
+			).getHandle();
+			
+			swapchainExtent.width = swapchainWidth;
+			swapchainExtent.height = swapchainHeight;
+		}
+		
+		auto end = std::chrono::system_clock::now();
+		auto deltatime = std::chrono::duration_cast<std::chrono::microseconds>(end - start);
+		
+		start = end;
+		cameraManager.update(0.000001 * static_cast<double>(deltatime.count()));
+		
+		auto cmdStream = core.createCommandStream(vkcv::QueueType::Graphics);
+		
+		core.prepareSwapchainImageForPresent(cmdStream);
+		core.submitCommandStream(cmdStream);
+		
+		gui.beginGUI();
+		
+		ImGui::Begin("Settings");
+		ImGui::End();
+		
+		gui.endGUI();
+		
+		core.endFrame(windowHandle);
+	}
+	
 	return 0;
 }
-- 
GitLab