⚠️ Warning: This is a draft ⚠️

This means it might contain formatting issues, incorrect code, conceptual problems, or other severe issues.

If you want to help to improve and eventually enable this page, please fork RosettaGit's repository and open a merge request on GitHub.

{{libheader|glMLite}} {{libheader|GLUT}} Compile this program to native-code with the following command: ocamlopt -o noise_gl.opt bigarray.cmxa unix.cmxa -I +glMLite GL.cmxa Glut.cmxa noise_gl.ml

One can also interpret it with the native code OCaml toplevel: ocamlnat unix.cmxs bigarray.cmxs -I +glMLite GL.cmxs Glut.cmxs noise_gl.ml

open Glut
open GL
 
let width = 320
let height = 240
let len = width * height
 
let buff = Bigarray.Array1.create Bigarray.char Bigarray.c_layout len
let t_last = ref (Unix.gettimeofday())
let frames = ref 0

let render () =
  glClear [GL_COLOR_BUFFER_BIT];
  for i = 0 to pred len do
    buff.{i} <- char_of_int (Random.int 256)
  done;
  glBitmap width height 0.0 0.0 0.0 0.0 buff;
  glFlush();
  incr frames;
  if !frames = 600 then begin
    let t = Unix.gettimeofday() in
    Printf.printf "- fps: %f\n%!" ((float !frames) /. (t -. !t_last));
    t_last := t;
    frames := 0;
  end;
  glutSwapBuffers()
 
let () =
  ignore (glutInit Sys.argv);
  glutInitDisplayMode [GLUT_RGB; GLUT_DOUBLE];
  glutInitWindowSize width height;
  ignore (glutCreateWindow "noise");
  glutDisplayFunc render;
  glutIdleFunc render;
  glutMainLoop()