Browse code

Clamp at 60fps

neauoire authored on 04/04/2021 18:47:13
Showing 2 changed files
... ...
@@ -28,7 +28,7 @@ else
28 28
 fi
29 29
 
30 30
 echo "Assembling.."
31
-./bin/assembler projects/software/left.usm bin/boot.rom
31
+./bin/assembler projects/software/noodle.usm bin/boot.rom
32 32
 
33 33
 echo "Running.."
34 34
 if [ "${2}" = '--cli' ]; 
... ...
@@ -564,37 +564,41 @@ ppnil(Uxn *u, Uint16 ptr, Uint8 b0, Uint8 b1)
564 564
 
565 565
 #pragma mark - Generics
566 566
 
567
+void
568
+runevents(Uxn *u)
569
+{
570
+	SDL_Event event;
571
+	while(SDL_PollEvent(&event) != 0) {
572
+		switch(event.type) {
573
+		case SDL_QUIT: quit(); break;
574
+		case SDL_MOUSEBUTTONUP:
575
+		case SDL_MOUSEBUTTONDOWN:
576
+		case SDL_MOUSEMOTION: domouse(u, &event); break;
577
+		case SDL_TEXTINPUT: dotext(u, &event); break;
578
+		case SDL_KEYDOWN: doctrl(u, &event, 1); break;
579
+		case SDL_KEYUP: doctrl(u, &event, 0); break;
580
+		case SDL_WINDOWEVENT:
581
+			if(event.window.event == SDL_WINDOWEVENT_EXPOSED)
582
+				redraw(pixels, u);
583
+			break;
584
+		}
585
+	}
586
+}
587
+
567 588
 int
568 589
 start(Uxn *u)
569 590
 {
570
-	int ticknext = 0;
571 591
 	evaluxn(u, PAGE_VECTORS);
572
-	if(screen.reqdraw)
573
-		redraw(pixels, u);
592
+	redraw(pixels, u);
574 593
 	while(1) {
575
-		int tick = SDL_GetTicks();
576
-		SDL_Event event;
577
-		if(tick < ticknext)
578
-			SDL_Delay(ticknext - tick);
579
-		ticknext = tick + (1000 / FPS);
580
-		while(SDL_PollEvent(&event) != 0) {
581
-			switch(event.type) {
582
-			case SDL_QUIT: quit(); break;
583
-			case SDL_MOUSEBUTTONUP:
584
-			case SDL_MOUSEBUTTONDOWN:
585
-			case SDL_MOUSEMOTION: domouse(u, &event); break;
586
-			case SDL_TEXTINPUT: dotext(u, &event); break;
587
-			case SDL_KEYDOWN: doctrl(u, &event, 1); break;
588
-			case SDL_KEYUP: doctrl(u, &event, 0); break;
589
-			case SDL_WINDOWEVENT:
590
-				if(event.window.event == SDL_WINDOWEVENT_EXPOSED)
591
-					redraw(pixels, u);
592
-				break;
593
-			}
594
-		}
594
+		float elapsed;
595
+		double start = SDL_GetPerformanceCounter();
596
+		runevents(u);
595 597
 		evaluxn(u, PAGE_VECTORS + 0x08);
596 598
 		if(screen.reqdraw)
597 599
 			redraw(pixels, u);
600
+		elapsed = (SDL_GetPerformanceCounter() - start) / (double)SDL_GetPerformanceFrequency() * 1000.0f;
601
+		SDL_Delay(floor(16.666f - elapsed));
598 602
 	}
599 603
 }
600 604