| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 | ( function () {	/** * Depth-of-field shader using mipmaps * - from Matt Handley @applmak * - requires power-of-2 sized render target with enabled mipmaps */	const DOFMipMapShader = {		uniforms: {			'tColor': {				value: null			},			'tDepth': {				value: null			},			'focus': {				value: 1.0			},			'maxblur': {				value: 1.0			}		},		vertexShader:  /* glsl */  `		varying vec2 vUv;		void main() {			vUv = uv;			gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );		}`,		fragmentShader:  /* glsl */  `		uniform float focus;		uniform float maxblur;		uniform sampler2D tColor;		uniform sampler2D tDepth;		varying vec2 vUv;		void main() {			vec4 depth = texture2D( tDepth, vUv );			float factor = depth.x - focus;			vec4 col = texture2D( tColor, vUv, 2.0 * maxblur * abs( focus - depth.x ) );			gl_FragColor = col;			gl_FragColor.a = 1.0;		}`	};	THREE.DOFMipMapShader = DOFMipMapShader;} )();
 |