#lang, re-indentation, brackets, etc

svn: r11545
This commit is contained in:
Eli Barzilay 2008-09-04 22:52:55 +00:00
parent 7becde46d4
commit 727227e04b

View File

@ -1,4 +1,4 @@
(module gl mzscheme
#lang mzscheme
(require mzlib/foreign
"gl-types.ss"
"gl-vectors.ss")
@ -14,98 +14,94 @@
[else (ffi-lib "libGLU")]))
(define (unavailable name)
(lambda ()
(lambda x
(error name "unavailable on this system"))))
(lambda () (lambda x (error name "unavailable on this system"))))
(define-syntax define-foreign-lib
(syntax-rules (->)
((_ lib name type ... ->)
(define-foreign-lib lib name type ... -> _void))
((_ lib name type ...)
[(_ lib name type ... ->)
(define-foreign-lib lib name type ... -> _void)]
[(_ lib name type ...)
(begin
;(printf "~a~n" 'name)
;; (printf "~a~n" 'name)
(provide name)
(define name
(get-ffi-obj 'name lib (_fun type ...) (unavailable 'name)))))))
(get-ffi-obj 'name lib (_fun type ...) (unavailable 'name))))]))
(define-syntax define-foreign
(syntax-rules ()
((_ args ...)
(define-foreign-lib gl-lib args ...))))
[(_ args ...) (define-foreign-lib gl-lib args ...)]))
(define-for-syntax (get-type x err)
(case (syntax-object->datum x)
((b) #'_gl-byte)
((s) #'_gl-short)
((i) #'_gl-int)
((f) #'_gl-float)
((d) #'_gl-double)
((ub) #'_gl-ubyte)
((us) #'_gl-ushort)
((ui) #'_gl-uint)
((bv) #'_gl-bytev)
((sv) #'_gl-shortv)
((iv) #'_gl-intv)
((fv) #'_gl-floatv)
((dv) #'_gl-doublev)
((ubv) #'_gl-ubytev)
((usv) #'_gl-ushortv)
((uiv) #'_gl-uintv)
(else (raise-syntax-error #f "unknown GL type abbreviation" err x))))
[(b) #'_gl-byte]
[(s) #'_gl-short]
[(i) #'_gl-int]
[(f) #'_gl-float]
[(d) #'_gl-double]
[(ub) #'_gl-ubyte]
[(us) #'_gl-ushort]
[(ui) #'_gl-uint]
[(bv) #'_gl-bytev]
[(sv) #'_gl-shortv]
[(iv) #'_gl-intv]
[(fv) #'_gl-floatv]
[(dv) #'_gl-doublev]
[(ubv) #'_gl-ubytev]
[(usv) #'_gl-ushortv]
[(uiv) #'_gl-uintv]
[else (raise-syntax-error #f "unknown GL type abbreviation" err x)]))
(define-for-syntax (get-vtype x err)
(case (syntax-object->datum x)
((bv) #'_gl-byte)
((sv) #'_gl-short)
((iv) #'_gl-int)
((fv) #'_gl-float)
((dv) #'_gl-double)
((ubv) #'_gl-ubyte)
((usv) #'_gl-ushort)
((uiv) #'_gl-uint)
(else (raise-syntax-error #f "unknown GL type abbreviation" err x))))
[(bv) #'_gl-byte]
[(sv) #'_gl-short]
[(iv) #'_gl-int]
[(fv) #'_gl-float]
[(dv) #'_gl-double]
[(ubv) #'_gl-ubyte]
[(usv) #'_gl-ushort]
[(uiv) #'_gl-uint]
[else (raise-syntax-error #f "unknown GL type abbreviation" err x)]))
(define-for-syntax (type-map type convert)
(syntax-case type (: =)
((label : type) #`(label : #,(type-map #'type convert)))
((type = expr) #`(#,(type-map #'type convert) = expr))
((label : type = expr) #`(label : #,(type-map #'type convert) = expr))
(_
(convert type))))
[(label : type) #`(label : #,(type-map #'type convert))]
[(type = expr) #`(#,(type-map #'type convert) = expr)]
[(label : type = expr) #`(label : #,(type-map #'type convert) = expr)]
[_ (convert type)]))
(define-syntax (define-foreign-tparm stx)
(syntax-case stx (->)
((_ name (suffix ...) type ...)
(let* ((name-sym (syntax-object->datum #'name))
(build-def
[(_ name (suffix ...) type ...)
(let* ([name-sym (syntax-object->datum #'name)]
[build-def
(lambda (suffix)
(with-syntax ((new-name
(with-syntax ([new-name
(datum->syntax-object
#'name
(string->symbol
(format "~a~a"
name-sym
(syntax-object->datum suffix)))
#'name))
((new-type ...)
#'name)]
[(new-type ...)
(map
(lambda (type)
(type-map
type
(lambda (type)
(syntax-case type (T outT)
(T (get-type suffix stx))
((T n)
[T (get-type suffix stx)]
[(T n)
#`(_cvector o
#,(get-vtype suffix stx)
n))
(_ type)))))
(syntax->list #'(type ...)))))
#'(define-foreign new-name new-type ...)))))
(with-syntax (((defs ...)
(map build-def (syntax->list #'(suffix ...)))))
#'(begin defs ...))))))
n)]
[_ type]))))
(syntax->list #'(type ...)))])
#'(define-foreign new-name new-type ...)))])
(with-syntax ([(defs ...)
(map build-def (syntax->list #'(suffix ...)))])
#'(begin defs ...)))]))
;; 2.5
(define-foreign glGetError -> _gl-enum)
@ -289,7 +285,7 @@
;; 3.6.3
(define-foreign-tparm glPixelTransfer (i f) _gl-enum T ->)
(define-foreign-tparm glPixelMap (uiv usv fv)
_gl-enum (_gl-sizei = (cvector-length l)) (l : T) ->)
_gl-enum [_gl-sizei = (cvector-length l)] [l : T] ->)
(define-foreign glColorTable
_gl-enum _gl-enum _gl-sizei _gl-enum _gl-enum _gl-voidv ->)
(define-foreign-tparm glColorTableParameter (iv fv) _gl-enum _gl-enum T ->)
@ -382,13 +378,13 @@
;; 3.8.12
(define-foreign glBindTexture _gl-enum _gl-uint ->)
(define-foreign glDeleteTextures
(_gl-sizei = (cvector-length v)) (v : _gl-uintv) ->)
[_gl-sizei = (cvector-length v)] [v : _gl-uintv] ->)
(define-foreign glGenTextures
(n : _gl-sizei) (r : (_cvector o _gl-uint n)) -> _void -> r)
[n : _gl-sizei] [r : (_cvector o _gl-uint n)] -> _void -> r)
(define-foreign glAreTexturesResident
(n : _gl-sizei = (cvector-length v)) (v : _gl-uintv)
(r : (_cvector o _gl-boolean n)) ->
(r2 : _gl-boolean) -> (values r2 r))
[n : _gl-sizei = (cvector-length v)] [v : _gl-uintv]
[r : (_cvector o _gl-boolean n)] ->
[r2 : _gl-boolean] -> (values r2 r))
;; 3.8.13
(define-foreign-tparm glTexEnv (i f) _gl-enum _gl-enum T ->)
@ -418,8 +414,9 @@
(define-foreign glBeginQuery _gl-enum _gl-uint ->)
(define-foreign glEndQuery _gl-enum ->)
(define-foreign glGenQueries
(n : _gl-sizei) (r : (_cvector o _gl-uint n)) -> _void -> r)
(define-foreign glDeleteQueries (_gl-sizei = (cvector-length v)) (v : _gl-uintv) ->)
[n : _gl-sizei] [r : (_cvector o _gl-uint n)] -> _void -> r)
(define-foreign glDeleteQueries [_gl-sizei = (cvector-length v)]
[v : _gl-uintv] ->)
;; 4.1.8
(define-foreign glBlendEquation _gl-enum ->)
@ -492,44 +489,42 @@
(define (select-buffer->gl-uint-vector sbo)
(unless (select-buffer-object? sbo)
(raise-type-error 'select-buffer->gl-uint-vector "select-buffer-object" sbo))
(let* ((l (select-buffer-object-len sbo))
(p (select-buffer-object-ptr sbo))
(v (make-gl-uint-vector l)))
(let loop ((i 0))
(let* ([l (select-buffer-object-len sbo)]
[p (select-buffer-object-ptr sbo)]
[v (make-gl-uint-vector l)])
(let loop ([i 0])
(when (< i l)
(gl-vector-set! v i (ptr-ref p _gl-uint i))
(loop (add1 i))))
v))
(define-foreign glSelectBuffer
(n : _gl-sizei) (mem : _pointer = (malloc n _gl-uint 'raw)) ->
[n : _gl-sizei] [mem : _pointer = (malloc n _gl-uint 'raw)] ->
_void ->
(let ((o (make-select-buffer-object mem n)))
(register-finalizer o (lambda (sbo)
(free (select-buffer-object-ptr sbo))))
(let ([o (make-select-buffer-object mem n)])
(register-finalizer o (lambda (sbo) (free (select-buffer-object-ptr sbo))))
o))
;; 5.3
(define-struct feedback-buffer-object (ptr len))
(provide feedback-buffer->gl-float-vector)
(define (feedback-buffer->gl-float-vector fbo)
(unless (feedback-buffer-object? fbo)
(raise-type-error 'feedback-buffer->gl-uint-vector "feedback-buffer-object" fbo))
(let* ((l (feedback-buffer-object-len fbo))
(p (feedback-buffer-object-ptr fbo))
(v (make-gl-float-vector l)))
(let loop ((i 0))
(raise-type-error 'feedback-buffer->gl-uint-vector
"feedback-buffer-object" fbo))
(let* ([l (feedback-buffer-object-len fbo)]
[p (feedback-buffer-object-ptr fbo)]
[v (make-gl-float-vector l)])
(let loop ([i 0])
(when (< i l)
(gl-vector-set! v i (ptr-ref p _gl-float i))
(loop (add1 i))))
v))
(define-foreign glFeedbackBuffer
(n : _gl-sizei) _gl-enum (mem : _pointer = (malloc _gl-float n 'raw)) ->
[n : _gl-sizei] _gl-enum [mem : _pointer = (malloc _gl-float n 'raw)] ->
_void ->
(let ((o (make-feedback-buffer-object mem n)))
(register-finalizer o (lambda (fbo)
(free (feedback-buffer-object-ptr fbo))))
(let ([o (make-feedback-buffer-object mem n)])
(register-finalizer o (lambda (fbo) (free (feedback-buffer-object-ptr fbo))))
o))
(define-foreign glPassThrough _gl-float ->)
@ -552,40 +547,40 @@
;; 6.1.1
(define-foreign glGetBooleanv
_gl-enum (n : _?) (r : (_cvector o _gl-boolean n)) ->
_gl-enum [n : _?] [r : (_cvector o _gl-boolean n)] ->
_void -> r)
(define-foreign glGetIntegerv
_gl-enum (n : _?) (r : (_cvector o _gl-int n)) -> _void -> r)
_gl-enum [n : _?] [r : (_cvector o _gl-int n)] -> _void -> r)
(define-foreign glGetFloatv
_gl-enum (n : _?) (r : (_cvector o _gl-float n)) ->
_gl-enum [n : _?] [r : (_cvector o _gl-float n)] ->
_void -> r)
(define-foreign glGetDoublev
_gl-enum (n : _?) (r : (_cvector o _gl-double n)) ->
_gl-enum [n : _?] [r : (_cvector o _gl-double n)] ->
_void -> r)
(define-foreign glIsEnabled _gl-enum -> _gl-boolean)
;; 6.1.3
(define-foreign glGetClipPlane
_gl-enum (r : (_cvector o _gl-double 4)) -> _void -> r)
_gl-enum [r : (_cvector o _gl-double 4)] -> _void -> r)
(define-foreign-tparm glGetLight (iv fv)
_gl-enum _gl-enum (n : _?) (r : (T n)) -> _void -> r)
_gl-enum _gl-enum [n : _?] [r : (T n)] -> _void -> r)
(define-foreign-tparm glGetMaterial (iv fv)
_gl-enum _gl-enum (n : _?) (r : (T n)) -> _void -> r)
_gl-enum _gl-enum [n : _?] [r : (T n)] -> _void -> r)
(define-foreign-tparm glGetTexEnv (iv fv)
_gl-enum _gl-enum (n : _?) (r : (T n)) -> _void -> r)
_gl-enum _gl-enum [n : _?] [r : (T n)] -> _void -> r)
(define-foreign-tparm glGetTexGen (iv fv dv)
_gl-enum _gl-enum (n : _?) (r : (T n)) -> _void -> r)
_gl-enum _gl-enum [n : _?] [r : (T n)] -> _void -> r)
(define-foreign-tparm glGetTexParameter (iv fv)
_gl-enum _gl-enum (n : _?) (r : (T n)) -> _void -> r)
_gl-enum _gl-enum [n : _?] [r : (T n)] -> _void -> r)
(define-foreign-tparm glGetTexLevelParameter (iv fv)
_gl-enum _gl-int _gl-enum (n : _?) (r : (T n)) ->
_gl-enum _gl-int _gl-enum [n : _?] [r : (T n)] ->
_void -> r)
(define-foreign-tparm glGetPixelMap (uiv usv fv)
_gl-enum (n : _?) (r : (T n)) -> _void -> r)
_gl-enum [n : _?] [r : (T n)] -> _void -> r)
(define-foreign-tparm glGetMap (iv fv dv)
_gl-enum _gl-enum (n : _?) (r : (T n)) -> _void -> r)
_gl-enum _gl-enum [n : _?] [r : (T n)] -> _void -> r)
(define-foreign-tparm glGetBufferParameter (iv)
_gl-enum _gl-enum (n : _?) (r : (T n)) -> _void -> r)
_gl-enum _gl-enum [n : _?] [r : (T n)] -> _void -> r)
;; 6.1.4
@ -605,21 +600,21 @@
(define-foreign glGetSeparableFilter
_gl-enum _gl-enum _gl-enum _gl-voidv _gl-voidv _gl-voidv ->)
(define-foreign-tparm glGetConvolutionParameter (iv fv)
_gl-enum _gl-enum (n : _?) (r : (T n)) -> _void -> r)
_gl-enum _gl-enum [n : _?] [r : (T n)] -> _void -> r)
;; 6.1.9
(define-foreign glGetHistogram
_gl-enum _gl-boolean _gl-enum _gl-enum _gl-voidv ->)
(define-foreign glResetHistogram _gl-enum ->)
(define-foreign-tparm glGetHistogramParameter (iv fv)
_gl-enum _gl-enum (n : _?) (r : (T n)) -> _void -> r)
_gl-enum _gl-enum [n : _?] [r : (T n)] -> _void -> r)
;; 6.1.10
(define-foreign glGetMinmax
_gl-enum _gl-boolean _gl-enum _gl-enum _gl-voidv ->)
(define-foreign glResetMinmax _gl-enum ->)
(define-foreign-tparm glGetMinmaxParameter (iv fv)
_gl-enum _gl-enum (n : _?) (r : (T n)) -> _void -> r)
_gl-enum _gl-enum [n : _?] [r : (T n)] -> _void -> r)
;; 6.1.11
#|
@ -630,9 +625,9 @@
;; 6.1.12
(define-foreign glIsQuery _gl-uint -> _gl-boolean)
(define-foreign-tparm glGetQuery (iv)
_gl-enum _gl-enum (n : _?) (r : (T n)) -> _void -> r)
_gl-enum _gl-enum [n : _?] [r : (T n)] -> _void -> r)
(define-foreign-tparm glGetQueryObject (iv uiv)
_gl-uint _gl-enum (n : _?) (r : (T n)) -> _void -> r)
_gl-uint _gl-enum [n : _?] [r : (T n)] -> _void -> r)
;; 6.1.13
(define-foreign glIsBuffer _gl-uint -> _gl-boolean)
@ -648,10 +643,9 @@
(define-foreign glPopAttrib ->)
(define-foreign glPopClientAttrib ->)
(define-syntax define-foreignu
(syntax-rules ()
((_ args ...) (define-foreign-lib glu-lib args ...))))
[(_ args ...) (define-foreign-lib glu-lib args ...)]))
;; 2
(define-foreignu gluGetString _gl-enum -> _string)
@ -687,28 +681,29 @@
(define-foreignu gluLookAt _gl-double _gl-double _gl-double
_gl-double _gl-double _gl-double
_gl-double _gl-double _gl-double ->)
(define-foreignu gluPickMatrix _gl-double _gl-double _gl-double _gl-double _gl-intv ->)
(define-foreignu gluPickMatrix
_gl-double _gl-double _gl-double _gl-double _gl-intv ->)
;; 4.2
(define-foreignu gluProject _gl-double _gl-double _gl-double
_gl-doublev _gl-doublev _gl-intv
(r1 : (_ptr o _gl-double))
(r2 : (_ptr o _gl-double))
(r3 : (_ptr o _gl-double)) ->
[r1 : (_ptr o _gl-double)]
[r2 : (_ptr o _gl-double)]
[r3 : (_ptr o _gl-double)] ->
_void -> (gl-double-vector r1 r2 r3))
(define-foreignu gluUnProject _gl-double _gl-double _gl-double
_gl-doublev _gl-doublev _gl-intv
(r1 : (_ptr o _gl-double))
(r2 : (_ptr o _gl-double))
(r3 : (_ptr o _gl-double)) ->
[r1 : (_ptr o _gl-double)]
[r2 : (_ptr o _gl-double)]
[r3 : (_ptr o _gl-double)] ->
_void -> (gl-double-vector r1 r2 r3))
(define-foreignu gluUnProject4 _gl-double _gl-double _gl-double _gl-double
_gl-doublev _gl-doublev _gl-intv
_gl-clampd _gl-clampd
(r1 : (_ptr o _gl-double))
(r2 : (_ptr o _gl-double))
(r3 : (_ptr o _gl-double))
(r4 : (_ptr o _gl-double)) ->
[r1 : (_ptr o _gl-double)]
[r2 : (_ptr o _gl-double)]
[r3 : (_ptr o _gl-double)]
[r4 : (_ptr o _gl-double)] ->
_void -> (gl-double-vector r1 r2 r3 r4))
;; 5.1
@ -747,26 +742,23 @@
;; 6.1
(define _glu-quadric
(_cpointer 'quadric _pointer
#f
(lambda (q*)
(register-finalizer q* gluDeleteQuadric)
q*)))
(_cpointer 'quadric _pointer #f
(lambda (q*) (register-finalizer q* gluDeleteQuadric) q*)))
(define-foreignu gluNewQuadric -> _glu-quadric)
;; Don't use define-foreign, because this shouldn't be provided
(define gluDeleteQuadric
(with-handlers ((exn:fail:filesystem?
(with-handlers ([exn:fail:filesystem?
(lambda (ex)
(lambda x
(error 'gluDeleteQuadric
"unavailable on this system")))))
"unavailable on this system")))])
(get-ffi-obj 'gluDeleteQuadric glu-lib (_fun _glu-quadric -> _void))))
;; 6.2
;;(define-foreignu gluQuadricCallback
;; _glu-quadric (_gl-enum = GLU_ERROR) (_fun _gl-enum -> _void) ->)
;; _glu-quadric [_gl-enum = GLU_ERROR] (_fun _gl-enum -> _void) ->)
;; 6.3
(define-foreignu gluQuadricNormals _glu-quadric _gl-enum ->)
@ -776,13 +768,11 @@
;; 6.4
(define-foreignu gluSphere _glu-quadric _gl-double _gl-int _gl-int ->)
(define-foreignu gluCylinder _glu-quadric _gl-double _gl-double _gl-double
_gl-int _gl-int ->)
(define-foreignu gluDisk
_glu-quadric _gl-double _gl-double _gl-int _gl-int ->)
(define-foreignu gluCylinder
_glu-quadric _gl-double _gl-double _gl-double _gl-int _gl-int ->)
(define-foreignu gluDisk _glu-quadric _gl-double _gl-double _gl-int _gl-int ->)
(define-foreignu gluPartialDisk
_glu-quadric _gl-double _gl-double _gl-int _gl-int
_gl-double _gl-double ->)
_glu-quadric _gl-double _gl-double _gl-int _gl-int _gl-double _gl-double ->)
;; 7.1
#|
@ -799,14 +789,16 @@
;; 7.3
#|
(define-foreignu gluBeginCurve _glu-nurbs* ->)
(define-foreignu gluNurbsCurve _glu-nurbs* _gl-int _gl-floatv _gl-int _gl-floatv _gl-int _gl-enum ->)
(define-foreignu gluNurbsCurve
_glu-nurbs* _gl-int _gl-floatv _gl-int _gl-floatv _gl-int _gl-enum ->)
(define-foreignu gluEndCurve _glu-nurbs* ->)
|#
;; 7.4
#|
(define-foreignu gluBeginSurface _glu-nurbs* ->)
(define-foreignu gluNurbsSurface _glu-nurbs* _gl-int _gl-floatv _gl-int _gl-floatv _gl-int
(define-foreignu gluNurbsSurface
_glu-nurbs* _gl-int _gl-floatv _gl-int _gl-floatv _gl-int
_gl-int _gl-floatv _gl-int _gl-int _gl-enum ->)
(define-foreignu gluEndSurface _glu-nurbs* ->)
|#
@ -831,12 +823,8 @@
(define-syntax define-enum
(syntax-rules ()
((_ d v)
(begin
(provide d)
(define d v)))
((_ _ d v)
(define-enum d v))))
[(_ d v) (begin (provide d) (define d v))]
[(_ _ d v) (define-enum d v)]))
;; Enumeration constants for version 1.0 and 1.1
;; These values are all taken from MESA's gl.h.
@ -1829,4 +1817,3 @@
(define-enum GLU_TESS_WINDING_NEGATIVE 100133)
(define-enum GLU_TESS_WINDING_ABS_GEQ_TWO 100134)
(define-enum GLU_TESS_MAX_COORD 1.0e150)
)