// if (lastFrame != -1) {
// System.out.println("InterFrame time: " + (t0-lastFrame));
// }
// lastFrame = t0;
CachableRed cr;
WritableRaster syncRaster;
WritableRaster copyRaster;
updateWorkingBuffers();
if ((rootCR == null) ||
(workingBaseRaster == null)) {
// System.err.println("RootCR: " + rootCR);
// System.err.println("wrkBaseRaster: " + workingBaseRaster);
return;
}
cr = rootCR;
syncRaster = workingBaseRaster;
copyRaster = workingRaster;
Rectangle srcR = rootCR.getBounds();
// System.out.println("RootCR: " + srcR);
Rectangle dstR = workingRaster.getBounds();
if ((dstR.x < srcR.x) ||
(dstR.y < srcR.y) ||
(dstR.x+dstR.width > srcR.x+srcR.width) ||
(dstR.y+dstR.height > srcR.y+srcR.height))
cr = new PadRed(cr, dstR, PadMode.ZERO_PAD, null);
boolean repaintAll = false;
Rectangle dr = copyRaster.getBounds();
// Ensure only one thread works on baseRaster at a time...
synchronized (syncRaster) {
// System.out.println("Dynamic:");
if (repaintAll) {
// System.out.println("Repainting All");
cr.copyData(copyRaster);
} else {
java.awt.Graphics2D g2d = null;
if (false) {
BufferedImage tmpBI = new BufferedImage
(workingOffScreen.getColorModel(),
copyRaster.createWritableTranslatedChild(0, 0),
workingOffScreen.isAlphaPremultiplied(), null);
g2d = GraphicsUtil.createGraphics(tmpBI);
g2d.translate(-copyRaster.getMinX(),
-copyRaster.getMinY());
}
if ((isDoubleBuffered) &&
(currentRaster != null) &&
(damagedAreas != null)) {
damagedAreas.subtract(devRLM, COPY_OVERHEAD,
COPY_LINE_OVERHEAD);
damagedAreas.mergeRects(COPY_OVERHEAD,
COPY_LINE_OVERHEAD);
// color-objects are immutable, so we can reuse this handful of instances
Color fillColor = new Color( 0, 0, 255, 50 );
Color borderColor = new Color( 0, 0, 0, 50 );
Iterator iter = damagedAreas.iterator();
while (iter.hasNext()) {
Rectangle r = (Rectangle)iter.next();
if (!dr.intersects(r)) continue;
r = dr.intersection(r);
// System.err.println("Copy: " + r);
Raster src = currentRaster.createWritableChild
(r.x, r.y, r.width, r.height, r.x, r.y, null);
GraphicsUtil.copyData(src, copyRaster);
if (g2d != null) {
g2d.setPaint( fillColor );
g2d.fill(r);
g2d.setPaint( borderColor );
g2d.draw(r);
}
}
}
Color fillColor = new Color( 255, 0, 0, 50 );
Color borderColor = new Color( 0, 0, 0, 50 );
Iterator iter = devRLM.iterator();
while (iter.hasNext()) {
Rectangle r = (Rectangle)iter.next();
if (!dr.intersects(r)) continue;
r = dr.intersection(r);
// System.err.println("Render: " + r);
WritableRaster dst = copyRaster.createWritableChild
(r.x, r.y, r.width, r.height, r.x, r.y, null);
cr.copyData(dst);
if (g2d != null) {
g2d.setPaint( fillColor );
g2d.fill(r);
g2d.setPaint( borderColor );
g2d.draw(r);