DS Video: Refactor and simplify regenerating extpals
Vicki Pfau vi@endrift.com
Sun, 26 Feb 2017 16:47:06 -0800
1 files changed,
21 insertions(+),
4 deletions(-)
jump to
M
src/ds/renderers/software.c
→
src/ds/renderers/software.c
@@ -80,6 +80,19 @@ } else if (softwareRenderer->blendEffect == BLEND_DARKEN) {
variantPalette[i] = _darken(color, softwareRenderer->bldy); } } + if (obj) { + softwareRenderer->objExtPalette = palette; + } else { + if (slot >= 2) { + softwareRenderer->bg[slot].extPalette = palette; + if (GBARegisterBGCNTIsExtPaletteSlot(softwareRenderer->bg[slot - 2].control)) { + softwareRenderer->bg[slot - 2].extPalette = palette; + } + } else if (slot < 2 && !GBARegisterBGCNTIsExtPaletteSlot(softwareRenderer->bg[slot].control) ) { + softwareRenderer->bg[slot].extPalette = palette; + } + softwareRenderer->bg[slot].extPalette = palette; + } return true; }@@ -168,8 +181,8 @@ int slot = i;
if (i < 2 && GBARegisterBGCNTIsExtPaletteSlot(eng->bg[i].control)) { slot += 2; } - if (eng->bg[i].extPalette != &extPalette[slot * 4096] && _regenerateExtPalette(softwareRenderer, false, engB, slot)) { - eng->bg[i].extPalette = &extPalette[slot * 4096]; + if (eng->bg[i].extPalette != &extPalette[slot * 4096]) { + _regenerateExtPalette(softwareRenderer, false, engB, slot); } } } else {@@ -180,9 +193,13 @@ eng->bg[3].extPalette = NULL;
} if (DSRegisterDISPCNTIsObjExtPalette(dispcnt)) { if (!engB) { - softwareRenderer->engA.objExtPalette = softwareRenderer->objExtPaletteA; + if (softwareRenderer->engA.objExtPalette != softwareRenderer->objExtPaletteA) { + _regenerateExtPalette(softwareRenderer, true, engB, 0); + } } else { - softwareRenderer->engB.objExtPalette = softwareRenderer->objExtPaletteB; + if (softwareRenderer->engB.objExtPalette != softwareRenderer->objExtPaletteB) { + _regenerateExtPalette(softwareRenderer, true, engB, 0); + } } } else { if (!engB) {