summaryrefslogtreecommitdiffstats
path: root/progs/tests
diff options
context:
space:
mode:
authorDaniel Borca <dborca@users.sourceforge.net>2005-01-19 07:52:49 +0000
committerDaniel Borca <dborca@users.sourceforge.net>2005-01-19 07:52:49 +0000
commit9ebce91a66a5775fbb0d3bfce162531d1ad2d975 (patch)
tree73649d9e6767a71c75db74be2a239916dfac46e6 /progs/tests
parent59c2e16e755c0cba78b27525681cd79456a2f496 (diff)
downloadexternal_mesa3d-9ebce91a66a5775fbb0d3bfce162531d1ad2d975.zip
external_mesa3d-9ebce91a66a5775fbb0d3bfce162531d1ad2d975.tar.gz
external_mesa3d-9ebce91a66a5775fbb0d3bfce162531d1ad2d975.tar.bz2
glVertex* is the provoking "cmd" (that is, by the time of glVertex*, we must have all other attributes already set).
i am committing this before i forget. however, i'm still leaving my code disabled, because the old code seems legal.
Diffstat (limited to 'progs/tests')
-rw-r--r--progs/tests/dinoshade.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/progs/tests/dinoshade.c b/progs/tests/dinoshade.c
index d0a79c1..ed7b879 100644
--- a/progs/tests/dinoshade.c
+++ b/progs/tests/dinoshade.c
@@ -260,6 +260,7 @@ extrudeSolidFromPolygon(GLfloat data[][2], unsigned int dataSize,
from being "smoothed" */
glBegin(GL_QUAD_STRIP);
for (i = 0; i <= count; i++) {
+#if 1 /* weird, but seems to be legal */
/* mod function handles closing the edge */
glVertex3f(data[i % count][0], data[i % count][1], 0.0);
glVertex3f(data[i % count][0], data[i % count][1], thickness);
@@ -271,6 +272,19 @@ extrudeSolidFromPolygon(GLfloat data[][2], unsigned int dataSize,
dy = data[i % count][0] - data[(i + 1) % count][0];
len = sqrt(dx * dx + dy * dy);
glNormal3f(dx / len, dy / len, 0.0);
+#else /* the nice way of doing it */
+ /* Calculate a unit normal by dividing by Euclidean
+ distance. We * could be lazy and use
+ glEnable(GL_NORMALIZE) so we could pass in * arbitrary
+ normals for a very slight performance hit. */
+ dx = data[i % count][1] - data[(i - 1 + count) % count][1];
+ dy = data[(i - 1 + count) % count][0] - data[i % count][0];
+ len = sqrt(dx * dx + dy * dy);
+ glNormal3f(dx / len, dy / len, 0.0);
+ /* mod function handles closing the edge */
+ glVertex3f(data[i % count][0], data[i % count][1], 0.0);
+ glVertex3f(data[i % count][0], data[i % count][1], thickness);
+#endif
}
glEnd();
glEndList();