Limit frame rate
This commit is contained in:
parent
a6d857fe83
commit
1105a54543
3
TODO.md
3
TODO.md
|
@ -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
|
||||||
|
|
|
@ -239,6 +239,22 @@
|
||||||
(define world (make-world boot-actions))
|
(define world (make-world boot-actions))
|
||||||
(define event-queue (make-queue))
|
(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)
|
(define (inject-event! e)
|
||||||
|
@ -319,7 +335,7 @@
|
||||||
(render-scene! prelude sprites postlude)
|
(render-scene! prelude sprites postlude)
|
||||||
(glFlush)
|
(glFlush)
|
||||||
(swap-gl-buffers)))
|
(swap-gl-buffers)))
|
||||||
(queue-callback (lambda () (refresh)) #f))
|
(queue-callback (lambda () (sleep-and-refresh)) #f))
|
||||||
|
|
||||||
(define/override (on-size width height)
|
(define/override (on-size width height)
|
||||||
(with-gl-context
|
(with-gl-context
|
||||||
|
|
Loading…
Reference in New Issue