From 46544b7dba0081f22e686f70c606a338c7fa52dd Mon Sep 17 00:00:00 2001 From: David Thompson Date: Mon, 21 Sep 2015 19:44:10 -0400 Subject: 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 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. --- examples/font.scm | 39 ++++++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 17 deletions(-) (limited to 'examples/font.scm') 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)) -- cgit v1.2.3