GBA Video: Fix OAM in thread proxy

This commit is contained in:
Jeffrey Pfau 2016-08-01 23:33:49 -07:00
parent 54b4c967b8
commit a97276b3a0
1 changed files with 3 additions and 15 deletions

View File

@ -80,7 +80,6 @@ void GBAVideoThreadProxyRendererInit(struct GBAVideoRenderer* renderer) {
proxyRenderer->backend->init(proxyRenderer->backend);
proxyRenderer->vramDirtyBitmap = 0;
memset(proxyRenderer->oamDirtyBitmap, 0, sizeof(proxyRenderer->oamDirtyBitmap));
proxyRenderer->threadState = PROXY_THREAD_IDLE;
ThreadCreate(&proxyRenderer->thread, _proxyThread, proxyRenderer);
}
@ -91,13 +90,9 @@ void GBAVideoThreadProxyRendererReset(struct GBAVideoRenderer* renderer) {
while (proxyRenderer->threadState == PROXY_THREAD_BUSY) {
ConditionWait(&proxyRenderer->fromThreadCond, &proxyRenderer->mutex);
}
int i;
for (i = 0; i < 128; ++i) {
proxyRenderer->oamProxy.raw[i * 4] = 0x0200;
proxyRenderer->oamProxy.raw[i * 4 + 1] = 0x0000;
proxyRenderer->oamProxy.raw[i * 4 + 2] = 0x0000;
proxyRenderer->oamProxy.raw[i * 4 + 3] = 0x0000;
}
memcpy(&proxyRenderer->oamProxy.raw, &renderer->oam->raw, SIZE_OAM);
memcpy(proxyRenderer->paletteProxy, renderer->palette, SIZE_PALETTE_RAM);
memcpy(proxyRenderer->vramProxy, renderer->vram, SIZE_VRAM);
proxyRenderer->backend->reset(proxyRenderer->backend);
MutexUnlock(&proxyRenderer->mutex);
}
@ -183,12 +178,6 @@ void GBAVideoThreadProxyRendererWritePalette(struct GBAVideoRenderer* renderer,
void GBAVideoThreadProxyRendererWriteOAM(struct GBAVideoRenderer* renderer, uint32_t oam) {
struct GBAVideoThreadProxyRenderer* proxyRenderer = (struct GBAVideoThreadProxyRenderer*) renderer;
int bit = 1 << (oam & 31);
int base = oam >> 5;
if (proxyRenderer->oamDirtyBitmap[base] & bit) {
return;
}
proxyRenderer->oamDirtyBitmap[base] |= bit;
struct GBAVideoDirtyInfo dirty = {
DIRTY_OAM,
oam,
@ -247,7 +236,6 @@ void GBAVideoThreadProxyRendererFinishFrame(struct GBAVideoRenderer* renderer) {
} while (proxyRenderer->threadState == PROXY_THREAD_BUSY);
proxyRenderer->backend->finishFrame(proxyRenderer->backend);
proxyRenderer->vramDirtyBitmap = 0;
memset(proxyRenderer->oamDirtyBitmap, 0, sizeof(proxyRenderer->oamDirtyBitmap));
MutexUnlock(&proxyRenderer->mutex);
}