blob: 61dd860ddbe29ce92407e02b6432b393da8c81a7 [file] [log] [blame]
jtgafb833d1999-08-19 00:55:39 +00001
2/*
3 * Test GL_EXT_rescale_normal extension
4 * Brian Paul January 1998 This program is in the public domain.
5 */
6
jtgafb833d1999-08-19 00:55:39 +00007#include <stdio.h>
8#include <stdlib.h>
9#include <math.h>
10#include <GL/glut.h>
11
12
13static GLfloat Phi = 0.0;
14
15
Brian Paul92eddb02005-01-09 17:37:50 +000016static void Idle( void )
jtgafb833d1999-08-19 00:55:39 +000017{
Brian Paul92eddb02005-01-09 17:37:50 +000018 static double t0 = -1.;
19 double dt, t = glutGet(GLUT_ELAPSED_TIME) / 1000.0;
20 if (t0 < 0.0)
21 t0 = t;
22 dt = t - t0;
23 t0 = t;
24 Phi += 3.0 * dt;
jtgafb833d1999-08-19 00:55:39 +000025 glutPostRedisplay();
26}
27
28
29static void Display( void )
30{
31 GLfloat scale = 0.6 + 0.5 * sin(Phi);
32 glClear( GL_COLOR_BUFFER_BIT );
33 glPushMatrix();
34 glScalef(scale, scale, scale);
35 glutSolidSphere(2.0, 20, 20);
36 glPopMatrix();
37 glutSwapBuffers();
38}
39
40
41static void Reshape( int width, int height )
42{
43 glViewport( 0, 0, width, height );
44 glMatrixMode( GL_PROJECTION );
45 glLoadIdentity();
46 glFrustum( -1.0, 1.0, -1.0, 1.0, 5.0, 25.0 );
47 glMatrixMode( GL_MODELVIEW );
48 glLoadIdentity();
49 glTranslatef( 0.0, 0.0, -15.0 );
50}
51
52
53
54static void Init( void )
55{
56 static GLfloat mat[4] = { 0.8, 0.8, 0.0, 1.0 };
57 static GLfloat pos[4] = { -1.0, 1.0, 1.0, 0.0 };
58
59 /* setup lighting, etc */
60 glEnable(GL_LIGHTING);
61 glEnable(GL_LIGHT0);
62 glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, mat);
63 glLightfv(GL_LIGHT0, GL_POSITION, pos);
64
65 glEnable(GL_CULL_FACE);
66
67 glDisable(GL_RESCALE_NORMAL_EXT);
68 glDisable(GL_NORMALIZE);
69}
70
71
72#define UNSCALED 1
73#define NORMALIZE 2
74#define RESCALE 3
75#define QUIT 4
76
77
78static void ModeMenu(int entry)
79{
80 if (entry==UNSCALED) {
81 glDisable(GL_RESCALE_NORMAL_EXT);
82 glDisable(GL_NORMALIZE);
83 }
84 else if (entry==NORMALIZE) {
85 glEnable(GL_NORMALIZE);
86 glDisable(GL_RESCALE_NORMAL_EXT);
87 }
88 else if (entry==RESCALE) {
89 glDisable(GL_NORMALIZE);
90 glEnable(GL_RESCALE_NORMAL_EXT);
91 }
92 else if (entry==QUIT) {
93 exit(0);
94 }
95 glutPostRedisplay();
96}
97
Ted Jump83c02ef1999-09-17 02:40:51 +000098static void
99key(unsigned char k, int x, int y)
100{
Brian Paulecaf1a01999-09-17 12:27:01 +0000101 (void) x;
102 (void) y;
Ted Jump83c02ef1999-09-17 02:40:51 +0000103 switch (k) {
104 case 27: /* Escape */
105 exit(0);
106 break;
107 default:
108 return;
109 }
110 glutPostRedisplay();
111}
jtgafb833d1999-08-19 00:55:39 +0000112
113int main( int argc, char *argv[] )
114{
jtgafb833d1999-08-19 00:55:39 +0000115 glutInitWindowSize( 400, 400 );
Brian Paul263f4322009-12-18 08:12:55 -0700116 glutInit( &argc, argv );
jtgafb833d1999-08-19 00:55:39 +0000117 glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE );
jtgafb833d1999-08-19 00:55:39 +0000118 glutCreateWindow(argv[0]);
119
120 Init();
121
122 glutIdleFunc( Idle );
123 glutReshapeFunc( Reshape );
124 glutDisplayFunc( Display );
Ted Jump83c02ef1999-09-17 02:40:51 +0000125 glutKeyboardFunc(key);
jtgafb833d1999-08-19 00:55:39 +0000126
127 glutCreateMenu(ModeMenu);
128 glutAddMenuEntry("Unscaled", UNSCALED);
129 glutAddMenuEntry("Normalize", NORMALIZE);
130 glutAddMenuEntry("Rescale EXT", RESCALE);
131 glutAddMenuEntry("Quit", QUIT);
132 glutAttachMenu(GLUT_RIGHT_BUTTON);
133
134 glutMainLoop();
135 return 0;
136}