X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=censuslogo;a=blobdiff_plain;f=src%2Fmain.c;fp=src%2Fmain.c;h=0807e5d78c199cdc9637ed119c10d5b1f5a2c430;hp=125c2db1cda75cc8025cdc3f4d0f602318c9124a;hb=6924537e1555c26ab714ca6eda4960a3ca1bd520;hpb=0dd87713321a351d6f14167c35ff6e3afcfe8ac4 diff --git a/src/main.c b/src/main.c index 125c2db..0807e5d 100644 --- a/src/main.c +++ b/src/main.c @@ -1,32 +1,57 @@ #include #include +#include #include #include #include #include "logo.h" +#ifndef GL_MULTISAMPLE +#define GL_MULTISAMPLE 0x809d +#endif + #define MSAA int init(void); void display(void); +void idle(void); void reshape(int x, int y); void keyb(unsigned char key, int x, int y); +int parse_args(int argc, char **argv); +void print_usage(const char *argv0); +int win_width, win_height; int nverts = 256; +long start_time; +int msaa = 1; +int fullscr = 0; + int main(int argc, char **argv) { unsigned int flags = GLUT_RGB | GLUT_DOUBLE; + + glutInit(&argc, argv); + if(parse_args(argc, argv) == -1) { + return 1; + } + #ifdef MSAA - flags |= GLUT_MULTISAMPLE; + if(msaa) { + flags |= GLUT_MULTISAMPLE; + } #endif - glutInit(&argc, argv); - glutInitWindowSize(800, 600); + glutInitWindowSize(1280, 800); glutInitDisplayMode(flags); glutCreateWindow("census"); + if(fullscr) { + glutFullScreen(); + } + glutDisplayFunc(display); + glutIdleFunc(idle); glutReshapeFunc(reshape); glutKeyboardFunc(keyb); @@ -45,9 +70,12 @@ int init(void) } #ifdef MSAA - glEnable(GL_MULTISAMPLE); + if(msaa) { + glEnable(GL_MULTISAMPLE); + } #endif + start_time = glutGet(GLUT_ELAPSED_TIME); return 0; } @@ -86,15 +114,24 @@ static void draw_line(float x0, float y0, float x1, float y1, float rad) glEnd(); } +#define LOOPTIME 1.3f + void display(void) { int i; - float a[2], b[2], dt = 1.0f / (float)(nverts - 1); + long msec = glutGet(GLUT_ELAPSED_TIME) - start_time; + float t = (float)msec / 1000.0f; + float a[2], b[2], dt; + float anim; glClear(GL_COLOR_BUFFER_BIT); glLineWidth(5.0); + anim = fmod(t / 6.0f, LOOPTIME); + + dt = (anim > 1.0f ? 1.0f : anim) / (float)(nverts - 1); + glColor3f(1, 1, 1); for(i=0; i 0.0f) { + eval_logo(a, 0); + draw_disc(a[0], a[1], 0.05, 18); + } + if(anim >= 1.0f) { + eval_logo(b, 1); + draw_disc(b[0], b[1], 0.05, 18); + } + + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glColor3f(0.8, 0, 0); + glColor4f(0.8, 0, 0, 2.0 * (anim - 1.0f) / (LOOPTIME - 1.0f)); draw_disc(0, 0, 0.14, 24); + glDisable(GL_BLEND); + glutSwapBuffers(); assert(glGetError() == GL_NO_ERROR); } +void idle(void) +{ + glutPostRedisplay(); +} + void reshape(int x, int y) { float aspect = (float)x / (float)y; + win_width = x; + win_height = y; glViewport(0, 0, x, y); glMatrixMode(GL_PROJECTION); @@ -128,6 +181,8 @@ void reshape(int x, int y) void keyb(unsigned char key, int x, int y) { + static int saved_width = 800, saved_height = 600; + switch(key) { case 27: exit(0); @@ -143,5 +198,50 @@ void keyb(unsigned char key, int x, int y) printf("nverts: %d\n", nverts); glutPostRedisplay(); break; + + case 'f': + fullscr = !fullscr; + if(fullscr) { + saved_width = win_width; + saved_height = win_height; + glutFullScreen(); + } else { + glutReshapeWindow(saved_width, saved_height); + } + break; + } +} + +int parse_args(int argc, char **argv) +{ + int i; + + for(i=1; i