geometra/src/main.ml

77 lines
2.0 KiB
OCaml

open Adam
open S2
module TG = N2.Transform_graph
module SG = N2.Sprite_graph
module Scene = N2.Scene
include (val Ohlog.logs "Main")
let main () =
debug (fun m -> m "initializing");
let wnd = Window.make ~title:"GEOMETRA" in
info (fun m -> m "window initialized");
let ren = Renderer.make ~wnd in
info (fun m -> m "renderer initialized");
let font1 = Asset.load_font "p052-roman.96" in
let text1 = "39" in
let text1_fg = rgb24 0xffffff in
let text1_tf = mat2a 50.0 100.0 48.0 48.0 in
let font2 = Asset.load_font "liberation.32" in
let text2 = "Hello, world" in
let text2_fg = rgb24 0xffffff in
let text2_tf = mat2a 50.0 200.0 24.0 24.0 in
let sg = SG.make () in
SG.register_sprite_map sg "blocks"
(Asset.load_sprite_map "blocks" ~dpi:192);
SG.register_sprite_map sg "hud"
(Asset.load_sprite_map "hud");
debug (fun m -> m "loaded sprites");
let tg = TG.make () in
let scene = Scene.load "main" ~tg ~sg in
let root = Scene.get scene "root" in
debug (fun m -> m "loaded scene");
let render time =
begin
let tf = TG.model (Scene.transform root) in
begin
let _ = time in
Mat2A.set tf ~tx:512.0 ~ty:400.0 ~sx:1.0 ~sy:1.0
end;
Renderer.pre_draw ren;
Renderer.clear ren (rgb24 0x131321);
TG.update tg;
if false then SG.render sg ~ren;
Renderer.draw_text ren font1 text1 ~tf:text1_tf ~fg:text1_fg;
Renderer.draw_text ren font2 text2 ~tf:text2_tf ~fg:text2_fg;
Renderer.post_draw ren;
Gc.minor ();
end
in
Window.event_loop wnd ~render;
begin
info (fun m -> m "quitting");
Window.destroy wnd;
Renderer.destroy ren;
end
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))