< prev index next >
src/java.desktop/unix/classes/sun/java2d/xr/XRCompositeManager.java
Print this page
rev 48925 : Xrender: Rename MaskTil(eManager) to RectTile(Manager) to avoid confusion later
rev 48926 : Xrender: Remove gradient cache, doesn't make sense with current drivers
rev 48927 : Xrender: make aa tile mask handling a responsibility of the backend implementation
rev 48928 : Xrender: Introduction of the deferred backend, allows for accumulated AA mask upload.
@@ -26,13 +26,10 @@
package sun.java2d.xr;
import java.awt.*;
import java.awt.geom.*;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-
import sun.font.*;
import sun.java2d.*;
import sun.java2d.loops.*;
/**
@@ -42,11 +39,10 @@
*
* @author Clemens Eisserer
*/
public class XRCompositeManager {
- private static boolean enableGradCache = true;
private static XRCompositeManager instance;
private static final int SOLID = 0;
private static final int TEXTURE = 1;
private static final int GRADIENT = 2;
@@ -62,21 +58,19 @@
byte compRule = XRUtils.PictOpOver;
XRColor alphaColor = new XRColor();
XRSurfaceData solidSrcPict;
int alphaMaskPict;
- int gradCachePixmap;
- int gradCachePicture;
boolean xorEnabled = false;
int validatedPixel = 0;
Composite validatedComp;
Paint validatedPaint;
float validatedExtraAlpha = 1.0f;
XRBackend con;
- MaskTileManager maskBuffer;
+ RectTileManager maskBuffer;
XRTextRenderer textRenderer;
XRMaskImage maskImage;
public static synchronized XRCompositeManager getInstance(
XRSurfaceData surface) {
@@ -85,28 +79,26 @@
}
return instance;
}
private XRCompositeManager(XRSurfaceData surface) {
+ String defProp = System.getProperty("sun.java2d.xr.deferred");
+
+ if(defProp != null && defProp.length() > 0
+ && Character.toLowerCase(defProp.charAt(0)) == 't') {
+ con = new XRBackendDeferred();
+ } else {
con = new XRBackendNative();
+ }
- String gradProp =
- AccessController.doPrivileged(new PrivilegedAction<String>() {
- public String run() {
- return System.getProperty("sun.java2d.xrgradcache");
- }
- });
-
- enableGradCache = gradProp == null ||
- !(gradProp.equalsIgnoreCase("false") ||
- gradProp.equalsIgnoreCase("f"));
+ con.initResources(surface.getXid());
XRPaints.register(this);
initResources(surface);
- maskBuffer = new MaskTileManager(this, surface.getXid());
+ maskBuffer = new RectTileManager(this, surface.getXid());
textRenderer = new XRTextRenderer(this);
maskImage = new XRMaskImage(this, surface.getXid());
}
public void initResources(XRSurfaceData surface) {
@@ -119,17 +111,10 @@
alphaMaskPict = con.createPicture(extraAlphaMask,
XRUtils.PictStandardA8);
con.setPictureRepeat(alphaMaskPict, XRUtils.RepeatNormal);
con.renderRectangle(alphaMaskPict, XRUtils.PictOpClear,
XRColor.NO_ALPHA, 0, 0, 1, 1);
-
- if (enableGradCache) {
- gradCachePixmap = con.createPixmap(parentXid, 32,
- MaskTileManager.MASK_SIZE, MaskTileManager.MASK_SIZE);
- gradCachePicture = con.createPicture(gradCachePixmap,
- XRUtils.PictStandardARGB32);
- }
}
public void setForeground(int pixel) {
solidColor.setColorValues(pixel);
}
@@ -233,25 +218,33 @@
}
public void XRComposite(int src, int mask, int dst, int srcX, int srcY,
int maskX, int maskY, int dstX, int dstY, int width, int height) {
int cachedSrc = (src == XRUtils.None) ? getCurrentSource().picture : src;
- int cachedX = srcX;
- int cachedY = srcY;
- if (enableGradCache && gradient != null
- && cachedSrc == gradient.picture) {
- con.renderComposite(XRUtils.PictOpSrc, gradient.picture,
- XRUtils.None, gradCachePicture, srcX, srcY, 0, 0, 0, 0,
- width, height);
- cachedX = 0;
- cachedY = 0;
- cachedSrc = gradCachePicture;
+ con.renderComposite(compRule, cachedSrc, mask, dst, srcX, srcY,
+ maskX, maskY, dstX, dstY, width, height);
}
- con.renderComposite(compRule, cachedSrc, mask, dst, cachedX, cachedY,
- maskX, maskY, dstX, dstY, width, height);
+ public void XRMaskedComposite(int src, int dst,
+ int srcX, int srcY, int dstX, int dstY, int width,
+ int height, int maskScan, int maskOff, byte[] mask) {
+
+ src = (src == XRUtils.None) ? getCurrentSource().picture : src;
+
+ float maskAlpha = 1.0f;
+ int maskXid = XRUtils.None;
+
+ if (mask != null) {
+ maskAlpha = isTexturePaintActive() ? getExtraAlpha() : 1.0f;
+ } else if (isTexturePaintActive()) {
+ maskXid = getExtraAlphaMask();
+ }
+
+ con.maskedComposite(compRule, src, maskXid, dst,
+ srcX, srcY, dstX, dstY, width,
+ height, maskScan, maskOff, mask, maskAlpha);
}
public void XRRenderRectangles(XRSurfaceData dst, GrowableRectArray rects) {
if (xorEnabled) {
con.GCRectangles(dst.getXid(), dst.getGC(), rects);
@@ -342,11 +335,11 @@
public XRTextRenderer getTextRenderer() {
return textRenderer;
}
- public MaskTileManager getMaskBuffer() {
+ public RectTileManager getMaskBuffer() {
return maskBuffer;
}
public XRMaskImage getMaskImage() {
return maskImage;
< prev index next >