Mercurial > hg > indyvon
changeset 78:4c0f2af742ba
Added timestamp to the layer context.
author | Mikhail Kryshen <mikhail@kryshen.net> |
---|---|
date | Wed, 01 Sep 2010 21:13:55 +0400 |
parents | 1ca7872b889b |
children | 5fd50e400124 |
files | src/net/kryshen/indyvon/core.clj src/net/kryshen/indyvon/layers.clj |
diffstat | 2 files changed, 23 insertions(+), 14 deletions(-) [+] |
line diff
1.1 --- a/src/net/kryshen/indyvon/core.clj Tue Aug 31 02:20:24 2010 +0400 1.2 +++ b/src/net/kryshen/indyvon/core.clj Wed Sep 01 21:13:55 2010 +0400 1.3 @@ -44,7 +44,12 @@ 1.4 1.5 (def ^Shape *clip*) 1.6 1.7 -(def *root*) 1.8 +(def ^{:doc "The root (background) layer of the scene."} 1.9 + *root*) 1.10 + 1.11 +(def ^{:doc "Time in nanoseconds when the rendering of the current 1.12 + frame starts."} 1.13 + *time*) 1.14 1.15 (def *event-dispatcher*) 1.16 1.17 @@ -326,7 +331,8 @@ 1.18 *event-dispatcher* event-dispatcher 1.19 *width* width 1.20 *height* height 1.21 - *clip* (Rectangle2D$Double. 0 0 width height)] 1.22 + *clip* (Rectangle2D$Double. 0 0 width height) 1.23 + *time* (System/nanoTime)] 1.24 ;; (.setRenderingHint graphics 1.25 ;; RenderingHints/KEY_INTERPOLATION 1.26 ;; RenderingHints/VALUE_INTERPOLATION_BILINEAR)
2.1 --- a/src/net/kryshen/indyvon/layers.clj Tue Aug 31 02:20:24 2010 +0400 2.2 +++ b/src/net/kryshen/indyvon/layers.clj Wed Sep 01 21:13:55 2010 +0400 2.3 @@ -284,27 +284,30 @@ 2.4 (.drawRect *graphics* x y w h)))) 2.5 width height)) 2.6 2.7 +(defn- fps-label [text] 2.8 + (padding (label text :right :bottom) 5)) 2.9 + 2.10 (defn fps-layer 2.11 "Creates layer that draws content and displays 2.12 the frames per seconds rate." 2.13 [content] 2.14 - (let [update-interval 0.1 2.15 + (let [update-interval 2E8 ; 0.2 s in nanoseconds 2.16 frames (ref 0) 2.17 - prev-time (ref 0) 2.18 - display (ref nil)] 2.19 + prev-time (ref nil) 2.20 + display (ref (fps-label "fps n/a"))] 2.21 (decorate-layer content [_] 2.22 (draw! content) 2.23 (draw! 2.24 (dosync 2.25 - (alter frames + 1) 2.26 - (let [time (System/nanoTime) 2.27 - elapsed (/ (- time @prev-time) 1E9) 2.28 - fps (/ @frames elapsed)] 2.29 - (when (or (> elapsed update-interval) (not @display)) 2.30 - (ref-set display 2.31 - (border (label (format "%.1f" fps) :right :bottom) 0 5)) 2.32 - (ref-set frames 0) 2.33 - (ref-set prev-time time))) 2.34 + (alter frames inc) 2.35 + (if @prev-time 2.36 + (let [elapsed (- *time* @prev-time)] 2.37 + (when (> elapsed update-interval) 2.38 + (let [fps (/ @frames (/ elapsed 1E9))] 2.39 + (ref-set display (fps-label (format "%.1f" fps))) 2.40 + (ref-set frames 0) 2.41 + (ref-set prev-time *time*)))) 2.42 + (ref-set prev-time *time*)) 2.43 @display))))) 2.44 2.45 ;;