babylon.postProcessManager.js 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. var BABYLON;
  2. (function (BABYLON) {
  3. var PostProcessManager = (function () {
  4. function PostProcessManager(scene) {
  5. this._vertexDeclaration = [2];
  6. this._vertexStrideSize = 2 * 4;
  7. this._scene = scene;
  8. }
  9. PostProcessManager.prototype._prepareBuffers = function () {
  10. if (this._vertexBuffer) {
  11. return;
  12. }
  13. // VBO
  14. var vertices = [];
  15. vertices.push(1, 1);
  16. vertices.push(-1, 1);
  17. vertices.push(-1, -1);
  18. vertices.push(1, -1);
  19. this._vertexBuffer = this._scene.getEngine().createVertexBuffer(vertices);
  20. // Indices
  21. var indices = [];
  22. indices.push(0);
  23. indices.push(1);
  24. indices.push(2);
  25. indices.push(0);
  26. indices.push(2);
  27. indices.push(3);
  28. this._indexBuffer = this._scene.getEngine().createIndexBuffer(indices);
  29. };
  30. // Methods
  31. PostProcessManager.prototype._prepareFrame = function (sourceTexture) {
  32. var postProcesses = this._scene.activeCamera._postProcesses;
  33. var postProcessesTakenIndices = this._scene.activeCamera._postProcessesTakenIndices;
  34. if (postProcessesTakenIndices.length === 0 || !this._scene.postProcessesEnabled) {
  35. return false;
  36. }
  37. postProcesses[this._scene.activeCamera._postProcessesTakenIndices[0]].activate(this._scene.activeCamera, sourceTexture);
  38. return true;
  39. };
  40. PostProcessManager.prototype.directRender = function (postProcesses, targetTexture) {
  41. var engine = this._scene.getEngine();
  42. for (var index = 0; index < postProcesses.length; index++) {
  43. if (index < postProcesses.length - 1) {
  44. postProcesses[index + 1].activate(this._scene.activeCamera, targetTexture);
  45. }
  46. else {
  47. if (targetTexture) {
  48. engine.bindFramebuffer(targetTexture);
  49. }
  50. else {
  51. engine.restoreDefaultFramebuffer();
  52. }
  53. }
  54. var pp = postProcesses[index];
  55. var effect = pp.apply();
  56. if (effect) {
  57. if (pp.onBeforeRender) {
  58. pp.onBeforeRender(effect);
  59. }
  60. // VBOs
  61. this._prepareBuffers();
  62. engine.bindBuffers(this._vertexBuffer, this._indexBuffer, this._vertexDeclaration, this._vertexStrideSize, effect);
  63. // Draw order
  64. engine.draw(true, 0, 6);
  65. if (pp.onAfterRender) {
  66. pp.onAfterRender(effect);
  67. }
  68. }
  69. }
  70. // Restore depth buffer
  71. engine.setDepthBuffer(true);
  72. engine.setDepthWrite(true);
  73. };
  74. PostProcessManager.prototype._finalizeFrame = function (doNotPresent, targetTexture, postProcesses) {
  75. postProcesses = postProcesses || this._scene.activeCamera._postProcesses;
  76. var postProcessesTakenIndices = this._scene.activeCamera._postProcessesTakenIndices;
  77. if (postProcessesTakenIndices.length === 0 || !this._scene.postProcessesEnabled) {
  78. return;
  79. }
  80. var engine = this._scene.getEngine();
  81. for (var index = 0; index < postProcessesTakenIndices.length; index++) {
  82. if (index < postProcessesTakenIndices.length - 1) {
  83. postProcesses[postProcessesTakenIndices[index + 1]].activate(this._scene.activeCamera);
  84. }
  85. else {
  86. if (targetTexture) {
  87. engine.bindFramebuffer(targetTexture);
  88. }
  89. else {
  90. engine.restoreDefaultFramebuffer();
  91. }
  92. }
  93. if (doNotPresent) {
  94. break;
  95. }
  96. var pp = postProcesses[postProcessesTakenIndices[index]];
  97. var effect = pp.apply();
  98. if (effect) {
  99. if (pp.onBeforeRender) {
  100. pp.onBeforeRender(effect);
  101. }
  102. // VBOs
  103. this._prepareBuffers();
  104. engine.bindBuffers(this._vertexBuffer, this._indexBuffer, this._vertexDeclaration, this._vertexStrideSize, effect);
  105. // Draw order
  106. engine.draw(true, 0, 6);
  107. if (pp.onAfterRender) {
  108. pp.onAfterRender(effect);
  109. }
  110. }
  111. }
  112. // Restore depth buffer
  113. engine.setDepthBuffer(true);
  114. engine.setDepthWrite(true);
  115. };
  116. PostProcessManager.prototype.dispose = function () {
  117. if (this._vertexBuffer) {
  118. this._scene.getEngine()._releaseBuffer(this._vertexBuffer);
  119. this._vertexBuffer = null;
  120. }
  121. if (this._indexBuffer) {
  122. this._scene.getEngine()._releaseBuffer(this._indexBuffer);
  123. this._indexBuffer = null;
  124. }
  125. };
  126. return PostProcessManager;
  127. })();
  128. BABYLON.PostProcessManager = PostProcessManager;
  129. })(BABYLON || (BABYLON = {}));
  130. //# sourceMappingURL=babylon.postProcessManager.js.map