§ Основной файл

Подключение библиотек смотреть здесь
#include <glut.cc>
#include <stdio.h>

glut win;

void display()  {

    for (int i = 0; i < 400; i++)
    for (int j = 0; j < 640; j++)
        win.pset(j, i, i + j);

    win.update();
}

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

    win.init("Example Window", 640, 400);

    glutDisplayFunc(display);
    glutIdleFunc(display);
    glutMainLoop();

    return 0;
}

§ Код класса glut.cc

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

class glut {

protected:

    int width, height;
    unsigned char* membuf;

public:

    glut()  { membuf = NULL; }
    ~glut() { if (membuf) free(membuf); }

    void init(const char* name, int w, int h) {

        int argc = 0;
        char* argv[1];
        init(&argc, argv, name, w, h);
    }

    void init(int* argc, char** argv, const char* name, int w, int h) {

        width  = w;
        height = h;

        glutInit(argc, argv);
        glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
        glutInitWindowSize(width, height);
        glutInitWindowPosition(0, 0);
        glutCreateWindow(name);
        glClearColor(0.0, 0.0, 0.0, 0.0);

        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        gluOrtho2D(-1.0, 1.0, -1.0, 1.0);

        membuf = (unsigned char*) malloc(width * height * 4);
    }

    // Нарисовать точку
    void pset(int x, int y, unsigned int cl) {

        if (x < 0 || y < 0 || x >= width || y >= height)
            return;

        int cursor = (x + y*width)*4;
        membuf[cursor++] = cl>>16;
        membuf[cursor++] = cl>>8;
        membuf[cursor++] = cl;
        membuf[cursor++] = 255;
    }

    // Обновить экран
    void update() {

        glRasterPos2i(-1, -1);
        glDrawPixels(width, height, GL_RGBA, GL_UNSIGNED_BYTE, membuf);
        glutSwapBuffers();
    }
};

§ Сборка

makefile
all:
	g++ main.cc -I. -mwindows -O3 glut32.lib -lopengl32 -lglu32 -o main.exe
	strip main.exe
bat-file
@echo off
make
if %errorlevel% neq 0 goto :stop
main.exe
goto :end
:stop
pause
:end