http://www.jwz.org/xscreensaver/xscreensaver-5.13.tar.gz
[xscreensaver] / hacks / glx / flurry.c
index 0014cd818e7589535dc5f1abb3fa0a59083cd3bd..08305b0a1ded2351a83a5f5755479a87ca570964 100644 (file)
@@ -37,38 +37,22 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 /* flurry */
 
-#if !defined( lint ) && !defined( SABER )
+#if 0
 static const char sccsid[] = "@(#)flurry.c     4.07 97/11/24 xlockmore";
-
 #endif
 
-/*-
- * due to a Bug/feature in VMS X11/Intrinsic.h has to be placed before xlock.
- * otherwise caddr_t is not defined correctly
- */
-
-#define DEF_PRESET     "classic"
+#define DEF_PRESET     "random"
 #define DEF_BRIGHTNESS "8"
 
-#include <X11/Intrinsic.h>
-
-# define PROGCLASS             "Flurry"
-# define HACK_INIT             init_flurry
-# define HACK_DRAW             draw_flurry
-# define HACK_RESHAPE          reshape_flurry
-# define HACK_HANDLE_EVENT     flurry_handle_event
-# define EVENT_MASK            PointerMotionMask
-# define flurry_opts           xlockmore_opts
-# define DEFAULTS              "*showFPS:      False   \n" \
-                               "*preset:       " DEF_PRESET "   \n"
+# define DEFAULTS              "*delay:      10000 \n" \
+                                               "*showFPS:    False \n"
 
+# define refresh_flurry 0
+# define flurry_handle_event 0
 # include "xlockmore.h"                /* from the xscreensaver distribution */
 
 #ifdef USE_GL
 
