+#ifdef BLENDED_TERMINATOR
+static void
+terminator_tube (ModeInfo *mi, int resolution)
+{
+ Bool wire = MI_IS_WIREFRAME(mi);
+ GLfloat th;
+ GLfloat step = M_PI*2 / resolution;
+ GLfloat thickness = 0.1; /* Dusk is about an hour wide. */
+ GLfloat c1[] = { 0, 0, 0, 1 };
+ GLfloat c2[] = { 0, 0, 0, 0 };
+
+ glPushMatrix();
+ if (wire)
+ {
+ c1[0] = c1[1] = 0.5;
+ c2[2] = 0.5;
+ glLineWidth (4);
+ }
+ glRotatef (90, 1, 0, 0);
+ glScalef (1.02, 1.02, 1.02);
+ glBegin (wire ? GL_LINES : GL_QUAD_STRIP);
+ for (th = 0; th < M_PI*2 + step; th += step)
+ {
+ GLfloat x = cos(th);
+ GLfloat y = sin(th);
+ glColor4fv (c1);
+ if (!do_texture)
+ glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, c1);
+ glNormal3f (x, y, 0);
+ glVertex3f (x, y, thickness);
+ glColor4fv (c2);
+ if (!do_texture)
+ glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, c2);
+ glVertex3f (x, y, -thickness);
+ }
+ glEnd();
+
+ /* There's a bit of a spike in the shading where the tube overlaps
+ the sphere, so extend the sphere a lot to try and avoid that. */
+# if 0 /* Nope, that doesn't help. */
+ glColor4fv (c1);
+ if (!do_texture)
+ glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, c1);
+ glBegin (wire ? GL_LINES : GL_QUAD_STRIP);
+ for (th = 0; th < M_PI*2 + step; th += step)
+ {
+ GLfloat x = cos(th);
+ GLfloat y = sin(th);
+ glNormal3f (x, y, 0);
+ glVertex3f (x, y, thickness);
+ glVertex3f (x, y, thickness + 10);
+ }
+ glEnd();
+
+ glColor4fv (c2);
+ if (!do_texture)
+ glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, c2);
+ glBegin (wire ? GL_LINES : GL_QUAD_STRIP);
+ for (th = 0; th < M_PI*2 + step; th += step)
+ {
+ GLfloat x = cos(th);
+ GLfloat y = sin(th);
+ glNormal3f (x, y, 0);
+ glVertex3f (x, y, -thickness);
+ glVertex3f (x, y, -thickness - 10);
+ }
+ glEnd();
+# endif /* 0 */
+
+ glPopMatrix();
+}
+#endif /* BLENDED_TERMINATOR */
+
+