From af97739b61d8e0bd7d0104735fadbfdbf18c7a44 Mon Sep 17 00:00:00 2001 From: Matteo De Carlo Date: Thu, 11 Nov 2021 15:38:05 +0100 Subject: [PATCH] HiDPI support on SDL2 (#351) linux: works only with wayland backend, can be used with SDL_VIDEODRIVER=wayland enviroment variable set. It's possible that it works also on other platforms when using the SDL backend. --- Editor/main_SDL2.cpp | 2 +- Tests/main_SDL2.cpp | 2 +- WickedEngine/wiPlatform.h | 7 +++++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/Editor/main_SDL2.cpp b/Editor/main_SDL2.cpp index caf806721..53a416229 100644 --- a/Editor/main_SDL2.cpp +++ b/Editor/main_SDL2.cpp @@ -197,7 +197,7 @@ int main(int argc, char *argv[]) "Wicked Engine Editor", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, w, h, - SDL_WINDOW_SHOWN | SDL_WINDOW_VULKAN | SDL_WINDOW_RESIZABLE); + SDL_WINDOW_SHOWN | SDL_WINDOW_VULKAN | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI); if (!window) { throw sdl2::SDLError("Error creating window"); } diff --git a/Tests/main_SDL2.cpp b/Tests/main_SDL2.cpp index fd493e656..43c7fb6ca 100644 --- a/Tests/main_SDL2.cpp +++ b/Tests/main_SDL2.cpp @@ -64,7 +64,7 @@ int main(int argc, char *argv[]) "Wicked Engine Tests", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1280, 800, - SDL_WINDOW_SHOWN | SDL_WINDOW_VULKAN | SDL_WINDOW_RESIZABLE); + SDL_WINDOW_SHOWN | SDL_WINDOW_VULKAN | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI); if (!window) { throw sdl2::SDLError("Error creating window"); } diff --git a/WickedEngine/wiPlatform.h b/WickedEngine/wiPlatform.h index 0f17d6abf..7a77877ad 100644 --- a/WickedEngine/wiPlatform.h +++ b/WickedEngine/wiPlatform.h @@ -38,6 +38,7 @@ typedef void* HMODULE; #ifdef SDL2 #include +#include #include "sdl2.h" #endif @@ -94,8 +95,10 @@ namespace wiPlatform #endif // PLATFORM_UWP #ifdef PLATFORM_LINUX - dest->dpi = 96; // todo - SDL_GetWindowSize(window, &dest->width, &dest->height); + int window_width, window_height; + SDL_GetWindowSize(window, &window_width, &window_height); + SDL_Vulkan_GetDrawableSize(window, &dest->width, &dest->height); + dest->dpi = ((float) dest->width / (float) window_width) * 96.0; #endif // PLATFORM_LINUX } }