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