1 2/* 3 * A skeleton/template GLUT program 4 * 5 * Written by Brian Paul and in the public domain. 6 */ 7 8 9/* 10 * 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> 28#include <GL/glew.h> 29#include "glut_wrap.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]); 149 glewInit(); 150 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]); 160 glewInit(); 161 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} 171