home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / newopg.zip / DEPTH.C < prev    next >
Text File  |  1995-03-04  |  5KB  |  215 lines

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include "tk.h"
  5.  
  6. float tkRGBMap[8][3] = {
  7.     {
  8.     0, 0, 0
  9.     },
  10.     {
  11.     1, 0, 0
  12.     },
  13.     {
  14.     0, 1, 0
  15.     },
  16.     {
  17.     1, 1, 0
  18.     },
  19.     {
  20.     0, 0, 1
  21.     },
  22.     {
  23.     1, 0, 1
  24.     },
  25.     {
  26.     0, 1, 1
  27.     },
  28.     {
  29.     1, 1, 1
  30.     }
  31. };
  32.  
  33.  
  34. #define CI_OFFSET_1 16
  35. #define CI_OFFSET_2 32
  36.  
  37.  
  38. GLenum rgb, doubleBuffer, directRender;
  39.  
  40. GLenum antiAlias, stipple;
  41. GLubyte stippleBits[32*4] = {
  42.     0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
  43.     0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
  44.     0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
  45.     0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
  46.     0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
  47.     0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
  48.     0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
  49.     0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
  50.     0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
  51.     0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
  52.     0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
  53.     0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
  54.     0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
  55.     0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
  56.     0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
  57.     0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
  58. };
  59.  
  60.  
  61. static void Init(void)
  62. {
  63.     GLint i;
  64.  
  65.     glClearColor(0.0, 0.0, 0.0, 0.0);
  66.     glClearIndex(0.0);
  67.  
  68.     if (!rgb) {
  69.     for (i = 0; i < 16; i++) {
  70.         tkSetOneColor(i+CI_OFFSET_1, 0.0, 0.0, i/15.0);
  71.         tkSetOneColor(i+CI_OFFSET_2, 0.0, i/15.0, 0.0);
  72.     }
  73.     }
  74.  
  75.     glPolygonStipple(stippleBits);
  76.  
  77.     antiAlias = GL_FALSE;
  78.     stipple = GL_FALSE;
  79. }
  80.  
  81. static void Reshape(int width, int height)
  82. {
  83.  
  84.     glViewport(0, 0, (GLint)width, (GLint)height);
  85.  
  86.     glMatrixMode(GL_PROJECTION);
  87.     glLoadIdentity();
  88.     glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0);
  89.     glMatrixMode(GL_MODELVIEW);
  90. }
  91.  
  92. static GLenum Key(int key, GLenum mask)
  93. {
  94.  
  95.     switch (key) {
  96.       case TK_B:
  97.     tkClipBoard();
  98.     break;
  99.       case TK_ESCAPE:
  100.     tkQuit();
  101.       case TK_1:
  102.     antiAlias = !antiAlias;
  103.     break;
  104.       case TK_2:
  105.     stipple = !stipple;
  106.     break;
  107.       default:
  108.     return GL_FALSE;
  109.     }
  110.     return GL_TRUE;
  111. }
  112.  
  113. static void Draw(void)
  114. {
  115.     GLint ci1, ci2;
  116.  
  117.     glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
  118.  
  119.     if (antiAlias) {
  120.     ci1 = CI_OFFSET_1;
  121.     ci2 = CI_OFFSET_2;
  122.     glBlendFunc(GL_SRC_ALPHA, GL_ONE);
  123.     glEnable(GL_BLEND);
  124.     glEnable(GL_POLYGON_SMOOTH);
  125.     glDisable(GL_DEPTH_TEST);
  126.     } else {
  127.     ci1 = TK_BLUE;
  128.     ci2 = TK_GREEN;
  129.     glDisable(GL_BLEND);
  130.     glDisable(GL_POLYGON_SMOOTH);
  131.     glEnable(GL_DEPTH_TEST);
  132.     }
  133.  
  134.     if (stipple) {
  135.     glEnable(GL_POLYGON_STIPPLE);
  136.     } else {
  137.     glDisable(GL_POLYGON_STIPPLE);
  138.     }
  139.  
  140.     glBegin(GL_TRIANGLES);
  141.     (rgb) ? glColor3fv(tkRGBMap[TK_BLUE]) : glIndexi(ci1);
  142.     glVertex3f( 0.9, -0.9, -30.0);
  143.     glVertex3f( 0.9,  0.9, -30.0);
  144.     glVertex3f(-0.9,  0.0, -30.0);
  145.     (rgb) ? glColor3fv(tkRGBMap[TK_GREEN]) : glIndexi(ci2);
  146.     glVertex3f(-0.9, -0.9, -40.0);
  147.     glVertex3f(-0.9,  0.9, -40.0);
  148.     glVertex3f( 0.9,  0.0, -25.0);
  149.     glEnd();
  150.  
  151.     glFlush();
  152.  
  153.     if (doubleBuffer) {
  154.     tkSwapBuffers();
  155.     }
  156. }
  157.  
  158. static GLenum Args(int argc, char **argv)
  159. {
  160.     GLint i;
  161.  
  162.     rgb = GL_TRUE;
  163.     doubleBuffer = GL_FALSE;
  164.     directRender = GL_TRUE;
  165.  
  166.     for (i = 1; i < argc; i++) {
  167.     if (strcmp(argv[i], "-ci") == 0) {
  168.         rgb = GL_FALSE;
  169.     } else if (strcmp(argv[i], "-rgb") == 0) {
  170.         rgb = GL_TRUE;
  171.     } else if (strcmp(argv[i], "-sb") == 0) {
  172.         doubleBuffer = GL_FALSE;
  173.     } else if (strcmp(argv[i], "-db") == 0) {
  174.         doubleBuffer = GL_TRUE;
  175.     } else if (strcmp(argv[i], "-dr") == 0) {
  176.         directRender = GL_TRUE;
  177.     } else if (strcmp(argv[i], "-ir") == 0) {
  178.         directRender = GL_FALSE;
  179.     } else {
  180.         printf("%s (Bad option).\n", argv[i]);
  181.         return GL_FALSE;
  182.     }
  183.     }
  184.     return GL_TRUE;
  185. }
  186.  
  187. void main(int argc, char **argv)
  188. {
  189.     GLenum type;
  190.  
  191.     if (Args(argc, argv) == GL_FALSE) {
  192.     tkQuit();
  193.     }
  194.  
  195.     tkInitPosition(0, 0, 300, 300);
  196.  
  197.     type = TK_DEPTH;
  198.     type |= (rgb) ? TK_RGB : TK_INDEX;
  199.     type |= (doubleBuffer) ? TK_DOUBLE : TK_SINGLE;
  200.     type |= (directRender) ? TK_DIRECT : TK_INDIRECT;
  201.     tkInitDisplayMode(type);
  202.  
  203.     if (tkInitWindow("Depth Test") == GL_FALSE) {
  204.     tkQuit();
  205.     }
  206.  
  207.     Init();
  208.  
  209.     tkExposeFunc(Reshape);
  210.     tkReshapeFunc(Reshape);
  211.     tkKeyDownFunc(Key);
  212.     tkDisplayFunc(Draw);
  213.     tkExec();
  214. }
  215.