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

GIS编程

开发平台:

Visual C++

  1. /* Copyright (c) Mark J. Kilgard, 1997. */
  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. /* This tests creation of a subwindow that gets "popped" to
  6.    check if it also (erroneously) gets moved.  GLUT 3.5 had
  7.    this bug (fixed in GLUT 3.6). */
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #include <string.h>
  11. #include <GL/glut.h>
  12. int parent, child;
  13. int parentDrawn = 0, childDrawn = 0;
  14. /* ARGSUSED */
  15. void
  16. failTest(int value)
  17. {
  18.   printf("FAIL: test27n");
  19.   exit(1);
  20. }
  21. /* ARGSUSED */
  22. void
  23. passTest(int value)
  24. {
  25.   printf("PASS: test27n");
  26.   exit(0);
  27. }
  28. void
  29. installFinish(void)
  30. {
  31.   if (childDrawn && parentDrawn) {
  32.     glutTimerFunc(1000, passTest, 0);
  33.   }
  34. }
  35. void
  36. output(GLfloat x, GLfloat y, char *string)
  37. {
  38.   int len, i;
  39.   glRasterPos2f(x, y);
  40.   len = (int) strlen(string);
  41.   for (i = 0; i < len; i++) {
  42.     glutBitmapCharacter(GLUT_BITMAP_9_BY_15, string[i]);
  43.   }
  44. }
  45. void
  46. displayParent(void)
  47. {
  48.   glClear(GL_COLOR_BUFFER_BIT);
  49.   glFlush();
  50.   parentDrawn++;
  51.   installFinish();
  52. }
  53. void
  54. displayChild(void)
  55. {
  56.   glClear(GL_COLOR_BUFFER_BIT);
  57.   output(-0.4, 0.5, "this");
  58.   output(-0.8, 0.1, "subwindow");
  59.   output(-0.8, -0.3, "should be");
  60.   output(-0.7, -0.7, "centered");
  61.   glFlush();
  62.   childDrawn++;
  63.   installFinish();
  64. }
  65. int
  66. main(int argc, char **argv)
  67. {
  68.   int possible;
  69.   glutInit(&argc, argv);
  70.   glutInitWindowSize(300, 300);
  71.   glutInitWindowPosition(5, 5);
  72.   glutInitDisplayMode(GLUT_RGB);
  73.   parent = glutCreateWindow("test27");
  74.   glClearColor(1.0, 0.0, 0.0, 0.0);
  75.   glutDisplayFunc(displayParent);
  76.   possible = glutGet(GLUT_DISPLAY_MODE_POSSIBLE);
  77.   if (possible != 1) {
  78.     printf("FAIL: glutGet returned display mode not possible: %dn", possible);
  79.     exit(1);
  80.   }
  81.   child = glutCreateSubWindow(parent, 100, 100, 100, 100);
  82.   glClearColor(0.0, 1.0, 0.0, 0.0);
  83.   glColor3f(0.0, 0.0, 0.0);
  84.   glutDisplayFunc(displayChild);
  85.   glutPopWindow();
  86.   glutTimerFunc(10000, failTest, 0);
  87.   glutMainLoop();
  88.   return 0;             /* ANSI C requires main to return int. */
  89. }