OpenGL World

Jay McCarthy <jay at plt-scheme dot org>

OpenGL World is like world, but the rendering functions are in a GL context.

 (require (planet jaymccarthy/gl-world))

(big-bang world/c    
  #:height height    
  #:width width    
  #:on-tick on-tick    
  #:tick-rate tick-rate    
  #:on-key on-key    
  #:draw-init draw-init    
  #:on-draw on-draw    
  #:stop-when stop-when    
  #:stop-timer stop-timer)  void
  world/c : contract?
  init : world/c
  height : (integer-in 0 10000)
  width : (integer-in 0 10000)
  on-tick : (world/c . -> . world/c)
  tick-rate : number?
  on-key : (world/c (is-a?/c key-event%) . -> . world/c)
  draw-init : (-> void)
  on-draw : (world/c . -> . void)
  stop-when : (world/c . -> . boolean?)
  stop-timer : (world/c . -> . boolean?)

Creates a width x height window with an OpenGL canvas and calls draw-init in its context to initialize it. Next on-draw is called in the GL context with init to show the render the first scene. init becomes the current world.

big-bang starts a timer that rings every tick-rate seconds (when stop-timer returns false) and calls on-tick with the current world and expects a new world. When there is user input in the canvas, big-bang calls on-key with the key-event% and expects a new world. In either of these cases, if the returned world is not equal? to the current world then it becomes the current world and on-draw is called to redisplay the scene.

These events occur until stop-when returns #t on the current world.