74 lines
1.8 KiB
OCaml
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))
|