From 476609c539103c7981c972f24d4eaea499894050 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Wed, 4 Oct 2000 18:15:39 +0000 Subject: [PATCH] improved to test alpha blending with texture palette --- progs/demos/paltex.c | 130 ++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 113 insertions(+), 17 deletions(-) diff --git a/progs/demos/paltex.c b/progs/demos/paltex.c index aaafc6f..71c2fed 100644 --- a/progs/demos/paltex.c +++ b/progs/demos/paltex.c @@ -1,4 +1,4 @@ -/* $Id: paltex.c,v 1.4 2000/06/27 17:12:10 brianp Exp $ */ +/* $Id: paltex.c,v 1.5 2000/10/04 18:15:39 brianp Exp $ */ /* * Paletted texture demo. Written by Brian Paul. @@ -13,22 +13,32 @@ static float Rot = 0.0; +static GLboolean Anim = 1; static void Idle( void ) { - Rot += 5.0; + float t = glutGet(GLUT_ELAPSED_TIME) * 0.001; /* in seconds */ + Rot = t * 360 / 4; /* 1 rotation per 4 seconds */ glutPostRedisplay(); } static void Display( void ) { - glClear( GL_COLOR_BUFFER_BIT ); + /* draw background gradient */ + glDisable(GL_TEXTURE_2D); + glBegin(GL_POLYGON); + glColor3f(1.0, 0.0, 0.2); glVertex2f(-1.5, -1.0); + glColor3f(1.0, 0.0, 0.2); glVertex2f( 1.5, -1.0); + glColor3f(0.0, 0.0, 1.0); glVertex2f( 1.5, 1.0); + glColor3f(0.0, 0.0, 1.0); glVertex2f(-1.5, 1.0); + glEnd(); glPushMatrix(); glRotatef(Rot, 0, 0, 1); + glEnable(GL_TEXTURE_2D); glBegin(GL_POLYGON); glTexCoord2f(0, 1); glVertex2f(-1, -0.5); glTexCoord2f(1, 1); glVertex2f( 1, -0.5); @@ -47,10 +57,9 @@ static void Reshape( int width, int height ) glViewport( 0, 0, width, height ); glMatrixMode( GL_PROJECTION ); glLoadIdentity(); - glFrustum( -1.0, 1.0, -1.0, 1.0, 5.0, 25.0 ); + glOrtho( -1.5, 1.5, -1.0, 1.0, -1.0, 1.0 ); glMatrixMode( GL_MODELVIEW ); glLoadIdentity(); - glTranslatef( 0.0, 0.0, -7.0 ); } @@ -62,6 +71,16 @@ static void Key( unsigned char key, int x, int y ) case 27: exit(0); break; + case 's': + Rot += 0.5; + break; + case ' ': + Anim = !Anim; + if (Anim) + glutIdleFunc( Idle ); + else + glutIdleFunc( NULL ); + break; } glutPostRedisplay(); } @@ -89,26 +108,27 @@ static void Init( void ) } /* load the color table for each texel-index */ - table[' '][0] = 50; - table[' '][1] = 50; - table[' '][2] = 50; - table[' '][3] = 50; + memset(table, 0, 256*4); + table[' '][0] = 255; + table[' '][1] = 255; + table[' '][2] = 255; + table[' '][3] = 64; table['M'][0] = 255; table['M'][1] = 0; table['M'][2] = 0; - table['M'][3] = 0; + table['M'][3] = 255; table['E'][0] = 0; table['E'][1] = 255; table['E'][2] = 0; - table['E'][3] = 0; - table['S'][0] = 40; - table['S'][1] = 40; + table['E'][3] = 255; + table['S'][0] = 0; + table['S'][1] = 0; table['S'][2] = 255; - table['S'][3] = 0; + table['S'][3] = 255; table['A'][0] = 255; table['A'][1] = 255; table['A'][2] = 0; - table['A'][3] = 0; + table['A'][3] = 255; #ifdef GL_EXT_paletted_texture @@ -144,6 +164,81 @@ static void Init( void ) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); glEnable(GL_TEXTURE_2D); + + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); +#undef HEIGHT 32 +#undef WIDTH 256 +} + + + +/* + * Color ramp test + */ +static void Init2( void ) +{ +#define HEIGHT 32 +#define WIDTH 256 + static char texture[HEIGHT][WIDTH]; + GLubyte table[256][4]; + int i, j; + + if (!glutExtensionSupported("GL_EXT_paletted_texture")) { + printf("Sorry, GL_EXT_paletted_texture not supported\n"); + exit(0); + } + + for (j = 0; j < HEIGHT; j++) { + for (i = 0; i < WIDTH; i++) { + texture[j][i] = i; + } + } + + for (i = 0; i < 255; i++) { + table[i][0] = i; + table[i][1] = 0; + table[i][2] = 0; + table[i][3] = 255; + } + +#ifdef GL_EXT_paletted_texture + +#if defined(GL_EXT_shared_texture_palette) && defined(USE_SHARED_PALETTE) + printf("Using shared palette\n"); + glColorTableEXT(GL_SHARED_TEXTURE_PALETTE_EXT, /* target */ + GL_RGBA, /* internal format */ + 256, /* table size */ + GL_RGBA, /* table format */ + GL_UNSIGNED_BYTE, /* table type */ + table); /* the color table */ + glEnable(GL_SHARED_TEXTURE_PALETTE_EXT); +#else + glColorTableEXT(GL_TEXTURE_2D, /* target */ + GL_RGBA, /* internal format */ + 256, /* table size */ + GL_RGBA, /* table format */ + GL_UNSIGNED_BYTE, /* table type */ + table); /* the color table */ +#endif + + glTexImage2D(GL_TEXTURE_2D, /* target */ + 0, /* level */ + GL_COLOR_INDEX8_EXT, /* internal format */ + WIDTH, HEIGHT, /* width, height */ + 0, /* border */ + GL_COLOR_INDEX, /* texture format */ + GL_UNSIGNED_BYTE, /* texture type */ + texture); /* teh texture */ +#endif + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); + glEnable(GL_TEXTURE_2D); + + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } @@ -151,7 +246,7 @@ int main( int argc, char *argv[] ) { glutInit( &argc, argv ); glutInitWindowPosition( 0, 0 ); - glutInitWindowSize( 400, 400 ); + glutInitWindowSize( 400, 300 ); glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE ); @@ -162,7 +257,8 @@ int main( int argc, char *argv[] ) glutReshapeFunc( Reshape ); glutKeyboardFunc( Key ); glutDisplayFunc( Display ); - glutIdleFunc( Idle ); + if (Anim) + glutIdleFunc( Idle ); glutMainLoop(); return 0; -- 2.7.4