X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;ds=sidebyside;f=progs%2Fdemos%2Fshapes%2Fshapes.c;h=69c0a1a94da8ee20a70dedfefc7adb3b9b7f1281;hb=207c3128bf025b5e025bace5c0425d380dd72aa9;hp=2b15936c15c16f30098fd11139be0575432d9ca9;hpb=b7f5a290ecf16149bfa77e89dbfb5197cebe88f1;p=freeglut
diff --git a/progs/demos/shapes/shapes.c b/progs/demos/shapes/shapes.c
index 2b15936..69c0a1a 100644
--- a/progs/demos/shapes/shapes.c
+++ b/progs/demos/shapes/shapes.c
@@ -5,10 +5,10 @@
in OpenGLUT. It may also be useful to see which
parameters control what behavior in the OpenGLUT
objects.
-
+
Spinning wireframe and solid-shaded shapes are
displayed. Some parameters can be adjusted.
-
+
Keys:
- Esc Quit
- q Q Quit
@@ -34,7 +34,7 @@
\author Portions Copyright (C) 2004, the OpenGLUT project contributors.
OpenGLUT branched from freeglut in February, 2004.
-
+
\image html openglut_shapes.png OpenGLUT Geometric Shapes Demonstration
\include demos/shapes/shapes.c
*/
@@ -44,6 +44,7 @@
#include
#include
#include
+#include
#include "glmatrix.h"
@@ -62,7 +63,7 @@ void checkError(const char *functionName)
}
/*
- * OpenGL 2+ shader mode needs some function and macro definitions,
+ * OpenGL 2+ shader mode needs some function and macro definitions,
* avoiding a dependency on additional libraries like GLEW or the
* GL/glext.h header
*/
@@ -282,9 +283,10 @@ GLint getAttribOrUniformLocation(const char* name, GLuint program, GLboolean isA
GLint attrib = gl_GetAttribLocation(program, name);
if (attrib == -1)
{
- fprintf(stderr, "Warning: Could not bind attrib %s\n", name);
+ fprintf(stderr, "Warning: Could not bind attrib %s\n", name);
}
+ checkError ("getAttribOrUniformLocation");
return attrib;
}
else
@@ -292,16 +294,16 @@ GLint getAttribOrUniformLocation(const char* name, GLuint program, GLboolean isA
GLint uniform = gl_GetUniformLocation(program, name);
if (uniform == -1)
{
- fprintf(stderr, "Warning: Could not bind uniform %s\n", name);
+ fprintf(stderr, "Warning: Could not bind uniform %s\n", name);
}
+ checkError ("getAttribOrUniformLocation");
return uniform;
}
- checkError ("getAttribOrUniformLocation");
}
GLuint program;
-GLint attribute_fg_coord = -1, attribute_fg_normal = -1;
+GLint attribute_fg_coord = -1, attribute_fg_normal = -1;
GLint uniform_m = -1, uniform_p = -1, uniform_m_3x3_inv_transp = -1;
GLint shaderReady = 0; /* Set to 1 when all initialization went well, to -1 when shader somehow unusable. */
@@ -462,24 +464,22 @@ static void drawSolidCone(void) { glutSolidCone(irad,orad,slices,
static void drawWireCone(void) { glutWireCone(irad,orad,slices,stacks); } /* irad doubles as base input, and orad as height input */
static void drawSolidCylinder(void) { glutSolidCylinder(irad,orad,slices,stacks); } /* irad doubles as radius input, and orad as height input */
static void drawWireCylinder(void) { glutWireCylinder(irad,orad,slices,stacks); } /* irad doubles as radius input, and orad as height input */
+/* per Glut manpage, it should be noted that the teapot is rendered
+ * with clockwise winding for front facing polygons...
+ * Same for the teacup and teaspoon
+ */
static void drawSolidTeapot(void)
-{
- /* per Glut manpage, it should be noted that the teapot is rendered
- * with clockwise winding for front facing polygons...
- */
- glFrontFace(GL_CW);
- glutSolidTeapot(orad); /* orad doubles as size input */
- glFrontFace(GL_CCW);
-}
+{ glFrontFace(GL_CW); glutSolidTeapot(orad); glFrontFace(GL_CCW); /* orad doubles as size input */}
static void drawWireTeapot(void)
-{
- /* per Glut manpage, it should be noted that the teapot is rendered
- * with clockwise winding for front facing polygons...
- */
- glFrontFace(GL_CW);
- glutWireTeapot(orad); /* orad doubles as size input */
- glFrontFace(GL_CCW);
-}
+{ glFrontFace(GL_CW); glutWireTeapot(orad); glFrontFace(GL_CCW); /* orad doubles as size input */}
+static void drawSolidTeacup(void)
+{ glFrontFace(GL_CW); glutSolidTeacup(orad); glFrontFace(GL_CCW); /* orad doubles as size input */}
+static void drawWireTeacup(void)
+{ glFrontFace(GL_CW); glutWireTeacup(orad); glFrontFace(GL_CCW); /* orad doubles as size input */}
+static void drawSolidTeaspoon(void)
+{ glFrontFace(GL_CW); glutSolidTeaspoon(orad); glFrontFace(GL_CCW); /* orad doubles as size input */}
+static void drawWireTeaspoon(void)
+{ glFrontFace(GL_CW); glutWireTeaspoon(orad); glFrontFace(GL_CCW); /* orad doubles as size input */}
#define RADIUSFAC 0.70710678118654752440084436210485f
@@ -554,6 +554,8 @@ static const entry table [] =
ENTRY (Icosahedron,GEO_NO_SIZE),
ENTRY (SierpinskiSponge,GEO_SCALE),
ENTRY (Teapot,GEO_SIZE),
+ ENTRY (Teacup,GEO_SIZE),
+ ENTRY (Teaspoon,GEO_SIZE),
ENTRY (Torus,GEO_INNER_OUTER_RAD),
ENTRY (Sphere,GEO_RAD),
ENTRY (Cone,GEO_BASE_HEIGHT),
@@ -690,6 +692,7 @@ static void display(void)
gl_UseProgram (program);
glutSetVertexAttribCoord3(attribute_fg_coord);
glutSetVertexAttribNormal(attribute_fg_normal);
+ /* There is also a glutSetVertexAttribTexCoord2, which is used only when drawing the teapot, teacup or teaspoon */
gl_matrix_mode(GL_PROJECTION);
gl_load_identity();
@@ -797,10 +800,10 @@ key(unsigned char key, int x, int y)
case '.':
case '>': stacks++; break;
- case '9':
+ case '9':
case '(': if( depth > -1 ) depth--; break;
- case '0':
+ case '0':
case ')': ++depth; break;
case 'P':
@@ -851,10 +854,12 @@ static void special (int key, int x, int y)
/* Cuboctahedron can't be shown when in shader mode, skip it */
if (useShader && NUMBEROF (table)-1 == ( unsigned )function_index)
+ {
if (key==GLUT_KEY_PAGE_UP)
function_index = 0;
else
function_index -= 1;
+ }
}