Browse Source

add the rest of the blending modes to premultipliedAlpha mode.

Ben Houston 9 years ago
parent
commit
7814c1775f

+ 1 - 1
examples/webgl_materials_transparency.html

@@ -108,7 +108,7 @@
 					metalness: 0.9,
 					roughness: 1.0,
 					shading: THREE.SmoothShading,
-					blending: THREE.PremultipliedAlphaBlending,
+					blending: THREE.PremultipliedAlphaNormalBlending,
 					transparent: true
 				} );
 

+ 1 - 1
examples/webgl_tonemapping.html

@@ -103,7 +103,7 @@
 					roughness: 0.8,
 					shading: THREE.SmoothShading,
 					transparent: true,
-					blending: THREE.PremultipliedAlphaBlending
+					blending: THREE.PremultipliedAlphaNormalBlending
 				} );
 
 				var textureLoader = new THREE.TextureLoader();

+ 5 - 1
src/Three.js

@@ -156,7 +156,11 @@ THREE.AdditiveBlending = 2;
 THREE.SubtractiveBlending = 3;
 THREE.MultiplyBlending = 4;
 THREE.CustomBlending = 5;
-THREE.PremultipliedAlphaBlending = 6;
+THREE.PremultipliedAlphaNormalBlending = 6;
+THREE.PremultipliedAlphaAdditiveBlending = 7;
+THREE.PremultipliedAlphaSubtractiveBlending = 8;
+THREE.PremultipliedAlphaMultiplyBlending = 9;
+THREE.PremultipliedAlphaCustomBlending = 10;
 
 // custom blending equations
 // (numbers start from 100 not to clash with other

+ 3 - 1
src/renderers/webgl/WebGLPrograms.js

@@ -177,7 +177,9 @@ THREE.WebGLPrograms = function ( renderer, capabilities ) {
 
 			toneMapping: renderer.toneMapping,
 
-			premultipliedAlpha: ( material.blending === THREE.PremultipliedAlphaBlending ),
+			premultipliedAlpha: ( material.blending === THREE.PremultipliedAlphaNormalBlending ) || ( material.blending === THREE.PremultipliedAlphaAdditiveBlending ) ||
+				( material.blending === THREE.PremultipliedAlphaSubtractiveBlending ) || ( material.blending === THREE.PremultipliedAlphaMultiplyBlending ) || ( material.blending === THREE.PremultipliedAlphaCustomBlending ),
+				
 			alphaTest: material.alphaTest,
 			doubleSided: material.side === THREE.DoubleSide,
 			flipSided: material.side === THREE.BackSide

+ 23 - 3
src/renderers/webgl/WebGLState.js

@@ -230,23 +230,43 @@ THREE.WebGLState = function ( gl, extensions, paramThreeToGL ) {
 				gl.blendEquation( gl.FUNC_ADD );
 				gl.blendFunc( gl.ZERO, gl.SRC_COLOR );
 
-			} else if( blending === THREE.PremultipliedAlphaBlending ) {
+			} else if( blending === THREE.PremultipliedAlphaNormalBlending ) {
 
 				gl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );
 				gl.blendFuncSeparate( gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );
 
-			} else {
+			} else if( blending === THREE.PremultipliedAlphaAdditiveBlending ) {
+
+				gl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );
+				gl.blendFuncSeparate( gl.ONE, gl.ONE, gl.ONE, gl.ONE );
+
+			} else if( blending === THREE.PremultipliedAlphaSubtractiveBlending ) {
+
+				gl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );
+				gl.blendFuncSeparate( gl.ZERO, gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ONE_MINUS_SRC_ALPHA );
+
+			} else if( blending === THREE.PremultipliedAlphaMultiplyBlending ) {
+
+				gl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );
+				gl.blendFuncSeparate( gl.ZERO, gl.ZERO, gl.SRC_COLOR, gl.SRC_ALPHA );
+
+			} else if( blending === THREE.NormalBlending || blending === THREE.NoBlending ) {
 
 				gl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );
 				gl.blendFuncSeparate( gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );
 
+			}
+			else {
+
+				console.error( "Unsupported blending type: " + blending );
+
 			}
 
 			currentBlending = blending;
 
 		}
 
-		if ( blending === THREE.CustomBlending ) {
+		if ( blending === THREE.CustomBlending || blending === THREE.PremultipliedAlphaCustomBlending ) {
 
 			blendEquationAlpha = blendEquationAlpha || blendEquation;
 			blendSrcAlpha = blendSrcAlpha || blendSrc;