[racket] question on OpenGL support
Hi list,
On 04/09/2011 05:51 AM, Jay Kominek wrote:
> The OpenGL APIs, all the versions, all the
> extensions, are described in some fairly parseable files available
> fromhttp://www.opengl.org/registry/ - look for the .spec files
> towards the bottom. I'm pretty sure you should be able to generate the
> bindings from those files, and more easily than dealing with C
> headers.
I wrote a bit of code to parse these files and it works fine so far.
I would like some advice though on how to wrap arrays in "output" mode.
Take for example the following function:
GetTexLevelParameteriv(target, level, pname, params)
return void
param target TextureTarget in value
param level CheckedInt32 in value
param pname GetTextureParameter in value
param params Int32 out array [COMPSIZE(pname)]
This corresponds to the C header:
void glGetTexLevelParameteriv( GLenum target,
GLint level,
GLenum pname,
GLint *params )
This function fills array "params" with some data.
The length of params depends on pname and is not directly specified.
I now wrap this as follows:
(_fun (target : _int32) (level : _int32) (pname : _int32) (params : _pointer) -> _void)
So params is just a raw pointer. I should perhaps use _i32vector in "output" mode instead but:
1. I don't have an expression for the length, and
2. I don't want to have the wrapper allocate and return an array; rather I want to mirror
the C api exactly and pass in an array which is filled by the function.
The latter I consider especially important, since it ensures that all the docs for the C API can be used directly.
So what I really want is that a _i32vector is passed in for parameter "params", and then filled
by the function, so that the Racket program can observe the mutated vector.
Can this be achieved?
Thanks,
Stephan