Revert "Switch to SDL Timer for redraw handler."

This commit is contained in:
Andrew Alderwick 2022-04-09 12:19:27 +01:00
parent 96f4510a03
commit 72c7296a47
1 changed files with 17 additions and 15 deletions

View File

@ -88,21 +88,23 @@ stdin_handler(void *p)
(void)p; (void)p;
} }
static Uint32 static int
redraw_handler(Uint32 interval, void *p) redraw_handler(void *p)
{ {
static int dropped_frames = 0; int dropped_frames = 0, stop = 0;
static unsigned int bump_interval = 0; SDL_Event event, interrupt;
SDL_Event event; event.type = redraw_event;
if(SDL_HasEvent(redraw_event) == SDL_FALSE) { interrupt.type = interrupt_event;
event.type = redraw_event; while(!stop) {
dropped_frames = 0; SDL_Delay(16);
} else if(++dropped_frames == TIMEOUT_FRAMES) { if(SDL_HasEvent(redraw_event) == SDL_FALSE) {
event.type = interrupt_event; stop = SDL_PushEvent(&event) < 0;
dropped_frames = 0;
} else if(++dropped_frames == TIMEOUT_FRAMES) {
stop = SDL_PushEvent(&interrupt) < 0;
}
} }
SDL_PushEvent(&event); return 0;
return 16 + (bump_interval++ % 3 == 0);
(void)interval;
(void)p; (void)p;
} }
@ -158,7 +160,7 @@ init(void)
as.callback = audio_callback; as.callback = audio_callback;
as.samples = 512; as.samples = 512;
as.userdata = NULL; as.userdata = NULL;
if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK | SDL_INIT_TIMER) < 0) if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK) < 0)
return error("sdl", SDL_GetError()); return error("sdl", SDL_GetError());
gWindow = SDL_CreateWindow("Uxn", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, (WIDTH + PAD * 2) * zoom, (HEIGHT + PAD * 2) * zoom, SDL_WINDOW_SHOWN | SDL_WINDOW_ALLOW_HIGHDPI); gWindow = SDL_CreateWindow("Uxn", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, (WIDTH + PAD * 2) * zoom, (HEIGHT + PAD * 2) * zoom, SDL_WINDOW_SHOWN | SDL_WINDOW_ALLOW_HIGHDPI);
if(gWindow == NULL) if(gWindow == NULL)
@ -177,7 +179,7 @@ init(void)
redraw_event = SDL_RegisterEvents(1); redraw_event = SDL_RegisterEvents(1);
interrupt_event = SDL_RegisterEvents(1); interrupt_event = SDL_RegisterEvents(1);
SDL_DetachThread(SDL_CreateThread(stdin_handler, "stdin", NULL)); SDL_DetachThread(SDL_CreateThread(stdin_handler, "stdin", NULL));
SDL_AddTimer(16, redraw_handler, NULL); SDL_DetachThread(SDL_CreateThread(redraw_handler, "redraw", NULL));
SDL_StartTextInput(); SDL_StartTextInput();
SDL_ShowCursor(SDL_DISABLE); SDL_ShowCursor(SDL_DISABLE);
SDL_EventState(SDL_DROPFILE, SDL_ENABLE); SDL_EventState(SDL_DROPFILE, SDL_ENABLE);