6void ven::Gui::init(GLFWwindow* window, 
const VkInstance instance, 
const Device* device, 
const VkRenderPass renderPass)
 
    8    VkDescriptorPool pool = 
nullptr;
 
    9    ImGui_ImplVulkan_InitInfo init_info{};
 
   10    ImGui::CreateContext();
 
   11    m_io = &ImGui::GetIO();
 
   12    m_io->IniFilename = 
nullptr;
 
   14    constexpr std::array<VkDescriptorPoolSize, 11> pool_sizes = {{
 
   16            { .type=VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, .descriptorCount=
DESCRIPTOR_COUNT },
 
   17            { .type=VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, .descriptorCount=
DESCRIPTOR_COUNT },
 
   18            { .type=VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, .descriptorCount=
DESCRIPTOR_COUNT },
 
   19            { .type=VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, .descriptorCount=
DESCRIPTOR_COUNT },
 
   20            { .type=VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, .descriptorCount=
DESCRIPTOR_COUNT },
 
   21            { .type=VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, .descriptorCount=
DESCRIPTOR_COUNT },
 
   22            { .type=VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, .descriptorCount=
DESCRIPTOR_COUNT },
 
   23            { .type=VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, .descriptorCount=
DESCRIPTOR_COUNT },
 
   24            { .type=VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, .descriptorCount=
DESCRIPTOR_COUNT },
 
   25            { .type=VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, .descriptorCount=
DESCRIPTOR_COUNT }
 
   27    const VkDescriptorPoolCreateInfo pool_info = {
 
   28            VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO,
 
   30            VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT,
 
   32            std::size(pool_sizes),
 
   36    if (vkCreateDescriptorPool(device->
device(), &pool_info, 
nullptr, &pool) != VK_SUCCESS) {
 
   37        throw std::runtime_error(
"Failed to create ImGui descriptor pool");
 
   40    init_info.Instance = instance;
 
   42    init_info.Device = device->
device();
 
   44    init_info.DescriptorPool = pool;
 
   45    init_info.MinImageCount = 3;
 
   46    init_info.ImageCount = 3;
 
   47    init_info.MSAASamples = VK_SAMPLE_COUNT_1_BIT;
 
   49    ImGui_ImplGlfw_InitForVulkan(window, 
true);
 
   50    ImGui_ImplVulkan_Init(&init_info, renderPass);
 
 
   56    ImGuiStyle& style = ImGui::GetStyle();
 
   58    style.WindowRounding = 3;
 
   59    style.GrabRounding = 1;
 
   60    style.GrabMinSize = 20;
 
   61    style.FrameRounding = 3;
 
   63    style.Colors[ImGuiCol_Text] = ImVec4(0.00F, 1.00F, 1.00F, 1.00F);
 
   64    style.Colors[ImGuiCol_TextDisabled] = ImVec4(0.00F, 0.40F, 0.41F, 1.00F);
 
   65    style.Colors[ImGuiCol_WindowBg] = ImVec4(0.1F, 0.1F, 0.1F, 0.70F);
 
   66    style.Colors[ImGuiCol_Border] = ImVec4(0.00F, 1.00F, 1.00F, 0.35F);
 
   67    style.Colors[ImGuiCol_BorderShadow] = ImVec4(0.00F, 0.00F, 0.00F, 0.00F);
 
   68    style.Colors[ImGuiCol_FrameBg] = ImVec4(0.44F, 0.80F, 0.80F, 0.18F);
 
   69    style.Colors[ImGuiCol_FrameBgHovered] = ImVec4(0.44F, 0.80F, 0.80F, 0.27F);
 
   70    style.Colors[ImGuiCol_FrameBgActive] = ImVec4(0.44F, 0.81F, 0.86F, 0.66F);
 
   71    style.Colors[ImGuiCol_TitleBg] = ImVec4(0.14F, 0.18F, 0.21F, 0.73F);
 
   72    style.Colors[ImGuiCol_TitleBgCollapsed] = ImVec4(0.00F, 0.00F, 0.00F, 0.54F);
 
   73    style.Colors[ImGuiCol_TitleBgActive] = ImVec4(0.00F, 1.00F, 1.00F, 0.27F);
 
   74    style.Colors[ImGuiCol_MenuBarBg] = ImVec4(0.00F, 0.00F, 0.00F, 0.20F);
 
   75    style.Colors[ImGuiCol_ScrollbarBg] = ImVec4(0.22F, 0.29F, 0.30F, 0.71F);
 
   76    style.Colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.00F, 1.00F, 1.00F, 0.44F);
 
   77    style.Colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(0.00F, 1.00F, 1.00F, 0.74F);
 
   78    style.Colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.00F, 1.00F, 1.00F, 1.00F);
 
   79    style.Colors[ImGuiCol_CheckMark] = ImVec4(0.00F, 1.00F, 1.00F, 0.68F);
 
   80    style.Colors[ImGuiCol_SliderGrab] = ImVec4(0.00F, 1.00F, 1.00F, 0.36F);
 
   81    style.Colors[ImGuiCol_SliderGrabActive] = ImVec4(0.00F, 1.00F, 1.00F, 0.76F);
 
   82    style.Colors[ImGuiCol_Button] = ImVec4(0.00F, 0.65F, 0.65F, 0.46F);
 
   83    style.Colors[ImGuiCol_ButtonHovered] = ImVec4(0.01F, 1.00F, 1.00F, 0.43F);
 
   84    style.Colors[ImGuiCol_ButtonActive] = ImVec4(0.00F, 1.00F, 1.00F, 0.62F);
 
   85    style.Colors[ImGuiCol_Header] = ImVec4(0.00F, 1.00F, 1.00F, 0.33F);
 
   86    style.Colors[ImGuiCol_HeaderHovered] = ImVec4(0.00F, 1.00F, 1.00F, 0.42F);
 
   87    style.Colors[ImGuiCol_HeaderActive] = ImVec4(0.00F, 1.00F, 1.00F, 0.54F);
 
   88    style.Colors[ImGuiCol_ResizeGrip] = ImVec4(0.00F, 1.00F, 1.00F, 0.54F);
 
   89    style.Colors[ImGuiCol_ResizeGripHovered] = ImVec4(0.00F, 1.00F, 1.00F, 0.74F);
 
   90    style.Colors[ImGuiCol_ResizeGripActive] = ImVec4(0.00F, 1.00F, 1.00F, 1.00F);
 
   91    style.Colors[ImGuiCol_PlotLines] = ImVec4(0.00F, 1.00F, 1.00F, 1.00F);
 
   92    style.Colors[ImGuiCol_PlotLinesHovered] = ImVec4(0.00F, 1.00F, 1.00F, 1.00F);
 
   93    style.Colors[ImGuiCol_PlotHistogram] = ImVec4(0.00F, 1.00F, 1.00F, 1.00F);
 
   94    style.Colors[ImGuiCol_PlotHistogramHovered] = ImVec4(0.00F, 1.00F, 1.00F, 1.00F);
 
   95    style.Colors[ImGuiCol_TextSelectedBg] = ImVec4(0.00F, 1.00F, 1.00F, 0.22F);