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

GIS编程

开发平台:

Visual C++

  1. /* Copyright (c) Mark J. Kilgard, 1994, 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. #include <stdlib.h>
  6. #include <stdio.h>
  7. #include <GL/glut.h>
  8. int count = 0, save_count;
  9. int head, tail, diff;
  10. void
  11. idle(void)
  12. {
  13.   count++;
  14. }
  15. void
  16. timer2(int value)
  17. {
  18.   if (value != 36) {
  19.     printf("FAIL: timer value wrongn");
  20.     exit(1);
  21.   }
  22.   if (count != save_count) {
  23.     printf("FAIL: counter still countingn");
  24.     exit(1);
  25.   }
  26.   printf("PASS: test2n");
  27.   exit(0);
  28. }
  29. void
  30. timer(int value)
  31. {
  32.   if (value != 42) {
  33.     printf("FAIL: timer value wrongn");
  34.     exit(1);
  35.   }
  36.   if (count <= 0) {
  37.     printf("FAIL: idle func not runningn");
  38.     exit(1);
  39.   }
  40.   glutIdleFunc(NULL);
  41.   save_count = count;
  42.   tail = glutGet(GLUT_ELAPSED_TIME);
  43.   diff = tail - head;
  44.   printf("diff = %d (%d - %d)n", diff, tail, head);
  45.   if (diff > ((int) 500 * 1.2)) {
  46.     printf("THIS TEST IS TIME SENSITIVE; IF IT FAILS, TRY RUNNING IT AGAIN.n");
  47.     printf("FAIL: timer too laten");
  48.     exit(1);
  49.   }
  50.   if (diff < ((int) 500 * .9)) {
  51.     printf("THIS TEST IS TIME SENSITIVE; IF IT FAILS, TRY RUNNING IT AGAIN.n");
  52.     printf("FAIL: timer too soonn");
  53.     exit(1);
  54.   }
  55.   glutTimerFunc(100, timer2, 36);
  56. }
  57. /* ARGSUSED */
  58. void
  59. menuSelect(int value)
  60. {
  61. }
  62. void
  63. NeverVoid(void)
  64. {
  65.   printf("FAIL: NeverVoid should never be calledn");
  66.   exit(1);
  67. }
  68. /* ARGSUSED */
  69. void
  70. NeverValue(int value)
  71. {
  72.   printf("FAIL: NeverValue most be NOT visiblen");
  73.   exit(1);
  74. }
  75. #define NUM 15
  76. void
  77. display(void)
  78. {
  79.   glClear(GL_COLOR_BUFFER_BIT);
  80.   glFlush();
  81. }
  82. int
  83. main(int argc, char **argv)
  84. {
  85.   int win, menu;
  86.   int marray[NUM];
  87.   int warray[NUM];
  88.   int i, j;
  89.   GLint isIndex;
  90.   glutInit(&argc, argv);
  91.   glutInitWindowPosition(10, 10);
  92.   glutInitWindowSize(200, 200);
  93.   glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
  94.   win = glutCreateWindow("test2");
  95.   glGetIntegerv(GL_INDEX_MODE, &isIndex);
  96.   if (isIndex != 0) {
  97.     printf("FAIL: window should be RGBAn");
  98.     exit(1);
  99.   }
  100.   glutSetWindow(win);
  101.   glutDisplayFunc(display);
  102.   menu = glutCreateMenu(menuSelect);
  103.   glutSetMenu(menu);
  104.   glutReshapeFunc(NULL);
  105.   glutReshapeFunc(NULL);
  106.   glutKeyboardFunc(NULL);
  107.   glutKeyboardFunc(NULL);
  108.   glutMouseFunc(NULL);
  109.   glutMouseFunc(NULL);
  110.   glutMotionFunc(NULL);
  111.   glutMotionFunc(NULL);
  112.   glutVisibilityFunc(NULL);
  113.   glutVisibilityFunc(NULL);
  114.   glutMenuStateFunc(NULL);
  115.   glutMenuStateFunc(NULL);
  116.   glutMenuStatusFunc(NULL);
  117.   glutMenuStatusFunc(NULL);
  118.   glutSpecialFunc(NULL);
  119.   glutSpecialFunc(NULL);
  120.   glutSpaceballMotionFunc(NULL);
  121.   glutSpaceballMotionFunc(NULL);
  122.   glutSpaceballRotateFunc(NULL);
  123.   glutSpaceballRotateFunc(NULL);
  124.   glutSpaceballButtonFunc(NULL);
  125.   glutSpaceballButtonFunc(NULL);
  126.   glutButtonBoxFunc(NULL);
  127.   glutButtonBoxFunc(NULL);
  128.   glutDialsFunc(NULL);
  129.   glutDialsFunc(NULL);
  130.   glutTabletMotionFunc(NULL);
  131.   glutTabletMotionFunc(NULL);
  132.   glutTabletButtonFunc(NULL);
  133.   glutTabletButtonFunc(NULL);
  134.   for (i = 0; i < NUM; i++) {
  135.     marray[i] = glutCreateMenu(menuSelect);
  136.     warray[i] = glutCreateWindow("test");
  137.     glutDisplayFunc(display);
  138.     for (j = 0; j < i; j++) {
  139.       glutAddMenuEntry("Hello", 1);
  140.       glutAddSubMenu("Submenu", menu);
  141.     }
  142.     if (marray[i] != glutGetMenu()) {
  143.       printf("FAIL: current menu not %dn", marray[i]);
  144.       exit(1);
  145.     }
  146.     if (warray[i] != glutGetWindow()) {
  147.       printf("FAIL: current window not %dn", warray[i]);
  148.       exit(1);
  149.     }
  150.     glutDisplayFunc(NeverVoid);
  151.     glutVisibilityFunc(NeverValue);
  152.     glutHideWindow();
  153.   }
  154.   for (i = 0; i < NUM; i++) {
  155.     glutDestroyMenu(marray[i]);
  156.     glutDestroyWindow(warray[i]);
  157.   }
  158.   glutTimerFunc(500, timer, 42);
  159.   head = glutGet(GLUT_ELAPSED_TIME);
  160.   glutIdleFunc(idle);
  161.   glutMainLoop();
  162.   return 0;             /* ANSI C requires main to return int. */
  163. }