/* * UI overlay class using ImGui * * Copyright (C) 2017-2024 by Sascha Willems - www.saschawillems.de * * This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT) */ #pragma once #include #include #include #include #include #include #include #include #include "../core/VulkanTools.h" #include "../core/VulkanDebug.h" #include "../memory/VulkanBuffer.h" #include "../device/VulkanDevice.h" #include "../external/imgui/imgui.h" #if defined(__ANDROID__) #include "VulkanAndroid.h" #endif #if defined(__APPLE__) #include #endif namespace vks { class UIOverlay { public: vks::VulkanDevice* device{ nullptr }; VkQueue queue{ VK_NULL_HANDLE }; VkSampleCountFlagBits rasterizationSamples{ VK_SAMPLE_COUNT_1_BIT }; uint32_t subpass{ 0 }; vks::Buffer vertexBuffer; vks::Buffer indexBuffer; int32_t vertexCount{ 0 }; int32_t indexCount{ 0 }; std::vector shaders; VkDescriptorPool descriptorPool{ VK_NULL_HANDLE }; VkDescriptorSetLayout descriptorSetLayout{ VK_NULL_HANDLE }; VkDescriptorSet descriptorSet{ VK_NULL_HANDLE }; VkPipelineLayout pipelineLayout{ VK_NULL_HANDLE }; VkPipeline pipeline{ VK_NULL_HANDLE }; VkDeviceMemory fontMemory{ VK_NULL_HANDLE }; VkImage fontImage{ VK_NULL_HANDLE }; VkImageView fontView{ VK_NULL_HANDLE }; VkSampler sampler{ VK_NULL_HANDLE }; struct PushConstBlock { glm::vec2 scale; glm::vec2 translate; } pushConstBlock; bool visible{ true }; bool updated{ false }; float scale{ 1.0f }; float updateTimer{ 0.0f }; UIOverlay(); ~UIOverlay(); void preparePipeline(const VkPipelineCache pipelineCache, const VkRenderPass renderPass, const VkFormat colorFormat, const VkFormat depthFormat); void prepareResources(); bool update(); void draw(const VkCommandBuffer commandBuffer); void resize(uint32_t width, uint32_t height); void freeResources(); bool header(const char* caption); bool checkBox(const char* caption, bool* value); bool checkBox(const char* caption, int32_t* value); bool radioButton(const char* caption, bool value); bool inputFloat(const char* caption, float* value, float step, uint32_t precision); bool sliderFloat(const char* caption, float* value, float min, float max); bool sliderInt(const char* caption, int32_t* value, int32_t min, int32_t max); bool comboBox(const char* caption, int32_t* itemindex, std::vector items); bool button(const char* caption); bool colorPicker(const char* caption, float* color); void text(const char* formatstr, ...); }; }