X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?p=xscreensaver;a=blobdiff_plain;f=hacks%2Fglx%2Fxpm-ximage.c;h=c32250a4b9d9af6a14b252844674803e716013ad;hp=7d67728b117c5bad5b7d73a38d4f885ae528bc59;hb=0d6b320def9180cf907ceaed56b23a972a11b757;hpb=3f438031d610c7e15fd33876a879b97e290e05fb diff --git a/hacks/glx/xpm-ximage.c b/hacks/glx/xpm-ximage.c index 7d67728b..c32250a4 100644 --- a/hacks/glx/xpm-ximage.c +++ b/hacks/glx/xpm-ximage.c @@ -23,6 +23,15 @@ extern char *progname; +static Bool +bigendian (void) +{ + union { int i; char c[sizeof(int)]; } u; + u.i = 1; + return !u.c[0]; +} + + #if defined(HAVE_GDK_PIXBUF) # include @@ -86,6 +95,15 @@ xpm_to_ximage_1 (Display *dpy, Visual *visual, Colormap cmap, image = XCreateImage (dpy, visual, 32, ZPixmap, 0, 0, w, h, 32, 0); image->data = (char *) malloc(h * image->bytes_per_line); + + /* Set the bit order in the XImage structure to whatever the + local host's native bit order is. + */ + image->bitmap_bit_order = + image->byte_order = + (bigendian() ? MSBFirst : LSBFirst); + + if (!image->data) { fprintf (stderr, "%s: out of memory (%d x %d)\n", progname, w, h); @@ -165,15 +183,6 @@ xpm_to_ximage_1 (Display *dpy, Visual *visual, Colormap cmap, #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) -#if 0 -static Bool -bigendian (void) -{ - union { int i; char c[sizeof(int)]; } u; - u.i = 1; - return !u.c[0]; -} -#endif /* The libxpm version of this function... @@ -269,6 +278,11 @@ xpm_to_ximage_1 (Display *dpy, Visual *visual, Colormap cmap, things as necessary) OpenGL pretends everything is client-side, so we need to pack things in the right order for the client machine. */ + + ximage->bitmap_bit_order = + ximage->byte_order = + (bigendian() ? MSBFirst : LSBFirst); + #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