"app" : lexicon ;
{ sdl { drawing { app >:
{ array
"poll" : [ event PollEvent >[1= event_list dispatch ]] ^ ] ;
\ TODO process all events of the current frame in a loop
}
"running" : pointer false , ;
"t" : pointer 0 , ;
"now" : [ ticks t ! ^ ] ;
"elapsed" : [ ticks t ? - ^ ] ;
"wait" : [ 16 elapsed - [+ sleep ^ ]] drop ^ ] ;
{ array
"update" : [ update_list execute> ^ ] ;
"render" :
[ app_bgcolor renderer ? SetRenderColor sdl_error
renderer ? RenderClear sdl_error
render_list execute>
renderer ? RenderPresent ^ ] ;
}
"app_display" : [
display 0 GetDisplay sdl_error
display 1@ ? app_rect 2@ ? - 2/
display 2@ ? app_rect 3 @ ? - 2/ app_rect 2! ^ ] ;
"app_init" : [
INIT_JOYSTICK INIT_VIDEO +or Init sdl_error
app_display
WIN_OPENGL app_rect >a 3 a?@ 2 a?@ 1 a?@ a?
app_name CreateWindow window !
ACCELERATED -1 window ? CreateRenderer renderer !
^ ] ;
"app_loop" : [ switch now poll running ?
>[1= update render ]] wait app_loop ^ ] ;
{ array
"app_exit" : [ running off 'app_loop suspend
update_list empty render_list empty
release_list execute>
renderer ? DestroyRenderer nil renderer !
window ? DestroyWindow nil window !
Quit ^ ] ;
}
{ sdl_keys
"app_handler" : [ event ?
EVT_QUIT [== drop app_exit true ^ ]]
EVT_KEY [== drop event 5 @ ?
K_PAUSE [== drop running flip true ^ ]]
K_ESCAPE [== drop app_exit true ^ ]]
]] drop false ^ ] ;
}
} } } >: