three-stdlib 2.6.3 → 2.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{Nodes-ec4e1143.js → Nodes-894ac9dc.js} +0 -0
- package/{Nodes-427f68b0.js → Nodes-af575af7.js} +0 -0
- package/controls/ArcballControls.cjs.js +1 -1
- package/controls/ArcballControls.d.ts +161 -0
- package/controls/ArcballControls.js +554 -285
- package/controls/OrbitControls.cjs.js +1 -1
- package/controls/OrbitControls.d.ts +1 -0
- package/controls/OrbitControls.js +13 -2
- package/controls/TransformControls.cjs.js +1 -1
- package/controls/TransformControls.d.ts +2 -1
- package/controls/TransformControls.js +25 -26
- package/geometries/TeapotGeometry.js +2 -2
- package/geometries/TextGeometry.cjs.js +1 -0
- package/geometries/TextGeometry.d.ts +16 -0
- package/geometries/TextGeometry.js +26 -0
- package/index.cjs.js +1 -1
- package/index.d.ts +2 -0
- package/index.js +2 -0
- package/loaders/AMFLoader.js +1 -3
- package/loaders/ColladaLoader.cjs.js +1 -1
- package/loaders/ColladaLoader.js +58 -35
- package/loaders/EXRLoader.cjs.js +1 -1
- package/loaders/EXRLoader.js +197 -262
- package/loaders/FBXLoader.cjs.js +1 -1
- package/loaders/FBXLoader.js +41 -90
- package/loaders/FontLoader.cjs.js +1 -0
- package/loaders/FontLoader.d.ts +32 -0
- package/loaders/FontLoader.js +139 -0
- package/loaders/GLTFLoader.cjs.js +1 -1
- package/loaders/GLTFLoader.js +161 -75
- package/loaders/HDRCubeTextureLoader.cjs.js +1 -1
- package/loaders/HDRCubeTextureLoader.js +2 -2
- package/loaders/NodeMaterialLoader.cjs.js +1 -1
- package/loaders/RGBELoader.cjs.js +1 -1
- package/loaders/RGBELoader.js +10 -9
- package/loaders/RGBMLoader.cjs.js +1 -1
- package/loaders/RGBMLoader.js +181 -257
- package/loaders/STLLoader.js +7 -7
- package/loaders/SVGLoader.cjs.js +1 -1
- package/loaders/SVGLoader.js +46 -30
- package/loaders/VRMLLoader.cjs.js +1 -1
- package/loaders/VRMLLoader.js +2 -1
- package/nodes/accessors/CameraNode.js +12 -12
- package/nodes/accessors/PositionNode.js +3 -3
- package/nodes/accessors/ReflectNode.js +3 -3
- package/nodes/core/FunctionNode.js +3 -3
- package/nodes/core/InputNode.js +3 -3
- package/nodes/core/Node.js +6 -6
- package/nodes/core/TempNode.js +6 -6
- package/nodes/effects/BlurNode.js +3 -3
- package/nodes/math/MathNode.js +3 -3
- package/nodes/utils/VelocityNode.js +6 -6
- package/package.json +2 -2
- package/renderers/nodes/accessors/UVNode.js +1 -3
- package/renderers/nodes/core/AttributeNode.js +1 -3
- package/renderers/nodes/core/Node.js +4 -12
- package/renderers/nodes/core/NodeBuilder.js +6 -18
- package/webxr/ARButton.js +6 -6
- package/webxr/VRButton.js +6 -6
    
        package/loaders/EXRLoader.js
    CHANGED
    
    | @@ -1,4 +1,4 @@ | |
