open Adam open S2 module TG = N2.Transform_graph module SG = N2.Sprite_graph include (val Ohlog.logs "Main") let main () = let tg = TG.make () in let sg = SG.make () in let t_a = TG.add tg in let sq = aabb (-50.0) (-50.0) 50.0 50.0 in let t_b = TG.add tg ~parent:t_a in SG.add sg ~tf:(TG.world t_b) ~bb:sq ~fill:(rgb24 0xff0000); Mat2A.set (TG.model t_b) ~tx:(-5.0) ~ty:(-5.0) ~sx:1.0 ~sy:1.0; let t_c = TG.add tg ~parent:t_a in SG.add sg ~tf:(TG.world t_c) ~bb:sq ~fill:(rgb24 0x0055ff); Mat2A.set (TG.model t_c) ~tx:(+5.0) ~ty:(+5.0) ~sx:1.0 ~sy:1.0; debug (fun m -> m "initializing"); let window = Window.make ~title:"GEOMETRA" in info (fun m -> m "window initialized"); let ren = Renderer.make ~window in info (fun m -> m "renderer initialized"); let render () = begin (* Update *) let time = Sdl.get_ticks () |> Int32.to_int in begin let tx = Float_infix.( Float.sin (flt time / 1000.0 * 2.0) * 300.0 + 512.0 ) in let ty = 400.0 in Mat2A.set (TG.model t_a) ~tx ~ty ~sx:1.0 ~sy:1.0 end; Renderer.pre_draw ren; Renderer.clear ren (rgb24 0x000000); TG.update tg; SG.render sg ~ren; Renderer.post_draw ren; Gc.minor (); end in Window.event_loop window ~render; info (fun m -> m "quitting") let () = Ohlog.init () ~min_level:DEBUG; try main () with | Sdl.Error msg -> error (fun m -> m "SDL error: %s" msg) | Gl.Error (why, msg) -> error (fun m -> m "OpenGL error (%s): %s" why msg) | Asset.Error (path, msg) -> error (fun m -> m "failed to load %S: %s" path msg) | Failure msg -> error (fun m -> m "Fatal: %s" msg) | exn -> error (fun m -> m "Uncaught: %s" (Printexc.to_string exn))