X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?p=xscreensaver;a=blobdiff_plain;f=hacks%2Fglx%2Fsphere.c;h=ff456cd4316b3ce9a1b5d8ec08d97e62e7614e9e;hp=182d0084667359696ec672b4ecae56bef08fff88;hb=6afd6db0ae9396cd7ff897ade597cd5483f49b0e;hpb=dba664f31aa87285db4d76cf8c5e66335299703a diff --git a/hacks/glx/sphere.c b/hacks/glx/sphere.c index 182d0084..ff456cd4 100644 --- a/hacks/glx/sphere.c +++ b/hacks/glx/sphere.c @@ -1,5 +1,5 @@ /* sphere, Copyright (c) 2002 Paul Bourke , - * Copyright (c) 2010 Jamie Zawinski + * Copyright (c) 2010-2014 Jamie Zawinski * Utility function to create a unit sphere in GL. * * Permission to use, copy, modify, distribute, and sell this software and its @@ -36,8 +36,8 @@ typedef struct { GLfloat x, y, z; } XYZ; -int -unit_sphere (int stacks, int slices, int wire_p) +static int +unit_sphere_1 (int stacks, int slices, int wire_p, int half_p) { int polys = 0; int i,j; @@ -47,6 +47,7 @@ unit_sphere (int stacks, int slices, int wire_p) XYZ c = {0, 0, 0}; /* center */ double r = 1.0; /* radius */ int stacks2 = stacks * 2; + int end = (half_p ? stacks/2 : stacks); int mode = (wire_p ? GL_LINE_STRIP : GL_TRIANGLE_STRIP); @@ -70,7 +71,7 @@ unit_sphere (int stacks, int slices, int wire_p) goto END; } - for (j = 0; j < stacks; j++) + for (j = 0; j < end; j++) { theta1 = j * (M_PI+M_PI) / stacks2 - M_PI_2; theta2 = (j + 1) * (M_PI+M_PI) / stacks2 - M_PI_2; @@ -136,3 +137,16 @@ unit_sphere (int stacks, int slices, int wire_p) return polys; } + + +int +unit_sphere (int stacks, int slices, int wire_p) +{ + return unit_sphere_1 (stacks, slices, wire_p, 0); +} + +int +unit_dome (int stacks, int slices, int wire_p) +{ + return unit_sphere_1 (stacks, slices, wire_p, 1); +}