Hello all,
Assen pointed out that this code could be optimized a bit more.
Here the result.
Would some Little Endian hackers please test if it still works ?
Thanks to Assen.
Ok for head if it works on LE too?
Andreas
2006-07-22 Andreas Tobler <[EMAIL PROTECTED]>
* gnu/java/awt/peer/gtk/CairoSurface.java: Optimize pixel swap code a
bit more.
Index: gnu/java/awt/peer/gtk/CairoSurface.java
===================================================================
RCS file:
/cvsroot/classpath/classpath/gnu/java/awt/peer/gtk/CairoSurface.java,v
retrieving revision 1.14
diff -u -r1.14 CairoSurface.java
--- gnu/java/awt/peer/gtk/CairoSurface.java 21 Jul 2006 22:51:38
-0000 1.14
+++ gnu/java/awt/peer/gtk/CairoSurface.java 22 Jul 2006 12:58:48 -0000
@@ -180,19 +180,13 @@
for (int i = 0; i < data.length; i++ )
{
// On a big endian system we get a RRGGBBAA data array.
- int alpha = (data[i] & 0xFF);
+ int alpha = data[i] & 0xFF;
if( alpha == 0 ) // I do not know why we need this, but it
works.
data[i] = 0;
else
{
- int r = (((data[i] & 0xFF000000) >> 24));
- int g = (((data[i] & 0x00FF0000) >> 16));
- int b = (((data[i] & 0x0000FF00) >> 8));
// Cairo needs a ARGB32 native array.
- data[i] = (( alpha << 24 ) & 0xFF000000)
- | (( r << 16 ) & 0x00FF0000)
- | (( g << 8 ) & 0x0000FF00)
- | ( b & 0x000000FF);
+ data[i] = (data[i] >>> 8) | (alpha << 24);
}
}
}
@@ -201,19 +195,16 @@
for (int i = 0; i < data.length; i++ )
{
// On a little endian system we get a AABBGGRR data array.
- int alpha = (data[i] & 0xFF000000) >> 24;
+ int alpha = data[i] & 0xFF000000;
if( alpha == 0 ) // I do not know why we need this, but it
works.
data[i] = 0;
else
{
- int b = (((data[i] & 0x00FF0000) >> 16));
- int g = (((data[i] & 0x0000FF00) >> 8));
- int r = ((data[i] & 0x000000FF));
+ int b = (data[i] & 0xFF0000) >> 16;
+ int g = (data[i] & 0xFF00);
+ int r = (data[i] & 0xFF) << 16;
// Cairo needs a ARGB32 native array.
- data[i] = (( alpha << 24 ) & 0xFF000000)
- | (( r << 16 ) & 0x00FF0000)
- | (( g << 8 ) & 0x0000FF00)
- | ( b & 0x000000FF);
+ data[i] = alpha | r | g | b;
}
}
}