mirror of https://github.com/mgba-emu/mgba.git
GBA Video: Allow proxy flush timing configuration
This commit is contained in:
parent
fc14b4b0da
commit
a9041b122f
|
@ -17,6 +17,7 @@ struct GBAVideoProxyRenderer {
|
|||
struct GBAVideoRenderer d;
|
||||
struct GBAVideoRenderer* backend;
|
||||
struct mVideoLogger* logger;
|
||||
int flushScanline;
|
||||
};
|
||||
|
||||
void GBAVideoProxyRendererCreate(struct GBAVideoProxyRenderer* renderer, struct GBAVideoRenderer* backend, struct mVideoLogger* logger);
|
||||
|
|
|
@ -479,6 +479,14 @@ static void _GBACoreReloadConfigOption(struct mCore* core, const char* option, c
|
|||
GBAVideoAssociateRenderer(&gba->video, renderer);
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef MINIMAL_CORE
|
||||
if (strcmp("threadedVideo.flushScanline", option) == 0) {
|
||||
int flushScanline = -1;
|
||||
mCoreConfigGetIntValue(config, "threadedVideo.flushScanline", &flushScanline);
|
||||
gbacore->proxyRenderer.flushScanline = flushScanline;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static void _GBACoreSetOverride(struct mCore* core, const void* override) {
|
||||
|
@ -730,6 +738,10 @@ static void _GBACoreReset(struct mCore* core) {
|
|||
if (renderer && core->videoLogger) {
|
||||
GBAVideoProxyRendererCreate(&gbacore->proxyRenderer, renderer, core->videoLogger);
|
||||
renderer = &gbacore->proxyRenderer.d;
|
||||
|
||||
int flushScanline = -1;
|
||||
mCoreConfigGetIntValue(&core->config, "threadedVideo.flushScanline", &flushScanline);
|
||||
gbacore->proxyRenderer.flushScanline = flushScanline;
|
||||
}
|
||||
#endif
|
||||
if (renderer) {
|
||||
|
|
|
@ -75,6 +75,7 @@ void GBAVideoProxyRendererCreate(struct GBAVideoProxyRenderer* renderer, struct
|
|||
logger->vramSize = GBA_SIZE_VRAM;
|
||||
logger->oamSize = GBA_SIZE_OAM;
|
||||
|
||||
renderer->flushScanline = -1;
|
||||
renderer->backend = backend;
|
||||
}
|
||||
|
||||
|
@ -359,6 +360,9 @@ void GBAVideoProxyRendererWriteOAM(struct GBAVideoRenderer* renderer, uint32_t o
|
|||
|
||||
void GBAVideoProxyRendererDrawScanline(struct GBAVideoRenderer* renderer, int y) {
|
||||
struct GBAVideoProxyRenderer* proxyRenderer = (struct GBAVideoProxyRenderer*) renderer;
|
||||
if (proxyRenderer->flushScanline == y) {
|
||||
mVideoLoggerRendererFlush(proxyRenderer->logger);
|
||||
}
|
||||
if (!proxyRenderer->logger->block) {
|
||||
_copyExtraState(proxyRenderer);
|
||||
proxyRenderer->backend->drawScanline(proxyRenderer->backend, y);
|
||||
|
@ -375,7 +379,9 @@ void GBAVideoProxyRendererFinishFrame(struct GBAVideoRenderer* renderer) {
|
|||
proxyRenderer->backend->finishFrame(proxyRenderer->backend);
|
||||
}
|
||||
mVideoLoggerRendererFinishFrame(proxyRenderer->logger);
|
||||
mVideoLoggerRendererFlush(proxyRenderer->logger);
|
||||
if (proxyRenderer->flushScanline < 0) {
|
||||
mVideoLoggerRendererFlush(proxyRenderer->logger);
|
||||
}
|
||||
}
|
||||
|
||||
static void GBAVideoProxyRendererGetPixels(struct GBAVideoRenderer* renderer, size_t* stride, const void** pixels) {
|
||||
|
|
Loading…
Reference in New Issue