2010-07-31 3 views
1

J'essaie de créer une application GLUT. À l'heure actuelle, j'ai ce code:Erreur de bus lors de l'utilisation de GLUT

void init (GLvoid)  // Create Some Everyday Functions 
{ 

    glShadeModel(GL_SMOOTH);       // Enable Smooth Shading 
    glClearColor(0.0f, 0.0f, 0.0f, 0.5f);    // Black Background 
    glClearDepth(1.0f);         // Depth Buffer Setup 
    glEnable(GL_DEPTH_TEST);       // Enables Depth Testing 
    glDepthFunc(GL_LEQUAL);        // The Type Of Depth Testing To Do 
    glEnable (GL_COLOR_MATERIAL); 
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); 
} 

void display (void) // Create The Display Function 
{ 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear Screen And Depth Buffer 
    glLoadIdentity();         // Reset The Current Modelview Matrix 
    glTranslatef(-1.5f,0.0f,-6.0f);      // Move Left 1.5 Units And Into The Screen 6.0 
    glBegin(GL_TRIANGLES);        // Drawing Using Triangles 
    glVertex3f(0.0f, 1.0f, 0.0f);     // Top 
    glVertex3f(-1.0f,-1.0f, 0.0f);     // Bottom Left 
    glVertex3f(1.0f,-1.0f, 0.0f);     // Bottom Right 
    glEnd();           // Finished Drawing The Triangle 
    glTranslatef(3.0f,0.0f,0.0f);      // Move Right 3 Units 
    glBegin(GL_QUADS);         // Draw A Quad 
    glVertex3f(-1.0f, 1.0f, 0.0f);     // Top Left 
    glVertex3f(1.0f, 1.0f, 0.0f);     // Top Right 
    glVertex3f(1.0f,-1.0f, 0.0f);     // Bottom Right 
    glVertex3f(-1.0f,-1.0f, 0.0f);     // Bottom Left 
    glEnd(); 


    glutSwapBuffers (); 
    // Swap The Buffers To Not Be Left With A Clear Screen 
} 

void reshape (int w, int h) // Create The Reshape Function (the viewport) 
{ 
    glViewport  (0, 0, w, h); 
    glMatrixMode (GL_PROJECTION); // Select The Projection Matrix 
    glLoadIdentity ();    // Reset The Projection Matrix 
    if (h==0) // Calculate The Aspect Ratio Of The Window 
     gluPerspective (80, (float) w, 1.0, 5000.0); 
    else 
     gluPerspective (80, (float) w/(float) h, 1.0, 5000.0); 
    glMatrixMode (GL_MODELVIEW); // Select The Model View Matrix 
    glLoadIdentity (); // Reset The Model View Matrix 
} 

void keyboard (unsigned char key, int x, int y) // Create Keyboard Function 
{ 
    switch (key) { 
     case 27:  // When Escape Is Pressed... 
      exit (0); // Exit The Program 
      break;  // Ready For Next Case 
     default:  // Now Wrap It Up 
      break; 
    } 
} 

void arrow_keys (int a_keys, int x, int y) // Create Special Function (required for arrow keys) 
{ 
    switch (a_keys) { 
     case GLUT_KEY_UP:  // When Up Arrow Is Pressed... 
      glutFullScreen (); // Go Into Full Screen Mode 
      break; 
     case GLUT_KEY_DOWN:    // When Down Arrow Is Pressed... 
      glutReshapeWindow (500, 500); // Go Into A 500 By 500 Window 
      break; 
     default: 
      break; 
    } 
} 

int main(int argc, char *argv[]) { 
    glutInit(&argc, argv); 
    init(); 
    glutInitDisplayMode (GLUT_RGB | GLUT_DOUBLE); // Display Mode 
    glutInitWindowSize (500, 500); // If glutFullScreen wasn't called this is the window size 
    glutCreateWindow ("NeHe's OpenGL Framework"); // Window Title (argv[0] for current directory as title) 
    glutFullScreen  ();   // Put Into Full Screen 
    glutDisplayFunc  (display); // Matching Earlier Functions To Their Counterparts 
    glutReshapeFunc  (reshape); 
    glutKeyboardFunc (keyboard); 
    glutSpecialFunc  (arrow_keys); 
    glutMainLoop  ();   // Initialize The Main Loop 
    return 0; 
} 

Le seul résultat est Bus error dans mon terminal. Je compile en utilisant GCC d'Apple sous Mac OS X 10.5, lié aux frameworks OpenGL et GLUT.

Quelqu'un peut-il m'aider?

Répondre

2

Je pense que vous initialisez trop tôt

int main(int argc, char *argv[]) { 
    glutInit(&argc, argv); 
    glutInitDisplayMode (GLUT_RGB | GLUT_DOUBLE); // Display Mode 
    glutInitWindowSize (500, 500); // If glutFullScreen wasn't called this is the window size 
    glutCreateWindow ("NeHe's OpenGL Framework"); // Window Title (argv[0] for current directory as title) 
    init(); 
    glutFullScreen  ();   // Put Into Full Screen 
    glutDisplayFunc  (display); // Matching Earlier Functions To Their Counterparts 
    glutReshapeFunc  (reshape); 
    glutKeyboardFunc (keyboard); 
    glutSpecialFunc  (arrow_keys); 
    glutMainLoop  ();   // Initialize The Main Loop 
    return 0; 
} 

fonctionne pour moi.

Questions connexes