babylon.postProcessRenderPipeline.js 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. var BABYLON;
  2. (function (BABYLON) {
  3. var PostProcessRenderPipeline = (function () {
  4. function PostProcessRenderPipeline(engine, name) {
  5. this._engine = engine;
  6. this._name = name;
  7. this._renderEffects = {};
  8. this._renderEffectsForIsolatedPass = {};
  9. this._cameras = [];
  10. }
  11. PostProcessRenderPipeline.prototype.addEffect = function (renderEffect) {
  12. this._renderEffects[renderEffect._name] = renderEffect;
  13. };
  14. PostProcessRenderPipeline.prototype._enableEffect = function (renderEffectName, cameras) {
  15. var renderEffects = this._renderEffects[renderEffectName];
  16. if (!renderEffects) {
  17. return;
  18. }
  19. renderEffects._enable(BABYLON.Tools.MakeArray(cameras || this._cameras));
  20. };
  21. PostProcessRenderPipeline.prototype._disableEffect = function (renderEffectName, cameras) {
  22. var renderEffects = this._renderEffects[renderEffectName];
  23. if (!renderEffects) {
  24. return;
  25. }
  26. renderEffects._disable(BABYLON.Tools.MakeArray(cameras || this._cameras));
  27. };
  28. PostProcessRenderPipeline.prototype._attachCameras = function (cameras, unique) {
  29. var _cam = BABYLON.Tools.MakeArray(cameras || this._cameras);
  30. var indicesToDelete = [];
  31. for (var i = 0; i < _cam.length; i++) {
  32. var camera = _cam[i];
  33. var cameraName = camera.name;
  34. if (this._cameras.indexOf(camera) === -1) {
  35. this._cameras[cameraName] = camera;
  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(_cam);
  46. }
  47. };
  48. PostProcessRenderPipeline.prototype._detachCameras = function (cameras) {
  49. var _cam = BABYLON.Tools.MakeArray(cameras || this._cameras);
  50. for (var renderEffectName in this._renderEffects) {
  51. this._renderEffects[renderEffectName]._detachCameras(_cam);
  52. }
  53. for (var i = 0; i < _cam.length; i++) {
  54. this._cameras.splice(this._cameras.indexOf(_cam[i]), 1);
  55. }
  56. };
  57. PostProcessRenderPipeline.prototype._enableDisplayOnlyPass = function (passName, cameras) {
  58. var _this = this;
  59. var _cam = BABYLON.Tools.MakeArray(cameras || this._cameras);
  60. var pass = null;
  61. for (var renderEffectName in this._renderEffects) {
  62. pass = this._renderEffects[renderEffectName].getPass(passName);
  63. if (pass != null) {
  64. break;
  65. }
  66. }
  67. if (pass === null) {
  68. return;
  69. }
  70. for (var renderEffectName in this._renderEffects) {
  71. this._renderEffects[renderEffectName]._disable(_cam);
  72. }
  73. pass._name = PostProcessRenderPipeline.PASS_SAMPLER_NAME;
  74. for (var i = 0; i < _cam.length; i++) {
  75. var camera = _cam[i];
  76. var cameraName = camera.name;
  77. this._renderEffectsForIsolatedPass[cameraName] = this._renderEffectsForIsolatedPass[cameraName] || new BABYLON.PostProcessRenderEffect(this._engine, PostProcessRenderPipeline.PASS_EFFECT_NAME, function () {
  78. return new BABYLON.DisplayPassPostProcess(PostProcessRenderPipeline.PASS_EFFECT_NAME, 1.0, null, null, _this._engine, true);
  79. });
  80. this._renderEffectsForIsolatedPass[cameraName].emptyPasses();
  81. this._renderEffectsForIsolatedPass[cameraName].addPass(pass);
  82. this._renderEffectsForIsolatedPass[cameraName]._attachCameras(camera);
  83. }
  84. };
  85. PostProcessRenderPipeline.prototype._disableDisplayOnlyPass = function (cameras) {
  86. var _this = this;
  87. var _cam = BABYLON.Tools.MakeArray(cameras || this._cameras);
  88. for (var i = 0; i < _cam.length; i++) {
  89. var camera = _cam[i];
  90. var cameraName = camera.name;
  91. this._renderEffectsForIsolatedPass[cameraName] = this._renderEffectsForIsolatedPass[cameraName] || new BABYLON.PostProcessRenderEffect(this._engine, PostProcessRenderPipeline.PASS_EFFECT_NAME, function () {
  92. return new BABYLON.DisplayPassPostProcess(PostProcessRenderPipeline.PASS_EFFECT_NAME, 1.0, null, null, _this._engine, true);
  93. });
  94. this._renderEffectsForIsolatedPass[cameraName]._disable(camera);
  95. }
  96. for (var renderEffectName in this._renderEffects) {
  97. this._renderEffects[renderEffectName]._enable(_cam);
  98. }
  99. };
  100. PostProcessRenderPipeline.prototype._update = function () {
  101. for (var renderEffectName in this._renderEffects) {
  102. this._renderEffects[renderEffectName]._update();
  103. }
  104. for (var i = 0; i < this._cameras.length; i++) {
  105. var cameraName = this._cameras[i].name;
  106. if (this._renderEffectsForIsolatedPass[cameraName]) {
  107. this._renderEffectsForIsolatedPass[cameraName]._update();
  108. }
  109. }
  110. };
  111. PostProcessRenderPipeline.PASS_EFFECT_NAME = "passEffect";
  112. PostProcessRenderPipeline.PASS_SAMPLER_NAME = "passSampler";
  113. return PostProcessRenderPipeline;
  114. })();
  115. BABYLON.PostProcessRenderPipeline = PostProcessRenderPipeline;
  116. })(BABYLON || (BABYLON = {}));
  117. //# sourceMappingURL=../../PostProcess/RenderPipeline/babylon.postProcessRenderPipeline.js.map