mirror of https://github.com/mgba-emu/mgba.git
GBA Video: Fix palette when being initialized mid-frame
This commit is contained in:
parent
6a7e80c969
commit
5ecd28cdc6
|
@ -152,7 +152,7 @@ struct GBAVideoGLRenderer {
|
||||||
GLuint paletteTex;
|
GLuint paletteTex;
|
||||||
uint16_t shadowPalette[GBA_VIDEO_VERTICAL_PIXELS][512];
|
uint16_t shadowPalette[GBA_VIDEO_VERTICAL_PIXELS][512];
|
||||||
int nextPalette;
|
int nextPalette;
|
||||||
int lastPalette;
|
int paletteDirtyScanlines;
|
||||||
bool paletteDirty;
|
bool paletteDirty;
|
||||||
|
|
||||||
GLuint vramTex;
|
GLuint vramTex;
|
||||||
|
|
|
@ -931,7 +931,7 @@ void GBAVideoGLRendererReset(struct GBAVideoRenderer* renderer) {
|
||||||
glRenderer->dispcnt = 0x0080;
|
glRenderer->dispcnt = 0x0080;
|
||||||
glRenderer->mosaic = 0;
|
glRenderer->mosaic = 0;
|
||||||
glRenderer->nextPalette = 0;
|
glRenderer->nextPalette = 0;
|
||||||
glRenderer->lastPalette = GBA_VIDEO_VERTICAL_PIXELS - 1;
|
glRenderer->paletteDirtyScanlines = GBA_VIDEO_VERTICAL_PIXELS;
|
||||||
memset(glRenderer->shadowRegs, 0, sizeof(glRenderer->shadowRegs));
|
memset(glRenderer->shadowRegs, 0, sizeof(glRenderer->shadowRegs));
|
||||||
glRenderer->regsDirty = 0xFFFFFFFFFFFEULL;
|
glRenderer->regsDirty = 0xFFFFFFFFFFFEULL;
|
||||||
|
|
||||||
|
@ -965,11 +965,7 @@ void GBAVideoGLRendererWritePalette(struct GBAVideoRenderer* renderer, uint32_t
|
||||||
int g = M_G5(value) << 1;
|
int g = M_G5(value) << 1;
|
||||||
g |= g >> 5;
|
g |= g >> 5;
|
||||||
int b = M_B5(value);
|
int b = M_B5(value);
|
||||||
if (glRenderer->nextPalette) {
|
glRenderer->paletteDirtyScanlines = GBA_VIDEO_VERTICAL_PIXELS;
|
||||||
glRenderer->lastPalette = glRenderer->nextPalette - 1;
|
|
||||||
} else {
|
|
||||||
glRenderer->lastPalette = GBA_VIDEO_VERTICAL_PIXELS - 1;
|
|
||||||
}
|
|
||||||
glRenderer->shadowPalette[glRenderer->nextPalette][address >> 1] = (r << 11) | (g << 5) | b;
|
glRenderer->shadowPalette[glRenderer->nextPalette][address >> 1] = (r << 11) | (g << 5) | b;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1376,7 +1372,10 @@ void GBAVideoGLRendererDrawScanline(struct GBAVideoRenderer* renderer, int y) {
|
||||||
}
|
}
|
||||||
if (glRenderer->paletteDirty) {
|
if (glRenderer->paletteDirty) {
|
||||||
memcpy(glRenderer->shadowPalette[glRenderer->nextPalette], glRenderer->shadowPalette[oldPalette], sizeof(glRenderer->shadowPalette[0]));
|
memcpy(glRenderer->shadowPalette[glRenderer->nextPalette], glRenderer->shadowPalette[oldPalette], sizeof(glRenderer->shadowPalette[0]));
|
||||||
if (glRenderer->nextPalette == glRenderer->lastPalette) {
|
if (glRenderer->paletteDirtyScanlines > 0) {
|
||||||
|
--glRenderer->paletteDirtyScanlines;
|
||||||
|
}
|
||||||
|
if (!glRenderer->paletteDirtyScanlines) {
|
||||||
glRenderer->paletteDirty = false;
|
glRenderer->paletteDirty = false;
|
||||||
glActiveTexture(GL_TEXTURE0);
|
glActiveTexture(GL_TEXTURE0);
|
||||||
glBindTexture(GL_TEXTURE_2D, glRenderer->paletteTex);
|
glBindTexture(GL_TEXTURE_2D, glRenderer->paletteTex);
|
||||||
|
|
Loading…
Reference in New Issue