0
votes

I am trying to program in OpenGL.

so wrote a test program call t_gl1.cpp

I built it successfully with

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

No any error.

However, if I try to run it, I got

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

Does any one know what is going on?

Here is the code, tested on Windows and Mac, no problem. But can't get it run on Fedora nor 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
}
3
You should really be using the glut*() functions; they're more portable. This could be your problem.Bojangles
I did. I never call this "fgOpenWindow", it must be called by the glut (freeglut)Alfred Zhong
Oh right. My bad. Can you post the code (or part of it, if it's long) that goes with this question?Bojangles
glxinfo returns "Error: couldn't find RGB GLX visual or fbconfig"Alfred Zhong
@Alfred Zhong: This error message basically tells you, that your drivers are not installed correctly. NVidia drivers need a matching pair of Xorg/GLX driver module and Linux kernel module. If they don't match, the OpenGL driver won't load.datenwolf

3 Answers

2
votes

I aggreed with talonmies. It was because of the Nvidia problem. I could't find a official way to install Nvidia's developer's driver on Fedora 15. So I used rpmfusion. The driver runs and I can run CUDA. Only GLX related stuff are messed up. However, it also messed up Gnome 3.

So I switched to Arch Linux. With a much clean start, install Nvida and install Xorg according to the ArchWiki. And then install Gnome. Amazingly, OpenGL works. I guess the driver in Arch repo is not the developer's driver. Maybe just for display driver. However, CUDA works.

I am glad with that. And hopefully this will be helpful to some one else who want to run CUDA and OpenGL on Linux.

Thanks, Alfred

1
votes

There is nothing wrong with the code. I can successfully compile and run it on a properly configured 64 bit linux system with NVIDIA release 280.13 drivers. You have a driver or X11 driver installation or configuration problem. There is no programming help required for this question.

0
votes

Since you tagged this question cuda I'm going to assume you're running NVidia hardware.

Try installing some drivers.