[gambit-list] glut callbacks

Marc Feeley feeley at iro.umontreal.ca
Sat Mar 21 17:55:57 EDT 2009


On 21-Mar-09, at 5:12 PM, Eduardo Cavazos wrote:

> 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.
>
> I'm thinking about going with a workaround along these lines.
>
> This is how 'glutReshapeFunc' is defined in the library:
>
> (define glutReshapeFunc
>   (c-lambda ( (function (int int) void) ) void "glutReshapeFunc"))
>
> So maybe define a helper procedure which *can* be passed to
> 'glutReshapeFunc':
>
> (c-define (basic-reshape-func width height)
>           (int int)
>           void
>           "basicReshapeFunc"
>           ""
>           (glut-reshape-func width height))
>
> That calls a procedure stored in a variable which may be set
> interactively at a REPL:
>
> (define glut-reshape-func #f)
>
> Ed

Indeed, for complete portability, the only Scheme procedures that can  
be passed to a C function are the Scheme procedures defined with c- 
define.

On some platforms (processor and operating system dependent) that can  
execute dynamically generated machine code (32 bit intel, power-pc,  
sparc), you can pass any procedure including closures.  This feature  
is enabled if USE_dynamic_code_gen is defined in lib/os_dyn.h and this  
is the default in recent versions of Gambit.  Give it a try... it may  
work to pass a closure on your platform... but don't count on it to be  
portable!

Marc




More information about the Gambit-list mailing list