Files
HydraV3/HydraEngine/source/gui/HydraGuiManager.cpp
T

65 lines
2.3 KiB
C++
Raw Normal View History

2026-08-30 19:06:41 +01:00
#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));
}