modules/graphics/src/main/java/com/sun/scenario/effect/impl/EffectPeer.java

Print this page

        

@@ -30,20 +30,25 @@
 import com.sun.scenario.effect.FilterContext;
 import com.sun.scenario.effect.ImageData;
 import com.sun.javafx.geom.Rectangle;
 import com.sun.javafx.geom.transform.BaseTransform;
 import com.sun.javafx.geom.transform.NoninvertibleTransformException;
+import com.sun.scenario.effect.impl.state.RenderState;
 
 /**
  * The abstract base class for all {@code Effect} implementation peers.
+ * 
+ * @param <T> an optional subclass of RenderState that can be assumed as the
+ *            return value for the getRenderState() method
  */
-public abstract class EffectPeer {
+public abstract class EffectPeer<T extends RenderState> {
 
     private final FilterContext fctx;
     private final Renderer renderer;
     private final String uniqueName;
     private Effect effect;
+    private T renderState;
     private int pass;
 
     protected EffectPeer(FilterContext fctx, Renderer renderer, String uniqueName) {
         if (fctx == null) {
             throw new IllegalArgumentException("FilterContext must be non-null");

@@ -56,10 +61,11 @@
     public boolean isImageDataCompatible(ImageData id) {
         return getRenderer().isImageDataCompatible(id);
     }
 
     public abstract ImageData filter(Effect effect,
+                                     T renderState,
                                      BaseTransform transform,
                                      Rectangle outputClip,
                                      ImageData... inputs);
 
     /**

@@ -99,10 +105,18 @@
 
     protected void setEffect(Effect effect) {
         this.effect = effect;
     }
 
+    protected T getRenderState() {
+        return renderState;
+    }
+
+    protected void setRenderState(T renderState) {
+        this.renderState = renderState;
+    }
+
     public final int getPass() {
         return pass;
     }
 
     public void setPass(int pass) {