diff --git a/CHANGES b/CHANGES index d49b10060..9b2b31318 100644 --- a/CHANGES +++ b/CHANGES @@ -9,6 +9,7 @@ Emulation fixes: - GBA Hardware: Fix GB Player detection on big endian platforms - GBA Video: Invalidate map cache when modifying BGCNT (fixes mgba.io/i/1846) - GBA Video: Don't draw sprites using unmapped VRAM in GL renderer (fixes mgba.io/i/1865) + - GBA Video: Fix rare regression blending semitransparent sprites (fixes mgba.io/i/1876) Other fixes: - 3DS: Redo video sync to be more precise - 3DS: Fix crash with libctru 2.0 when exiting diff --git a/cinema/gba/blend/sma2-semitrans/baseline_0000.png b/cinema/gba/blend/sma2-semitrans/baseline_0000.png new file mode 100644 index 000000000..89538bf1e Binary files /dev/null and b/cinema/gba/blend/sma2-semitrans/baseline_0000.png differ diff --git a/cinema/gba/blend/sma2-semitrans/baseline_0001.png b/cinema/gba/blend/sma2-semitrans/baseline_0001.png new file mode 100644 index 000000000..89538bf1e Binary files /dev/null and b/cinema/gba/blend/sma2-semitrans/baseline_0001.png differ diff --git a/cinema/gba/blend/sma2-semitrans/baseline_0002.png b/cinema/gba/blend/sma2-semitrans/baseline_0002.png new file mode 100644 index 000000000..89538bf1e Binary files /dev/null and b/cinema/gba/blend/sma2-semitrans/baseline_0002.png differ diff --git a/cinema/gba/blend/sma2-semitrans/baseline_0003.png b/cinema/gba/blend/sma2-semitrans/baseline_0003.png new file mode 100644 index 000000000..2d6d7c61a Binary files /dev/null and b/cinema/gba/blend/sma2-semitrans/baseline_0003.png differ diff --git a/cinema/gba/blend/sma2-semitrans/baseline_0004.png b/cinema/gba/blend/sma2-semitrans/baseline_0004.png new file mode 100644 index 000000000..2d6d7c61a Binary files /dev/null and b/cinema/gba/blend/sma2-semitrans/baseline_0004.png differ diff --git a/cinema/gba/blend/sma2-semitrans/baseline_0005.png b/cinema/gba/blend/sma2-semitrans/baseline_0005.png new file mode 100644 index 000000000..2d6d7c61a Binary files /dev/null and b/cinema/gba/blend/sma2-semitrans/baseline_0005.png differ diff --git a/cinema/gba/blend/sma2-semitrans/test.mvl b/cinema/gba/blend/sma2-semitrans/test.mvl new file mode 100644 index 000000000..d094a6403 Binary files /dev/null and b/cinema/gba/blend/sma2-semitrans/test.mvl differ diff --git a/src/gba/renderers/software-obj.c b/src/gba/renderers/software-obj.c index 4202112fa..2d7c340ff 100644 --- a/src/gba/renderers/software-obj.c +++ b/src/gba/renderers/software-obj.c @@ -162,7 +162,7 @@ int GBAVideoSoftwareRendererPreprocessSprite(struct GBAVideoSoftwareRenderer* re } int objwinSlowPath = GBARegisterDISPCNTIsObjwinEnable(renderer->dispcnt) && GBAWindowControlGetBlendEnable(renderer->objwin.packed) != GBAWindowControlIsBlendEnable(renderer->currentWindow.packed); - int variant = (renderer->target1Obj || GBAObjAttributesAGetMode(sprite->a) == OBJ_MODE_SEMITRANSPARENT) && + int variant = renderer->target1Obj && GBAWindowControlIsBlendEnable(renderer->currentWindow.packed) && (renderer->blendEffect == BLEND_BRIGHTEN || renderer->blendEffect == BLEND_DARKEN); if (GBAObjAttributesAGetMode(sprite->a) == OBJ_MODE_SEMITRANSPARENT || (renderer->target1Obj && renderer->blendEffect == BLEND_ALPHA) || objwinSlowPath) {