From f631382dbd2963e8bf04ccd99dde0535314f2985 Mon Sep 17 00:00:00 2001 From: Igor Stepanov Date: Tue, 7 Oct 2025 16:36:15 +0300 Subject: [PATCH] some refactoring, add props and fix scissors --- src/window/detail/window_sdl.cpp | 17 +++++++++++++++-- src/window/detail/window_sdl.hpp | 8 ++++---- src/window/window.hpp | 2 +- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/window/detail/window_sdl.cpp b/src/window/detail/window_sdl.cpp index 753245a18..b6eafd14c 100644 --- a/src/window/detail/window_sdl.cpp +++ b/src/window/detail/window_sdl.cpp @@ -146,7 +146,8 @@ window_sdl::window_sdl(DisplaySettings *settings, std::string title) noexcept { return; } - SDL_WindowFlags flags = SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE; + SDL_WindowFlags flags = SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | + SDL_WINDOW_HIGH_PIXEL_DENSITY; if (settings->fullscreen.get()) { flags |= SDL_WINDOW_FULLSCREEN; @@ -185,6 +186,13 @@ window_sdl::window_sdl(DisplaySettings *settings, std::string title) noexcept { // SDL_GL_SetAttribute(SDL_WINDOW_ALLOW_HIGHDPI, false); #endif SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, settings->samples.get()); + SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16); + SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE, 32); + SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); context = SDL_GL_CreateContext(window); if (!context) { @@ -203,6 +211,10 @@ window_sdl::window_sdl(DisplaySettings *settings, std::string title) noexcept { isSuccessfull = false; return; } + + float scale = SDL_GetDisplayContentScale(SDL_GetPrimaryDisplay()); + + logger.info() << "monitor content scale: " << scale; } window_sdl::~window_sdl() { if (window) { @@ -215,10 +227,11 @@ window_sdl::~window_sdl() { } } -void window_sdl::swapBuffers() const noexcept { +void window_sdl::swapBuffers() noexcept { if (!SDL_GL_SwapWindow(window)) [[unlikely]] { // C++20 needed logger.error() << "Cant swap buffer: " << SDL_GetError(); } + resetScissor(); } bool window_sdl::isMaximized() const { return (SDL_GetWindowFlags(window) & SDL_WINDOW_MAXIMIZED) != 0; diff --git a/src/window/detail/window_sdl.hpp b/src/window/detail/window_sdl.hpp index 26cd4fd62..68baecf50 100644 --- a/src/window/detail/window_sdl.hpp +++ b/src/window/detail/window_sdl.hpp @@ -15,7 +15,7 @@ public: window_sdl &operator=(const window_sdl &) = delete; window_sdl &operator=(window_sdl &&) = default; - void swapBuffers() const noexcept override; + void swapBuffers() noexcept override; bool isMaximized() const override; bool isFocused() const override; @@ -51,9 +51,9 @@ private: bool toClose = false; bool fullscreen = false; - SDL_Window *window; - SDL_GLContext context; + SDL_Window *window = nullptr; + SDL_GLContext context = nullptr; std::stack scissorStack; - glm::vec4 scissorArea; + glm::vec4 scissorArea {}; }; \ No newline at end of file diff --git a/src/window/window.hpp b/src/window/window.hpp index 976f74dc5..e45261656 100644 --- a/src/window/window.hpp +++ b/src/window/window.hpp @@ -12,7 +12,7 @@ struct DisplaySettings; class Window { public: virtual ~Window() = default; - virtual void swapBuffers() const noexcept = 0; + virtual void swapBuffers() noexcept = 0; virtual bool isMaximized() const = 0; virtual bool isFocused() const = 0;