§ Основной файл
Подключение библиотек смотреть
здесь1#include <glut.cc>
2#include <stdio.h>
3
4glut win;
5
6void display() {
7
8 for (int i = 0; i < 400; i++)
9 for (int j = 0; j < 640; j++)
10 win.pset(j, i, i + j);
11
12 win.update();
13}
14
15int main(int argc, char* argv[]) {
16
17 win.init("Example Window", 640, 400);
18
19 glutDisplayFunc(display);
20 glutIdleFunc(display);
21 glutMainLoop();
22
23 return 0;
24}
§ Код класса glut.cc
1#include <windows.h>
2#include <GL/glut.h>
3
4class glut {
5
6protected:
7
8 int width, height;
9 unsigned char* membuf;
10
11public:
12
13 glut() { membuf = NULL; }
14 ~glut() { if (membuf) free(membuf); }
15
16 void init(const char* name, int w, int h) {
17
18 int argc = 0;
19 char* argv[1];
20 init(&argc, argv, name, w, h);
21 }
22
23 void init(int* argc, char** argv, const char* name, int w, int h) {
24
25 width = w;
26 height = h;
27
28 glutInit(argc, argv);
29 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
30 glutInitWindowSize(width, height);
31 glutInitWindowPosition(0, 0);
32 glutCreateWindow(name);
33 glClearColor(0.0, 0.0, 0.0, 0.0);
34
35 glMatrixMode(GL_PROJECTION);
36 glLoadIdentity();
37 gluOrtho2D(-1.0, 1.0, -1.0, 1.0);
38
39 membuf = (unsigned char*) malloc(width * height * 4);
40 }
41
42
43 void pset(int x, int y, unsigned int cl) {
44
45 if (x < 0 || y < 0 || x >= width || y >= height)
46 return;
47
48 int cursor = (x + y*width)*4;
49 membuf[cursor++] = cl>>16;
50 membuf[cursor++] = cl>>8;
51 membuf[cursor++] = cl;
52 membuf[cursor++] = 255;
53 }
54
55
56 void update() {
57
58 glRasterPos2i(-1, -1);
59 glDrawPixels(width, height, GL_RGBA, GL_UNSIGNED_BYTE, membuf);
60 glutSwapBuffers();
61 }
62};
§ Сборка
makefile
1all:
2 g++ main.cc -I. -mwindows -O3 glut32.lib -lopengl32 -lglu32 -o main.exe
3 strip main.exe
bat-file
1@echo off
2make
3if %errorlevel% neq 0 goto :stop
4main.exe
5goto :end
6:stop
7pause
8:end