home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / coders / mesa-1.2.8 / demos / gamma.c < prev    next >
C/C++ Source or Header  |  1996-05-27  |  5KB  |  172 lines

  1. /* gamma.c */
  2.  
  3.  
  4. /*
  5.  * Draw test patterns to help determine correct gamma value for a display.
  6.  * When the intensities in the top row nearly match the intensities in
  7.  * the bottom row you've found the right gamma value.
  8.  *
  9.  * For more info about gamma correction see:
  10.  *  http://www.inforamp.net/~poynton/notes/colour_and_gamma/GammaFAQ.html
  11.  *
  12.  * This program is in the public domain
  13.  *
  14.  * Brian Paul  19 Oct 1995
  15.  */
  16.  
  17.  
  18.  
  19. #include <stdio.h>
  20. #include <string.h>
  21. #include <stdlib.h>
  22. #include "glaux.h"
  23.  
  24.  
  25.  
  26. static void Reshape( int width, int height )
  27. {
  28.    glViewport(0, 0, (GLint)width, (GLint)height);
  29.  
  30.    glMatrixMode(GL_PROJECTION);
  31.    glLoadIdentity();
  32.    glOrtho( -1.0, 1.0, -1.0, 1.0, -1.0, 1.0 );
  33.    glMatrixMode(GL_MODELVIEW);
  34. }
  35.  
  36.  
  37. static void key_esc()
  38. {
  39.    auxQuit();
  40. }
  41.  
  42.  
  43. static GLubyte p25[] = {
  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.    0xaa, 0xaa, 0xaa, 0xaa,    0x00, 0x00, 0x00, 0x00,
  58.    0xaa, 0xaa, 0xaa, 0xaa,    0x00, 0x00, 0x00, 0x00,
  59.    0xaa, 0xaa, 0xaa, 0xaa,    0x00, 0x00, 0x00, 0x00,
  60. };
  61.  
  62. static GLubyte p50[] = {
  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.    0xaa, 0xaa, 0xaa, 0xaa,    0x55, 0x55, 0x55, 0x55,
  78.    0xaa, 0xaa, 0xaa, 0xaa,    0x55, 0x55, 0x55, 0x55,
  79. };
  80.  
  81. static GLubyte p75[] = {
  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.    0xaa, 0xaa, 0xaa, 0xaa,    0xff, 0xff, 0xff, 0xff,
  98. };
  99.    
  100.  
  101.  
  102. static void display( void )
  103. {
  104.  
  105.    glClear( GL_COLOR_BUFFER_BIT );
  106.  
  107.    /** DITHERED ROW **/
  108.  
  109.    /* solid black */
  110.  
  111.    /* 25% white */
  112.    glEnable( GL_POLYGON_STIPPLE );
  113.    glColor3f( 1.0, 1.0, 1.0 );
  114.    glPolygonStipple( p25 );
  115.    glRectf( -0.6, 1.0, -0.2, 0.01 );
  116.  
  117.    /* 50% white */
  118.    glPolygonStipple( p50 );
  119.    glRectf( -0.2, 1.0, 0.2, 0.01 );
  120.    
  121.    /* 75% white */
  122.    glPolygonStipple( p75 );
  123.    glRectf( 0.2, 1.0, 0.6, 0.01 );
  124.  
  125.    /* 100% white */
  126.    glDisable( GL_POLYGON_STIPPLE );
  127.    glRectf( 0.6, 1.0, 1.0, 0.01 );
  128.  
  129.  
  130.    /*** GRAY ROW ***/
  131.  
  132.    /* solid black */
  133.  
  134.    /* 25% white */
  135.    glColor3f( 0.25, 0.25, 0.25 );
  136.    glRectf( -0.6, -0.01, -0.2, -1.0 );
  137.  
  138.    /* 50% white */
  139.    glColor3f( 0.5, 0.5, 0.5 );
  140.    glRectf( -0.2, -0.01, 0.2, -1.0 );
  141.  
  142.    /* 75% white */
  143.    glColor3f( 0.75, 0.75, 0.75 );
  144.    glRectf( 0.2, -0.01, 0.6, -1.0 );
  145.  
  146.    /* 100% white */
  147.    glColor3f( 1.0, 1.0, 1.0 );
  148.    glRectf( 0.6, -0.01, 1.0, -1.0 );
  149.  
  150.    glFlush();
  151. }
  152.  
  153.  
  154.  
  155. int main( int argc, char **argv )
  156. {
  157.    auxInitDisplayMode( AUX_RGB );
  158.  
  159.    auxInitPosition( 50, 50, 400, 200 );
  160.  
  161.    if (auxInitWindow("gamma test patterns") == GL_FALSE) {
  162.       auxQuit();
  163.    }
  164.  
  165.    auxExposeFunc(Reshape);
  166.    auxReshapeFunc(Reshape);
  167.  
  168.    auxMainLoop( display );
  169.  
  170.    return 0;
  171. }
  172.