< prev index next >

src/java.desktop/share/native/libawt/java2d/loops/ByteIndexed.h

Print this page

        

@@ -41,11 +41,11 @@
 
 #define DeclareByteIndexedLoadVars(PREFIX) \
     jint *PREFIX ## Lut;
 
 #define DeclareByteIndexedStoreVars(PREFIX) \
-    int PREFIX ## XDither, PREFIX ## YDither; \
+    int PREFIX ## XDither, PREFIX ## YDither, PREFIX ## RepPrims; \
     char *PREFIX ## rerr, *PREFIX ## gerr, *PREFIX ## berr; \
     unsigned char *PREFIX ## InvLut;
 
 #define SetByteIndexedStoreVarsYPos(PREFIX, pRasInfo, LOC) \
     do { \

@@ -68,10 +68,11 @@
  */
 #define InitByteIndexedStoreVarsY(PREFIX, pRasInfo) \
     do { \
         SetByteIndexedStoreVarsYPos(PREFIX, pRasInfo, (pRasInfo)->bounds.y1); \
         PREFIX ## InvLut = (pRasInfo)->invColorTable; \
+        PREFIX ## RepPrims = (pRasInfo)->representsPrimaries; \
     } while (0)
 
 #define InitByteIndexedStoreVarsX(PREFIX, pRasInfo) \
     SetByteIndexedStoreVarsXPos(PREFIX, pRasInfo, (pRasInfo)->bounds.x1);
 

@@ -166,13 +167,18 @@
 #define StoreByteIndexedFrom1IntArgb(pRas, PREFIX, x, argb) \
     StoreByteIndexedFrom1IntRgb(pRas, PREFIX, x, argb)
 
 #define StoreByteIndexedFrom3ByteRgb(pRas, PREFIX, x, r, g, b) \
     do { \
+        if (!(((r == 0) || (r == 255)) && \
+              ((g == 0) || (g == 255)) && \
+              ((b == 0) || (b == 255)) && \
+              PREFIX ## RepPrims)) { \
         r += PREFIX ## rerr[PREFIX ## XDither]; \
         g += PREFIX ## gerr[PREFIX ## XDither]; \
         b += PREFIX ## berr[PREFIX ## XDither]; \
+        } \
         ByteClamp3Components(r, g, b); \
         (pRas)[x] = SurfaceData_InvColorMap(PREFIX ## InvLut, r, g, b); \
     } while (0)
 
 #define StoreByteIndexedFrom4ByteArgb(pRas, PREFIX, x, a, r, g, b) \
< prev index next >