all repos — mgba @ 2161769660d42101988e82be003d3555995e2ec9

mGBA Game Boy Advance Emulator

GBA Video: Re-fix sprite blending
Jeffrey Pfau jeffrey@endrift.com
Mon, 18 May 2015 22:44:43 -0700
commit

2161769660d42101988e82be003d3555995e2ec9

parent

f2eae7ce33a5ff2946cf168b9ee5394b2d5cb0f4

1 files changed, 8 insertions(+), 1 deletions(-)

jump to
M src/gba/renderers/video-software.csrc/gba/renderers/video-software.c

@@ -1765,7 +1765,14 @@ uint16_t* vramBase = &renderer->d.vram[BASE_TILE >> 1];

unsigned charBase = GBAObjAttributesCGetTile(sprite->c) * 0x20; int variant = renderer->target1Obj && GBAWindowControlIsBlendEnable(renderer->currentWindow.packed) && (renderer->blendEffect == BLEND_BRIGHTEN || renderer->blendEffect == BLEND_DARKEN); if (GBAObjAttributesAGetMode(sprite->a) == OBJ_MODE_SEMITRANSPARENT) { - variant = 0; + int target2 = renderer->target2Bd << 4; + target2 |= renderer->bg[0].target2 << (renderer->bg[0].priority); + target2 |= renderer->bg[1].target2 << (renderer->bg[1].priority); + target2 |= renderer->bg[2].target2 << (renderer->bg[2].priority); + target2 |= renderer->bg[3].target2 << (renderer->bg[3].priority); + if (GBAObjAttributesCGetPriority(sprite->c) < target2) { + variant = 0; + } } color_t* palette = &renderer->normalPalette[0x100]; if (variant) {