title: OpenGL on Fedora 15
body: <p>I am trying to program in OpenGL.</p>
  
  <p>so wrote a test program call t_gl1.cpp</p>
  
  <p>I built it successfully with</p>
  
  <p>$ g++ t_gl1.cpp -lglut -lGL -lGLU -o t_gl1</p>
  
  <p>No any error.</p>
  
  <p>However, if I try to run it, I got </p>
  
  <p>freeglut (./t_gl1):  ERROR:  Internal error  in function fgOpenWindow
  X Error of failed request:  BadWindow (invalid Window parameter)
    Major opcode of failed request:  4 (X_DestroyWindow)
    Resource id in failed request:  0x0
    Serial number of failed request:  26
    Current serial number in output stream:  29</p>
  
  <p>Does any one know what is going on?</p>
  
  <p>Here is the code, tested on Windows and Mac, no problem. But can't get it run on Fedora nor Ubuntu</p>
  
  <pre><code>#include &lt;iostream&gt;
  #include &lt;stdlib.h&gt; 
  
  #ifdef __APPLE__
  #include &lt;OpenGL/OpenGL.h&gt;
  #include &lt;GLUT/glut.h&gt;
  #else
  #include &lt;GL/glut.h&gt;
  #endif
  
  using namespace std;
  
  //Called when a key is pressed
  void handleKeypress(unsigned char key, //The key that was pressed
                  int x, int y) {    //The current mouse coordinates
      switch (key) {
          case 27: //Escape key
              exit(0); //Exit the program
      }
  }
  
  //Initializes 3D rendering
  void initRendering() {
      //Makes 3D drawing work when something is in front of something else
      glEnable(GL_DEPTH_TEST);
      glEnable(GL_COLOR_MATERIAL); //NEW OF THIS
      glClearColor(0.7f,0.9f,1.0f,1.0f); //background, last number to be 1.0f
  }
  
  //Called when the window is resized
  void handleResize(int w, int h) {
      //Tell OpenGL how to convert from coordinates to pixel values
      glViewport(0, 0, w, h);
  
      glMatrixMode(GL_PROJECTION); //Switch to setting the camera perspective
  
      //Set the camera perspective
      glLoadIdentity(); //Reset the camera
      gluPerspective(45.0,                  //The camera angle
                     (double)w / (double)h, //The width-to-height ratio
                     1.0,                   //The near z clipping coordinate
                     200.0);                //The far z clipping coordinate
  }
  
  float _angle=30.0f; //kinda global variable
  
  
  //Draws the 3D scene
  void drawScene() {
      //Clear information from last draw
      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  
      glMatrixMode(GL_MODELVIEW); //Switch to the drawing perspective
      glLoadIdentity(); //Reset the drawing perspective
  
      glTranslatef(0.0f,0.0f,-5.0f);
  
  
      glPushMatrix();
  
      glRotatef(_angle, 0.0f, 1.0f , 0.0f);
  
      glColor3f(0.5f,0.0f,0.8f);
      glBegin(GL_QUADS); //Begin quadrilateral coordinates
  
      //Trapezoid
  
      glVertex3f(-0.7f, -1.5f, 0.0f);
      glVertex3f(0.7f, -1.5f, 0.0f);
      glVertex3f(0.4f, -0.5f, 0.0f);
      glVertex3f(-0.4f, -0.5f, 0.0f);
  
      glEnd(); //End quadrilateral coordinates
      glPopMatrix();
  
  
  
      glPushMatrix(); //push
      glRotatef(_angle, 1.0f, 0.0f, 0.0f);
  
      glBegin(GL_TRIANGLES); //Begin triangle coordinates Begin Pentagon
      glColor3f(1.0f,0.0f,0.0f);
      //Pentagon
      glVertex3f(0.5f, 0.5f, -0.0f);
      glVertex3f(1.5f, 0.5f, -0.0f);
      glVertex3f(0.5f, 1.0f, -0.0f);
  
      glVertex3f(0.5f, 1.0f, -0.0f);
      glVertex3f(1.5f, 0.5f, -0.0f);
      glVertex3f(1.5f, 1.0f, -0.0f);
  
      glVertex3f(0.5f, 1.0f, -0.0f);
      glVertex3f(1.5f, 1.0f, -0.0f);
      glVertex3f(1.0f, 1.5f, -0.0f);
  
      glEnd(); //end Pentagon
      glPopMatrix(); //pop
  
      glPushMatrix();
  
      glRotatef(_angle, -1.0f, 1.0f, 0.0f);
  
      glBegin(GL_TRIANGLES);
  
      //Triangle
      glVertex3f(-0.5f, 0.5f, 0.0f);
      glColor3f(0.0f, 1.0f, 0.0f);
      glVertex3f(-1.0f, 1.5f, -0.0f);
      glColor3f(0.0f, 0.0f, 1.0f);
      glVertex3f(-1.5f, 0.5f, -0.0f);
  
      glEnd(); //End triangle coordinates
      glPopMatrix();
  
      glutSwapBuffers(); //Send the 3D scene to the screen
  }
  
  void update(int value)
  {
      _angle+=2.0f;
      if(_angle&gt;360)
          _angle-=360;
      glutPostRedisplay();
      glutTimerFunc(25,update,0);
  }
  
  int main(int argc, char** argv) {
      //Initialize GLUT
      glutInit(&amp;argc, argv);
      glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
      glutInitWindowSize(400, 400); //Set the window size
  
      //Create the window
      glutCreateWindow("window");
      initRendering(); //Initialize rendering
  
      //Set handler functions for drawing, keypresses, and window resizes
      glutDisplayFunc(drawScene); //display the "drwwScene" most important part, others are settings
      glutKeyboardFunc(handleKeypress);
      glutReshapeFunc(handleResize);
  
      glutTimerFunc(25,update,0); //add the timer function to make animation
  
      glutMainLoop(); //Start the main loop.  glutMainLoop doesn't return.
      return 0; //This line is never reached
  }
  </code></pre>