summaryrefslogtreecommitdiff
path: root/examples/sprite-batch.scm
diff options
context:
space:
mode:
authorDavid Thompson <dthompson2@worcester.edu>2019-01-08 21:46:37 -0500
committerDavid Thompson <dthompson2@worcester.edu>2019-01-08 21:47:53 -0500
commit48b81e45c2e043e5481b80695821ad2bbfcb6e62 (patch)
treebb81da82142aa58c096db4e92fa3d1492d67f34a /examples/sprite-batch.scm
parent8350f7b806d612584be1ff56610ef51202965777 (diff)
examples: Add sprite batch example.
* examples/sprite-batch.scm: New file. * examples/images/shot.png: New file. * Makefile.am (EXTRA_DIST): Add them.
Diffstat (limited to 'examples/sprite-batch.scm')
-rw-r--r--examples/sprite-batch.scm66
1 files changed, 66 insertions, 0 deletions
diff --git a/examples/sprite-batch.scm b/examples/sprite-batch.scm
new file mode 100644
index 0000000..c31ffbf
--- /dev/null
+++ b/examples/sprite-batch.scm
@@ -0,0 +1,66 @@
+(use-modules (chickadee)
+ (chickadee math matrix)
+ (chickadee math rect)
+ (chickadee math vector)
+ (chickadee render)
+ (chickadee render font)
+ (chickadee render sprite)
+ (chickadee render texture)
+ (chickadee scripting)
+ (ice-9 format)
+ (ice-9 match)
+ ((sdl2) #:select (sdl-ticks))
+ (srfi srfi-1)
+ (statprof))
+
+(define texture #f)
+(define start-time (sdl-ticks))
+(define avg-frame-time 16)
+(define num-sprites 5000)
+(define sprites
+ (list-tabulate num-sprites
+ (lambda (n)
+ (list (rect (* (random:uniform) 640.0)
+ (* (random:uniform) 480.0)
+ 16.0 16.0)
+ (vec2 (* (- (random:uniform) 0.5) 0.5)
+ (* (- (random:uniform) 0.5) 0.5))))))
+(define matrix (make-identity-matrix4))
+
+(define (stats-message)
+ (format #f "sprites: ~d fps: ~1,2f"
+ num-sprites
+ (/ 1000.0 avg-frame-time)))
+
+(define stats-text (stats-message))
+
+(define (load)
+ (set! *random-state* (random-state-from-platform))
+ (set! texture (load-image "images/shot.png"))
+ (script
+ (forever
+ (sleep 60)
+ (set! stats-text (stats-message)))))
+
+(define stats-text-pos (vec2 4.0 464.0))
+(define (draw alpha)
+ (with-batched-sprites
+ (for-each (match-lambda
+ ((r v)
+ (set-rect-x! r (+ (rect-x r) (vec2-x v)))
+ (set-rect-y! r (+ (rect-y r) (vec2-y v)))
+ (draw-sprite* texture r matrix)))
+ sprites))
+ (draw-text stats-text stats-text-pos)
+ (let ((current-time (sdl-ticks)))
+ (set! avg-frame-time
+ (+ (* (- current-time start-time) 0.1)
+ (* avg-frame-time 0.9)))
+ (set! start-time current-time)))
+
+(define (update dt)
+ (update-agenda 1))
+
+(gcprof
+ (lambda ()
+ (run-game #:load load #:draw draw #:update update)))