all repos — mgba @ eeeac7af7708635953360295a3924ef1e1665016

mGBA Game Boy Advance Emulator

DS Video: Refactor and simplify regenerating extpals
Vicki Pfau vi@endrift.com
Sun, 26 Feb 2017 16:47:06 -0800
commit

eeeac7af7708635953360295a3924ef1e1665016

parent

e4795c5d86c934cb038c076b1bc456109e510fca

1 files changed, 21 insertions(+), 4 deletions(-)

jump to
M src/ds/renderers/software.csrc/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) {