1 /*
2  * Draw a triangle with rotation
3  */
4 
5 #include <stdio.h>
6 #include <stdlib.h>
7 #include "glut_wrap.h"
8 
9 
10 static int win;
11 static float rot = 0.0f;
12 
13 
14 static void
Reshape(int width,int height)15 Reshape(int width, int height)
16 {
17    glViewport(0, 0, width, height);
18 
19    glMatrixMode(GL_PROJECTION);
20    glLoadIdentity();
21    glMatrixMode(GL_MODELVIEW);
22    glLoadIdentity();
23 }
24 
25 
26 static void
Key(unsigned char key,int x,int y)27 Key(unsigned char key, int x, int y)
28 {
29    if (key == 27) {
30       glutDestroyWindow(win);
31       exit(0);
32    }
33    else if (key == 'r') {
34       rot += 5.0f;
35       glutPostRedisplay();
36    }
37    else if (key == 'R') {
38       rot -= 5.0f;
39       glutPostRedisplay();
40    }
41 }
42 
43 
44 static void
Draw(void)45 Draw(void)
46 {
47    glClear(GL_COLOR_BUFFER_BIT);
48 
49    glPushMatrix();
50    glRotatef(rot, 0.0, 0.0, 1.0f);
51 
52    glBegin(GL_TRIANGLES);
53    glColor3f(1.0f, 0.0f, 0.0f);
54    glVertex3f(-0.8f, -0.8f, 0.0f);
55    glColor3f(0.0f, 1.0f, 0.0f);
56    glVertex3f(0.8f, -0.8f, 0.0f);
57    glColor3f(0.0f, 0.0f, 1.0f);
58    glVertex3f(0.0f, 0.8f, 0.0f);
59    glEnd();
60 
61    glPopMatrix();
62 
63    glutSwapBuffers();
64 }
65 
66 
67 static void
Init(void)68 Init(void)
69 {
70    fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER));
71    fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION));
72    fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR));
73    fflush(stderr);
74 
75    glClearColor(0.3, 0.3, 0.7, 0.0);
76 }
77 
78 
79 int
main(int argc,char ** argv)80 main(int argc, char **argv)
81 {
82    glutInit(&argc, argv);
83 
84    if (argc > 1) {
85       rot = atof(argv[1]);
86       printf("Using rotation %g\n", rot);
87       fflush(stdout);
88    }
89 
90    glutInitWindowPosition(0, 0);
91    glutInitWindowSize(250, 250);
92 
93    glutInitDisplayMode(GLUT_RGB | GLUT_ALPHA | GLUT_DOUBLE);
94 
95    win = glutCreateWindow(*argv);
96    if (!win) {
97       exit(1);
98    }
99 
100    Init();
101 
102    glutReshapeFunc(Reshape);
103    glutKeyboardFunc(Key);
104    glutDisplayFunc(Draw);
105    glutMainLoop();
106    return 0;
107 }
108