#include "utils/surface_to_png.hpp" #include #ifdef USE_SDL3 #include #include #include #else #include #include "utils/sdl_compat.h" #endif #include #include "engine/surface.hpp" namespace devilution { #ifndef USE_SDL3 extern "C" int IMG_SavePNG_RW(SDL_Surface *surface, SDL_RWops *dst, int freedst); #endif tl::expected WriteSurfaceToFilePng(const Surface &buf, SDL_IOStream *dst) { #ifdef USE_SDL3 const bool ok = IMG_SavePNG_IO(buf.surface, dst, /*closeio=*/true); #else const bool ok = IMG_SavePNG_RW(buf.surface, dst, /*freedst=*/1) == 0; #endif if (!ok) { tl::expected result = tl::make_unexpected(std::string(SDL_GetError())); SDL_ClearError(); return result; } return {}; } } // namespace devilution