GBA Video: Don't draw sprites using unmapped VRAM in GL renderer (fixes #1865)

This commit is contained in:
Vicki Pfau 2020-08-22 21:56:57 -07:00
parent a1dfd69c06
commit 50d38dff62
2 changed files with 5 additions and 0 deletions

View File

@ -7,6 +7,7 @@ Emulation fixes:
- GBA Audio: Fix volume/mute in XQ audio (fixes mgba.io/i/1864)
- GBA Hardware: Fix GB Player detection on big endian platforms
- GBA Video: Invalidate map cache when modifying BGCNT (fixes mgba.io/i/1846)
- GBA Video: Don't draw sprites using unmapped VRAM in GL renderer (fixes mgba.io/i/1865)
Other fixes:
- 3DS: Redo video sync to be more precise
- 3DS: Fix crash with libctru 2.0 when exiting

View File

@ -1647,6 +1647,10 @@ void GBAVideoGLRendererDrawSprite(struct GBAVideoGLRenderer* renderer, struct GB
int32_t x = (uint32_t) GBAObjAttributesBGetX(sprite->b) << 23;
x >>= 23;
if (GBARegisterDISPCNTGetMode(renderer->dispcnt) >= 3 && GBAObjAttributesCGetTile(sprite->c) < 512) {
return;
}
int align = GBAObjAttributesAIs256Color(sprite->a) && !GBARegisterDISPCNTIsObjCharacterMapping(renderer->dispcnt);
unsigned charBase = (BASE_TILE >> 1) + (GBAObjAttributesCGetTile(sprite->c) & ~align) * 0x10;
int stride = GBARegisterDISPCNTIsObjCharacterMapping(renderer->dispcnt) ? (width >> 3) : (0x20 >> GBAObjAttributesAGet256Color(sprite->a));