refactored imgui layer into nonlayer version

it returned to being a member of application with new init and shutdown
function which is ran by the con- and destructors, and init is called at
the end of the app init, with this it inits before any layer and layers
can use the onimguirender to draw with imgui
This commit is contained in:
2026-04-03 15:44:43 +02:00
parent da3ad2ed61
commit d58ddf6c35
5 changed files with 27 additions and 54 deletions

View File

@@ -8,7 +8,7 @@
#include "SDL3/SDL_timer.h" #include "SDL3/SDL_timer.h"
#include "imgui.h" #include "imgui.h"
#include "imgui_impl_sdl3.h" #include "imgui_impl_sdl3.h"
#include "imguilayer.h" #include "imguiinit.h"
#define SDL_MAIN_HANDLED 1 #define SDL_MAIN_HANDLED 1
@@ -74,10 +74,7 @@ bool Application::Init() {
SDL_SetRenderVSync(m_Renderer, 1); SDL_SetRenderVSync(m_Renderer, 1);
// m_ImGuiLayer = new SakuraVNE::ImGuiLayer(); m_ImGui = new SakuraVNE::ImGuiInit();
// PushOverlay(m_ImGuiLayer);
this->PushOverlay<SakuraVNE::ImGuiLayer>();
return true; return true;
} }
@@ -126,8 +123,7 @@ void Application::Run() {
} }
// Rendering // Rendering
// m_ImGuiLayer->Begin(); m_ImGui->Begin();
this->GetLayer<SakuraVNE::ImGuiLayer>()->Begin();
SDL_SetRenderScale(m_Renderer, io.DisplayFramebufferScale.x, io.DisplayFramebufferScale.y); SDL_SetRenderScale(m_Renderer, io.DisplayFramebufferScale.x, io.DisplayFramebufferScale.y);
SDL_SetRenderDrawColor(m_Renderer, (Uint8)111, (Uint8)232, (Uint8)168, (Uint8)0); SDL_SetRenderDrawColor(m_Renderer, (Uint8)111, (Uint8)232, (Uint8)168, (Uint8)0);
@@ -137,8 +133,7 @@ void Application::Run() {
layer->OnImGuiRender(); layer->OnImGuiRender();
} }
// m_ImGuiLayer->End(); m_ImGui->End();
this->GetLayer<SakuraVNE::ImGuiLayer>()->End();
SDL_RenderPresent(m_Renderer); SDL_RenderPresent(m_Renderer);
} }

View File

@@ -4,7 +4,7 @@
#include "LayerStack.h" #include "LayerStack.h"
#include "SDL3/SDL_render.h" #include "SDL3/SDL_render.h"
#include "SDL3/SDL_video.h" #include "SDL3/SDL_video.h"
// #include "imguilayer.h" #include "imguiinit.h"
#include <memory> #include <memory>
#include <type_traits> #include <type_traits>
@@ -96,7 +96,7 @@ private:
AppData m_AppData; AppData m_AppData;
SakuraVNE::LayerStack m_LayerStack; SakuraVNE::LayerStack m_LayerStack;
// SakuraVNE::ImGuiLayer *m_ImGuiLayer; SakuraVNE::ImGuiInit *m_ImGui;
static Application *s_Instance; static Application *s_Instance;
}; };

View File

@@ -1,15 +1,15 @@
#include "imguilayer.h" #include "imguiinit.h"
#include "Application.h" #include "Application.h"
#include "Log.h" #include "Log.h"
#include "SDL3/SDL_stdinc.h"
#include "imgui.h" #include "imgui.h"
#include "imgui_impl_sdl3.h" #include "imgui_impl_sdl3.h"
#include "imgui_impl_sdlrenderer3.h" #include "imgui_impl_sdlrenderer3.h"
namespace SakuraVNE { namespace SakuraVNE {
ImGuiLayer::ImGuiLayer() : Layer("ImGuiLayer") {} ImGuiInit::ImGuiInit() { Init(); }
ImGuiInit::~ImGuiInit() { Shutdown(); }
void ImGuiLayer::OnAttach() { void ImGuiInit::Init() {
// Imgui init // Imgui init
IMGUI_CHECKVERSION(); IMGUI_CHECKVERSION();
ImGui::CreateContext(); ImGui::CreateContext();
@@ -26,14 +26,14 @@ void ImGuiLayer::OnAttach() {
LOG_INFO("Imgui layer OnAttach ran"); LOG_INFO("Imgui layer OnAttach ran");
} }
void ImGuiLayer::OnDetach() { void ImGuiInit::Shutdown() {
ImGui_ImplSDLRenderer3_Shutdown(); ImGui_ImplSDLRenderer3_Shutdown();
ImGui_ImplSDL3_Shutdown(); ImGui_ImplSDL3_Shutdown();
ImGui::DestroyContext(); ImGui::DestroyContext();
LOG_WARN("Imgui on detach ran"); LOG_WARN("Imgui on detach ran");
} }
void ImGuiLayer::Begin() { void ImGuiInit::Begin() {
ImGui_ImplSDLRenderer3_NewFrame(); ImGui_ImplSDLRenderer3_NewFrame();
ImGui_ImplSDL3_NewFrame(); ImGui_ImplSDL3_NewFrame();
ImGui::NewFrame(); ImGui::NewFrame();
@@ -41,7 +41,7 @@ void ImGuiLayer::Begin() {
ImGui::DockSpaceOverViewport(); ImGui::DockSpaceOverViewport();
} }
void ImGuiLayer::End() { void ImGuiInit::End() {
ImGuiIO &io = ImGui::GetIO(); ImGuiIO &io = ImGui::GetIO();
Application &app = Application::Get(); Application &app = Application::Get();
@@ -51,20 +51,4 @@ void ImGuiLayer::End() {
ImGui_ImplSDLRenderer3_RenderDrawData(ImGui::GetDrawData(), Application::Get().GetSDLRenderer()); ImGui_ImplSDLRenderer3_RenderDrawData(ImGui::GetDrawData(), Application::Get().GetSDLRenderer());
ImGui::EndFrame(); ImGui::EndFrame();
} }
void ImGuiLayer::OnImGuiRender() {
ImGuiIO &io = ImGui::GetIO();
bool demoWindow = true;
ImGui::Begin("Framerate");
ImGui::ShowDemoWindow(&demoWindow);
ImGui::Text("Application avg %.3f ms/frame (%.1f FPS)", 1000.0f / io.Framerate, io.Framerate);
if (ImGui::Button("Quit")) {
Application::Get().SetRunningState(false);
}
ImGui::End();
}
void ImGuiLayer::OnFrame(Uint64 time) {}
void ImGuiLayer::OnEvent() {}
} // namespace SakuraVNE } // namespace SakuraVNE

View File

@@ -0,0 +1,14 @@
#pragma once
namespace SakuraVNE {
class ImGuiInit {
public:
ImGuiInit();
~ImGuiInit();
void Init();
void Shutdown();
void Begin();
void End();
};
} // namespace SakuraVNE

View File

@@ -1,20 +0,0 @@
#pragma once
#include "Layer.h"
namespace SakuraVNE {
class ImGuiLayer : public Layer {
public:
ImGuiLayer();
~ImGuiLayer() = default;
virtual void OnFrame(Uint64 timestamp) override;
virtual void OnAttach() override;
virtual void OnDetach() override;
virtual void OnImGuiRender() override;
virtual void OnEvent() override;
void Begin();
void End();
};
} // namespace SakuraVNE