From http://www.jwz.org/xscreensaver/xscreensaver-5.37.tar.gz
[xscreensaver] / hacks / glx / flurry-smoke.c
index 4b8745103be8634396e21fb94658e3e76dfe4f1e..245e9f1b1c1867dfa056818277963c25bc215654 100644 (file)
@@ -32,6 +32,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 /* Smoke.cpp: implementation of the Smoke class. */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include "flurry.h"
 
 #define MAXANGLES 16384
@@ -164,7 +168,6 @@ void UpdateSmoke_ScalarBase(global_info_t *global, flurry_info_t *flurry, SmokeV
                 if ((((i*4)+k) % flurry->numStreams) == j) {
                     f *= 1.0f + streamBias;
                 }
-                
                 mag = f / (float) sqrt(rsquared);
                 
                 deltax -= (dx * mag);
@@ -194,6 +197,7 @@ void UpdateSmoke_ScalarBase(global_info_t *global, flurry_info_t *flurry, SmokeV
     }
 }
 
+#if 0
 #ifdef __ppc__
 
 void UpdateSmoke_ScalarFrsqrte(global_info_t *global, flurry_info_t *flurry, SmokeV *s)
@@ -242,11 +246,13 @@ void UpdateSmoke_ScalarFrsqrte(global_info_t *global, flurry_info_t *flurry, Smo
                 rsquared = (dx*dx+dy*dy+dz*dz);
                 f = streamSpeed * streamSpeedCoherenceFactor;
 
-                /* mag = f / (float) sqrt(rsquared); */
-
-                /* reciprocal square-root estimate replaced above divide and call to system sqrt() */
-                asm("frsqrte %0, %1" : "=f" (mag) : "f" (rsquared));
-                mag *= f;
+                mag = f / (float) sqrt(rsquared);
+                /*
+                    reciprocal square-root estimate replaced above divide and call to system sqrt()
+                
+                    asm("frsqrte %0, %1" : "=f" (mag) : "f" (rsquared));
+                    mag *= f;
+                */
 
                 s->p[s->nextParticle].delta[0].f[s->nextSubParticle] -= (dx * mag);
                 s->p[s->nextParticle].delta[1].f[s->nextSubParticle] -= (dy * mag);
@@ -307,18 +313,19 @@ void UpdateSmoke_ScalarFrsqrte(global_info_t *global, flurry_info_t *flurry, Smo
                 dz = s->p[i].position[2].f[k] - flurry->spark[j]->position[2];
                 rsquared = (dx*dx+dy*dy+dz*dz);
 
-                asm("fres %0, %1" : "=f" (f) : "f" (rsquared));
-                f *= gravity*frameRateModifier;
-
+                /*
+                    asm("fres %0, %1" : "=f" (f) : "f" (rsquared)); 
+                    f *= gravity*frameRateModifier;
+                */
+                f = ( gravity  * frameRateModifier ) / rsquared;
+                
                 if((((i*4)+k) % flurry->numStreams) == j) {
                     f *= 1.0f + streamBias;
                 }
 
-                /* mag = f / (float) sqrt(rsquared); */
+                mag = f / (float) sqrt(rsquared); 
 
                 /* reciprocal square-root estimate replaced above divide and call to system sqrt() */
-                asm("frsqrte %0, %1" : "=f" (mag) : "f" (rsquared));
-                mag *= f;
                 
                 deltax -= (dx * mag);
                 deltay -= (dy * mag);
@@ -411,8 +418,11 @@ void UpdateSmoke_VectorBase(global_info_t *global, flurry_info_t *flurry, SmokeV
                 rsquared = (dx*dx+dy*dy+dz*dz);
                 f = streamSpeed * streamSpeedCoherenceFactor;
 
-                asm("frsqrte %0, %1" : "=f" (mag) : "f" (rsquared));
-                mag *= f;
+                mag = f / (float) sqrt(rsquared);
+                /*
+                    asm("frsqrte %0, %1" : "=f" (mag) : "f" (rsquared));
+                    mag *= f;
+                */
 
                 s->p[s->nextParticle].delta[0].f[s->nextSubParticle] -= (dx * mag);
                 s->p[s->nextParticle].delta[1].f[s->nextSubParticle] -= (dy * mag);
@@ -623,8 +633,11 @@ void UpdateSmoke_VectorUnrolled(global_info_t *info, SmokeV *s)
                 rsquared = (dx*dx+dy*dy+dz*dz);
                 f = streamSpeed * streamSpeedCoherenceFactor;
 
-                asm("frsqrte %0, %1" : "=f" (mag) : "f" (rsquared));
-                mag *= f;
+                mag = f / (float) sqrt(rsquared);
+                /*
+                    asm("frsqrte %0, %1" : "=f" (mag) : "f" (rsquared));
+                    mag *= f;
+                */
 
                 s->p[s->nextParticle].delta[0].f[s->nextSubParticle] -= (dx * mag);
                 s->p[s->nextParticle].delta[1].f[s->nextSubParticle] -= (dy * mag);
@@ -918,6 +931,7 @@ void UpdateSmoke_VectorUnrolled(global_info_t *info, SmokeV *s)
 }
 
 #endif
+#endif /* 0 */
 
 void DrawSmoke_Scalar(global_info_t *global, flurry_info_t *flurry, SmokeV *s, float brightness)
 {
@@ -1008,12 +1022,10 @@ void DrawSmoke_Scalar(global_info_t *global, flurry_info_t *flurry, SmokeV *s, f
                                        s->p[i].animFrame.i[k] = 0;
                                }
                
-                               u0 = (s->p[i].animFrame.i[k]&&7) * 0.125f;
+                               u0 = (s->p[i].animFrame.i[k]& 7) * 0.125f;
                                v0 = (s->p[i].animFrame.i[k]>>3) * 0.125f;
                                u1 = u0 + 0.125f;
                                v1 = v0 + 0.125f;
-                               u1 = u0 + 0.125f;
-                               v1 = v0 + 0.125f;
                                cm = (1.375f - thisWidth/width);
                                if (s->p[i].dead.i[k] == 3)
                                {
@@ -1076,6 +1088,7 @@ void DrawSmoke_Scalar(global_info_t *global, flurry_info_t *flurry, SmokeV *s, f
        glDrawArrays(GL_QUADS,0,si*4);
 }
 
+#if 0
 #ifdef __VEC__
 
 void DrawSmoke_Vector(global_info_t *global, flurry_info_t *flurry, SmokeV *s, float brightness)
@@ -1425,3 +1438,4 @@ void DrawSmoke_Vector(global_info_t *global, flurry_info_t *flurry, SmokeV *s, f
 }
 
 #endif
+#endif /* 0 */