all repos — mgba @ 1d89cb9ba000f4eafc0b39a70d4ad72f9f283951

mGBA Game Boy Advance Emulator

DS Video: Super unoptimized palette updating
Vicki Pfau vi@endrift.com
Mon, 27 Feb 2017 01:31:49 -0800
commit

1d89cb9ba000f4eafc0b39a70d4ad72f9f283951

parent

3f27b09ec162439b252f30246746b16577b990b0

2 files changed, 26 insertions(+), 4 deletions(-)

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

@@ -86,14 +86,16 @@ 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; + softwareRenderer->bg[slot - 2].variantPalette = variantPalette; } } else if (slot < 2 && !GBARegisterBGCNTIsExtPaletteSlot(softwareRenderer->bg[slot].control) ) { softwareRenderer->bg[slot].extPalette = palette; + softwareRenderer->bg[slot].variantPalette = variantPalette; } softwareRenderer->bg[slot].extPalette = palette; + softwareRenderer->bg[slot].variantPalette = variantPalette; } return true; }

@@ -283,6 +285,24 @@ softwareRenderer->engB.masterBrightY = DSRegisterMASTER_BRIGHTGetY(value);

if (softwareRenderer->engB.masterBrightY > 0x10) { softwareRenderer->engB.masterBrightY = 0x10; } + break; + case DS9_REG_A_BLDCNT: + case DS9_REG_A_BLDY: + // TODO: Optimize + _regenerateExtPalette(softwareRenderer, false, false, 0); + _regenerateExtPalette(softwareRenderer, false, false, 1); + _regenerateExtPalette(softwareRenderer, false, false, 2); + _regenerateExtPalette(softwareRenderer, false, false, 3); + _regenerateExtPalette(softwareRenderer, true, false, 0); + break; + case DS9_REG_B_BLDCNT: + case DS9_REG_B_BLDY: + // TODO: Optimize + _regenerateExtPalette(softwareRenderer, false, true, 0); + _regenerateExtPalette(softwareRenderer, false, true, 1); + _regenerateExtPalette(softwareRenderer, false, true, 2); + _regenerateExtPalette(softwareRenderer, false, true, 3); + _regenerateExtPalette(softwareRenderer, true, true, 0); break; case DS9_REG_A_DISPCNT_LO: softwareRenderer->dispcntA &= 0xFFFF0000;

@@ -626,6 +646,9 @@

BACKGROUND_BITMAP_INIT; color_t* mainPalette = background->extPalette; + if (variant) { + palette = background->variantPalette; + } int paletteData; uint16_t mapData;
M src/gba/renderers/software-mode0.csrc/gba/renderers/software-mode0.c

@@ -655,10 +655,9 @@ int variant = background->target1 && GBAWindowControlIsBlendEnable(renderer->currentWindow.packed) && (renderer->blendEffect == BLEND_BRIGHTEN || renderer->blendEffect == BLEND_DARKEN);

color_t* mainPalette; if (background->multipalette && background->extPalette) { mainPalette = background->extPalette; - // TODO - /*if (variant) { + if (variant) { mainPalette = background->variantPalette; - }*/ + } } else { mainPalette = renderer->normalPalette; if (variant) {