Update git ignores.
[mesa.git] / progs / trivial / flat-clip.c
1 /**
2 * Test flat shading and clipping.
3 *
4 * Brian Paul
5 * 30 August 2007
6 */
7
8
9 #include <stdio.h>
10 #include <stdlib.h>
11 #include <math.h>
12 #include <GL/glut.h>
13
14 static int Win;
15 static GLfloat Scale = 2.0, Zrot = 50;
16 static GLenum Mode = GL_LINE_LOOP;
17 static GLboolean Smooth = 0;
18 static GLenum PolygonMode = GL_FILL;
19
20
21 static void
22 Draw(void)
23 {
24 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
25
26 if (Smooth)
27 glShadeModel(GL_SMOOTH);
28 else
29 glShadeModel(GL_FLAT);
30
31 glPushMatrix();
32 glScalef(Scale, Scale, 1);
33 glRotatef(Zrot, 0, 0, 1);
34
35 glPolygonMode(GL_FRONT_AND_BACK, PolygonMode);
36
37 glBegin(Mode);
38 glColor3f(1, 0, 0);
39 glVertex2f(-1, -1);
40 glColor3f(0, 1, 0);
41 glVertex2f( 2, -1);
42 glColor3f(0, 0, 1);
43 glVertex2f( 0, 1);
44 glEnd();
45
46 glPushMatrix();
47 glScalef(0.9, 0.9, 1);
48 glBegin(Mode);
49 glColor3f(1, 0, 0);
50 glVertex2f( 0, 1);
51
52 glColor3f(0, 0, 1);
53 glVertex2f( 2, -1);
54
55 glColor3f(0, 1, 0);
56 glVertex2f(-1, -1);
57
58 glEnd();
59 glPopMatrix();
60
61 glPopMatrix();
62
63 glutSwapBuffers();
64 }
65
66
67 static void
68 Reshape(int width, int height)
69 {
70 glViewport(0, 0, width, height);
71 glMatrixMode(GL_PROJECTION);
72 glLoadIdentity();
73 glFrustum(-1.0, 1.0, -1.0, 1.0, 5.0, 25.0);
74 glMatrixMode(GL_MODELVIEW);
75 glLoadIdentity();
76 glTranslatef(0.0, 0.0, -15.0);
77 }
78
79
80 static void
81 Key(unsigned char key, int x, int y)
82 {
83 (void) x;
84 (void) y;
85 switch (key) {
86 case 'p':
87 if (Mode == GL_TRIANGLES)
88 Mode = GL_LINE_LOOP;
89 else
90 Mode = GL_TRIANGLES;
91 break;
92 case 'f':
93 if (PolygonMode == GL_POINT)
94 PolygonMode = GL_LINE;
95 else if (PolygonMode == GL_LINE)
96 PolygonMode = GL_FILL;
97 else
98 PolygonMode = GL_POINT;
99 printf("PolygonMode = 0x%x\n", PolygonMode);
100 break;
101 case 'r':
102 Zrot -= 5.0;
103 break;
104 case 'R':
105 Zrot += 5.0;
106 break;
107 case 'z':
108 Scale *= 1.1;
109 break;
110 case 'Z':
111 Scale /= 1.1;
112 break;
113 case 's':
114 Smooth = !Smooth;
115 break;
116 case 27:
117 glutDestroyWindow(Win);
118 exit(0);
119 break;
120 }
121 glutPostRedisplay();
122 }
123
124
125 static void
126 Init(void)
127 {
128 printf("Usage:\n");
129 printf(" z/Z: change triangle size\n");
130 printf(" r/R: rotate\n");
131 printf(" p: toggle line/fill mode\n");
132 printf(" s: toggle smooth/flat shading\n");
133 printf(" f: switch polygon fill mode\n");
134 }
135
136
137 int
138 main(int argc, char *argv[])
139 {
140 glutInit(&argc, argv);
141 glutInitWindowPosition(0, 0);
142 glutInitWindowSize(400, 400);
143 glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
144 Win = glutCreateWindow(argv[0]);
145 glutReshapeFunc(Reshape);
146 glutKeyboardFunc(Key);
147 glutDisplayFunc(Draw);
148 Init();
149 glutMainLoop();
150 return 0;
151 }