Browse Source

adopt macro-defined encodings, remove uniform defined encodings.

Ben Houston 9 years ago
parent
commit
e2c86dae12

+ 1 - 1
src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl

@@ -2,7 +2,7 @@
 
 	vec4 emissiveColor = texture2D( emissiveMap, vUv );
 
-	emissiveColor.rgb = EncodingToLinear( emissiveColor, emissiveMapEncoding ).rgb;
+	emissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;
 
 	totalEmissiveLight *= emissiveColor.rgb;
 

+ 6 - 1
src/renderers/shaders/ShaderChunk/emissivemap_pars_fragment.glsl

@@ -1,6 +1,11 @@
 #ifdef USE_EMISSIVEMAP
 
 	uniform sampler2D emissiveMap;
-	uniform int emissiveMapEncoding;
+
+	vec4 emissiveMapTexelToLinear( vec4 texel ) {
+		#define DECODE_MACRO EMISSIVEMAP_ENCODING
+			#include "encoding_template.glsl"
+		#undef DECODE_MACRO
+	}
 
 #endif

+ 14 - 14
src/renderers/shaders/ShaderChunk/encoding_template.glsl

@@ -3,19 +3,19 @@
 
 #if defined( MACRO_DECODE )
 
-  #if ( MACRO_ENCODING_TYPE == ENCODING_Linear )
+  #if ( MACRO_DECODE == ENCODING_Linear )
     return value;
-  #elif ( MACRO_ENCODING_TYPE == ENCODING_sRGB )
+  #elif ( MACRO_DECODE == ENCODING_sRGB )
     return sRGBToLinear( value );
-  #elif ( MACRO_ENCODING_TYPE == ENCODING_RGBE )
+  #elif ( MACRO_DECODE == ENCODING_RGBE )
     return RGBEToLinear( value );
-  //#elif ( MACRO_ENCODING_TYPE == ENCODING_LogLuv )  TODO
+  //#elif ( MACRO_DECODE == ENCODING_LogLuv )  TODO
   //  return LogLuvToLinear( value );
-  #elif ( MACRO_ENCODING_TYPE == ENCODING_RGBM7 )
+  #elif ( MACRO_DECODE == ENCODING_RGBM7 )
     return RGBM7ToLinear( value );
-  #elif ( MACRO_ENCODING_TYPE == ENCODING_RGBM16 )
+  #elif ( MACRO_DECODE == ENCODING_RGBM16 )
     return RGBM16ToLinear( value );
-  //#elif ( MACRO_ENCODING_TYPE == ENCODING_RGBD )  TODO
+  //#elif ( MACRO_DECODE == ENCODING_RGBD )  TODO
   //  return RGBMDToLinear( value );
   #else
     return vec4( 1.0, 0.0, 0.0, 1.0 );
@@ -23,19 +23,19 @@
 
 #elif defined( MACRO_ENCODE )
 
-  #if ( MACRO_ENCODING_TYPE == ENCODING_Linear )
+  #if ( MACRO_ENCODE == ENCODING_Linear )
     return value;
-  #elif ( MACRO_ENCODING_TYPE == ENCODING_sRGB )
+  #elif ( MACRO_ENCODE == ENCODING_sRGB )
     return LinearTosRGB( value );
-  #elif ( MACRO_ENCODING_TYPE == ENCODING_RGBE )
+  #elif ( MACRO_ENCODE == ENCODING_RGBE )
     return LinearToRGBE( value );
-  //#elif ( MACRO_ENCODING_TYPE == ENCODING_LogLuv )  TODO
+  //#elif ( MACRO_ENCODE == ENCODING_LogLuv )  TODO
   //  return LinearToLogLuv( value );
-  //#elif ( MACRO_ENCODING_TYPE == ENCODING_RGBM7 )  TODO
+  //#elif ( MACRO_ENCODE == ENCODING_RGBM7 )  TODO
   //  return LinearToRGBM7( value );
-  //#elif ( MACRO_ENCODING_TYPE == ENCODING_RGBM16 )  TODO
+  //#elif ( MACRO_ENCODE == ENCODING_RGBM16 )  TODO
   //  return LinearToRGBM16( value );
-  //#elif ( MACRO_ENCODING_TYPE == ENCODING_RGBD )  TODO
+  //#elif ( MACRO_ENCODE == ENCODING_RGBD )  TODO
   //  return LinearToRGBMD( value );
   #else
     return vec4( 1.0, 0.0, 0.0, 1.0 );

+ 1 - 1
src/renderers/shaders/ShaderChunk/envmap_fragment.glsl

@@ -43,7 +43,7 @@
 		vec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );
 	#endif
 
-	envColor = EncodingToLinear( envColor, envMapEncoding );
+	envColor = envMapTexelToLinear( envColor );
 
 	#ifdef ENVMAP_BLENDING_MULTIPLY
 

