ftp://ftp.linux.ncsu.edu/mirror/ftp.redhat.com/pub/redhat/linux/enterprise/4/en/os...
[xscreensaver] / hacks / glx / glplanet.c
index 19523a59d91c1a71f08d578402131897e6de0da3..e81199956d56fe22f00d4b17329297fd1ea059e0 100644 (file)
  */
 
 
-/*-
- * due to a Bug/feature in VMS X11/Intrinsic.h has to be placed before xlock.
- * otherwise caddr_t is not defined correctly
- */
-
-#include <X11/Intrinsic.h>
-
 #ifdef STANDALONE
 # define PROGCLASS                                             "Planet"
 # define HACK_INIT                                             init_planet
@@ -50,7 +43,7 @@
 # define HACK_HANDLE_EVENT                             planet_handle_event
 # define EVENT_MASK                                            PointerMotionMask
 # define planet_opts                                   xlockmore_opts
-#define DEFAULTS       "*delay:                        15000   \n"     \
+#define DEFAULTS       "*delay:                        20000   \n"     \
                                        "*showFPS:                      False   \n" \
                     "*rotate:           True    \n" \
                     "*roll:             True    \n" \
@@ -89,7 +82,7 @@
 #define DEF_TEXTURE "True"
 #define DEF_STARS   "True"
 #define DEF_LIGHT   "True"
-#define DEF_RESOLUTION "64"
+#define DEF_RESOLUTION "128"
 #define DEF_IMAGE   "BUILTIN"
 
 #undef countof
@@ -105,31 +98,31 @@ static char *which_image;
 static int resolution;
 
 static XrmOptionDescRec opts[] = {
-  {"-rotate",  ".glplanet.rotate",  XrmoptionNoArg, (caddr_t) "true" },
-  {"+rotate",  ".glplanet.rotate",  XrmoptionNoArg, (caddr_t) "false" },
-  {"-roll",    ".glplanet.roll",    XrmoptionNoArg, (caddr_t) "true" },
-  {"+roll",    ".glplanet.roll",    XrmoptionNoArg, (caddr_t) "false" },
-  {"-wander",  ".glplanet.wander",  XrmoptionNoArg, (caddr_t) "true" },
-  {"+wander",  ".glplanet.wander",  XrmoptionNoArg, (caddr_t) "false" },
-  {"-texture", ".glplanet.texture", XrmoptionNoArg, (caddr_t) "true" },
-  {"+texture", ".glplanet.texture", XrmoptionNoArg, (caddr_t) "false" },
-  {"-stars",   ".glplanet.stars",   XrmoptionNoArg, (caddr_t) "true" },
-  {"+stars",   ".glplanet.stars",   XrmoptionNoArg, (caddr_t) "false" },
-  {"-light",   ".glplanet.light",   XrmoptionNoArg, (caddr_t) "true" },
-  {"+light",   ".glplanet.light",   XrmoptionNoArg, (caddr_t) "false" },
-  {"-image",   ".glplanet.image",  XrmoptionSepArg, (caddr_t) 0 },
-  {"-resolution", ".glplanet.resolution", XrmoptionSepArg, (caddr_t) 0 },
+  {"-rotate",  ".glplanet.rotate",  XrmoptionNoArg, "true" },
+  {"+rotate",  ".glplanet.rotate",  XrmoptionNoArg, "false" },
+  {"-roll",    ".glplanet.roll",    XrmoptionNoArg, "true" },
+  {"+roll",    ".glplanet.roll",    XrmoptionNoArg, "false" },
+  {"-wander",  ".glplanet.wander",  XrmoptionNoArg, "true" },
+  {"+wander",  ".glplanet.wander",  XrmoptionNoArg, "false" },
+  {"-texture", ".glplanet.texture", XrmoptionNoArg, "true" },
+  {"+texture", ".glplanet.texture", XrmoptionNoArg, "false" },
+  {"-stars",   ".glplanet.stars",   XrmoptionNoArg, "true" },
+  {"+stars",   ".glplanet.stars",   XrmoptionNoArg, "false" },
+  {"-light",   ".glplanet.light",   XrmoptionNoArg, "true" },
+  {"+light",   ".glplanet.light",   XrmoptionNoArg, "false" },
+  {"-image",   ".glplanet.image",  XrmoptionSepArg, 0 },
+  {"-resolution", ".glplanet.resolution", XrmoptionSepArg, 0 },
 };
 
 static argtype vars[] = {
-  {(caddr_t *) &do_rotate,   "rotate",  "Rotate",  DEF_ROTATE,  t_Bool},
-  {(caddr_t *) &do_roll,     "roll",    "Roll",    DEF_ROLL,    t_Bool},
-  {(caddr_t *) &do_wander,   "wander",  "Wander",  DEF_WANDER,  t_Bool},
-  {(caddr_t *) &do_texture,  "texture", "Texture", DEF_TEXTURE, t_Bool},
-  {(caddr_t *) &do_stars,  "stars", "Stars", DEF_STARS, t_Bool},
-  {(caddr_t *) &do_light,    "light",   "Light",   DEF_LIGHT,   t_Bool},
-  {(caddr_t *) &which_image, "image",   "Image",   DEF_IMAGE,   t_String},
-  {(caddr_t *) &resolution,  "resolution","Resolution", DEF_RESOLUTION, t_Int},
+  {&do_rotate,   "rotate",  "Rotate",  DEF_ROTATE,  t_Bool},
+  {&do_roll,     "roll",    "Roll",    DEF_ROLL,    t_Bool},
+  {&do_wander,   "wander",  "Wander",  DEF_WANDER,  t_Bool},
+  {&do_texture,  "texture", "Texture", DEF_TEXTURE, t_Bool},
+  {&do_stars,    "stars",   "Stars",   DEF_STARS,   t_Bool},
+  {&do_light,    "light",   "Light",   DEF_LIGHT,   t_Bool},
+  {&which_image, "image",   "Image",   DEF_IMAGE,   t_String},
+  {&resolution,  "resolution","Resolution", DEF_RESOLUTION, t_Int},
 };
 
 ModeSpecOpt planet_opts = {countof(opts), opts, countof(vars), vars, NULL};
