X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?p=xscreensaver;a=blobdiff_plain;f=hacks%2Fglx%2Fglmatrix.c;h=4782c1cc7f65ce912822f00a26e8d9caa8ae1a4f;hp=55eda8ebc5fe472103b3616915259e8b6ad69b7b;hb=4361b69d3178d7fc98d0388f9a223af6c2651aba;hpb=49f5b54f312fe4ac2e9bc47581a72451bd0e8439 diff --git a/hacks/glx/glmatrix.c b/hacks/glx/glmatrix.c index 55eda8eb..4782c1cc 100644 --- a/hacks/glx/glmatrix.c +++ b/hacks/glx/glmatrix.c @@ -51,8 +51,6 @@ #define DEF_MODE "Matrix" #define DEF_TIMEFMT " %l%M%p " -#include "gllist.h" - #define CHAR_COLS 16 #define CHAR_ROWS 13 @@ -401,15 +399,17 @@ draw_glyph (ModeInfo *mi, int glyph, Bool highlight, } { - GLfloat r, g, b, a = 1; + GLfloat r, g, b, a; if (highlight) brightness *= 2; if (!do_texture && !spinner_p) - r = b = 0, g = brightness; + r = b = 0, g = 1; else - r = g = b = brightness; + r = g = b = 1; + + a = brightness; /* If the glyph is very close to the screen (meaning it is very large, and is about to splash into the screen and vanish) then start fading @@ -424,23 +424,7 @@ draw_glyph (ModeInfo *mi, int glyph, Bool highlight, if (i < 0) i = 0; else if (i >= WAVE_SIZE) i = WAVE_SIZE-1; - a = mp->brightness_ramp[i]; -#if 1 - /* I don't understand this -- if I change the alpha on the color of - the quad, I'd expect that to make the quad more transparent. - But instead, it seems to be making the transparent parts of the - texture on the quad be *less* transparent! So as we fade out, - we fade towards a completely solid rectangle. WTF? - - So, for now, instead of changing the alpha, just make the colors - 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; - b *= a; - a = 1; -#endif + a *= mp->brightness_ramp[i]; } glColor4f (r,g,b,a); @@ -648,6 +632,10 @@ bigendian (void) If this hack ever grows into something that displays full Latin1 text, well then, Something Else Will Need To Be Done. + + Since currently GLMatrix does not run textclient / xscreensaver-text, + it's not an issue. (XMatrix does that.) + */ static void spank_image (matrix_configuration *mp, XImage *xi) @@ -781,7 +769,7 @@ load_textures (ModeInfo *mi, Bool flip_p) unsigned char r = (p >> rpos) & 0xFF; unsigned char g = (p >> gpos) & 0xFF; unsigned char b = (p >> bpos) & 0xFF; - unsigned char a = ~g; + unsigned char a = g; g = 0xFF; p = (r << rpos) | (g << gpos) | (b << bpos) | (a << apos); XPutPixel (xi, x, y, p); @@ -794,7 +782,8 @@ load_textures (ModeInfo *mi, Bool flip_p) glGenTextures (1, &mp->texture); glPixelStorei (GL_UNPACK_ALIGNMENT, 4); - glPixelStorei (GL_UNPACK_ROW_LENGTH, xi->width); + /* messes up -fps */ + /* glPixelStorei (GL_UNPACK_ROW_LENGTH, xi->width);*/ glBindTexture (GL_TEXTURE_2D, mp->texture); check_gl_error ("texture init"); glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, xi->width, xi->height, 0, GL_RGBA, @@ -833,14 +822,7 @@ init_matrix (ModeInfo *mi) if (wire) do_texture = False; - if (!mps) { - mps = (matrix_configuration *) - calloc (MI_NUM_SCREENS(mi), sizeof (matrix_configuration)); - if (!mps) { - fprintf(stderr, "%s: out of memory\n", progname); - exit(1); - } - } + MI_INIT (mi, mps, NULL); mp = &mps[MI_SCREEN(mi)]; mp->glx_context = init_GL(mi); @@ -895,18 +877,7 @@ init_matrix (ModeInfo *mi) glEnable(GL_NORMALIZE); if (do_texture) - { - load_textures (mi, flip_p); - glEnable(GL_TEXTURE_2D); - glEnable(GL_BLEND); - - /* 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); - } + load_textures (mi, flip_p); /* to scale coverage-percent to strips, this number looks about right... */ mp->nstrips = (int) (density * 2.2); @@ -1018,6 +989,20 @@ draw_matrix (ModeInfo *mi) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix (); + glRotatef(current_device_rotation(), 0, 0, 1); + + if (do_texture) + { + glEnable(GL_TEXTURE_2D); + glEnable(GL_BLEND); + + /* Jeff Epler points out: + By using GL_ONE instead of GL_SRC_ONE_MINUS_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_SRC_ALPHA, GL_ONE); + } if (do_rotate) {