From 02c3f1fd622bb5b4da1462c5bb507a4a541447d5 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Sat, 15 Jun 2024 15:28:53 +0100 Subject: First cut reshuffling app/window/gl/render bits --- ui/window.cpp | 53 ++++++++++++++--------------------------------------- 1 file changed, 14 insertions(+), 39 deletions(-) (limited to 'ui/window.cpp') diff --git a/ui/window.cpp b/ui/window.cpp index dd488d7..8ceaf49 100644 --- a/ui/window.cpp +++ b/ui/window.cpp @@ -1,28 +1,12 @@ #include "window.h" -#include "uiComponent.h" -#include #include #include -#include - -Window::GLInitHelper::GLInitHelper() -{ - [[maybe_unused]] static auto init = []() { - // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast) - if (const auto version = gladLoadGL(reinterpret_cast(SDL_GL_GetProcAddress)); version < 30003) { - throw std::runtime_error {std::format("Insufficient OpenGL version: {}", version)}; - } - else { - return version; - } - }(); -} Window::Window(size_t width, size_t height, const std::string & title, Uint32 flags) : size {static_cast(width), static_cast(height)}, m_window {title.c_str(), static_cast(SDL_WINDOWPOS_CENTERED), static_cast(SDL_WINDOWPOS_CENTERED), size.x, size.y, flags}, - glContext {m_window}, uiShader {width, height} + glContext {m_window} { } @@ -39,23 +23,21 @@ Window::swapBuffers() const SDL_GL_SwapWindow(m_window); } +void +Window::tick(TickDuration elapsed) +{ + if (content) { + content->tick(elapsed); + } +} + bool Window::handleInput(const SDL_Event & e) { if (SDL_GetWindowID(m_window) == e.window.windowID) { - SDL_Event eAdjusted {e}; - switch (e.type) { - // SDL and OpenGL have coordinates that are vertically opposed. - case SDL_MOUSEBUTTONDOWN: - case SDL_MOUSEBUTTONUP: - eAdjusted.button.y = size.y - e.button.y; - break; - case SDL_MOUSEMOTION: - eAdjusted.motion.y = size.y - e.motion.y; - break; + if (content) { + return content->handleInput(e); } - uiComponents.rapplyOne(&UIComponent::handleInput, eAdjusted, UIComponent::Position {{}, size}); - return true; } return false; } @@ -66,16 +48,9 @@ Window::refresh() const SDL_GL_MakeCurrent(m_window, glContext); clear(0.0F, 0.0F, 0.0F, 1.0F); - render(); + if (content) { + content->render(); + } swapBuffers(); } - -void -Window::render() const -{ - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glDisable(GL_DEPTH_TEST); - uiComponents.apply(&UIComponent::render, uiShader, UIComponent::Position {}); -} -- cgit v1.2.3 From 3d7a2f7cbc69bcfb5b04d343cb15c3027721b2e7 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Sun, 16 Jun 2024 12:28:42 +0100 Subject: Integrate ImGUI main calls --- ui/window.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'ui/window.cpp') diff --git a/ui/window.cpp b/ui/window.cpp index 8ceaf49..732e9ef 100644 --- a/ui/window.cpp +++ b/ui/window.cpp @@ -1,6 +1,11 @@ #include "window.h" #include #include +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wold-style-cast" +#include "backends/imgui_impl_opengl3.h" +#include "backends/imgui_impl_sdl2.h" +#pragma GCC diagnostic pop Window::Window(size_t width, size_t height, const std::string & title, Uint32 flags) : size {static_cast(width), static_cast(height)}, @@ -48,9 +53,15 @@ Window::refresh() const SDL_GL_MakeCurrent(m_window, glContext); clear(0.0F, 0.0F, 0.0F, 1.0F); + ImGui_ImplOpenGL3_NewFrame(); + ImGui_ImplSDL2_NewFrame(); + ImGui::NewFrame(); if (content) { content->render(); + // Render UI stuff here } + ImGui::Render(); + ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData()); swapBuffers(); } -- cgit v1.2.3