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

GIS编程

开发平台:

Visual C++

  1. /* Copyright (c) Mark J. Kilgard, 1996. */
  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 GLUT's glutWindowStatusFunc rotuine. */
  6. #include <stdlib.h>
  7. #include <stdio.h>
  8. #include <string.h>
  9. #include <GL/glut.h>
  10. int win, subwin, cover;
  11. void
  12. display(void)
  13. {
  14.   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  15.   glutSwapBuffers();
  16. }
  17. /* ARGSUSED */
  18. void
  19. time_end(int value)
  20. {
  21.   printf("PASS: test22n");
  22.   exit(0);
  23. }
  24. /* ARGSUSED */
  25. void
  26. time5(int value)
  27. {
  28.   glutSetWindow(subwin);
  29.   glutPositionWindow(40, 40);
  30. }
  31. /* ARGSUSED */
  32. void
  33. time4(int value)
  34. {
  35.   glutSetWindow(subwin);
  36.   glutShowWindow();
  37. }
  38. /* ARGSUSED */
  39. void
  40. time3(int value)
  41. {
  42.   glutSetWindow(subwin);
  43.   glutHideWindow();
  44. }
  45. int sub_state = 0;
  46. int cover_state = 0;
  47. int state = 0;
  48. void
  49. coverstat(int status)
  50. {
  51.   if (cover != glutGetWindow()) {
  52.     printf("ERROR: test22n");
  53.     exit(1);
  54.   }
  55.   printf("%d: cover = %dn", cover_state, status);
  56.   switch(cover_state) {
  57.   case 0:
  58.     if (status != GLUT_FULLY_RETAINED) {
  59.       printf("ERROR: test22n");
  60.       exit(1);
  61.     }
  62.     glutTimerFunc(1000, time3, 0);
  63.     break;
  64.   default:
  65.     printf("ERROR: test22n");
  66.     exit(1);
  67.     break;
  68.   }
  69.   cover_state++;
  70. }
  71. /* ARGSUSED */
  72. void
  73. time2(int value)
  74. {
  75.   cover = glutCreateSubWindow(win, 5, 5, 105, 105);
  76.   glClearColor(0.0, 1.0, 0.0, 0.0);
  77.   glutDisplayFunc(display);
  78.   glutWindowStatusFunc(coverstat);
  79. }
  80. void
  81. substat(int status)
  82. {
  83.   if (subwin != glutGetWindow()) {
  84.     printf("ERROR: test22n");
  85.     exit(1);
  86.   }
  87.   printf("%d: substat = %dn", sub_state, status);
  88.   switch(sub_state) {
  89.   case 0:
  90.     if (status != GLUT_FULLY_RETAINED) {
  91.       printf("ERROR: test22n");
  92.       exit(1);
  93.     }
  94.     glutTimerFunc(1000, time2, 0);
  95.     break;
  96.   case 1:
  97.     if (status != GLUT_FULLY_COVERED) {
  98.       printf("ERROR: test22n");
  99.       exit(1);
  100.     }
  101.     break;
  102.   case 2:
  103.     if (status != GLUT_HIDDEN) {
  104.       printf("ERROR: test22n");
  105.       exit(1);
  106.     }
  107.     glutTimerFunc(1000, time4, 0);
  108.     break;
  109.   case 3:
  110.     if (status != GLUT_FULLY_COVERED) {
  111.       printf("ERROR: test22n");
  112.       exit(1);
  113.     }
  114.     glutTimerFunc(1000, time5, 0);
  115.     break;
  116.   case 4:
  117.     if (status != GLUT_PARTIALLY_RETAINED) {
  118.       printf("ERROR: test22n");
  119.       exit(1);
  120.     }
  121.     glutTimerFunc(1000, time_end, 0);
  122.     break;
  123.   default:
  124.     printf("ERROR: test22n");
  125.     exit(1);
  126.     break;
  127.   }
  128.   sub_state++;
  129. }
  130. /* ARGSUSED */
  131. void
  132. time1(int value)
  133. {
  134.   subwin = glutCreateSubWindow(win, 10, 10, 100, 100);
  135.   glClearColor(0.0, 1.0, 1.0, 0.0);
  136.   glutDisplayFunc(display);
  137.   glutWindowStatusFunc(substat);
  138. }
  139. void
  140. winstat(int status)
  141. {
  142.   if (win != glutGetWindow()) {
  143.     printf("ERROR: test22n");
  144.     exit(1);
  145.   }
  146.   printf("%d: win = %dn", state, status);
  147.   switch(state) {
  148.   case 0:
  149.     if (status != GLUT_FULLY_RETAINED) {
  150.       printf("ERROR: test22n");
  151.       exit(1);
  152.     }
  153.     glutTimerFunc(1000, time1, 0);
  154.     break;
  155.   case 1:
  156.     if (status != GLUT_PARTIALLY_RETAINED) {
  157.       printf("ERROR: test22n");
  158.       exit(1);
  159.     }
  160.     break;
  161.   default:
  162.     printf("ERROR: test22n");
  163.     exit(1);
  164.     break;
  165.   }
  166.   state++;
  167. }
  168. /* ARGSUSED */
  169. void
  170. visbad(int state)
  171. {
  172.   printf("ERROR: test22n");
  173.   exit(1);
  174. }
  175. int
  176. main(int argc, char **argv)
  177. {
  178.   glutInit(&argc, argv);
  179.   glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
  180.   win = glutCreateWindow("test22");
  181.   glClearColor(1.0, 0.0, 1.0, 0.0);
  182.   glutDisplayFunc(display);
  183.   glutVisibilityFunc(visbad);
  184.   glutVisibilityFunc(NULL);
  185.   glutWindowStatusFunc(NULL);
  186.   glutVisibilityFunc(NULL);
  187.   glutWindowStatusFunc(winstat);
  188.   glutMainLoop();
  189.   return 0;             /* ANSI C requires main to return int. */
  190. }