/* Copyright (c) Mark J. Kilgard, 1996. *//* This program is freely distributable without licensing fees    and is provided without guarantee or warrantee expressed or    implied. This program is -not- in the public domain. *//* This program is a response to a question posed by Gil Colgate   <gcolgate@sirius.com> about how lengthy a program is required using   OpenGL compared to using  Direct3D immediate mode to "draw a   triangle at screen coordinates 0,0, to 200,200 to 20,200, and I   want it to be blue at the top vertex, red at the left vertex, and   green at the right vertex".  I'm not sure how long the Direct3D   program is; Gil has used Direct3D and his guess is "about 3000   lines of code". *//* X compile line: cc -o simple simple.c -lglut -lGLU -lGL -lXmu -lXext -lX11 -lm */#include <GLUT/glut.h>voidreshape(int w, int h){  /* Because Gil specified "screen coordinates" (presumably with an     upper-left origin), this short bit of code sets up the coordinate     system to correspond to actual window coodrinates.  This code     wouldn't be required if you chose a (more typical in 3D) abstract     coordinate system. */  glViewport(0, 0, w, h);       /* Establish viewing area to cover entire window. */  glMatrixMode(GL_PROJECTION);  /* Start modifying the projection matrix. */  glLoadIdentity();             /* Reset project matrix. */  glOrtho(0, w, 0, h, -1, 1);   /* Map abstract coords directly to window coords. */  glScalef(1, -1, 1);           /* Invert Y axis so increasing Y goes down. */  glTranslatef(0, -h, 0);       /* Shift origin up to upper-left corner. */}voiddisplay(void){  glClear(GL_COLOR_BUFFER_BIT);  glBegin(GL_TRIANGLES);    glColor3f(0.0, 0.0, 1.0);  /* blue */    glVertex2i(0, 0);    glColor3f(0.0, 1.0, 0.0);  /* green */    glVertex2i(200, 200);    glColor3f(1.0, 0.0, 0.0);  /* red */    glVertex2i(20, 200);  glEnd();     glFlush ();}intmain(int argc, char **argv){  glutInit(&argc, argv);  glutCreateWindow("single triangle");  glutDisplayFunc(display);  glutReshapeFunc(reshape);  glutMainLoop();  return 0;             /* ANSI C requires main to return int. */}