Re: SFML2 Demo Dilema
- Posted by jimcbrown (admin) May 09, 2015
- 2571 views
petelomax said...
Icy_Viking said...
while(sfRenderWindow_pollEvent(window,&event))
while(sfRenderWindow_pollEvent(win,--what to put here?)
My guess would be something like constant event = allocate(sizeof(sfEvent)) and use peek4s(event+??) to retrieve event.type, but you may well have to wrap a whole sfEvent class.
HTH, Pete
Assuming that this is the sfKeyEvent struct, it'd look like this (4.0.5 compatible code):
-- sfKeyEvent has 6 members, all of them 4-byte ints constant event = allocate(4*6) -- note that allocate() returns a C pointer, which is the same thing that the &event stuff in C/C++ does. ... while(sfRenderWindow_pollEvent(win,event) ... integer eventType = peek4s(event) integer code = peek4s(event+4) integer alt = peek4s(event+8) integer control = peek4s(event+12) integer shift = peek4s(event+16) integer system = peek4s(event+20)
sfRenderWindow_create() looks more difficult to wrap, as it passes a struct directly (without a pointer). One possibility:
--Graphics wrapper code public constant xsfRenderWindow_create = define_c_func(gfx,"sfRenderWindow_create",{C_INT,C_INT,C_INT,C_POINTER,C_UINT,C_POINTER},C_POINTER) public function sfRenderWindow_create(integer width, integer height, integer bitsPerPixel,sequence title,sfWindowStyle style,atom sett) return c_func(xsfRenderWindow_create,{width, height, bitsPerPixel,allocate_string(title,1),style,sett}) end function atom win = sfRenderWindow_create(800,600,32,"My Window", sfClose,0)
If that doesn't work, you might have no choice but to add an extra C wrapper to wrap sfRenderWindow_create() and then wrap the C wrapper in Euphoria.