{"version":3,"sources":["jsdelivr-header.js","/npm/three@0.134.0/examples/js/objects/Lensflare.js"],"names":[],"mappings":"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","file":"/npm/three@0.134.0/examples/js/objects/Lensflare.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/three@0.134.0/examples/js/objects/Lensflare.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","( function () {\n\n\tclass Lensflare extends THREE.Mesh {\n\n\t\tconstructor() {\n\n\t\t\tsuper( Lensflare.Geometry, new THREE.MeshBasicMaterial( {\n\t\t\t\topacity: 0,\n\t\t\t\ttransparent: true\n\t\t\t} ) );\n\t\t\tthis.type = 'Lensflare';\n\t\t\tthis.frustumCulled = false;\n\t\t\tthis.renderOrder = Infinity; //\n\n\t\t\tconst positionScreen = new THREE.Vector3();\n\t\t\tconst positionView = new THREE.Vector3(); // textures\n\n\t\t\tconst tempMap = new THREE.DataTexture( new Uint8Array( 16 * 16 * 3 ), 16, 16, THREE.RGBFormat );\n\t\t\ttempMap.minFilter = THREE.NearestFilter;\n\t\t\ttempMap.magFilter = THREE.NearestFilter;\n\t\t\ttempMap.wrapS = THREE.ClampToEdgeWrapping;\n\t\t\ttempMap.wrapT = THREE.ClampToEdgeWrapping;\n\t\t\tconst occlusionMap = new THREE.DataTexture( new Uint8Array( 16 * 16 * 3 ), 16, 16, THREE.RGBFormat );\n\t\t\tocclusionMap.minFilter = THREE.NearestFilter;\n\t\t\tocclusionMap.magFilter = THREE.NearestFilter;\n\t\t\tocclusionMap.wrapS = THREE.ClampToEdgeWrapping;\n\t\t\tocclusionMap.wrapT = THREE.ClampToEdgeWrapping; // material\n\n\t\t\tconst geometry = Lensflare.Geometry;\n\t\t\tconst material1a = new THREE.RawShaderMaterial( {\n\t\t\t\tuniforms: {\n\t\t\t\t\t'scale': {\n\t\t\t\t\t\tvalue: null\n\t\t\t\t\t},\n\t\t\t\t\t'screenPosition': {\n\t\t\t\t\t\tvalue: null\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tvertexShader:\n      /* glsl */\n      `\n\n\t\t\t\tprecision highp float;\n\n\t\t\t\tuniform vec3 screenPosition;\n\t\t\t\tuniform vec2 scale;\n\n\t\t\t\tattribute vec3 position;\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tgl_Position = vec4( position.xy * scale + screenPosition.xy, screenPosition.z, 1.0 );\n\n\t\t\t\t}`,\n\t\t\t\tfragmentShader:\n      /* glsl */\n      `\n\n\t\t\t\tprecision highp float;\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tgl_FragColor = vec4( 1.0, 0.0, 1.0, 1.0 );\n\n\t\t\t\t}`,\n\t\t\t\tdepthTest: true,\n\t\t\t\tdepthWrite: false,\n\t\t\t\ttransparent: false\n\t\t\t} );\n\t\t\tconst material1b = new THREE.RawShaderMaterial( {\n\t\t\t\tuniforms: {\n\t\t\t\t\t'map': {\n\t\t\t\t\t\tvalue: tempMap\n\t\t\t\t\t},\n\t\t\t\t\t'scale': {\n\t\t\t\t\t\tvalue: null\n\t\t\t\t\t},\n\t\t\t\t\t'screenPosition': {\n\t\t\t\t\t\tvalue: null\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tvertexShader:\n      /* glsl */\n      `\n\n\t\t\t\tprecision highp float;\n\n\t\t\t\tuniform vec3 screenPosition;\n\t\t\t\tuniform vec2 scale;\n\n\t\t\t\tattribute vec3 position;\n\t\t\t\tattribute vec2 uv;\n\n\t\t\t\tvarying vec2 vUV;\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvUV = uv;\n\n\t\t\t\t\tgl_Position = vec4( position.xy * scale + screenPosition.xy, screenPosition.z, 1.0 );\n\n\t\t\t\t}`,\n\t\t\t\tfragmentShader:\n      /* glsl */\n      `\n\n\t\t\t\tprecision highp float;\n\n\t\t\t\tuniform sampler2D map;\n\n\t\t\t\tvarying vec2 vUV;\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tgl_FragColor = texture2D( map, vUV );\n\n\t\t\t\t}`,\n\t\t\t\tdepthTest: false,\n\t\t\t\tdepthWrite: false,\n\t\t\t\ttransparent: false\n\t\t\t} ); // the following object is used for occlusionMap generation\n\n\t\t\tconst mesh1 = new THREE.Mesh( geometry, material1a ); //\n\n\t\t\tconst elements = [];\n\t\t\tconst shader = LensflareElement.Shader;\n\t\t\tconst material2 = new THREE.RawShaderMaterial( {\n\t\t\t\tuniforms: {\n\t\t\t\t\t'map': {\n\t\t\t\t\t\tvalue: null\n\t\t\t\t\t},\n\t\t\t\t\t'occlusionMap': {\n\t\t\t\t\t\tvalue: occlusionMap\n\t\t\t\t\t},\n\t\t\t\t\t'color': {\n\t\t\t\t\t\tvalue: new THREE.Color( 0xffffff )\n\t\t\t\t\t},\n\t\t\t\t\t'scale': {\n\t\t\t\t\t\tvalue: new THREE.Vector2()\n\t\t\t\t\t},\n\t\t\t\t\t'screenPosition': {\n\t\t\t\t\t\tvalue: new THREE.Vector3()\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tvertexShader: shader.vertexShader,\n\t\t\t\tfragmentShader: shader.fragmentShader,\n\t\t\t\tblending: THREE.AdditiveBlending,\n\t\t\t\ttransparent: true,\n\t\t\t\tdepthWrite: false\n\t\t\t} );\n\t\t\tconst mesh2 = new THREE.Mesh( geometry, material2 );\n\n\t\t\tthis.addElement = function ( element ) {\n\n\t\t\t\telements.push( element );\n\n\t\t\t}; //\n\n\n\t\t\tconst scale = new THREE.Vector2();\n\t\t\tconst screenPositionPixels = new THREE.Vector2();\n\t\t\tconst validArea = new THREE.Box2();\n\t\t\tconst viewport = new THREE.Vector4();\n\n\t\t\tthis.onBeforeRender = function ( renderer, scene, camera ) {\n\n\t\t\t\trenderer.getCurrentViewport( viewport );\n\t\t\t\tconst invAspect = viewport.w / viewport.z;\n\t\t\t\tconst halfViewportWidth = viewport.z / 2.0;\n\t\t\t\tconst halfViewportHeight = viewport.w / 2.0;\n\t\t\t\tlet size = 16 / viewport.w;\n\t\t\t\tscale.set( size * invAspect, size );\n\t\t\t\tvalidArea.min.set( viewport.x, viewport.y );\n\t\t\t\tvalidArea.max.set( viewport.x + ( viewport.z - 16 ), viewport.y + ( viewport.w - 16 ) ); // calculate position in screen space\n\n\t\t\t\tpositionView.setFromMatrixPosition( this.matrixWorld );\n\t\t\t\tpositionView.applyMatrix4( camera.matrixWorldInverse );\n\t\t\t\tif ( positionView.z > 0 ) return; // lensflare is behind the camera\n\n\t\t\t\tpositionScreen.copy( positionView ).applyMatrix4( camera.projectionMatrix ); // horizontal and vertical coordinate of the lower left corner of the pixels to copy\n\n\t\t\t\tscreenPositionPixels.x = viewport.x + positionScreen.x * halfViewportWidth + halfViewportWidth - 8;\n\t\t\t\tscreenPositionPixels.y = viewport.y + positionScreen.y * halfViewportHeight + halfViewportHeight - 8; // screen cull\n\n\t\t\t\tif ( validArea.containsPoint( screenPositionPixels ) ) {\n\n\t\t\t\t\t// save current RGB to temp texture\n\t\t\t\t\trenderer.copyFramebufferToTexture( screenPositionPixels, tempMap ); // render pink quad\n\n\t\t\t\t\tlet uniforms = material1a.uniforms;\n\t\t\t\t\tuniforms[ 'scale' ].value = scale;\n\t\t\t\t\tuniforms[ 'screenPosition' ].value = positionScreen;\n\t\t\t\t\trenderer.renderBufferDirect( camera, null, geometry, material1a, mesh1, null ); // copy result to occlusionMap\n\n\t\t\t\t\trenderer.copyFramebufferToTexture( screenPositionPixels, occlusionMap ); // restore graphics\n\n\t\t\t\t\tuniforms = material1b.uniforms;\n\t\t\t\t\tuniforms[ 'scale' ].value = scale;\n\t\t\t\t\tuniforms[ 'screenPosition' ].value = positionScreen;\n\t\t\t\t\trenderer.renderBufferDirect( camera, null, geometry, material1b, mesh1, null ); // render elements\n\n\t\t\t\t\tconst vecX = - positionScreen.x * 2;\n\t\t\t\t\tconst vecY = - positionScreen.y * 2;\n\n\t\t\t\t\tfor ( let i = 0, l = elements.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst element = elements[ i ];\n\t\t\t\t\t\tconst uniforms = material2.uniforms;\n\t\t\t\t\t\tuniforms[ 'color' ].value.copy( element.color );\n\t\t\t\t\t\tuniforms[ 'map' ].value = element.texture;\n\t\t\t\t\t\tuniforms[ 'screenPosition' ].value.x = positionScreen.x + vecX * element.distance;\n\t\t\t\t\t\tuniforms[ 'screenPosition' ].value.y = positionScreen.y + vecY * element.distance;\n\t\t\t\t\t\tsize = element.size / viewport.w;\n\t\t\t\t\t\tconst invAspect = viewport.w / viewport.z;\n\t\t\t\t\t\tuniforms[ 'scale' ].value.set( size * invAspect, size );\n\t\t\t\t\t\tmaterial2.uniformsNeedUpdate = true;\n\t\t\t\t\t\trenderer.renderBufferDirect( camera, null, geometry, material2, mesh2, null );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t\tthis.dispose = function () {\n\n\t\t\t\tmaterial1a.dispose();\n\t\t\t\tmaterial1b.dispose();\n\t\t\t\tmaterial2.dispose();\n\t\t\t\ttempMap.dispose();\n\t\t\t\tocclusionMap.dispose();\n\n\t\t\t\tfor ( let i = 0, l = elements.length; i < l; i ++ ) {\n\n\t\t\t\t\telements[ i ].texture.dispose();\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}\n\n\t}\n\n\tLensflare.prototype.isLensflare = true; //\n\n\tclass LensflareElement {\n\n\t\tconstructor( texture, size = 1, distance = 0, color = new THREE.Color( 0xffffff ) ) {\n\n\t\t\tthis.texture = texture;\n\t\t\tthis.size = size;\n\t\t\tthis.distance = distance;\n\t\t\tthis.color = color;\n\n\t\t}\n\n\t}\n\n\tLensflareElement.Shader = {\n\t\tuniforms: {\n\t\t\t'map': {\n\t\t\t\tvalue: null\n\t\t\t},\n\t\t\t'occlusionMap': {\n\t\t\t\tvalue: null\n\t\t\t},\n\t\t\t'color': {\n\t\t\t\tvalue: null\n\t\t\t},\n\t\t\t'scale': {\n\t\t\t\tvalue: null\n\t\t\t},\n\t\t\t'screenPosition': {\n\t\t\t\tvalue: null\n\t\t\t}\n\t\t},\n\t\tvertexShader:\n  /* glsl */\n  `\n\n\t\tprecision highp float;\n\n\t\tuniform vec3 screenPosition;\n\t\tuniform vec2 scale;\n\n\t\tuniform sampler2D occlusionMap;\n\n\t\tattribute vec3 position;\n\t\tattribute vec2 uv;\n\n\t\tvarying vec2 vUV;\n\t\tvarying float vVisibility;\n\n\t\tvoid main() {\n\n\t\t\tvUV = uv;\n\n\t\t\tvec2 pos = position.xy;\n\n\t\t\tvec4 visibility = texture2D( occlusionMap, vec2( 0.1, 0.1 ) );\n\t\t\tvisibility += texture2D( occlusionMap, vec2( 0.5, 0.1 ) );\n\t\t\tvisibility += texture2D( occlusionMap, vec2( 0.9, 0.1 ) );\n\t\t\tvisibility += texture2D( occlusionMap, vec2( 0.9, 0.5 ) );\n\t\t\tvisibility += texture2D( occlusionMap, vec2( 0.9, 0.9 ) );\n\t\t\tvisibility += texture2D( occlusionMap, vec2( 0.5, 0.9 ) );\n\t\t\tvisibility += texture2D( occlusionMap, vec2( 0.1, 0.9 ) );\n\t\t\tvisibility += texture2D( occlusionMap, vec2( 0.1, 0.5 ) );\n\t\t\tvisibility += texture2D( occlusionMap, vec2( 0.5, 0.5 ) );\n\n\t\t\tvVisibility =        visibility.r / 9.0;\n\t\t\tvVisibility *= 1.0 - visibility.g / 9.0;\n\t\t\tvVisibility *=       visibility.b / 9.0;\n\n\t\t\tgl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );\n\n\t\t}`,\n\t\tfragmentShader:\n  /* glsl */\n  `\n\n\t\tprecision highp float;\n\n\t\tuniform sampler2D map;\n\t\tuniform vec3 color;\n\n\t\tvarying vec2 vUV;\n\t\tvarying float vVisibility;\n\n\t\tvoid main() {\n\n\t\t\tvec4 texture = texture2D( map, vUV );\n\t\t\ttexture.a *= vVisibility;\n\t\t\tgl_FragColor = texture;\n\t\t\tgl_FragColor.rgb *= color;\n\n\t\t}`\n\t};\n\n\tLensflare.Geometry = function () {\n\n\t\tconst geometry = new THREE.BufferGeometry();\n\t\tconst float32Array = new Float32Array( [ - 1, - 1, 0, 0, 0, 1, - 1, 0, 1, 0, 1, 1, 0, 1, 1, - 1, 1, 0, 0, 1 ] );\n\t\tconst interleavedBuffer = new THREE.InterleavedBuffer( float32Array, 5 );\n\t\tgeometry.setIndex( [ 0, 1, 2, 0, 2, 3 ] );\n\t\tgeometry.setAttribute( 'position', new THREE.InterleavedBufferAttribute( interleavedBuffer, 3, 0, false ) );\n\t\tgeometry.setAttribute( 'uv', new THREE.InterleavedBufferAttribute( interleavedBuffer, 2, 3, false ) );\n\t\treturn geometry;\n\n\t}();\n\n\tTHREE.Lensflare = Lensflare;\n\tTHREE.LensflareElement = LensflareElement;\n\n} )();\n"]}