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  ;;