Spaces:
Running
Running
| import { EventDispatcher } from '../core/EventDispatcher.js'; | |
| import { Texture } from '../textures/Texture.js'; | |
| import { LinearFilter } from '../constants.js'; | |
| import { Vector4 } from '../math/Vector4.js'; | |
| /* | |
| In options, we can specify: | |
| * Texture parameters for an auto-generated target texture | |
| * depthBuffer/stencilBuffer: Booleans to indicate if we should generate these buffers | |
| */ | |
| class WebGLRenderTarget extends EventDispatcher { | |
| constructor(width, height, options = {}) { | |
| super(); | |
| this.width = width; | |
| this.height = height; | |
| this.depth = 1; | |
| this.scissor = new Vector4(0, 0, width, height); | |
| this.scissorTest = false; | |
| this.viewport = new Vector4(0, 0, width, height); | |
| this.texture = new Texture( | |
| undefined, | |
| options.mapping, | |
| options.wrapS, | |
| options.wrapT, | |
| options.magFilter, | |
| options.minFilter, | |
| options.format, | |
| options.type, | |
| options.anisotropy, | |
| options.encoding | |
| ); | |
| this.texture.isRenderTargetTexture = true; | |
| this.texture.image = { width: width, height: height, depth: 1 }; | |
| this.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false; | |
| this.texture.internalFormat = options.internalFormat !== undefined ? options.internalFormat : null; | |
| this.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter; | |
| this.depthBuffer = options.depthBuffer !== undefined ? options.depthBuffer : true; | |
| this.stencilBuffer = options.stencilBuffer !== undefined ? options.stencilBuffer : false; | |
| this.depthTexture = options.depthTexture !== undefined ? options.depthTexture : null; | |
| } | |
| setTexture(texture) { | |
| texture.image = { | |
| width: this.width, | |
| height: this.height, | |
| depth: this.depth, | |
| }; | |
| this.texture = texture; | |
| } | |
| setSize(width, height, depth = 1) { | |
| if (this.width !== width || this.height !== height || this.depth !== depth) { | |
| this.width = width; | |
| this.height = height; | |
| this.depth = depth; | |
| this.texture.image.width = width; | |
| this.texture.image.height = height; | |
| this.texture.image.depth = depth; | |
| this.dispose(); | |
| } | |
| this.viewport.set(0, 0, width, height); | |
| this.scissor.set(0, 0, width, height); | |
| } | |
| clone() { | |
| return new this.constructor().copy(this); | |
| } | |
| copy(source) { | |
| this.width = source.width; | |
| this.height = source.height; | |
| this.depth = source.depth; | |
| this.viewport.copy(source.viewport); | |
| this.texture = source.texture.clone(); | |
| // ensure image object is not shared, see #20328 | |
| this.texture.image = Object.assign({}, source.texture.image); | |
| this.depthBuffer = source.depthBuffer; | |
| this.stencilBuffer = source.stencilBuffer; | |
| this.depthTexture = source.depthTexture; | |
| return this; | |
| } | |
| dispose() { | |
| this.dispatchEvent({ type: 'dispose' }); | |
| } | |
| } | |
| WebGLRenderTarget.prototype.isWebGLRenderTarget = true; | |
| export { WebGLRenderTarget }; | |