babylon.postProcessManager.js 5.0 KB

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