changeset 82:9a69db231531

Fix async-layer copying wrong (not the most recently updated) buffer on screen.
author Mikhail Kryshen <mikhail@kryshen.net>
date Thu, 02 Sep 2010 04:29:21 +0400
parents 5d2153e8a28d
children b5bb0e16507d
files src/net/kryshen/indyvon/async.clj
diffstat 1 files changed, 13 insertions(+), 10 deletions(-) [+]
line diff
     1.1 --- a/src/net/kryshen/indyvon/async.clj	Thu Sep 02 03:55:44 2010 +0400
     1.2 +++ b/src/net/kryshen/indyvon/async.clj	Thu Sep 02 04:29:21 2010 +0400
     1.3 @@ -36,7 +36,7 @@
     1.4  ;;   :back
     1.5  ;;      being rendered to (offscreen)
     1.6  ;;   :fresh
     1.7 -;;      offscreen rendering finished
     1.8 +;;      most recently updated
     1.9  ;;   :free
    1.10  ;;      not in use
    1.11  
    1.12 @@ -82,18 +82,21 @@
    1.13           readers (if (= state :front)
    1.14                     (dec (:readers buffer))
    1.15                     (:readers buffer))
    1.16 +         fresh (delay (find-buffer @(:buffers al) :fresh))
    1.17           state (cond
    1.18                  (pos? readers) :front
    1.19 -                (= :back (:state buffer)) :fresh
    1.20 -                :default :free)]
    1.21 -     (when (= state :fresh)
    1.22 +                (= :back state) :fresh
    1.23 +                @fresh :free
    1.24 +                :default :fresh)]
    1.25 +     (if (and (= state :fresh) @fresh)
    1.26         ;; Change state of the prefiously fresh buffer to :free.
    1.27 -       (when-let [fresh (find-buffer @(:buffers al) :fresh)]
    1.28 -         (alter (:buffers al) replace-buffer (assoc fresh
    1.29 -                                               :state :free))))
    1.30 -     (alter (:buffers al) replace-buffer (assoc buffer
    1.31 -                                           :state state
    1.32 -                                           :readers readers)))))
    1.33 +       (alter (:buffers al)
    1.34 +              replace-buffer (assoc @fresh
    1.35 +                               :state :free)))
    1.36 +     (alter (:buffers al)
    1.37 +            replace-buffer (assoc buffer
    1.38 +                             :state state
    1.39 +                             :readers readers)))))
    1.40  
    1.41  (defmacro with-buffer
    1.42    {:private true}