babylon.postProcessRenderPipeline.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. "use strict";
  2. var BABYLON = BABYLON || {};
  3. (function () {
  4. BABYLON.PostProcessRenderPipeline = function PostProcessRenderPipeline(engine, name) {
  5. this._engine = engine;
  6. this._name = name;
  7. this._renderEffects = [];
  8. this._renderEffectsPasses = [];
  9. this._cameras = [];
  10. };
  11. BABYLON.PostProcessRenderPipeline.prototype.addEffect = function (renderEffect) {
  12. this._renderEffects[renderEffect._name] = renderEffect;
  13. };
  14. BABYLON.PostProcessRenderPipeline.prototype.enableEffect = function (renderEffectName, cameras) {
  15. cameras = BABYLON.Tools.MakeArray(cameras || this._cameras);
  16. var renderEffects = this._renderEffects[renderEffectName];
  17. if (!renderEffects) {
  18. return;
  19. }
  20. renderEffects.enable(cameras);
  21. };
  22. BABYLON.PostProcessRenderPipeline.prototype.disableEffect = function (renderEffectName, cameras) {
  23. cameras = BABYLON.Tools.MakeArray(cameras || this._cameras);
  24. var renderEffects = this._renderEffects[renderEffectName];
  25. if (!renderEffects) {
  26. return;
  27. }
  28. renderEffects.disable(cameras);
  29. };
  30. BABYLON.PostProcessRenderPipeline.prototype.attachCameras = function (cameras, unique) {
  31. cameras = BABYLON.Tools.MakeArray(cameras || this._cameras);
  32. var indicesToDelete = [];
  33. for (var i = 0; i < cameras.length; i++) {
  34. if (this._cameras.indexOf(cameras[i]) == -1) {
  35. this._cameras.push(cameras[i]);
  36. }
  37. else if(unique) {
  38. indicesToDelete.push(i);
  39. }
  40. }
  41. for (var i = 0; i < indicesToDelete.length; i++) {
  42. cameras.splice(indicesToDelete[i], 1);
  43. }
  44. for(var renderEffectName in this._renderEffects) {
  45. this._renderEffects[renderEffectName].attachCameras(cameras);
  46. }
  47. };
  48. BABYLON.PostProcessRenderPipeline.prototype.detachCameras = function (cameras) {
  49. cameras = BABYLON.Tools.MakeArray(cameras || this._cameras);
  50. for (var renderEffectName in this._renderEffects) {
  51. this._renderEffects[renderEffectName].detachCameras(cameras);
  52. }
  53. for (var i = 0; i < cameras.length; i++) {
  54. this._cameras.splice(this._cameras.indexOf(cameras[i]), 1);
  55. }
  56. };
  57. BABYLON.PostProcessRenderPipeline.prototype.enableDisplayOnlyPass = function (passName, cameras) {
  58. cameras = BABYLON.Tools.MakeArray(cameras || this._cameras);
  59. var pass = null;
  60. for (var renderEffectName in this._renderEffects) {
  61. pass = this._renderEffects[renderEffectName].getPass(passName);
  62. if (pass != null) {
  63. break;
  64. }
  65. }
  66. if (pass == null) {
  67. return;
  68. }
  69. for (var renderEffectName in this._renderEffects) {
  70. this._renderEffects[renderEffectName].disable(cameras);
  71. }
  72. pass._name = BABYLON.PostProcessRenderPipeline.PASS_SAMPLER_NAME;
  73. for (var i = 0; i < cameras.length; i++) {
  74. this._renderEffectsPasses[cameras[i].name] = this._renderEffectsPasses[cameras[i].name] || new BABYLON.RenderEffect(this._engine, BABYLON.PostProcessRenderPipeline.PASS_EFFECT_NAME, "BABYLON.DisplayPassPostProcess", 1.0);
  75. this._renderEffectsPasses[cameras[i].name].emptyPasses();
  76. this._renderEffectsPasses[cameras[i].name].addPass(pass);
  77. this._renderEffectsPasses[cameras[i].name].attachCameras(cameras[i]);
  78. }
  79. };
  80. BABYLON.PostProcessRenderPipeline.prototype.disableDisplayOnlyPass = function (cameras) {
  81. cameras = BABYLON.Tools.MakeArray(cameras || this._cameras);
  82. for (var i = 0; i < cameras.length; i++) {
  83. this._renderEffectsPasses[cameras[i].name] = this._renderEffectsPasses[cameras[i].name] || new BABYLON.RenderEffect(this._engine, BABYLON.PostProcessRenderPipeline.PASS_EFFECT_NAME, "BABYLON.DisplayPassPostProcess", 1.0);
  84. this._renderEffectsPasses[cameras[i].name].disable(cameras[i]);
  85. }
  86. for (var renderEffectName in this._renderEffects) {
  87. this._renderEffects[renderEffectName].enable(cameras);
  88. }
  89. };
  90. BABYLON.PostProcessRenderPipeline.prototype._update = function () {
  91. for (var renderEffectName in this._renderEffects) {
  92. this._renderEffects[renderEffectName]._update();
  93. }
  94. for(var i = 0; i < this._cameras.length; i++) {
  95. if (this._renderEffectsPasses[this._cameras[i]]) {
  96. this._renderEffectsPasses[this._cameras[i]]._update();
  97. }
  98. }
  99. };
  100. BABYLON.PostProcessRenderPipeline.PASS_EFFECT_NAME = "passEffect";
  101. BABYLON.PostProcessRenderPipeline.PASS_SAMPLER_NAME = "passSampler";
  102. })();