summaryrefslogtreecommitdiff
path: root/sly/render.scm
diff options
context:
space:
mode:
Diffstat (limited to 'sly/render.scm')
-rw-r--r--sly/render.scm44
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