Fix broken test.
[mesa.git] / progs / demos / cubemap.c
index 4b97efbbd22828921f9750d380eba916d52ade0b..ef5d23555096b6b00add0c23015e1fc63f38ca87 100644 (file)
 #include <stdlib.h>
 #include <string.h>
 #include "GL/glut.h"
-#include "../util/readtex.c" /* a hack */
+#include "readtex.h"
 
 
 static GLfloat Xrot = 0, Yrot = 0;
 static GLfloat EyeDist = 10;
+static GLboolean use_vertex_arrays = GL_FALSE;
+static GLboolean anim = GL_TRUE;
 
+#define eps1 0.99
+#define br   20.0  /* box radius */
 
-static void draw_skybox( void )
-{
-   const GLfloat eps1 = 0.99;
-   const GLfloat br = 20.0; /* box radius */
+static const GLfloat tex_coords[] = {
+   /* +X side */
+   1.0, -eps1, -eps1,
+   1.0, -eps1,  eps1,
+   1.0,  eps1,  eps1,
+   1.0,  eps1, -eps1,
+
+   /* -X side */
+   -1.0,  eps1, -eps1,
+   -1.0,  eps1,  eps1,
+   -1.0, -eps1,  eps1,
+   -1.0, -eps1, -eps1,
+
+   /* +Y side */
+   -eps1, 1.0, -eps1,
+   -eps1, 1.0,  eps1,
+    eps1, 1.0,  eps1,
+    eps1, 1.0, -eps1,
+
+   /* -Y side */
+   -eps1, -1.0, -eps1,
+   -eps1, -1.0,  eps1,
+    eps1, -1.0,  eps1,
+    eps1, -1.0, -eps1,
 
-   glBegin(GL_QUADS);
+   /* +Z side */
+    eps1, -eps1, 1.0,
+   -eps1, -eps1, 1.0,
+   -eps1,  eps1, 1.0,
+    eps1,  eps1, 1.0,
+
+   /* -Z side */
+    eps1,  eps1, -1.0,
+   -eps1,  eps1, -1.0,
+   -eps1, -eps1, -1.0,
+    eps1, -eps1, -1.0,
+};
 
+static const GLfloat vtx_coords[] = {
    /* +X side */
-   glTexCoord3f(1.0, -eps1, -eps1);  glVertex3f(br, -br, -br);
-   glTexCoord3f(1.0, -eps1,  eps1);  glVertex3f(br, -br,  br);
-   glTexCoord3f(1.0,  eps1,  eps1);  glVertex3f(br,  br,  br);
-   glTexCoord3f(1.0,  eps1, -eps1);  glVertex3f(br,  br, -br);
+   br, -br, -br,
+   br, -br,  br,
+   br,  br,  br,
+   br,  br, -br,
 
    /* -X side */
-   glTexCoord3f(-1.0,  eps1, -eps1);  glVertex3f(-br,  br, -br);
-   glTexCoord3f(-1.0,  eps1,  eps1);  glVertex3f(-br,  br,  br);
-   glTexCoord3f(-1.0, -eps1,  eps1);  glVertex3f(-br, -br,  br);
-   glTexCoord3f(-1.0, -eps1, -eps1);  glVertex3f(-br, -br, -br);
+   -br,  br, -br,
+   -br,  br,  br,
+   -br, -br,  br,
+   -br, -br, -br,
 
    /* +Y side */
-   glTexCoord3f(-eps1, 1.0, -eps1);  glVertex3f(-br,  br, -br);
-   glTexCoord3f(-eps1, 1.0,  eps1);  glVertex3f(-br,  br,  br);
-   glTexCoord3f( eps1, 1.0,  eps1);  glVertex3f( br,  br,  br);
-   glTexCoord3f( eps1, 1.0, -eps1);  glVertex3f( br,  br, -br);
+   -br,  br, -br,
+   -br,  br,  br,
+    br,  br,  br,
+    br,  br, -br,
 
    /* -Y side */
-   glTexCoord3f(-eps1, -1.0, -eps1);  glVertex3f(-br, -br, -br);
-   glTexCoord3f(-eps1, -1.0,  eps1);  glVertex3f(-br, -br,  br);
-   glTexCoord3f( eps1, -1.0,  eps1);  glVertex3f( br, -br,  br);
-   glTexCoord3f( eps1, -1.0, -eps1);  glVertex3f( br, -br, -br);
+   -br, -br, -br,
+   -br, -br,  br,
+    br, -br,  br,
+    br, -br, -br,
 
    /* +Z side */
-   glTexCoord3f( eps1, -eps1, 1.0);  glVertex3f( br, -br, br);
-   glTexCoord3f(-eps1, -eps1, 1.0);  glVertex3f(-br, -br, br);
-   glTexCoord3f(-eps1,  eps1, 1.0);  glVertex3f(-br,  br, br);
-   glTexCoord3f( eps1,  eps1, 1.0);  glVertex3f( br,  br, br);
+    br, -br, br,
+   -br, -br, br,
+   -br,  br, br,
+    br,  br, br,
 
    /* -Z side */
-   glTexCoord3f( eps1,  eps1, -1.0);  glVertex3f( br,  br, -br);
-   glTexCoord3f(-eps1,  eps1, -1.0);  glVertex3f(-br,  br, -br);
-   glTexCoord3f(-eps1, -eps1, -1.0);  glVertex3f(-br, -br, -br);
-   glTexCoord3f( eps1, -eps1, -1.0);  glVertex3f( br, -br, -br);
+    br,  br, -br,
+   -br,  br, -br,
+   -br, -br, -br,
+    br, -br, -br,
+};
 
-   glEnd();
+static void draw_skybox( void )
+{
+   if ( use_vertex_arrays ) {
+      glTexCoordPointer( 3, GL_FLOAT, 0, tex_coords );
+      glVertexPointer(   3, GL_FLOAT, 0, vtx_coords );
+
+      glEnableClientState( GL_TEXTURE_COORD_ARRAY );
+      glEnableClientState( GL_VERTEX_ARRAY );
+
+      glDrawArrays( GL_QUADS, 0, 24 );
+
+      glDisableClientState( GL_TEXTURE_COORD_ARRAY );
+      glDisableClientState( GL_VERTEX_ARRAY );
+   }
+   else {
+      unsigned   i;
+
+      glBegin(GL_QUADS);
+      for ( i = 0 ; i < 24 ; i++ ) {
+        glTexCoord3fv( & tex_coords[ i * 3 ] );
+        glVertex3fv  ( & vtx_coords[ i * 3 ] );
+      }
+      glEnd();
+   }
 }
 
 
@@ -160,7 +220,6 @@ static void set_mode(GLuint mode)
 
 static void key(unsigned char k, int x, int y)
 {
-   static GLboolean anim = GL_TRUE;
    static GLuint mode = 0;
    (void) x;
    (void) y;
@@ -176,6 +235,11 @@ static void key(unsigned char k, int x, int y)
          mode = !mode;
          set_mode(mode);
          break;
+      case 'v':
+         use_vertex_arrays = ! use_vertex_arrays;
+         printf( "Vertex arrays are %sabled\n",
+                (use_vertex_arrays) ? "en" : "dis" );
+         break;
       case 'z':
          EyeDist -= 0.5;
          if (EyeDist < 6.0)
@@ -390,6 +454,7 @@ static void usage(void)
 
 int main( int argc, char *argv[] )
 {
+   glutInit(&argc, argv);
    glutInitWindowPosition(0, 0);
    glutInitWindowSize(600, 500);
    glutInitDisplayMode( GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE );
@@ -402,8 +467,9 @@ int main( int argc, char *argv[] )
    glutReshapeFunc( reshape );
    glutKeyboardFunc( key );
    glutSpecialFunc( specialkey );
-   glutIdleFunc( idle );
    glutDisplayFunc( draw );
+   if (anim)
+      glutIdleFunc(idle);
    usage();
    glutMainLoop();
    return 0;