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