all repos — mgba @ 318a96bcb78da0f178fb87aacd78ef86521e4bb2

mGBA Game Boy Advance Emulator

GBA Video: Add sprite cycle counting to GL (fixes #1635)
Vicki Pfau vi@endrift.com
Wed, 10 Jun 2020 02:19:41 -0700
commit

318a96bcb78da0f178fb87aacd78ef86521e4bb2

parent

031049cd067d98cfc1172c15ac448f09300bdfa3

2 files changed, 6 insertions(+), 0 deletions(-)

jump to
M CHANGESCHANGES

@@ -28,6 +28,7 @@ - GBA Video: Fix disabling OBJWIN in GL renderer (fixes mgba.io/i/1759)

- GBA Video: Add missing parts of 256-color mode 0 mosaic (fixes mgba.io/i/1701) - GBA Video: Fix double-size OBJ wrapping in GL renderer (fixes mgba.io/i/1712) - GBA Video: Simplify sprite cycle counting (fixes mgba.io/i/1279) + - GBA Video: Add sprite cycle counting to GL (fixes mgba.io/i/1635) - SM83: Emulate HALT bug Other fixes: - 3DS: Fix framelimiter on newer citro3d (fixes mgba.io/i/1771)
M src/gba/renderers/gl.csrc/gba/renderers/gl.c

@@ -1418,6 +1418,7 @@ glDrawBuffers(1, (GLenum[]) { GL_COLOR_ATTACHMENT0 });

GBAVideoGLRendererDrawWindow(glRenderer, y); if (GBARegisterDISPCNTIsObjEnable(glRenderer->dispcnt) && !glRenderer->d.disableOBJ) { + int spriteCyclesRemaining = GBARegisterDISPCNTIsHblankIntervalFree(glRenderer->dispcnt) ? OBJ_HBLANK_FREE_LENGTH : OBJ_LENGTH; glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); glEnable(GL_STENCIL_TEST); glDepthFunc(GL_LESS);

@@ -1428,6 +1429,10 @@ continue;

} GBAVideoGLRendererDrawSprite(glRenderer, &sprite->obj, y, sprite->y); + spriteCyclesRemaining -= sprite->cycles; + if (spriteCyclesRemaining <= 0) { + break; + } } glDisable(GL_DEPTH_TEST); glDisable(GL_STENCIL_TEST);