Forráskód Böngészése

EXRLoader: fix int32 parsing

Guilherme Avila 5 éve
szülő
commit
b00c5840ab
2 módosított fájl, 30 hozzáadás és 10 törlés
  1. 15 5
      examples/js/loaders/EXRLoader.js
  2. 15 5
      examples/jsm/loaders/EXRLoader.js

+ 15 - 5
examples/js/loaders/EXRLoader.js

@@ -1610,7 +1610,7 @@ THREE.EXRLoader.prototype = Object.assign( Object.create( THREE.DataTextureLoade
 
 		function parseRational( dataView, offset ) {
 
-			var x = parseUint32( dataView, offset );
+			var x = parseInt32( dataView, offset );
 			var y = parseUint32( dataView, offset );
 
 			return [ x, y ];
@@ -1626,6 +1626,16 @@ THREE.EXRLoader.prototype = Object.assign( Object.create( THREE.DataTextureLoade
 
 		}
 
+		function parseInt32( dataView, offset ) {
+
+			var Int32 = dataView.getInt32( offset.value, true );
+
+			offset.value = offset.value + INT32_SIZE;
+
+			return Int32;
+
+		}
+
 		function parseUint32( dataView, offset ) {
 
 			var Uint32 = dataView.getUint32( offset.value, true );
@@ -1773,11 +1783,11 @@ THREE.EXRLoader.prototype = Object.assign( Object.create( THREE.DataTextureLoade
 			while ( offset.value < ( startOffset + size - 1 ) ) {
 
 				var name = parseNullTerminatedString( buffer, offset );
-				var pixelType = parseUint32( dataView, offset ); // TODO: Cast this to UINT, HALF or FLOAT
+				var pixelType = parseInt32( dataView, offset );
 				var pLinear = parseUint8( dataView, offset );
 				offset.value += 3; // reserved, three chars
-				var xSampling = parseUint32( dataView, offset );
-				var ySampling = parseUint32( dataView, offset );
+				var xSampling = parseInt32( dataView, offset );
+				var ySampling = parseInt32( dataView, offset );
 
 				channels.push( {
 					name: name,
@@ -1899,7 +1909,7 @@ THREE.EXRLoader.prototype = Object.assign( Object.create( THREE.DataTextureLoade
 
 			} else if ( type === 'int' ) {
 
-				return parseUint32( dataView, offset );
+				return parseInt32( dataView, offset );
 
 			} else if ( type === 'rational' ) {
 

+ 15 - 5
examples/jsm/loaders/EXRLoader.js

@@ -1625,7 +1625,7 @@ EXRLoader.prototype = Object.assign( Object.create( DataTextureLoader.prototype
 
 		function parseRational( dataView, offset ) {
 
-			var x = parseUint32( dataView, offset );
+			var x = parseInt32( dataView, offset );
 			var y = parseUint32( dataView, offset );
 
 			return [ x, y ];
@@ -1641,6 +1641,16 @@ EXRLoader.prototype = Object.assign( Object.create( DataTextureLoader.prototype
 
 		}
 
+		function parseInt32( dataView, offset ) {
+
+			var Int32 = dataView.getInt32( offset.value, true );
+
+			offset.value = offset.value + INT32_SIZE;
+
+			return Int32;
+
+		}
+
 		function parseUint32( dataView, offset ) {
 
 			var Uint32 = dataView.getUint32( offset.value, true );
@@ -1788,11 +1798,11 @@ EXRLoader.prototype = Object.assign( Object.create( DataTextureLoader.prototype
 			while ( offset.value < ( startOffset + size - 1 ) ) {
 
 				var name = parseNullTerminatedString( buffer, offset );
-				var pixelType = parseUint32( dataView, offset ); // TODO: Cast this to UINT, HALF or FLOAT
+				var pixelType = parseInt32( dataView, offset );
 				var pLinear = parseUint8( dataView, offset );
 				offset.value += 3; // reserved, three chars
-				var xSampling = parseUint32( dataView, offset );
-				var ySampling = parseUint32( dataView, offset );
+				var xSampling = parseInt32( dataView, offset );
+				var ySampling = parseInt32( dataView, offset );
 
 				channels.push( {
 					name: name,
@@ -1914,7 +1924,7 @@ EXRLoader.prototype = Object.assign( Object.create( DataTextureLoader.prototype
 
 			} else if ( type === 'int' ) {
 
-				return parseUint32( dataView, offset );
+				return parseInt32( dataView, offset );
 
 			} else if ( type === 'rational' ) {