-/* glmatrix, Copyright (c) 2003, 2004 Jamie Zawinski <jwz@jwz.org>
+/* glmatrix, Copyright (c) 2003-2018 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
"*showFPS: False \n" \
"*wireframe: False \n" \
-# define refresh_matrix 0
+# define free_matrix 0
# define release_matrix 0
#undef countof
#define countof(x) (sizeof((x))/sizeof((*x)))
#define BELLRAND(n) ((frand((n)) + frand((n)) + frand((n))) / 3)
#include "xlockmore.h"
-#include "xpm-ximage.h"
+#include "ximage-loader.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"
+#include "images/gen/matrix3_png.h"
#ifdef USE_GL /* whole file */
reshape_matrix (ModeInfo *mi, int width, int height)
{
GLfloat h = (GLfloat) height / (GLfloat) width;
+ int y = 0;
+
+ if (width > height * 5) { /* tiny window: show middle */
+ height = width * 9/16;
+ y = -height/2;
+ h = height / (GLfloat) width;
+ }
- glViewport (0, 0, (GLint) width, (GLint) height);
+ glViewport (0, y, (GLint) width, (GLint) height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
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)
int cw, ch;
int orig_w, orig_h;
- /* The Matrix XPM is 512x598 -- but GL texture sizes must be powers of 2.
+ /* The Matrix image is 512x598 -- but GL texture sizes must be powers of 2.
So we waste some padding rows to round up.
*/
- xi = xpm_to_ximage (mi->dpy, mi->xgwa.visual, mi->xgwa.colormap,
- matrix3_xpm);
+ xi = image_data_to_ximage (mi->dpy, mi->xgwa.visual,
+ matrix3_png, sizeof(matrix3_png));
orig_w = xi->width;
orig_h = xi->height;
mp->real_char_rows = CHAR_ROWS;
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,
- GL_UNSIGNED_INT_8_8_8_8_REV, xi->data);
+ GL_UNSIGNED_BYTE, xi->data);
{
char buf[255];
sprintf (buf, "creating %dx%d texture:", xi->width, xi->height);
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);
mp = &mps[MI_SCREEN(mi)];
mp->glx_context = init_GL(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_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);
- }
+ load_textures (mi, flip_p);
/* to scale coverage-percent to strips, this number looks about right... */
mp->nstrips = (int) (density * 2.2);
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)
{