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

GIS编程

开发平台:

Visual C++

  1. /* Copyright (c) Mark J. Kilgard, 1994. */
  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. #include <stdlib.h>
  6. #include <stdio.h>
  7. #include <GL/glut.h>
  8. #define N 6
  9. #define M 6
  10. int exposed[M * N];
  11. int ecount = 0;
  12. int viewable[M * N];
  13. int vcount = 0;
  14. void
  15. display(void)
  16. {
  17.   int win;
  18.   win = glutGetWindow() - 1;
  19.   if (!exposed[win]) {
  20.     exposed[win] = 1;
  21.     ecount++;
  22.   }
  23.   glClear(GL_COLOR_BUFFER_BIT);
  24.   glFlush();
  25.   if ((ecount == (M * N)) && (vcount == (M * N))) {
  26.     printf("PASS: test3n");
  27.     exit(0);
  28.   }
  29. }
  30. /* ARGSUSED */
  31. void
  32. view(int state)
  33. {
  34.   int win;
  35.   win = glutGetWindow() - 1;
  36.   if (!viewable[win]) {
  37.     viewable[win] = 1;
  38.     vcount++;
  39.   }
  40.   if ((ecount == (M * N)) && (vcount == (M * N))) {
  41.     printf("PASS: test3n");
  42.     exit(0);
  43.   }
  44. }
  45. void
  46. timer(int value)
  47. {
  48.   if (value != 23) {
  49.     printf("FAIL: bad timer valuen");
  50.     exit(1);
  51.   }
  52.   printf("FAIL: didn't get all expose and viewable calls in 45 secondsn");
  53.   exit(1);
  54. }
  55. int
  56. main(int argc, char **argv)
  57. {
  58.   char buf[100];
  59.   int i, j;
  60.   glutInit(&argc, argv);
  61.   glutInitWindowSize(10, 10);
  62.   glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
  63.   for (i = 0; i < M; i++) {
  64.     for (j = 0; j < N; j++) {
  65.       exposed[i * N + j] = 0;
  66.       viewable[i * N + j] = 0;
  67.       glutInitWindowPosition(100 * i, 100 * j);
  68.       sprintf(buf, "%dn", i * N + j + 1);
  69.       glutCreateWindow(buf);
  70.       glutDisplayFunc(display);
  71.       glutVisibilityFunc(view);
  72.       glClearColor(1.0, 0.0, 0.0, 1.0);
  73.     }
  74.   }
  75.   /* XXX Hopefully in 45 seconds, all the windows should
  76.      appear, or they probably won't ever appear! */
  77.   glutTimerFunc(45 * 1000, timer, 23);
  78.   glutMainLoop();
  79.   return 0;             /* ANSI C requires main to return int. */
  80. }