From c0b6db56a7402127743964ae36c2824446e4cf4a Mon Sep 17 00:00:00 2001 From: namark <namark@disroot.org> Date: Sun, 15 Aug 2021 19:43:19 +0400 Subject: [PATCH] Palettes are now reused through format objects, only makes sense, and seem to covers all use cases for palettes. --- source/simple/graphical/pixel_format.h | 1 + source/simple/graphical/surface.cpp | 22 +++++++++++++++++----- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/source/simple/graphical/pixel_format.h b/source/simple/graphical/pixel_format.h index 27f0090..4ce5182 100644 --- a/source/simple/graphical/pixel_format.h +++ b/source/simple/graphical/pixel_format.h @@ -104,6 +104,7 @@ namespace simple::graphical private: static void free_pixel_format(const SDL_PixelFormat* one) noexcept; + friend class surface; friend surface convert(const surface& source, const pixel_format& format); }; diff --git a/source/simple/graphical/surface.cpp b/source/simple/graphical/surface.cpp index b9c9a8e..cf5d205 100644 --- a/source/simple/graphical/surface.cpp +++ b/source/simple/graphical/surface.cpp @@ -39,7 +39,10 @@ namespace simple::graphical SDL_FreeSurface ), _format(this->guts()->format) - {} + { + if(format.palette()) + SDL_SetSurfacePalette(guts().get(), format.guts().get()->palette); + } surface::surface(byte* pixels, int2 size, const pixel_format& format, int pitch) : sdl_surface_wrapper @@ -55,7 +58,10 @@ namespace simple::graphical SDL_FreeSurface ), _format(this->guts()->format) - {} + { + if(format.palette()) + SDL_SetSurfacePalette(guts().get(), format.guts().get()->palette); + } surface::surface(std::unique_ptr<byte[]> pixels, int2 size, const pixel_format& format, int pitch) : sdl_surface_wrapper @@ -71,8 +77,11 @@ namespace simple::graphical SDL_FreeSurface ), _format(this->guts()->format), - pixels_owner(pixels.release(), [](byte* x){ delete [] x; }) - {} + pixels_owner(pixels.release(), [](byte* x){ delete [] x; }) // hmmm... weird... but true + { + if(format.palette()) + SDL_SetSurfacePalette(guts().get(), format.guts().get()->palette); + } surface::surface(std::unique_ptr<byte[], void(*)(byte*)> pixels, int2 size, const pixel_format& format, int pitch) : sdl_surface_wrapper @@ -89,7 +98,10 @@ namespace simple::graphical ), _format(this->guts()->format), pixels_owner(std::move(pixels)) - {} + { + if(format.palette()) + SDL_SetSurfacePalette(guts().get(), format.guts().get()->palette); + } #if SDL_VERSION_ATLEAST(2,0,5) -- GitLab