🩹 fix: use actual transparent pixel if surface supports alpha channel (#616)

This commit is contained in:
Helloyunho 2025-07-17 00:32:37 +09:00 committed by GitHub
parent bf3820c054
commit df84f4d7a5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1198,6 +1198,8 @@ LPDIRECTDRAWSURFACE MxDisplaySurface::CreateCursorSurface(const CursorBitmap* p_
}
MxS32 bytesPerPixel = ddsd.ddpfPixelFormat.dwRGBBitCount / 8;
MxBool isAlphaAvailable = ((ddsd.ddpfPixelFormat.dwFlags & DDPF_ALPHAPIXELS) == DDPF_ALPHAPIXELS) &&
(ddsd.ddpfPixelFormat.dwRGBAlphaBitMask != 0);
ddsd.dwWidth = p_cursorBitmap->width;
ddsd.dwHeight = p_cursorBitmap->height;
@ -1260,7 +1262,12 @@ LPDIRECTDRAWSURFACE MxDisplaySurface::CreateCursorSurface(const CursorBitmap* p_
MxS32 pixel;
if (!isOpaque) {
pixel = RGB8888_CREATE(0xff, 0, 0xff, 0); // Transparent pixel
if (isAlphaAvailable) {
pixel = RGB8888_CREATE(0, 0, 0, 0);
}
else {
pixel = RGB8888_CREATE(0xff, 0, 0xff, 0);
} // Transparent pixel
}
else {
pixel = isBlack ? RGB8888_CREATE(0, 0, 0, 0xff) : RGB8888_CREATE(0xff, 0xff, 0xff, 0xff);
@ -1290,10 +1297,12 @@ LPDIRECTDRAWSURFACE MxDisplaySurface::CreateCursorSurface(const CursorBitmap* p_
break;
}
default: {
DDCOLORKEY colorkey;
colorkey.dwColorSpaceHighValue = RGB8888_CREATE(0xff, 0, 0xff, 0);
colorkey.dwColorSpaceLowValue = RGB8888_CREATE(0xff, 0, 0xff, 0);
newSurface->SetColorKey(DDCKEY_SRCBLT, &colorkey);
if (!isAlphaAvailable) {
DDCOLORKEY colorkey;
colorkey.dwColorSpaceHighValue = RGB8888_CREATE(0xff, 0, 0xff, 0);
colorkey.dwColorSpaceLowValue = RGB8888_CREATE(0xff, 0, 0xff, 0);
newSurface->SetColorKey(DDCKEY_SRCBLT, &colorkey);
}
break;
}
}