all repos — mgba @ 9cd5b12925cdb73f85a8f33f36355ab3872d44ca

mGBA Game Boy Advance Emulator

GBA Video: Fix OBJ semitransparency improperly interacting with other blending ops
Jeffrey Pfau jeffrey@endrift.com
Wed, 23 Sep 2015 20:36:57 -0700
commit

9cd5b12925cdb73f85a8f33f36355ab3872d44ca

parent

11a6a1b3a0f1ff60a773db3c3dd1a9118b0527dc

2 files changed, 5 insertions(+), 1 deletions(-)

jump to
M CHANGESCHANGES

@@ -13,6 +13,7 @@ - GBA Audio: Fix audio channels being silenced at the wrong time

- VFS: Fix return values of VFileFILE.read and .write - GBA Video: Fix edge case with sprite blend modes and semitransparency - GBA Video: Fix objwin and blending interaction on sprites + - GBA Video: Fix OBJ semitransparency improperly interacting with other blending ops Misc: - Qt: Remove useless help icons in dialogs - GBA: Attempting to save a screenshot-style savestate should be allowed without libpng
M src/gba/renderers/software-obj.csrc/gba/renderers/software-obj.c

@@ -145,7 +145,10 @@ unsigned charBase = GBAObjAttributesCGetTile(sprite->c) * 0x20;

if (GBARegisterDISPCNTGetMode(renderer->dispcnt) >= 3 && GBAObjAttributesCGetTile(sprite->c) < 512) { return 0; } - int variant = renderer->target1Obj && GBAWindowControlIsBlendEnable(renderer->currentWindow.packed) && (renderer->blendEffect == BLEND_BRIGHTEN || renderer->blendEffect == BLEND_DARKEN); + int variant = renderer->target1Obj && + GBAWindowControlIsBlendEnable(renderer->currentWindow.packed) && + (renderer->blendEffect == BLEND_BRIGHTEN || renderer->blendEffect == BLEND_DARKEN) && + GBAObjAttributesAGetMode(sprite->a) != OBJ_MODE_SEMITRANSPARENT; if (GBAObjAttributesAGetMode(sprite->a) == OBJ_MODE_SEMITRANSPARENT) { int target2 = renderer->target2Bd << 4; target2 |= renderer->bg[0].target2 << (renderer->bg[0].priority);