(* ============================================================================== *) (* === Projet ocamlpilot - CG version du 19/04/2005 === *) (* === === *) (* === Ce programme montre comment utiliser un timer pour effectuer une === *) (* === action repetitive. === *) (* ============================================================================== *) (* ============================================================================== *) (* === initialisation d'openGL a faire pour chaque programme === *) (* ============================================================================== *) (* on recupere les arguments specifiques a OpenGL transmis sur la ligne de commande *) ignore(Glut.init Sys.argv);; (* initialisation du mode d'affichage : alpha : permet de jouer sur la luminosite des objets double_buffer : on travaille en double buffering, comme en 2D depth : on utilise le Z-buffer pour supprimer les parties cachees *) Glut.initDisplayMode ~alpha:true ~double_buffer:true ~depth:true ();; (* taille de la fenetre a l'ouverture *) Glut.initWindowSize ~w:800 ~h:600;; (* creation de la fenetre et titre de la fenetre *) ignore(Glut.createWindow "OcamlPilot");; (* ============================================================================== *) (* ============================================================================== *) (* les fonctions que l'on passe au timer doivent avoir un argument dont le label est "value". *) let nb = ref 0;; let rec affichage ~value = (* affichage *) Printf.printf "affichage : %d\n" !nb; flush Pervasives.stdout; nb := !nb + 1; (* une fois la fonction affichage appelee, le timer est detruit, il faut donc en reappeler un autre si l'on veut que l'action se repete. ms : le nombre de millisecondes a attendre avant qu'affichage ne soit reappele cb : le nom de la fonction reveillee par le timer value : ne sert a rien ici mais on est oblige de le passer pour qu'affichage soit appele *) Glut.timerFunc ~ms:2000 ~cb:affichage ~value:0;; (* ============================================================================== *) (* ============================================================================== *) let main () = (* creation du timer *) Glut.timerFunc ~ms:2000 ~cb:affichage ~value:0; (* lancement de la boucle principale d'openGL. Ceci doit etre effectue en dernier car mainLoop ne rendra la main qu'a la fin de l'execution du programme. *) Glut.mainLoop ();; main ();;