babylon.postProcessRenderEffect.js 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. var BABYLON;
  2. (function (BABYLON) {
  3. var PostProcessRenderEffect = (function () {
  4. function PostProcessRenderEffect(engine, name, getPostProcess, singleInstance) {
  5. this._engine = engine;
  6. this._name = name;
  7. this._singleInstance = singleInstance || true;
  8. this._getPostProcess = getPostProcess;
  9. this._cameras = [];
  10. this._indicesForCamera = [];
  11. this._postProcesses = {};
  12. this._renderPasses = {};
  13. this._renderEffectAsPasses = {};
  14. }
  15. PostProcessRenderEffect.prototype._update = function () {
  16. for (var renderPassName in this._renderPasses) {
  17. this._renderPasses[renderPassName]._update();
  18. }
  19. };
  20. PostProcessRenderEffect.prototype.addPass = function (renderPass) {
  21. this._renderPasses[renderPass._name] = renderPass;
  22. this._linkParameters();
  23. };
  24. PostProcessRenderEffect.prototype.removePass = function (renderPass) {
  25. delete this._renderPasses[renderPass._name];
  26. this._linkParameters();
  27. };
  28. PostProcessRenderEffect.prototype.addRenderEffectAsPass = function (renderEffect) {
  29. this._renderEffectAsPasses[renderEffect._name] = renderEffect;
  30. this._linkParameters();
  31. };
  32. PostProcessRenderEffect.prototype.getPass = function (passName) {
  33. for (var renderPassName in this._renderPasses) {
  34. if (renderPassName === passName) {
  35. return this._renderPasses[passName];
  36. }
  37. }
  38. };
  39. PostProcessRenderEffect.prototype.emptyPasses = function () {
  40. this._renderPasses = {};
  41. this._linkParameters();
  42. };
  43. PostProcessRenderEffect.prototype._attachCameras = function (cameras) {
  44. var cameraKey;
  45. var _cam = BABYLON.Tools.MakeArray(cameras || this._cameras);
  46. for (var i = 0; i < _cam.length; i++) {
  47. var camera = _cam[i];
  48. var cameraName = camera.name;
  49. if (this._singleInstance) {
  50. cameraKey = 0;
  51. } else {
  52. cameraKey = cameraName;
  53. }
  54. this._postProcesses[cameraKey] = this._postProcesses[cameraKey] || this._getPostProcess();
  55. var index = camera.attachPostProcess(this._postProcesses[cameraKey]);
  56. if (!this._indicesForCamera[cameraName]) {
  57. this._indicesForCamera[cameraName] = [];
  58. }
  59. this._indicesForCamera[cameraName].push(index);
  60. if (this._cameras.indexOf(camera) === -1) {
  61. this._cameras[cameraName] = camera;
  62. }
  63. for (var passName in this._renderPasses) {
  64. this._renderPasses[passName]._incRefCount();
  65. }
  66. }
  67. this._linkParameters();
  68. };
  69. PostProcessRenderEffect.prototype._detachCameras = function (cameras) {
  70. var _cam = BABYLON.Tools.MakeArray(cameras || this._cameras);
  71. for (var i = 0; i < _cam.length; i++) {
  72. var camera = _cam[i];
  73. var cameraName = camera.name;
  74. camera.detachPostProcess(this._postProcesses[this._singleInstance ? 0 : cameraName], this._indicesForCamera[cameraName]);
  75. var index = this._cameras.indexOf(cameraName);
  76. this._indicesForCamera.splice(index, 1);
  77. this._cameras.splice(index, 1);
  78. for (var passName in this._renderPasses) {
  79. this._renderPasses[passName]._decRefCount();
  80. }
  81. }
  82. };
  83. PostProcessRenderEffect.prototype._enable = function (cameras) {
  84. var _cam = BABYLON.Tools.MakeArray(cameras || this._cameras);
  85. for (var i = 0; i < _cam.length; i++) {
  86. var camera = _cam[i];
  87. var cameraName = camera.name;
  88. for (var j = 0; j < this._indicesForCamera[cameraName].length; j++) {
  89. if (camera._postProcesses[this._indicesForCamera[cameraName][j]] === undefined) {
  90. cameras[i].attachPostProcess(this._postProcesses[this._singleInstance ? 0 : cameraName], this._indicesForCamera[cameraName][j]);
  91. }
  92. }
  93. for (var passName in this._renderPasses) {
  94. this._renderPasses[passName]._incRefCount();
  95. }
  96. }
  97. };
  98. PostProcessRenderEffect.prototype._disable = function (cameras) {
  99. var _cam = BABYLON.Tools.MakeArray(cameras || this._cameras);
  100. for (var i = 0; i < _cam.length; i++) {
  101. var camera = _cam[i];
  102. var cameraName = camera.Name;
  103. camera.detachPostProcess(this._postProcesses[this._singleInstance ? 0 : cameraName], this._indicesForCamera[cameraName]);
  104. for (var passName in this._renderPasses) {
  105. this._renderPasses[passName]._decRefCount();
  106. }
  107. }
  108. };
  109. PostProcessRenderEffect.prototype.getPostProcess = function (camera) {
  110. if (this._singleInstance) {
  111. return this._postProcesses[0];
  112. } else {
  113. return this._postProcesses[camera.name];
  114. }
  115. };
  116. PostProcessRenderEffect.prototype._linkParameters = function () {
  117. var _this = this;
  118. for (var index in this._postProcesses) {
  119. if (this.applyParameters) {
  120. this.applyParameters(this._postProcesses[index]);
  121. }
  122. this._postProcesses[index].onBeforeRender = function (effect) {
  123. _this._linkTextures(effect);
  124. };
  125. }
  126. };
  127. PostProcessRenderEffect.prototype._linkTextures = function (effect) {
  128. for (var renderPassName in this._renderPasses) {
  129. effect.setTexture(renderPassName, this._renderPasses[renderPassName].getRenderTexture());
  130. }
  131. for (var renderEffectName in this._renderEffectAsPasses) {
  132. effect.setTextureFromPostProcess(renderEffectName + "Sampler", this._renderEffectAsPasses[renderEffectName].getPostProcess());
  133. }
  134. };
  135. return PostProcessRenderEffect;
  136. })();
  137. BABYLON.PostProcessRenderEffect = PostProcessRenderEffect;
  138. })(BABYLON || (BABYLON = {}));
  139. //# sourceMappingURL=babylon.postProcessRenderEffect.js.map