No tengo ninguna experiencia con OpenGL, así que tal vez me estoy perdiendo algo.¿Por qué presionar numlock se bloquea OCaml opengl program?
Tengo este código ocaml usando lablGL. Para compilar utilizo
ocamlopt -I + lablGL lablglut.cmxa lablgl.cmxa gl.ml -o gl.opt
o
ocamlc -I + lablGL lablglut.cma lablgl.cma gl.ml -o gl.byte
let keyboard ~key ~x ~y =
match key with
| 27 -> exit 0
| _ -> ignore (Printf.printf "Key: %c %d pressed.\n%!" (char_of_int key) key)
;;
let keyboard_up ~key ~x ~y =
match key with
| _ -> ignore (Printf.printf "Key: %c %d released.\n%!" key (int_of_char key))
;;
let special ~key ~x ~y =
try
match key with
| Glut.KEY_F1 -> Printf.printf "F1 pressed.\n%!"
| Glut.KEY_F2 -> Printf.printf "F2 pressed.\n%!"
| Glut.KEY_F3 -> Printf.printf "F3 pressed.\n%!"
| Glut.KEY_F4 -> Printf.printf "F4 pressed.\n%!"
| Glut.KEY_F5 -> Printf.printf "F5 pressed.\n%!"
| Glut.KEY_F6 -> Printf.printf "F6 pressed.\n%!"
| Glut.KEY_F7 -> Printf.printf "F7 pressed.\n%!"
| Glut.KEY_F8 -> Printf.printf "F8 pressed.\n%!"
| Glut.KEY_F9 -> Printf.printf "F9 pressed.\n%!"
| Glut.KEY_F10 -> Printf.printf "F10 pressed.\n%!"
| Glut.KEY_F11 -> Printf.printf "F11 pressed.\n%!"
| Glut.KEY_F12 -> Printf.printf "F12 pressed.\n%!"
| Glut.KEY_LEFT -> Printf.printf "Left pressed.\n%!"
| Glut.KEY_UP -> Printf.printf "Up pressed.\n%!"
| Glut.KEY_RIGHT -> Printf.printf "Right pressed.\n%!"
| Glut.KEY_DOWN -> Printf.printf "Down pressed.\n%!"
| Glut.KEY_PAGE_UP -> Printf.printf "PgUp pressed.\n%!"
| Glut.KEY_PAGE_DOWN -> Printf.printf "PgDown pressed.\n%!"
| Glut.KEY_HOME -> Printf.printf "Home pressed.\n%!"
| Glut.KEY_END -> Printf.printf "End pressed.\n%!"
| Glut.KEY_INSERT -> Printf.printf "Insert pressed.\n%!"
with
| Glut.BadEnum m -> Printf.printf "%s\n" m
;;
let() =
ignore (Glut.init Sys.argv);
ignore (Glut.createWindow ~title:"OpenGL Demo");
GlClear.color (1.0, 1.0, 1.0);
Glut.keyboardFunc ~cb:(keyboard);
Glut.specialFunc ~cb:(special);
Glut.displayFunc ~cb:(fun() -> GlClear.clear [ `color ]; Gl.flush());
Glut.mainLoop()
Y ahora aquí está el problema. Al presionar numlock o cualquier otra tecla del teclado numérico cuando BloqNum está desactivado, se bloquea el programa lanzando una excepción. Tratar de atrapar esta excepción en una función especial no ayuda.
Aquí está el ejemplo ejecutar.
> ./gl.opt
Up pressed.
Down pressed.
Key: 1 49 pressed.
Key: 2 50 pressed.
Fatal error: exception Glut.BadEnum("key in special_of_int")
¿Puede alguien explicarme por qué funciona así y cómo solucionarlo?
Gracias por mostrarme este código. – stmi