< 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 >