1 line
51 KiB
Plaintext
1 line
51 KiB
Plaintext
|
|
{"version":3,"file":"SMAAPass.cjs","sources":["../../src/postprocessing/SMAAPass.js"],"sourcesContent":["import { LinearFilter, NearestFilter, ShaderMaterial, Texture, UniformsUtils, WebGLRenderTarget } from 'three'\nimport { Pass, FullScreenQuad } from './Pass'\nimport { SMAAEdgesShader, SMAAWeightsShader, SMAABlendShader } from '../shaders/SMAAShader'\n\nclass SMAAPass extends Pass {\n constructor(width, height) {\n super()\n\n // render targets\n\n this.edgesRT = new WebGLRenderTarget(width, height, {\n depthBuffer: false,\n })\n this.edgesRT.texture.name = 'SMAAPass.edges'\n\n this.weightsRT = new WebGLRenderTarget(width, height, {\n depthBuffer: false,\n })\n this.weightsRT.texture.name = 'SMAAPass.weights'\n\n // textures\n const scope = this\n\n const areaTextureImage = new Image()\n areaTextureImage.src = this.getAreaTexture()\n areaTextureImage.onload = function () {\n // assigning data to HTMLImageElement.src is asynchronous (see #15162)\n scope.areaTexture.needsUpdate = true\n }\n\n this.areaTexture = new Texture()\n this.areaTexture.name = 'SMAAPass.area'\n this.areaTexture.image = areaTextureImage\n this.areaTexture.minFilter = LinearFilter\n this.areaTexture.generateMipmaps = false\n this.areaTexture.flipY = false\n\n const searchTextureImage = new Image()\n searchTextureImage.src = this.getSearchTexture()\n searchTextureImage.onload = function () {\n // assigning data to HTMLImageElement.src is asynchronous (see #15162)\n scope.searchTexture.needsUpdate = true\n }\n\n this.searchTexture = new Texture()\n this.searchTexture.name = 'SMAAPass.search'\n this.searchTexture.image = searchTextureImage\n this.searchTexture.magFilter = NearestFilter\n this.searchTexture.minFilter = NearestFilter\n this.searchTexture.generateMipmaps = false\n this.searchTexture.flipY = false\n\n // materials - pass 1\n\n if (SMAAEdgesShader === undefined) {\n console.error('THREE.SMAAPass relies on SMAAShader')\n }\n\n this.uniformsEdges = UniformsUtils.clone(SMAAEdgesShader.uniforms)\n\n this.uniformsEdges['resolution'].value.set(1 / width, 1 / height)\n\n this.materialEdges = new ShaderMaterial({\n defines: Object.assign({}, SMAAEdgesShader.defines),\n uniforms: this.uniformsEdges,\n vertexShader: SMAAEdgesShader.vertexShader,\n fragmentShader: SMAAEdgesShader.fragmentShader,\n })\n\n // materials - pass 2\n\n this.uniformsWeights = UniformsUtils.clone(SMAAWeightsShader.uniforms)\n\n this.uniformsWeights['resolution'].value.set(1 / width, 1 / height)\n this.uniformsWeights['tDiffuse'].value = this.edgesRT.texture\n this.uniformsWeights['tArea'].value = this.areaTexture\n this.uniformsWeights['tSearch'].value = this.searchTexture\n\n this.materialWeights = new ShaderMaterial({\n defines: Object.assign({}, SMAAWeightsShader.defines),\n uniforms: this.uniformsWeights,\n vertexShader: SMAAWeightsShader.vertexShader,\n fragmentShader: SMAAWeightsShader.fragmentShader,\n })\n\n // materials - pass 3\n\n this.uniformsBlend = UniformsUtils.clone(SMAABlendShader.uniforms)\n\n this.uniformsBlend['resolution'].value.set(1 / width, 1 / height)\n this.uniformsBlend['tDiffuse'].value = this.weightsRT.texture\n\n this.materialBlend = new ShaderMaterial({\n uniforms: this.uniformsBlend,\n vertexShader: SMAABlendShader.vertexShader,\n fragmentShader: SMAABlendShader.fragmentShader,\n })\n\n this.needsSwap = false\n\n this.fsQuad = new FullScreenQuad(null)\n }\n\n render(renderer, writeBuffer, readBuffer /*, deltaTime, maskActive*/) {\n // pass 1\n\n this.uniformsEdges['tDiffuse'].value = readBuffer.texture\n\n this.fsQuad.material = this.materialEdges\n\n renderer.setRenderTarget(this.edgesRT)\n if (this.clear) renderer.clear()\n this.fsQuad.render(renderer)\n\n // pass 2\n\n this.fsQuad.material = this.materialWeights\n\n renderer.setRenderTarget(this.weightsRT)\n i
|