Modified to use vertex arrays. Vertex arrays and immediate mode calls

are toggled with the 't' key.
This commit is contained in:
Ian Romanick 2004-05-05 20:17:19 +00:00
parent 95a0bd6762
commit cd6ca58c3f
1 changed files with 102 additions and 38 deletions

View File

@ -45,52 +45,111 @@
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 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,
/* +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 */
br, -br, -br,
br, -br, br,
br, br, br,
br, br, -br,
/* -X side */
-br, br, -br,
-br, br, br,
-br, -br, br,
-br, -br, -br,
/* +Y side */
-br, br, -br,
-br, br, br,
br, br, br,
br, br, -br,
/* -Y side */
-br, -br, -br,
-br, -br, br,
br, -br, br,
br, -br, -br,
/* +Z side */
br, -br, br,
-br, -br, br,
-br, br, br,
br, br, br,
/* -Z side */
br, br, -br,
-br, br, -br,
-br, -br, -br,
br, -br, -br,
};
static void draw_skybox( void )
{
const GLfloat eps1 = 0.99;
const GLfloat br = 20.0; /* box radius */
if ( use_vertex_arrays ) {
glTexCoordPointer( 3, GL_FLOAT, 0, tex_coords );
glVertexPointer( 3, GL_FLOAT, 0, vtx_coords );
glBegin(GL_QUADS);
glEnableClientState( GL_TEXTURE_COORD_ARRAY );
glEnableClientState( GL_VERTEX_ARRAY );
/* +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);
glDrawArrays( GL_QUADS, 0, 24 );
/* -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);
glDisableClientState( GL_TEXTURE_COORD_ARRAY );
glDisableClientState( GL_VERTEX_ARRAY );
}
else {
unsigned i;
/* +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);
/* -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);
/* +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);
/* -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);
glEnd();
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)