From b8dc97c57772db9926bc3702b7aba8b5fefe2969 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Wed, 31 Jul 2024 09:57:02 -0700 Subject: [PATCH] Use SDL_PremultiplySurfaceAlpha() when creating NSImages --- src/video/cocoa/SDL_cocoavideo.m | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/src/video/cocoa/SDL_cocoavideo.m b/src/video/cocoa/SDL_cocoavideo.m index edeca11a57..5013d23c74 100644 --- a/src/video/cocoa/SDL_cocoavideo.m +++ b/src/video/cocoa/SDL_cocoavideo.m @@ -253,7 +253,6 @@ NSImage *Cocoa_CreateImage(SDL_Surface *surface) SDL_Surface *converted; NSBitmapImageRep *imgrep; Uint8 *pixels; - int i; NSImage *img; converted = SDL_ConvertSurface(surface, SDL_PIXELFORMAT_RGBA32); @@ -261,6 +260,9 @@ NSImage *Cocoa_CreateImage(SDL_Surface *surface) return nil; } + /* Premultiply the alpha channel */ + SDL_PremultiplySurfaceAlpha(converted, SDL_FALSE); + imgrep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL pixelsWide:converted->w pixelsHigh:converted->h @@ -281,15 +283,6 @@ NSImage *Cocoa_CreateImage(SDL_Surface *surface) SDL_memcpy(pixels, converted->pixels, (size_t)converted->h * converted->pitch); SDL_DestroySurface(converted); - /* Premultiply the alpha channel */ - for (i = (surface->h * surface->w); i--;) { - Uint8 alpha = pixels[3]; - pixels[0] = (Uint8)(((Uint16)pixels[0] * alpha) / 255); - pixels[1] = (Uint8)(((Uint16)pixels[1] * alpha) / 255); - pixels[2] = (Uint8)(((Uint16)pixels[2] * alpha) / 255); - pixels += 4; - } - img = [[NSImage alloc] initWithSize:NSMakeSize(surface->w, surface->h)]; if (img != nil) { [img addRepresentation:imgrep];