Browse Source

WebGLRenderer: Moved material.combine to define based. See #5741.

Mr.doob 10 years ago
parent
commit
f87863078b

+ 2 - 1
src/renderers/WebGLRenderer.js

@@ -4109,6 +4109,8 @@ THREE.WebGLRenderer = function ( parameters ) {
 			specularMap: !! material.specularMap,
 			specularMap: !! material.specularMap,
 			alphaMap: !! material.alphaMap,
 			alphaMap: !! material.alphaMap,
 
 
+			combine: material.combine,
+
 			vertexColors: material.vertexColors,
 			vertexColors: material.vertexColors,
 
 
 			fog: fog,
 			fog: fog,
@@ -4603,7 +4605,6 @@ THREE.WebGLRenderer = function ( parameters ) {
 		}
 		}
 
 
 		uniforms.refractionRatio.value = material.refractionRatio;
 		uniforms.refractionRatio.value = material.refractionRatio;
-		uniforms.combine.value = material.combine;
 		uniforms.useRefract.value = material.envMap && (
 		uniforms.useRefract.value = material.envMap && (
 			material.envMap.mapping === THREE.CubeRefractionMapping ||
 			material.envMap.mapping === THREE.CubeRefractionMapping ||
 			material.envMap.mapping === THREE.EquirectangularRefractionMapping );
 			material.envMap.mapping === THREE.EquirectangularRefractionMapping );

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

@@ -53,18 +53,18 @@
 
 
 	#endif
 	#endif
 
 
-	if ( combine == 1 ) {
+	#ifdef ENVMAP_BLENDING_MULTIPLY
 
 
-		gl_FragColor.xyz = mix( gl_FragColor.xyz, envColor.xyz, specularStrength * reflectivity );
+		gl_FragColor.xyz = mix( gl_FragColor.xyz, gl_FragColor.xyz * envColor.xyz, specularStrength * reflectivity );
 
 
-	} else if ( combine == 2 ) {
+	#elif defined( ENVMAP_BLENDING_MIX )
 
 
-		gl_FragColor.xyz += envColor.xyz * specularStrength * reflectivity;
+		gl_FragColor.xyz = mix( gl_FragColor.xyz, envColor.xyz, specularStrength * reflectivity );
 
 
-	} else {
+	#elif defined( ENVMAP_BLENDING_ADD )
 
 
-		gl_FragColor.xyz = mix( gl_FragColor.xyz, gl_FragColor.xyz * envColor.xyz, specularStrength * reflectivity );
+		gl_FragColor.xyz += envColor.xyz * specularStrength * reflectivity;
 
 
-	}
+	#endif
 
 
-#endif
+#endif

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

@@ -7,7 +7,6 @@
 		uniform sampler2D envMap;
 		uniform sampler2D envMap;
 	#endif
 	#endif
 	uniform float flipEnvMap;
 	uniform float flipEnvMap;
-	uniform int combine;
 
 
 	#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )
 	#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )
 
 
@@ -20,4 +19,4 @@
 
 
 	#endif
 	#endif
 
 
-#endif
+#endif

+ 0 - 1
src/renderers/shaders/UniformsLib.js

@@ -21,7 +21,6 @@ THREE.UniformsLib = {
 		"useRefract" : { type: "i", value: 0 },
 		"useRefract" : { type: "i", value: 0 },
 		"reflectivity" : { type: "f", value: 1.0 },
 		"reflectivity" : { type: "f", value: 1.0 },
 		"refractionRatio" : { type: "f", value: 0.98 },
 		"refractionRatio" : { type: "f", value: 0.98 },
-		"combine" : { type: "i", value: 0 },
 
 
 		"morphTargetInfluences" : { type: "f", value: 0 }
 		"morphTargetInfluences" : { type: "f", value: 0 }
 
 

+ 18 - 4
src/renderers/webgl/WebGLProgram.js

@@ -84,7 +84,8 @@ THREE.WebGLProgram = ( function () {
 
 
 		}
 		}
 
 
-		var envMapTypeDefine = null;
+		var envMapTypeDefine = "ENVMAP_TYPE_CUBE";
+		var envMapBlendingDefine = "ENVMAP_BLENDING_MULTIPLY";
 
 
 		if ( parameters.envMap ) {
 		if ( parameters.envMap ) {
 
 
@@ -104,8 +105,20 @@ THREE.WebGLProgram = ( function () {
 					envMapTypeDefine = "ENVMAP_TYPE_SPHERE";
 					envMapTypeDefine = "ENVMAP_TYPE_SPHERE";
 					break;
 					break;
 
 
-				default:
-					envMapTypeDefine = "ENVMAP_TYPE_CUBE";
+			}
+
+			switch ( material.combine ) {
+
+				case THREE.MultiplyOperation:
+					envMapBlendingDefine = "ENVMAP_BLENDING_MULTIPLY";
+					break;
+
+				case THREE.MixOperation:
+					envMapBlendingDefine = "ENVMAP_BLENDING_MIX";
+					break;
+
+				case THREE.AddOperation:
+					envMapBlendingDefine = "ENVMAP_BLENDING_ADD";
 					break;
 					break;
 
 
 			}
 			}
@@ -261,7 +274,8 @@ THREE.WebGLProgram = ( function () {
 
 
 				parameters.map ? "#define USE_MAP" : "",
 				parameters.map ? "#define USE_MAP" : "",
 				parameters.envMap ? "#define USE_ENVMAP" : "",
 				parameters.envMap ? "#define USE_ENVMAP" : "",
-				envMapTypeDefine ? "#define " + envMapTypeDefine : "",
+				parameters.envMap ? "#define " + envMapTypeDefine : "",
+				parameters.envMap ? "#define " + envMapBlendingDefine : "",
 				parameters.lightMap ? "#define USE_LIGHTMAP" : "",
 				parameters.lightMap ? "#define USE_LIGHTMAP" : "",
 				parameters.bumpMap ? "#define USE_BUMPMAP" : "",
 				parameters.bumpMap ? "#define USE_BUMPMAP" : "",
 				parameters.normalMap ? "#define USE_NORMALMAP" : "",
 				parameters.normalMap ? "#define USE_NORMALMAP" : "",