瀏覽代碼

EXRLoader: support ZIPS and zlib resize

Guilherme Avila 5 年之前
父節點
當前提交
1082b99299
共有 2 個文件被更改,包括 22 次插入44 次删除
  1. 11 22
      examples/js/loaders/EXRLoader.js
  2. 11 22
      examples/jsm/loaders/EXRLoader.js

+ 11 - 22
examples/js/loaders/EXRLoader.js

@@ -774,7 +774,7 @@ THREE.EXRLoader.prototype = Object.assign( Object.create( THREE.DataTextureLoade
 
 			}
 
-			var inflate = new Zlib.Inflate( compressed ); // eslint-disable-line no-undef
+			var inflate = new Zlib.Inflate( compressed, { resize: true, verify: true } ); // eslint-disable-line no-undef
 
 			var rawBuffer = new Uint8Array( inflate.decompress().buffer );
 			var tmpBuffer = new Uint8Array( rawBuffer.length );
@@ -1294,13 +1294,13 @@ THREE.EXRLoader.prototype = Object.assign( Object.create( THREE.DataTextureLoade
 
 					for ( var channelID = 0; channelID < EXRHeader.channels.length; channelID ++ ) {
 
-						var cOff = channelOffsets[ EXRHeader.channels[ channelID ].name ];
+						for ( var x = 0; x < width; x ++ ) {
 
-						if ( EXRHeader.channels[ channelID ].pixelType === 1 ) { // half
+							var cOff = channelOffsets[ EXRHeader.channels[ channelID ].name ];
 
-							for ( var x = 0; x < width; x ++ ) {
+							var idx = ( line_y * ( EXRHeader.channels.length * width ) ) + ( channelID * width ) + x;
 
-								var idx = ( line_y * ( EXRHeader.channels.length * width ) ) + ( channelID * width ) + x;
+							if ( EXRHeader.channels[ channelID ].pixelType === 1 ) { // half
 
 								switch ( this.type ) {
 
@@ -1316,17 +1316,7 @@ THREE.EXRLoader.prototype = Object.assign( Object.create( THREE.DataTextureLoade
 
 								}
 
-								var true_y = line_y + ( scanlineBlockIdx * scanlineBlockSize );
-
-								byteArray[ ( ( ( height - true_y ) * ( width * numChannels ) ) + ( x * numChannels ) ) + cOff ] = val;
-
-							}
-
-						} else if ( EXRHeader.channels[ channelID ].pixelType === 2 ) { // float
-
-							for ( var x = 0; x < width; x ++ ) {
-
-								var idx = ( line_y * ( EXRHeader.channels.length * width ) ) + ( channelID * width ) + x;
+							} else if ( EXRHeader.channels[ channelID ].pixelType === 2 ) { // float
 
 								switch ( this.type ) {
 
@@ -1338,20 +1328,19 @@ THREE.EXRLoader.prototype = Object.assign( Object.create( THREE.DataTextureLoade
 									case THREE.HalfFloatType:
 
 										throw 'EXRLoader.parse: unsupported HalfFloatType texture for FloatType image file.'
-
 								}
 
-								var true_y = line_y + ( scanlineBlockIdx * scanlineBlockSize );
+							} else {
 
-								byteArray[ ( ( ( height - true_y ) * ( width * numChannels ) ) + ( x * numChannels ) ) + cOff ] = val;
+								throw 'EXRLoader.parse: unsupported pixelType ' + EXRHeader.channels[ channelID ].pixelType + ' for ' + EXRHeader.compression + '.';
 
 							}
 
-						} else {
+							var true_y = line_y + ( scanlineBlockIdx * scanlineBlockSize );
 
-							throw 'EXRLoader.parse: unsupported pixelType ' + EXRHeader.channels[ channelID ].pixelType + ' for ' + EXRHeader.compression + '.';
+							byteArray[ ( ( ( height - true_y ) * ( width * numChannels ) ) + ( x * numChannels ) ) + cOff ] = val;
 
-						}
+						}	
 
 					}
 

+ 11 - 22
examples/jsm/loaders/EXRLoader.js

@@ -785,7 +785,7 @@ EXRLoader.prototype = Object.assign( Object.create( DataTextureLoader.prototype
 
 			}
 
-			var inflate = new Zlib.Inflate( compressed ); // eslint-disable-line no-undef
+			var inflate = new Zlib.Inflate( compressed, { resize: true, verify: true } ); // eslint-disable-line no-undef
 
 			var rawBuffer = new Uint8Array( inflate.decompress().buffer );
 			var tmpBuffer = new Uint8Array( rawBuffer.length );
@@ -1305,13 +1305,13 @@ EXRLoader.prototype = Object.assign( Object.create( DataTextureLoader.prototype
 
 					for ( var channelID = 0; channelID < EXRHeader.channels.length; channelID ++ ) {
 
-						var cOff = channelOffsets[ EXRHeader.channels[ channelID ].name ];
+						for ( var x = 0; x < width; x ++ ) {
 
-						if ( EXRHeader.channels[ channelID ].pixelType === 1 ) { // half
+							var cOff = channelOffsets[ EXRHeader.channels[ channelID ].name ];
 
-							for ( var x = 0; x < width; x ++ ) {
+							var idx = ( line_y * ( EXRHeader.channels.length * width ) ) + ( channelID * width ) + x;
 
-								var idx = ( line_y * ( EXRHeader.channels.length * width ) ) + ( channelID * width ) + x;
+							if ( EXRHeader.channels[ channelID ].pixelType === 1 ) { // half
 
 								switch ( this.type ) {
 
@@ -1327,17 +1327,7 @@ EXRLoader.prototype = Object.assign( Object.create( DataTextureLoader.prototype
 
 								}
 
-								var true_y = line_y + ( scanlineBlockIdx * scanlineBlockSize );
-
-								byteArray[ ( ( ( height - true_y ) * ( width * numChannels ) ) + ( x * numChannels ) ) + cOff ] = val;
-
-							}
-
-						} else if ( EXRHeader.channels[ channelID ].pixelType === 2 ) { // float
-
-							for ( var x = 0; x < width; x ++ ) {
-
-								var idx = ( line_y * ( EXRHeader.channels.length * width ) ) + ( channelID * width ) + x;
+							} else if ( EXRHeader.channels[ channelID ].pixelType === 2 ) { // float
 
 								switch ( this.type ) {
 
@@ -1349,20 +1339,19 @@ EXRLoader.prototype = Object.assign( Object.create( DataTextureLoader.prototype
 									case HalfFloatType:
 
 										throw 'EXRLoader.parse: unsupported HalfFloatType texture for FloatType image file.'
-
 								}
 
-								var true_y = line_y + ( scanlineBlockIdx * scanlineBlockSize );
+							} else {
 
-								byteArray[ ( ( ( height - true_y ) * ( width * numChannels ) ) + ( x * numChannels ) ) + cOff ] = val;
+								throw 'EXRLoader.parse: unsupported pixelType ' + EXRHeader.channels[ channelID ].pixelType + ' for ' + EXRHeader.compression + '.';
 
 							}
 
-						} else {
+							var true_y = line_y + ( scanlineBlockIdx * scanlineBlockSize );
 
-							throw 'EXRLoader.parse: unsupported pixelType ' + EXRHeader.channels[ channelID ].pixelType + ' for ' + EXRHeader.compression + '.';
+							byteArray[ ( ( ( height - true_y ) * ( width * numChannels ) ) + ( x * numChannels ) ) + cOff ] = val;
 
-						}
+						}	
 
 					}