EffectComposer.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. THREE.EffectComposer = function(e, t) {
  2. if (this.renderer = e,
  3. void 0 === t) {
  4. var i = {
  5. minFilter: THREE.LinearFilter,
  6. magFilter: THREE.LinearFilter,
  7. format: THREE.RGBAFormat,
  8. stencilBuffer: !1
  9. }
  10. , r = e.getSize();
  11. t = new THREE.WebGLRenderTarget(r.width,r.height,i)
  12. }
  13. this.renderTarget1 = t,
  14. this.renderTarget2 = t.clone(),
  15. this.writeBuffer = this.renderTarget1,
  16. this.readBuffer = this.renderTarget2,
  17. this.passes = [],
  18. void 0 === THREE.CopyShader && console.error("THREE.EffectComposer relies on THREE.CopyShader"),
  19. this.copyPass = new THREE.ShaderPass(THREE.CopyShader)
  20. }
  21. ,
  22. THREE.EffectComposer.prototype = {
  23. swapBuffers: function() {
  24. var e = this.readBuffer;
  25. this.readBuffer = this.writeBuffer,
  26. this.writeBuffer = e
  27. },
  28. addPass: function(e) {
  29. this.passes.push(e)
  30. },
  31. insertPass: function(e, t) {
  32. this.passes.splice(t, 0, e)
  33. },
  34. render: function(e) {
  35. this.writeBuffer = this.renderTarget1,
  36. this.readBuffer = this.renderTarget2;
  37. var t, i, r = !1, o = this.passes.length;
  38. for (i = 0; i < o; i++)
  39. if (t = this.passes[i],
  40. t.enabled) {
  41. if (t.render(this.renderer, this.writeBuffer, this.readBuffer, e, r),
  42. t.needsSwap) {
  43. if (r) {
  44. var a = this.renderer.context;
  45. a.stencilFunc(a.NOTEQUAL, 1, 4294967295),
  46. this.copyPass.render(this.renderer, this.writeBuffer, this.readBuffer, e),
  47. a.stencilFunc(a.EQUAL, 1, 4294967295)
  48. }
  49. this.swapBuffers()
  50. }
  51. t instanceof THREE.MaskPass ? r = !0 : t instanceof THREE.ClearMaskPass && (r = !1)
  52. }
  53. },
  54. reset: function(e) {
  55. if (void 0 === e) {
  56. var t = this.renderer.getSize();
  57. e = this.renderTarget1.clone(),
  58. e.setSize(t.width, t.height)
  59. }
  60. this.renderTarget1.dispose(),
  61. this.renderTarget2.dispose(),
  62. this.renderTarget1 = e,
  63. this.renderTarget2 = e.clone(),
  64. this.writeBuffer = this.renderTarget1,
  65. this.readBuffer = this.renderTarget2
  66. },
  67. setSize: function(e, t) {
  68. this.renderTarget1.setSize(e, t),
  69. this.renderTarget2.setSize(e, t)
  70. }
  71. }