blob: 6db552d195a55c36057f4e801bb0ff35857780b4 [file] [log] [blame]
Brian Paulafe4f5e2001-08-21 14:25:31 +00001
2/*
3 * A skeleton/template GLUT program
4 *
5 * Written by Brian Paul and in the public domain.
6 */
7
8
9/*
Brian Paulafe4f5e2001-08-21 14:25:31 +000010 * Revision 1.1 2001/08/21 14:25:31 brianp
11 * simple multi-window GLUT test prog
12 *
13 * Revision 1.1.1.1 1999/08/19 00:55:42 jtg
14 * Imported sources
15 *
16 * Revision 1.2 1998/11/07 14:20:14 brianp
17 * added simple rotation, animation of cube
18 *
19 * Revision 1.1 1998/11/07 14:14:37 brianp
20 * Initial revision
21 *
22 */
23
24
25#include <stdio.h>
26#include <stdlib.h>
27#include <math.h>
Keith Whitwella58065d2009-03-10 13:11:23 +000028#include <GL/glew.h>
Brian Paulafe4f5e2001-08-21 14:25:31 +000029#include <GL/glut.h>
30
31
32static GLint Window[2];
33
34static GLfloat Xrot = 0, Yrot = 0, Zrot = 0;
35static GLboolean Anim = GL_TRUE;
36
37
38static void Idle( void )
39{
40 Xrot += 3.0;
41 Yrot += 4.0;
42 Zrot += 2.0;
43
44 glutSetWindow(Window[0]);
45 glutPostRedisplay();
46 glutSetWindow(Window[1]);
47 glutPostRedisplay();
48}
49
50
51static void Display0( void )
52{
53 glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
54
55 glEnable(GL_LIGHTING);
56 glEnable(GL_LIGHT0);
57 glEnable(GL_DEPTH_TEST);
58
59 glPushMatrix();
60 glRotatef(Xrot, 1, 0, 0);
61 glRotatef(Yrot, 0, 1, 0);
62 glRotatef(Zrot, 0, 0, 1);
63
64 glColor3f(0, 1, 0);
65 glutSolidCube(2.0);
66
67 glPopMatrix();
68
69 glutSwapBuffers();
70}
71
72
73static void Display1( void )
74{
75 glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
76
77 glPushMatrix();
78 glRotatef(Xrot, 1, 0, 0);
79 glRotatef(Yrot, 0, 1, 0);
80 glRotatef(Zrot, 0, 0, 1);
81
82 glShadeModel(GL_FLAT);
83
84 glBegin(GL_TRIANGLE_STRIP);
85 glColor3f(1, 0, 0);
86 glVertex2f(-1, -1);
87 glVertex2f( 1, -1);
88 glColor3f(1, 0, 0);
89 glVertex2f( -1, 1);
90 glColor3f(0, 0, 1);
91 glVertex2f( 1, 1);
92 glEnd();
93
94 glPopMatrix();
95
96 glutSwapBuffers();
97}
98
99
100static void Reshape( int width, int height )
101{
102 glViewport( 0, 0, width, height );
103 glMatrixMode( GL_PROJECTION );
104 glLoadIdentity();
105 glFrustum( -1.0, 1.0, -1.0, 1.0, 5.0, 25.0 );
106 glMatrixMode( GL_MODELVIEW );
107 glLoadIdentity();
108 glTranslatef( 0.0, 0.0, -15.0 );
109}
110
111
112static void Key( unsigned char key, int x, int y )
113{
114 const GLfloat step = 3.0;
115 (void) x;
116 (void) y;
117 switch (key) {
118 case 'a':
119 Anim = !Anim;
120 if (Anim)
121 glutIdleFunc(Idle);
122 else
123 glutIdleFunc(NULL);
124 break;
125 case 'z':
126 Zrot -= step;
127 break;
128 case 'Z':
129 Zrot += step;
130 break;
131 case 27:
132 exit(0);
133 break;
134 }
135 glutPostRedisplay();
136}
137
138
139
140
141int main( int argc, char *argv[] )
142{
143 glutInit( &argc, argv );
144
145 glutInitWindowPosition( 0, 0 );
146 glutInitWindowSize( 400, 400 );
147 glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH );
148 Window[0] = glutCreateWindow(argv[0]);
Keith Whitwella58065d2009-03-10 13:11:23 +0000149 glewInit();
Brian Paulafe4f5e2001-08-21 14:25:31 +0000150 glutReshapeFunc( Reshape );
151 glutKeyboardFunc( Key );
152 glutDisplayFunc( Display0 );
153 glutIdleFunc(Idle);
154 printf("GL_RENDERER[0] = %s\n", (char *) glGetString(GL_RENDERER));
155
156 glutInitWindowPosition( 500, 0 );
157 glutInitWindowSize( 400, 400 );
158 glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH );
159 Window[1] = glutCreateWindow(argv[0]);
Keith Whitwella58065d2009-03-10 13:11:23 +0000160 glewInit();
Brian Paulafe4f5e2001-08-21 14:25:31 +0000161 glutReshapeFunc( Reshape );
162 glutKeyboardFunc( Key );
163 glutDisplayFunc( Display1 );
164 glutIdleFunc(Idle);
165 printf("GL_RENDERER[1] = %s\n", (char *) glGetString(GL_RENDERER));
166
167 glutMainLoop();
168
169 return 0;
170}