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