+ 6 - 1
src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl

@@ -10,7 +10,12 @@
 		uniform sampler2D envMap;
 	#endif
 	uniform float flipEnvMap;
-	uniform int envMapEncoding;
+
+	vec4 envMapTexelToLinear( vec4 texel ) {
+		#define DECODE_MACRO ENVMAP_ENCODING
+			#include "encoding_template.glsl"
+		#undef DECODE_MACRO
+	}
 
 	#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( STANDARD )
 

+ 1 - 1
src/renderers/shaders/ShaderChunk/lights_pars.glsl

@@ -278,7 +278,7 @@
 
 		#endif
 
-		envMapColor.rgb = EncodingToLinear( envMapColor, envMapEncoding ).rgb;
+		envMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;
 
 		return envMapColor.rgb * envMapIntensity;
 

+ 1 - 1
src/renderers/shaders/ShaderChunk/map_fragment.glsl

@@ -2,7 +2,7 @@
 
 	vec4 texelColor = texture2D( map, vUv );
 
-	texelColor = EncodingToLinear( texelColor, mapEncoding );
+	texelColor = mapTexelToLinear( texelColor );
 	diffuseColor *= texelColor;
 
 #endif

+ 6 - 1
src/renderers/shaders/ShaderChunk/map_pars_fragment.glsl

@@ -1,6 +1,11 @@
 #ifdef USE_MAP
 
 	uniform sampler2D map;
-	uniform int mapEncoding;
+
+	vec4 mapTexelToLinear( vec4 texel ) {
+		#define DECODE_MACRO MAP_ENCODING
+			#include "encoding_template.glsl"
+		#undef DECODE_MACRO
+	}
 
 #endif

+ 3 - 0
src/renderers/webgl/WebGLProgram.js

@@ -406,13 +406,16 @@ THREE.WebGLProgram = ( function () {
 				( parameters.useFog && parameters.fogExp ) ? '#define FOG_EXP2' : '',
 
 				parameters.map ? '#define USE_MAP' : '',
+				parameters.mapEncoding ? '#define MAP_ENCODING ' + material.map.encoding : '',
 				parameters.envMap ? '#define USE_ENVMAP' : '',
 				parameters.envMap ? '#define ' + envMapTypeDefine : '',
 				parameters.envMap ? '#define ' + envMapModeDefine : '',
 				parameters.envMap ? '#define ' + envMapBlendingDefine : '',
+				parameters.envMapEncoding ? '#define ENVMAP_ENCODING ' + material.envMap.encoding : '',
 				parameters.lightMap ? '#define USE_LIGHTMAP' : '',
 				parameters.aoMap ? '#define USE_AOMAP' : '',
 				parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',
+				parameters.emissiveMapEncoding ? '#define EMISSIVEMAP_ENCODING ' + material.emissiveMap.encoding : '',
 				parameters.bumpMap ? '#define USE_BUMPMAP' : '',
 				parameters.normalMap ? '#define USE_NORMALMAP' : '',
 				parameters.specularMap ? '#define USE_SPECULARMAP' : '',

+ 5 - 2
src/renderers/webgl/WebGLPrograms.js

@@ -15,8 +15,8 @@ THREE.WebGLPrograms = function ( renderer, capabilities ) {
 	};
 
 	var parameterNames = [
-		"precision", "supportsVertexTextures", "map", "envMap", "envMapMode",
-		"lightMap", "aoMap", "emissiveMap", "bumpMap", "normalMap", "displacementMap", "specularMap",
+		"precision", "supportsVertexTextures", "map", "mapEncoding", "envMap", "envMapMode", "envMapEncoding",
+		"lightMap", "aoMap", "emissiveMap", "emissiveMapEncoding", "bumpMap", "normalMap", "displacementMap", "specularMap",
 		"roughnessMap", "metalnessMap",
 		"alphaMap", "combine", "vertexColors", "fog", "useFog", "fogExp",
 		"flatShading", "sizeAttenuation", "logarithmicDepthBuffer", "skinning",
@@ -96,11 +96,14 @@ THREE.WebGLPrograms = function ( renderer, capabilities ) {
 			supportsVertexTextures: capabilities.vertexTextures,
 
 			map: !! material.map,
+			mapEncoding: ( !! material.map ) ? material.map.encoding : false,
 			envMap: !! material.envMap,
 			envMapMode: material.envMap && material.envMap.mapping,
+			envMapEncoding: ( !! material.envMap ) ? material.envMap.encoding : false,
 			lightMap: !! material.lightMap,
 			aoMap: !! material.aoMap,
 			emissiveMap: !! material.emissiveMap,
+			emissiveMapEncoding: ( !! material.emissiveMap ) ? material.emissiveMap.encoding : false,
 			bumpMap: !! material.bumpMap,
 			normalMap: !! material.normalMap,
 			displacementMap: !! material.displacementMap,