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