
because it depends on locating GL headers at configure time, and it creates platform-specific code in the collects tree; the platforms that we support all have the obvious mappings for the GL types
58 lines
1.7 KiB
Racket
58 lines
1.7 KiB
Racket
#lang racket/base
|
|
(require ffi/unsafe
|
|
ffi/cvector)
|
|
|
|
(provide (all-defined-out))
|
|
|
|
(define _float*
|
|
(make-ctype _float
|
|
(lambda (n)
|
|
(if (exact? n)
|
|
(exact->inexact n)
|
|
n))
|
|
#f))
|
|
|
|
(define (make-gl-vector-type t)
|
|
(make-ctype _cvector
|
|
(lambda (sval)
|
|
(unless (cvector? sval)
|
|
(raise-type-error 'Scheme->C "cvector" sval))
|
|
(unless (eq? (cvector-type sval) t)
|
|
(error 'Scheme->C "wrong kind of cvector"))
|
|
sval)
|
|
#f))
|
|
|
|
;; Beware of problems with these type definitions.
|
|
;; They seem to be right for all currently supported
|
|
;; platforms, but in principle they can differ.
|
|
|
|
(define _gl-byte _int8)
|
|
(define _gl-ubyte _uint8)
|
|
(define _gl-short _int16)
|
|
(define _gl-ushort _uint16)
|
|
(define _gl-int _int)
|
|
(define _gl-uint _uint)
|
|
(define _gl-boolean (make-ctype _int8
|
|
(lambda (x)
|
|
(if x 1 0))
|
|
(lambda (x) (not (= x 0)))))
|
|
(define _gl-sizei _int)
|
|
(define _gl-enum _int)
|
|
(define _gl-bitfield _uint)
|
|
(define _gl-float _float*)
|
|
(define _gl-double _double*)
|
|
(define _gl-clampf _float*)
|
|
(define _gl-clampd _double*)
|
|
|
|
(define _gl-bytev (make-gl-vector-type _gl-byte))
|
|
(define _gl-ubytev (make-gl-vector-type _gl-ubyte))
|
|
(define _gl-shortv (make-gl-vector-type _gl-short))
|
|
(define _gl-ushortv (make-gl-vector-type _gl-ushort))
|
|
(define _gl-intv (make-gl-vector-type _gl-int))
|
|
(define _gl-uintv (make-gl-vector-type _gl-uint))
|
|
(define _gl-booleanv (make-gl-vector-type _gl-boolean))
|
|
(define _gl-floatv (make-gl-vector-type _gl-float))
|
|
(define _gl-doublev (make-gl-vector-type _gl-double))
|
|
(define _gl-voidv _cvector)
|
|
|