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

Reply via email to