@@ -142,7 +135,13 @@ ModStruct   planet_description =
  "Animates texture mapped sphere (planet)", 0, NULL};
 #endif
 
+# ifdef __GNUC__
+  __extension__  /* don't warn about "string length is greater than the length
+                    ISO C89 compilers are required to support" when including
+                    the following XPM file... */
+# endif
 #include "../images/earth.xpm"
+
 #include "xpm-ximage.h"
 #include "rotator.h"
 #include "gltrackball.h"
@@ -213,7 +212,10 @@ setup_xpm_texture (ModeInfo *mi, char **xpm_data)
   clear_gl_error();
   glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,
                image->width, image->height, 0,
-               GL_RGBA, GL_UNSIGNED_BYTE, image->data);
+               GL_RGBA,
+               /* GL_UNSIGNED_BYTE, */
+               GL_UNSIGNED_INT_8_8_8_8_REV,
+               image->data);
   sprintf (buf, "builtin texture (%dx%d)", image->width, image->height);
   check_gl_error(buf);
 
@@ -240,7 +242,10 @@ setup_file_texture (ModeInfo *mi, char *filename)
   clear_gl_error();
   glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,
                image->width, image->height, 0,
-               GL_RGBA, GL_UNSIGNED_BYTE, image->data);
+               GL_RGBA,
+               /* GL_UNSIGNED_BYTE, */
+               GL_UNSIGNED_INT_8_8_8_8_REV,
+               image->data);
   sprintf (buf, "texture: %.100s (%dx%d)",
            filename, image->width, image->height);
   check_gl_error(buf);
@@ -537,8 +542,8 @@ init_planet (ModeInfo * mi)
   }
 
   {
-    double spin_speed   = 1.0;
-    double wander_speed = 0.05;
+    double spin_speed   = 0.5;
+    double wander_speed = 0.02;
     gp->rot = make_rotator (do_roll ? spin_speed : 0,
                             do_roll ? spin_speed : 0,
                             0, 1,
@@ -645,7 +650,7 @@ draw_planet (ModeInfo * mi)
   glRotatef (gp->z * 360, 0.0, 0.0, 1.0);
   if (do_rotate && !gp->button_down_p)
     {
-      gp->z -= 0.01;     /* the sun sets in the west */
+      gp->z -= 0.005;     /* the sun sets in the west */
       if (gp->z < 0) gp->z += 1;
     }