浏览代码

ImageUtils.loadDDSTexture also using XHRLoader.

Mr.doob 11 年之前
父节点
当前提交
930850202f
共有 2 个文件被更改,包括 33 次插入33 次删除
  1. 23 30
      src/extras/ImageUtils.js
  2. 10 3
      src/loaders/XHRLoader.js

+ 23 - 30
src/extras/ImageUtils.js

@@ -669,6 +669,7 @@ THREE.ImageUtils = {
 
 		var texture = new THREE.CompressedTexture();
 		texture.image = images;
+
 		if ( mapping !== undefined ) texture.mapping = mapping;
 
 		// no flipping for cube textures
@@ -681,53 +682,45 @@ THREE.ImageUtils = {
 
 		texture.generateMipmaps = false;
 
-		{
-			var request = new XMLHttpRequest();
-
-			request.onload = function( ) {
-
-				var buffer = request.response;
-				var dds = THREE.ImageUtils.parseDDS( buffer, true );
+		var loader = new THREE.XHRLoader();
+		loader.setResponseType( 'arraybuffer' );
+		loader.load( url, function ( buffer ) {
 
-				if ( dds.isCubemap ) {
+			var dds = THREE.ImageUtils.parseDDS( buffer, true );
 
-					var faces = dds.mipmaps.length / dds.mipmapCount;
+			if ( dds.isCubemap ) {
 
-					for ( var f = 0; f < faces; f ++ ) {
+				var faces = dds.mipmaps.length / dds.mipmapCount;
 
-						images[ f ] = { mipmaps : [] };
+				for ( var f = 0; f < faces; f ++ ) {
 
-						for ( var i = 0; i < dds.mipmapCount; i ++ ) {
+					images[ f ] = { mipmaps : [] };
 
-							images[ f ].mipmaps.push( dds.mipmaps[ f * dds.mipmapCount + i ] );
-							images[ f ].format = dds.format;
-							images[ f ].width = dds.width;
-							images[ f ].height = dds.height;
+					for ( var i = 0; i < dds.mipmapCount; i ++ ) {
 
-						}
+						images[ f ].mipmaps.push( dds.mipmaps[ f * dds.mipmapCount + i ] );
+						images[ f ].format = dds.format;
+						images[ f ].width = dds.width;
+						images[ f ].height = dds.height;
 
 					}
 
-
-				} else {
-					texture.image.width = dds.width;
-					texture.image.height = dds.height;
-					texture.mipmaps = dds.mipmaps;
 				}
 
-				texture.format = dds.format;
-				texture.needsUpdate = true;
-				if ( onLoad ) onLoad( texture );
+			} else {
+
+				texture.image.width = dds.width;
+				texture.image.height = dds.height;
+				texture.mipmaps = dds.mipmaps;
 
 			}
 
-			request.onerror = onError;
+			texture.format = dds.format;
+			texture.needsUpdate = true;
 
-			request.open( 'GET', url, true );
-			request.responseType = "arraybuffer";
-			request.send( null );
+			if ( onLoad ) onLoad( texture );
 
-		}
+		} );
 
 		return texture;
 

+ 10 - 3
src/loaders/XHRLoader.js

@@ -27,14 +27,15 @@ THREE.XHRLoader.prototype = {
 		}
 
 		var request = new XMLHttpRequest();
+		request.open( 'GET', url, true );
 
 		if ( onLoad !== undefined ) {
 
 			request.addEventListener( 'load', function ( event ) {
 
-				scope.cache.add( url, event.target.responseText );
+				scope.cache.add( url, this.response );
 
-				onLoad( event.target.responseText );
+				onLoad( this.response );
 				scope.manager.itemEnd( url );
 
 			}, false );
@@ -62,14 +63,20 @@ THREE.XHRLoader.prototype = {
 		}
 
 		if ( this.crossOrigin !== undefined ) request.crossOrigin = this.crossOrigin;
+		if ( this.responseType !== undefined ) request.responseType = this.responseType;
 
-		request.open( 'GET', url, true );
 		request.send( null );
 
 		scope.manager.itemStart( url );
 
 	},
 
+	setResponseType: function ( value ) {
+
+		this.responseType = value;
+
+	},
+
 	setCrossOrigin: function ( value ) {
 
 		this.crossOrigin = value;