home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 109 / EnigmaAmiga109CD.iso / software / sviluppo / mesa-glut / test / glut / test21.c < prev    next >
C/C++ Source or Header  |  1998-10-23  |  4KB  |  190 lines

  1.  
  2. /* Copyright (c) Mark J. Kilgard, 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. /* This tests GLUT's video resize API (currently only supported
  9.    on SGI's InfiniteReality hardware). */
  10.  
  11. #include <stdlib.h>
  12. #include <stdio.h>
  13. #include <string.h>
  14. #include <GL/glut.h>
  15.  
  16. GLfloat light_diffuse[] =
  17. {1.0, 0.0, 0.0, 1.0};
  18. GLfloat light_position[] =
  19. {1.0, 1.0, 1.0, 0.0};
  20.  
  21. int x, y, w, h, dx, dy, dw, dh;
  22.  
  23. void
  24. display(void)
  25. {
  26.   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  27.   glutSolidTeapot(1.0);
  28.   glutSwapBuffers();
  29. }
  30.  
  31. void
  32. show_video_size(void)
  33. {
  34.   printf("GLUT_VIDEO_RESIZE_X = %d\n",
  35.     glutVideoResizeGet(GLUT_VIDEO_RESIZE_X));
  36.   printf("GLUT_VIDEO_RESIZE_Y = %d\n",
  37.     glutVideoResizeGet(GLUT_VIDEO_RESIZE_Y));
  38.   printf("GLUT_VIDEO_RESIZE_WIDTH = %d\n",
  39.     glutVideoResizeGet(GLUT_VIDEO_RESIZE_WIDTH));
  40.   printf("GLUT_VIDEO_RESIZE_HEIGHT = %d\n",
  41.     glutVideoResizeGet(GLUT_VIDEO_RESIZE_HEIGHT));
  42. }
  43.  
  44. /* ARGSUSED1 */
  45. void
  46. key(unsigned char k, int x, int y)
  47. {
  48.   printf("c = %c\n", k);
  49.   switch (k) {
  50.   case 27:
  51.     exit(0);
  52.     return;
  53.   case 'a':
  54.     glutVideoPan(0, 0, 1280, 1024);
  55.     break;
  56.   case 'b':
  57.     glutVideoPan(0, 0, 1600, 1024);
  58.     break;
  59.   case 'c':
  60.     glutVideoPan(640, 512, 640, 512);
  61.     break;
  62.   case 'q':
  63.     glutVideoPan(320, 256, 640, 512);
  64.     break;
  65.   case '1':
  66.     glutVideoResize(0, 0, 640, 512);
  67.     break;
  68.   case '2':
  69.     glutVideoResize(0, 512, 640, 512);
  70.     break;
  71.   case '3':
  72.     glutVideoResize(512, 512, 640, 512);
  73.     break;
  74.   case '4':
  75.     glutVideoResize(512, 0, 640, 512);
  76.     break;
  77.   case 's':
  78.     glutStopVideoResizing();
  79.     break;
  80.   case '=':
  81.     show_video_size();
  82.     break;
  83.   case ' ':
  84.     glutPostRedisplay();
  85.     break;
  86.   }
  87. }
  88.  
  89. /* ARGSUSED */
  90. void
  91. time2(int value)
  92. {
  93.   glutVideoResize(x, y, w, h);
  94.   glutPostRedisplay();
  95.   x -= dx;
  96.   y -= dy;
  97.   w += (dx * 2);
  98.   h += (dy * 2);
  99.   if (x > 0) {
  100.     glutTimerFunc(100, time2, 0);
  101.   } else {
  102.     glutStopVideoResizing();
  103.     printf("PASS: test21 (with video resizing tested)\n");
  104.     exit(0);
  105.   }
  106. }
  107.  
  108. /* ARGSUSED */
  109. void
  110. time1(int value)
  111. {
  112.   glutVideoPan(x, y, w, h);
  113.   x += dx;
  114.   y += dy;
  115.   w -= (dx * 2);
  116.   h -= (dy * 2);
  117.   if (x < 200) {
  118.     glutTimerFunc(100, time1, 0);
  119.   } else {
  120.     glutTimerFunc(100, time2, 0);
  121.   }
  122. }
  123.  
  124. int
  125. main(int argc, char **argv)
  126. {
  127.   int i, interact = 0;
  128.  
  129.   glutInit(&argc, argv);
  130.  
  131.   for (i = 1; i < argc; i++) {
  132.     if (!strcmp("-i", argv[i])) {
  133.       interact = 1;
  134.     }
  135.   }
  136.  
  137.   glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
  138.   glutCreateWindow("test21");
  139.  
  140.   if (!glutVideoResizeGet(GLUT_VIDEO_RESIZE_POSSIBLE)) {
  141.     printf("video resizing not supported\n");
  142.     printf("PASS: test21\n");
  143.     exit(0);
  144.   }
  145.   glutSetupVideoResizing();
  146.   printf("GLUT_VIDEO_RESIZE_X_DELTA = %d\n",
  147.     dx = glutVideoResizeGet(GLUT_VIDEO_RESIZE_X_DELTA));
  148.   printf("GLUT_VIDEO_RESIZE_Y_DELTA = %d\n",
  149.     dy = glutVideoResizeGet(GLUT_VIDEO_RESIZE_Y_DELTA));
  150.   printf("GLUT_VIDEO_RESIZE_WIDTH_DELTA = %d\n",
  151.     dw = glutVideoResizeGet(GLUT_VIDEO_RESIZE_WIDTH_DELTA));
  152.   printf("GLUT_VIDEO_RESIZE_HEIGHT_DELTA = %d\n",
  153.     dh = glutVideoResizeGet(GLUT_VIDEO_RESIZE_HEIGHT_DELTA));
  154.   printf("GLUT_VIDEO_RESIZE_X = %d\n",
  155.     x = glutVideoResizeGet(GLUT_VIDEO_RESIZE_X));
  156.   printf("GLUT_VIDEO_RESIZE_Y = %d\n",
  157.     y = glutVideoResizeGet(GLUT_VIDEO_RESIZE_Y));
  158.   printf("GLUT_VIDEO_RESIZE_WIDTH = %d\n",
  159.     w = glutVideoResizeGet(GLUT_VIDEO_RESIZE_WIDTH));
  160.   printf("GLUT_VIDEO_RESIZE_HEIGHT = %d\n",
  161.     h = glutVideoResizeGet(GLUT_VIDEO_RESIZE_HEIGHT));
  162.   glutStopVideoResizing();
  163.   glutSetupVideoResizing();
  164.  
  165.   glutDisplayFunc(display);
  166.   glutFullScreen();
  167.  
  168.   glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
  169.   glLightfv(GL_LIGHT0, GL_POSITION, light_position);
  170.   glEnable(GL_LIGHTING);
  171.   glEnable(GL_LIGHT0);
  172.   glEnable(GL_DEPTH_TEST);
  173.   glMatrixMode(GL_PROJECTION);
  174.   gluPerspective( /* field of view in degree */ 22.0,
  175.   /* aspect ratio */ 1.0,
  176.     /* Z near */ 1.0, /* Z far */ 10.0);
  177.   glMatrixMode(GL_MODELVIEW);
  178.   gluLookAt(0.0, 0.0, 5.0,  /* eye is at (0,0,5) */
  179.     0.0, 0.0, 0.0,      /* center is at (0,0,0) */
  180.     0.0, 1.0, 0.);      /* up is in postivie Y direction */
  181.   glTranslatef(0.0, 0.0, -1.0);
  182.  
  183.   glutKeyboardFunc(key);
  184.   if (!interact) {
  185.     glutTimerFunc(100, time1, 0);
  186.   }
  187.   glutMainLoop();
  188.   return 0;             /* ANSI C requires main to return int. */
  189. }
  190.