Limit frame rate

This commit is contained in:
Tony Garnock-Jones 2015-10-23 11:49:16 -04:00
parent a6d857fe83
commit 1105a54543
2 changed files with 19 additions and 2 deletions

View File

@ -1 +1,2 @@
- Some way of clamping the frame rate to e.g. 60Hz and failing that 24Hz
- Some way of adjusting target frame rate based on whether we're
achieving the goal or not; e.g. fall back from 60Hz to 24Hz

View File

@ -239,6 +239,22 @@
(define world (make-world boot-actions))
(define event-queue (make-queue))
(define target-frame-rate 30)
(define frame-count 0)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define (sleep-and-refresh)
(define target-sim-time (* frame-count (/ target-frame-rate)))
(define sleep-time (- target-sim-time (/ (sim-time) 1000.0)))
(when (positive? sleep-time)
(sleep/yield sleep-time))
(refresh)
(set! frame-count (+ frame-count 1)))
(define/public (set-target-frame-rate! r)
(set! target-frame-rate r))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define (inject-event! e)
@ -319,7 +335,7 @@
(render-scene! prelude sprites postlude)
(glFlush)
(swap-gl-buffers)))
(queue-callback (lambda () (refresh)) #f))
(queue-callback (lambda () (sleep-and-refresh)) #f))
(define/override (on-size width height)
(with-gl-context