From e69dd364bdbe15a0ab5d62c609f88b0952462c9d Mon Sep 17 00:00:00 2001 From: David Thompson Date: Sat, 6 Jun 2015 14:54:13 -0400 Subject: render: context: Add with-render-context-excursion macro. * sly/render/context.scm (with-render-context-excursion): New syntax. --- sly/render/context.scm | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/sly/render/context.scm b/sly/render/context.scm index f87bff2..fe16104 100644 --- a/sly/render/context.scm +++ b/sly/render/context.scm @@ -49,7 +49,8 @@ render-context-viewport set-render-context-viewport! render-context-transform render-context-transform*! render-context-transform-identity! - with-transform-excursion)) + with-transform-excursion + with-render-context-excursion)) (define-record-type (%make-gl-parameter default bind value) @@ -173,3 +174,23 @@ (define (render-context-transform-identity! context) (copy-transform! identity-transform (render-context-transform context))) + +(define-syntax-rule (with-render-context-excursion context body ...) + (match context + (($ blend-mode depth-test? texture shader mesh + viewport framebuffer _) + (let ((prev-blend-mode (gl-parameter-ref blend-mode)) + (prev-depth-test? (gl-parameter-ref depth-test?)) + (prev-texture (gl-parameter-ref texture)) + (prev-shader (gl-parameter-ref shader)) + (prev-mesh (gl-parameter-ref mesh)) + (prev-framebuffer (gl-parameter-ref framebuffer)) + (prev-viewport (gl-parameter-ref viewport))) + body ... + (gl-parameter-set! blend-mode prev-blend-mode) + (gl-parameter-set! depth-test? prev-depth-test?) + (gl-parameter-set! texture prev-texture) + (gl-parameter-set! shader prev-shader) + (gl-parameter-set! mesh prev-mesh) + (gl-parameter-set! framebuffer prev-framebuffer) + (gl-parameter-set! viewport prev-viewport))))) -- cgit v1.2.3