mirror of https://github.com/mgba-emu/mgba.git
GBA Video: Improve sprite cycle counting (fixes #1126)
This commit is contained in:
parent
070f318c15
commit
4f246827a6
1
CHANGES
1
CHANGES
|
@ -41,6 +41,7 @@ Bugfixes:
|
||||||
- GBA BIOS: Fix BitUnPack final byte
|
- GBA BIOS: Fix BitUnPack final byte
|
||||||
- GB I/O: DMA register is R/W
|
- GB I/O: DMA register is R/W
|
||||||
- GB Video: Fix SCX timing
|
- GB Video: Fix SCX timing
|
||||||
|
- GBA Video: Improve sprite cycle counting (fixes mgba.io/i/1126)
|
||||||
Misc:
|
Misc:
|
||||||
- GBA Timer: Use global cycles for timers
|
- GBA Timer: Use global cycles for timers
|
||||||
- GBA: Extend oddly-sized ROMs to full address space (fixes mgba.io/i/722)
|
- GBA: Extend oddly-sized ROMs to full address space (fixes mgba.io/i/722)
|
||||||
|
|
|
@ -193,7 +193,6 @@ int GBAVideoSoftwareRendererPreprocessSprite(struct GBAVideoSoftwareRenderer* re
|
||||||
if (GBAObjAttributesAIsTransformed(sprite->a)) {
|
if (GBAObjAttributesAIsTransformed(sprite->a)) {
|
||||||
int totalWidth = width << GBAObjAttributesAGetDoubleSize(sprite->a);
|
int totalWidth = width << GBAObjAttributesAGetDoubleSize(sprite->a);
|
||||||
int totalHeight = height << GBAObjAttributesAGetDoubleSize(sprite->a);
|
int totalHeight = height << GBAObjAttributesAGetDoubleSize(sprite->a);
|
||||||
renderer->spriteCyclesRemaining -= 10;
|
|
||||||
struct GBAOAMMatrix mat;
|
struct GBAOAMMatrix mat;
|
||||||
LOAD_16(mat.a, 0, &renderer->d.oam->mat[GBAObjAttributesBGetMatIndex(sprite->b)].a);
|
LOAD_16(mat.a, 0, &renderer->d.oam->mat[GBAObjAttributesBGetMatIndex(sprite->b)].a);
|
||||||
LOAD_16(mat.b, 0, &renderer->d.oam->mat[GBAObjAttributesBGetMatIndex(sprite->b)].b);
|
LOAD_16(mat.b, 0, &renderer->d.oam->mat[GBAObjAttributesBGetMatIndex(sprite->b)].b);
|
||||||
|
@ -253,6 +252,7 @@ int GBAVideoSoftwareRendererPreprocessSprite(struct GBAVideoSoftwareRenderer* re
|
||||||
if (outX < start || outX >= condition) {
|
if (outX < start || outX >= condition) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
renderer->spriteCyclesRemaining -= 10;
|
||||||
|
|
||||||
if (!GBAObjAttributesAIs256Color(sprite->a)) {
|
if (!GBAObjAttributesAIs256Color(sprite->a)) {
|
||||||
palette = &palette[GBAObjAttributesCGetPalette(sprite->c) << 4];
|
palette = &palette[GBAObjAttributesCGetPalette(sprite->c) << 4];
|
||||||
|
@ -273,7 +273,7 @@ int GBAVideoSoftwareRendererPreprocessSprite(struct GBAVideoSoftwareRenderer* re
|
||||||
SPRITE_TRANSFORMED_LOOP(256, NORMAL);
|
SPRITE_TRANSFORMED_LOOP(256, NORMAL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (x + totalWidth > VIDEO_HORIZONTAL_PIXELS) {
|
if (end == VIDEO_HORIZONTAL_PIXELS && x + totalWidth > VIDEO_HORIZONTAL_PIXELS) {
|
||||||
renderer->spriteCyclesRemaining -= (x + totalWidth - VIDEO_HORIZONTAL_PIXELS) * 2;
|
renderer->spriteCyclesRemaining -= (x + totalWidth - VIDEO_HORIZONTAL_PIXELS) * 2;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -333,7 +333,7 @@ int GBAVideoSoftwareRendererPreprocessSprite(struct GBAVideoSoftwareRenderer* re
|
||||||
SPRITE_NORMAL_LOOP(256, NORMAL);
|
SPRITE_NORMAL_LOOP(256, NORMAL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (x + width > VIDEO_HORIZONTAL_PIXELS) {
|
if (end == VIDEO_HORIZONTAL_PIXELS && x + width > VIDEO_HORIZONTAL_PIXELS) {
|
||||||
renderer->spriteCyclesRemaining -= x + width - VIDEO_HORIZONTAL_PIXELS;
|
renderer->spriteCyclesRemaining -= x + width - VIDEO_HORIZONTAL_PIXELS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue