X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=progs%2Fdemos%2Fcubemap.c;h=0a59b9898356ce35c85b451f91bc7c36f5afe13f;hb=a1a6fa2fa18c4982aa8151042df7d04551e47981;hp=5818337c12679dc61592e461dafe817ffcefa086;hpb=a4f0b6884ceb966305181045bbdced013e857d38;p=mesa.git diff --git a/progs/demos/cubemap.c b/progs/demos/cubemap.c index 5818337c126..0a59b989835 100644 --- a/progs/demos/cubemap.c +++ b/progs/demos/cubemap.c @@ -1,5 +1,3 @@ -/* $Id: cubemap.c,v 1.4 2002/10/25 17:20:26 brianp Exp $ */ - /* * GL_ARB_texture_cube_map demo * @@ -42,57 +40,117 @@ #include #include #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, + + /* +Z side */ + eps1, -eps1, 1.0, + -eps1, -eps1, 1.0, + -eps1, eps1, 1.0, + eps1, eps1, 1.0, - glBegin(GL_QUADS); + /* -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, +}; + +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 ); - glEnd(); + 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(); + } } @@ -162,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; @@ -178,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) @@ -236,12 +298,12 @@ static void init_checkers( void ) #define CUBE_TEX_SIZE 64 GLubyte image[CUBE_TEX_SIZE][CUBE_TEX_SIZE][3]; static const GLubyte colors[6][3] = { - { 255, 0, 0 }, - { 0, 255, 255 }, - { 0, 255, 0 }, - { 255, 0, 255 }, - { 0, 0, 255 }, - { 255, 255, 0 } + { 255, 0, 0 }, /* face 0 - red */ + { 0, 255, 255 }, /* face 1 - cyan */ + { 0, 255, 0 }, /* face 2 - green */ + { 255, 0, 255 }, /* face 3 - purple */ + { 0, 0, 255 }, /* face 4 - blue */ + { 255, 255, 0 } /* face 5 - yellow */ }; static const GLenum targets[6] = { GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB, @@ -395,7 +457,7 @@ int main( int argc, char *argv[] ) glutInitWindowPosition(0, 0); glutInitWindowSize(600, 500); glutInitDisplayMode( GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE ); - glutCreateWindow("Texture Cube Maping"); + glutCreateWindow("Texture Cube Mapping"); if (argc > 1 && strcmp(argv[1] , "-i") == 0) init( 1 ); @@ -404,8 +466,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;