This commit is contained in:
Confideo-IOM
2026-08-30 19:06:41 +01:00
parent e3d37e3f8a
commit fe64b25cf3
90 changed files with 1986 additions and 485 deletions
@@ -0,0 +1,64 @@
#include "HydraGuiManager.h"
#include "HydraSceneGraphWindow.h"
#include "../scheduler/HydraTaskScheduler.h"
#include "../task/gui/HydraInitialiseGUITask.hpp"
#include "../task/gui/HydraShutdownGUITask.hpp"
#include "../task/gui/HydraStartGUIFrameTask.hpp"
#include "../task/gui/HydraDrawWindowTask.hpp"
#include "../task/gui/HydraEndGUIFrameTask.hpp"
#include <imgui.h>
#include <imgui_impl_glfw.h>
#include <imgui_impl_opengl3.h>
void HydraGUIManager::Intialise()
{
HydraID task_id = GetEngine()->TaskScheduler()->CreateTask<HydraInitialiseGUITask>(HydraThreadAffinity::Render);//, barrier_id);
HydraInitialiseGUITask* task = static_cast<HydraInitialiseGUITask*>(GetEngine()->TaskScheduler()->GetTask(task_id));
GetEngine()->TaskScheduler()->WaitForTask(task_id);
std::unique_ptr<HydraSceneGraphWindow> window = std::make_unique<HydraSceneGraphWindow>();
AddWindow(std::move(window));
}
void HydraGUIManager::Shutdown()
{
for(uint32_t i = 0; i < m_windows.size(); i++)
{
m_windows[i].release();
}
m_windows.clear();
HydraID task_id = GetEngine()->TaskScheduler()->CreateTask<HydraShutdownGUITask>(HydraThreadAffinity::Render);//, barrier_id);
GetEngine()->TaskScheduler()->WaitForTask(task_id);
}
void HydraGUIManager::BeginFrame()
{
HydraID task_id = GetEngine()->TaskScheduler()->CreateTask<HydraStartGUIFrameTask>(HydraThreadAffinity::Render);//, barrier_id);
GetEngine()->TaskScheduler()->WaitForTask(task_id);
}
void HydraGUIManager::DrawWindows()
{
for(uint32_t i = 0; i < m_windows.size(); i++)
{
HydraID task_id = GetEngine()->TaskScheduler()->CreateTask<HydraDrawWindowTask>(HydraThreadAffinity::Render);//, barrier_id);
HydraDrawWindowTask* task = static_cast<HydraDrawWindowTask*>(GetEngine()->TaskScheduler()->GetTask(task_id));
task->Initialise(m_windows[i].get());
GetEngine()->TaskScheduler()->WaitForTask(task_id);
}
}
void HydraGUIManager::EndFrame()
{
HydraID task_id = GetEngine()->TaskScheduler()->CreateTask<HydraEndGUIFrameTask>(HydraThreadAffinity::Render);//, barrier_id);
GetEngine()->TaskScheduler()->WaitForTask(task_id);
}
void HydraGUIManager::AddWindow(std::unique_ptr<HydraGuiWindow> window)
{
m_windows.push_back(std::move(window));
}
+25
View File
@@ -0,0 +1,25 @@
#ifndef HYDRAGUIMANAGER
#define HYDRAGUIMANAGER
#include "../engine/HydraObject.h"
#include "HydraGuiWindow.h"
#include <vector>
#include <memory>
class HydraGUIManager : public HydraObject
{
public:
void Intialise();
void Shutdown();
void BeginFrame();
void DrawWindows();
void EndFrame();
void AddWindow(std::unique_ptr<HydraGuiWindow> window);
private:
std::vector<std::unique_ptr<HydraGuiWindow>> m_windows;
};
#endif /* HYDRAGUIMANAGER */
+14
View File
@@ -0,0 +1,14 @@
#ifndef HYDRAGUIWINDOW
#define HYDRAGUIWINDOW
#include "../engine/HydraObject.h"
class HydraGuiWindow : public HydraObject
{
public:
virtual void DrawComponents() = 0;
private:
};
#endif /* HYDRAGUIWINDOW */
@@ -0,0 +1,28 @@
#include "HydraSceneGraphWindow.h"
#include <imgui.h>
#include <imgui_impl_glfw.h>
#include <imgui_impl_opengl3.h>
void HydraSceneGraphWindow::DrawComponents()
{
float f = 0.0f;
bool val1 = false;
bool val2 = true;
uint32_t counter = 0;
ImGui::Begin("Hello, world!"); // Create a window called "Hello, world!" and append into it.
ImGui::Text("This is some useful text."); // Display some text (you can use a format strings too)
ImGui::Checkbox("Demo Window", &val1); // Edit bools storing our window open/close state
ImGui::Checkbox("Another Window", &val2);
ImGui::SliderFloat("float", &f, 0.0f, 1.0f); // Edit 1 float using a slider from 0.0f to 1.0f
if (ImGui::Button("Button")) // Buttons return true when clicked (most widgets return true when edited/activated)
counter++;
ImGui::SameLine();
ImGui::Text("counter = %d", counter);
ImGuiIO& io = ImGui::GetIO();
ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / io.Framerate, io.Framerate);
ImGui::End();
}
@@ -0,0 +1,13 @@
#ifndef HYDRASCENEGRAPHYWINDOW
#define HYDRASCENEGRAPHYWINDOW
#include "../engine/HydraObject.h"
#include "HydraGuiWindow.h"
class HydraSceneGraphWindow : public HydraGuiWindow
{
public:
void DrawComponents() override;
private:
};
#endif /* HYDRASCENEGRAPHYWINDOW */