Search code examples
c++openglglutfreeglut

OpenGL with GLUT. Not Drawing?


#include <GL/gl.h>
#include <GL/glut.h>

void display();
void init();

int main(int argc, char* argv[])
{
    init();

    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
    glutInitWindowSize(320, 240);
    glutCreateWindow("Main Window");
    glutDisplayFunc(display);
    glutMainLoop();

    return 0;
}

void init()
{
    glDisable(GL_DEPTH_TEST);
}

void display()
{
    glClearColor(0, 0, 0, 0);
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

    glLoadIdentity();

    glBegin(GL_QUADS);
    glColor3i(255,255,255);
        glVertex2f(10, 10);
        glVertex2f(100, 10);
        glVertex2f(100, 100);
        glVertex2f(10, 100);
    glEnd();

    glutSwapBuffers();
}

Theoretically, this code should draw a white rectangle. But all I see is a black empty screen. What's wrong?


Solution

  • Here is my working example with the changes I made noted by comments:

    #include <gl/glut.h>
    #include <gl/gl.h>
    
    #define WINDOW_WIDTH 320
    #define WINDOW_HEIGHT 240
    
    void display();
    void init();
    
    int main(int argc, char* argv[])
    {
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
        glutInitWindowSize(WINDOW_WIDTH, WINDOW_HEIGHT);
        glutCreateWindow("Main Window");
        init(); // changed the init function to come directly before display function
        glutDisplayFunc(display);
        glutMainLoop();
    
        return 0;
    }
    
    void init()
    {
        glClearColor(0, 0, 0, 0); // moved this line to be in the init function
        glDisable(GL_DEPTH_TEST);
    
        // next four lines are new
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glOrtho(0.0, WINDOW_WIDTH-1, WINDOW_HEIGHT-1, 0, -1.0, 1.0);
        glMatrixMode(GL_MODELVIEW);
    }
    
    void display()
    {
        glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
        glLoadIdentity();
    
        glBegin(GL_QUADS);
        glColor3ub(255,255,255); // changed glColor3i to glColor3ub (see below)
            glVertex2f(10, 10);
            glVertex2f(100, 10);
            glVertex2f(100, 100);
            glVertex2f(10, 100);
        glEnd();
    
        glFlush(); // added this line 
        //glutSwapBuffers(); // removed this line
    }
    

    glColor3ub is the function you want to use if you want to provide colors in the 0-255 range.

    Hope this helps.