shapes demo: now only draw necessary size info, and calling that info by

the right name.


git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@1409 7f0cb862-5218-0410-a997-914c9d46530a
This commit is contained in:
dcnieho 2012-11-19 02:46:34 +00:00
parent eec680a34b
commit 1759c0ef92

View File

@ -422,6 +422,17 @@ static GLboolean animateXRot = GL_FALSE;
static GLboolean useShader = GL_FALSE;
static GLboolean visNormals = GL_FALSE;
/*
* Enum to tell drawSizeInfo what to draw for each object
*/
#define GEO_NO_SIZE 0
#define GEO_SIZE 1
#define GEO_SCALE 2
#define GEO_INNER_OUTER_RAD 4
#define GEO_RAD 8
#define GEO_BASE_HEIGHT 16
#define GEO_RAD_HEIGHT 32
/*
* These one-liners draw particular objects, fetching appropriate
* information from the above globals. They are just thin wrappers
@ -527,24 +538,25 @@ typedef struct
const char * const name;
void (*solid) (void);
void (*wire) (void);
int drawSizeInfoFlag;
} entry;
#define ENTRY(e) {#e, drawSolid##e, drawWire##e}
#define ENTRY(e,f) {#e, drawSolid##e, drawWire##e,f}
static const entry table [] =
{
ENTRY (Tetrahedron),
ENTRY (Cube),
ENTRY (Octahedron),
ENTRY (Dodecahedron),
ENTRY (RhombicDodecahedron),
ENTRY (Icosahedron),
ENTRY (SierpinskiSponge),
ENTRY (Teapot),
ENTRY (Torus),
ENTRY (Sphere),
ENTRY (Cone),
ENTRY (Cylinder),
ENTRY (Cuboctahedron) /* This one doesn't work when in shader mode and is then skipped */
ENTRY (Tetrahedron,GEO_NO_SIZE),
ENTRY (Cube,GEO_SIZE),
ENTRY (Octahedron,GEO_NO_SIZE),
ENTRY (Dodecahedron,GEO_NO_SIZE),
ENTRY (RhombicDodecahedron,GEO_NO_SIZE),
ENTRY (Icosahedron,GEO_NO_SIZE),
ENTRY (SierpinskiSponge,GEO_SCALE),
ENTRY (Teapot,GEO_SIZE),
ENTRY (Torus,GEO_INNER_OUTER_RAD),
ENTRY (Sphere,GEO_RAD),
ENTRY (Cone,GEO_BASE_HEIGHT),
ENTRY (Cylinder,GEO_RAD_HEIGHT),
ENTRY (Cuboctahedron,GEO_SIZE) /* This one doesn't work when in shader mode and is then skipped */
};
#undef ENTRY
@ -594,8 +606,61 @@ static void shapesPrintf (int row, int col, const char *fmt, ...)
glPopMatrix();
}
/* GLUT callback Handlers */
/* Print info about the about the current shape and render state on the screen */
static void DrawSizeInfo(int *row)
{
switch (table [function_index].drawSizeInfoFlag)
{
case GEO_NO_SIZE:
break;
case GEO_SIZE:
shapesPrintf ((*row)++, 1, "Size Up Down : %f", orad);
break;
case GEO_SCALE:
shapesPrintf ((*row)++, 1, "Scale Up Down : %f", orad);
break;
case GEO_INNER_OUTER_RAD:
shapesPrintf ((*row)++, 1, "Inner radius Left Right: %f", irad);
shapesPrintf ((*row)++, 1, "Outer radius Up Down : %f", orad);
break;
case GEO_RAD:
shapesPrintf ((*row)++, 1, "Radius Up Down : %f", orad);
break;
case GEO_BASE_HEIGHT:
shapesPrintf ((*row)++, 1, "Base Left Right: %f", irad);
shapesPrintf ((*row)++, 1, "Height Up Down : %f", orad);
break;
case GEO_RAD_HEIGHT:
shapesPrintf ((*row)++, 1, "Radius Left Right: %f", irad);
shapesPrintf ((*row)++, 1, "Height Up Down : %f", orad);
break;
}
}
static void drawInfo()
{
int row = 1;
shapesPrintf (row++, 1, "Shape PgUp PgDn: %s", table [function_index].name);
shapesPrintf (row++, 1, "Slices +-: %d Stacks <>: %d", slices, stacks);
shapesPrintf (row++, 1, "nSides +-: %d nRings <>: %d", slices, stacks);
shapesPrintf (row++, 1, "Depth (): %d", depth);
DrawSizeInfo(&row);
if (persProject)
shapesPrintf (row++, 1, "Perspective projection (p)");
else
shapesPrintf (row++, 1, "Orthographic projection (p)");
if (useShader)
shapesPrintf (row++, 1, "Using shader (s)");
else
shapesPrintf (row++, 1, "Using fixed function pipeline (s)");
if (animateXRot)
shapesPrintf (row++, 1, "2D rotation (r)");
else
shapesPrintf (row++, 1, "1D rotation (r)");
shapesPrintf (row++, 1, "visualizing normals: %i (n)",visNormals);
}
/* GLUT callback Handlers */
static void
resize(int width, int height)
{
@ -695,30 +760,12 @@ static void display(void)
glColor3d(0.1,0.1,0.4);
}
if( show_info ) {
shapesPrintf (1, 1, "Shape PgUp PgDn: %s", table [function_index].name);
shapesPrintf (2, 1, "Slices +-: %d Stacks <>: %d", slices, stacks);
shapesPrintf (3, 1, "nSides +-: %d nRings <>: %d", slices, stacks);
shapesPrintf (4, 1, "Depth (): %d", depth);
shapesPrintf (5, 1, "Outer radius Up Down : %f", orad);
shapesPrintf (6, 1, "Inner radius Left Right: %f", irad);
if (persProject)
shapesPrintf (7, 1, "Perspective projection (p)");
if( show_info )
/* print info to screen */
drawInfo();
else
shapesPrintf (7, 1, "Orthographic projection (p)");
if (useShader)
shapesPrintf (8, 1, "Using shader (s)");
else
shapesPrintf (8, 1, "Using fixed function pipeline (s)");
if (animateXRot)
shapesPrintf (9, 1, "2D rotation (r)");
else
shapesPrintf (9, 1, "1D rotation (r)");
shapesPrintf (10, 1, "visualizing normals: %i (n)",visNormals);
} else {
/* print to command line instead */
printf ( "Shape %d slides %d stacks %d\n", function_index, slices, stacks ) ;
}
glutSwapBuffers();
}