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

  1.  
  2. /* Copyright (c) Mark J. Kilgard, 1994. */
  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 test makes sure that if you post a redisplay within a
  9.    display callback, another display callback will be
  10.    generated. I believe this is useful for progressive
  11.    refinement of an image.  Draw it once at a coarse
  12.    tesselation to get something on the screen; then redraw at a
  13.    higher level of tesselation.  Pre-GLUT 2.3 fails this test. */
  14.  
  15. #include <stdio.h>
  16. #include <stdlib.h>
  17. #include <GL/glut.h>
  18.  
  19. GLfloat light_diffuse[] =
  20. {1.0, 0.0, 0.0, 1.0};
  21. GLfloat light_position[] =
  22. {1.0, 1.0, 1.0, 0.0};
  23. GLUquadricObj *qobj;
  24.  
  25. void
  26. displayFunc(void)
  27. {
  28.   static int tesselation = 3;
  29.  
  30.   fprintf(stderr, " %d", tesselation);
  31.   if (tesselation > 23) {
  32.     printf("\nPASS: test15\n");
  33.     exit(0);
  34.   }
  35.   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  36.   gluSphere(qobj, /* radius */ 1.0,
  37.     /* slices */ tesselation, /* stacks */ tesselation);
  38.   glutSwapBuffers();
  39.   tesselation += 1;
  40.   glutPostRedisplay();
  41. }
  42.  
  43. /* ARGSUSED */
  44. void
  45. timefunc(int value)
  46. {
  47.   printf("\nFAIL: test15\n");
  48.   exit(1);
  49. }
  50.  
  51. int
  52. main(int argc, char **argv)
  53. {
  54.   glutInit(&argc, argv);
  55.   glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGB);
  56.   glutCreateWindow("test15");
  57.   glutDisplayFunc(displayFunc);
  58.  
  59.   qobj = gluNewQuadric();
  60.   gluQuadricDrawStyle(qobj, GLU_FILL);
  61.   glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
  62.   glLightfv(GL_LIGHT0, GL_POSITION, light_position);
  63.   glEnable(GL_LIGHTING);
  64.   glEnable(GL_LIGHT0);
  65.   glEnable(GL_DEPTH_TEST);
  66.   glMatrixMode(GL_PROJECTION);
  67.   gluPerspective( /* field of view in degree */ 22.0,
  68.   /* aspect ratio */ 1.0,
  69.     /* Z near */ 1.0, /* Z far */ 10.0);
  70.   glMatrixMode(GL_MODELVIEW);
  71.   gluLookAt(0.0, 0.0, 5.0,  /* eye is at (0,0,5) */
  72.     0.0, 0.0, 0.0,      /* center is at (0,0,0) */
  73.     0.0, 1.0, 0.);      /* up is in postivie Y direction */
  74.   glTranslatef(0.0, 0.0, -1.0);
  75.  
  76.   /* Have a reasonably large timeout since some machines make
  77.      take a while to render all those polygons. */
  78.   glutTimerFunc(15000, timefunc, 1);
  79.  
  80.   fprintf(stderr, "tesselations =");
  81.   glutMainLoop();
  82.   return 0;             /* ANSI C requires main to return int. */
  83. }
  84.