18 #ifdef JEVOIS_HOST_PRO
23 #include <imgui_impl_sdl.h>
24 #include <imgui_impl_opengl3.h>
29 jevois::ImGuiBackendSDL::ImGuiBackendSDL() :
30 jevois::ImGuiBackend(), itsSDLctx(0), itsSDLwin(nullptr)
34 jevois::ImGuiBackendSDL::~ImGuiBackendSDL()
36 ImGui_ImplOpenGL3_Shutdown();
37 ImGui_ImplSDL2_Shutdown();
38 ImGui::DestroyContext();
40 if (itsSDLwin) SDL_DestroyWindow(itsSDLwin);
41 if (itsSDLctx) SDL_GL_DeleteContext(itsSDLctx);
46 void jevois::ImGuiBackendSDL::init(
unsigned short JEVOIS_UNUSED_PARAM(w),
unsigned short JEVOIS_UNUSED_PARAM(
h),
47 bool JEVOIS_UNUSED_PARAM(fullscreen))
51 void jevois::ImGuiBackendSDL::init(
unsigned short w,
unsigned short h,
bool fullscreen,
float scale,
52 bool JEVOIS_UNUSED_PARAM(conslock))
54 if (itsSDLwin) {
LERROR(
"Already initialized -- IGNORED");
return; }
57 if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER | SDL_INIT_GAMECONTROLLER))
58 LFATAL(
"SDL initialization error: " << SDL_GetError());
61 SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES);
62 SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
63 SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);
66 SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
70 SDL_WindowFlags window_flags;
71 if (fullscreen) window_flags = (SDL_WindowFlags)(SDL_WINDOW_OPENGL|SDL_WINDOW_FULLSCREEN | SDL_WINDOW_ALLOW_HIGHDPI);
72 else window_flags = (SDL_WindowFlags)(SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI);
73 itsSDLwin = SDL_CreateWindow(
"JeVois-Pro", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, w,
h, window_flags);
74 itsSDLctx = SDL_GL_CreateContext(itsSDLwin);
75 SDL_GL_MakeCurrent(itsSDLwin, itsSDLctx);
76 SDL_GL_SetSwapInterval(1);
80 ImGui::CreateContext();
81 ImGuiIO & io = ImGui::GetIO(); (void)io;
82 io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;
83 io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad;
86 ImGui::StyleColorsDark();
89 io.FontGlobalScale = scale;
90 ImGui::GetStyle().ScaleAllSizes(scale);
93 ImGui_ImplSDL2_InitForOpenGL(itsSDLwin, itsSDLctx);
94 ImGui_ImplOpenGL3_Init(
"#version 300 es");
112 LINFO(glGetString(GL_VERSION) <<
' '<< glGetString(GL_VENDOR) <<
" (" << glGetString(GL_RENDERER) <<
')');
117 bool jevois::ImGuiBackendSDL::pollEvents(
bool & shouldclose)
121 while (SDL_PollEvent(&event))
124 ImGui_ImplSDL2_ProcessEvent(&event);
125 if (event.type == SDL_QUIT) shouldclose =
true;
126 if (event.type == SDL_WINDOWEVENT && event.window.event == SDL_WINDOWEVENT_CLOSE &&
127 event.window.windowID == SDL_GetWindowID(itsSDLwin)) shouldclose =
true;
136 void jevois::ImGuiBackendSDL::newFrame()
138 glClear(GL_COLOR_BUFFER_BIT);
139 ImGui_ImplOpenGL3_NewFrame();
140 ImGui_ImplSDL2_NewFrame(itsSDLwin);
145 void jevois::ImGuiBackendSDL::render()
148 ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());
149 SDL_GL_SwapWindow(itsSDLwin);
153 void jevois::ImGuiBackendSDL::getWindowSize(
unsigned short & w,
unsigned short &
h)
const
158 SDL_GetWindowSize(itsSDLwin, &ww, &hh);
167 #endif // JEVOIS_HOST_PRO