let simply_display ?(distance=10.0) ?(textures=false) node =
(* Load a simple renderer. 'renderer' isn't the best name. It's an
object that renders to the screen. *)
let renderer = new default_renderer in
(* Load a camera. *)
let camera = new fps_camera in
camera#forward (-. distance) ;
renderer#set_camera (camera :> camera) ;
renderer#set_scene_root node ;
(* An easy way to quit. *)
let quit_listener = object
inherit keyboard_listener
method key_pressed e =
if e.Sdlevent.keysym = Sdlkey.KEY_q or
e.Sdlevent.keysym = Sdlkey.KEY_ESCAPE then
raise Done
else ()
method key_released _ = ()
end in
(* Open the the FatCaml display. *)
display_singleton#event_dispatcher#key#affect quit_listener ;
display_singleton#set_renderer (renderer :> renderer) ;
display_singleton#set_video_mode ~width:640 ~height:480 ;
(* Note: you can't call Gl functions until you call a FatCaml function
that initializes SDL, like set_video_display or load_gl_texture. *)
if textures then
Gl.enable `texture_2d
else () ;
(* Rerender the display on each clock tick (default: 30fps). *)
display_singleton#render_synchronously ;
(* Wait for the program to terminate. *)
display_singleton#event_loop ;
()