Reorganize build parameters a bit
[dormin.git] / skin.ml
blobc050d0e1f797e44280d387f104e54fdcfcad0ff9
1 type skin = (float * float * float * int) array
2 type skel = (int * float array) array
3 type anim = Qtr.t array
4 type vertices = float array
5 type normals = float array
6 type coords = float array
8 module SW = struct
9 external init : bool -> (vertices * normals * coords * skin * string) -> unit
10 = "ml_skin_init"
12 external draw_begin : unit -> unit = "ml_skin_draw_begin"
13 external draw_end : unit -> unit = "ml_skin_draw_end"
15 external set_skel : skel -> unit = "ml_skin_set_skel"
16 external set_anim : anim -> unit = "ml_skin_set_anim"
17 external anim : unit -> unit = "ml_skin_anim"
18 end
20 module HW = struct
21 external init : bool -> (vertices * normals * coords * skin * string) -> unit
22 = "ml_skin_init_vp"
24 external draw_begin : unit -> unit = "ml_skin_draw_begin_vp"
25 external draw_end : unit -> unit = "ml_skin_draw_end_vp"
27 external set_skel : skel -> unit = "ml_skin_set_skel_vp"
28 external set_anim : anim -> unit = "ml_skin_set_anim_vp"
29 external anim : unit -> unit = "ml_skin_anim_vp"
30 external set_text : string -> unit = "ml_skin_set_text_vp"
31 end
33 let sw = object (self)
34 method init = SW.init
35 method draw_begin = SW.draw_begin
36 method draw_end = SW.draw_end
37 method set_skel = SW.set_skel
38 method set_anim = SW.set_anim
39 method anim = SW.anim
40 method set_text = ()
41 end;;
43 let hw path = object (self)
44 method init = HW.init
45 method draw_begin = HW.draw_begin
46 method draw_end = HW.draw_end
47 method set_skel = HW.set_skel
48 method set_anim = HW.set_anim
49 method anim = HW.anim
50 method set_text =
51 let ic = open_in path in
52 let b = Buffer.create 100 in
53 begin try
54 while true do
55 Buffer.add_string b (input_line ic);
56 Buffer.add_char b '\n';
57 done
58 with End_of_file -> close_in ic
59 | exn -> close_in ic; raise exn
60 end;
61 HW.set_text (Buffer.contents b)
62 end;;
64 let skin = ref sw;;
66 let set path =
67 if String.length path = 0
68 then skin := sw
69 else (
70 if Glut.extensionSupported "GL_ARB_vertex_program"
71 then
72 skin := hw path
73 else (
74 Format.eprintf "GL_ARB_vertex_program not supported falling back to sw@.";
75 skin := sw
80 let init a b = !skin#init a b; !skin#set_text;;
81 let draw_begin a = !skin#draw_begin a;;
82 let draw_end a = !skin#draw_end a;;
83 let set_skel a = !skin#set_skel a;;
84 let set_anim a = !skin#set_anim a;;
85 let anim a = !skin#anim a;;
86 let set_text () = !skin#set_text;;