modules/graphics/src/main/java/com/sun/scenario/effect/impl/prism/ps/PPSRenderer.java

Print this page




  39 import com.sun.prism.Image;
  40 import com.sun.prism.PixelFormat;
  41 import com.sun.prism.RTTexture;
  42 import com.sun.prism.ResourceFactory;
  43 import com.sun.prism.ResourceFactoryListener;
  44 import com.sun.prism.Texture;
  45 import com.sun.prism.Texture.Usage;
  46 import com.sun.prism.Texture.WrapMode;
  47 import com.sun.prism.ps.Shader;
  48 import com.sun.prism.ps.ShaderFactory;
  49 import com.sun.scenario.effect.Effect.AccelType;
  50 import com.sun.scenario.effect.FilterContext;
  51 import com.sun.scenario.effect.Filterable;
  52 import com.sun.scenario.effect.FloatMap;
  53 import com.sun.scenario.effect.ImageData;
  54 import com.sun.scenario.effect.LockableResource;
  55 import com.sun.scenario.effect.impl.EffectPeer;
  56 import com.sun.scenario.effect.impl.Renderer;
  57 import com.sun.scenario.effect.impl.hw.ShaderSource;
  58 import com.sun.scenario.effect.impl.prism.PrDrawable;

  59 import com.sun.scenario.effect.impl.prism.PrImage;
  60 import com.sun.scenario.effect.impl.prism.PrRenderer;
  61 import com.sun.scenario.effect.impl.prism.PrTexture;
  62 
  63 import static com.sun.scenario.effect.impl.Renderer.RendererState.*;
  64 
  65 public class PPSRenderer extends PrRenderer {
  66 
  67     private final Screen screen;
  68     private final ShaderSource shaderSource;
  69     private RendererState state;
  70     private boolean needsSWDispMap;
  71 
  72     private final ResourceFactoryListener listener =
  73         new ResourceFactoryListener()
  74     {
  75         public void factoryReset() {
  76             dispose();
  77         }
  78 


 254             Constructor ctor = klass.getConstructor(new Class[]
 255                 { FilterContext.class, Renderer.class, String.class });
 256             peer = (EffectPeer)ctor.newInstance(new Object[]
 257                 { fctx, this, shaderName });
 258         } catch (Exception e) {
 259             System.err.println("Error: Prism peer not found for: " + name +
 260                                " due to error: " + e.getMessage());
 261             return null;
 262         }
 263         return peer;
 264     }
 265 
 266     @Override
 267     protected EffectPeer createPeer(FilterContext fctx, String name,
 268                                     int unrollCount)
 269     {
 270         if (PrRenderer.isIntrinsicPeer(name)) {
 271             // create an intrinsic peer (one that's handled by Prism)
 272             return createIntrinsicPeer(fctx, name);
 273         } else if (needsSWDispMap && name.equals("DisplacementMap")) {
 274             return new PPStoPSWDisplacementMapPeer(fctx, this, name);

 275         } else {
 276             // try creating a platform-specific peer
 277             return createPlatformPeer(fctx, name, unrollCount);
 278         }
 279     }
 280 
 281     @Override
 282     public boolean isImageDataCompatible(final ImageData id) {
 283         if (getRendererState() == OK) {
 284             Filterable f = id.getUntransformedImage();
 285             return (f instanceof PrDrawable && !f.isLost());
 286         }
 287         return false;
 288     }
 289 
 290     @Override
 291     public void clearImage(Filterable filterable) {
 292         PPSDrawable img = (PPSDrawable)filterable;
 293         img.clear();
 294     }




  39 import com.sun.prism.Image;
  40 import com.sun.prism.PixelFormat;
  41 import com.sun.prism.RTTexture;
  42 import com.sun.prism.ResourceFactory;
  43 import com.sun.prism.ResourceFactoryListener;
  44 import com.sun.prism.Texture;
  45 import com.sun.prism.Texture.Usage;
  46 import com.sun.prism.Texture.WrapMode;
  47 import com.sun.prism.ps.Shader;
  48 import com.sun.prism.ps.ShaderFactory;
  49 import com.sun.scenario.effect.Effect.AccelType;
  50 import com.sun.scenario.effect.FilterContext;
  51 import com.sun.scenario.effect.Filterable;
  52 import com.sun.scenario.effect.FloatMap;
  53 import com.sun.scenario.effect.ImageData;
  54 import com.sun.scenario.effect.LockableResource;
  55 import com.sun.scenario.effect.impl.EffectPeer;
  56 import com.sun.scenario.effect.impl.Renderer;
  57 import com.sun.scenario.effect.impl.hw.ShaderSource;
  58 import com.sun.scenario.effect.impl.prism.PrDrawable;
  59 import com.sun.scenario.effect.impl.prism.PrFilterContext;
  60 import com.sun.scenario.effect.impl.prism.PrImage;
  61 import com.sun.scenario.effect.impl.prism.PrRenderer;
  62 import com.sun.scenario.effect.impl.prism.PrTexture;
  63 
  64 import static com.sun.scenario.effect.impl.Renderer.RendererState.*;
  65 
  66 public class PPSRenderer extends PrRenderer {
  67 
  68     private final Screen screen;
  69     private final ShaderSource shaderSource;
  70     private RendererState state;
  71     private boolean needsSWDispMap;
  72 
  73     private final ResourceFactoryListener listener =
  74         new ResourceFactoryListener()
  75     {
  76         public void factoryReset() {
  77             dispose();
  78         }
  79 


 255             Constructor ctor = klass.getConstructor(new Class[]
 256                 { FilterContext.class, Renderer.class, String.class });
 257             peer = (EffectPeer)ctor.newInstance(new Object[]
 258                 { fctx, this, shaderName });
 259         } catch (Exception e) {
 260             System.err.println("Error: Prism peer not found for: " + name +
 261                                " due to error: " + e.getMessage());
 262             return null;
 263         }
 264         return peer;
 265     }
 266 
 267     @Override
 268     protected EffectPeer createPeer(FilterContext fctx, String name,
 269                                     int unrollCount)
 270     {
 271         if (PrRenderer.isIntrinsicPeer(name)) {
 272             // create an intrinsic peer (one that's handled by Prism)
 273             return createIntrinsicPeer(fctx, name);
 274         } else if (needsSWDispMap && name.equals("DisplacementMap")) {
 275             PrFilterContext swctx = ((PrFilterContext) fctx).getSoftwareInstance();
 276             return new PPStoPSWDisplacementMapPeer(swctx, this, name);
 277         } else {
 278             // try creating a platform-specific peer
 279             return createPlatformPeer(fctx, name, unrollCount);
 280         }
 281     }
 282 
 283     @Override
 284     public boolean isImageDataCompatible(final ImageData id) {
 285         if (getRendererState() == OK) {
 286             Filterable f = id.getUntransformedImage();
 287             return (f instanceof PrDrawable && !f.isLost());
 288         }
 289         return false;
 290     }
 291 
 292     @Override
 293     public void clearImage(Filterable filterable) {
 294         PPSDrawable img = (PPSDrawable)filterable;
 295         img.clear();
 296     }