X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fglx%2Fsphere.c;h=10e86d7698e1fd6b81229034067a9f5ae39deb73;hb=de460e831dc8578acfa8b72251ab9346c99c1f96;hp=5aba74f0ddffbdf2c46dbe072f9ba2d84191d819;hpb=cccbddbc4140cf9a06d7d95cc5c0ca36eb5d6e28;p=xscreensaver diff --git a/hacks/glx/sphere.c b/hacks/glx/sphere.c index 5aba74f0..10e86d76 100644 --- a/hacks/glx/sphere.c +++ b/hacks/glx/sphere.c @@ -1,4 +1,4 @@ -/* sphere, Copyright (c) 2002 Paul Bourke +/* sphere, Copyright (c) 2002, 2008 Paul Bourke * Utility function to create a unit sphere in GL. * * Permission to use, copy, modify, distribute, and sell this software and its @@ -15,21 +15,31 @@ * http://astronomy.swin.edu.au/~pbourke/opengl/sphere/ */ -#include "config.h" -#include #include -#include +#include + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#ifdef HAVE_COCOA +# include +#else +# include +#endif +#include "sphere.h" typedef struct { GLfloat x, y, z; } XYZ; -void -unit_sphere (int stacks, int slices, Bool wire) +int +unit_sphere (int stacks, int slices, int wire_p) { + int polys = 0; int i,j; double theta1, theta2, theta3; XYZ e, p; - XYZ la, lb; + XYZ la = { 0, 0, 0 }, lb = { 0, 0, 0 }; XYZ c = {0, 0, 0}; /* center */ double r = 1.0; /* radius */ int stacks2 = stacks * 2; @@ -44,7 +54,7 @@ unit_sphere (int stacks, int slices, Bool wire) glBegin (GL_POINTS); glVertex3f (c.x, c.y, c.z); glEnd(); - return; + return 1; } glFrontFace(GL_CW); @@ -54,12 +64,12 @@ unit_sphere (int stacks, int slices, Bool wire) theta1 = j * (M_PI+M_PI) / stacks2 - M_PI_2; theta2 = (j + 1) * (M_PI+M_PI) / stacks2 - M_PI_2; - glBegin (wire ? GL_LINE_LOOP : GL_TRIANGLE_STRIP); + glBegin (wire_p ? GL_LINE_LOOP : GL_TRIANGLE_STRIP); for (i = 0; i <= slices; i++) { theta3 = i * (M_PI+M_PI) / slices; - if (wire && i != 0) + if (wire_p && i != 0) { glVertex3f (lb.x, lb.y, lb.z); glVertex3f (la.x, la.y, la.z); @@ -76,7 +86,7 @@ unit_sphere (int stacks, int slices, Bool wire) glTexCoord2f (i / (double)slices, 2*(j+1) / (double)stacks2); glVertex3f (p.x, p.y, p.z); - if (wire) la = p; + if (wire_p) la = p; e.x = cos(theta1) * cos(theta3); e.y = sin(theta1); @@ -89,8 +99,10 @@ unit_sphere (int stacks, int slices, Bool wire) glTexCoord2f (i / (double)slices, 2*j / (double)stacks2); glVertex3f (p.x, p.y, p.z); - if (wire) lb = p; + if (wire_p) lb = p; + polys++; } glEnd(); } + return polys; }