remove low-level gl-begin/end from high-level bindings
authorDaniel Hartwig <mandyke@gmail.com>
Mon, 11 Feb 2013 03:30:35 +0000 (11:30 +0800)
committerDaniel Hartwig <mandyke@gmail.com>
Mon, 11 Feb 2013 03:30:35 +0000 (11:30 +0800)
* figl/gl.scm (gl-begin): Replace low-level re-export with syntax form
  like 'begin'.  Return final value from body expressions.  Require at
  least one body expression.

figl/gl.scm

index be84a81..1dd853e 100644 (file)
 ;;; 2.6 Begin/End Paradigm
 ;;;
 
+;; emacs: (put! 'gl-begin 'scheme-indent-function 1)
+(define-syntax gl-begin
+  (syntax-rules ()
+    ((_ mode body1 body2 ...)
+     (call-with-values
+         (lambda ()
+           (%glBegin mode)
+           body1 body2 ...)
+       (lambda vals
+         (%glEnd)
+         (apply values vals))))))
+
 (define (gl-edge-flag flag)
   (%glEdgeFlag (if flag (boolean true) (boolean false))))
 
-(re-export (%glBegin . gl-begin)
-           (%glEnd . gl-end))
+(export-syntax gl-begin)
 
 (export gl-edge-flag)
 
-(define-syntax with-gl-begin ; terrible name
-  (syntax-rules ()
-    ((_ mode body ...)
-     (begin
-       (gl-begin mode)
-       body ...
-       (gl-end)))))
-
-(export-syntax with-gl-begin)
-
 ;;;
 ;;; 2.7 Vertex Specification
 ;;;