test23.c
上传用户:xk288cn
上传日期:2007-05-28
资源大小:4876k
文件大小:4k
源码类别:

GIS编程

开发平台:

Visual C++

  1. /* Copyright (c) Mark J. Kilgard, 1997. */
  2. /* This program is freely distributable without licensing fees 
  3.    and is provided without guarantee or warrantee expressed or 
  4.    implied. This program is -not- in the public domain. */
  5. /* This tests unexpected interactions between
  6.    glutInitDisplayMode and glutInitDisplayString. */
  7. #include <stdlib.h>
  8. #include <stdio.h>
  9. #include <string.h>
  10. #include <GL/glut.h>
  11. int modes[] =
  12. {
  13.   GLUT_RGB | GLUT_SINGLE,
  14.   GLUT_RGB | GLUT_DOUBLE,
  15.   GLUT_INDEX | GLUT_SINGLE,
  16.   GLUT_INDEX | GLUT_DOUBLE
  17. };
  18. #define NUM_MODES (sizeof(modes)/sizeof(modes[0]))
  19. char *strings[] =
  20. {
  21.   "rgb double",
  22.   "rgba double",
  23.   "rgba single",
  24.   "index",
  25.   "index double",
  26.   "rgb samples=4",
  27.   "stencil depth red green blue alpha conformant auxbufs buffer acc acca double rgb rgba",
  28.   "stereo index samples slow",
  29.   NULL
  30. };
  31. char *ostrings[] =
  32. {
  33.   "index double",
  34.   "index single",
  35.   "index buffer=4",
  36.   "index buffer=8",
  37.   "index buffer~4",
  38.   "index buffer=4 depth",
  39.   NULL
  40. };
  41. int verbose;
  42. int
  43. main(int argc, char **argv)
  44. {
  45.   int k, i, j, win;
  46.   int num, exists;
  47.   char mode[200];
  48.   glutInit(&argc, argv);
  49.   if (argc > 1) {
  50.     if (!strcmp(argv[1], "-v")) {
  51.       verbose = 1;
  52.     }
  53.   }
  54.   glutInitWindowPosition(10, 10);
  55.   glutInitWindowSize(200, 200);
  56.   for (k = 0; k < NUM_MODES; k++) {
  57.     glutInitDisplayMode(modes[k]);
  58.     printf("Display Mode = %d (%s,%s)n", modes[k],
  59.       modes[k] & GLUT_INDEX ? "index" : "rgba",
  60.       modes[k] & GLUT_DOUBLE ? "double" : "single");
  61.     for (i = 0; strings[i]; i++) {
  62.       glutInitDisplayString(strings[i]);
  63.       if (glutGet(GLUT_DISPLAY_MODE_POSSIBLE)) {
  64.         if (verbose)
  65.           printf("  Possible: %sn", strings[i]);
  66.         win = glutCreateWindow("test23");
  67.         if (verbose)
  68.           printf("    Created: %sn", strings[i]);
  69.         for (j = 0; ostrings[j]; j++) {
  70.           glutInitDisplayString(ostrings[j]);
  71.           if (glutLayerGet(GLUT_OVERLAY_POSSIBLE)) {
  72.             if (verbose)
  73.               printf("    Overlay possible: %sn", ostrings[j]);
  74.             glutEstablishOverlay();
  75.             if (verbose)
  76.               printf("      Overlay establish: %sn", ostrings[j]);
  77.             glutRemoveOverlay();
  78.             if (verbose)
  79.               printf("        Overlay remove: %sn", ostrings[j]);
  80.           }
  81.         }
  82.         glutDestroyWindow(win);
  83.         if (verbose)
  84.           printf("      Destroyed: %sn", strings[i]);
  85.       } else {
  86.         if (verbose)
  87.           printf("Not possible: %sn", strings[i]);
  88.       }
  89.     }
  90.   }
  91.   glutInitDisplayString(NULL);
  92.   num = 1;
  93.   do {
  94.     sprintf(mode, "rgb num=%d", num);
  95.     glutInitDisplayString(mode);
  96.     exists = glutGet(GLUT_DISPLAY_MODE_POSSIBLE);
  97.     if (exists) {
  98.       if (verbose)
  99.         printf("  Possible: %sn", mode);
  100.       win = glutCreateWindow("test23");
  101.       if (verbose)
  102.         printf("    Created: %sn", mode);
  103.       glutDestroyWindow(win);
  104.       if (verbose)
  105.         printf("      Destroyed: %sn", mode);
  106.       sprintf(mode, "rgb num=0x%x", num);
  107.       glutInitDisplayString(mode);
  108.       exists = glutGet(GLUT_DISPLAY_MODE_POSSIBLE);
  109.       if (!exists) {
  110.         printf("FAIL: test23 (hex num= don't work)n");
  111.         exit(1);
  112.       }
  113.       win = glutCreateWindow("test23");
  114.       glutDestroyWindow(win);
  115.       num++;
  116.     } else {
  117.       if (verbose)
  118.         printf("Not possible: %sn", mode);
  119.     }
  120.   } while (exists);
  121.   glutInitDisplayString(NULL);
  122.   printf("PASS: test23n");
  123.   return 0;             /* ANSI C requires main to return int. */
  124. }