§ Главный файл main.cc
Требуется файл glut32.lib, его можно получить по этой ссылке. Также есть руководство, как установить в mingw. Файл devcc.exe находится в /files/devcpp.exe.gzТакже можно скачать весь шаблон целиком.
1#include <glut.cc> 2#include <stdio.h> 3 4glut win; 5 6// Обработчик таймера 7void callTimerFunc(int value) { 8 9 glutPostRedisplay(); 10 glutTimerFunc(25, callTimerFunc, 0); 11} 12 13// Обработчик окна при вызове таймера 14void display() { 15 16 for (int i = 0; i < 200; i++) 17 for (int j = 0; j < 320; j++) 18 win.pset(j, i, win.doscl(i*j/256) ); 19 20 win.update(); 21} 22 23int main(int argc, char* argv[]) { 24 25 win.init("Example Window", 640, 400, 2); 26 27 glutDisplayFunc(display); 28 callTimerFunc(0); 29 glutMainLoop(); 30 31 return 0; 32}
§ Компиляция
Файл для windows32:1@echo off 2g++ main.cc -I.. -mwindows -O3 ../glut32.lib -lopengl32 -lglu32 -m32 -o main.exe 3if %errorlevel% neq 0 goto :stop 4strip main.exe 5main.exe 6goto :end 7:stop 8pause 9:endФайл для linux
1all: 2 g++ main.cc -DLINUX_HOST -I.. -O3 -lGL -lGLU -lglut -o main 3 strip main 4 ./main
§ glut.h
Файл содержит данные о индексах 256-палитры и прототип класса для glut.cc1#ifndef LINUX_HOST 2#include <windows.h> 3#endif 4#include <GL/glut.h> 5 6static const int doscolor[256] = { 7 0x000000, 0x0000aa, 0x00aa00, 0x00aaaa, 0xaa0000, 0xaa00aa, 0xaa5500, 0xaaaaaa, // 0 8 0x555555, 0x5555ff, 0x55ff55, 0x55ffff, 0xff5555, 0xff55ff, 0xffff55, 0xffffff, // 8 9 0x000000, 0x141414, 0x202020, 0x2c2c2c, 0x383838, 0x454545, 0x515151, 0x616161, // 10 10 0x717171, 0x828282, 0x929292, 0xa2a2a2, 0xb6b6b6, 0xcbcbcb, 0xe3e3e3, 0xffffff, // 18 11 0x0000ff, 0x4100ff, 0x7d00ff, 0xbe00ff, 0xff00ff, 0xff00be, 0xff007d, 0xff0041, // 20 12 0xff0000, 0xff4100, 0xff7d00, 0xffbe00, 0xffff00, 0xbeff00, 0x7dff00, 0x41ff00, // 28 13 0x00ff00, 0x00ff41, 0x00ff7d, 0x00ffbe, 0x00ffff, 0x00beff, 0x007dff, 0x0041ff, // 30 14 0x7d7dff, 0x9e7dff, 0xbe7dff, 0xdf7dff, 0xff7dff, 0xff7ddf, 0xff7dbe, 0xff7d9e, // 38 15 0xff7d7d, 0xff9e7d, 0xffbe7d, 0xffdf7d, 0xffff7d, 0xdfff7d, 0xbeff7d, 0x9eff7d, // 40 16 0x7dff7d, 0x7dff9e, 0x7dffbe, 0x7dffdf, 0x7dffff, 0x7ddfff, 0x7dbeff, 0x7d9eff, // 48 17 0xb6b6ff, 0xc7b6ff, 0xdbb6ff, 0xebb6ff, 0xffb6ff, 0xffb6eb, 0xffb6db, 0xffb6c7, // 50 18 0xffb6b6, 0xffc7b6, 0xffdbb6, 0xffebb6, 0xffffb6, 0xebffb6, 0xdbffb6, 0xc7ffb6, // 58 19 0xb6ffb6, 0xb6ffc7, 0xb6ffdb, 0xb6ffeb, 0xb6ffff, 0xb6ebff, 0xb6dbff, 0xb6c7ff, // 60 20 0x000071, 0x1c0071, 0x380071, 0x550071, 0x710071, 0x710055, 0x710038, 0x71001c, // 68 21 0x710000, 0x711c00, 0x713800, 0x715500, 0x717100, 0x557100, 0x387100, 0x1c7100, // 70 22 0x007100, 0x00711c, 0x007138, 0x007155, 0x007171, 0x005571, 0x003871, 0x001c71, // 78 23 0x383871, 0x453871, 0x553871, 0x613871, 0x713871, 0x713861, 0x713855, 0x713845, // 80 24 0x713838, 0x714538, 0x715538, 0x716138, 0x717138, 0x617138, 0x557138, 0x457138, // 88 25 0x387138, 0x387145, 0x387155, 0x387161, 0x387171, 0x386171, 0x385571, 0x384571, // 90 26 0x515171, 0x595171, 0x615171, 0x695171, 0x715171, 0x715169, 0x715161, 0x715159, // 98 27 0x715151, 0x715951, 0x716151, 0x716951, 0x717151, 0x697151, 0x617151, 0x597151, // A0 28 0x517151, 0x517159, 0x517161, 0x517169, 0x517171, 0x516971, 0x516171, 0x515971, // A8 29 0x000041, 0x100041, 0x200041, 0x300041, 0x410041, 0x410030, 0x410020, 0x410010, // B0 30 0x410000, 0x411000, 0x412000, 0x413000, 0x414100, 0x304100, 0x204100, 0x104100, // B8 31 0x004100, 0x004110, 0x004120, 0x004130, 0x004141, 0x003041, 0x002041, 0x001041, // C0 32 0x202041, 0x282041, 0x302041, 0x382041, 0x412041, 0x412038, 0x412030, 0x412028, // C8 33 0x412020, 0x412820, 0x413020, 0x413820, 0x414120, 0x384120, 0x304120, 0x284120, // D0 34 0x204120, 0x204128, 0x204130, 0x204138, 0x204141, 0x203841, 0x203041, 0x202841, // D8 35 0x2c2c41, 0x302c41, 0x342c41, 0x3c2c41, 0x412c41, 0x412c3c, 0x412c34, 0x412c30, // E0 36 0x412c2c, 0x41302c, 0x41342c, 0x413c2c, 0x41412c, 0x3c412c, 0x34412c, 0x30412c, // E8 37 0x2c412c, 0x2c4130, 0x2c4134, 0x2c413c, 0x2c4141, 0x2c3c41, 0x2c3441, 0x2c3041, // F0 38 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000 // F8 39}; 40 41class glut { 42 43protected: 44 45 int width, height; 46 int factor; 47 unsigned char* membuf; 48 49public: 50 51 glut() { membuf = NULL; } 52 ~glut() { if (membuf) free(membuf); } 53 54 void init(const char* name, int w, int h, int f); 55 void init(int* argc, char** argv, const char* name, int w, int h, int f); 56 int doscl(int id); 57 void pset(int x, int y, unsigned int cl); 58 void update(); 59};
§ glut.cc
Этот файл лежит выше или в том же уровне вложенности в папке. Он является основным классом для обработки всего, что только можно обработать.1#include "glut.h" 2 3void glut::init(const char* name, int w, int h, int f) { 4 5 int argc = 0; 6 char* argv[1]; 7 init(&argc, argv, name, w, h, f); 8} 9 10void glut::init(int* argc, char** argv, const char* name, int w, int h, int f) { 11 12 width = w; 13 height = h; 14 factor = f; 15 16 glutInit(argc, argv); 17 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA); 18 glutInitWindowSize(width, height); 19 glutInitWindowPosition(0, 0); 20 glutCreateWindow(name); 21 glClearColor(0.0, 0.0, 0.0, 0.0); 22 23 glMatrixMode(GL_PROJECTION); 24 glLoadIdentity(); 25 gluOrtho2D(-1.0, 1.0, -1.0, 1.0); 26 27 membuf = (unsigned char*) malloc(width * height * 4); 28} 29 30// Получение DOS-цвета 31int glut::doscl(int id) { return doscolor[id & 255]; } 32 33// Нарисовать точку 34void glut::pset(int x, int y, unsigned int cl) { 35 36 x *= factor; 37 y *= factor; 38 39 if (x < 0 || y < 0 || x >= width || y >= height) 40 return; 41 42 for (int i = 0; i < factor; i++) 43 for (int j = 0; j < factor; j++) { 44 45 int cursor = (j+x + (height-1-i-y)*width)*4; 46 membuf[cursor++] = cl>>16; 47 membuf[cursor++] = cl>>8; 48 membuf[cursor++] = cl; 49 membuf[cursor++] = 255; 50 } 51} 52 53// Обновить экран 54void glut::update() { 55 56 glRasterPos2i(-1, -1); 57 glDrawPixels(width, height, GL_RGBA, GL_UNSIGNED_BYTE, membuf); 58 glutSwapBuffers(); 59}