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 d;
|
||||||
struct GBAVideoRenderer* backend;
|
struct GBAVideoRenderer* backend;
|
||||||
struct mVideoLogger* logger;
|
struct mVideoLogger* logger;
|
||||||
|
int flushScanline;
|
||||||
};
|
};
|
||||||
|
|
||||||
void GBAVideoProxyRendererCreate(struct GBAVideoProxyRenderer* renderer, struct GBAVideoRenderer* backend, struct mVideoLogger* logger);
|
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);
|
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) {
|
static void _GBACoreSetOverride(struct mCore* core, const void* override) {
|
||||||
@ -730,6 +738,10 @@ static void _GBACoreReset(struct mCore* core) {
|
|||||||
if (renderer && core->videoLogger) {
|
if (renderer && core->videoLogger) {
|
||||||
GBAVideoProxyRendererCreate(&gbacore->proxyRenderer, renderer, core->videoLogger);
|
GBAVideoProxyRendererCreate(&gbacore->proxyRenderer, renderer, core->videoLogger);
|
||||||
renderer = &gbacore->proxyRenderer.d;
|
renderer = &gbacore->proxyRenderer.d;
|
||||||
|
|
||||||
|
int flushScanline = -1;
|
||||||
|
mCoreConfigGetIntValue(&core->config, "threadedVideo.flushScanline", &flushScanline);
|
||||||
|
gbacore->proxyRenderer.flushScanline = flushScanline;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (renderer) {
|
if (renderer) {
|
||||||
|
@ -75,6 +75,7 @@ void GBAVideoProxyRendererCreate(struct GBAVideoProxyRenderer* renderer, struct
|
|||||||
logger->vramSize = GBA_SIZE_VRAM;
|
logger->vramSize = GBA_SIZE_VRAM;
|
||||||
logger->oamSize = GBA_SIZE_OAM;
|
logger->oamSize = GBA_SIZE_OAM;
|
||||||
|
|
||||||
|
renderer->flushScanline = -1;
|
||||||
renderer->backend = backend;
|
renderer->backend = backend;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -359,6 +360,9 @@ void GBAVideoProxyRendererWriteOAM(struct GBAVideoRenderer* renderer, uint32_t o
|
|||||||
|
|
||||||
void GBAVideoProxyRendererDrawScanline(struct GBAVideoRenderer* renderer, int y) {
|
void GBAVideoProxyRendererDrawScanline(struct GBAVideoRenderer* renderer, int y) {
|
||||||
struct GBAVideoProxyRenderer* proxyRenderer = (struct GBAVideoProxyRenderer*) renderer;
|
struct GBAVideoProxyRenderer* proxyRenderer = (struct GBAVideoProxyRenderer*) renderer;
|
||||||
|
if (proxyRenderer->flushScanline == y) {
|
||||||
|
mVideoLoggerRendererFlush(proxyRenderer->logger);
|
||||||
|
}
|
||||||
if (!proxyRenderer->logger->block) {
|
if (!proxyRenderer->logger->block) {
|
||||||
_copyExtraState(proxyRenderer);
|
_copyExtraState(proxyRenderer);
|
||||||
proxyRenderer->backend->drawScanline(proxyRenderer->backend, y);
|
proxyRenderer->backend->drawScanline(proxyRenderer->backend, y);
|
||||||
@ -375,7 +379,9 @@ void GBAVideoProxyRendererFinishFrame(struct GBAVideoRenderer* renderer) {
|
|||||||
proxyRenderer->backend->finishFrame(proxyRenderer->backend);
|
proxyRenderer->backend->finishFrame(proxyRenderer->backend);
|
||||||
}
|
}
|
||||||
mVideoLoggerRendererFinishFrame(proxyRenderer->logger);
|
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) {
|
static void GBAVideoProxyRendererGetPixels(struct GBAVideoRenderer* renderer, size_t* stride, const void** pixels) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user