ImGui
This commit is contained in:
@@ -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));
|
||||
}
|
||||
@@ -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 */
|
||||
@@ -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 */
|
||||
Reference in New Issue
Block a user