From 72d87848d3c133cfdd693fa1b32c80ddf30a567f Mon Sep 17 00:00:00 2001 From: Tim Felgentreff <timfelgentreff@gmail.com> Date: Sun, 10 Apr 2022 07:40:32 +0200 Subject: [PATCH] use 32-bit alpha for fancy shadows --- src/video/graphic.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/video/graphic.cpp b/src/video/graphic.cpp index f09d6bf88..73c4b8b27 100644 --- a/src/video/graphic.cpp +++ b/src/video/graphic.cpp @@ -1063,16 +1063,20 @@ static inline void dither(SDL_Surface *Surface) { void CGraphic::MakeShadow() { if (Surface->format->BytesPerPixel == 1) { - SDL_Color colors[256]; - - // Set all colors in the palette to black and use dithering for alpha - memset(colors, 0, sizeof(colors)); - SDL_SetPaletteColors(Surface->format->palette, colors, 0, 256); - dither(Surface); + SDL_Surface *alphaSurface = SDL_CreateRGBSurface(0, Surface->w, Surface->h, 32, RMASK, GMASK, BMASK, AMASK); + SDL_BlitSurface(Surface, NULL, alphaSurface, NULL); + SDL_SetSurfaceAlphaMod(alphaSurface, 80); + SDL_SetSurfaceColorMod(alphaSurface, 0, 0, 0); + SDL_FreeSurface(Surface); + Surface = alphaSurface; if (SurfaceFlip) { - SDL_SetPaletteColors(SurfaceFlip->format->palette, colors, 0, 256); - dither(Surface); + SDL_Surface *alphaSurfaceFlip = SDL_CreateRGBSurface(0, SurfaceFlip->w, SurfaceFlip->h, 32, RMASK, GMASK, BMASK, AMASK); + SDL_BlitSurface(SurfaceFlip, NULL, alphaSurfaceFlip, NULL); + SDL_SetSurfaceAlphaMod(alphaSurfaceFlip, 80); + SDL_SetSurfaceColorMod(alphaSurfaceFlip, 0, 0, 0); + SDL_FreeSurface(SurfaceFlip); + SurfaceFlip = alphaSurfaceFlip; } } }