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
9 external init
: bool -> (vertices
* normals
* coords
* skin
* string) -> unit
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"
21 external init
: bool -> (vertices
* normals
* coords
* skin
* string) -> unit
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"
33 let sw = object (self
)
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
43 let hw path
= object (self
)
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
51 let ic = open_in path
in
52 let b = Buffer.create
100 in
55 Buffer.add_string
b (input_line
ic);
56 Buffer.add_char
b '
\n'
;
58 with End_of_file
-> close_in
ic
59 | exn
-> close_in
ic; raise exn
61 HW.set_text
(Buffer.contents
b)
67 if String.length path
= 0
70 if Glut.extensionSupported
"GL_ARB_vertex_program"
74 Format.eprintf
"GL_ARB_vertex_program not supported falling back to 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;;