mirror of
https://github.com/gwm17/Specter.git
synced 2024-11-23 02:38:52 -05:00
Added in basics of ImGui rendering
This commit is contained in:
parent
f18fd5a4bf
commit
bd672e25d1
|
@ -13,6 +13,9 @@ namespace Navigator {
|
||||||
m_window->SetEventCallback(BIND_EVENT_FUNCTION(Application::OnEvent));
|
m_window->SetEventCallback(BIND_EVENT_FUNCTION(Application::OnEvent));
|
||||||
|
|
||||||
PushLayer(new Layer());
|
PushLayer(new Layer());
|
||||||
|
|
||||||
|
m_imgui_layer = new ImGuiLayer();
|
||||||
|
PushOverlay(m_imgui_layer);
|
||||||
}
|
}
|
||||||
|
|
||||||
Application::~Application() {}
|
Application::~Application() {}
|
||||||
|
@ -20,6 +23,7 @@ namespace Navigator {
|
||||||
|
|
||||||
void Application::OnEvent(Event& event)
|
void Application::OnEvent(Event& event)
|
||||||
{
|
{
|
||||||
|
NAV_TRACE("Found event: {0}", event);
|
||||||
EventDispatcher dispatch(event);
|
EventDispatcher dispatch(event);
|
||||||
dispatch.Dispatch<WindowCloseEvent>(BIND_EVENT_FUNCTION(Application::OnWindowCloseEvent));
|
dispatch.Dispatch<WindowCloseEvent>(BIND_EVENT_FUNCTION(Application::OnWindowCloseEvent));
|
||||||
for(auto iter = m_stack.end(); iter != m_stack.begin(); )
|
for(auto iter = m_stack.end(); iter != m_stack.begin(); )
|
||||||
|
@ -53,10 +57,14 @@ namespace Navigator {
|
||||||
{
|
{
|
||||||
while(m_runFlag)
|
while(m_runFlag)
|
||||||
{
|
{
|
||||||
NAV_TRACE("Doing a run.");
|
|
||||||
for(auto layer : m_stack)
|
|
||||||
NAV_TRACE("Layer with name {0} found!", layer->GetName());
|
|
||||||
|
|
||||||
|
for(auto layer : m_stack)
|
||||||
|
layer->OnUpdate();
|
||||||
|
|
||||||
|
m_imgui_layer->Begin();
|
||||||
|
for(auto layer : m_stack)
|
||||||
|
layer->OnImGuiRender();
|
||||||
|
m_imgui_layer->End();
|
||||||
m_window->OnUpdate();
|
m_window->OnUpdate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
#ifndef APPLICATION_H
|
#ifndef APPLICATION_H
|
||||||
#define APPLICATION_H
|
#define APPLICATION_H
|
||||||
|
|
||||||
#include "NavCore.h"
|
#include "Navigator/NavCore.h"
|
||||||
#include "Events/Event.h"
|
#include "Events/Event.h"
|
||||||
#include "Events/AppEvent.h"
|
#include "Navigator/Events/AppEvent.h"
|
||||||
#include "LayerStack.h"
|
#include "Navigator/LayerStack.h"
|
||||||
#include "Layer.h"
|
#include "Navigator/Layer.h"
|
||||||
#include "Window.h"
|
#include "Navigator/Window.h"
|
||||||
|
#include "Navigator/ImGui/ImGuiLayer.h"
|
||||||
|
|
||||||
namespace Navigator {
|
namespace Navigator {
|
||||||
|
|
||||||
|
@ -24,13 +25,14 @@ namespace Navigator {
|
||||||
|
|
||||||
inline static Application& Get() { return *s_instance; }
|
inline static Application& Get() { return *s_instance; }
|
||||||
|
|
||||||
inline void GetWindow() { return; }
|
inline Window& GetWindow() { return *m_window; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool OnWindowCloseEvent(WindowCloseEvent& event);
|
bool OnWindowCloseEvent(WindowCloseEvent& event);
|
||||||
|
|
||||||
LayerStack m_stack;
|
LayerStack m_stack;
|
||||||
std::unique_ptr<Window> m_window;
|
std::unique_ptr<Window> m_window;
|
||||||
|
ImGuiLayer* m_imgui_layer;
|
||||||
bool m_runFlag;
|
bool m_runFlag;
|
||||||
|
|
||||||
static Application* s_instance;
|
static Application* s_instance;
|
||||||
|
|
4
Navigator/src/Navigator/ImGui/ImGuiBuild.cpp
Normal file
4
Navigator/src/Navigator/ImGui/ImGuiBuild.cpp
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
|
||||||
|
|
||||||
|
#include "backends/imgui_impl_opengl3.cpp"
|
||||||
|
#include "backends/imgui_impl_glfw.cpp"
|
90
Navigator/src/Navigator/ImGui/ImGuiLayer.cpp
Normal file
90
Navigator/src/Navigator/ImGui/ImGuiLayer.cpp
Normal file
|
@ -0,0 +1,90 @@
|
||||||
|
#include "ImGuiLayer.h"
|
||||||
|
#include "Navigator/Application.h"
|
||||||
|
#include "Navigator/NavCore.h"
|
||||||
|
|
||||||
|
#include "imgui.h"
|
||||||
|
#include "backends/imgui_impl_opengl3.h"
|
||||||
|
#include "backends/imgui_impl_glfw.h"
|
||||||
|
|
||||||
|
#include <GLFW/glfw3.h>
|
||||||
|
#include <glad/glad.h>
|
||||||
|
|
||||||
|
namespace Navigator {
|
||||||
|
|
||||||
|
ImGuiLayer::ImGuiLayer() :
|
||||||
|
Layer("ImGuiLayer")
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
ImGuiLayer::~ImGuiLayer()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void ImGuiLayer::OnAttach()
|
||||||
|
{
|
||||||
|
IMGUI_CHECKVERSION();
|
||||||
|
ImGui::CreateContext();
|
||||||
|
|
||||||
|
ImGuiIO& io = ImGui::GetIO();
|
||||||
|
io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;
|
||||||
|
io.ConfigFlags |= ImGuiConfigFlags_DockingEnable;
|
||||||
|
io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable;
|
||||||
|
|
||||||
|
ImGui::StyleColorsDark();
|
||||||
|
|
||||||
|
ImGuiStyle& style = ImGui::GetStyle();
|
||||||
|
|
||||||
|
if(io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable)
|
||||||
|
{
|
||||||
|
style.WindowRounding = 0.0f;
|
||||||
|
style.Colors[ImGuiCol_WindowBg].w = 1.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
Application& app = Application::Get();
|
||||||
|
GLFWwindow* window = static_cast<GLFWwindow*>(app.GetWindow().GetNativeWindow());
|
||||||
|
|
||||||
|
ImGui_ImplGlfw_InitForOpenGL(window, true);
|
||||||
|
ImGui_ImplOpenGL3_Init("#version 410");
|
||||||
|
}
|
||||||
|
|
||||||
|
void ImGuiLayer::OnDetach()
|
||||||
|
{
|
||||||
|
ImGui_ImplOpenGL3_Shutdown();
|
||||||
|
ImGui_ImplGlfw_Shutdown();
|
||||||
|
ImGui::DestroyContext();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ImGuiLayer::Begin()
|
||||||
|
{
|
||||||
|
ImGui_ImplOpenGL3_NewFrame();
|
||||||
|
ImGui_ImplGlfw_NewFrame();
|
||||||
|
|
||||||
|
ImGui::NewFrame();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ImGuiLayer::End()
|
||||||
|
{
|
||||||
|
Application& app = Application::Get();
|
||||||
|
ImGuiIO& io = ImGui::GetIO();
|
||||||
|
|
||||||
|
io.DisplaySize = ImVec2((float)app.GetWindow().GetWidth(), (float)app.GetWindow().GetHeight());
|
||||||
|
|
||||||
|
|
||||||
|
ImGui::Render();
|
||||||
|
ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());
|
||||||
|
|
||||||
|
if(io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable)
|
||||||
|
{
|
||||||
|
GLFWwindow* backup_current_context = glfwGetCurrentContext();
|
||||||
|
ImGui::UpdatePlatformWindows();
|
||||||
|
ImGui::RenderPlatformWindowsDefault();
|
||||||
|
glfwMakeContextCurrent(backup_current_context);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ImGuiLayer::OnImGuiRender()
|
||||||
|
{
|
||||||
|
static bool show = true;
|
||||||
|
ImGui::ShowDemoWindow(&show);
|
||||||
|
}
|
||||||
|
}
|
27
Navigator/src/Navigator/ImGui/ImGuiLayer.h
Normal file
27
Navigator/src/Navigator/ImGui/ImGuiLayer.h
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
#ifndef IMGUI_LAYER_H
|
||||||
|
#define IMGUI_LAYER_H
|
||||||
|
|
||||||
|
#include "Navigator/Layer.h"
|
||||||
|
|
||||||
|
namespace Navigator {
|
||||||
|
|
||||||
|
class ImGuiLayer : public Layer
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ImGuiLayer();
|
||||||
|
~ImGuiLayer();
|
||||||
|
|
||||||
|
virtual void OnAttach() override;
|
||||||
|
virtual void OnDetach() override;
|
||||||
|
virtual void OnImGuiRender() override;
|
||||||
|
|
||||||
|
void Begin();
|
||||||
|
void End();
|
||||||
|
|
||||||
|
private:
|
||||||
|
float m_time;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
|
@ -14,6 +14,7 @@ namespace Navigator {
|
||||||
virtual void OnAttach() {}
|
virtual void OnAttach() {}
|
||||||
virtual void OnDetach() {}
|
virtual void OnDetach() {}
|
||||||
virtual void OnImGuiRender() {}
|
virtual void OnImGuiRender() {}
|
||||||
|
virtual void OnUpdate() {}
|
||||||
virtual void OnEvent(Event& event) {}
|
virtual void OnEvent(Event& event) {}
|
||||||
|
|
||||||
inline const std::string& GetName() { return m_name; }
|
inline const std::string& GetName() { return m_name; }
|
||||||
|
|
|
@ -7,6 +7,6 @@
|
||||||
],
|
],
|
||||||
"settings":
|
"settings":
|
||||||
{
|
{
|
||||||
"SublimeLinter.linters.g++.args": ["-c","-Wall","-fsyntax-only","-std=c++17","-include${folder}/Navigator/src/navpch.h","-INavigator/src/", "-INavigator/src/Navigator/","-INavigator/vendor/spdlog/include", "-INavigator/vendor/glfw/include/","-INavigator/vendor/glad/include"]
|
"SublimeLinter.linters.g++.args": ["-c","-Wall","-fsyntax-only","-std=c++17","-include${folder}/Navigator/src/navpch.h","-INavigator/src/", "-INavigator/src/Navigator/","-INavigator/vendor/spdlog/include", "-INavigator/vendor/glfw/include/","-INavigator/vendor/glad/include","-INavigator/vendor/imgui"]
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user