... | ... |
@@ -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 |
|