all repos — mgba @ 2a5aac586821f0b86f44a5854763eca9fc483041

mGBA Game Boy Advance Emulator

DS Video: Fix alpha edge case
Vicki Pfau vi@endrift.com
Sun, 19 Mar 2017 14:12:50 -0700
commit

2a5aac586821f0b86f44a5854763eca9fc483041

parent

0cf9bf75e28e632ca071bb59a15e4f1afa4b4b9c

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

jump to
M src/ds/renderers/software.csrc/ds/renderers/software.c

@@ -397,28 +397,26 @@ flags |= FLAG_TARGET_1 * (softwareRenderer->bg[0].target1 && softwareRenderer->blendEffect == BLEND_ALPHA && GBAWindowControlIsBlendEnable(softwareRenderer->currentWindow.packed));

int x; for (x = softwareRenderer->start; x < softwareRenderer->end; ++x) { color_t color = scanline[x]; - if (softwareRenderer->bg[0].target1) { - if (softwareRenderer->blendEffect == BLEND_DARKEN) { - color = _darken(color, softwareRenderer->bldy) | (color & 0xFF000000); - } else if (softwareRenderer->blendEffect == BLEND_BRIGHTEN) { - color = _brighten(color, softwareRenderer->bldy) | (color & 0xFF000000); - } - } if (color & 0xFC000000) { + if (softwareRenderer->bg[0].target1) { + if (softwareRenderer->blendEffect == BLEND_DARKEN) { + color = _darken(color, softwareRenderer->bldy) | (color & 0xFF000000); + } else if (softwareRenderer->blendEffect == BLEND_BRIGHTEN) { + color = _brighten(color, softwareRenderer->bldy) | (color & 0xFF000000); + } + } if ((scanline[x] >> 28) != 0xF) { // TODO: More precise values softwareRenderer->alphaA[x] = (color >> 28) + 1; softwareRenderer->alphaB[x] = 0xF - (color >> 28); _compositeBlendNoObjwin(softwareRenderer, x, (color & 0x00FFFFFF) | flags | FLAG_TARGET_1, softwareRenderer->row[x]); } else { - if (!(flags & FLAG_TARGET_2)) { + if (!(flags & FLAG_TARGET_2) || !(softwareRenderer->row[x] & FLAG_TARGET_1)) { _compositeNoBlendNoObjwin(softwareRenderer, x, (color & 0x00FFFFFF) | flags, softwareRenderer->row[x]); softwareRenderer->alphaA[x] = 0x10; softwareRenderer->alphaB[x] = 0; } else if (softwareRenderer->row[x] & FLAG_TARGET_1) { _compositeBlendNoObjwin(softwareRenderer, x, (color & 0x00FFFFFF) | flags, softwareRenderer->row[x]); - } else { - _compositeNoBlendNoObjwin(softwareRenderer, x, (color & 0x00FFFFFF) | flags, softwareRenderer->row[x]); } } }