Enlightenment CVS committal Author : mej Project : eterm Module : Eterm
Dir : eterm/Eterm/src Modified Files: pixmap.c Log Message: Mon Jun 13 19:28:19 2005 Michael Jennings (mej) Cleanups and optimizations from Tres Melton <[EMAIL PROTECTED]>. ---------------------------------------------------------------------- =================================================================== RCS file: /cvsroot/enlightenment/eterm/Eterm/src/pixmap.c,v retrieving revision 1.112 retrieving revision 1.113 diff -u -3 -r1.112 -r1.113 --- pixmap.c 10 May 2005 18:59:50 -0000 1.112 +++ pixmap.c 13 Jun 2005 23:28:47 -0000 1.113 @@ -21,7 +21,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -static const char cvs_ident[] = "$Id: pixmap.c,v 1.112 2005/05/10 18:59:50 mej Exp $"; +static const char cvs_ident[] = "$Id: pixmap.c,v 1.113 2005/06/13 23:28:47 mej Exp $"; #include "config.h" #include "feature.h" @@ -57,6 +57,9 @@ # define WORDS_BIGENDIAN 0 #endif +/* Optimized check for rm, gm, and bm all < 256 */ +#define COLORMODS_HAVE_SATURATION(rm, gm, bm) ((rm|gm|bm) >> 8) + /* Assembler routines */ extern void shade_ximage_15_mmx(void *data, int bpl, int w, int h, int rm, int gm, int bm); extern void shade_ximage_16_mmx(void *data, int bpl, int w, int h, int rm, int gm, int bm); @@ -1557,7 +1560,7 @@ int x, y; ptr = (unsigned char *) data + (w * sizeof(DATA16)); - if ((rm <= 256) && (gm <= 256) && (bm <= 256)) { + if (!COLORMODS_HAVE_SATURATION(rm, gm, bm)) { /* No saturation */ for (y = h; --y >= 0;) { for (x = -w; x < 0; x++) { @@ -1579,12 +1582,12 @@ int r, g, b; b = ((DATA16 *) ptr)[x]; - r = ( (b >> 10 ) * rm ) >> 8; - r = ( r > 0x001f ) ? 0xfc00 : ( r << 10 ); - g = (((b >> 5 ) & 0x003f ) * gm ) >> 8; - g = ( g > 0x001f ) ? 0x03e0 : ( g << 5 ); - b = (( b & 0x001f ) * bm ) >> 8; - b = ( b > 0x001f ) ? 0x001f : b; + r = (((b >> 10) & 0x001f ) * rm) >> 8; + r = (r > 0x001f) ? 0x7c00 : (r << 10); + g = (((b >> 5) & 0x001f ) * gm) >> 8; + g = (g > 0x001f) ? 0x03e0 : (g << 5); + b = (((b >> 0) & 0x001f ) * bm) >> 8; + b = (b > 0x001f) ? 0x001f : (b << 0); ((DATA16 *) ptr)[x] = (r|g|b); } ptr += bpl; @@ -1600,7 +1603,7 @@ int x, y; ptr = (unsigned char *) data + (w * sizeof(DATA16)); - if ((rm <= 256) && (gm <= 256) && (bm <= 256)) { + if (!COLORMODS_HAVE_SATURATION(rm, gm, bm)) { /* No saturation */ for (y = h; --y >= 0;) { for (x = -w; x < 0; x++) { @@ -1618,15 +1621,16 @@ } } else { for (y = h; --y >= 0;) { - int r, g, b; for (x = -w; x < 0; x++) { + int r, g, b; + b = ((DATA16 *) ptr)[x]; - r = ( (b >> 11 ) * rm ) >> 8; - r = ( r > 0x001f ) ? 0xf800 : ( r << 11 ); - g = (((b >> 5 ) & 0x003f ) * gm ) >> 8; - g = ( g > 0x003f ) ? 0x07e0 : ( g << 5 ); - b = (( b & 0x001f ) * bm ) >> 8; - b = ( b > 0x001f ) ? 0x001f : b; + r = (((b >> 11) & 0x001f) * rm) >> 8; + r = (r > 0x001f) ? 0xf800 : (r << 11); + g = (((b >> 5) & 0x003f) * gm) >> 8; + g = (g > 0x003f) ? 0x07e0 : (g << 5); + b = (((b >> 0) & 0x001f) * bm) >> 8; + b = (b > 0x001f) ? 0x001f : (b << 0); ((DATA16 *) ptr)[x] = (r|g|b); } ptr += bpl; @@ -1642,18 +1646,18 @@ int x, y; ptr = (unsigned char *) data + (w * 4); - if ((rm <= 256) && (gm <= 256) && (bm <= 256)) { + if (!COLORMODS_HAVE_SATURATION(rm, gm, bm)) { /* No saturation */ for (y = h; --y >= 0;) { for (x = -(w * 4); x < 0; x += 4) { # if WORDS_BIGENDIAN - ptr[x + 1] = (unsigned char) ((ptr[x + 1] * rm) >> 8); - ptr[x + 2] = (unsigned char) ((ptr[x + 2] * gm) >> 8); - ptr[x + 3] = (unsigned char) ((ptr[x + 3] * bm) >> 8); + ptr[x + 1] = ((ptr[x + 1] * rm) >> 8); + ptr[x + 2] = ((ptr[x + 2] * gm) >> 8); + ptr[x + 3] = ((ptr[x + 3] * bm) >> 8); # else - ptr[x + 2] = (unsigned char) ((ptr[x + 2] * rm) >> 8); - ptr[x + 1] = (unsigned char) ((ptr[x + 1] * gm) >> 8); - ptr[x + 0] = (unsigned char) ((ptr[x + 0] * bm) >> 8); + ptr[x + 2] = ((ptr[x + 2] * rm) >> 8); + ptr[x + 1] = ((ptr[x + 1] * gm) >> 8); + ptr[x + 0] = ((ptr[x + 0] * bm) >> 8); # endif } ptr += bpl; @@ -1692,12 +1696,10 @@ int x, y; ptr = (unsigned char *) data + (w * 3); - if ((rm <= 256) && (gm <= 256) && (bm <= 256)) { + if (!COLORMODS_HAVE_SATURATION(rm, gm, bm)) { /* No saturation */ for (y = h; --y >= 0;) { for (x = -(w * 3); x < 0; x += 3) { - int r, g, b; - # if WORDS_BIGENDIAN ptr[x + 0] = (ptr[x + 0] * rm) >> 8; ptr[x + 1] = (ptr[x + 1] * gm) >> 8; @@ -1714,6 +1716,7 @@ for (y = h; --y >= 0;) { for (x = -(w * 3); x < 0; x += 3) { int r, g, b; + # if WORDS_BIGENDIAN r = (ptr[x + 0] * rm) >> 8; ptr[x + 0] = r|(!(r >> 8) - 1); ------------------------------------------------------- This SF.Net email is sponsored by: NEC IT Guy Games. How far can you shotput a projector? How fast can you ride your desk chair down the office luge track? If you want to score the big prize, get to know the little guy. Play to win an NEC 61" plasma display: http://www.necitguy.com/?r=20 _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs