diff --git a/CHANGES b/CHANGES index b021866d4..4c7ec5430 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,7 @@ 0.10.1: (Future) Emulation fixes: - GB Serialize: Don't write BGP/OBP when loading SCGB state (fixes mgba.io/i/2694) + - GBA Video: Ignore disabled backgrounds as OBJ blend target (fixes mgba.io/i/2489) Other fixes: - Qt: Manually split filename to avoid overzealous splitting (fixes mgba.io/i/2681) - Qt: Expand criteria for tag branch names (fixes mgba.io/i/2679) diff --git a/cinema/gba/blend/disabled-bg-semitrans-blend/baseline_0000.png b/cinema/gba/blend/disabled-bg-semitrans-blend/baseline_0000.png new file mode 100644 index 000000000..f90f448c4 Binary files /dev/null and b/cinema/gba/blend/disabled-bg-semitrans-blend/baseline_0000.png differ diff --git a/cinema/gba/blend/disabled-bg-semitrans-blend/config.ini b/cinema/gba/blend/disabled-bg-semitrans-blend/config.ini new file mode 100644 index 000000000..f26f6d8b1 --- /dev/null +++ b/cinema/gba/blend/disabled-bg-semitrans-blend/config.ini @@ -0,0 +1,3 @@ +[testinfo] +skip=10 +frames=1 diff --git a/cinema/gba/blend/disabled-bg-semitrans-blend/test.gba b/cinema/gba/blend/disabled-bg-semitrans-blend/test.gba new file mode 100644 index 000000000..91cb67e5f Binary files /dev/null and b/cinema/gba/blend/disabled-bg-semitrans-blend/test.gba differ diff --git a/src/gba/renderers/software-obj.c b/src/gba/renderers/software-obj.c index 8d67199ec..3b44d86a5 100644 --- a/src/gba/renderers/software-obj.c +++ b/src/gba/renderers/software-obj.c @@ -169,10 +169,10 @@ int GBAVideoSoftwareRendererPreprocessSprite(struct GBAVideoSoftwareRenderer* re (renderer->blendEffect == BLEND_BRIGHTEN || renderer->blendEffect == BLEND_DARKEN); if (GBAObjAttributesAGetMode(sprite->a) == OBJ_MODE_SEMITRANSPARENT || (renderer->target1Obj && renderer->blendEffect == BLEND_ALPHA) || objwinSlowPath) { int target2 = renderer->target2Bd; - target2 |= renderer->bg[0].target2; - target2 |= renderer->bg[1].target2; - target2 |= renderer->bg[2].target2; - target2 |= renderer->bg[3].target2; + target2 |= renderer->bg[0].target2 && renderer->bg[0].enabled; + target2 |= renderer->bg[1].target2 && renderer->bg[1].enabled; + target2 |= renderer->bg[2].target2 && renderer->bg[2].enabled; + target2 |= renderer->bg[3].target2 && renderer->bg[3].enabled; if (target2) { renderer->forceTarget1 = true; flags |= FLAG_REBLEND;