< prev index next >
modules/javafx.graphics/src/main/java/com/sun/marlin/DRendererContext.java
Print this page
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 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
@@ -23,16 +23,18 @@
* questions.
*/
package com.sun.marlin;
-import com.sun.javafx.geom.Path2D;
+import java.lang.ref.WeakReference;
import java.util.concurrent.atomic.AtomicInteger;
-import com.sun.util.reentrant.ReentrantContext;
+import com.sun.javafx.geom.Path2D;
import com.sun.javafx.geom.Rectangle;
import com.sun.marlin.ArrayCacheConst.CacheStats;
-import java.lang.ref.WeakReference;
+import com.sun.marlin.DTransformingPathConsumer2D.CurveBasicMonotonizer;
+import com.sun.marlin.DTransformingPathConsumer2D.CurveClipSplitter;
+import com.sun.util.reentrant.ReentrantContext;
/**
* This class is a renderer context dedicated to a single thread
*/
public final class DRendererContext extends ReentrantContext implements MarlinConst {
@@ -60,28 +62,34 @@
final DCurve curve = new DCurve();
// MarlinRenderingEngine.TransformingPathConsumer2D
public final DTransformingPathConsumer2D transformerPC2D;
// recycled Path2D instance (weak)
private WeakReference<Path2D> refPath2D = null;
- // shared memory between renderer instances:
- final DRendererSharedMemory rdrMem;
public final DRenderer renderer;
- private DRendererNoAA rendererNoAA = null;
public final DStroker stroker;
// Simplifies out collinear lines
public final DCollinearSimplifier simplifier = new DCollinearSimplifier();
+ // Simplifies path
+ public final DPathSimplifier pathSimplifier = new DPathSimplifier();
public final DDasher dasher;
// flag indicating the shape is stroked (1) or filled (0)
int stroking = 0;
// flag indicating to clip the shape
public boolean doClip = false;
// flag indicating if the path is closed or not (in advance) to handle properly caps
boolean closedPath = false;
// clip rectangle (ymin, ymax, xmin, xmax):
public final double[] clipRect = new double[4];
+ // CurveBasicMonotonizer instance
+ public final CurveBasicMonotonizer monotonizer;
+ // CurveClipSplitter instance
+ final CurveClipSplitter curveClipSplitter;
// MarlinFX specific:
+ // shared memory between renderer instances:
+ final DRendererSharedMemory rdrMem;
+ private DRendererNoAA rendererNoAA = null;
// dirty bbox rectangle
public final Rectangle clip = new Rectangle();
// dirty MaskMarlinAlphaConsumer
public MaskMarlinAlphaConsumer consumer = null;
@@ -118,10 +126,14 @@
};
} else {
stats = null;
}
+ // curve monotonizer & clip subdivider (before transformerPC2D init)
+ monotonizer = new CurveBasicMonotonizer(this);
+ curveClipSplitter = new CurveClipSplitter(this);
+
// MarlinRenderingEngine.TransformingPathConsumer2D
transformerPC2D = new DTransformingPathConsumer2D(this);
// Renderer shared memory:
rdrMem = new DRendererSharedMemory(this);
@@ -239,12 +251,12 @@
edges = rdrCtx.newOffHeapArray(INITIAL_EDGES_CAPACITY); // 96K
edgeBuckets_ref = rdrCtx.newCleanIntArrayRef(INITIAL_BUCKET_ARRAY); // 64K
edgeBucketCounts_ref = rdrCtx.newCleanIntArrayRef(INITIAL_BUCKET_ARRAY); // 64K
- // 2048 (pixelsize) pixel large
- alphaLine_ref = rdrCtx.newCleanIntArrayRef(INITIAL_AA_ARRAY); // 8K
+ // 4096 pixels large
+ alphaLine_ref = rdrCtx.newCleanIntArrayRef(INITIAL_AA_ARRAY); // 16K
crossings_ref = rdrCtx.newDirtyIntArrayRef(INITIAL_CROSSING_COUNT); // 2K
aux_crossings_ref = rdrCtx.newDirtyIntArrayRef(INITIAL_CROSSING_COUNT); // 2K
edgePtrs_ref = rdrCtx.newDirtyIntArrayRef(INITIAL_CROSSING_COUNT); // 2K
aux_edgePtrs_ref = rdrCtx.newDirtyIntArrayRef(INITIAL_CROSSING_COUNT); // 2K
< prev index next >