Modified to use vertex arrays. Vertex arrays and immediate mode calls
authorIan Romanick <idr@us.ibm.com>
Wed, 5 May 2004 20:17:19 +0000 (20:17 +0000)
committerIan Romanick <idr@us.ibm.com>
Wed, 5 May 2004 20:17:19 +0000 (20:17 +0000)
are toggled with the 't' key.

progs/demos/cubemap.c

index 4b97efbbd22828921f9750d380eba916d52ade0b..53605cdfa4ff05ae78f227b87d420743d0b4c604 100644 (file)
 
 static GLfloat Xrot = 0, Yrot = 0;
 static GLfloat EyeDist = 10;
+static GLboolean use_vertex_arrays = GL_FALSE;
 
+#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();
+   }
 }
 
 
@@ -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)