summaryrefslogtreecommitdiff
path: root/ui
diff options
context:
space:
mode:
Diffstat (limited to 'ui')
-rw-r--r--ui/applicationBase.cpp6
-rw-r--r--ui/editNetwork.cpp6
-rw-r--r--ui/font.cpp17
-rw-r--r--ui/font.h4
-rw-r--r--ui/gameMainSelector.cpp3
-rw-r--r--ui/gameMainWindow.cpp23
-rw-r--r--ui/gameMainWindow.h10
-rw-r--r--ui/icon.cpp16
-rw-r--r--ui/icon.h6
-rw-r--r--ui/imgui_extras.cpp2
-rw-r--r--ui/imgui_extras.h16
-rw-r--r--ui/imgui_wrap.h13
-rw-r--r--ui/mainApplication.cpp11
-rw-r--r--ui/mainWindow.cpp15
-rw-r--r--ui/mainWindow.h5
-rw-r--r--ui/queryTool.cpp2
-rw-r--r--ui/svgIcon.cpp17
-rw-r--r--ui/svgIcon.h8
-rw-r--r--ui/window.cpp22
-rw-r--r--ui/window.h5
-rw-r--r--ui/windowContent.h2
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;
}
diff --git a/ui/font.h b/ui/font.h
index 3254f80..bc11b76 100644
--- a/ui/font.h
+++ b/ui/font.h
@@ -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
diff --git a/ui/icon.h b/ui/icon.h
index 3d0788a..4479910 100644
--- a/ui/icon.h
+++ b/ui/icon.h
@@ -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: