Permalink
Browse files

GBA Video: Improve sprite cycle counting (fixes #1126)

  • Loading branch information...
endrift committed Jul 21, 2018
1 parent 070f318 commit 4f246827a63b1874bd940f43dd8fe22dfae02ed6
Showing with 4 additions and 3 deletions.
  1. +1 −0 CHANGES
  2. +3 −3 src/gba/renderers/software-obj.c
View
@@ -41,6 +41,7 @@ Bugfixes:
- GBA BIOS: Fix BitUnPack final byte
- GB I/O: DMA register is R/W
- GB Video: Fix SCX timing
+ - GBA Video: Improve sprite cycle counting (fixes mgba.io/i/1126)
Misc:
- GBA Timer: Use global cycles for timers
- 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)) {
int totalWidth = width << GBAObjAttributesAGetDoubleSize(sprite->a);
int totalHeight = height << GBAObjAttributesAGetDoubleSize(sprite->a);
- renderer->spriteCyclesRemaining -= 10;
struct GBAOAMMatrix mat;
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);
@@ -253,6 +252,7 @@ int GBAVideoSoftwareRendererPreprocessSprite(struct GBAVideoSoftwareRenderer* re
if (outX < start || outX >= condition) {
return 0;
}
+ renderer->spriteCyclesRemaining -= 10;
if (!GBAObjAttributesAIs256Color(sprite->a)) {
palette = &palette[GBAObjAttributesCGetPalette(sprite->c) << 4];
@@ -273,7 +273,7 @@ int GBAVideoSoftwareRendererPreprocessSprite(struct GBAVideoSoftwareRenderer* re
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;
}
} else {
@@ -333,7 +333,7 @@ int GBAVideoSoftwareRendererPreprocessSprite(struct GBAVideoSoftwareRenderer* re
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;
}
}

0 comments on commit 4f24682

Please sign in to comment.