-#include "rotator.h"
-#include "gltrackball.h"
-
 static char *preset_str;
 
 static XrmOptionDescRec opts[] = {
@@ -76,12 +60,12 @@ static XrmOptionDescRec opts[] = {
 };
 
 static argtype vars[] = {
-    {(caddr_t *) &preset_str, "preset",     "Preset",     DEF_PRESET,     t_String},
+    {&preset_str, "preset",     "Preset",     DEF_PRESET,     t_String},
 };
 
 #define countof(x) (sizeof((x))/sizeof((*x)))
 
-ModeSpecOpt flurry_opts = {countof(opts), opts, countof(vars), vars, NULL};
+ENTRYPOINT ModeSpecOpt flurry_opts = {countof(opts), opts, countof(vars), vars, NULL};
 
 #ifdef USE_MODULES
 ModStruct   flurry_description = {
@@ -102,19 +86,21 @@ ModStruct   flurry_description = {
 
 #endif
 
-#include <sys/time.h>
-#include <sys/sysctl.h>
-
 #include "flurry.h"
 
 global_info_t *flurry_info = NULL;
 
 static double gTimeCounter = 0.0;
 
+static
 double currentTime(void) {
   struct timeval tv;
-
-  gettimeofday(&tv, NULL);
+# ifdef GETTIMEOFDAY_TWO_ARGS
+  struct timezone tzp;
+  gettimeofday(&tv, &tzp);
+# else
+  gettimeofday(&tv);
+# endif
 
   return (double)tv.tv_sec + (double)tv.tv_usec / 1000000.0;
 }
@@ -129,13 +115,17 @@ double TimeInSecondsSinceStart (void) {
     return currentTime() - gTimeCounter;
 }
 
+#if 0
 #ifdef __ppc__
 static int IsAltiVecAvailable(void)
 {
     return 0;
 }
 #endif
+#endif
+
 
+static
 void delete_flurry_info(flurry_info_t *flurry)
 {
     int i;
@@ -146,9 +136,10 @@ void delete_flurry_info(flurry_info_t *flurry)
     {
        free(flurry->spark[i]);
     }
-    free(flurry);
+    /* free(flurry); */
 }
 
+static
 flurry_info_t *new_flurry_info(global_info_t *global, int streams, ColorModes colour, float thickness, float speed, double bf)
 {
     int i,k;
@@ -158,7 +149,9 @@ flurry_info_t *new_flurry_info(global_info_t *global, int streams, ColorModes co
 
     flurry->flurryRandomSeed = RandFlt(0.0, 300.0);
 
-    flurry->fOldTime = TimeInSecondsSinceStart() + flurry->flurryRandomSeed;
+       flurry->fOldTime = 0;
+       flurry->fTime = TimeInSecondsSinceStart() + flurry->flurryRandomSeed;
+       flurry->fDeltaTime = flurry->fTime - flurry->fOldTime;
 
     flurry->numStreams = streams;
     flurry->streamExpansion = thickness;
@@ -191,6 +184,7 @@ flurry_info_t *new_flurry_info(global_info_t *global, int streams, ColorModes co
     return flurry;
 }
 
+static
 void GLSetupRC(global_info_t *global)
 {
     /* setup the defaults for OpenGL */
@@ -209,13 +203,13 @@ void GLSetupRC(global_info_t *global)
     glMatrixMode(GL_MODELVIEW);
     glLoadIdentity();
 
-    glClearColor(0.0,0.0,0.0,1.0);
     glClear(GL_COLOR_BUFFER_BIT);
 
     glEnableClientState(GL_COLOR_ARRAY);       
     glEnableClientState(GL_VERTEX_ARRAY);      
     glEnableClientState(GL_TEXTURE_COORD_ARRAY);
     
+#if 0
 #ifdef __ppc__
     global->optMode = OPT_MODE_SCALAR_FRSQRTE;
 
@@ -226,8 +220,10 @@ void GLSetupRC(global_info_t *global)
 #else
     global->optMode = OPT_MODE_SCALAR_BASE;
 #endif
+#endif /* 0 */
 }
 
+static
 void GLRenderScene(global_info_t *global, flurry_info_t *flurry, double b)
 {
     int i;
@@ -263,6 +259,7 @@ void GLRenderScene(global_info_t *global, flurry_info_t *flurry, double b)
        case OPT_MODE_SCALAR_BASE:
            UpdateSmoke_ScalarBase(global, flurry, flurry->s);
            break;
+#if 0
 #ifdef __ppc__
        case OPT_MODE_SCALAR_FRSQRTE:
            UpdateSmoke_ScalarFrsqrte(global, flurry, flurry->s);
@@ -276,6 +273,8 @@ void GLRenderScene(global_info_t *global, flurry_info_t *flurry, double b)
            UpdateSmoke_VectorUnrolled(global, flurry, flurry->s);
            break;
 #endif
+#endif /* 0 */
+
        default:
            break;
     }
@@ -287,17 +286,21 @@ void GLRenderScene(global_info_t *global, flurry_info_t *flurry, double b)
 
     switch(global->optMode) {
        case OPT_MODE_SCALAR_BASE:
+#if 0
 #ifdef __ppc__
        case OPT_MODE_SCALAR_FRSQRTE:
 #endif
+#endif /* 0 */
            DrawSmoke_Scalar(global, flurry, flurry->s, b);
            break;
+#if 0
 #ifdef __VEC__
        case OPT_MODE_VECTOR_SIMPLE:
        case OPT_MODE_VECTOR_UNROLLED:
            DrawSmoke_Vector(global, flurry, flurry->s, b);
            break;
 #endif
+#endif /* 0 */
        default:
            break;
     }    
@@ -305,6 +308,7 @@ void GLRenderScene(global_info_t *global, flurry_info_t *flurry, double b)
     glDisable(GL_TEXTURE_2D);
 }
 
+static
 void GLResize(global_info_t *global, float w, float h)
 {
     global->sys_glWidth = w;
@@ -312,7 +316,7 @@ void GLResize(global_info_t *global, float w, float h)
 }
 
 /* new window size or exposure */
-void reshape_flurry(ModeInfo *mi, int width, int height)
+ENTRYPOINT void reshape_flurry(ModeInfo *mi, int width, int height)
 {
     global_info_t *global = flurry_info + MI_SCREEN(mi);
 
@@ -323,42 +327,12 @@ void reshape_flurry(ModeInfo *mi, int width, int height)
     glLoadIdentity();
     gluOrtho2D(0, width, 0, height);
     glMatrixMode(GL_MODELVIEW);
-
-    glClearColor(0.0, 0.0, 0.0, 1.0);
     glClear(GL_COLOR_BUFFER_BIT);
-
     glFlush();
-
     GLResize(global, (float)width, (float)height);
 }
 
-Bool
-flurry_handle_event (ModeInfo *mi, XEvent *event)
-{
-    global_info_t *global = flurry_info + MI_SCREEN(mi);
-
-    if (event->xany.type == ButtonPress && event->xbutton.button & Button1) {
-       global->button_down_p = True;
-       gltrackball_start (global->trackball,
-               event->xbutton.x, event->xbutton.y,
-               MI_WIDTH (mi), MI_HEIGHT (mi));
-       return True;
-    }
-    else if (event->xany.type == ButtonRelease && event->xbutton.button & Button1) {
-       global->button_down_p = False;
-       return True;
-    }
-    else if (event->xany.type == MotionNotify && global->button_down_p) {
-       gltrackball_track (global->trackball,
-               event->xmotion.x, event->xmotion.y,
-               MI_WIDTH (mi), MI_HEIGHT (mi));
-       return True;
-    }
-
-    return False;
-}
-
-void
+ENTRYPOINT void
 init_flurry(ModeInfo * mi)
 {
     int screen = MI_SCREEN(mi);
@@ -386,9 +360,6 @@ init_flurry(ModeInfo * mi)
 
     global->window = MI_WINDOW(mi);
 
-    global->rot = make_rotator(1, 1, 1, 1, 0, True);
-    global->trackball = gltrackball_init();
-
     global->flurry = NULL;
 
     if (!preset_str || !*preset_str) preset_str = DEF_PRESET;
@@ -427,7 +398,7 @@ init_flurry(ModeInfo * mi)
     case PRESET_FIRE: {
        flurry_info_t *flurry;
 
-       flurry = new_flurry_info(global, 12, slowCyclicColorMode, 10000.0, 0.0, 1.0);
+       flurry = new_flurry_info(global, 12, slowCyclicColorMode, 10000.0, 0.2, 1.0);
        flurry->next = global->flurry;
        global->flurry = flurry;        
         break;
@@ -499,7 +470,7 @@ init_flurry(ModeInfo * mi)
     }
 }
 
-void
+ENTRYPOINT void
 draw_flurry(ModeInfo * mi)
 {
     static int first = 1;
@@ -567,7 +538,7 @@ draw_flurry(ModeInfo * mi)
     glXSwapBuffers(display, window);
 }
 
-void
+ENTRYPOINT void
 release_flurry(ModeInfo * mi)
 {
     if (flurry_info != NULL) {
@@ -591,4 +562,6 @@ release_flurry(ModeInfo * mi)
     FreeAllGL(mi);
 }
 
+XSCREENSAVER_MODULE ("Flurry", flurry)
+
 #endif