GBA Video: Add sprite cycle counting to GL (fixes #1635)
Vicki Pfau vi@endrift.com
Wed, 10 Jun 2020 02:19:41 -0700
2 files changed,
6 insertions(+),
0 deletions(-)
M
CHANGES
→
CHANGES
@@ -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.c
→
src/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);