Browse Source

Introduce SDLWrap::AllocPalette

pull/2867/head
Vladimir Olteanu 5 years ago committed by Anders Jenbo
parent
commit
d226885672
  1. 13
      Source/storm/storm_svid.cpp
  2. 14
      Source/utils/sdl_ptrs.h
  3. 9
      Source/utils/sdl_wrap.h

13
Source/storm/storm_svid.cpp

@ -39,7 +39,7 @@ double SVidFrameLength;
bool SVidLoop;
smk SVidSMK;
SDL_Color SVidPreviousPalette[256];
SDL_Palette *SVidPalette;
SDLPaletteUniquePtr SVidPalette;
SDLSurfaceUniquePtr SVidSurface;
#ifndef DEVILUTIONX_STORM_FILE_WRAPPER_AVAILABLE
@ -229,11 +229,8 @@ bool SVidPlayBegin(const char *filename, int flags)
SVidWidth,
SDL_PIXELFORMAT_INDEX8);
SVidPalette = SDL_AllocPalette(256);
if (SVidPalette == nullptr) {
ErrSdl();
}
if (SDLC_SetSurfaceColors(SVidSurface.get(), SVidPalette) <= -1) {
SVidPalette = SDLWrap::AllocPalette(256);
if (SDLC_SetSurfaceColors(SVidSurface.get(), SVidPalette.get()) <= -1) {
ErrSdl();
}
@ -262,7 +259,7 @@ bool SVidPlayContinue()
}
memcpy(logical_palette, orig_palette, sizeof(logical_palette));
if (SDLC_SetSurfaceAndPaletteColors(SVidSurface.get(), SVidPalette, colors, 0, 256) <= -1) {
if (SDLC_SetSurfaceAndPaletteColors(SVidSurface.get(), SVidPalette.get(), colors, 0, 256) <= -1) {
Log("{}", SDL_GetError());
return false;
}
@ -366,9 +363,7 @@ void SVidPlayEnd()
SVidBuffer = nullptr;
#endif
SDL_FreePalette(SVidPalette);
SVidPalette = nullptr;
SVidSurface = nullptr;
memcpy(orig_palette, SVidPreviousPalette, sizeof(orig_palette));

14
Source/utils/sdl_ptrs.h

@ -7,6 +7,11 @@
#include <type_traits>
#include <SDL.h>
#ifdef USE_SDL1
#include "utils/sdl2_to_1_2_backports.h"
#else
#include "utils/sdl2_backports.h"
#endif
namespace devilution {
@ -44,6 +49,15 @@ struct SDLTextureDeleter {
using SDLTextureUniquePtr = std::unique_ptr<SDL_Texture, SDLTextureDeleter>;
#endif
struct SDLPaletteDeleter {
void operator()(SDL_Palette *palette) const
{
SDL_FreePalette(palette);
}
};
using SDLPaletteUniquePtr = std::unique_ptr<SDL_Palette, SDLPaletteDeleter>;
/**
* @brief Deletes the object using `SDL_free`.
*/

9
Source/utils/sdl_wrap.h

@ -76,6 +76,15 @@ inline SDLTextureUniquePtr CreateTexture(SDL_Renderer *renderer, Uint32 format,
}
#endif
inline SDLPaletteUniquePtr AllocPalette(int ncolors)
{
SDLPaletteUniquePtr ret { SDL_AllocPalette(ncolors) };
if (ret == nullptr)
ErrSdl();
return ret;
}
} //namespace SDLWrap
} //namespace devilution

Loading…
Cancel
Save