mirror of https://github.com/mgba-emu/mgba.git
DS Video: Fix non-zero sprite extended palettes
This commit is contained in:
parent
9b5bda237a
commit
7b8fc0dbaa
|
@ -85,6 +85,7 @@ static bool _regenerateExtPalette(struct DSVideoSoftwareRenderer* renderer, bool
|
|||
}
|
||||
if (obj) {
|
||||
softwareRenderer->objExtPalette = palette;
|
||||
softwareRenderer->objExtVariantPalette = variantPalette;
|
||||
} else {
|
||||
if (slot >= 2) {
|
||||
if (GBARegisterBGCNTIsExtPaletteSlot(softwareRenderer->bg[slot - 2].control)) {
|
||||
|
|
|
@ -203,7 +203,15 @@ int GBAVideoSoftwareRendererPreprocessSprite(struct GBAVideoSoftwareRenderer* re
|
|||
int objwinSlowPath = GBARegisterDISPCNTIsObjwinEnable(renderer->dispcnt) && GBAWindowControlGetBlendEnable(renderer->objwin.packed) != GBAWindowControlIsBlendEnable(renderer->currentWindow.packed);
|
||||
|
||||
if (GBAObjAttributesAIs256Color(sprite->a) && renderer->objExtPalette) {
|
||||
palette = renderer->objExtPalette;
|
||||
if (!variant) {
|
||||
palette = renderer->objExtPalette;
|
||||
objwinPalette = palette;
|
||||
} else {
|
||||
palette = renderer->objExtVariantPalette;
|
||||
if (GBAWindowControlIsBlendEnable(renderer->objwin.packed)) {
|
||||
objwinPalette = palette;
|
||||
}
|
||||
}
|
||||
} else if (variant) {
|
||||
palette = &renderer->variantPalette[0x100];
|
||||
if (GBAWindowControlIsBlendEnable(renderer->objwin.packed)) {
|
||||
|
@ -289,7 +297,7 @@ int GBAVideoSoftwareRendererPreprocessSprite(struct GBAVideoSoftwareRenderer* re
|
|||
} else {
|
||||
SPRITE_TRANSFORMED_LOOP(16, NORMAL);
|
||||
}
|
||||
} else {
|
||||
} else if (!renderer->objExtPalette) {
|
||||
if (flags & FLAG_OBJWIN) {
|
||||
SPRITE_TRANSFORMED_LOOP(256, OBJWIN);
|
||||
} else if (objwinSlowPath) {
|
||||
|
@ -297,6 +305,16 @@ int GBAVideoSoftwareRendererPreprocessSprite(struct GBAVideoSoftwareRenderer* re
|
|||
} else {
|
||||
SPRITE_TRANSFORMED_LOOP(256, NORMAL);
|
||||
}
|
||||
} else {
|
||||
palette = &palette[GBAObjAttributesCGetPalette(sprite->c) << 8];
|
||||
if (flags & FLAG_OBJWIN) {
|
||||
SPRITE_TRANSFORMED_LOOP(256, OBJWIN);
|
||||
} else if (objwinSlowPath) {
|
||||
objwinPalette = &objwinPalette[GBAObjAttributesCGetPalette(sprite->c) << 8];
|
||||
SPRITE_TRANSFORMED_LOOP(256, NORMAL_OBJWIN);
|
||||
} else {
|
||||
SPRITE_TRANSFORMED_LOOP(256, NORMAL);
|
||||
}
|
||||
}
|
||||
if (x + totalWidth > renderer->masterEnd) {
|
||||
renderer->spriteCyclesRemaining -= (x + totalWidth - renderer->masterEnd) * 2;
|
||||
|
@ -343,12 +361,11 @@ int GBAVideoSoftwareRendererPreprocessSprite(struct GBAVideoSoftwareRenderer* re
|
|||
} else {
|
||||
SPRITE_NORMAL_LOOP(16, NORMAL);
|
||||
}
|
||||
} else {
|
||||
} else if (!renderer->objExtPalette) {
|
||||
if (flags & FLAG_OBJWIN) {
|
||||
SPRITE_NORMAL_LOOP(256, OBJWIN);
|
||||
} else if (mosaicH > 1) {
|
||||
if (objwinSlowPath) {
|
||||
objwinPalette = &objwinPalette[GBAObjAttributesCGetPalette(sprite->c) << 4];
|
||||
SPRITE_MOSAIC_LOOP(256, NORMAL_OBJWIN);
|
||||
} else {
|
||||
SPRITE_MOSAIC_LOOP(256, NORMAL);
|
||||
|
@ -358,6 +375,24 @@ int GBAVideoSoftwareRendererPreprocessSprite(struct GBAVideoSoftwareRenderer* re
|
|||
} else {
|
||||
SPRITE_NORMAL_LOOP(256, NORMAL);
|
||||
}
|
||||
} else {
|
||||
palette = &palette[GBAObjAttributesCGetPalette(sprite->c) << 8];
|
||||
if (flags & FLAG_OBJWIN) {
|
||||
SPRITE_NORMAL_LOOP(256, OBJWIN);
|
||||
} else if (mosaicH > 1) {
|
||||
if (objwinSlowPath) {
|
||||
objwinPalette = &objwinPalette[GBAObjAttributesCGetPalette(sprite->c) << 8];
|
||||
SPRITE_MOSAIC_LOOP(256, NORMAL_OBJWIN);
|
||||
} else {
|
||||
SPRITE_MOSAIC_LOOP(256, NORMAL);
|
||||
}
|
||||
} else if (objwinSlowPath) {
|
||||
objwinPalette = &objwinPalette[GBAObjAttributesCGetPalette(sprite->c) << 8];
|
||||
SPRITE_NORMAL_LOOP(256, NORMAL_OBJWIN);
|
||||
} else {
|
||||
SPRITE_NORMAL_LOOP(256, NORMAL);
|
||||
}
|
||||
|
||||
}
|
||||
if (x + width > renderer->masterEnd) {
|
||||
renderer->spriteCyclesRemaining -= x + width - renderer->masterEnd;
|
||||
|
|
Loading…
Reference in New Issue