mirror of https://github.com/mgba-emu/mgba.git
GB Video: Frame event cleanup
This commit is contained in:
parent
3e75dae3dc
commit
65473a97f9
|
@ -177,6 +177,7 @@ void GBGetGameCode(const struct GB* gba, char* out);
|
|||
|
||||
void GBTestKeypadIRQ(struct GB* gb);
|
||||
|
||||
void GBFrameStarted(struct GB* gb);
|
||||
void GBFrameEnded(struct GB* gb);
|
||||
|
||||
CXX_GUARD_END
|
||||
|
|
28
src/gb/gb.c
28
src/gb/gb.c
|
@ -816,6 +816,18 @@ void GBGetGameCode(const struct GB* gb, char* out) {
|
|||
}
|
||||
}
|
||||
|
||||
void GBFrameStarted(struct GB* gb) {
|
||||
GBTestKeypadIRQ(gb);
|
||||
|
||||
size_t c;
|
||||
for (c = 0; c < mCoreCallbacksListSize(&gb->coreCallbacks); ++c) {
|
||||
struct mCoreCallbacks* callbacks = mCoreCallbacksListGetPointer(&gb->coreCallbacks, c);
|
||||
if (callbacks->videoFrameStarted) {
|
||||
callbacks->videoFrameStarted(callbacks->context);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GBFrameEnded(struct GB* gb) {
|
||||
GBSramClean(gb, gb->video.frameCounter);
|
||||
|
||||
|
@ -828,7 +840,21 @@ void GBFrameEnded(struct GB* gb) {
|
|||
}
|
||||
}
|
||||
|
||||
GBTestKeypadIRQ(gb);
|
||||
// TODO: Move to common code
|
||||
if (gb->stream && gb->stream->postVideoFrame) {
|
||||
const color_t* pixels;
|
||||
size_t stride;
|
||||
gb->video.renderer->getPixels(gb->video.renderer, &stride, (const void**) &pixels);
|
||||
gb->stream->postVideoFrame(gb->stream, pixels, stride);
|
||||
}
|
||||
|
||||
size_t c;
|
||||
for (c = 0; c < mCoreCallbacksListSize(&gb->coreCallbacks); ++c) {
|
||||
struct mCoreCallbacks* callbacks = mCoreCallbacksListGetPointer(&gb->coreCallbacks, c);
|
||||
if (callbacks->videoFrameEnded) {
|
||||
callbacks->videoFrameEnded(callbacks->context);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
enum GBModel GBNameToModel(const char* model) {
|
||||
|
|
|
@ -337,14 +337,6 @@ void _updateFrameCount(struct mTiming* timing, void* context, uint32_t cyclesLat
|
|||
return;
|
||||
}
|
||||
|
||||
size_t c;
|
||||
for (c = 0; c < mCoreCallbacksListSize(&video->p->coreCallbacks); ++c) {
|
||||
struct mCoreCallbacks* callbacks = mCoreCallbacksListGetPointer(&video->p->coreCallbacks, c);
|
||||
if (callbacks->videoFrameEnded) {
|
||||
callbacks->videoFrameEnded(callbacks->context);
|
||||
}
|
||||
}
|
||||
|
||||
GBFrameEnded(video->p);
|
||||
mCoreSyncPostFrame(video->p->sync);
|
||||
--video->frameskipCounter;
|
||||
|
@ -354,24 +346,10 @@ void _updateFrameCount(struct mTiming* timing, void* context, uint32_t cyclesLat
|
|||
}
|
||||
++video->frameCounter;
|
||||
|
||||
// TODO: Move to common code
|
||||
if (video->p->stream && video->p->stream->postVideoFrame) {
|
||||
const color_t* pixels;
|
||||
size_t stride;
|
||||
video->renderer->getPixels(video->renderer, &stride, (const void**) &pixels);
|
||||
video->p->stream->postVideoFrame(video->p->stream, pixels, stride);
|
||||
}
|
||||
|
||||
if (!GBRegisterLCDCIsEnable(video->p->memory.io[REG_LCDC])) {
|
||||
mTimingSchedule(timing, &video->frameEvent, GB_VIDEO_TOTAL_LENGTH);
|
||||
}
|
||||
|
||||
for (c = 0; c < mCoreCallbacksListSize(&video->p->coreCallbacks); ++c) {
|
||||
struct mCoreCallbacks* callbacks = mCoreCallbacksListGetPointer(&video->p->coreCallbacks, c);
|
||||
if (callbacks->videoFrameStarted) {
|
||||
callbacks->videoFrameStarted(callbacks->context);
|
||||
}
|
||||
}
|
||||
GBFrameStarted(video->p);
|
||||
}
|
||||
|
||||
static void _cleanOAM(struct GBVideo* video, int y) {
|
||||
|
|
Loading…
Reference in New Issue