babylon.postProcessManager.js 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. "use strict";
  2. var BABYLON = BABYLON || {};
  3. (function () {
  4. BABYLON.PostProcessManager = function (scene) {
  5. this._scene = scene;
  6. // VBO
  7. var vertices = [];
  8. vertices.push(1, 1);
  9. vertices.push(-1, 1);
  10. vertices.push(-1, -1);
  11. vertices.push(1, -1);
  12. this._vertexDeclaration = [2];
  13. this._vertexStrideSize = 2 * 4;
  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. BABYLON.PostProcessManager.prototype._prepareFrame = function () {
  27. var postProcesses = this._scene.activeCamera._postProcesses;
  28. var postProcessesTakenIndices = this._scene.activeCamera._postProcessesTakenIndices;
  29. if (postProcessesTakenIndices.length === 0 || !this._scene.postProcessesEnabled) {
  30. return;
  31. }
  32. postProcesses[this._scene.activeCamera._postProcessesTakenIndices[0]].activate(this._scene.activeCamera);
  33. };
  34. BABYLON.PostProcessManager.prototype._finalizeFrame = function (doNotPresent) {
  35. var postProcesses = this._scene.activeCamera._postProcesses;
  36. var postProcessesTakenIndices = this._scene.activeCamera._postProcessesTakenIndices;
  37. if (postProcessesTakenIndices.length === 0 || !this._scene.postProcessesEnabled) {
  38. return;
  39. }
  40. var engine = this._scene.getEngine();
  41. for (var index = 0; index < postProcessesTakenIndices.length; index++) {
  42. if (index < postProcessesTakenIndices.length - 1) {
  43. postProcesses[postProcessesTakenIndices[index + 1]].activate(this._scene.activeCamera);
  44. } else {
  45. engine.restoreDefaultFramebuffer();
  46. }
  47. if (doNotPresent) {
  48. break;
  49. }
  50. var effect = postProcesses[postProcessesTakenIndices[index]].apply();
  51. if (effect) {
  52. // VBOs
  53. engine.bindBuffers(this._vertexBuffer, this._indexBuffer, this._vertexDeclaration, this._vertexStrideSize, effect);
  54. // Draw order
  55. engine.draw(true, 0, 6);
  56. }
  57. }
  58. // Restore depth buffer
  59. engine.setDepthBuffer(true);
  60. engine.setDepthWrite(true);
  61. };
  62. BABYLON.PostProcessManager.prototype.dispose = function () {
  63. if (this._vertexBuffer) {
  64. this._scene.getEngine()._releaseBuffer(this._vertexBuffer);
  65. this._vertexBuffer = null;
  66. }
  67. if (this._indexBuffer) {
  68. this._scene.getEngine()._releaseBuffer(this._indexBuffer);
  69. this._indexBuffer = null;
  70. }
  71. };
  72. })();