65 lines
2.3 KiB
C++
65 lines
2.3 KiB
C++
#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));
|
|
}
|