home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Amiga 5 / MA_Cover_5.iso / ppc / mesa / gdemos / gamma.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-01-31  |  4.5 KB  |  167 lines

  1. /* gamma.c */
  2.  
  3. /* Draw test patterns to help determine correct gamma value for a display.
  4.    When the intensities in the top row nearly match the intensities in
  5.    the bottom row you've found the right gamma value.
  6.  
  7.    For more info about gamma correction see:
  8.    http://www.inforamp.net/~poynton/notes/colour_and_gamma/GammaFAQ.html
  9.  
  10.    This program is in the public domain
  11.  
  12.    Brian Paul  19 Oct 1995 */
  13.  
  14. /* Conversion to GLUT by Mark J. Kilgard */
  15.  
  16. #include <stdio.h>
  17. #include <string.h>
  18. #include <stdlib.h>
  19. #include <GL/glut.h>
  20.  
  21. static void 
  22. Reshape(int width, int height)
  23. {
  24.   glViewport(0, 0, (GLint) width, (GLint) height);
  25.  
  26.   glMatrixMode(GL_PROJECTION);
  27.   glLoadIdentity();
  28.   glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
  29.   glMatrixMode(GL_MODELVIEW);
  30. }
  31.  
  32. /* ARGSUSED1 */
  33. static void 
  34. key_esc(unsigned char key, int x, int y)
  35. {
  36.   if(key == 27) exit(0);  /* Exit on Escape */
  37. }
  38.  
  39. static GLubyte p25[] =
  40. {
  41.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  42.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  43.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  44.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  45.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  46.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  47.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  48.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  49.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  50.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  51.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  52.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  53.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  54.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  55.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  56.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  57. };
  58.  
  59. static GLubyte p50[] =
  60. {
  61.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  62.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  63.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  64.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  65.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  66.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  67.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  68.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  69.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  70.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  71.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  72.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  73.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  74.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  75.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  76.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  77. };
  78.  
  79. static GLubyte p75[] =
  80. {
  81.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  82.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  83.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  84.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  85.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  86.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  87.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  88.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  89.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  90.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  91.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  92.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  93.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  94.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  95.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  96.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  97. };
  98.  
  99. static void 
  100. display(void)
  101. {
  102.  
  103.   glClear(GL_COLOR_BUFFER_BIT);
  104.  
  105. /** DITHERED ROW **/
  106.  
  107.   /* solid black */
  108.  
  109.   /* 25% white */
  110.   glEnable(GL_POLYGON_STIPPLE);
  111.   glColor3f(1.0, 1.0, 1.0);
  112.   glPolygonStipple(p25);
  113.   glRectf(-0.6, 1.0, -0.2, 0.01);
  114.  
  115.   /* 50% white */
  116.   glPolygonStipple(p50);
  117.   glRectf(-0.2, 1.0, 0.2, 0.01);
  118.  
  119.   /* 75% white */
  120.   glPolygonStipple(p75);
  121.   glRectf(0.2, 1.0, 0.6, 0.01);
  122.  
  123.   /* 100% white */
  124.   glDisable(GL_POLYGON_STIPPLE);
  125.   glRectf(0.6, 1.0, 1.0, 0.01);
  126.  
  127. /*** GRAY ROW ***/
  128.  
  129.   /* solid black */
  130.  
  131.   /* 25% white */
  132.   glColor3f(0.25, 0.25, 0.25);
  133.   glRectf(-0.6, -0.01, -0.2, -1.0);
  134.  
  135.   /* 50% white */
  136.   glColor3f(0.5, 0.5, 0.5);
  137.   glRectf(-0.2, -0.01, 0.2, -1.0);
  138.  
  139.   /* 75% white */
  140.   glColor3f(0.75, 0.75, 0.75);
  141.   glRectf(0.2, -0.01, 0.6, -1.0);
  142.  
  143.   /* 100% white */
  144.   glColor3f(1.0, 1.0, 1.0);
  145.   glRectf(0.6, -0.01, 1.0, -1.0);
  146.  
  147.   glFlush();
  148. }
  149.  
  150. int 
  151. main(int argc, char **argv)
  152. {
  153.   glutInit(&argc, argv);
  154.   glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
  155.  
  156.   glutInitWindowPosition(50, 50);
  157.   glutInitWindowSize(400, 200);
  158.  
  159.   glutCreateWindow("gamma test patterns");
  160.   glutReshapeFunc(Reshape);
  161.   glutDisplayFunc(display);
  162.   glutKeyboardFunc(key_esc);
  163.  
  164.   glutMainLoop();
  165.   return 0;             /* ANSI C requires main to return int. */
  166. }
  167.