Added stipple mode

This commit is contained in:
Keith Whitwell 2000-03-30 17:58:56 +00:00
parent 5ca0d13823
commit 03b7aee438
1 changed files with 69 additions and 7 deletions

View File

@ -1,4 +1,4 @@
/* $Id: isosurf.c,v 1.4 1999/10/21 16:39:06 brianp Exp $ */
/* $Id: isosurf.c,v 1.5 2000/03/30 17:58:56 keithw Exp $ */
/*
* Display an isosurface of 3-D wind speed volume.
@ -27,6 +27,9 @@
/*
* $Log: isosurf.c,v $
* Revision 1.5 2000/03/30 17:58:56 keithw
* Added stipple mode
*
* Revision 1.4 1999/10/21 16:39:06 brianp
* added -info command line option
*
@ -87,6 +90,9 @@
#define NO_FOG 0x400000
#define QUIT 0x800000
#define DISPLAYLIST 0x1000000
#define GLINFO 0x2000000
#define STIPPLE 0x4000000
#define NO_STIPPLE 0x8000000
#define LIGHT_MASK (LIT|UNLIT)
#define TEXTURE_MASK (TEXTURE|NO_TEXTURE)
@ -99,6 +105,7 @@
#define CLIP_MASK (USER_CLIP|NO_USER_CLIP)
#define SHADE_MASK (SHADE_SMOOTH|SHADE_FLAT)
#define FOG_MASK (FOG|NO_FOG)
#define STIPPLE_MASK (STIPPLE|NO_STIPPLE)
#define MAXVERTS 10000
static float data[MAXVERTS][6];
@ -118,6 +125,20 @@ static GLuint surf1;
static GLboolean PrintInfo = GL_FALSE;
static GLubyte halftone[] = {
0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA,
0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA,
0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA,
0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA,
0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA,
0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55};
/* forward decl */
int BuildList( int mode );
@ -535,6 +556,8 @@ static void InitMaterials(void)
glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, front_mat_shininess);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, front_mat_specular);
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, front_mat_diffuse);
glPolygonStipple (halftone);
}
@ -552,6 +575,13 @@ static void ModeMenu(int m)
if (m==QUIT)
exit(0);
if (m==GLINFO) {
printf("GL_VERSION: %s\n", (char *) glGetString(GL_VERSION));
printf("GL_EXTENSIONS: %s\n", (char *) glGetString(GL_EXTENSIONS));
printf("GL_RENDERER: %s\n", (char *) glGetString(GL_RENDERER));
return;
}
if (CHANGED(state, m, FILTER_MASK)) {
if (m & LINEAR_FILTER) {
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
@ -615,6 +645,19 @@ static void ModeMenu(int m)
}
}
if (CHANGED(state, m, STIPPLE_MASK)) {
if (m & STIPPLE)
{
glEnable(GL_POLYGON_STIPPLE);
printf("STIPPLE enable\n");
}
else
{
glDisable(GL_POLYGON_STIPPLE);
printf("STIPPLE disable\n");
}
}
#ifdef GL_EXT_vertex_array
if (CHANGED(state, m, (COMPILED_MASK|RENDER_STYLE_MASK|PRIMITIVE_MASK)))
{
@ -631,10 +674,12 @@ static void ModeMenu(int m)
&compressed_data[0][3]);
}
#ifdef GL_EXT_compiled_vertex_array
if (m & COMPILED) {
glLockArraysEXT( 0, numuniq );
} else {
glUnlockArraysEXT();
if (allowed & COMPILED) {
if (m & COMPILED) {
glLockArraysEXT( 0, numuniq );
} else {
glUnlockArraysEXT();
}
}
#endif
}
@ -657,7 +702,7 @@ static void Init(int argc, char *argv[])
{
GLfloat fogColor[4] = {0.5,1.0,0.5,1.0};
glClearColor(0.0, 0.0, 0.0, 0.0);
glClearColor(0.0, 0.0, 1.0, 0.0);
glEnable( GL_DEPTH_TEST );
glEnable( GL_VERTEX_ARRAY_EXT );
glEnable( GL_NORMAL_ARRAY_EXT );
@ -674,7 +719,7 @@ static void Init(int argc, char *argv[])
set_matrix();
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
@ -706,6 +751,7 @@ static void Init(int argc, char *argv[])
NO_USER_CLIP|
NO_MATERIALS|
NO_FOG|
NO_STIPPLE|
GLVERTEX);
if (PrintInfo) {
@ -738,6 +784,9 @@ static void Key( unsigned char key, int x, int y )
case 's':
ModeMenu((state ^ SHADE_MASK) & SHADE_MASK);
break;
case 't':
ModeMenu((state ^ STIPPLE_MASK) & STIPPLE_MASK);
break;
case 'l':
ModeMenu((state ^ LIGHT_MASK) & LIGHT_MASK);
break;
@ -747,6 +796,13 @@ static void Key( unsigned char key, int x, int y )
case 'c':
ModeMenu((state ^ CLIP_MASK) & CLIP_MASK);
break;
case 'v':
if (allowed&COMPILED)
ModeMenu(COMPILED|DRAW_ARRAYS|TRIANGLES);
break;
case 'V':
ModeMenu(IMMEDIATE|GLVERTEX|STRIPS);
break;
case 'b':
Benchmark(5.0, 0);
break;
@ -878,6 +934,8 @@ int main(int argc, char **argv)
ModeMenu(arg_mode);
glutCreateMenu(ModeMenu);
glutAddMenuEntry("GL info", GLINFO);
glutAddMenuEntry("", 0);
glutAddMenuEntry("Lit", LIT|NO_TEXTURE|NO_REFLECT);
glutAddMenuEntry("Unlit", UNLIT|NO_TEXTURE|NO_REFLECT);
/* glutAddMenuEntry("Textured", TEXTURE); */
@ -889,6 +947,9 @@ int main(int argc, char **argv)
glutAddMenuEntry("Fog", FOG);
glutAddMenuEntry("No Fog", NO_FOG);
glutAddMenuEntry("", 0);
glutAddMenuEntry("Stipple", STIPPLE);
glutAddMenuEntry("No Stipple", NO_STIPPLE);
glutAddMenuEntry("", 0);
glutAddMenuEntry("Point Filtered", POINT_FILTER);
glutAddMenuEntry("Linear Filtered", LINEAR_FILTER);
glutAddMenuEntry("", 0);
@ -928,6 +989,7 @@ int main(int argc, char **argv)
glutKeyboardFunc(Key);
glutSpecialFunc(SpecialKey);
glutDisplayFunc(Display);
glutMainLoop();
return 0;
}