2
0
Mr.doob 8 жил өмнө
parent
commit
d68205cd78
2 өөрчлөгдсөн 347 нэмэгдсэн , 254 устгасан
  1. 124 31
      build/three.js
  2. 223 223
      build/three.min.js

+ 124 - 31
build/three.js

@@ -23876,7 +23876,7 @@
 
 		// build geometry
 
-		this.setIndex( Uint16Attribute( indices, 1 ) );
+		this.setIndex( ( indices.length > 65535 ? Uint32Attribute : Uint16Attribute )( indices, 1 ) );
 		this.addAttribute( 'position', Float32Attribute( vertices, 3 ) );
 		this.addAttribute( 'uv', Float32Attribute( uvs, 2 ) );
 
@@ -28824,6 +28824,8 @@
 
 		load: function ( url, onLoad, onProgress, onError ) {
 
+			if ( url === undefined ) url = '';
+
 			if ( this.path !== undefined ) url = this.path + url;
 
 			var scope = this;
@@ -28846,66 +28848,156 @@
 
 			}
 
-			var request = new XMLHttpRequest();
-			request.open( 'GET', url, true );
+			// Check for data: URI
+			var dataUriRegex = /^data:(.*?)(;base64)?,(.*)$/;
+			var dataUriRegexResult = url.match( dataUriRegex );
 
-			request.addEventListener( 'load', function ( event ) {
+			// Safari can not handle Data URIs through XMLHttpRequest so process manually
+			if ( dataUriRegexResult ) {
 
-				var response = event.target.response;
+				var mimeType = dataUriRegexResult[1];
+				var isBase64 = !!dataUriRegexResult[2];
+				var data = dataUriRegexResult[3];
 
-				exports.Cache.add( url, response );
+				data = window.decodeURIComponent(data);
 
-				if ( this.status === 200 ) {
+				if( isBase64 ) {
+					data = window.atob(data);
+				}
 
-					if ( onLoad ) onLoad( response );
+				try {
 
-					scope.manager.itemEnd( url );
+					var response;
+					var responseType = ( this.responseType || '' ).toLowerCase();
 
-				} else if ( this.status === 0 ) {
+					switch ( responseType ) {
 
-					// Some browsers return HTTP Status 0 when using non-http protocol
-					// e.g. 'file://' or 'data://'. Handle as success.
+						case 'arraybuffer':
+						case 'blob':
 
-					console.warn( 'THREE.XHRLoader: HTTP Status 0 received.' );
+						 	response = new ArrayBuffer( data.length );
+							var view = new Uint8Array( response );
+							for ( var i = 0; i < data.length; i ++ ) {
 
-					if ( onLoad ) onLoad( response );
+									view[ i ] = data.charCodeAt( i );
 
-					scope.manager.itemEnd( url );
+							}
 
-				} else {
+							if ( responseType === 'blob' ) {
 
-					if ( onError ) onError( event );
+								response = new Blob( [ response ], { "type" : mimeType } );
 
-					scope.manager.itemError( url );
+							}
+
+							break;
+
+						case 'document':
+
+							var parser = new DOMParser();
+							response = parser.parseFromString( data, mimeType );
+
+							break;
+
+						case 'json':
+
+							response = JSON.parse( data );
+
+							break;
+
+						default: // 'text' or other
+
+							response = data;
+
+							break;
+
+					}
+
+					// Wait for next browser tick
+					window.setTimeout( function() {
+
+						if ( onLoad ) onLoad( response );
+
+						scope.manager.itemEnd( url );
+
+					}, 0);
+
+				} catch ( error ) {
+
+					// Wait for next browser tick
+					window.setTimeout( function() {
+
+						if ( onError ) onError( error );
+
+						scope.manager.itemError( url );
+
+					}, 0);
 
 				}
 
-			}, false );
+			} else {
+
+				var request = new XMLHttpRequest();
+				request.open( 'GET', url, true );
+
+				request.addEventListener( 'load', function ( event ) {
+
+					var response = event.target.response;
 
-			if ( onProgress !== undefined ) {
+					exports.Cache.add( url, response );
 
-				request.addEventListener( 'progress', function ( event ) {
+					if ( this.status === 200 ) {
 
-					onProgress( event );
+						if ( onLoad ) onLoad( response );
+
+						scope.manager.itemEnd( url );
+
+					} else if ( this.status === 0 ) {
+
+						// Some browsers return HTTP Status 0 when using non-http protocol
+						// e.g. 'file://' or 'data://'. Handle as success.
+
+						console.warn( 'THREE.XHRLoader: HTTP Status 0 received.' );
+
+						if ( onLoad ) onLoad( response );
+
+						scope.manager.itemEnd( url );
+
+					} else {
+
+						if ( onError ) onError( event );
+
+						scope.manager.itemError( url );
+
+					}
 
 				}, false );
 
-			}
+				if ( onProgress !== undefined ) {
 
-			request.addEventListener( 'error', function ( event ) {
+					request.addEventListener( 'progress', function ( event ) {
 
-				if ( onError ) onError( event );
+						onProgress( event );
 
-				scope.manager.itemError( url );
+					}, false );
 
-			}, false );
+				}
 
-			if ( this.responseType !== undefined ) request.responseType = this.responseType;
-			if ( this.withCredentials !== undefined ) request.withCredentials = this.withCredentials;
+				request.addEventListener( 'error', function ( event ) {
 
-			if ( request.overrideMimeType ) request.overrideMimeType( 'text/plain' );
+					if ( onError ) onError( event );
 
-			request.send( null );
+					scope.manager.itemError( url );
+
+				}, false );
+
+				if ( this.responseType !== undefined ) request.responseType = this.responseType;
+				if ( this.withCredentials !== undefined ) request.withCredentials = this.withCredentials;
+
+				if ( request.overrideMimeType ) request.overrideMimeType( 'text/plain' );
+
+				request.send( null );
+
+			}
 
 			scope.manager.itemStart( url );
 
@@ -29187,6 +29279,7 @@
 				scope.manager.itemEnd( url );
 
 			};
+			image.onerror = onError;
 
 			if ( url.indexOf( 'data:' ) === 0 ) {
 

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 223 - 223
build/three.min.js


Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно