Browse Source

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

are toggled with the 't' key.
tags/R300_DRIVER_0
Ian Romanick 21 years ago
parent
commit
cd6ca58c3f
1 changed files with 94 additions and 30 deletions
  1. 94
    30
      progs/demos/cubemap.c

+ 94
- 30
progs/demos/cubemap.c 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 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)

Loading…
Cancel
Save