/src/away3d/filters/BloomFilter3D.as

http://github.com/away3d/away3d-core-fp11 · ActionScript · 93 lines · 75 code · 16 blank · 2 comment · 3 complexity · 0f7857b11d82b7b6bb5c1cb60680f8f6 MD5 · raw file

  1. package away3d.filters
  2. {
  3. import away3d.core.managers.Stage3DProxy;
  4. import away3d.filters.tasks.Filter3DBloomCompositeTask;
  5. import away3d.filters.tasks.Filter3DBrightPassTask;
  6. import away3d.filters.tasks.Filter3DHBlurTask;
  7. import away3d.filters.tasks.Filter3DVBlurTask;
  8. import flash.display3D.textures.Texture;
  9. public class BloomFilter3D extends Filter3DBase
  10. {
  11. private var _brightPassTask:Filter3DBrightPassTask;
  12. private var _vBlurTask:Filter3DVBlurTask;
  13. private var _hBlurTask:Filter3DHBlurTask;
  14. private var _compositeTask:Filter3DBloomCompositeTask;
  15. public function BloomFilter3D(blurX:uint = 15, blurY:uint = 15, threshold:Number = .75, exposure:Number = 2, quality:int = 3)
  16. {
  17. super();
  18. _brightPassTask = new Filter3DBrightPassTask(threshold);
  19. _hBlurTask = new Filter3DHBlurTask(blurX);
  20. _vBlurTask = new Filter3DVBlurTask(blurY);
  21. _compositeTask = new Filter3DBloomCompositeTask(exposure);
  22. if (quality > 4)
  23. quality = 4;
  24. else if (quality < 0)
  25. quality = 0;
  26. _hBlurTask.textureScale = (4 - quality);
  27. _vBlurTask.textureScale = (4 - quality);
  28. // composite's main input texture is from vBlur, so needs to be scaled down
  29. _compositeTask.textureScale = (4 - quality);
  30. addTask(_brightPassTask);
  31. addTask(_hBlurTask);
  32. addTask(_vBlurTask);
  33. addTask(_compositeTask);
  34. }
  35. override public function setRenderTargets(mainTarget:Texture, stage3DProxy:Stage3DProxy):void
  36. {
  37. _brightPassTask.target = _hBlurTask.getMainInputTexture(stage3DProxy);
  38. _hBlurTask.target = _vBlurTask.getMainInputTexture(stage3DProxy);
  39. _vBlurTask.target = _compositeTask.getMainInputTexture(stage3DProxy);
  40. // use bright pass's input as composite's input
  41. _compositeTask.overlayTexture = _brightPassTask.getMainInputTexture(stage3DProxy);
  42. super.setRenderTargets(mainTarget, stage3DProxy);
  43. }
  44. public function get exposure():Number
  45. {
  46. return _compositeTask.exposure;
  47. }
  48. public function set exposure(value:Number):void
  49. {
  50. _compositeTask.exposure = value;
  51. }
  52. public function get blurX():uint
  53. {
  54. return _hBlurTask.amount;
  55. }
  56. public function set blurX(value:uint):void
  57. {
  58. _hBlurTask.amount = value;
  59. }
  60. public function get blurY():uint
  61. {
  62. return _vBlurTask.amount;
  63. }
  64. public function set blurY(value:uint):void
  65. {
  66. _vBlurTask.amount = value;
  67. }
  68. public function get threshold():Number
  69. {
  70. return _brightPassTask.threshold;
  71. }
  72. public function set threshold(value:Number):void
  73. {
  74. _brightPassTask.threshold = value;
  75. }
  76. }
  77. }