From http://www.jwz.org/xscreensaver/xscreensaver-5.40.tar.gz
[xscreensaver] / hacks / glx / tube.c
index a21682501fb63f0a86fcda4c14c6e826a122f421..a5c0c96e0f6b4be593a9c2e0e260d2f2fbb803a2 100644 (file)
@@ -1,4 +1,4 @@
-/* tube, Copyright (c) 2001-2010 Jamie Zawinski <jwz@jwz.org>
+/* tube, Copyright (c) 2001-2012 Jamie Zawinski <jwz@jwz.org>
  * Utility functions to create tubes and cones in GL.
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
 #include <stdlib.h>
 
 #ifdef HAVE_COCOA
-# include <OpenGL/gl.h>
+#elif defined(HAVE_ANDROID)
+# include <GLES/gl.h>
 #else
 # include <GL/gl.h>
 #endif
 
+#ifdef HAVE_JWZGLES
+# include "jwzgles.h"
+#endif /* HAVE_JWZGLES */
+
 #include "tube.h"
 
 typedef struct { GLfloat x, y, z; } XYZ;
 
+
 static int
 unit_tube (int faces, int smooth, int caps_p, int wire_p)
 {
@@ -132,6 +138,7 @@ unit_tube (int faces, int smooth, int caps_p, int wire_p)
   glNormalPointer   (   GL_FLOAT, sizeof(*array), &array[0].n);
   glTexCoordPointer (2, GL_FLOAT, sizeof(*array), &array[0].s);
 
+  glFrontFace(GL_CCW);
   glDrawArrays ((wire_p ? GL_LINES :
                  (smooth ? GL_TRIANGLE_STRIP : GL_TRIANGLES)),
                 0, out);
@@ -178,9 +185,12 @@ unit_tube (int faces, int smooth, int caps_p, int wire_p)
         glNormalPointer   (   GL_FLOAT, sizeof(*array), &array[0].n);
         glTexCoordPointer (2, GL_FLOAT, sizeof(*array), &array[0].s);
 
+        glFrontFace(GL_CCW);
         glDrawArrays ((wire_p ? GL_LINE_LOOP : GL_TRIANGLE_FAN), 0, out);
       }
 
+  free(array);
+
   return polys;
 }
 
@@ -272,6 +282,7 @@ unit_cone (int faces, int smooth, int cap_p, int wire_p)
   glNormalPointer   (   GL_FLOAT, sizeof(*array), &array[0].n);
   glTexCoordPointer (2, GL_FLOAT, sizeof(*array), &array[0].s);
 
+  glFrontFace(GL_CCW);
   glDrawArrays ((wire_p ? GL_LINES : GL_TRIANGLES), 0, out);
 
 
@@ -312,6 +323,7 @@ unit_cone (int faces, int smooth, int cap_p, int wire_p)
       glNormalPointer   (   GL_FLOAT, sizeof(*array), &array[0].n);
       glTexCoordPointer (2, GL_FLOAT, sizeof(*array), &array[0].s);
 
+      glFrontFace(GL_CCW);
       glDrawArrays ((wire_p ? GL_LINE_LOOP : GL_TRIANGLE_FAN), 0, out);
     }