浏览代码

WebGLRenderer: Moved material.visible logic out of renderBufferDirect.

Mr.doob 10 年之前
父节点
当前提交
f679b9b45f

+ 3 - 1
examples/js/renderers/Projector.js

@@ -347,7 +347,9 @@ THREE.Projector = function () {
 
 			} else if ( object instanceof THREE.Mesh || object instanceof THREE.Line || object instanceof THREE.Sprite ) {
 
-				if ( object.material.visible === false ) return;
+				var material = object.material;
+
+				if ( material.visible === false ) return;
 
 				if ( object.frustumCulled === false || _frustum.intersectsObject( object ) === true ) {
 

+ 21 - 15
src/renderers/WebGLRenderer.js

@@ -877,7 +877,11 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 			for ( var i = 0, il = materials.length; i < il; i ++ ) {
 
-				_this.renderBufferDirect( camera, lights, fog, materials[ i ], object );
+				material = materials[ i ];
+
+				if ( material.visible === false ) continue;
+
+				_this.renderBufferDirect( camera, lights, fog, material, object );
 
 			}
 
@@ -885,8 +889,6 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 		}
 
-		if ( material.visible === false ) return;
-
 		setMaterial( material );
 
 		var geometry = objects.geometries.get( object );
@@ -1768,28 +1770,32 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 					var material = object.material;
 
-					if ( properties.get( material ) ) {
+					if ( material.visible === true ) {
 
-						material.program = properties.get( material ).program;
+						if ( properties.get( material ) ) {
 
-					}
+							material.program = properties.get( material ).program;
 
-					if ( material.transparent ) {
+						}
 
-						transparentObjects.push( webglObject );
+						if ( material.transparent ) {
 
-					} else {
+							transparentObjects.push( webglObject );
 
-						opaqueObjects.push( webglObject );
+						} else {
 
-					}
+							opaqueObjects.push( webglObject );
+
+						}
+
+						if ( _this.sortObjects === true ) {
 
-					if ( _this.sortObjects === true ) {
+							_vector3.setFromMatrixPosition( object.matrixWorld );
+							_vector3.applyProjection( _projScreenMatrix );
 
-						_vector3.setFromMatrixPosition( object.matrixWorld );
-						_vector3.applyProjection( _projScreenMatrix );
+							webglObject.z = _vector3.z;
 
-						webglObject.z = _vector3.z;
+						}
 
 					}
 

+ 1 - 7
src/renderers/webgl/WebGLObjects.js

@@ -198,13 +198,7 @@ THREE.WebGLObjects = function ( gl, properties, info ) {
 
 		for ( var i = 0, ul = renderList.length; i < ul; i ++ ) {
 
-			var object = renderList[ i ].object;
-
-			if ( object.material.visible !== false ) {
-
-				updateObject( object );
-
-			}
+			updateObject( renderList[ i ].object );
 
 		}
 

+ 8 - 4
src/renderers/webgl/WebGLShadowMap.js

@@ -218,8 +218,6 @@ THREE.WebGLShadowMap = function ( _renderer, _lights, _objects ) {
 
 				objectMaterial = getObjectMaterial( object );
 
-				if ( objectMaterial.visible === false ) continue;
-
 				useMorphing = object.geometry.morphTargets !== undefined && object.geometry.morphTargets.length > 0 && objectMaterial.morphTargets;
 				useSkinning = object instanceof THREE.SkinnedMesh && objectMaterial.skinning;
 
@@ -275,8 +273,14 @@ THREE.WebGLShadowMap = function ( _renderer, _lights, _objects ) {
 
 		if ( webglObject && object.castShadow && ( object.frustumCulled === false || _frustum.intersectsObject( object ) === true ) ) {
 
-			object._modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );
-			_renderList.push( webglObject );
+			var material = object.material;
+
+			if ( material.visible === true ) {
+
+				object._modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );
+				_renderList.push( webglObject );
+
+			}
 
 		}