diff --git a/.gitignore b/.gitignore index 78b2b7b..1b7975a 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ bin/ .ycm_extra_conf.py .cache libs +imgui.ini diff --git a/.gitmodules b/.gitmodules index 357d9a8..20b06f8 100644 --- a/.gitmodules +++ b/.gitmodules @@ -16,3 +16,6 @@ [submodule "ext/repos/shaderc"] path = ext/repos/shaderc url = git@github.com:google/shaderc.git +[submodule "ext/repos/imgui"] + path = ext/repos/imgui + url = git@github.com:ocornut/imgui.git diff --git a/Copium.sln b/Copium.sln index 1e81e23..fc0d1cc 100644 --- a/Copium.sln +++ b/Copium.sln @@ -10,6 +10,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CopiumEngine", "CopiumEngin {837D2EA3-3E5B-41A2-B2D2-4DC8B5425490} = {837D2EA3-3E5B-41A2-B2D2-4DC8B5425490} {8887886E-367C-40E8-BDC2-901F4F21571E} = {8887886E-367C-40E8-BDC2-901F4F21571E} {B1E43BD2-F22E-44C4-AEEB-3B0C0BC7947C} = {B1E43BD2-F22E-44C4-AEEB-3B0C0BC7947C} + {E9AB3B33-1F75-433A-A324-3F92017964F5} = {E9AB3B33-1F75-433A-A324-3F92017964F5} EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Extensions", "Extensions", "{6076C304-B981-471F-BDA0-57A33D9D6832}" @@ -24,6 +25,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "msdf-atlas-gen", "ext\proje EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "glfw3", "ext\projects\glfw3\glfw3.vcxproj", "{B1E43BD2-F22E-44C4-AEEB-3B0C0BC7947C}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "imgui", "ext\projects\imgui\imgui.vcxproj", "{E9AB3B33-1F75-433A-A324-3F92017964F5}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 @@ -80,6 +83,14 @@ Global {B1E43BD2-F22E-44C4-AEEB-3B0C0BC7947C}.Release|x64.Build.0 = Release|x64 {B1E43BD2-F22E-44C4-AEEB-3B0C0BC7947C}.Release|x86.ActiveCfg = Release|Win32 {B1E43BD2-F22E-44C4-AEEB-3B0C0BC7947C}.Release|x86.Build.0 = Release|Win32 + {E9AB3B33-1F75-433A-A324-3F92017964F5}.Debug|x64.ActiveCfg = Debug|x64 + {E9AB3B33-1F75-433A-A324-3F92017964F5}.Debug|x64.Build.0 = Debug|x64 + {E9AB3B33-1F75-433A-A324-3F92017964F5}.Debug|x86.ActiveCfg = Debug|Win32 + {E9AB3B33-1F75-433A-A324-3F92017964F5}.Debug|x86.Build.0 = Debug|Win32 + {E9AB3B33-1F75-433A-A324-3F92017964F5}.Release|x64.ActiveCfg = Release|x64 + {E9AB3B33-1F75-433A-A324-3F92017964F5}.Release|x64.Build.0 = Release|x64 + {E9AB3B33-1F75-433A-A324-3F92017964F5}.Release|x86.ActiveCfg = Release|Win32 + {E9AB3B33-1F75-433A-A324-3F92017964F5}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -90,6 +101,7 @@ Global {837D2EA3-3E5B-41A2-B2D2-4DC8B5425490} = {6076C304-B981-471F-BDA0-57A33D9D6832} {8887886E-367C-40E8-BDC2-901F4F21571E} = {6076C304-B981-471F-BDA0-57A33D9D6832} {B1E43BD2-F22E-44C4-AEEB-3B0C0BC7947C} = {6076C304-B981-471F-BDA0-57A33D9D6832} + {E9AB3B33-1F75-433A-A324-3F92017964F5} = {6076C304-B981-471F-BDA0-57A33D9D6832} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {8CA46360-3BB7-4DFC-8319-7D4372B4C851} diff --git a/CopiumEngine/CopiumEngine.vcxproj b/CopiumEngine/CopiumEngine.vcxproj index 9f19c72..4476ad3 100644 --- a/CopiumEngine/CopiumEngine.vcxproj +++ b/CopiumEngine/CopiumEngine.vcxproj @@ -119,7 +119,7 @@ true _DEBUG;_CONSOLE;%(PreprocessorDefinitions);GLM_FORCE_LEFT_HANDED;GLFW_INCLUDE_VULKAN;GLM_FORCE_RADIANS;GLM_FORCE_DEPTH_ZERO_TO_ONE;MSDF_ATLAS_PUBLIC=;MSDFGEN_PUBLIC= true - $(ProjectDir)ext/include/;$(ProjectDir)src/;$(SolutionDir)ext/repos/msdf-atlas-gen/;$(SolutionDir)ext/repos/msdf-atlas-gen/msdfgen/;$(SolutionDir)ext/repos/stb/;$(SolutionDir)ext/repos/glfw/include;$(ProjectDir)ext/repos/glm/;$(VULKAN_SDK)/Include;%(AdditionalIncludeDirectories) + $(ProjectDir)ext/include/;$(ProjectDir)src/;$(SolutionDir)ext/repos/msdf-atlas-gen/;$(SolutionDir)ext/repos/msdf-atlas-gen/msdfgen/;$(SolutionDir)ext/repos/stb/;$(SolutionDir)ext/repos/glfw/include;$(ProjectDir)ext/repos/glm/;$(VULKAN_SDK)/Include;$(SolutionDir)ext/repos/imgui/;%(AdditionalIncludeDirectories) stdcpp17 true MultiThreadedDebugDLL @@ -128,7 +128,7 @@ Console true $(SolutionDir)libs\$(Platform)\$(Configuration)\;$(VULKAN_SDK)/Lib;%(AdditionalLibraryDirectories) - vulkan-1.lib;glfw3.lib;shaderc_combinedd.lib;msdfgen-core.lib;msdfgen-ext.lib;msdf-atlas-gen.lib;freetype.lib;%(AdditionalDependencies) + vulkan-1.lib;imgui.lib;glfw3.lib;shaderc_combinedd.lib;msdfgen-core.lib;msdfgen-ext.lib;msdf-atlas-gen.lib;freetype.lib;%(AdditionalDependencies) @@ -147,7 +147,7 @@ true NDEBUG;_CONSOLE;%(PreprocessorDefinitions);GLM_FORCE_LEFT_HANDED;GLFW_INCLUDE_VULKAN;GLM_FORCE_RADIANS;GLM_FORCE_DEPTH_ZERO_TO_ONE;MSDF_ATLAS_PUBLIC=;MSDFGEN_PUBLIC= true - $(ProjectDir)ext/include/;$(ProjectDir)src/;$(SolutionDir)ext/repos/msdf-atlas-gen/;$(SolutionDir)ext/repos/msdf-atlas-gen/msdfgen/;$(SolutionDir)ext/repos/stb/;$(SolutionDir)ext/repos/glfw/include;$(ProjectDir)ext/repos/glm/;$(VULKAN_SDK)/Include;%(AdditionalIncludeDirectories) + $(ProjectDir)ext/include/;$(ProjectDir)src/;$(SolutionDir)ext/repos/msdf-atlas-gen/;$(SolutionDir)ext/repos/msdf-atlas-gen/msdfgen/;$(SolutionDir)ext/repos/stb/;$(SolutionDir)ext/repos/glfw/include;$(ProjectDir)ext/repos/glm/;$(VULKAN_SDK)/Include;$(SolutionDir)ext/repos/imgui/;%(AdditionalIncludeDirectories) stdcpp17 true @@ -157,7 +157,7 @@ true true $(SolutionDir)libs\$(Platform)\$(Configuration)\;$(VULKAN_SDK)/Lib;%(AdditionalLibraryDirectories) - vulkan-1.lib;glfw3.lib;shaderc_combined.lib;msdfgen-core.lib;msdfgen-ext.lib;msdf-atlas-gen.lib;freetype.lib;%(AdditionalDependencies) + vulkan-1.lib;imgui.lib;glfw3.lib;shaderc_combined.lib;msdfgen-core.lib;msdfgen-ext.lib;msdf-atlas-gen.lib;freetype.lib;%(AdditionalDependencies) @@ -177,6 +177,7 @@ + @@ -247,6 +248,7 @@ + diff --git a/CopiumEngine/CopiumEngine.vcxproj.filters b/CopiumEngine/CopiumEngine.vcxproj.filters index f0eb3cd..2545726 100644 --- a/CopiumEngine/CopiumEngine.vcxproj.filters +++ b/CopiumEngine/CopiumEngine.vcxproj.filters @@ -222,6 +222,9 @@ Source Files + + Source Files + @@ -524,5 +527,8 @@ Header Files + + Header Files + \ No newline at end of file diff --git a/CopiumEngine/src/copium/core/Application.cpp b/CopiumEngine/src/copium/core/Application.cpp index f527d3a..f3119d7 100644 --- a/CopiumEngine/src/copium/core/Application.cpp +++ b/CopiumEngine/src/copium/core/Application.cpp @@ -15,6 +15,8 @@ #include +#include + namespace Copium { const std::vector vertices = { @@ -74,6 +76,7 @@ namespace Copium return true; RecordCommandBuffer(); + Vulkan::GetSwapChain().SubmitToGraphicsQueue(*commandBuffer); Vulkan::GetSwapChain().EndPresent(); @@ -164,6 +167,8 @@ namespace Copium void Application::RecordCommandBuffer() { + Vulkan::GetImGuiInstance().Begin(); + ImGui::ShowDemoWindow(); commandBuffer->Begin(); Framebuffer& fb = AssetManager::GetAsset(framebuffer); @@ -193,6 +198,9 @@ namespace Copium meshPassthrough->Bind(*commandBuffer); meshPassthrough->Render(*commandBuffer); + Vulkan::GetImGuiInstance().End(); + Vulkan::GetImGuiInstance().Render(*commandBuffer); + Vulkan::GetSwapChain().EndFrameBuffer(*commandBuffer); commandBuffer->End(); } diff --git a/CopiumEngine/src/copium/core/Device.cpp b/CopiumEngine/src/copium/core/Device.cpp index fefb69f..0d82f59 100644 --- a/CopiumEngine/src/copium/core/Device.cpp +++ b/CopiumEngine/src/copium/core/Device.cpp @@ -18,6 +18,16 @@ namespace Copium vkDestroyDevice(device, nullptr); } + uint32_t Device::GetGraphicsQueueFamily() const + { + return graphicsQueueIndex; + } + + uint32_t Device::GetPresentQueueFamily() const + { + return presentQueueIndex; + } + VkQueue Device::GetGraphicsQueue() const { return graphicsQueue; diff --git a/CopiumEngine/src/copium/core/Device.h b/CopiumEngine/src/copium/core/Device.h index 9d5696a..7c0a5ab 100644 --- a/CopiumEngine/src/copium/core/Device.h +++ b/CopiumEngine/src/copium/core/Device.h @@ -27,6 +27,8 @@ namespace Copium Device(); ~Device(); + uint32_t GetGraphicsQueueFamily() const; + uint32_t GetPresentQueueFamily() const; VkQueue GetGraphicsQueue() const; VkQueue GetPresentQueue() const; VkCommandPool GetCommandPool() const; diff --git a/CopiumEngine/src/copium/core/ImGuiInstance.cpp b/CopiumEngine/src/copium/core/ImGuiInstance.cpp new file mode 100644 index 0000000..d303092 --- /dev/null +++ b/CopiumEngine/src/copium/core/ImGuiInstance.cpp @@ -0,0 +1,77 @@ +#include "ImGuiInstance.h" + +#include "copium/core/Vulkan.h" +#include "copium/buffer/CommandBufferScoped.h" + +#include +#include +#include + +namespace Copium +{ + ImGuiInstance::ImGuiInstance() + : descriptorPool{std::make_unique()} + { + IMGUI_CHECKVERSION(); + ImGui::CreateContext(); + ImGuiIO& io = ImGui::GetIO(); (void)io; + io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls + io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad; // Enable Gamepad Controls + + // Setup Dear ImGui style + ImGui::StyleColorsDark(); + + ImGui_ImplGlfw_InitForVulkan(Vulkan::GetWindow().GetWindow(), true); + ImGui_ImplVulkan_InitInfo init_info = {}; + init_info.Instance = Vulkan::GetInstance(); + init_info.PhysicalDevice = Vulkan::GetDevice().GetPhysicalDevice(); + init_info.Device = Vulkan::GetDevice(); + init_info.QueueFamily = Vulkan::GetDevice().GetGraphicsQueueFamily(); + init_info.Queue = Vulkan::GetDevice().GetGraphicsQueue(); + init_info.PipelineCache = VK_NULL_HANDLE; + init_info.DescriptorPool = *descriptorPool.get(); + init_info.Subpass = 0; + init_info.MinImageCount = SwapChain::MAX_FRAMES_IN_FLIGHT; + init_info.ImageCount = Vulkan::GetSwapChain().GetImageCount(); + init_info.MSAASamples = VK_SAMPLE_COUNT_1_BIT; + init_info.Allocator = nullptr; + init_info.CheckVkResultFn = CheckVkResult; + ImGui_ImplVulkan_Init(&init_info, Vulkan::GetSwapChain().GetRenderPass()); + { + CommandBufferScoped commandBuffer; + ImGui_ImplVulkan_CreateFontsTexture(commandBuffer); + } + ImGui_ImplVulkan_DestroyFontUploadObjects(); + } + + ImGuiInstance::~ImGuiInstance() + { + ImGui_ImplVulkan_Shutdown(); + ImGui_ImplGlfw_Shutdown(); + ImGui::DestroyContext(); + } + + void ImGuiInstance::Begin() + { + ImGui_ImplVulkan_NewFrame(); + ImGui_ImplGlfw_NewFrame(); + ImGui::NewFrame(); + } + + void ImGuiInstance::End() + { + ImGui::EndFrame(); + } + + void ImGuiInstance::Render(CommandBuffer& commandBuffer) + { + ImGui::Render(); + ImDrawData* draw_data = ImGui::GetDrawData(); + ImGui_ImplVulkan_RenderDrawData(draw_data, commandBuffer); + } + + void ImGuiInstance::CheckVkResult(VkResult err) + { + CP_VK_ASSERT(err, "Failed to initialize ImGui"); + } +} \ No newline at end of file diff --git a/CopiumEngine/src/copium/core/ImGuiInstance.h b/CopiumEngine/src/copium/core/ImGuiInstance.h new file mode 100644 index 0000000..4cd6d4b --- /dev/null +++ b/CopiumEngine/src/copium/core/ImGuiInstance.h @@ -0,0 +1,28 @@ +#pragma once + +#include + +#include "copium/buffer/CommandBuffer.h" +#include "copium/pipeline/DescriptorPool.h" + +namespace Copium +{ + class ImGuiInstance + { + CP_DELETE_COPY_AND_MOVE_CTOR(ImGuiInstance); + + private: + std::unique_ptr descriptorPool; + + public: + ImGuiInstance(); + ~ImGuiInstance(); + + void Begin(); + void End(); + void Render(CommandBuffer& commandBuffer); + + private: + static void CheckVkResult(VkResult err); + }; +} diff --git a/CopiumEngine/src/copium/core/SwapChain.cpp b/CopiumEngine/src/copium/core/SwapChain.cpp index af4da68..f71166d 100644 --- a/CopiumEngine/src/copium/core/SwapChain.cpp +++ b/CopiumEngine/src/copium/core/SwapChain.cpp @@ -189,11 +189,16 @@ namespace Copium InitializeFramebuffers(); } - int SwapChain::GetFlightIndex() const + int SwapChain::GetFlightIndex() const { return flightIndex; } + int SwapChain::GetImageCount() const + { + return images.size(); + } + void SwapChain::Initialize() { SwapChainSupportDetails swapChainSupport{Vulkan::GetWindow().GetSurface(), Vulkan::GetDevice().GetPhysicalDevice()}; diff --git a/CopiumEngine/src/copium/core/SwapChain.h b/CopiumEngine/src/copium/core/SwapChain.h index b033577..3449625 100644 --- a/CopiumEngine/src/copium/core/SwapChain.h +++ b/CopiumEngine/src/copium/core/SwapChain.h @@ -59,6 +59,7 @@ namespace Copium void Recreate(); int GetFlightIndex() const; + int GetImageCount() const; private: void Initialize(); diff --git a/CopiumEngine/src/copium/core/Vulkan.cpp b/CopiumEngine/src/copium/core/Vulkan.cpp index 7e5407e..3650542 100644 --- a/CopiumEngine/src/copium/core/Vulkan.cpp +++ b/CopiumEngine/src/copium/core/Vulkan.cpp @@ -13,6 +13,7 @@ namespace Copium std::unique_ptr Vulkan::window; std::unique_ptr Vulkan::device; std::unique_ptr Vulkan::swapChain; + std::unique_ptr Vulkan::imGuiInstance; AssetHandle Vulkan::emptyTexture2D; void Vulkan::Initialize() @@ -21,6 +22,7 @@ namespace Copium window = std::make_unique("Copium Engine", 1440, 810, WindowMode::Windowed); device = std::make_unique(); swapChain = std::make_unique(); + imGuiInstance = std::make_unique(); AssetManager::RegisterAssetType("Texture2D"); AssetManager::RegisterAssetType("RenderTexture"); @@ -39,6 +41,7 @@ namespace Copium AssetManager::UnloadAsset(emptyTexture2D); AssetManager::UnregisterAssetDir("assets/"); AssetManager::Cleanup(); + imGuiInstance.reset(); swapChain.reset(); device.reset(); window.reset(); @@ -65,6 +68,11 @@ namespace Copium return *swapChain; } + ImGuiInstance& Vulkan::GetImGuiInstance() + { + return *imGuiInstance; + } + AssetHandle Vulkan::GetEmptyTexture2D() { return emptyTexture2D; diff --git a/CopiumEngine/src/copium/core/Vulkan.h b/CopiumEngine/src/copium/core/Vulkan.h index a0e5159..ff06bfb 100644 --- a/CopiumEngine/src/copium/core/Vulkan.h +++ b/CopiumEngine/src/copium/core/Vulkan.h @@ -4,6 +4,7 @@ #include "copium/core/Instance.h" #include "copium/core/SwapChain.h" #include "copium/core/Window.h" +#include "copium/core/ImGuiInstance.h" #include "copium/util/Common.h" #include @@ -18,6 +19,7 @@ namespace Copium static std::unique_ptr window; static std::unique_ptr device; static std::unique_ptr swapChain; + static std::unique_ptr imGuiInstance; static AssetHandle emptyTexture2D; public: @@ -27,6 +29,7 @@ namespace Copium static Window& GetWindow(); static Device& GetDevice(); static SwapChain& GetSwapChain(); + static ImGuiInstance& GetImGuiInstance(); static bool Valid(); static AssetHandle GetEmptyTexture2D(); }; diff --git a/CopiumEngine/src/copium/pipeline/DescriptorPool.cpp b/CopiumEngine/src/copium/pipeline/DescriptorPool.cpp index 40aec10..4a6fec7 100644 --- a/CopiumEngine/src/copium/pipeline/DescriptorPool.cpp +++ b/CopiumEngine/src/copium/pipeline/DescriptorPool.cpp @@ -47,4 +47,9 @@ namespace Copium { vkFreeDescriptorSets(Vulkan::GetDevice(), descriptorPool, descriptorSets.size(), descriptorSets.data()); } + + DescriptorPool::operator VkDescriptorPool() const + { + return descriptorPool; + } } \ No newline at end of file diff --git a/CopiumEngine/src/copium/pipeline/DescriptorPool.h b/CopiumEngine/src/copium/pipeline/DescriptorPool.h index ed50131..281d8ab 100644 --- a/CopiumEngine/src/copium/pipeline/DescriptorPool.h +++ b/CopiumEngine/src/copium/pipeline/DescriptorPool.h @@ -18,5 +18,7 @@ namespace Copium std::vector AllocateDescriptorSets(VkDescriptorSetLayout descriptorSetLayout); void FreeDescriptorSets(const std::vector& descriptorSets); + + operator VkDescriptorPool() const; }; } diff --git a/ext/projects/glfw3/glfw3.vcxproj.user b/ext/projects/glfw3/glfw3.vcxproj.user index 88a5509..966b4ff 100644 --- a/ext/projects/glfw3/glfw3.vcxproj.user +++ b/ext/projects/glfw3/glfw3.vcxproj.user @@ -1,4 +1,6 @@  - + + true + \ No newline at end of file diff --git a/ext/projects/imgui/imgui.vcxproj b/ext/projects/imgui/imgui.vcxproj new file mode 100644 index 0000000..03eb982 --- /dev/null +++ b/ext/projects/imgui/imgui.vcxproj @@ -0,0 +1,153 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + + + + + + + + + + 16.0 + Win32Proj + {e9ab3b33-1f75-433a-a324-3f92017964f5} + imgui + 10.0 + + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + StaticLibrary + true + v143 + Unicode + + + StaticLibrary + false + v143 + true + Unicode + + + + + + + + + + + + + + + + + + + + + $(SolutionDir)libs\$(Platform)\$(Configuration)\ + $(VC_IncludePath);$(WindowsSDK_IncludePath);$(SolutionDir)ext/repos/imgui;$(IncludePath) + + + $(SolutionDir)libs\$(Platform)\$(Configuration)\ + $(VC_IncludePath);$(WindowsSDK_IncludePath);$(SolutionDir)ext/repos/imgui;$(IncludePath) + + + + Level3 + true + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + stdcpp17 + $(SolutionDir)ext/repos/glfw/include;$(VULKAN_SDK)/Include + + + Console + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + stdcpp17 + $(SolutionDir)ext/repos/glfw/include;$(VULKAN_SDK)/Include + + + Console + true + true + true + + + + + + \ No newline at end of file diff --git a/ext/projects/imgui/imgui.vcxproj.filters b/ext/projects/imgui/imgui.vcxproj.filters new file mode 100644 index 0000000..d7874be --- /dev/null +++ b/ext/projects/imgui/imgui.vcxproj.filters @@ -0,0 +1,40 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/ext/projects/imgui/imgui.vcxproj.user b/ext/projects/imgui/imgui.vcxproj.user new file mode 100644 index 0000000..5df420f --- /dev/null +++ b/ext/projects/imgui/imgui.vcxproj.user @@ -0,0 +1,6 @@ + + + + false + + \ No newline at end of file diff --git a/ext/repos/imgui b/ext/repos/imgui new file mode 160000 index 0000000..77eba4d --- /dev/null +++ b/ext/repos/imgui @@ -0,0 +1 @@ +Subproject commit 77eba4d0d1682917fee5638e746d5f599c47dc6e