[gambit-list] glut callbacks
Eduardo Cavazos
wayo.cavazos at gmail.com
Sat Mar 21 21:50:10 EDT 2009
Eduardo Cavazos wrote:
> I was trying out the opengl library from the wiki.
>
> Some of the functions in the glut library are used to specify callbacks.
> For example, glutReshapeFunc.
>
> In the glut libraries of Ypsilon, Larceny, and Chicken, I'm able to pass
> a Scheme procedure to the 'glutReshapeFunc' procedure.
>
> Is this doable with Gambit? From the sound of the manual, it seems like
> this is not yet supported.
OK, the workaround strategy I mentioned is working great.
In my hacked version of the opengl library, this is the code for
glutReshapeFunc:
----------------------------------------------------------------------
(define *glut-reshape-func* #f)
(c-define (basic-reshape-func width height)
(int int)
void
"basicReshapeFunc"
""
(*glut-reshape-func* width height))
(define (glutReshapeFunc proc)
(set! *glut-reshape-func* proc)
((c-lambda () void " glutReshapeFunc ( basicReshapeFunc ) ; ")))
----------------------------------------------------------------------
glutDisplayFunc is another essential function. The code is similar:
----------------------------------------------------------------------
(define *glut-display-func* #f)
(c-define (basid-display-func)
()
void
"basicDisplayFunc"
""
(*glut-display-func*))
(define (glutDisplayFunc proc)
(set! *glut-display-func* proc)
((c-lambda () void " glutDisplayFunc ( basicDisplayFunc ) ; ")))
----------------------------------------------------------------------
Given those, Gambit (gsi or gsc) is able to run this test program:
----------------------------------------------------------------------
(load "/root/abstracting/support/gambit/gl/gl")
(load "/root/abstracting/support/gambit/glut/glut")
(basic-glut-init)
(define display-func
(lambda ()
(glClearColor 0.0 0.0 0.0 1.0)
(glClear GL_COLOR_BUFFER_BIT)
(glColor4d 1.0 1.0 1.0 1.0)
(glBegin GL_LINES)
(glVertex2d 10.0 10.0)
(glVertex2d 90.0 90.0)
(glEnd)
(glFlush)))
(define reshape-func
(lambda (w h)
(glViewport 0 0 w h)
(glMatrixMode GL_PROJECTION)
(glLoadIdentity)
(glOrtho 0.0 (+ w 0.0) 0.0 (+ h 0.0) -10.0 10.0)
(glMatrixMode GL_MODELVIEW)))
(glutInitWindowPosition 100 100)
(glutInitWindowSize 500 500)
(glutCreateWindow "Hello GLUT")
(glutDisplayFunc display-func)
(glutReshapeFunc reshape-func)
(glutMainLoop)
----------------------------------------------------------------------
Ed
More information about the Gambit-list
mailing list