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

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