DS Video: Fix alpha edge case
Vicki Pfau vi@endrift.com
Sun, 19 Mar 2017 14:12:50 -0700
1 files changed,
8 insertions(+),
10 deletions(-)
jump to
M
src/ds/renderers/software.c
→
src/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]); } } }