From 4e20eee16c9c363ac913309221ff971dec70e072 Mon Sep 17 00:00:00 2001 From: Gleb Mazovetskiy Date: Sun, 3 Sep 2023 00:30:09 +0100 Subject: [PATCH] Add DEVILUTIONX_DISPLAY_TEXTURE_FORMAT Some platforms, such as PS2, can benefit from a different texture format. Makes the texture format a CMake setting. --- CMake/Definitions.cmake | 1 + CMakeLists.txt | 6 ++++++ Source/storm/storm_svid.cpp | 2 +- Source/utils/display.cpp | 2 +- 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CMake/Definitions.cmake b/CMake/Definitions.cmake index 7f04742e2..d02635de1 100644 --- a/CMake/Definitions.cmake +++ b/CMake/Definitions.cmake @@ -90,6 +90,7 @@ foreach( REMAP_KEYBOARD_KEYS DEVILUTIONX_DEFAULT_RESAMPLER STREAM_ALL_AUDIO_MIN_FILE_SIZE + DEVILUTIONX_DISPLAY_TEXTURE_FORMAT DARWIN_MAJOR_VERSION DARWIN_MINOR_VERSION ) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5d03e7a17..18aa5a72f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -106,6 +106,12 @@ option(MACOSX_STANDALONE_APP_BUNDLE "Generate a portable app bundle to use on ot cmake_dependent_option(DISABLE_TCP "Disable TCP multiplayer option" OFF "NOT NONET" ON) cmake_dependent_option(DISABLE_ZERO_TIER "Disable ZeroTier multiplayer option" OFF "NOT NONET" ON) +# Graphics options +if(NOT USE_SDL1) + set(DEVILUTIONX_DISPLAY_TEXTURE_FORMAT "SDL_PIXELFORMAT_RGB888" CACHE STRING "Texture format for DevilutionX textures when using the GPU renderer") + mark_as_advanced(DEVILUTIONX_DISPLAY_TEXTURE_FORMAT) +endif() + # Sound options option(NOSOUND "Disable sound support" OFF) option(DEVILUTIONX_RESAMPLER_SPEEX "Build with Speex resampler" ON) diff --git a/Source/storm/storm_svid.cpp b/Source/storm/storm_svid.cpp index b9689a1bc..fda3dec4f 100644 --- a/Source/storm/storm_svid.cpp +++ b/Source/storm/storm_svid.cpp @@ -285,7 +285,7 @@ bool SVidPlayBegin(const char *filename, int flags) if (renderer != nullptr) { int renderWidth = static_cast(SVidWidth); int renderHeight = static_cast(SVidHeight); - texture = SDLWrap::CreateTexture(renderer, SDL_PIXELFORMAT_RGB888, SDL_TEXTUREACCESS_STREAMING, renderWidth, renderHeight); + texture = SDLWrap::CreateTexture(renderer, DEVILUTIONX_DISPLAY_TEXTURE_FORMAT, SDL_TEXTUREACCESS_STREAMING, renderWidth, renderHeight); if (SDL_RenderSetLogicalSize(renderer, renderWidth, renderHeight) <= -1) { ErrSdl(); } diff --git a/Source/utils/display.cpp b/Source/utils/display.cpp index d67e685bb..7acd0a040 100644 --- a/Source/utils/display.cpp +++ b/Source/utils/display.cpp @@ -384,7 +384,7 @@ void ReinitializeTexture() auto quality = StrCat(static_cast(*sgOptions.Graphics.scaleQuality)); SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, quality.c_str()); - texture = SDLWrap::CreateTexture(renderer, SDL_PIXELFORMAT_RGB888, SDL_TEXTUREACCESS_STREAMING, gnScreenWidth, gnScreenHeight); + texture = SDLWrap::CreateTexture(renderer, DEVILUTIONX_DISPLAY_TEXTURE_FORMAT, SDL_TEXTUREACCESS_STREAMING, gnScreenWidth, gnScreenHeight); } void ReinitializeIntegerScale()