diff options
author | David Thompson <dthompson2@worcester.edu> | 2015-09-09 09:02:40 -0400 |
---|---|---|
committer | David Thompson <dthompson2@worcester.edu> | 2015-09-09 09:02:40 -0400 |
commit | 5b8f43d7a5cad91e81e85b81f3fc41a80f84c647 (patch) | |
tree | 3ba066b99d19bbb650238a5e862e2bfa6f81fb69 /sly/render.scm | |
parent | afe98dbcd760a15eb70b8f39cddf34a8dddd761f (diff) |
render: Add separate projection and model-view matrix stacks.
Just like the Opengl 2.x days! ;)
* sly/render.scm (graphics-transform, graphics-transform-mul!,
graphics-transform-identity!): Delete.
(graphics-model-view-transform, graphics-model-view-mul!,
graphics-model-view-identity!, graphics-projection-transform,
graphics-projection-mul!, graphics-projection-identity!): New
procedures.
(with-model-view-excursion, with-projection-excursion): New syntax.
(call-with-transform-excursion): Move matrix copying out of the "in
guard."
(draw-scene): Use new matrix stacks.
Diffstat (limited to 'sly/render.scm')
-rw-r--r-- | sly/render.scm | 44 |
1 files changed, 31 insertions, 13 deletions
diff --git a/sly/render.scm b/sly/render.scm index c1d19e3..6ff7bb9 100644 --- a/sly/render.scm +++ b/sly/render.scm @@ -54,11 +54,15 @@ set-graphics-framebuffer! graphics-viewport set-graphics-viewport! - graphics-transform - graphics-transform-mul! - graphics-transform-identity! + graphics-model-view-transform + graphics-model-view-mul! + graphics-model-view-identity! + with-model-view-excursion + graphics-projection-transform + graphics-projection-mul! + graphics-projection-identity! + with-projection-excursion with-graphics - with-transform-excursion with-graphics-excursion)) ;;; @@ -84,9 +88,10 @@ (define (call-with-transform-excursion stack thunk) (let ((t (q-pop! stack))) (dynamic-wind + (const #t) (lambda () - (copy-transform! t (q-front stack))) - thunk + (copy-transform! t (q-front stack)) + (thunk)) (lambda () (q-push! stack t))))) @@ -180,20 +185,33 @@ body ... (graphics-reset! gfx))) -(define (graphics-transform gfx) +(define (graphics-model-view-transform gfx) (q-front (graphics-model-view gfx))) -(define (graphics-transform-mul! gfx t) +(define (graphics-model-view-mul! gfx t) (stack-transform-mul! (graphics-model-view gfx) t)) -(define (graphics-transform-identity! gfx) +(define (graphics-model-view-identity! gfx) (stack-transform-identity! (graphics-model-view gfx))) -;; emacs: (put 'with-transform-excursion 'scheme-indent-function 1) -(define-syntax-rule (with-transform-excursion gfx body ...) +;; emacs: (put 'with-model-view-excursion 'scheme-indent-function 1) +(define-syntax-rule (with-model-view-excursion gfx body ...) (call-with-transform-excursion (graphics-model-view gfx) - (lambda () - body ...))) + (lambda () body ...))) + +(define (graphics-projection-transform gfx) + (q-front (graphics-projection gfx))) + +(define (graphics-projection-mul! gfx t) + (stack-transform-mul! (graphics-projection gfx) t)) + +(define (graphics-projection-identity! gfx) + (stack-transform-identity! (graphics-projection gfx))) + +;; emacs: (put 'with-projection-excursion 'scheme-indent-function 1) +(define-syntax-rule (with-projection-excursion gfx body ...) + (call-with-transform-excursion (graphics-projection gfx) + (lambda () body ...))) (define-syntax-rule (with-graphics-excursion gfx body ...) (match gfx |