Commit 0eea92c8fcc4b5c572a0dd9848ca8886978ee0a2

Ryan C. Gordon 2023-05-16T14:38:44

blit: Add a case for 8-bit blits that sdl12-compat exposed. sdl12-compat can get into a state where a color-keyed surface is marked for blending, but wants to blend with full alpha (which is the same as _not_ blending), so rather than fail to find a blitter in that case, it just selects the colorkey blitter. Reference https://github.com/libsdl-org/sdl12-compat/issues/233

1
2
3
4
5
6
7
8
9
10
11
12
13
14
diff --git a/src/video/SDL_blit_1.c b/src/video/SDL_blit_1.c
index ba56979..f7c5b80 100644
--- a/src/video/SDL_blit_1.c
+++ b/src/video/SDL_blit_1.c
@@ -533,6 +533,9 @@ SDL_CalculateBlit1(SDL_Surface *surface)
     case SDL_COPY_COLORKEY:
         return one_blitkey[which];
 
+    case SDL_COPY_COLORKEY | SDL_COPY_BLEND:  /* this is not super-robust but handles a specific case we found sdl12-compat. */
+        return (surface->map->info.a == 255) ? one_blitkey[which] : (SDL_BlitFunc)NULL;
+
     case SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND:
         /* Supporting 8bpp->8bpp alpha is doable but requires lots of
            tables which consume space and takes time to precompute,