Add ui logic for renderer
This commit is contained in:
@@ -1,8 +1,16 @@
|
|||||||
|
/*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||||
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <string>
|
|
||||||
#include "Base/ITickable.hpp"
|
#include "Base/ITickable.hpp"
|
||||||
#include "Base/ICloseable.hpp"
|
#include "Base/ICloseable.hpp"
|
||||||
#include "Scene/Scene.hpp"
|
#include "Scene/Scene.hpp"
|
||||||
|
#include "Scene/UI/UI.hpp"
|
||||||
|
#include <string>
|
||||||
|
|
||||||
namespace openVulkanoCpp
|
namespace openVulkanoCpp
|
||||||
{
|
{
|
||||||
@@ -21,5 +29,8 @@ namespace openVulkanoCpp
|
|||||||
|
|
||||||
virtual void SetScene(Scene::Scene* scene) = 0;
|
virtual void SetScene(Scene::Scene* scene) = 0;
|
||||||
virtual Scene::Scene* GetScene() = 0;
|
virtual Scene::Scene* GetScene() = 0;
|
||||||
|
|
||||||
|
virtual void SetActiveUi(Scene::UI::Ui* ui) = 0;
|
||||||
|
virtual Scene::UI::Ui* GetActiveUi() = 0;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
41
openVulkanoCpp/Scene/UI/UI.hpp
Normal file
41
openVulkanoCpp/Scene/UI/UI.hpp
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
/*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Base/ITickable.hpp"
|
||||||
|
#include <memory>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
namespace openVulkanoCpp::Scene::UI
|
||||||
|
{
|
||||||
|
class UiElement : public ITickable
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
std::vector<std::shared_ptr<UiElement>> children;
|
||||||
|
|
||||||
|
virtual ~UiElement() override = default;
|
||||||
|
|
||||||
|
virtual void Tick() override {};
|
||||||
|
|
||||||
|
virtual void Draw() const;
|
||||||
|
|
||||||
|
void Render() const
|
||||||
|
{
|
||||||
|
Draw();
|
||||||
|
for(const auto& child : children)
|
||||||
|
{
|
||||||
|
child->Render();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class Ui : public UiElement
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void Draw() const override {}
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -57,6 +57,10 @@ namespace openVulkanoCpp::Vulkan
|
|||||||
|
|
||||||
Scene::Scene* GetScene() override { return scene; }
|
Scene::Scene* GetScene() override { return scene; }
|
||||||
|
|
||||||
|
void SetActiveUi(Scene::UI::Ui* ui) override { uiRenderer.SetActiveUi(ui); }
|
||||||
|
|
||||||
|
Scene::UI::Ui* GetActiveUi() override { return uiRenderer.GetActiveUi(); }
|
||||||
|
|
||||||
CommandHelper* GetCommandData(uint32_t poolId);
|
CommandHelper* GetCommandData(uint32_t poolId);
|
||||||
|
|
||||||
static void RunThread(Renderer* renderer, Data::ReadOnlyAtomicArrayQueue<Scene::Drawable*>* jobQueue, uint32_t id);
|
static void RunThread(Renderer* renderer, Data::ReadOnlyAtomicArrayQueue<Scene::Drawable*>* jobQueue, uint32_t id);
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ namespace openVulkanoCpp::Vulkan
|
|||||||
vkInfo.Device = context->device->device;
|
vkInfo.Device = context->device->device;
|
||||||
vkInfo.QueueFamily = context->device->queueIndices.GetGraphics();
|
vkInfo.QueueFamily = context->device->queueIndices.GetGraphics();
|
||||||
vkInfo.Queue = context->device->graphicsQueue;
|
vkInfo.Queue = context->device->graphicsQueue;
|
||||||
//vkInfo.PipelineCache = NULL;
|
//vkInfo.PipelineCache = ;
|
||||||
vkInfo.DescriptorPool = descriptorPool;
|
vkInfo.DescriptorPool = descriptorPool;
|
||||||
vkInfo.Subpass = 0;
|
vkInfo.Subpass = 0;
|
||||||
vkInfo.MinImageCount = context->swapChain.GetImageCount();
|
vkInfo.MinImageCount = context->swapChain.GetImageCount();
|
||||||
@@ -54,12 +54,11 @@ namespace openVulkanoCpp::Vulkan
|
|||||||
|
|
||||||
ImGui::CreateContext();
|
ImGui::CreateContext();
|
||||||
ImGuiIO& io = ImGui::GetIO(); (void)io;
|
ImGuiIO& io = ImGui::GetIO(); (void)io;
|
||||||
io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls
|
io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;
|
||||||
io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad; // Enable Gamepad Controls
|
io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad;
|
||||||
io.ConfigFlags |= ImGuiConfigFlags_DockingEnable;
|
io.ConfigFlags |= ImGuiConfigFlags_DockingEnable;
|
||||||
|
|
||||||
ImGui_ImplVulkan_Init(&vkInfo, uiRenderPass.renderPass);
|
ImGui_ImplVulkan_Init(&vkInfo, uiRenderPass.renderPass);
|
||||||
//ImGui_ImplVulkan_Init(&vkInfo, context->swapChainRenderPass.renderPass);
|
|
||||||
#ifdef GLFW_AVAILABLE
|
#ifdef GLFW_AVAILABLE
|
||||||
ImGui_ImplGlfw_InitForVulkan((GLFWwindow*)context->window->GetNativeWindowHandle(), true);
|
ImGui_ImplGlfw_InitForVulkan((GLFWwindow*)context->window->GetNativeWindowHandle(), true);
|
||||||
#endif
|
#endif
|
||||||
@@ -82,8 +81,10 @@ namespace openVulkanoCpp::Vulkan
|
|||||||
|
|
||||||
void UiRenderer::DrawUiFrame(vk::CommandBuffer& cmdBuffer)
|
void UiRenderer::DrawUiFrame(vk::CommandBuffer& cmdBuffer)
|
||||||
{
|
{
|
||||||
|
if (!ui) return;
|
||||||
BeginUiFrame();
|
BeginUiFrame();
|
||||||
ImGui::ShowDemoWindow();
|
|
||||||
|
ui->Render();
|
||||||
|
|
||||||
ImGui::Render();
|
ImGui::Render();
|
||||||
uiRenderPass.Begin(cmdBuffer, true);
|
uiRenderPass.Begin(cmdBuffer, true);
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "RenderPass.hpp"
|
#include "RenderPass.hpp"
|
||||||
|
#include "Scene/UI/UI.hpp"
|
||||||
#include <vulkan/vulkan.hpp>
|
#include <vulkan/vulkan.hpp>
|
||||||
|
|
||||||
namespace openVulkanoCpp::Vulkan
|
namespace openVulkanoCpp::Vulkan
|
||||||
@@ -18,6 +19,7 @@ namespace openVulkanoCpp::Vulkan
|
|||||||
vk::Device device;
|
vk::Device device;
|
||||||
RenderPass uiRenderPass;
|
RenderPass uiRenderPass;
|
||||||
vk::DescriptorPool descriptorPool;
|
vk::DescriptorPool descriptorPool;
|
||||||
|
Scene::UI::Ui* ui;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
UiRenderer() = default;
|
UiRenderer() = default;
|
||||||
@@ -33,5 +35,9 @@ namespace openVulkanoCpp::Vulkan
|
|||||||
void DrawUiFrame(vk::CommandBuffer& cmdBuffer);
|
void DrawUiFrame(vk::CommandBuffer& cmdBuffer);
|
||||||
|
|
||||||
void Close();
|
void Close();
|
||||||
|
|
||||||
|
void SetActiveUi(Scene::UI::Ui* ui) { this->ui = ui; }
|
||||||
|
|
||||||
|
Scene::UI::Ui* GetActiveUi() { return ui; }
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user