< prev index next >
modules/javafx.graphics/src/main/java/com/sun/marlin/RendererContext.java
Print this page
*** 23,36 ****
--- 23,38 ----
* questions.
*/
package com.sun.marlin;
+ import com.sun.javafx.geom.Path2D;
import java.util.concurrent.atomic.AtomicInteger;
import com.sun.util.reentrant.ReentrantContext;
import com.sun.javafx.geom.Rectangle;
import com.sun.marlin.ArrayCacheConst.CacheStats;
+ import java.lang.ref.WeakReference;
/**
* This class is a renderer context dedicated to a single thread
*/
public final class RendererContext extends ReentrantContext implements MarlinConst {
*** 56,65 ****
--- 58,69 ----
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> refPath2D = null;
// shared memory between renderer instances:
final RendererSharedMemory rdrMem;
public final Renderer renderer;
private RendererNoAA rendererNoAA = null;
public final Stroker stroker;
*** 148,157 ****
--- 152,177 ----
// mark context as CLEAN:
dirty = false;
}
}
+ public Path2D getPath2D() {
+ // resolve reference:
+ Path2D p2d = (refPath2D != null) ? refPath2D.get() : null;
+
+ // create a new Path2D ?
+ if (p2d == null) {
+ p2d = new Path2D(Path2D.WIND_NON_ZERO, INITIAL_EDGES_COUNT); // 32K
+
+ // update weak reference:
+ refPath2D = new WeakReference<Path2D>(p2d);
+ }
+ // reset the path anyway:
+ p2d.reset();
+ return p2d;
+ }
+
public RendererNoAA getRendererNoAA() {
if (rendererNoAA == null) {
rendererNoAA = new RendererNoAA(this);
}
return rendererNoAA;
< prev index next >