瀏覽代碼

CanvasRenderer: Texture performanceness.

Mr.doob 10 年之前
父節點
當前提交
f38765b550
共有 1 個文件被更改,包括 32 次插入23 次删除
  1. 32 23
      examples/js/renderers/CanvasRenderer.js

+ 32 - 23
examples/js/renderers/CanvasRenderer.js

@@ -509,24 +509,22 @@ THREE.CanvasRenderer = function ( parameters ) {
 
 			if ( texture !== null ) {
 
-				if ( texture.version === 0 ||
-					texture instanceof THREE.CompressedTexture ||
-					texture instanceof THREE.DataTexture ) {
+				var pattern = _patterns[ texture.id ];
 
-						setFillStyle( 'rgba( 0, 0, 0, 1 )' );
+				if ( pattern === undefined || pattern.version !== texture.version ) {
 
-				} else {
+					pattern = textureToPattern( texture );
+					_patterns[ texture.id ] = pattern;
 
-					var pattern = _patterns[ texture.id ];
+				}
 
-					if ( pattern === undefined || pattern.version !== texture.version ) {
+				if ( pattern.canvas !== undefined ) {
 
-						pattern = textureToPattern( texture );
-						_patterns[ texture.id ] = pattern;
+					setFillStyle( pattern.canvas );
 
-					}
+				} else {
 
-					setFillStyle( pattern.canvas );
+					setFillStyle( 'rgba( 0, 0, 0, 1 )' );
 
 				}
 
@@ -821,6 +819,17 @@ THREE.CanvasRenderer = function ( parameters ) {
 
 	function textureToPattern( texture ) {
 
+		if ( texture.version === 0 ||
+			texture instanceof THREE.CompressedTexture ||
+			texture instanceof THREE.DataTexture ) {
+
+				return {
+					canvas: undefined,
+					version: texture.version
+				}
+
+		}
+
 		var image = texture.image;
 
 		var canvas = document.createElement( 'canvas' );
@@ -853,22 +862,12 @@ THREE.CanvasRenderer = function ( parameters ) {
 		return {
 			canvas: _context.createPattern( canvas, repeat ),
 			version: texture.version
-		};
+		}
 
 	}
 
 	function patternPath( x0, y0, x1, y1, x2, y2, u0, v0, u1, v1, u2, v2, texture ) {
 
-		if ( texture.version === 0 ||
-			texture instanceof THREE.CompressedTexture ||
-			texture instanceof THREE.DataTexture ) {
-
-				setFillStyle( 'rgba( 0, 0, 0, 1)' );
-				_context.fill();
-				return;
-
-		}
-
 		var pattern = _patterns[ texture.id ];
 
 		if ( pattern === undefined || pattern.version !== texture.version ) {
@@ -878,7 +877,17 @@ THREE.CanvasRenderer = function ( parameters ) {
 
 		}
 
-		setFillStyle( pattern.canvas );
+		if ( pattern.canvas !== undefined ) {
+
+			setFillStyle( pattern.canvas );
+
+		} else {
+
+			setFillStyle( 'rgba( 0, 0, 0, 1)' );
+			_context.fill();
+			return;
+
+		}
 
 		// http://extremelysatisfactorytotalitarianism.com/blog/?p=2120