Spaces:
Running
Running
File size: 1,629 Bytes
8194362 aa14f68 8194362 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
/**
* The source code of this file is heavily based on
* https://github.com/mrdoob/three.js/blob/dev/examples/js/postprocessing/EffectComposer.js
*/
import { WebGLRenderTarget, LinearFilter, RGBAFormat } from 'three'
export default class EffectComposer {
constructor (renderer, renderTarget) {
this.renderer = renderer
if (renderTarget === undefined) {
const parameters = {
minFilter: LinearFilter,
magFilter: LinearFilter,
format: RGBAFormat,
stencilBuffer: false
}
const size = renderer.getDrawingBufferSize()
renderTarget = new WebGLRenderTarget(size.width, size.height, parameters)
renderTarget.texture.name = 'EffectComposer.rt1'
}
this.renderTarget1 = renderTarget
this.renderTarget2 = renderTarget.clone()
this.renderTarget2.texture.name = 'EffectComposer.rt2'
this.writeBuffer = this.renderTarget1
this.readBuffer = this.renderTarget2
this.passes = []
}
swapBuffers () {
const tmp = this.readBuffer
this.readBuffer = this.writeBuffer
this.writeBuffer = tmp
}
addPass (pass) {
this.passes.push(pass)
const size = this.renderer.getDrawingBufferSize()
pass.setSize(size.width, size.height)
}
render () {
for (let i = 0; i < this.passes.length; i++) {
this.passes[i].render(this.renderer, this.writeBuffer, this.readBuffer)
}
}
setSize (width, height) {
this.renderTarget1.setSize(width, height)
this.renderTarget2.setSize(width, height)
for (let i = 0; i < this.passes.length; i++) {
this.passes[i].setSize(width, height)
}
}
}
|