Browse code

Revert "Switch to SDL Timer for redraw handler."

Andrew Alderwick authored on 09/04/2022 11:19:27
Showing 1 changed files
... ...
@@ -88,21 +88,23 @@ stdin_handler(void *p)
88 88
 	(void)p;
89 89
 }
90 90
 
91
-static Uint32
92
-redraw_handler(Uint32 interval, void *p)
91
+static int
92
+redraw_handler(void *p)
93 93
 {
94
-	static int dropped_frames = 0;
95
-	static unsigned int bump_interval = 0;
96
-	SDL_Event event;
97
-	if(SDL_HasEvent(redraw_event) == SDL_FALSE) {
98
-		event.type = redraw_event;
99
-		dropped_frames = 0;
100
-	} else if(++dropped_frames == TIMEOUT_FRAMES) {
101
-		event.type = interrupt_event;
94
+	int dropped_frames = 0, stop = 0;
95
+	SDL_Event event, interrupt;
96
+	event.type = redraw_event;
97
+	interrupt.type = interrupt_event;
98
+	while(!stop) {
99
+		SDL_Delay(16);
100
+		if(SDL_HasEvent(redraw_event) == SDL_FALSE) {
101
+			stop = SDL_PushEvent(&event) < 0;
102
+			dropped_frames = 0;
103
+		} else if(++dropped_frames == TIMEOUT_FRAMES) {
104
+			stop = SDL_PushEvent(&interrupt) < 0;
105
+		}
102 106
 	}
103
-	SDL_PushEvent(&event);
104
-	return 16 + (bump_interval++ % 3 == 0);
105
-	(void)interval;
107
+	return 0;
106 108
 	(void)p;
107 109
 }
108 110
 
... ...
@@ -158,7 +160,7 @@ init(void)
158 160
 	as.callback = audio_callback;
159 161
 	as.samples = 512;
160 162
 	as.userdata = NULL;
161
-	if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK | SDL_INIT_TIMER) < 0)
163
+	if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK) < 0)
162 164
 		return error("sdl", SDL_GetError());
163 165
 	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);
164 166
 	if(gWindow == NULL)
... ...
@@ -177,7 +179,7 @@ init(void)
177 179
 	redraw_event = SDL_RegisterEvents(1);
178 180
 	interrupt_event = SDL_RegisterEvents(1);
179 181
 	SDL_DetachThread(SDL_CreateThread(stdin_handler, "stdin", NULL));
180
-	SDL_AddTimer(16, redraw_handler, NULL);
182
+	SDL_DetachThread(SDL_CreateThread(redraw_handler, "redraw", NULL));
181 183
 	SDL_StartTextInput();
182 184
 	SDL_ShowCursor(SDL_DISABLE);
183 185
 	SDL_EventState(SDL_DROPFILE, SDL_ENABLE);