diff options
author | David Thompson <dthompson2@worcester.edu> | 2015-09-21 19:44:10 -0400 |
---|---|---|
committer | David Thompson <dthompson2@worcester.edu> | 2015-09-21 19:48:44 -0400 |
commit | 46544b7dba0081f22e686f70c606a338c7fa52dd (patch) | |
tree | 9688f43493606f7b0e4da8784a7804cc32f128eb /examples/font.scm | |
parent | b7bf25020f146331d161d86ef30df31d2959a8dc (diff) |
render: Reimplement rendering engine using functional combinators.
Warning: This is a huge commit.
I completely gutted the old scene graph and replaced it with a somewhat
monadic rendering combinator module instead. The interface remains
purely functional, but replaces the <model> data type with procedures in
the rendering monad instead. This opens the door for
rendering *anything*, not just meshes. Now I can implement particle
systems and other non-static things.
Diffstat (limited to 'examples/font.scm')
-rw-r--r-- | examples/font.scm | 39 |
1 files changed, 22 insertions, 17 deletions
diff --git a/examples/font.scm b/examples/font.scm index 4d481d3..64d32e0 100644 --- a/examples/font.scm +++ b/examples/font.scm @@ -20,39 +20,44 @@ (sly signal) (sly window) (sly math vector) + (sly render) (sly render camera) (sly render color) (sly render font) - (sly render model) - (sly render scene) + (sly render sprite) + (sly render texture) (sly input mouse)) (load "common.scm") (define font (load-default-font 18)) -(define-signal message-label - (model-move (vector2 320 240) - (label font "The quick brown fox jumped over the lazy dog." - #:anchor 'center))) +(define camera (2d-camera #:area (make-rect 0 0 640 480))) -(define-signal fps-label +(define-signal render-message + (move (vector2 320 240) + (render-sprite + (make-label font "The quick brown fox jumped over the lazy dog." + #:anchor 'center)))) + +(define-signal render-fps (signal-let ((fps fps)) (let ((text (format #f "FPS: ~d" fps))) - (model-move (vector2 0 480) (label font text))))) + (move (vector2 0 480) + (render-sprite (make-label font text)))))) -(define-signal mouse-label - (signal-let ((pos (signal-throttle 5 mouse-position))) +(define-signal render-mouse + (signal-let ((pos (signal-throttle 10 mouse-position))) (let ((text (format #f "Mouse: (~d, ~d)" (vx pos) (vy pos)))) - (model-move (vector2 0 460) (label font text))))) - -(define-signal model - (signal-map model-group message-label fps-label mouse-label)) - -(define camera (orthographic-camera 640 480)) + (move (vector2 0 460) + (render-sprite (make-label font text)))))) (define-signal scene - (signal-map (lambda (model) (make-scene camera model)) model)) + (signal-let ((message render-message) + (fps render-fps) + (mouse render-mouse)) + (with-camera camera + (render-begin message fps mouse)))) (with-window (make-window #:title "Fonts") (run-game-loop scene)) |