diff options
-rw-r--r-- | progs/demos/isosurf.c | 91 |
1 files changed, 52 insertions, 39 deletions
diff --git a/progs/demos/isosurf.c b/progs/demos/isosurf.c index 437cdf4043..160886f9ce 100644 --- a/progs/demos/isosurf.c +++ b/progs/demos/isosurf.c @@ -1,4 +1,4 @@ -/* $Id: isosurf.c,v 1.13 2001/10/04 19:14:26 kschultz Exp $ */ +/* $Id: isosurf.c,v 1.14 2002/01/04 09:47:17 gareth Exp $ */ /* * Display an isosurface of 3-D wind speed volume. @@ -39,34 +39,36 @@ #include "readtex.c" /* I know, this is a hack. KW: me too. */ #define TEXTURE_FILE "../images/reflect.rgb" -#define LIT 0x1 -#define UNLIT 0x2 -#define REFLECT 0x10 -#define POINT_FILTER 0x40 -#define LINEAR_FILTER 0x80 -#define GLVERTEX 0x100 -#define DRAW_ELTS 0x4 -#define DRAW_ARRAYS 0x200 -#define ARRAY_ELT 0x400 -#define LOCKED 0x800 -#define UNLOCKED 0x8 -#define IMMEDIATE 0x1000 -#define DISPLAYLIST 0x2000000 -#define SHADE_SMOOTH 0x2000 -#define SHADE_FLAT 0x4000 -#define TRIANGLES 0x8000 -#define STRIPS 0x10000 -#define POINTS 0x20000 -#define USER_CLIP 0x40000 -#define NO_USER_CLIP 0x80000 -#define MATERIALS 0x100000 -#define NO_MATERIALS 0x200000 -#define FOG 0x400000 -#define NO_FOG 0x800000 -#define QUIT 0x1000000 -#define GLINFO 0x4000000 -#define STIPPLE 0x8000000 -#define NO_STIPPLE 0x20 +#define LIT 0x00000001 +#define UNLIT 0x00000002 +#define REFLECT 0x00000004 +#define POINT_FILTER 0x00000008 +#define LINEAR_FILTER 0x00000010 +#define GLVERTEX 0x00000020 +#define DRAW_ELTS 0x00000040 +#define DRAW_ARRAYS 0x00000080 +#define ARRAY_ELT 0x00000100 +#define LOCKED 0x00000200 +#define UNLOCKED 0x00000400 +#define IMMEDIATE 0x00000800 +#define DISPLAYLIST 0x00001000 +#define SHADE_SMOOTH 0x00002000 +#define SHADE_FLAT 0x00004000 +#define TRIANGLES 0x00008000 +#define STRIPS 0x00010000 +#define POINTS 0x00020000 +#define USER_CLIP 0x00040000 +#define NO_USER_CLIP 0x00080000 +#define MATERIALS 0x00100000 +#define NO_MATERIALS 0x00200000 +#define FOG 0x00400000 +#define NO_FOG 0x00800000 +#define QUIT 0x01000000 +#define GLINFO 0x02000000 +#define STIPPLE 0x04000000 +#define NO_STIPPLE 0x08000000 +#define POLYGON_FILL 0x10000000 +#define POLYGON_LINE 0x20000000 #define LIGHT_MASK (LIT|UNLIT|REFLECT) #define FILTER_MASK (POINT_FILTER|LINEAR_FILTER) @@ -79,6 +81,7 @@ #define SHADE_MASK (SHADE_SMOOTH|SHADE_FLAT) #define FOG_MASK (FOG|NO_FOG) #define STIPPLE_MASK (STIPPLE|NO_STIPPLE) +#define POLYGON_MASK (POLYGON_FILL|POLYGON_LINE) #define MAXVERTS 10000 static GLuint maxverts = MAXVERTS; @@ -144,7 +147,7 @@ static void read_surface( char *filename ) static void print_flags( const char *msg, GLuint flags ) { fprintf(stderr, - "%s (0x%x): %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s\n", + "%s (0x%x): %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s\n", msg, flags, (flags & GLVERTEX) ? "glVertex, " : "", (flags & DRAW_ARRAYS) ? "glDrawArrays, " : "", @@ -162,7 +165,8 @@ static void print_flags( const char *msg, GLuint flags ) (flags & USER_CLIP) ? "user_clip, " : "", (flags & MATERIALS) ? "materials, " : "", (flags & FOG) ? "fog, " : "", - (flags & STIPPLE) ? "stipple, " : ""); + (flags & STIPPLE) ? "stipple, " : "", + (flags & POLYGON_LINE) ? "polygon mode line, " : ""); } @@ -684,28 +688,34 @@ static void ModeMenu(int m) if (CHANGED(state, m, FOG_MASK)) { UPDATE(state, m, FOG_MASK); - if (m & FOG) - { + if (m & FOG) { glEnable(GL_FOG); } - else - { + else { glDisable(GL_FOG); } } if (CHANGED(state, m, STIPPLE_MASK)) { UPDATE(state, m, STIPPLE_MASK); - if (m & STIPPLE) - { + if (m & STIPPLE) { glEnable(GL_POLYGON_STIPPLE); } - else - { + else { glDisable(GL_POLYGON_STIPPLE); } } + if (CHANGED(state, m, POLYGON_MASK)) { + UPDATE(state, m, POLYGON_MASK); + if (m & POLYGON_FILL) { + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + } + else { + glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + } + } + #ifdef GL_EXT_vertex_array if (CHANGED(state, m, (LOCK_MASK|RENDER_STYLE_MASK|PRIMITIVE_MASK))) { @@ -1077,6 +1087,9 @@ int main(int argc, char **argv) glutAddMenuEntry("Stipple", STIPPLE); glutAddMenuEntry("No Stipple", NO_STIPPLE); glutAddMenuEntry("", 0); + glutAddMenuEntry("Polygon Mode Fill", POLYGON_FILL); + glutAddMenuEntry("Polygon Mode Line", POLYGON_LINE); + glutAddMenuEntry("", 0); glutAddMenuEntry("Point Filtered", POINT_FILTER); glutAddMenuEntry("Linear Filtered", LINEAR_FILTER); glutAddMenuEntry("", 0); |