|
@@ -46,6 +46,28 @@ THREE.WebGLProgram = ( function () {
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ function getToneMappingFunction( functionName, toneMapping ) {
|
|
|
|
+ var toneMappingName;
|
|
|
|
+
|
|
|
|
+ switch( toneMapping ) {
|
|
|
|
+ case THREE.LinearToneMapping:
|
|
|
|
+ toneMappingName = "Linear";
|
|
|
|
+ break;
|
|
|
|
+ case THREE.ReinhardToneMapping:
|
|
|
|
+ toneMappingName = "Reinhard";
|
|
|
|
+ break;
|
|
|
|
+ case THREE.Uncharted2ToneMapping:
|
|
|
|
+ toneMappingName = "Uncharted2";
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ throw new Error( 'unsupported toneMapping: ' + toneMapping );
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ return "vec3 " + functionName + "( vec3 color ) { return " + toneMappingName + "ToneMapping( color ); }";
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
function generateExtensions( extensions, parameters, rendererExtensions ) {
|
|
function generateExtensions( extensions, parameters, rendererExtensions ) {
|
|
|
|
|
|
extensions = extensions || {};
|
|
extensions = extensions || {};
|
|
@@ -501,8 +523,11 @@ THREE.WebGLProgram = ( function () {
|
|
'uniform mat4 viewMatrix;',
|
|
'uniform mat4 viewMatrix;',
|
|
'uniform vec3 cameraPosition;',
|
|
'uniform vec3 cameraPosition;',
|
|
|
|
|
|
- ( parameters.outputEncoding || parameters.mapEncoding || parameters.envMapEncoding || parameters.emissiveMapEncoding ) ? THREE.ShaderChunk[ 'encodings' ] : '',
|
|
|
|
|
|
+ ( parameters.toneMapping !== THREE.NoToneMapping ) ? "#define TONE_MAPPING" : '',
|
|
|
|
+ ( parameters.toneMapping !== THREE.NoToneMapping ) ? THREE.ShaderChunk[ 'tonemapping_pars_fragment' ] : '', // this code is required here because it is used by the toneMapping() function defined below
|
|
|
|
+ ( parameters.toneMapping !== THREE.NoToneMapping ) ? getToneMappingFunction( "toneMapping", parameters.toneMapping ) : '',
|
|
|
|
|
|
|
|
+ ( parameters.outputEncoding || parameters.mapEncoding || parameters.envMapEncoding || parameters.emissiveMapEncoding ) ? THREE.ShaderChunk[ 'encodings_pars_fragment' ] : '', // this code is required here because it is used by the various encoding/decoding function defined below
|
|
parameters.mapEncoding ? getTexelDecodingFunction( 'mapTexelToLinear', parameters.mapEncoding ) : '',
|
|
parameters.mapEncoding ? getTexelDecodingFunction( 'mapTexelToLinear', parameters.mapEncoding ) : '',
|
|
parameters.envMapEncoding ? getTexelDecodingFunction( 'envMapTexelToLinear', parameters.envMapEncoding ) : '',
|
|
parameters.envMapEncoding ? getTexelDecodingFunction( 'envMapTexelToLinear', parameters.envMapEncoding ) : '',
|
|
parameters.emissiveMapEncoding ? getTexelDecodingFunction( 'emissiveMapTexelToLinear', parameters.emissiveMapEncoding ) : '',
|
|
parameters.emissiveMapEncoding ? getTexelDecodingFunction( 'emissiveMapTexelToLinear', parameters.emissiveMapEncoding ) : '',
|