2011-08-19 2 views
0

Je suis en train de programmer en OpenGL.OpenGL sur Fedora 15

donc écrit un appel programme de test t_gl1.cpp

Je l'ai construit avec succès

$ g ++ t_gl1.cpp -lglut -lGL -lGLU -o t_gl1

Pas d'erreur.

Cependant, si je tente de l'exécuter, je suis

freeglut (./t_gl1): ERREUR: Erreur interne dans la fonction fgOpenWindow X Erreur de la requête a échoué: BadWindow (paramètre non valide Fenêtre) Major opcode demande a échoué: 4 (X_DestroyWindow) Resource id dans la requête a échoué: 0x0 numéro de série de la demande a échoué: 26 numéro de série actuel dans le flux de sortie: 29

est-ce que quelqu'un sait ce qui se passe?

Voici le code, testé sur Windows et Mac, pas de problème. Mais ne peut pas le faire fonctionner sur Fedora ni Ubuntu

#include <iostream> 
#include <stdlib.h> 

#ifdef __APPLE__ 
#include <OpenGL/OpenGL.h> 
#include <GLUT/glut.h> 
#else 
#include <GL/glut.h> 
#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>360) 
     _angle-=360; 
    glutPostRedisplay(); 
    glutTimerFunc(25,update,0); 
} 

int main(int argc, char** argv) { 
    //Initialize GLUT 
    glutInit(&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 
} 
+0

Vous devriez vraiment utiliser le '* (rassasiement)' fonctions; ils sont plus portables. Ce pourrait être votre problème. – Bojangles

+0

Je l'ai fait. Je n'appelle jamais cela "fgOpenWindow", il doit être appelé par la surabondance (freeglut) –

+1

Oh, c'est vrai. Ma faute. Pouvez-vous poster le code (ou une partie de celui-ci, si c'est long) qui va avec cette question? – Bojangles

Répondre

0

Depuis que vous avez taguée cette question cuda Je vais supposer que vous utilisez du matériel NVidia.

Essayez installing some drivers.

+0

Oui, je suis le pilote de développement CUDA. sudo less/proc/pilote/nvidia/version, affiche "NVRM version: module de noyau NVIDIA UNIX x86 280.13 Wed Jul 27 16:55:43 PDT 2011" –

1

Il n'y a rien de mal avec le code. Je peux compiler et exécuter avec succès sur un système Linux 64 bits correctement configuré avec les pilotes NVIDIA version 280.13. Vous avez un pilote ou un problème d'installation ou de configuration du pilote X11. Aucune aide à la programmation n'est requise pour cette question.

2

J'ai aggrégé avec talonmies. C'était à cause du problème de Nvidia. Je n'ai pas trouvé de façon officielle d'installer le pilote du développeur Nvidia sur Fedora 15. J'ai donc utilisé rpmfusion. Le conducteur court et je peux courir CUDA. Seuls les trucs liés à GLX sont foirés. Cependant, il a également foiré Gnome 3.

Je suis donc passé à Arch Linux. Avec un bon démarrage, installez Nvida et installez Xorg en fonction de l'ArchWiki. Et puis installez Gnome. Étonnamment, OpenGL fonctionne. Je suppose que le pilote dans Arch repo n'est pas le pilote du développeur. Peut-être juste pour le pilote d'affichage. Cependant, CUDA fonctionne.

Je suis heureux avec ça. Et j'espère que cela sera utile à quelqu'un d'autre qui veut lancer CUDA et OpenGL sous Linux.

Merci, Alfred

+1

Assurez-vous d'accepter cette réponse, donc cette question ne s'affiche plus comme "sans réponse". –