geometra/src/main.ml

74 lines
1.8 KiB
OCaml

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))