| const OutputShader = { |
|
|
| name: 'OutputShader', |
|
|
| uniforms: { |
|
|
| 'tDiffuse': { value: null }, |
| 'toneMappingExposure': { value: 1 } |
|
|
| }, |
|
|
| vertexShader: ` |
| precision highp float; |
| |
| uniform mat4 modelViewMatrix; |
| uniform mat4 projectionMatrix; |
| |
| attribute vec3 position; |
| attribute vec2 uv; |
| |
| varying vec2 vUv; |
| |
| void main() { |
| |
| vUv = uv; |
| gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); |
| |
| }`, |
|
|
| fragmentShader: ` |
| |
| precision highp float; |
| |
| uniform sampler2D tDiffuse; |
| |
| #include <tonemapping_pars_fragment> |
| #include <colorspace_pars_fragment> |
| |
| varying vec2 vUv; |
| |
| void main() { |
| |
| gl_FragColor = texture2D( tDiffuse, vUv ); |
| |
| // tone mapping |
| |
| #ifdef LINEAR_TONE_MAPPING |
| |
| gl_FragColor.rgb = LinearToneMapping( gl_FragColor.rgb ); |
| |
| #elif defined( REINHARD_TONE_MAPPING ) |
| |
| gl_FragColor.rgb = ReinhardToneMapping( gl_FragColor.rgb ); |
| |
| #elif defined( CINEON_TONE_MAPPING ) |
| |
| gl_FragColor.rgb = OptimizedCineonToneMapping( gl_FragColor.rgb ); |
| |
| #elif defined( ACES_FILMIC_TONE_MAPPING ) |
| |
| gl_FragColor.rgb = ACESFilmicToneMapping( gl_FragColor.rgb ); |
| |
| #elif defined( AGX_TONE_MAPPING ) |
| |
| gl_FragColor.rgb = AgXToneMapping( gl_FragColor.rgb ); |
| |
| #endif |
| |
| // color space |
| |
| #ifdef SRGB_TRANSFER |
| |
| gl_FragColor = sRGBTransferOETF( gl_FragColor ); |
| |
| #endif |
| |
| }` |
|
|
| }; |
|
|
| export { OutputShader }; |
|
|