< prev index next >

src/java.desktop/unix/classes/sun/java2d/xr/RectTileManager.java

Print this page
rev 48925 : Xrender: Rename MaskTil(eManager) to RectTile(Manager) to avoid confusion later
rev 48927 : Xrender: make aa tile mask handling a responsibility of the backend implementation
rev 48932 : XRender: Update+introduce copyright statements + comments + unused import removal

*** 1,7 **** /* ! * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this --- 1,7 ---- /* ! * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this
*** 29,64 **** import java.util.*; /** * We render non-antialiased geometry (consisting of rectangles) into a mask, * which is later used in a composition step. ! * To avoid mask-allocations of large size, MaskTileManager splits * geometry larger than MASK_SIZE into several tiles, ! * and stores the geometry in instances of MaskTile. * * @author Clemens Eisserer */ ! public class MaskTileManager { public static final int MASK_SIZE = 256; ! MaskTile mainTile = new MaskTile(); ! ArrayList<MaskTile> tileList; int allocatedTiles = 0; int xTiles, yTiles; XRCompositeManager xrMgr; XRBackend con; int maskPixmap; int maskPicture; long maskGC; ! public MaskTileManager(XRCompositeManager xrMgr, int parentXid) { ! tileList = new ArrayList<MaskTile>(); this.xrMgr = xrMgr; this.con = xrMgr.getBackend(); maskPixmap = con.createPixmap(parentXid, 8, MASK_SIZE, MASK_SIZE); maskPicture = con.createPicture(maskPixmap, XRUtils.PictStandardA8); --- 29,64 ---- import java.util.*; /** * We render non-antialiased geometry (consisting of rectangles) into a mask, * which is later used in a composition step. ! * To avoid mask-allocations of large size, RectTileManager splits * geometry larger than MASK_SIZE into several tiles, ! * and stores the geometry in instances of RectTile. * * @author Clemens Eisserer */ ! public class RectTileManager { public static final int MASK_SIZE = 256; ! RectTile mainTile = new RectTile(); ! ArrayList<RectTile> tileList; int allocatedTiles = 0; int xTiles, yTiles; XRCompositeManager xrMgr; XRBackend con; int maskPixmap; int maskPicture; long maskGC; ! public RectTileManager(XRCompositeManager xrMgr, int parentXid) { ! tileList = new ArrayList<RectTile>(); this.xrMgr = xrMgr; this.con = xrMgr.getBackend(); maskPixmap = con.createPixmap(parentXid, 8, MASK_SIZE, MASK_SIZE); maskPicture = con.createPicture(maskPixmap, XRUtils.PictStandardA8);
*** 95,105 **** allocTiles(dirtyArea); tileRects(); for (int i = 0; i < yTiles; i++) { for (int m = 0; m < xTiles; m++) { ! MaskTile tile = tileList.get(i * xTiles + m); int tileStartX = m * MASK_SIZE; int tileStartY = i * MASK_SIZE; compositeSingleTile(dst, tile, dirtyArea, maskRequired, tileStartX, tileStartY, maskColor); --- 95,105 ---- allocTiles(dirtyArea); tileRects(); for (int i = 0; i < yTiles; i++) { for (int m = 0; m < xTiles; m++) { ! RectTile tile = tileList.get(i * xTiles + m); int tileStartX = m * MASK_SIZE; int tileStartY = i * MASK_SIZE; compositeSingleTile(dst, tile, dirtyArea, maskRequired, tileStartX, tileStartY, maskColor);
*** 120,163 **** mainTile.reset(); } /** - * Uploads aa geometry generated for maskblit/fill into the mask pixmap. - */ - public int uploadMask(int w, int h, int maskscan, int maskoff, byte[] mask) { - int maskPic = XRUtils.None; - - if (mask != null) { - float maskAlpha = - xrMgr.isTexturePaintActive() ? xrMgr.getExtraAlpha() : 1.0f; - con.putMaskImage(maskPixmap, maskGC, mask, 0, 0, 0, 0, - w, h, maskoff, maskscan, maskAlpha); - maskPic = maskPicture; - } else if (xrMgr.isTexturePaintActive()) { - maskPic = xrMgr.getExtraAlphaMask(); - } - - return maskPic; - } - - /** - * Clears the area of the mask-pixmap used for uploading aa coverage values. - */ - public void clearUploadMask(int mask, int w, int h) { - if (mask == maskPicture) { - con.renderRectangle(maskPicture, XRUtils.PictOpClear, - XRColor.NO_ALPHA, 0, 0, w, h); - } - } - - - /** * Renders the rectangles provided to the mask, and does a composition * operation with the properties set inXRCompositeManager. */ ! protected void compositeSingleTile(XRSurfaceData dst, MaskTile tile, DirtyRegion dirtyArea, boolean maskRequired, int tileStartX, int tileStartY, XRColor maskColor) { if (tile.rects.getSize() > 0) { --- 120,133 ---- mainTile.reset(); } /** * Renders the rectangles provided to the mask, and does a composition * operation with the properties set inXRCompositeManager. */ ! protected void compositeSingleTile(XRSurfaceData dst, RectTile tile, DirtyRegion dirtyArea, boolean maskRequired, int tileStartX, int tileStartY, XRColor maskColor) { if (tile.rects.getSize() > 0) {
*** 210,220 **** } } /** ! * Allocates enough MaskTile instances, to cover the whole * mask area, or resets existing ones. */ protected void allocTiles(DirtyRegion maskArea) { xTiles = (maskArea.getWidth() / MASK_SIZE) + 1; yTiles = (maskArea.getHeight() / MASK_SIZE) + 1; --- 180,190 ---- } } /** ! * Allocates enough RectTile instances, to cover the whole * mask area, or resets existing ones. */ protected void allocTiles(DirtyRegion maskArea) { xTiles = (maskArea.getWidth() / MASK_SIZE) + 1; yTiles = (maskArea.getHeight() / MASK_SIZE) + 1;
*** 223,233 **** if (tileCnt > allocatedTiles) { for (int i = 0; i < tileCnt; i++) { if (i < allocatedTiles) { tileList.get(i).reset(); } else { ! tileList.add(new MaskTile()); } } allocatedTiles = tileCnt; } --- 193,203 ---- if (tileCnt > allocatedTiles) { for (int i = 0; i < tileCnt; i++) { if (i < allocatedTiles) { tileList.get(i).reset(); } else { ! tileList.add(new RectTile()); } } allocatedTiles = tileCnt; }
*** 252,262 **** for (int n = 0; n < tileYLength; n++) { for (int m = 0; m < tileXLength; m++) { int tileIndex = xTiles * (tileYStartIndex + n) + tileXStartIndex + m; ! MaskTile tile = tileList.get(tileIndex); GrowableRectArray rectTileList = tile.getRects(); int tileArrayIndex = rectTileList.getNextIndex(); int tileStartPosX = (tileXStartIndex + m) * MASK_SIZE; --- 222,232 ---- for (int n = 0; n < tileYLength; n++) { for (int m = 0; m < tileXLength; m++) { int tileIndex = xTiles * (tileYStartIndex + n) + tileXStartIndex + m; ! RectTile tile = tileList.get(tileIndex); GrowableRectArray rectTileList = tile.getRects(); int tileArrayIndex = rectTileList.getNextIndex(); int tileStartPosX = (tileXStartIndex + m) * MASK_SIZE;
*** 303,311 **** } /** * @return MainTile to which rectangles are added before composition. */ ! public MaskTile getMainTile() { return mainTile; } } --- 273,281 ---- } /** * @return MainTile to which rectangles are added before composition. */ ! public RectTile getMainTile() { return mainTile; } }
< prev index next >