home *** CD-ROM | disk | FTP | other *** search
/ Amiga Magazin: Amiga-CD 2000 April & May / AMIGA_2000_04.iso / patches / mesa3.1 / test / glut / test3.c < prev    next >
C/C++ Source or Header  |  1998-10-23  |  2KB  |  93 lines

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