| 1 | 
            -
            import { DataTextureLoader,  | 
| 1 | 
            +
            import { DataTextureLoader, HalfFloatType, FloatType, RGBAFormat, LinearEncoding, RedFormat, LinearFilter, DataUtils } from 'three';
         | 
| 2 2 | 
             
            import { unzlibSync } from 'fflate';
         | 
| 3 3 |  | 
| 4 4 | 
             
            /**
         | 
| @@ -71,7 +71,7 @@ import { unzlibSync } from 'fflate'; | |
| 71 71 | 
             
            class EXRLoader extends DataTextureLoader {
         | 
| 72 72 | 
             
              constructor(manager) {
         | 
| 73 73 | 
             
                super(manager);
         | 
| 74 | 
            -
                this.type =  | 
| 74 | 
            +
                this.type = HalfFloatType;
         | 
| 75 75 | 
             
              }
         | 
| 76 76 |  | 
| 77 77 | 
             
              parse(buffer) {
         | 
| @@ -103,33 +103,6 @@ class EXRLoader extends DataTextureLoader { | |
| 103 103 | 
             
                const LOSSY_DCT = 1;
         | 
| 104 104 | 
             
                const RLE = 2;
         | 
| 105 105 | 
             
                const logBase = Math.pow(2.7182818, 2.2);
         | 
| 106 | 
            -
                var tmpDataView = new DataView(new ArrayBuffer(8));
         | 
| 107 | 
            -
             | 
| 108 | 
            -
                function frexp(value) {
         | 
| 109 | 
            -
                  if (value === 0) return [value, 0];
         | 
| 110 | 
            -
                  tmpDataView.setFloat64(0, value);
         | 
| 111 | 
            -
                  var bits = tmpDataView.getUint32(0) >>> 20 & 0x7ff;
         | 
| 112 | 
            -
             | 
| 113 | 
            -
                  if (bits === 0) {
         | 
| 114 | 
            -
                    // denormal
         | 
| 115 | 
            -
                    tmpDataView.setFloat64(0, value * Math.pow(2, 64)); // exp + 64
         | 
| 116 | 
            -
             | 
| 117 | 
            -
                    bits = (tmpDataView.getUint32(0) >>> 20 & 0x7ff) - 64;
         | 
| 118 | 
            -
                  }
         | 
| 119 | 
            -
             | 
| 120 | 
            -
                  var exponent = bits - 1022;
         | 
| 121 | 
            -
                  var mantissa = ldexp(value, -exponent);
         | 
| 122 | 
            -
                  return [mantissa, exponent];
         | 
| 123 | 
            -
                }
         | 
| 124 | 
            -
             | 
| 125 | 
            -
                function ldexp(mantissa, exponent) {
         | 
| 126 | 
            -
                  var steps = Math.min(3, Math.ceil(Math.abs(exponent) / 1023));
         | 
| 127 | 
            -
                  var result = mantissa;
         | 
| 128 | 
            -
             | 
| 129 | 
            -
                  for (var i = 0; i < steps; i++) result *= Math.pow(2, Math.floor((exponent + i) / steps));
         | 
| 130 | 
            -
             | 
| 131 | 
            -
                  return result;
         | 
| 132 | 
            -
                }
         | 
| 133 106 |  | 
| 134 107 | 
             
                function reverseLutFromBitmap(bitmap, lut) {
         | 
| 135 108 | 
             
                  var k = 0;
         | 
| @@ -959,8 +932,7 @@ class EXRLoader extends DataTextureLoader { | |
| 959 932 | 
             
                  var inOffset = {
         | 
| 960 933 | 
             
                    value: info.offset.value
         | 
| 961 934 | 
             
                  };
         | 
| 962 | 
            -
                  var  | 
| 963 | 
            -
                  var outBuffer = new Uint16Array(tmpBufSize);
         | 
| 935 | 
            +
                  var outBuffer = new Uint16Array(info.width * info.scanlineBlockSize * (info.channels * info.type));
         | 
| 964 936 | 
             
                  var bitmap = new Uint8Array(BITMAP_SIZE); // Setup channel info
         | 
| 965 937 |  | 
| 966 938 | 
             
                  var outBufferEnd = 0;
         | 
| @@ -1080,7 +1052,7 @@ class EXRLoader extends DataTextureLoader { | |
| 1080 1052 | 
             
                  var inOffset = {
         | 
| 1081 1053 | 
             
                    value: info.offset.value
         | 
| 1082 1054 | 
             
                  };
         | 
| 1083 | 
            -
                  var outBuffer = new Uint8Array(info.width * info.lines * ( | 
| 1055 | 
            +
                  var outBuffer = new Uint8Array(info.width * info.lines * (info.channels * info.type * INT16_SIZE)); // Read compression header information
         | 
| 1084 1056 |  | 
| 1085 1057 | 
             
                  var dwaHeader = {
         | 
| 1086 1058 | 
             
                    version: parseInt64(inDataView, inOffset),
         | 
| @@ -1095,11 +1067,7 @@ class EXRLoader extends DataTextureLoader { | |
| 1095 1067 | 
             
                    totalDcUncompressedCount: parseInt64(inDataView, inOffset),
         | 
| 1096 1068 | 
             
                    acCompression: parseInt64(inDataView, inOffset)
         | 
| 1097 1069 | 
             
                  };
         | 
| 1098 | 
            -
             | 
| 1099 | 
            -
                  if (dwaHeader.version < 2) {
         | 
| 1100 | 
            -
                    throw 'EXRLoader.parse: ' + EXRHeader.compression + ' version ' + dwaHeader.version + ' is unsupported';
         | 
| 1101 | 
            -
                  } // Read channel ruleset information
         | 
| 1102 | 
            -
             | 
| 1070 | 
            +
                  if (dwaHeader.version < 2) throw 'EXRLoader.parse: ' + EXRHeader.compression + ' version ' + dwaHeader.version + ' is unsupported'; // Read channel ruleset information
         | 
| 1103 1071 |  | 
| 1104 1072 | 
             
                  var channelRules = new Array();
         | 
| 1105 1073 | 
             
                  var ruleSize = parseUint16(inDataView, inOffset) - INT16_SIZE;
         | 
| @@ -1268,12 +1236,6 @@ class EXRLoader extends DataTextureLoader { | |
| 1268 1236 | 
             
                  return stringValue;
         | 
| 1269 1237 | 
             
                }
         | 
| 1270 1238 |  | 
| 1271 | 
            -
                function parseUlong(dataView, offset) {
         | 
| 1272 | 
            -
                  var uLong = dataView.getUint32(0, true);
         | 
| 1273 | 
            -
                  offset.value = offset.value + ULONG_SIZE;
         | 
| 1274 | 
            -
                  return uLong;
         | 
| 1275 | 
            -
                }
         | 
| 1276 | 
            -
             | 
| 1277 1239 | 
             
                function parseRational(dataView, offset) {
         | 
| 1278 1240 | 
             
                  var x = parseInt32(dataView, offset);
         | 
| 1279 1241 | 
             
                  var y = parseUint32(dataView, offset);
         | 
| @@ -1461,253 +1423,240 @@ class EXRLoader extends DataTextureLoader { | |
| 1461 1423 | 
             
                  }
         | 
| 1462 1424 | 
             
                }
         | 
| 1463 1425 |  | 
| 1464 | 
            -
                 | 
| 1465 | 
            -
             | 
| 1466 | 
            -
             | 
| 1467 | 
            -
             | 
| 1426 | 
            +
                function parseHeader(dataView, buffer, offset) {
         | 
| 1427 | 
            +
                  const EXRHeader = {};
         | 
| 1428 | 
            +
                  if (dataView.getUint32(0, true) != 20000630) // magic
         | 
| 1429 | 
            +
                    throw "THREE.EXRLoader: provided file doesn't appear to be in OpenEXR format.";
         | 
| 1430 | 
            +
                  EXRHeader.version = dataView.getUint8(4, true);
         | 
| 1431 | 
            +
                  const spec = dataView.getUint8(5, true); // fullMask
         | 
| 1468 1432 |  | 
| 1469 | 
            -
             | 
| 1433 | 
            +
                  EXRHeader.spec = {
         | 
| 1434 | 
            +
                    singleTile: !!(spec & 1),
         | 
| 1435 | 
            +
                    longName: !!(spec & 2),
         | 
| 1436 | 
            +
                    deepFormat: !!(spec & 4),
         | 
| 1437 | 
            +
                    multiPart: !!(spec & 8)
         | 
| 1438 | 
            +
                  }; // start of header
         | 
| 1470 1439 |  | 
| 1471 | 
            -
             | 
| 1472 | 
            -
                // start of header
         | 
| 1440 | 
            +
                  offset.value = 8; // start at 8 - after pre-amble
         | 
| 1473 1441 |  | 
| 1474 | 
            -
             | 
| 1475 | 
            -
                  value: 8
         | 
| 1476 | 
            -
                }; // start at 8, after magic stuff
         | 
| 1442 | 
            +
                  var keepReading = true;
         | 
| 1477 1443 |  | 
| 1478 | 
            -
             | 
| 1479 | 
            -
             | 
| 1480 | 
            -
                while (keepReading) {
         | 
| 1481 | 
            -
                  var attributeName = parseNullTerminatedString(buffer, offset);
         | 
| 1482 | 
            -
             | 
| 1483 | 
            -
                  if (attributeName == 0) {
         | 
| 1484 | 
            -
                    keepReading = false;
         | 
| 1485 | 
            -
                  } else {
         | 
| 1486 | 
            -
                    var attributeType = parseNullTerminatedString(buffer, offset);
         | 
| 1487 | 
            -
                    var attributeSize = parseUint32(bufferDataView, offset);
         | 
| 1488 | 
            -
                    var attributeValue = parseValue(bufferDataView, buffer, offset, attributeType, attributeSize);
         | 
| 1444 | 
            +
                  while (keepReading) {
         | 
| 1445 | 
            +
                    var attributeName = parseNullTerminatedString(buffer, offset);
         | 
| 1489 1446 |  | 
| 1490 | 
            -
                    if ( | 
| 1491 | 
            -
                       | 
| 1447 | 
            +
                    if (attributeName == 0) {
         | 
| 1448 | 
            +
                      keepReading = false;
         | 
| 1492 1449 | 
             
                    } else {
         | 
| 1493 | 
            -
                       | 
| 1450 | 
            +
                      var attributeType = parseNullTerminatedString(buffer, offset);
         | 
| 1451 | 
            +
                      var attributeSize = parseUint32(dataView, offset);
         | 
| 1452 | 
            +
                      var attributeValue = parseValue(dataView, buffer, offset, attributeType, attributeSize);
         | 
| 1453 | 
            +
             | 
| 1454 | 
            +
                      if (attributeValue === undefined) {
         | 
| 1455 | 
            +
                        console.warn(`EXRLoader.parse: skipped unknown header attribute type \'${attributeType}\'.`);
         | 
| 1456 | 
            +
                      } else {
         | 
| 1457 | 
            +
                        EXRHeader[attributeName] = attributeValue;
         | 
| 1458 | 
            +
                      }
         | 
| 1494 1459 | 
             
                    }
         | 
| 1495 1460 | 
             
                  }
         | 
| 1496 | 
            -
                } // offsets
         | 
| 1497 | 
            -
             | 
| 1498 | 
            -
             | 
| 1499 | 
            -
                var dataWindowHeight = EXRHeader.dataWindow.yMax + 1;
         | 
| 1500 | 
            -
                var uncompress;
         | 
| 1501 | 
            -
                var scanlineBlockSize;
         | 
| 1502 | 
            -
             | 
| 1503 | 
            -
                switch (EXRHeader.compression) {
         | 
| 1504 | 
            -
                  case 'NO_COMPRESSION':
         | 
| 1505 | 
            -
                    scanlineBlockSize = 1;
         | 
| 1506 | 
            -
                    uncompress = uncompressRAW;
         | 
| 1507 | 
            -
                    break;
         | 
| 1508 | 
            -
             | 
| 1509 | 
            -
                  case 'RLE_COMPRESSION':
         | 
| 1510 | 
            -
                    scanlineBlockSize = 1;
         | 
| 1511 | 
            -
                    uncompress = uncompressRLE;
         | 
| 1512 | 
            -
                    break;
         | 
| 1513 | 
            -
             | 
| 1514 | 
            -
                  case 'ZIPS_COMPRESSION':
         | 
| 1515 | 
            -
                    scanlineBlockSize = 1;
         | 
| 1516 | 
            -
                    uncompress = uncompressZIP;
         | 
| 1517 | 
            -
                    break;
         | 
| 1518 | 
            -
             | 
| 1519 | 
            -
                  case 'ZIP_COMPRESSION':
         | 
| 1520 | 
            -
                    scanlineBlockSize = 16;
         | 
| 1521 | 
            -
                    uncompress = uncompressZIP;
         | 
| 1522 | 
            -
                    break;
         | 
| 1523 | 
            -
             | 
| 1524 | 
            -
                  case 'PIZ_COMPRESSION':
         | 
| 1525 | 
            -
                    scanlineBlockSize = 32;
         | 
| 1526 | 
            -
                    uncompress = uncompressPIZ;
         | 
| 1527 | 
            -
                    break;
         | 
| 1528 | 
            -
             | 
| 1529 | 
            -
                  case 'PXR24_COMPRESSION':
         | 
| 1530 | 
            -
                    scanlineBlockSize = 16;
         | 
| 1531 | 
            -
                    uncompress = uncompressPXR;
         | 
| 1532 | 
            -
                    break;
         | 
| 1533 | 
            -
             | 
| 1534 | 
            -
                  case 'DWAA_COMPRESSION':
         | 
| 1535 | 
            -
                    scanlineBlockSize = 32;
         | 
| 1536 | 
            -
                    uncompress = uncompressDWA;
         | 
| 1537 | 
            -
                    break;
         | 
| 1538 | 
            -
             | 
| 1539 | 
            -
                  case 'DWAB_COMPRESSION':
         | 
| 1540 | 
            -
                    scanlineBlockSize = 256;
         | 
| 1541 | 
            -
                    uncompress = uncompressDWA;
         | 
| 1542 | 
            -
                    break;
         | 
| 1543 | 
            -
             | 
| 1544 | 
            -
                  default:
         | 
| 1545 | 
            -
                    throw 'EXRLoader.parse: ' + EXRHeader.compression + ' is unsupported';
         | 
| 1546 | 
            -
                }
         | 
| 1547 1461 |  | 
| 1548 | 
            -
             | 
| 1549 | 
            -
             | 
| 1462 | 
            +
                  if (spec != 0) {
         | 
| 1463 | 
            +
                    console.error('EXRHeader:', EXRHeader);
         | 
| 1464 | 
            +
                    throw 'THREE.EXRLoader: provided file is currently unsupported.';
         | 
| 1465 | 
            +
                  }
         | 
| 1550 1466 |  | 
| 1551 | 
            -
             | 
| 1467 | 
            +
                  return EXRHeader;
         | 
| 1468 | 
            +
                }
         | 
| 1469 | 
            +
             | 
| 1470 | 
            +
                function setupDecoder(EXRHeader, dataView, uInt8Array, offset, outputType) {
         | 
| 1471 | 
            +
                  const EXRDecoder = {
         | 
| 1472 | 
            +
                    size: 0,
         | 
| 1473 | 
            +
                    viewer: dataView,
         | 
| 1474 | 
            +
                    array: uInt8Array,
         | 
| 1475 | 
            +
                    offset: offset,
         | 
| 1476 | 
            +
                    width: EXRHeader.dataWindow.xMax - EXRHeader.dataWindow.xMin + 1,
         | 
| 1477 | 
            +
                    height: EXRHeader.dataWindow.yMax - EXRHeader.dataWindow.yMin + 1,
         | 
| 1478 | 
            +
                    channels: EXRHeader.channels.length,
         | 
| 1479 | 
            +
                    bytesPerLine: null,
         | 
| 1480 | 
            +
                    lines: null,
         | 
| 1481 | 
            +
                    inputSize: null,
         | 
| 1482 | 
            +
                    type: EXRHeader.channels[0].pixelType,
         | 
| 1483 | 
            +
                    uncompress: null,
         | 
| 1484 | 
            +
                    getter: null,
         | 
| 1485 | 
            +
                    format: null,
         | 
| 1486 | 
            +
                    encoding: null
         | 
| 1487 | 
            +
                  };
         | 
| 1552 1488 |  | 
| 1553 | 
            -
             | 
| 1554 | 
            -
             | 
| 1555 | 
            -
             | 
| 1556 | 
            -
             | 
| 1557 | 
            -
                    case FloatType:
         | 
| 1558 | 
            -
                      getValue = parseFloat16;
         | 
| 1559 | 
            -
                      size_t = INT16_SIZE;
         | 
| 1489 | 
            +
                  switch (EXRHeader.compression) {
         | 
| 1490 | 
            +
                    case 'NO_COMPRESSION':
         | 
| 1491 | 
            +
                      EXRDecoder.lines = 1;
         | 
| 1492 | 
            +
                      EXRDecoder.uncompress = uncompressRAW;
         | 
| 1560 1493 | 
             
                      break;
         | 
| 1561 1494 |  | 
| 1562 | 
            -
                    case  | 
| 1563 | 
            -
                       | 
| 1564 | 
            -
                       | 
| 1495 | 
            +
                    case 'RLE_COMPRESSION':
         | 
| 1496 | 
            +
                      EXRDecoder.lines = 1;
         | 
| 1497 | 
            +
                      EXRDecoder.uncompress = uncompressRLE;
         | 
| 1565 1498 | 
             
                      break;
         | 
| 1566 | 
            -
             | 
| 1567 | 
            -
             | 
| 1568 | 
            -
             | 
| 1569 | 
            -
             | 
| 1570 | 
            -
                    case UnsignedByteType:
         | 
| 1571 | 
            -
                    case FloatType:
         | 
| 1572 | 
            -
                      getValue = parseFloat32;
         | 
| 1573 | 
            -
                      size_t = FLOAT32_SIZE;
         | 
| 1499 | 
            +
             | 
| 1500 | 
            +
                    case 'ZIPS_COMPRESSION':
         | 
| 1501 | 
            +
                      EXRDecoder.lines = 1;
         | 
| 1502 | 
            +
                      EXRDecoder.uncompress = uncompressZIP;
         | 
| 1574 1503 | 
             
                      break;
         | 
| 1575 1504 |  | 
| 1576 | 
            -
                    case  | 
| 1577 | 
            -
                       | 
| 1578 | 
            -
                       | 
| 1579 | 
            -
             | 
| 1580 | 
            -
                } else {
         | 
| 1581 | 
            -
                  throw 'EXRLoader.parse: unsupported pixelType ' + pixelType + ' for ' + EXRHeader.compression + '.';
         | 
| 1582 | 
            -
                }
         | 
| 1505 | 
            +
                    case 'ZIP_COMPRESSION':
         | 
| 1506 | 
            +
                      EXRDecoder.lines = 16;
         | 
| 1507 | 
            +
                      EXRDecoder.uncompress = uncompressZIP;
         | 
| 1508 | 
            +
                      break;
         | 
| 1583 1509 |  | 
| 1584 | 
            -
             | 
| 1510 | 
            +
                    case 'PIZ_COMPRESSION':
         | 
| 1511 | 
            +
                      EXRDecoder.lines = 32;
         | 
| 1512 | 
            +
                      EXRDecoder.uncompress = uncompressPIZ;
         | 
| 1513 | 
            +
                      break;
         | 
| 1585 1514 |  | 
| 1586 | 
            -
             | 
| 1587 | 
            -
             | 
| 1588 | 
            -
             | 
| 1515 | 
            +
                    case 'PXR24_COMPRESSION':
         | 
| 1516 | 
            +
                      EXRDecoder.lines = 16;
         | 
| 1517 | 
            +
                      EXRDecoder.uncompress = uncompressPXR;
         | 
| 1518 | 
            +
                      break;
         | 
| 1589 1519 |  | 
| 1520 | 
            +
                    case 'DWAA_COMPRESSION':
         | 
| 1521 | 
            +
                      EXRDecoder.lines = 32;
         | 
| 1522 | 
            +
                      EXRDecoder.uncompress = uncompressDWA;
         | 
| 1523 | 
            +
                      break;
         | 
| 1590 1524 |  | 
| 1591 | 
            -
             | 
| 1592 | 
            -
             | 
| 1593 | 
            -
             | 
| 1525 | 
            +
                    case 'DWAB_COMPRESSION':
         | 
| 1526 | 
            +
                      EXRDecoder.lines = 256;
         | 
| 1527 | 
            +
                      EXRDecoder.uncompress = uncompressDWA;
         | 
| 1528 | 
            +
                      break;
         | 
| 1529 | 
            +
             | 
| 1530 | 
            +
                    default:
         | 
| 1531 | 
            +
                      throw 'EXRLoader.parse: ' + EXRHeader.compression + ' is unsupported';
         | 
| 1532 | 
            +
                  }
         | 
| 1594 1533 |  | 
| 1595 | 
            -
             | 
| 1596 | 
            -
                var size = width * height * numChannels; // Fill initially with 1s for the alpha value if the texture is not RGBA, RGB values will be overwritten
         | 
| 1534 | 
            +
                  EXRDecoder.scanlineBlockSize = EXRDecoder.lines;
         | 
| 1597 1535 |  | 
| 1598 | 
            -
             | 
| 1599 | 
            -
             | 
| 1600 | 
            -
             | 
| 1601 | 
            -
             | 
| 1536 | 
            +
                  if (EXRDecoder.type == 1) {
         | 
| 1537 | 
            +
                    // half
         | 
| 1538 | 
            +
                    switch (outputType) {
         | 
| 1539 | 
            +
                      case FloatType:
         | 
| 1540 | 
            +
                        EXRDecoder.getter = parseFloat16;
         | 
| 1541 | 
            +
                        EXRDecoder.inputSize = INT16_SIZE;
         | 
| 1542 | 
            +
                        break;
         | 
| 1602 1543 |  | 
| 1603 | 
            -
             | 
| 1604 | 
            -
             | 
| 1544 | 
            +
                      case HalfFloatType:
         | 
| 1545 | 
            +
                        EXRDecoder.getter = parseUint16;
         | 
| 1546 | 
            +
                        EXRDecoder.inputSize = INT16_SIZE;
         | 
| 1547 | 
            +
                        break;
         | 
| 1605 1548 | 
             
                    }
         | 
| 1549 | 
            +
                  } else if (EXRDecoder.type == 2) {
         | 
| 1550 | 
            +
                    // float
         | 
| 1551 | 
            +
                    switch (outputType) {
         | 
| 1552 | 
            +
                      case FloatType:
         | 
| 1553 | 
            +
                        EXRDecoder.getter = parseFloat32;
         | 
| 1554 | 
            +
                        EXRDecoder.inputSize = FLOAT32_SIZE;
         | 
| 1555 | 
            +
                        break;
         | 
| 1606 1556 |  | 
| 1607 | 
            -
             | 
| 1557 | 
            +
                      case HalfFloatType:
         | 
| 1558 | 
            +
                        EXRDecoder.getter = decodeFloat32;
         | 
| 1559 | 
            +
                        EXRDecoder.inputSize = FLOAT32_SIZE;
         | 
| 1560 | 
            +
                    }
         | 
| 1561 | 
            +
                  } else {
         | 
| 1562 | 
            +
                    throw 'EXRLoader.parse: unsupported pixelType ' + EXRDecoder.type + ' for ' + EXRHeader.compression + '.';
         | 
| 1563 | 
            +
                  }
         | 
| 1608 1564 |  | 
| 1609 | 
            -
                   | 
| 1610 | 
            -
                    var byteArray = new Uint16Array(size);
         | 
| 1565 | 
            +
                  EXRDecoder.blockCount = (EXRHeader.dataWindow.yMax + 1) / EXRDecoder.scanlineBlockSize;
         | 
| 1611 1566 |  | 
| 1612 | 
            -
             | 
| 1613 | 
            -
             | 
| 1614 | 
            -
             | 
| 1567 | 
            +
                  for (var i = 0; i < EXRDecoder.blockCount; i++) parseInt64(dataView, offset); // scanlineOffset
         | 
| 1568 | 
            +
                  // we should be passed the scanline offset table, ready to start reading pixel data.
         | 
| 1569 | 
            +
                  // RGB images will be converted to RGBA format, preventing software emulation in select devices.
         | 
| 1615 1570 |  | 
| 1616 | 
            -
                    break;
         | 
| 1617 1571 |  | 
| 1618 | 
            -
                   | 
| 1619 | 
            -
             | 
| 1620 | 
            -
             | 
| 1621 | 
            -
             | 
| 1572 | 
            +
                  EXRDecoder.outputChannels = EXRDecoder.channels == 3 ? 4 : EXRDecoder.channels;
         | 
| 1573 | 
            +
                  const size = EXRDecoder.width * EXRDecoder.height * EXRDecoder.outputChannels;
         | 
| 1574 | 
            +
             | 
| 1575 | 
            +
                  switch (outputType) {
         | 
| 1576 | 
            +
                    case FloatType:
         | 
| 1577 | 
            +
                      EXRDecoder.byteArray = new Float32Array(size); // Fill initially with 1s for the alpha value if the texture is not RGBA, RGB values will be overwritten
         | 
| 1578 | 
            +
             | 
| 1579 | 
            +
                      if (EXRDecoder.channels < EXRDecoder.outputChannels) EXRDecoder.byteArray.fill(1, 0, size);
         | 
| 1580 | 
            +
                      break;
         | 
| 1581 | 
            +
             | 
| 1582 | 
            +
                    case HalfFloatType:
         | 
| 1583 | 
            +
                      EXRDecoder.byteArray = new Uint16Array(size);
         | 
| 1584 | 
            +
                      if (EXRDecoder.channels < EXRDecoder.outputChannels) EXRDecoder.byteArray.fill(0x3c00, 0, size); // Uint16Array holds half float data, 0x3C00 is 1
         | 
| 1585 | 
            +
             | 
| 1586 | 
            +
                      break;
         | 
| 1587 | 
            +
             | 
| 1588 | 
            +
                    default:
         | 
| 1589 | 
            +
                      console.error('THREE.EXRLoader: unsupported type: ', outputType);
         | 
| 1590 | 
            +
                      break;
         | 
| 1591 | 
            +
                  }
         | 
| 1592 | 
            +
             | 
| 1593 | 
            +
                  EXRDecoder.bytesPerLine = EXRDecoder.width * EXRDecoder.inputSize * EXRDecoder.channels;
         | 
| 1594 | 
            +
             | 
| 1595 | 
            +
                  if (EXRDecoder.outputChannels == 4) {
         | 
| 1596 | 
            +
                    EXRDecoder.format = RGBAFormat;
         | 
| 1597 | 
            +
                    EXRDecoder.encoding = LinearEncoding;
         | 
| 1598 | 
            +
                  } else {
         | 
| 1599 | 
            +
                    EXRDecoder.format = RedFormat;
         | 
| 1600 | 
            +
                    EXRDecoder.encoding = LinearEncoding;
         | 
| 1601 | 
            +
                  }
         | 
| 1602 | 
            +
             | 
| 1603 | 
            +
                  return EXRDecoder;
         | 
| 1604 | 
            +
                } // start parsing file [START]
         | 
| 1605 | 
            +
             | 
| 1606 | 
            +
             | 
| 1607 | 
            +
                const bufferDataView = new DataView(buffer);
         | 
| 1608 | 
            +
                const uInt8Array = new Uint8Array(buffer);
         | 
| 1609 | 
            +
                const offset = {
         | 
| 1610 | 
            +
                  value: 0
         | 
| 1611 | 
            +
                }; // get header information and validate format.
         | 
| 1612 | 
            +
             | 
| 1613 | 
            +
                const EXRHeader = parseHeader(bufferDataView, buffer, offset); // get input compression information and prepare decoding.
         | 
| 1622 1614 |  | 
| 1623 | 
            -
                 | 
| 1615 | 
            +
                const EXRDecoder = setupDecoder(EXRHeader, bufferDataView, uInt8Array, offset, this.type);
         | 
| 1616 | 
            +
                const tmpOffset = {
         | 
| 1617 | 
            +
                  value: 0
         | 
| 1618 | 
            +
                };
         | 
| 1619 | 
            +
                const channelOffsets = {
         | 
| 1624 1620 | 
             
                  R: 0,
         | 
| 1625 1621 | 
             
                  G: 1,
         | 
| 1626 1622 | 
             
                  B: 2,
         | 
| 1627 | 
            -
                  A: 3
         | 
| 1628 | 
            -
             | 
| 1629 | 
            -
                var compressionInfo = {
         | 
| 1630 | 
            -
                  size: 0,
         | 
| 1631 | 
            -
                  width: width,
         | 
| 1632 | 
            -
                  lines: scanlineBlockSize,
         | 
| 1633 | 
            -
                  offset: offset,
         | 
| 1634 | 
            -
                  array: uInt8Array,
         | 
| 1635 | 
            -
                  viewer: bufferDataView,
         | 
| 1636 | 
            -
                  type: pixelType,
         | 
| 1637 | 
            -
                  channels: EXRHeader.channels.length
         | 
| 1638 | 
            -
                };
         | 
| 1639 | 
            -
                var line;
         | 
| 1640 | 
            -
                var size;
         | 
| 1641 | 
            -
                var viewer;
         | 
| 1642 | 
            -
                var tmpOffset = {
         | 
| 1643 | 
            -
                  value: 0
         | 
| 1623 | 
            +
                  A: 3,
         | 
| 1624 | 
            +
                  Y: 0
         | 
| 1644 1625 | 
             
                };
         | 
| 1645 1626 |  | 
| 1646 | 
            -
                for ( | 
| 1647 | 
            -
                  line = parseUint32(bufferDataView, offset); // line_no
         | 
| 1627 | 
            +
                for (let scanlineBlockIdx = 0; scanlineBlockIdx < EXRDecoder.height / EXRDecoder.scanlineBlockSize; scanlineBlockIdx++) {
         | 
| 1628 | 
            +
                  const line = parseUint32(bufferDataView, offset); // line_no
         | 
| 1648 1629 |  | 
| 1649 | 
            -
                  size = parseUint32(bufferDataView, offset); // data_len
         | 
| 1630 | 
            +
                  EXRDecoder.size = parseUint32(bufferDataView, offset); // data_len
         | 
| 1650 1631 |  | 
| 1651 | 
            -
                   | 
| 1652 | 
            -
                   | 
| 1653 | 
            -
                   | 
| 1654 | 
            -
                   | 
| 1655 | 
            -
                  offset.value += size;
         | 
| 1632 | 
            +
                  EXRDecoder.lines = line + EXRDecoder.scanlineBlockSize > EXRDecoder.height ? EXRDecoder.height - line : EXRDecoder.scanlineBlockSize;
         | 
| 1633 | 
            +
                  const isCompressed = EXRDecoder.size < EXRDecoder.lines * EXRDecoder.bytesPerLine;
         | 
| 1634 | 
            +
                  const viewer = isCompressed ? EXRDecoder.uncompress(EXRDecoder) : uncompressRAW(EXRDecoder);
         | 
| 1635 | 
            +
                  offset.value += EXRDecoder.size;
         | 
| 1656 1636 |  | 
| 1657 | 
            -
                  for ( | 
| 1658 | 
            -
                     | 
| 1659 | 
            -
                    if (true_y >= height) break;
         | 
| 1637 | 
            +
                  for (let line_y = 0; line_y < EXRDecoder.scanlineBlockSize; line_y++) {
         | 
| 1638 | 
            +
                    const true_y = line_y + scanlineBlockIdx * EXRDecoder.scanlineBlockSize;
         | 
| 1639 | 
            +
                    if (true_y >= EXRDecoder.height) break;
         | 
| 1660 1640 |  | 
| 1661 | 
            -
                    for ( | 
| 1662 | 
            -
                       | 
| 1641 | 
            +
                    for (let channelID = 0; channelID < EXRDecoder.channels; channelID++) {
         | 
| 1642 | 
            +
                      const cOff = channelOffsets[EXRHeader.channels[channelID].name];
         | 
| 1663 1643 |  | 
| 1664 | 
            -
                      for ( | 
| 1665 | 
            -
                         | 
| 1666 | 
            -
                         | 
| 1667 | 
            -
                         | 
| 1668 | 
            -
                        byteArray[(height - 1 - true_y) * (width * numChannels) + x * numChannels + cOff] = val;
         | 
| 1644 | 
            +
                      for (let x = 0; x < EXRDecoder.width; x++) {
         | 
| 1645 | 
            +
                        tmpOffset.value = (line_y * (EXRDecoder.channels * EXRDecoder.width) + channelID * EXRDecoder.width + x) * EXRDecoder.inputSize;
         | 
| 1646 | 
            +
                        const outIndex = (EXRDecoder.height - 1 - true_y) * (EXRDecoder.width * EXRDecoder.outputChannels) + x * EXRDecoder.outputChannels + cOff;
         | 
| 1647 | 
            +
                        EXRDecoder.byteArray[outIndex] = EXRDecoder.getter(viewer, tmpOffset);
         | 
| 1669 1648 | 
             
                      }
         | 
| 1670 1649 | 
             
                    }
         | 
| 1671 1650 | 
             
                  }
         | 
| 1672 1651 | 
             
                }
         | 
| 1673 1652 |  | 
| 1674 | 
            -
                if (this.type === UnsignedByteType) {
         | 
| 1675 | 
            -
                  let v, i;
         | 
| 1676 | 
            -
                  const size = byteArray.length;
         | 
| 1677 | 
            -
                  const RGBEArray = new Uint8Array(size);
         | 
| 1678 | 
            -
             | 
| 1679 | 
            -
                  for (let h = 0; h < height; ++h) {
         | 
| 1680 | 
            -
                    for (let w = 0; w < width; ++w) {
         | 
| 1681 | 
            -
                      i = h * width * 4 + w * 4;
         | 
| 1682 | 
            -
                      const red = byteArray[i];
         | 
| 1683 | 
            -
                      const green = byteArray[i + 1];
         | 
| 1684 | 
            -
                      const blue = byteArray[i + 2];
         | 
| 1685 | 
            -
                      v = red > green ? red : green;
         | 
| 1686 | 
            -
                      v = blue > v ? blue : v;
         | 
| 1687 | 
            -
             | 
| 1688 | 
            -
                      if (v < 1e-32) {
         | 
| 1689 | 
            -
                        RGBEArray[i] = RGBEArray[i + 1] = RGBEArray[i + 2] = RGBEArray[i + 3] = 0;
         | 
| 1690 | 
            -
                      } else {
         | 
| 1691 | 
            -
                        const res = frexp(v);
         | 
| 1692 | 
            -
                        v = res[0] * 256 / v;
         | 
| 1693 | 
            -
                        RGBEArray[i] = red * v;
         | 
| 1694 | 
            -
                        RGBEArray[i + 1] = green * v;
         | 
| 1695 | 
            -
                        RGBEArray[i + 2] = blue * v;
         | 
| 1696 | 
            -
                        RGBEArray[i + 3] = res[1] + 128;
         | 
| 1697 | 
            -
                      }
         | 
| 1698 | 
            -
                    }
         | 
| 1699 | 
            -
                  }
         | 
| 1700 | 
            -
             | 
| 1701 | 
            -
                  byteArray = RGBEArray;
         | 
| 1702 | 
            -
                }
         | 
| 1703 | 
            -
             | 
| 1704 | 
            -
                const format = this.type === UnsignedByteType ? RGBEFormat : RGBAFormat ;
         | 
| 1705 1653 | 
             
                return {
         | 
| 1706 1654 | 
             
                  header: EXRHeader,
         | 
| 1707 | 
            -
                  width: width,
         | 
| 1708 | 
            -
                  height: height,
         | 
| 1709 | 
            -
                  data: byteArray,
         | 
| 1710 | 
            -
                  format: format,
         | 
| 1655 | 
            +
                  width: EXRDecoder.width,
         | 
| 1656 | 
            +
                  height: EXRDecoder.height,
         | 
| 1657 | 
            +
                  data: EXRDecoder.byteArray,
         | 
| 1658 | 
            +
                  format: EXRDecoder.format,
         | 
| 1659 | 
            +
                  encoding: EXRDecoder.encoding,
         | 
| 1711 1660 | 
             
                  type: this.type
         | 
| 1712 1661 | 
             
                };
         | 
| 1713 1662 | 
             
              }
         | 
| @@ -1719,25 +1668,11 @@ class EXRLoader extends DataTextureLoader { | |
| 1719 1668 |  | 
| 1720 1669 | 
             
              load(url, onLoad, onProgress, onError) {
         | 
| 1721 1670 | 
             
                function onLoadCallback(texture, texData) {
         | 
| 1722 | 
            -
                   | 
| 1723 | 
            -
             | 
| 1724 | 
            -
             | 
| 1725 | 
            -
             | 
| 1726 | 
            -
             | 
| 1727 | 
            -
                      texture.generateMipmaps = false;
         | 
| 1728 | 
            -
                      texture.flipY = false;
         | 
| 1729 | 
            -
                      break;
         | 
| 1730 | 
            -
             | 
| 1731 | 
            -
                    case FloatType:
         | 
| 1732 | 
            -
                    case HalfFloatType:
         | 
| 1733 | 
            -
                      texture.encoding = LinearEncoding;
         | 
| 1734 | 
            -
                      texture.minFilter = LinearFilter;
         | 
| 1735 | 
            -
                      texture.magFilter = LinearFilter;
         | 
| 1736 | 
            -
                      texture.generateMipmaps = false;
         | 
| 1737 | 
            -
                      texture.flipY = false;
         | 
| 1738 | 
            -
                      break;
         | 
| 1739 | 
            -
                  }
         | 
| 1740 | 
            -
             | 
| 1671 | 
            +
                  texture.encoding = texData.encoding;
         | 
| 1672 | 
            +
                  texture.minFilter = LinearFilter;
         | 
| 1673 | 
            +
                  texture.magFilter = LinearFilter;
         | 
| 1674 | 
            +
                  texture.generateMipmaps = false;
         | 
| 1675 | 
            +
                  texture.flipY = false;
         | 
| 1741 1676 | 
             
                  if (onLoad) onLoad(texture, texData);
         | 
| 1742 1677 | 
             
                }
         | 
| 1743 1678 |  |