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

  1.  
  2. /* Copyright (c) Mark J. Kilgard, 1997. */
  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. /* Test for glutPostWindowRedisplay and
  9.    glutPostWindowOverlayRedisplay introduced with GLUT 4 API. */
  10.  
  11. #include <GL/glut.h>
  12. #include <stdio.h>
  13. #include <stdlib.h>
  14.  
  15. int window1, window2, win1displayed = 0, win2displayed = 0;
  16. int win1vis = 0, win2vis = 0;
  17.  
  18. int overlaySupported, transP, opaqueP, over1displayed = 0;
  19.  
  20. void
  21. checkifdone(void)
  22. {
  23.   if ((win1displayed > 15) && (win2displayed > 15) && (!overlaySupported || over1displayed>15)) {
  24.     printf("PASS: test26\n");
  25.     exit(0);
  26.   }
  27. }
  28.  
  29. void
  30. window1display(void)
  31. {
  32.   if (glutGetWindow() != window1) {
  33.     printf("FAIL: window1display\n");
  34.     exit(1);
  35.   }
  36.   glClearColor(0, 1, 0, 0);
  37.   glClear(GL_COLOR_BUFFER_BIT);
  38.   glFlush();
  39.   win1displayed++;
  40.   checkifdone();
  41. }
  42.  
  43. void
  44. overDisplay(void)
  45. {
  46.   glClear(GL_COLOR_BUFFER_BIT);
  47.   glRectf(-0.5, -0.5, 0.5, 0.5);
  48.   glFlush();
  49.   over1displayed++;
  50.   checkifdone();
  51. }
  52.  
  53. void
  54. window2display(void)
  55. {
  56.   if (glutGetWindow() != window2) {
  57.     printf("FAIL: window2display\n");
  58.     exit(1);
  59.   }
  60.   glClearColor(0, 0, 1, 0);
  61.   glClear(GL_COLOR_BUFFER_BIT);
  62.   glutSwapBuffers();
  63.   win2displayed++;
  64.   checkifdone();
  65. }
  66.  
  67. /* ARGSUSED */
  68. void
  69. timefunc(int value)
  70. {
  71.   printf("FAIL: test26\n");
  72.   exit(1);
  73. }
  74.  
  75. void
  76. idle(void)
  77. {
  78.   static int count = 0;
  79.  
  80.   if (count % 2) {
  81.     glutPostWindowRedisplay(window1);
  82.     glutPostWindowRedisplay(window2);
  83.   } else {
  84.     glutPostWindowRedisplay(window2);
  85.     glutPostWindowRedisplay(window1);
  86.   }
  87.   if (overlaySupported) {
  88.     glutPostWindowOverlayRedisplay(window1);
  89.   }
  90.   count++;
  91. }
  92.  
  93. void
  94. window1vis(int vis)
  95. {
  96.   win1vis = vis;
  97.   if (win1vis && win2vis) {
  98.     glutIdleFunc(idle);
  99.   }
  100. }
  101.  
  102. void
  103. window2status(int status)
  104. {
  105.   win2vis = (status == GLUT_FULLY_RETAINED) || (status == GLUT_PARTIALLY_RETAINED);
  106.   if (win1vis && win2vis) {
  107.     glutIdleFunc(idle);
  108.   }
  109. }
  110.  
  111. int
  112. main(int argc, char **argv)
  113. {
  114.   glutInit(&argc, argv);
  115.  
  116.   glutInitWindowSize(100, 100);
  117.   glutInitWindowPosition(50, 100);
  118.   glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
  119.   window1 = glutCreateWindow("1");
  120.   glutDisplayFunc(window1display);
  121.   glutVisibilityFunc(window1vis);
  122.  
  123.   glutInitDisplayMode(GLUT_SINGLE | GLUT_INDEX);
  124.   overlaySupported = glutLayerGet(GLUT_OVERLAY_POSSIBLE);
  125.   if (overlaySupported) {
  126.     printf("testing glutPostWindowOverlayRedisplay since overlay supported\n");
  127.     glutEstablishOverlay();
  128.     glutOverlayDisplayFunc(overDisplay);
  129.     transP = glutLayerGet(GLUT_TRANSPARENT_INDEX);
  130.     glClearIndex(glutLayerGet(GLUT_TRANSPARENT_INDEX));
  131.     opaqueP = (transP + 1) % glutGet(GLUT_WINDOW_COLORMAP_SIZE);
  132.     glutSetColor(opaqueP, 1.0, 0.0, 0.0);
  133.   }
  134.  
  135.   glutInitWindowPosition(250, 100);
  136.   glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
  137.   window2 = glutCreateWindow("2");
  138.   glutDisplayFunc(window2display);
  139.   glutWindowStatusFunc(window2status);
  140.  
  141.   glutTimerFunc(9000, timefunc, 1);
  142.  
  143.   glutMainLoop();
  144.   return 0;             /* ANSI C requires main to return int. */
  145. }
  146.