-/* glmatrix, Copyright (c) 2003 Jamie Zawinski <jwz@jwz.org>
+/* glmatrix, Copyright (c) 2003, 2004 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
#include "xpm-ximage.h"
#include <ctype.h>
+#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 */
};
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};
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);
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;
}
+#if 0
static Bool
bigendian (void)
{
u.i = 1;
return !u.c[0];
}
+#endif
/* The image with the characters in it is 512x598, meaning that it needs to
*/
{
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++)
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... */