#ifndef GUIMODULE #define GUIMODULE #endif #include "Archimedes.h" #include "imgui.h" #include "misc/cpp/imgui_stdlib.h" #include "modules/WindowModule/src/WindowModule.h" #ifdef RENDERER_OPENGL #include "backends/imgui_impl_opengl3.h" #endif #ifdef WINDOW_GLFW #include "backends/imgui_impl_glfw.h" #include #endif #ifdef WINDOW_SDL3 #include "backends/imgui_impl_sdl3.h" #include #endif class ImguiModule : public Archimedes::Module { public: ImguiModule(Archimedes::App*, void*); ImguiModule() { name = "ImguiModule"; } ~ImguiModule(); void onLoad() override; bool onEvent(const Archimedes::Event&) override; ImGuiContext* aquireContext() { contextRefs++; return context; } void releaseContext(ImGuiContext* ctxt) { if(ctxt == context && context != nullptr) { if(--contextRefs == 0) { app->emitEvent(new Archimedes::DoUnloadModuleEvent(name)); } } } private: int contextRefs = 0; ImGuiContext* context; Archimedes::Window* window; std::list>::iterator rcmd_it; #ifdef RENDERER_OPENGL auto rendererInit() { return ImGui_ImplOpenGL3_Init("#version 330"); } void rendererShutdown() { ImGui_ImplOpenGL3_Shutdown(); } void rendererNewFrame() { ImGui_ImplOpenGL3_NewFrame(); } void rendererRenderDrawData() { ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData()); } #endif #ifdef WINDOW_GLFW #ifdef RENDERER_OPENGL auto windowInit(Archimedes::Window* window) { return ImGui_ImplGlfw_InitForOpenGL(window->getWindowImpl().getWindow(), true); } #endif void windowShutdown() { ImGui_ImplGlfw_Shutdown(); } void windowNewFrame() { ImGui_ImplGlfw_NewFrame(); } #endif #ifdef WINDOW_SDL3 #ifdef RENDERER_OPENGL auto windowInit(Archimedes::Window* window) { return ImGui_ImplSDL3_InitForOpenGL(window->getWindowImpl().getWindow(), window->getWindowImpl().getContext()); } #endif #define windowShutdown() ImGui_ImplSDL3_Shutdown() void windowShutdown() { ImGui_ImplSDL3_Shutdown(); } #define windowNewFrame() ImGui_ImplSDL3_NewFrame() void windowNewFrame() { ImGui_ImplSDL3_NewFrame(); } void windowProcessEvent(SDL_Event e) { ImGui_ImplSDL3_ProcessEvent(&e); } #endif }; #ifdef IMGUIMODULE_DYNAMIC #define MODULE_TYPE ImguiModule #include "endModule.h" #endif