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:
parent
eec680a34b
commit
1759c0ef92
@ -422,6 +422,17 @@ static GLboolean animateXRot = GL_FALSE;
|
|||||||
static GLboolean useShader = GL_FALSE;
|
static GLboolean useShader = GL_FALSE;
|
||||||
static GLboolean visNormals = 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
|
* These one-liners draw particular objects, fetching appropriate
|
||||||
* information from the above globals. They are just thin wrappers
|
* information from the above globals. They are just thin wrappers
|
||||||
@ -527,24 +538,25 @@ typedef struct
|
|||||||
const char * const name;
|
const char * const name;
|
||||||
void (*solid) (void);
|
void (*solid) (void);
|
||||||
void (*wire) (void);
|
void (*wire) (void);
|
||||||
|
int drawSizeInfoFlag;
|
||||||
} entry;
|
} entry;
|
||||||
|
|
||||||
#define ENTRY(e) {#e, drawSolid##e, drawWire##e}
|
#define ENTRY(e,f) {#e, drawSolid##e, drawWire##e,f}
|
||||||
static const entry table [] =
|
static const entry table [] =
|
||||||
{
|
{
|
||||||
ENTRY (Tetrahedron),
|
ENTRY (Tetrahedron,GEO_NO_SIZE),
|
||||||
ENTRY (Cube),
|
ENTRY (Cube,GEO_SIZE),
|
||||||
ENTRY (Octahedron),
|
ENTRY (Octahedron,GEO_NO_SIZE),
|
||||||
ENTRY (Dodecahedron),
|
ENTRY (Dodecahedron,GEO_NO_SIZE),
|
||||||
ENTRY (RhombicDodecahedron),
|
ENTRY (RhombicDodecahedron,GEO_NO_SIZE),
|
||||||
ENTRY (Icosahedron),
|
ENTRY (Icosahedron,GEO_NO_SIZE),
|
||||||
ENTRY (SierpinskiSponge),
|
ENTRY (SierpinskiSponge,GEO_SCALE),
|
||||||
ENTRY (Teapot),
|
ENTRY (Teapot,GEO_SIZE),
|
||||||
ENTRY (Torus),
|
ENTRY (Torus,GEO_INNER_OUTER_RAD),
|
||||||
ENTRY (Sphere),
|
ENTRY (Sphere,GEO_RAD),
|
||||||
ENTRY (Cone),
|
ENTRY (Cone,GEO_BASE_HEIGHT),
|
||||||
ENTRY (Cylinder),
|
ENTRY (Cylinder,GEO_RAD_HEIGHT),
|
||||||
ENTRY (Cuboctahedron) /* This one doesn't work when in shader mode and is then skipped */
|
ENTRY (Cuboctahedron,GEO_SIZE) /* This one doesn't work when in shader mode and is then skipped */
|
||||||
};
|
};
|
||||||
#undef ENTRY
|
#undef ENTRY
|
||||||
|
|
||||||
@ -594,8 +606,61 @@ static void shapesPrintf (int row, int col, const char *fmt, ...)
|
|||||||
glPopMatrix();
|
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
|
static void
|
||||||
resize(int width, int height)
|
resize(int width, int height)
|
||||||
{
|
{
|
||||||
@ -695,30 +760,12 @@ static void display(void)
|
|||||||
glColor3d(0.1,0.1,0.4);
|
glColor3d(0.1,0.1,0.4);
|
||||||
}
|
}
|
||||||
|
|
||||||
if( show_info ) {
|
if( show_info )
|
||||||
shapesPrintf (1, 1, "Shape PgUp PgDn: %s", table [function_index].name);
|
/* print info to screen */
|
||||||
shapesPrintf (2, 1, "Slices +-: %d Stacks <>: %d", slices, stacks);
|
drawInfo();
|
||||||
shapesPrintf (3, 1, "nSides +-: %d nRings <>: %d", slices, stacks);
|
else
|
||||||
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)");
|
|
||||||
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 */
|
/* print to command line instead */
|
||||||
printf ( "Shape %d slides %d stacks %d\n", function_index, slices, stacks ) ;
|
printf ( "Shape %d slides %d stacks %d\n", function_index, slices, stacks ) ;
|
||||||
}
|
|
||||||
|
|
||||||
glutSwapBuffers();
|
glutSwapBuffers();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user