diff options
Diffstat (limited to 'ui')
| -rw-r--r-- | ui/applicationBase.cpp | 6 | ||||
| -rw-r--r-- | ui/editNetwork.cpp | 6 | ||||
| -rw-r--r-- | ui/font.cpp | 17 | ||||
| -rw-r--r-- | ui/font.h | 4 | ||||
| -rw-r--r-- | ui/gameMainSelector.cpp | 3 | ||||
| -rw-r--r-- | ui/gameMainWindow.cpp | 23 | ||||
| -rw-r--r-- | ui/gameMainWindow.h | 10 | ||||
| -rw-r--r-- | ui/icon.cpp | 16 | ||||
| -rw-r--r-- | ui/icon.h | 6 | ||||
| -rw-r--r-- | ui/imgui_extras.cpp | 2 | ||||
| -rw-r--r-- | ui/imgui_extras.h | 16 | ||||
| -rw-r--r-- | ui/imgui_wrap.h | 13 | ||||
| -rw-r--r-- | ui/mainApplication.cpp | 11 | ||||
| -rw-r--r-- | ui/mainWindow.cpp | 15 | ||||
| -rw-r--r-- | ui/mainWindow.h | 5 | ||||
| -rw-r--r-- | ui/queryTool.cpp | 2 | ||||
| -rw-r--r-- | ui/svgIcon.cpp | 17 | ||||
| -rw-r--r-- | ui/svgIcon.h | 8 | ||||
| -rw-r--r-- | ui/window.cpp | 22 | ||||
| -rw-r--r-- | ui/window.h | 5 | ||||
| -rw-r--r-- | ui/windowContent.h | 2 |
21 files changed, 95 insertions, 114 deletions
diff --git a/ui/applicationBase.cpp b/ui/applicationBase.cpp index 961007b..c9748e7 100644 --- a/ui/applicationBase.cpp +++ b/ui/applicationBase.cpp @@ -1,6 +1,6 @@ #include "applicationBase.h" -#include "imgui_wrap.h" #include <SDL2/SDL.h> +#include <imgui.h> #include <stdexcept> ApplicationBase::ApplicationBase() @@ -29,8 +29,8 @@ ApplicationBase::initSDL() const setGlAttribute(SDL_GL_DEPTH_SIZE, 16); setGlAttribute(SDL_GL_DOUBLEBUFFER, 1); - setGlAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); - setGlAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3); + setGlAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 4); + setGlAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 6); setGlAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); setGlAttribute(SDL_GL_SHARE_WITH_CURRENT_CONTEXT, 1); } diff --git a/ui/editNetwork.cpp b/ui/editNetwork.cpp index c900191..a213ccd 100644 --- a/ui/editNetwork.cpp +++ b/ui/editNetwork.cpp @@ -2,15 +2,15 @@ #include "builders/freeExtend.h" #include "builders/join.h" #include "builders/straight.h" -#include "imgui_wrap.h" #include <game/gamestate.h> #include <game/terrain.h> #include <gfx/gl/sceneShader.h> #include <gfx/models/texture.h> +#include <imgui.h> constexpr const glm::u8vec4 TRANSPARENT_BLUE {30, 50, 255, 200}; -EditNetwork::EditNetwork(Network * n) : network {n}, blue {1, 1, &TRANSPARENT_BLUE} { } +EditNetwork::EditNetwork(Network * n) : network {n}, blue {1, 1, GL_RGBA, GL_UNSIGNED_BYTE, &TRANSPARENT_BLUE} { } bool EditNetwork::click(const SDL_MouseButtonEvent & e, const Ray<GlobalPosition3D> & ray) @@ -41,7 +41,7 @@ void EditNetwork::render(const SceneShader & shader, const Frustum & frustum) const { if (builder) { - blue.bind(); + blue.bind(0); shader.absolute.use(); builder->render(shader, frustum); } diff --git a/ui/font.cpp b/ui/font.cpp index ebd29d0..9c3d770 100644 --- a/ui/font.cpp +++ b/ui/font.cpp @@ -4,7 +4,6 @@ #include <format> #include <ft2build.h> #include FT_FREETYPE_H -#include "gl_traits.h" #include <glRef.h> #include <maths.h> #include <optional> @@ -93,8 +92,7 @@ Font::generateChars(const utf8_string_view chars) const const auto textureIdx = getTextureWithSpace(glyph->bitmap.width); auto & texture = fontTextures[textureIdx]; - glTexSubImage2D(GL_TEXTURE_2D, 0, static_cast<GLint>(texture.used), 0, - static_cast<GLsizei>(glyph->bitmap.width), static_cast<GLsizei>(glyph->bitmap.rows), GL_RED, + texture.texture.subImage({texture.used, 0}, {glyph->bitmap.width, glyph->bitmap.rows}, GL_RED, GL_UNSIGNED_BYTE, glyph->bitmap.buffer); const auto & cd = charsData @@ -116,18 +114,15 @@ Font::getTextureWithSpace(unsigned int adv) const return (ft.used + adv) < size.x; }); itr != fontTextures.end()) { - glBindTexture(GL_TEXTURE_2D, itr->texture); return static_cast<std::size_t>(itr - fontTextures.begin()); } auto & texture = fontTextures.emplace_back(); - glBindTexture(GL_TEXTURE_2D, texture.texture); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, static_cast<GLsizei>(size.x), static_cast<GLsizei>(size.y), 0, GL_RED, - GL_UNSIGNED_BYTE, nullptr); - glTexParameter(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameter(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - glTexParameter(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameter(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + texture.texture.storage(1, GL_R8, size); + texture.texture.parameter(GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + texture.texture.parameter(GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + texture.texture.parameter(GL_TEXTURE_MIN_FILTER, GL_LINEAR); + texture.texture.parameter(GL_TEXTURE_MAG_FILTER, GL_LINEAR); return fontTextures.size() - 1; } @@ -1,9 +1,9 @@ #pragma once +#include "gfx/gl/glTexture.h" #include <array> #include <cstddef> #include <filesystem> -#include <glArrays.h> #include <glad/gl.h> #include <glm/glm.hpp> #include <map> @@ -28,7 +28,7 @@ public: }; struct FontTexture { - glTexture texture; + glTexture<GL_TEXTURE_2D> texture; unsigned int used; }; diff --git a/ui/gameMainSelector.cpp b/ui/gameMainSelector.cpp index 0c40abc..098c8db 100644 --- a/ui/gameMainSelector.cpp +++ b/ui/gameMainSelector.cpp @@ -1,5 +1,4 @@ #include "gameMainSelector.h" -#include "ui/uiComponent.h" #include <SDL2/SDL.h> #include <game/gamestate.h> #include <game/selectable.h> @@ -10,8 +9,6 @@ GameMainSelector::GameMainSelector(const Camera * c) : camera {c} { } -constexpr ScreenAbsCoord TargetPos {5, 45}; - void GameMainSelector::render() { diff --git a/ui/gameMainWindow.cpp b/ui/gameMainWindow.cpp index cc74f66..01b93bb 100644 --- a/ui/gameMainWindow.cpp +++ b/ui/gameMainWindow.cpp @@ -28,6 +28,7 @@ public: render() override { if (IltGui::BeginToolbar("bottomBar", ImGuiDir_Down, TOOLBAR_HEIGHT)) { + IltGui::Text(std::format("{:%a, %H:%M\n%d %m %Y}", gameState->environment->getWorldTime())); if (ImGui::ImageButton("Build rails", *buildRailsIcon, TOOLBAR_ICON_SIZE<ImVec2>)) { gms->target = std::make_unique<EditNetworkOf<RailLinks>>(); } @@ -50,15 +51,13 @@ private: GameMainSelector * gms; }; -GameMainWindow::GameMainWindow(size_t w, size_t h) : SceneRenderer {{w, h}, 0} +GameMainWindow::GameMainWindow(ScreenAbsCoord size) : SceneRenderer {size, 0} { uiComponents.create<ManualCameraController>(glm::vec2 {310'727'624, 494'018'810}); auto gms = uiComponents.create<GameMainSelector>(&camera); uiComponents.create<GameMainToolbar>(gms); } -GameMainWindow::~GameMainWindow() { } - void GameMainWindow::tick(TickDuration) { @@ -85,8 +84,20 @@ GameMainWindow::handleInput(const SDL_Event & event) } void -GameMainWindow::render() const +GameMainWindow::forEachRenderable(const RenderableProcessor & func) const +{ + for (const auto & [assetId, asset] : gameState->assets) { + if (const auto renderable = asset.getAs<Renderable>()) { + func(renderable); + } + } + gameState->world.apply<Renderable>(func); +} + +void +GameMainWindow::render() { + SceneRenderer::preFrame(*this, gameState->environment->getSunPos()); SceneRenderer::render(*this); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); @@ -113,9 +124,9 @@ GameMainWindow::environment(const SceneShader &, const SceneRenderer & r) const } void -GameMainWindow::lights(const SceneShader & shader) const +GameMainWindow::lights(const SceneShader & sceneShader) const { - gameState->world.apply<const Renderable>(&Renderable::lights, shader); + Renderable::lights(sceneShader); } void diff --git a/ui/gameMainWindow.h b/ui/gameMainWindow.h index b0f1592..015bb2b 100644 --- a/ui/gameMainWindow.h +++ b/ui/gameMainWindow.h @@ -3,22 +3,18 @@ #include "chronology.h" #include "gfx/gl/sceneRenderer.h" #include "windowContent.h" -#include <cstddef> class GameMainWindow : public WindowContent, SceneRenderer, public SceneProvider { public: - GameMainWindow(size_t w, size_t h); - ~GameMainWindow() override; - - NO_MOVE(GameMainWindow); - NO_COPY(GameMainWindow); + GameMainWindow(ScreenAbsCoord size); void tick(TickDuration) override; - void render() const override; + void render() override; private: bool handleInput(const SDL_Event &) override; + void forEachRenderable(const RenderableProcessor & func) const override; void content(const SceneShader &, const Frustum &) const override; void environment(const SceneShader &, const SceneRenderer &) const override; void lights(const SceneShader &) const override; diff --git a/ui/icon.cpp b/ui/icon.cpp index 0bdc91a..e0399e5 100644 --- a/ui/icon.cpp +++ b/ui/icon.cpp @@ -1,5 +1,4 @@ #include "icon.h" -#include "gl_traits.h" #include <gfx/image.h> #include <glad/gl.h> #include <resource.h> @@ -11,15 +10,12 @@ Icon::Icon(const std::filesystem::path & fileName) : Icon {Image {Resource::mapP Icon::Icon(const Image & tex) : size {tex.width, tex.height} { - glBindTexture(GL_TEXTURE_2D, m_texture); - - glTexParameter(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER); - glTexParameter(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER); - - glTexParameter(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameter(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, static_cast<GLsizei>(tex.width), static_cast<GLsizei>(tex.height), 0, - GL_RGBA, GL_UNSIGNED_BYTE, tex.data.data()); + m_texture.storage(1, GL_RGBA8, size); + m_texture.parameter(GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER); + m_texture.parameter(GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER); + m_texture.parameter(GL_TEXTURE_MIN_FILTER, GL_LINEAR); + m_texture.parameter(GL_TEXTURE_MAG_FILTER, GL_LINEAR); + m_texture.image(size, GL_RGBA, GL_UNSIGNED_BYTE, tex.data.data()); } ImTextureID @@ -1,9 +1,9 @@ #pragma once -#include "imgui_wrap.h" +#include "gfx/gl/glTexture.h" #include <filesystem> -#include <glArrays.h> #include <glm/glm.hpp> +#include <imgui.h> class Image; @@ -16,5 +16,5 @@ public: ImTextureID operator*() const; private: - glTexture m_texture; + glTexture<GL_TEXTURE_2D> m_texture; }; diff --git a/ui/imgui_extras.cpp b/ui/imgui_extras.cpp index 1643f4f..f2ae8ba 100644 --- a/ui/imgui_extras.cpp +++ b/ui/imgui_extras.cpp @@ -1,5 +1,5 @@ -#define IMGUI_INTERNAL #include "imgui_extras.h" +#include <imgui_internal.h> namespace IltGui { bool diff --git a/ui/imgui_extras.h b/ui/imgui_extras.h index 0babaa3..8b87b28 100644 --- a/ui/imgui_extras.h +++ b/ui/imgui_extras.h @@ -1,4 +1,7 @@ -#include "imgui_wrap.h" +#include <imgui.h> +#include <imgui_internal.h> +#include <memory> +#include <ranges> namespace IltGui { // NOLINTBEGIN(readability-identifier-naming) @@ -6,5 +9,16 @@ namespace IltGui { ImGuiWindowFlags windowFlags = 0); bool BeginToolbar(const char * name, ImGuiDir dir, float axisSize, ImGuiWindowFlags windowFlags = 0); void EndToolbar(); + + void + Text(std::ranges::contiguous_range auto text, ImGuiTextFlags flags = ImGuiTextFlags_None) + requires requires { + { std::to_address(text.begin()) } -> std::convertible_to<const char *>; + { std::to_address(text.end()) } -> std::convertible_to<const char *>; + } + { + ImGui::TextEx(std::to_address(text.begin()), std::to_address(text.end()), flags); + } + // NOLINTEND(readability-identifier-naming) } diff --git a/ui/imgui_wrap.h b/ui/imgui_wrap.h deleted file mode 100644 index 520d8b8..0000000 --- a/ui/imgui_wrap.h +++ /dev/null @@ -1,13 +0,0 @@ -#pragma once - -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wold-style-cast" -#include "imgui.h" // IWYU pragma: export -#ifdef IMGUI_INTERNAL -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wconversion" -# pragma GCC diagnostic ignored "-Wsign-conversion" -# include "imgui_internal.h" // IWYU pragma: export -# pragma GCC diagnostic pop -#endif -#pragma GCC diagnostic pop diff --git a/ui/mainApplication.cpp b/ui/mainApplication.cpp index 6cb1037..bb91c21 100644 --- a/ui/mainApplication.cpp +++ b/ui/mainApplication.cpp @@ -1,10 +1,8 @@ #include "mainApplication.h" +#include "backends/imgui_impl_sdl2.h" #include "game/gamestate.h" #include "game/worldobject.h" -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wold-style-cast" -#include "backends/imgui_impl_sdl2.h" -#pragma GCC diagnostic pop +#include "gfx/gl/gldebug.h" void MainApplication::mainLoop() @@ -16,10 +14,13 @@ MainApplication::mainLoop() const auto t_passed = std::chrono::duration_cast<TickDuration>(t_end - t_start); if (gameState) { + glDebugScope _ {0, "Tick all game state world objects"}; gameState->world.apply(&WorldObject::tick, t_passed); } windows.apply(&Window::tick, t_passed); - windows.apply(&Window::refresh); + if (glDebugScope _ {0, "Refresh all windows"}) { + windows.apply(&Window::refresh); + } ImGui::UpdatePlatformWindows(); ImGui::RenderPlatformWindowsDefault(); diff --git a/ui/mainWindow.cpp b/ui/mainWindow.cpp index 73c0b5b..1834a33 100644 --- a/ui/mainWindow.cpp +++ b/ui/mainWindow.cpp @@ -1,19 +1,10 @@ #include "mainWindow.h" -#include <format> -#include <stdexcept> - -#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 - -MainWindow::MainWindow(size_t w, size_t h) : - MainWindow {w, h, "I Like Trains", SDL_WINDOW_RESIZABLE | SDL_WINDOW_OPENGL} -{ -} +#include <format> +#include <stdexcept> -MainWindow::MainWindow(size_t w, size_t h, const std::string & title, Uint32 flags) : Window {w, h, title, flags} +MainWindow::MainWindow(ScreenAbsCoord size, const char * title, Uint32 flags) : Window {size, title, flags} { if (const auto version = gladLoadGL(reinterpret_cast<GLADloadfunc>(SDL_GL_GetProcAddress)); version < 30003) { throw std::runtime_error {std::format("Insufficient OpenGL version: {}", version)}; diff --git a/ui/mainWindow.h b/ui/mainWindow.h index fe26c5c..d2de9b3 100644 --- a/ui/mainWindow.h +++ b/ui/mainWindow.h @@ -5,12 +5,9 @@ class MainWindow : public Window { public: - MainWindow(size_t w, size_t h); + MainWindow(ScreenAbsCoord size, const char * title, Uint32 flags = SDL_WINDOW_RESIZABLE | SDL_WINDOW_OPENGL); ~MainWindow() override; NO_MOVE(MainWindow); NO_COPY(MainWindow); - -protected: - MainWindow(size_t width, size_t height, const std::string & title, Uint32 flags); }; diff --git a/ui/queryTool.cpp b/ui/queryTool.cpp index 549bd9e..56eee9a 100644 --- a/ui/queryTool.cpp +++ b/ui/queryTool.cpp @@ -1,9 +1,9 @@ #include "queryTool.h" -#include "imgui_wrap.h" #include <game/gamestate.h> #include <game/selectable.h> #include <game/terrain.h> #include <game/worldobject.h> +#include <imgui.h> #include <ray.h> #include <stream_support.h> diff --git a/ui/svgIcon.cpp b/ui/svgIcon.cpp index 499d9cc..2c73b5d 100644 --- a/ui/svgIcon.cpp +++ b/ui/svgIcon.cpp @@ -1,5 +1,4 @@ #include "svgIcon.h" -#include "gl_traits.h" #include <resource.h> SvgIcon::SvgIcon(ImageDimensions dim, const std::filesystem::path & path) @@ -15,20 +14,18 @@ SvgIcon::SvgIcon(ImageDimensions dim, const std::filesystem::path & path) } bitmap.convertToRGBA(); - glBindTexture(GL_TEXTURE_2D, texture); - - glTexParameter(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER); - glTexParameter(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER); - - glTexParameter(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameter(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, dim.x, dim.y, 0, GL_RGBA, GL_UNSIGNED_BYTE, bitmap.data()); + texture.storage(1, GL_RGBA8, dim); + texture.parameter(GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER); + texture.parameter(GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER); + texture.parameter(GL_TEXTURE_MIN_FILTER, GL_LINEAR); + texture.parameter(GL_TEXTURE_MAG_FILTER, GL_LINEAR); + texture.image(dim, GL_RGBA, GL_UNSIGNED_BYTE, bitmap.data()); } ImTextureID SvgIcon::operator*() const { - static_assert(sizeof(glTexture) <= sizeof(ImTextureID)); + static_assert(sizeof(glTexture<GL_TEXTURE_2D>) <= sizeof(ImTextureID)); // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast,performance-no-int-to-ptr) This is how ImGui works return reinterpret_cast<ImTextureID>(*texture); } diff --git a/ui/svgIcon.h b/ui/svgIcon.h index 106f97c..94948bd 100644 --- a/ui/svgIcon.h +++ b/ui/svgIcon.h @@ -1,9 +1,9 @@ #pragma once -#include "glArrays.h" -#include "imgui_wrap.h" +#include "gfx/gl/glTexture.h" #include <config/types.h> #include <filesystem> +#include <imgui.h> #include <lunasvg.h> class SvgIcon { @@ -13,6 +13,6 @@ public: ImTextureID operator*() const; private: - friend class LoadFromFile; // Test case verifying size/content - glTexture texture; + friend struct LoadFromFile; // Test case verifying size/content + glTexture<GL_TEXTURE_2D> texture; }; diff --git a/ui/window.cpp b/ui/window.cpp index 732e9ef..9d8dc1a 100644 --- a/ui/window.cpp +++ b/ui/window.cpp @@ -1,16 +1,13 @@ #include "window.h" -#include <glad/gl.h> -#include <glm/glm.hpp> -#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 +#include "gfx/gl/gldebug.h" +#include <glad/gl.h> +#include <glm/glm.hpp> -Window::Window(size_t width, size_t height, const std::string & title, Uint32 flags) : - size {static_cast<int>(width), static_cast<int>(height)}, - m_window {title.c_str(), static_cast<int>(SDL_WINDOWPOS_CENTERED), static_cast<int>(SDL_WINDOWPOS_CENTERED), size.x, - size.y, flags}, +Window::Window(ScreenAbsCoord size, const char * title, Uint32 flags) : + m_window {title, static_cast<int>(SDL_WINDOWPOS_CENTERED), static_cast<int>(SDL_WINDOWPOS_CENTERED), size.x, size.y, + flags}, glContext {m_window} { } @@ -18,6 +15,7 @@ Window::Window(size_t width, size_t height, const std::string & title, Uint32 fl void Window::clear(float r, float g, float b, float a) const { + glDebugScope _ {0}; glClearColor(r, g, b, a); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); } @@ -60,8 +58,10 @@ Window::refresh() const content->render(); // Render UI stuff here } - ImGui::Render(); - ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData()); + if (glDebugScope _ {0, "ImGui post"}) { + ImGui::Render(); + ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData()); + } swapBuffers(); } diff --git a/ui/window.h b/ui/window.h index 62c34de..99a977f 100644 --- a/ui/window.h +++ b/ui/window.h @@ -15,7 +15,7 @@ using SDL_GLContextPtr = wrapped_ptrt<GL_Context, SDL_GL_CreateContext, SDL_GL_D class Window { public: - Window(size_t width, size_t height, const std::string & title, Uint32 flags); + Window(ScreenAbsCoord size, const char * title, Uint32 flags); virtual ~Window() = default; NO_COPY(Window); @@ -27,7 +27,7 @@ public: { glm::ivec2 size {}; SDL_GetWindowSizeInPixels(m_window, &size.x, &size.y); - content = std::make_unique<C>(size.x, size.y, std::forward<P>(p)...); + content = std::make_unique<C>(ScreenAbsCoord {size.x, size.y}, std::forward<P>(p)...); } void tick(TickDuration elapsed); @@ -39,7 +39,6 @@ public: protected: void clear(float r, float g, float b, float a) const; - const ScreenAbsCoord size; SDL_WindowPtr m_window; SDL_GLContextPtr glContext; WindowContent::Ptr content; diff --git a/ui/windowContent.h b/ui/windowContent.h index 762d1cc..34cbea3 100644 --- a/ui/windowContent.h +++ b/ui/windowContent.h @@ -14,7 +14,7 @@ public: NO_COPY(WindowContent); virtual void tick(TickDuration); - virtual void render() const = 0; + virtual void render() = 0; virtual bool handleInput(const SDL_Event & e); protected: |
