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