[WIP] Editor: ImGui-Vulkan integration
This commit is contained in:
parent
4eb7e1f5f4
commit
a8d00a29ec
|
@ -2,9 +2,10 @@
|
||||||
#include "SBApplication.h"
|
#include "SBApplication.h"
|
||||||
#include "Engine/ECS_Base/System/SHSystemManager.h"
|
#include "Engine/ECS_Base/System/SHSystemManager.h"
|
||||||
|
|
||||||
|
#define SHEDITOR
|
||||||
#ifdef SHEDITOR
|
#ifdef SHEDITOR
|
||||||
#include "Editor/SHEditor.h"
|
#include "Editor/SHEditor.h"
|
||||||
#include "Scenes/SBEditorScene.h"
|
//#include "Scenes/SBEditorScene.h"
|
||||||
#endif // SHEDITOR
|
#endif // SHEDITOR
|
||||||
|
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
|
@ -29,8 +30,8 @@ namespace Sandbox
|
||||||
graphicsSystem->SetWindow(&window);
|
graphicsSystem->SetWindow(&window);
|
||||||
|
|
||||||
SHADE::SHSystemManager::Init();
|
SHADE::SHSystemManager::Init();
|
||||||
|
|
||||||
#ifdef SHEDITOR
|
#ifdef SHEDITOR
|
||||||
|
SHADE::SHEditor::Initialize(window.GetHWND());
|
||||||
#else
|
#else
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -43,9 +44,14 @@ namespace Sandbox
|
||||||
//TODO: Change true to window is open
|
//TODO: Change true to window is open
|
||||||
while (!window.WindowShouldClose())
|
while (!window.WindowShouldClose())
|
||||||
{
|
{
|
||||||
|
#ifdef SHEDITOR
|
||||||
|
//SHADE::SHEditor::PreRender();
|
||||||
|
#endif
|
||||||
graphicsSystem->BeginRender();
|
graphicsSystem->BeginRender();
|
||||||
#ifdef SHEDITOR
|
#ifdef SHEDITOR
|
||||||
#else
|
SHADE::SHEditor::PreRender();
|
||||||
|
SHADE::SHEditor::Update();
|
||||||
|
SHADE::SHEditor::Render();
|
||||||
#endif
|
#endif
|
||||||
graphicsSystem->EndRender();
|
graphicsSystem->EndRender();
|
||||||
}
|
}
|
||||||
|
@ -54,6 +60,7 @@ namespace Sandbox
|
||||||
|
|
||||||
void SBApplication::Exit(void)
|
void SBApplication::Exit(void)
|
||||||
{
|
{
|
||||||
|
//SHADE::SHEditor::Exit();
|
||||||
SHADE::SHSystemManager::Exit();
|
SHADE::SHSystemManager::Exit();
|
||||||
|
|
||||||
#ifdef SHEDITOR
|
#ifdef SHEDITOR
|
||||||
|
|
|
@ -102,6 +102,8 @@
|
||||||
</Lib>
|
</Lib>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<ClInclude Include="src\Editor\SHEditor.h" />
|
||||||
|
<ClInclude Include="src\Editor\SHEditorBackend.h" />
|
||||||
<ClInclude Include="src\Engine\ECS_Base\Components\SHComponent.h" />
|
<ClInclude Include="src\Engine\ECS_Base\Components\SHComponent.h" />
|
||||||
<ClInclude Include="src\Engine\ECS_Base\Components\SHComponentGroup.h" />
|
<ClInclude Include="src\Engine\ECS_Base\Components\SHComponentGroup.h" />
|
||||||
<ClInclude Include="src\Engine\ECS_Base\Entity\SHEntity.h" />
|
<ClInclude Include="src\Engine\ECS_Base\Entity\SHEntity.h" />
|
||||||
|
@ -186,6 +188,7 @@
|
||||||
<ClInclude Include="src\Tools\SHLogger.h" />
|
<ClInclude Include="src\Tools\SHLogger.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<ClCompile Include="src\Editor\SHEditor.cpp" />
|
||||||
<ClCompile Include="src\Engine\ECS_Base\Components\SHComponent.cpp" />
|
<ClCompile Include="src\Engine\ECS_Base\Components\SHComponent.cpp" />
|
||||||
<ClCompile Include="src\Engine\ECS_Base\Components\SHComponentGroup.cpp" />
|
<ClCompile Include="src\Engine\ECS_Base\Components\SHComponentGroup.cpp" />
|
||||||
<ClCompile Include="src\Engine\ECS_Base\Entity\SHEntity.cpp" />
|
<ClCompile Include="src\Engine\ECS_Base\Entity\SHEntity.cpp" />
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Filter Include="Editor">
|
||||||
|
<UniqueIdentifier>{8C1A20B0-78BC-4A86-6177-5EDA4DB8D1D6}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
<Filter Include="Engine">
|
<Filter Include="Engine">
|
||||||
<UniqueIdentifier>{DBC7D3B0-C769-FE86-B024-12DB9C6585D7}</UniqueIdentifier>
|
<UniqueIdentifier>{DBC7D3B0-C769-FE86-B024-12DB9C6585D7}</UniqueIdentifier>
|
||||||
</Filter>
|
</Filter>
|
||||||
|
@ -108,6 +111,12 @@
|
||||||
</Filter>
|
</Filter>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<ClInclude Include="src\Editor\SHEditor.h">
|
||||||
|
<Filter>Editor</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="src\Editor\SHEditorBackend.h">
|
||||||
|
<Filter>Editor</Filter>
|
||||||
|
</ClInclude>
|
||||||
<ClInclude Include="src\Engine\ECS_Base\Components\SHComponent.h">
|
<ClInclude Include="src\Engine\ECS_Base\Components\SHComponent.h">
|
||||||
<Filter>Engine\ECS_Base\Components</Filter>
|
<Filter>Engine\ECS_Base\Components</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
@ -354,6 +363,9 @@
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<ClCompile Include="src\Editor\SHEditor.cpp">
|
||||||
|
<Filter>Editor</Filter>
|
||||||
|
</ClCompile>
|
||||||
<ClCompile Include="src\Engine\ECS_Base\Components\SHComponent.cpp">
|
<ClCompile Include="src\Engine\ECS_Base\Components\SHComponent.cpp">
|
||||||
<Filter>Engine\ECS_Base\Components</Filter>
|
<Filter>Engine\ECS_Base\Components</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
|
|
@ -2,16 +2,41 @@
|
||||||
#include "SHEditor.h"
|
#include "SHEditor.h"
|
||||||
#include "SHEditorBackend.h"
|
#include "SHEditorBackend.h"
|
||||||
|
|
||||||
|
#include <Engine/ECS_Base/System/SHSystemManager.h>
|
||||||
|
#include <Graphics/Instance/SHVkInstance.h>
|
||||||
|
|
||||||
|
#include <Graphics/MiddleEnd/Interface/SHGraphicsSystem.h>
|
||||||
|
#include <Graphics/Devices/SHVkPhysicalDevice.h>
|
||||||
|
#include <Graphics/Devices/SHVkLogicalDevice.h>
|
||||||
|
#include "Graphics/Swapchain/SHVkSwapchain.h"
|
||||||
|
#include "Graphics/Debugging/SHVulkanDebugUtil.h"
|
||||||
|
|
||||||
|
#include "Tools/SHLogger.h"
|
||||||
|
|
||||||
namespace SHADE
|
namespace SHADE
|
||||||
{
|
{
|
||||||
void SHEditor::Initialize()
|
Handle<SHVkCommandPool> SHEditor::cmdPool;
|
||||||
|
Handle<SHVkCommandBuffer> SHEditor::cmdBuffer;
|
||||||
|
|
||||||
|
void SHEditor::Initialize(HWND hwnd)
|
||||||
{
|
{
|
||||||
IMGUI_CHECKVERSION();
|
IMGUI_CHECKVERSION();
|
||||||
ImGui::CreateContext();
|
ImGui::CreateContext();
|
||||||
|
|
||||||
SetupWin32Backend();
|
SetupWin32Backend(hwnd);
|
||||||
SetupVulkanBackend();
|
SetupVulkanBackend();
|
||||||
|
|
||||||
|
//ImGuiIO& io = ImGui::GetIO();
|
||||||
|
|
||||||
|
//io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls
|
||||||
|
//io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable;
|
||||||
|
//io.ConfigFlags |= ImGuiConfigFlags_DockingEnable;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void SHEditor::PreRender()
|
||||||
|
{
|
||||||
|
cmdPool->Reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SHEditor::Update()
|
void SHEditor::Update()
|
||||||
|
@ -19,13 +44,21 @@ namespace SHADE
|
||||||
NewFrame();
|
NewFrame();
|
||||||
|
|
||||||
//Add all windows to draw list, Perform necessary updates
|
//Add all windows to draw list, Perform necessary updates
|
||||||
|
ImGui::ShowDemoWindow();
|
||||||
|
|
||||||
ImGui::Render();
|
ImGui::Render();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SHEditor::Render()
|
void SHEditor::Render()
|
||||||
{
|
{
|
||||||
//ImGui_ImplVulkan_RenderDrawData(ImGui::GetDrawData(), )
|
ImGui_ImplVulkan_RenderDrawData(ImGui::GetDrawData(), cmdBuffer->GetVkCommandBuffer());
|
||||||
|
|
||||||
|
ImGuiIO& io = ImGui::GetIO();
|
||||||
|
if(io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable)
|
||||||
|
{
|
||||||
|
ImGui::UpdatePlatformWindows();
|
||||||
|
ImGui::RenderPlatformWindowsDefault();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SHEditor::Exit()
|
void SHEditor::Exit()
|
||||||
|
@ -38,8 +71,31 @@ namespace SHADE
|
||||||
void SHEditor::SetupVulkanBackend()
|
void SHEditor::SetupVulkanBackend()
|
||||||
{
|
{
|
||||||
ImGui_ImplVulkan_InitInfo initInfo;
|
ImGui_ImplVulkan_InitInfo initInfo;
|
||||||
//initInfo.Device =
|
|
||||||
ImGui_ImplVulkan_Init(&initInfo, VK_NULL_HANDLE);
|
initInfo.Instance = SHVkInstance::GetVkInstance();
|
||||||
|
auto gfxSystem = reinterpret_cast<SHGraphicsSystem*>(SHSystemManager::GetSystem("Graphics System"));
|
||||||
|
initInfo.PhysicalDevice = gfxSystem->GetPhysicalDevice()->GetVkPhysicalDevice();
|
||||||
|
initInfo.Device = gfxSystem->GetDevice()->GetVkLogicalDevice();
|
||||||
|
initInfo.Queue = gfxSystem->GetQueue()->GetVkQueue();
|
||||||
|
initInfo.MinImageCount = initInfo.ImageCount = gfxSystem->GetSwapchain()->GetNumImages();
|
||||||
|
initInfo.DescriptorPool = gfxSystem->GetDescriptorPool()->GetVkHandle();
|
||||||
|
initInfo.MSAASamples = VK_SAMPLE_COUNT_1_BIT;
|
||||||
|
initInfo.Allocator = nullptr;
|
||||||
|
initInfo.PipelineCache = nullptr;
|
||||||
|
initInfo.Subpass = 0;
|
||||||
|
initInfo.CheckVkResultFn = [](VkResult err)
|
||||||
|
{
|
||||||
|
if (err == VK_SUCCESS)
|
||||||
|
return;
|
||||||
|
SHVulkanDebugUtil::ReportVkError(vk::Result(err), "Editor Error");
|
||||||
|
};
|
||||||
|
|
||||||
|
ImGui_ImplVulkan_Init(&initInfo, gfxSystem->GetRenderGraph().GetNode("G-Buffer")->GetRenderpass()->GetVkRenderpass());
|
||||||
|
|
||||||
|
cmdPool = gfxSystem->GetDevice()->CreateCommandPool(SH_QUEUE_FAMILY_ARRAY_INDEX::GRAPHICS, SH_CMD_POOL_RESET::POOL_BASED, true);
|
||||||
|
cmdBuffer = cmdPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY);
|
||||||
|
|
||||||
|
ImGui_ImplVulkan_CreateFontsTexture(cmdBuffer->GetVkCommandBuffer());
|
||||||
}
|
}
|
||||||
|
|
||||||
void SHEditor::ShutdownVulkanBackend()
|
void SHEditor::ShutdownVulkanBackend()
|
||||||
|
@ -49,11 +105,14 @@ namespace SHADE
|
||||||
|
|
||||||
void SHEditor::NewFrame()
|
void SHEditor::NewFrame()
|
||||||
{
|
{
|
||||||
|
ImGui_ImplWin32_NewFrame();
|
||||||
|
ImGui_ImplVulkan_NewFrame();
|
||||||
|
ImGui::NewFrame();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SHEditor::SetupWin32Backend()
|
void SHEditor::SetupWin32Backend(HWND hwnd)
|
||||||
{
|
{
|
||||||
//ImGui_ImplWin32_Init(/*hwnd*/);
|
ImGui_ImplWin32_Init(hwnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SHEditor::ShutdownWin32Backend()
|
void SHEditor::ShutdownWin32Backend()
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
#include "Graphics/Commands/SHVkCommandPool.h"
|
||||||
|
|
||||||
namespace SHADE
|
namespace SHADE
|
||||||
{
|
{
|
||||||
|
@ -6,7 +7,9 @@ namespace SHADE
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
static void Initialize();
|
static void Initialize(HWND hwnd);
|
||||||
|
|
||||||
|
static void PreRender();
|
||||||
|
|
||||||
static void Update();
|
static void Update();
|
||||||
|
|
||||||
|
@ -15,11 +18,14 @@ namespace SHADE
|
||||||
static void Exit();
|
static void Exit();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static void SetupWin32Backend();
|
static void SetupWin32Backend(HWND hwnd);
|
||||||
static void ShutdownWin32Backend();
|
static void ShutdownWin32Backend();
|
||||||
static void SetupVulkanBackend();
|
static void SetupVulkanBackend();
|
||||||
static void ShutdownVulkanBackend();
|
static void ShutdownVulkanBackend();
|
||||||
|
|
||||||
static void NewFrame();
|
static void NewFrame();
|
||||||
|
|
||||||
|
static Handle<SHVkCommandPool> cmdPool;
|
||||||
|
static Handle<SHVkCommandBuffer> cmdBuffer;
|
||||||
};
|
};
|
||||||
}
|
}
|
Loading…
Reference in New Issue