/src/away3d/filters/tasks/Filter3DBloomCompositeTask.as

http://github.com/away3d/away3d-core-fp11 · ActionScript · 74 lines · 61 code · 13 blank · 0 comment · 0 complexity · dbbecc7f58b277eca20088910ade5a5d MD5 · raw file

  1. package away3d.filters.tasks
  2. {
  3. import away3d.arcane;
  4. import away3d.cameras.Camera3D;
  5. import away3d.core.managers.Stage3DProxy;
  6. import flash.display3D.Context3D;
  7. import flash.display3D.Context3DProgramType;
  8. import flash.display3D.textures.Texture;
  9. import flash.display3D.textures.TextureBase;
  10. use namespace arcane;
  11. public class Filter3DBloomCompositeTask extends Filter3DTaskBase
  12. {
  13. private var _data:Vector.<Number>;
  14. private var _overlayTexture:TextureBase;
  15. private var _exposure:Number;
  16. public function Filter3DBloomCompositeTask(exposure:Number)
  17. {
  18. super();
  19. _data = Vector.<Number>([ 0.299, 0.587, 0.114, 1 ]); // luminance projection, 1
  20. this.exposure = exposure;
  21. }
  22. public function get overlayTexture():TextureBase
  23. {
  24. return _overlayTexture;
  25. }
  26. public function set overlayTexture(value:TextureBase):void
  27. {
  28. _overlayTexture = value;
  29. }
  30. override protected function getFragmentCode():String
  31. {
  32. var code:String;
  33. code = "tex ft0, v0, fs0 <2d,linear,clamp> \n" +
  34. "tex ft1, v0, fs1 <2d,linear,clamp> \n" +
  35. "dp3 ft2.x, ft1, fc0\n" +
  36. "sub ft2.x, fc0.w, ft2.x\n" +
  37. "mul ft0, ft0, ft2.x\n";
  38. code += "add oc, ft0, ft1 \n";
  39. return code;
  40. }
  41. override public function activate(stage3DProxy:Stage3DProxy, camera3D:Camera3D, depthTexture:Texture):void
  42. {
  43. var context:Context3D = stage3DProxy._context3D;
  44. context.setProgramConstantsFromVector(Context3DProgramType.FRAGMENT, 0, _data, 1);
  45. context.setTextureAt(1, _overlayTexture);
  46. }
  47. override public function deactivate(stage3DProxy:Stage3DProxy):void
  48. {
  49. stage3DProxy._context3D.setTextureAt(1, null);
  50. }
  51. public function get exposure():Number
  52. {
  53. return _exposure;
  54. }
  55. public function set exposure(exposure:Number):void
  56. {
  57. _exposure = exposure;
  58. _data[3] = 1 + _exposure / 10;
  59. }
  60. }
  61. }