

Task

Display a smooth shaded triangle with OpenGL.

 Triangle created using C example compiled with GCC 4.1.2 and freeglut3.


:- module opengl.
:- interface.
 
:- import_module io.
:- pred main(io::di, io::uo) is det.
 
:- implementation.
:- import_module list, glut, glut.callback, glut.window, mogl.
 
main(!IO) :-
   glut.init_window_size(640, 480, !IO),
   glut.window.create("Triangle", !IO),
   glut.callback.display_func(opengl.paint, !IO),
   glut.callback.reshape_func(opengl.reshape, !IO),
   glut.main_loop(!IO).
 
:- pred paint(io::di, io::uo) is det.
 
paint(!IO) :-
   mogl.clear_color(0.3, 0.3, 0.3 , 0.0, !IO),
   mogl.clear([color, depth], !IO),
 
   mogl.shade_model(smooth, !IO),
 
   mogl.load_identity(!IO),
   mogl.translate(-15.0, -15.0, 0.0, !IO),
 
   mogl.begin(triangles, !IO),
       mogl.color3(1.0, 0.0, 0.0, !IO),
       mogl.vertex2(0.0, 0.0, !IO),
       mogl.color3(0.0, 1.0, 0.0, !IO),
       mogl.vertex2(30.0, 0.0, !IO),
       mogl.color3(0.0, 0.0, 1.0, !IO),
       mogl.vertex2(0.0, 30.0, !IO),
   mogl.end(!IO),
 
   mogl.flush(!IO).
 
:- pred reshape(int::in, int::in, io::di, io::uo) is det.
 
reshape(Width, Height, !IO) :-
  mogl.viewport(0, 0, Width, Height, !IO),
  mogl.matrix_mode(projection, !IO),
  mogl.load_identity(!IO),
  mogl.ortho(-30.0, 30.0, -30.0, 30.0, -30.0, 30.0, !IO),
  mogl.matrix_mode(modelview, !IO).