array parameters also accept pointers
authorDaniel Hartwig <mandyke@gmail.com>
Sun, 10 Feb 2013 09:18:18 +0000 (17:18 +0800)
committerDaniel Hartwig <mandyke@gmail.com>
Sun, 10 Feb 2013 09:20:50 +0000 (17:20 +0800)
* figl/gl/types.scm (coerce-array-pointer): Renamed from
  array->pointer.  Also accept pointers, and perhaps typed-arrays in
  the future.  Removed excess lambda.

figl/gl/types.scm

index 1d14450..4ba5ff1 100644 (file)
 (define-simple-foreign-type void-* '*)
 (define-simple-foreign-type const-GLvoid-* '*)
 
 (define-simple-foreign-type void-* '*)
 (define-simple-foreign-type const-GLvoid-* '*)
 
-(define (array->pointer x)
-  (lambda (x)
-    (if x
-        (ffi:bytevector->pointer x)
-        ffi:%null-pointer)))
+(define (coerce-array-pointer x)
+  (cond
+   ((ffi:pointer? x)
+    x)
+   ((bytevector? x)
+    (ffi:bytevector->pointer x))
+   ;; TODO: (typed-array? x element-type)
+   ((not x)
+    ffi:%null-pointer)
+   (else
+    (error "unhandled array-pointer type" x))))
 
 (define-syntax define-array-foreign-type
   (syntax-rules ()
     ((_ name element-type)
      (define-foreign-type name '*
 
 (define-syntax define-array-foreign-type
   (syntax-rules ()
     ((_ name element-type)
      (define-foreign-type name '*
-       array->pointer
+       coerce-array-pointer
        (lambda (x) x)))))
 
 (define-array-foreign-type GLboolean-* GLboolean)
        (lambda (x) x)))))
 
 (define-array-foreign-type GLboolean-* GLboolean)