mirror of https://github.com/mgba-emu/mgba.git
Windows on backdrop and blending with backdrop
This commit is contained in:
parent
8132341b75
commit
abc89982be
|
@ -359,17 +359,6 @@ static void GBAVideoSoftwareRendererDrawScanline(struct GBAVideoRenderer* render
|
||||||
row[x] = GBA_COLOR_WHITE;
|
row[x] = GBA_COLOR_WHITE;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
} else {
|
|
||||||
uint32_t backdrop = FLAG_UNWRITTEN | FLAG_PRIORITY | FLAG_IS_BACKGROUND;
|
|
||||||
if (!softwareRenderer->target1Bd || softwareRenderer->blendEffect == BLEND_NONE || softwareRenderer->blendEffect == BLEND_ALPHA) {
|
|
||||||
backdrop |= softwareRenderer->normalPalette[0];
|
|
||||||
} else {
|
|
||||||
backdrop |= softwareRenderer->variantPalette[0];
|
|
||||||
}
|
|
||||||
int x;
|
|
||||||
for (x = 0; x < VIDEO_HORIZONTAL_PIXELS; ++x) {
|
|
||||||
softwareRenderer->row[x] = backdrop;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(softwareRenderer->spriteLayer, 0, sizeof(softwareRenderer->spriteLayer));
|
memset(softwareRenderer->spriteLayer, 0, sizeof(softwareRenderer->spriteLayer));
|
||||||
|
@ -388,7 +377,39 @@ static void GBAVideoSoftwareRendererDrawScanline(struct GBAVideoRenderer* render
|
||||||
softwareRenderer->windows[0].control.packed = 0xFF;
|
softwareRenderer->windows[0].control.packed = 0xFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int w;
|
||||||
|
int x = 0;
|
||||||
|
for (w = 0; w < softwareRenderer->nWindows; ++w) {
|
||||||
|
uint32_t backdrop = FLAG_UNWRITTEN | FLAG_PRIORITY | FLAG_IS_BACKGROUND;
|
||||||
|
if (!softwareRenderer->target1Bd || softwareRenderer->blendEffect == BLEND_NONE || softwareRenderer->blendEffect == BLEND_ALPHA || !softwareRenderer->windows[w].control.blendEnable) {
|
||||||
|
backdrop |= softwareRenderer->normalPalette[0];
|
||||||
|
} else {
|
||||||
|
backdrop |= softwareRenderer->variantPalette[0];
|
||||||
|
}
|
||||||
|
for (; x < softwareRenderer->windows[w].endX; ++x) {
|
||||||
|
softwareRenderer->row[x] = backdrop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
_drawScanline(softwareRenderer, y);
|
_drawScanline(softwareRenderer, y);
|
||||||
|
|
||||||
|
if (softwareRenderer->target2Bd) {
|
||||||
|
x = 0;
|
||||||
|
for (w = 0; w < softwareRenderer->nWindows; ++w) {
|
||||||
|
uint32_t backdrop = FLAG_UNWRITTEN | FLAG_PRIORITY | FLAG_IS_BACKGROUND;
|
||||||
|
if (!softwareRenderer->target1Bd || softwareRenderer->blendEffect == BLEND_NONE || softwareRenderer->blendEffect == BLEND_ALPHA || !softwareRenderer->windows[w].control.blendEnable) {
|
||||||
|
backdrop |= softwareRenderer->normalPalette[0];
|
||||||
|
} else {
|
||||||
|
backdrop |= softwareRenderer->variantPalette[0];
|
||||||
|
}
|
||||||
|
for (; x < softwareRenderer->windows[w].endX; ++x) {
|
||||||
|
uint32_t color = softwareRenderer->row[x];
|
||||||
|
if (color & FLAG_TARGET_1) {
|
||||||
|
softwareRenderer->row[x] = _mix(softwareRenderer->bldb, backdrop, softwareRenderer->blda, color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
memcpy(row, softwareRenderer->row, VIDEO_HORIZONTAL_PIXELS * sizeof(*row));
|
memcpy(row, softwareRenderer->row, VIDEO_HORIZONTAL_PIXELS * sizeof(*row));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue