(define gl% (class canvas% (inherit with-gl-context swap-gl-buffers) (define/public (with-gl p) (with-gl-context p)) (define/public (blit) (with-gl-context (lambda () (swap-gl-buffers) (glFlush)))) (super-instantiate ()))) ;; p = parent, w = width, h = height (define make-gl (lambda (p w h) (new gl% (parent p) (min-width w) (min-height h) (stretchable-width #f) (stretchable-height #f)))) (define with-gl (lambda (g p) (send g with-gl p))) (define gl-blit (lambda (g) (send g blit))) (define-syntax in-gl (syntax-rules () ((_ g body ...) (with-gl g (lambda () body ...))))) ;; Vector variants. (define (glNormal3fv* v) (glNormal3fv (vector->gl-float-vector v))) (define (glVertex2fv* v) (glVertex2fv (vector->gl-float-vector v))) (define (glVertex3fv* v) (glVertex3fv (vector->gl-float-vector v))) (define (glVertex4fv* v) (glVertex4fv (vector->gl-float-vector v))) (define (glColor3fv* v) (glColor3fv (vector->gl-float-vector v))) (define (glColor4fv* v) (glColor4fv (vector->gl-float-vector v))) (define (glLightfv* l p v) (glLightfv l p (vector->gl-float-vector v))) (define (glLight4f l p r g b a) (glLightfv l p (gl-float-vector r g b a)))