132001f49Smrg 232001f49Smrg/* 332001f49Smrg * A skeleton/template GLUT program 432001f49Smrg * 532001f49Smrg * Written by Brian Paul and in the public domain. 632001f49Smrg */ 732001f49Smrg 832001f49Smrg 932001f49Smrg/* 1032001f49Smrg * Revision 1.1 2001/08/21 14:25:31 brianp 1132001f49Smrg * simple multi-window GLUT test prog 1232001f49Smrg * 1332001f49Smrg * Revision 1.1.1.1 1999/08/19 00:55:42 jtg 1432001f49Smrg * Imported sources 1532001f49Smrg * 1632001f49Smrg * Revision 1.2 1998/11/07 14:20:14 brianp 1732001f49Smrg * added simple rotation, animation of cube 1832001f49Smrg * 1932001f49Smrg * Revision 1.1 1998/11/07 14:14:37 brianp 2032001f49Smrg * Initial revision 2132001f49Smrg * 2232001f49Smrg */ 2332001f49Smrg 2432001f49Smrg 2532001f49Smrg#include <stdio.h> 2632001f49Smrg#include <stdlib.h> 2732001f49Smrg#include <math.h> 2832001f49Smrg#include <GL/glew.h> 2932001f49Smrg#include "glut_wrap.h" 3032001f49Smrg 3132001f49Smrg 3232001f49Smrgstatic GLint Window[2]; 3332001f49Smrg 3432001f49Smrgstatic GLfloat Xrot = 0, Yrot = 0, Zrot = 0; 3532001f49Smrgstatic GLboolean Anim = GL_TRUE; 3632001f49Smrg 3732001f49Smrg 3832001f49Smrgstatic void Idle( void ) 3932001f49Smrg{ 4032001f49Smrg Xrot += 3.0; 4132001f49Smrg Yrot += 4.0; 4232001f49Smrg Zrot += 2.0; 4332001f49Smrg 4432001f49Smrg glutSetWindow(Window[0]); 4532001f49Smrg glutPostRedisplay(); 4632001f49Smrg glutSetWindow(Window[1]); 4732001f49Smrg glutPostRedisplay(); 4832001f49Smrg} 4932001f49Smrg 5032001f49Smrg 5132001f49Smrgstatic void Display0( void ) 5232001f49Smrg{ 5332001f49Smrg glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); 5432001f49Smrg 5532001f49Smrg glEnable(GL_LIGHTING); 5632001f49Smrg glEnable(GL_LIGHT0); 5732001f49Smrg glEnable(GL_DEPTH_TEST); 5832001f49Smrg 5932001f49Smrg glPushMatrix(); 6032001f49Smrg glRotatef(Xrot, 1, 0, 0); 6132001f49Smrg glRotatef(Yrot, 0, 1, 0); 6232001f49Smrg glRotatef(Zrot, 0, 0, 1); 6332001f49Smrg 6432001f49Smrg glColor3f(0, 1, 0); 6532001f49Smrg glutSolidCube(2.0); 6632001f49Smrg 6732001f49Smrg glPopMatrix(); 6832001f49Smrg 6932001f49Smrg glutSwapBuffers(); 7032001f49Smrg} 7132001f49Smrg 7232001f49Smrg 7332001f49Smrgstatic void Display1( void ) 7432001f49Smrg{ 7532001f49Smrg glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); 7632001f49Smrg 7732001f49Smrg glPushMatrix(); 7832001f49Smrg glRotatef(Xrot, 1, 0, 0); 7932001f49Smrg glRotatef(Yrot, 0, 1, 0); 8032001f49Smrg glRotatef(Zrot, 0, 0, 1); 8132001f49Smrg 8232001f49Smrg glShadeModel(GL_FLAT); 8332001f49Smrg 8432001f49Smrg glBegin(GL_TRIANGLE_STRIP); 8532001f49Smrg glColor3f(1, 0, 0); 8632001f49Smrg glVertex2f(-1, -1); 8732001f49Smrg glVertex2f( 1, -1); 8832001f49Smrg glColor3f(1, 0, 0); 8932001f49Smrg glVertex2f( -1, 1); 9032001f49Smrg glColor3f(0, 0, 1); 9132001f49Smrg glVertex2f( 1, 1); 9232001f49Smrg glEnd(); 9332001f49Smrg 9432001f49Smrg glPopMatrix(); 9532001f49Smrg 9632001f49Smrg glutSwapBuffers(); 9732001f49Smrg} 9832001f49Smrg 9932001f49Smrg 10032001f49Smrgstatic void Reshape( int width, int height ) 10132001f49Smrg{ 10232001f49Smrg glViewport( 0, 0, width, height ); 10332001f49Smrg glMatrixMode( GL_PROJECTION ); 10432001f49Smrg glLoadIdentity(); 10532001f49Smrg glFrustum( -1.0, 1.0, -1.0, 1.0, 5.0, 25.0 ); 10632001f49Smrg glMatrixMode( GL_MODELVIEW ); 10732001f49Smrg glLoadIdentity(); 10832001f49Smrg glTranslatef( 0.0, 0.0, -15.0 ); 10932001f49Smrg} 11032001f49Smrg 11132001f49Smrg 11232001f49Smrgstatic void Key( unsigned char key, int x, int y ) 11332001f49Smrg{ 11432001f49Smrg const GLfloat step = 3.0; 11532001f49Smrg (void) x; 11632001f49Smrg (void) y; 11732001f49Smrg switch (key) { 11832001f49Smrg case 'a': 11932001f49Smrg Anim = !Anim; 12032001f49Smrg if (Anim) 12132001f49Smrg glutIdleFunc(Idle); 12232001f49Smrg else 12332001f49Smrg glutIdleFunc(NULL); 12432001f49Smrg break; 12532001f49Smrg case 'z': 12632001f49Smrg Zrot -= step; 12732001f49Smrg break; 12832001f49Smrg case 'Z': 12932001f49Smrg Zrot += step; 13032001f49Smrg break; 13132001f49Smrg case 27: 13232001f49Smrg exit(0); 13332001f49Smrg break; 13432001f49Smrg } 13532001f49Smrg glutPostRedisplay(); 13632001f49Smrg} 13732001f49Smrg 13832001f49Smrg 13932001f49Smrg 14032001f49Smrg 14132001f49Smrgint main( int argc, char *argv[] ) 14232001f49Smrg{ 14332001f49Smrg glutInit( &argc, argv ); 14432001f49Smrg 14532001f49Smrg glutInitWindowPosition( 0, 0 ); 14632001f49Smrg glutInitWindowSize( 400, 400 ); 14732001f49Smrg glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH ); 14832001f49Smrg Window[0] = glutCreateWindow(argv[0]); 14932001f49Smrg glewInit(); 15032001f49Smrg glutReshapeFunc( Reshape ); 15132001f49Smrg glutKeyboardFunc( Key ); 15232001f49Smrg glutDisplayFunc( Display0 ); 15332001f49Smrg glutIdleFunc(Idle); 15432001f49Smrg printf("GL_RENDERER[0] = %s\n", (char *) glGetString(GL_RENDERER)); 15532001f49Smrg 15632001f49Smrg glutInitWindowPosition( 500, 0 ); 15732001f49Smrg glutInitWindowSize( 400, 400 ); 15832001f49Smrg glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH ); 15932001f49Smrg Window[1] = glutCreateWindow(argv[0]); 16032001f49Smrg glewInit(); 16132001f49Smrg glutReshapeFunc( Reshape ); 16232001f49Smrg glutKeyboardFunc( Key ); 16332001f49Smrg glutDisplayFunc( Display1 ); 16432001f49Smrg glutIdleFunc(Idle); 16532001f49Smrg printf("GL_RENDERER[1] = %s\n", (char *) glGetString(GL_RENDERER)); 16632001f49Smrg 16732001f49Smrg glutMainLoop(); 16832001f49Smrg 16932001f49Smrg return 0; 17032001f49Smrg} 171