Ich habe keine Erfahrung mit OpenGL, also vielleicht fehlt mir gerade etwas.Warum stürzt das Drücken von Numlock OCaml opengl Programm?
Ich habe diesen OCAML-Code mit lablGL. Zum Kompilieren ich
ocamlopt -I + lablgl lablglut.cmxa lablgl.cmxa gl.ml -o gl.opt
oder
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()
Und jetzt ist hier das Problem. Durch Drücken von Numlock oder einer anderen Numpad-Taste bei deaktiviertem Numlock wird das Programm durch Auslösen der Ausnahme abgebrochen. Der Versuch, diese Ausnahme in spezieller Funktion zu erfassen, hilft nicht.
Hier ist der Beispiellauf.
Kann mir jemand erklären, warum es so funktioniert und wie man es umgeht?
Danke, dass Sie mir diesen Code gezeigt haben. – stmi