X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fglx%2Fglmatrix.c;h=77337500e203cf42f04f6ebb3af7cfbe6d02d922;hb=9c9d475ff889ed8be02e8ce8c17da28b93278fca;hp=1fa1123cf394dc4e30ff3048034a50aa5e3603df;hpb=96bdd7cf6ea60c418a76921acaf0e34d6f5be930;p=xscreensaver diff --git a/hacks/glx/glmatrix.c b/hacks/glx/glmatrix.c index 1fa1123c..77337500 100644 --- a/hacks/glx/glmatrix.c +++ b/hacks/glx/glmatrix.c @@ -1,4 +1,4 @@ -/* glmatrix, Copyright (c) 2003 Jamie Zawinski +/* glmatrix, Copyright (c) 2003, 2004 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -57,6 +57,11 @@ extern XtAppContext app; #include "xpm-ximage.h" #include +#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/matrix3.xpm" #ifdef USE_GL /* whole file */ @@ -204,13 +209,13 @@ static XrmOptionDescRec opts[] = { }; static argtype vars[] = { - {(caddr_t *) &mode_str, "mode", "Mode", DEF_MODE, t_String}, - {(caddr_t *) &speed, "speed", "Speed", DEF_SPEED, t_Float}, - {(caddr_t *) &density, "density", "Density", DEF_DENSITY, t_Float}, - {(caddr_t *) &do_fog, "fog", "Fog", DEF_FOG, t_Bool}, - {(caddr_t *) &do_waves, "waves", "Waves", DEF_WAVES, t_Bool}, - {(caddr_t *) &do_rotate, "rotate", "Rotate", DEF_ROTATE, t_Bool}, - {(caddr_t *) &do_texture, "texture", "Texture", DEF_TEXTURE, t_Bool}, + {&mode_str, "mode", "Mode", DEF_MODE, t_String}, + {&speed, "speed", "Speed", DEF_SPEED, t_Float}, + {&density, "density", "Density", DEF_DENSITY, t_Float}, + {&do_fog, "fog", "Fog", DEF_FOG, t_Bool}, + {&do_waves, "waves", "Waves", DEF_WAVES, t_Bool}, + {&do_rotate, "rotate", "Rotate", DEF_ROTATE, t_Bool}, + {&do_texture, "texture", "Texture", DEF_TEXTURE, t_Bool}, }; ModeSpecOpt matrix_opts = {countof(opts), opts, countof(vars), vars, NULL}; @@ -333,7 +338,7 @@ draw_glyph (ModeInfo *mi, int glyph, int wire = MI_IS_WIREFRAME(mi); GLfloat w = mp->tex_char_width; GLfloat h = mp->tex_char_height; - GLfloat cx, cy; + GLfloat cx = 0, cy = 0; GLfloat S = 1; Bool spinner_p = (glyph < 0); @@ -395,8 +400,8 @@ draw_glyph (ModeInfo *mi, int glyph, we fade towards a completely solid rectangle. WTF? So, for now, instead of changing the alpha, just make the colors - be darker. This isn't quite right (it causes a large dark glyph - to occlude the brighter glyphs behind it) but it's close... + be darker. This works out ok so long as we use GL_ONE in + glBlendFunc, so that stacked glyph colors are added together. */ r *= a; g *= a; @@ -587,6 +592,7 @@ matrix_handle_event (ModeInfo *mi, XEvent *event) } +#if 0 static Bool bigendian (void) { @@ -594,6 +600,7 @@ bigendian (void) u.i = 1; return !u.c[0]; } +#endif /* The image with the characters in it is 512x598, meaning that it needs to @@ -719,9 +726,15 @@ load_textures (ModeInfo *mi, Bool flip_p) */ { int rpos, gpos, bpos, apos; /* bitfield positions */ +#if 0 + /* #### Cherub says that the little-endian case must be taken on MacOSX, + or else the colors/alpha are the wrong way around. How can + that be the case? + */ if (bigendian()) rpos = 24, gpos = 16, bpos = 8, apos = 0; else +#endif rpos = 0, gpos = 8, bpos = 16, apos = 24; for (y = 0; y < xi->height; y++) @@ -850,7 +863,13 @@ init_matrix (ModeInfo *mi) load_textures (mi, flip_p); glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); - glBlendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA); + + /* Jeff Epler points out: + By using GL_ONE instead of GL_SRC_ALPHA, glyphs are added to + each other, so that a bright glyph with a darker one in front + is a little brighter than the bright glyph alone. + */ + glBlendFunc (GL_ONE_MINUS_SRC_ALPHA, /* GL_SRC_ALPHA */ GL_ONE); } /* to scale coverage-percent to strips, this number looks about right... */