< prev index next >
openjfx9/modules/javafx.graphics/src/main/java/com/sun/marlin/RendererContext.java
Print this page
*** 21,83 ****
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
! package sun.java2d.marlin;
import java.awt.geom.Path2D;
import java.lang.ref.WeakReference;
import java.util.concurrent.atomic.AtomicInteger;
! import sun.java2d.ReentrantContext;
! import sun.java2d.marlin.ArrayCacheConst.CacheStats;
! import sun.java2d.marlin.MarlinRenderingEngine.NormalizingPathIterator;
/**
* This class is a renderer context dedicated to a single thread
*/
! final class RendererContext extends ReentrantContext implements MarlinConst {
// RendererContext creation counter
private static final AtomicInteger CTX_COUNT = new AtomicInteger(1);
/**
* Create a new renderer context
*
* @return new RendererContext instance
*/
! static RendererContext createContext() {
return new RendererContext("ctx"
+ Integer.toString(CTX_COUNT.getAndIncrement()));
}
// Smallest object used as Cleaner's parent reference
private final Object cleanerObj;
// dirty flag indicating an exception occured during pipeline in pathTo()
! boolean dirty = false;
// shared data
! final float[] float6 = new float[6];
// shared curve (dirty) (Renderer / Stroker)
final Curve curve = new Curve();
- // MarlinRenderingEngine NormalizingPathIterator NearestPixelCenter:
- final NormalizingPathIterator nPCPathIterator;
- // MarlinRenderingEngine NearestPixelQuarter NormalizingPathIterator:
- final NormalizingPathIterator nPQPathIterator;
// MarlinRenderingEngine.TransformingPathConsumer2D
! final TransformingPathConsumer2D transformerPC2D;
// recycled Path2D instance (weak)
private WeakReference<Path2D.Float> refPath2D = null;
! final Renderer renderer;
! final Stroker stroker;
// Simplifies out collinear lines
! final CollinearSimplifier simplifier = new CollinearSimplifier();
! final Dasher dasher;
! final MarlinTileGenerator ptg;
! final MarlinCache cache;
// flag indicating the shape is stroked (1) or filled (0)
int stroking = 0;
// Array caches:
/* clean int[] cache (zero-filled) = 5 refs */
private final IntArrayCache cleanIntCache = new IntArrayCache(true, 5);
/* dirty int[] cache = 4 refs */
private final IntArrayCache dirtyIntCache = new IntArrayCache(false, 4);
--- 21,84 ----
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
! package com.sun.marlin;
import java.awt.geom.Path2D;
import java.lang.ref.WeakReference;
import java.util.concurrent.atomic.AtomicInteger;
! import com.sun.ReentrantContext;
! import com.sun.javafx.geom.Rectangle;
! import com.sun.marlin.ArrayCacheConst.CacheStats;
/**
* This class is a renderer context dedicated to a single thread
*/
! public final class RendererContext extends ReentrantContext implements MarlinConst {
// RendererContext creation counter
private static final AtomicInteger CTX_COUNT = new AtomicInteger(1);
/**
* Create a new renderer context
*
* @return new RendererContext instance
*/
! public static RendererContext createContext() {
return new RendererContext("ctx"
+ Integer.toString(CTX_COUNT.getAndIncrement()));
}
// Smallest object used as Cleaner's parent reference
private final Object cleanerObj;
// dirty flag indicating an exception occured during pipeline in pathTo()
! public boolean dirty = false;
// shared data
! public final float[] float6 = new float[6];
// shared curve (dirty) (Renderer / Stroker)
final Curve curve = new Curve();
// MarlinRenderingEngine.TransformingPathConsumer2D
! public final TransformingPathConsumer2D transformerPC2D;
// recycled Path2D instance (weak)
private WeakReference<Path2D.Float> refPath2D = null;
! public final Renderer renderer;
! private RendererNoAA rendererNoAA = null;
! public final Stroker stroker;
// Simplifies out collinear lines
! public final CollinearSimplifier simplifier = new CollinearSimplifier();
! public final Dasher dasher;
// flag indicating the shape is stroked (1) or filled (0)
int stroking = 0;
+ // MarlinFX specific:
+ // dirty bbox rectangle
+ public final Rectangle clip = new Rectangle();
+ // dirty AlphaConsumer
+ public Object consumer = null;
+
// Array caches:
/* clean int[] cache (zero-filled) = 5 refs */
private final IntArrayCache cleanIntCache = new IntArrayCache(true, 5);
/* dirty int[] cache = 4 refs */
private final IntArrayCache dirtyIntCache = new IntArrayCache(false, 4);
*** 109,139 ****
};
} else {
stats = null;
}
- // NormalizingPathIterator instances:
- nPCPathIterator = new NormalizingPathIterator.NearestPixelCenter(float6);
- nPQPathIterator = new NormalizingPathIterator.NearestPixelQuarter(float6);
-
// MarlinRenderingEngine.TransformingPathConsumer2D
transformerPC2D = new TransformingPathConsumer2D();
// Renderer:
! cache = new MarlinCache(this);
! renderer = new Renderer(this); // needs MarlinCache from rdrCtx.cache
! ptg = new MarlinTileGenerator(renderer);
stroker = new Stroker(this);
dasher = new Dasher(this);
}
/**
* Disposes this renderer context:
* clean up before reusing this context
*/
! void dispose() {
if (DO_STATS) {
if (stats.totalOffHeap > stats.totalOffHeapMax) {
stats.totalOffHeapMax = stats.totalOffHeap;
}
stats.totalOffHeap = 0L;
--- 110,134 ----
};
} else {
stats = null;
}
// MarlinRenderingEngine.TransformingPathConsumer2D
transformerPC2D = new TransformingPathConsumer2D();
// Renderer:
! renderer = new Renderer(this);
stroker = new Stroker(this);
dasher = new Dasher(this);
}
/**
* Disposes this renderer context:
* clean up before reusing this context
*/
! public void dispose() {
if (DO_STATS) {
if (stats.totalOffHeap > stats.totalOffHeapMax) {
stats.totalOffHeapMax = stats.totalOffHeap;
}
stats.totalOffHeap = 0L;
*** 142,154 ****
// if context is maked as DIRTY:
if (dirty) {
// may happen if an exception if thrown in the pipeline processing:
// force cleanup of all possible pipelined blocks (except Renderer):
- // NormalizingPathIterator instances:
- this.nPCPathIterator.dispose();
- this.nPQPathIterator.dispose();
// Dasher:
this.dasher.dispose();
// Stroker:
this.stroker.dispose();
--- 137,146 ----
*** 172,181 ****
--- 164,180 ----
// reset the path anyway:
p2d.reset();
return p2d;
}
+ public RendererNoAA getRendererNoAA() {
+ if (rendererNoAA == null) {
+ rendererNoAA = new RendererNoAA(this);
+ }
+ return rendererNoAA;
+ }
+
OffHeapArray newOffHeapArray(final long initialSize) {
if (DO_STATS) {
stats.totalOffHeapInitial += initialSize;
}
return new OffHeapArray(cleanerObj, initialSize);
< prev index next >