EXRLoader: fix int32 parsing

上级 7feede6b
...@@ -1610,7 +1610,7 @@ THREE.EXRLoader.prototype = Object.assign( Object.create( THREE.DataTextureLoade ...@@ -1610,7 +1610,7 @@ THREE.EXRLoader.prototype = Object.assign( Object.create( THREE.DataTextureLoade
function parseRational( dataView, offset ) { function parseRational( dataView, offset ) {
var x = parseUint32( dataView, offset ); var x = parseInt32( dataView, offset );
var y = parseUint32( dataView, offset ); var y = parseUint32( dataView, offset );
return [ x, y ]; return [ x, y ];
...@@ -1626,6 +1626,16 @@ THREE.EXRLoader.prototype = Object.assign( Object.create( THREE.DataTextureLoade ...@@ -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 ) { function parseUint32( dataView, offset ) {
var Uint32 = dataView.getUint32( offset.value, true ); var Uint32 = dataView.getUint32( offset.value, true );
...@@ -1773,11 +1783,11 @@ THREE.EXRLoader.prototype = Object.assign( Object.create( THREE.DataTextureLoade ...@@ -1773,11 +1783,11 @@ THREE.EXRLoader.prototype = Object.assign( Object.create( THREE.DataTextureLoade
while ( offset.value < ( startOffset + size - 1 ) ) { while ( offset.value < ( startOffset + size - 1 ) ) {
var name = parseNullTerminatedString( buffer, offset ); 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 ); var pLinear = parseUint8( dataView, offset );
offset.value += 3; // reserved, three chars offset.value += 3; // reserved, three chars
var xSampling = parseUint32( dataView, offset ); var xSampling = parseInt32( dataView, offset );
var ySampling = parseUint32( dataView, offset ); var ySampling = parseInt32( dataView, offset );
channels.push( { channels.push( {
name: name, name: name,
...@@ -1899,7 +1909,7 @@ THREE.EXRLoader.prototype = Object.assign( Object.create( THREE.DataTextureLoade ...@@ -1899,7 +1909,7 @@ THREE.EXRLoader.prototype = Object.assign( Object.create( THREE.DataTextureLoade
} else if ( type === 'int' ) { } else if ( type === 'int' ) {
return parseUint32( dataView, offset ); return parseInt32( dataView, offset );
} else if ( type === 'rational' ) { } else if ( type === 'rational' ) {
......
...@@ -1625,7 +1625,7 @@ EXRLoader.prototype = Object.assign( Object.create( DataTextureLoader.prototype ...@@ -1625,7 +1625,7 @@ EXRLoader.prototype = Object.assign( Object.create( DataTextureLoader.prototype
function parseRational( dataView, offset ) { function parseRational( dataView, offset ) {
var x = parseUint32( dataView, offset ); var x = parseInt32( dataView, offset );
var y = parseUint32( dataView, offset ); var y = parseUint32( dataView, offset );
return [ x, y ]; return [ x, y ];
...@@ -1641,6 +1641,16 @@ EXRLoader.prototype = Object.assign( Object.create( DataTextureLoader.prototype ...@@ -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 ) { function parseUint32( dataView, offset ) {
var Uint32 = dataView.getUint32( offset.value, true ); var Uint32 = dataView.getUint32( offset.value, true );
...@@ -1788,11 +1798,11 @@ EXRLoader.prototype = Object.assign( Object.create( DataTextureLoader.prototype ...@@ -1788,11 +1798,11 @@ EXRLoader.prototype = Object.assign( Object.create( DataTextureLoader.prototype
while ( offset.value < ( startOffset + size - 1 ) ) { while ( offset.value < ( startOffset + size - 1 ) ) {
var name = parseNullTerminatedString( buffer, offset ); 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 ); var pLinear = parseUint8( dataView, offset );
offset.value += 3; // reserved, three chars offset.value += 3; // reserved, three chars
var xSampling = parseUint32( dataView, offset ); var xSampling = parseInt32( dataView, offset );
var ySampling = parseUint32( dataView, offset ); var ySampling = parseInt32( dataView, offset );
channels.push( { channels.push( {
name: name, name: name,
...@@ -1914,7 +1924,7 @@ EXRLoader.prototype = Object.assign( Object.create( DataTextureLoader.prototype ...@@ -1914,7 +1924,7 @@ EXRLoader.prototype = Object.assign( Object.create( DataTextureLoader.prototype
} else if ( type === 'int' ) { } else if ( type === 'int' ) {
return parseUint32( dataView, offset ); return parseInt32( dataView, offset );
} else if ( type === 'rational' ) { } else if ( type === 'rational' ) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册