Mercurial > hg > indyvon
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}