three-stdlib 2.16.0 → 2.16.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/BufferGeometryUtils-1a7a235c.js +655 -0
- package/BufferGeometryUtils-971dfde3.js +1 -0
- package/Nodes-4f766d71.js +471 -0
- package/Nodes-9aa16d74.js +1 -0
- package/animation/AnimationClipCreator.cjs.js +1 -0
- package/animation/AnimationClipCreator.js +52 -32
- package/animation/CCDIKSolver.cjs.js +1 -0
- package/animation/CCDIKSolver.js +143 -64
- package/animation/MMDAnimationHelper.cjs.js +1 -0
- package/animation/MMDAnimationHelper.js +341 -150
- package/animation/MMDPhysics.cjs.js +1 -0
- package/animation/MMDPhysics.js +361 -154
- package/cameras/CinematicCamera.cjs.js +1 -0
- package/cameras/CinematicCamera.js +77 -67
- package/controls/ArcballControls.cjs.js +1 -0
- package/controls/ArcballControls.js +1449 -544
- package/controls/DeviceOrientationControls.cjs.js +1 -0
- package/controls/DeviceOrientationControls.js +97 -52
- package/controls/DragControls.cjs.js +1 -0
- package/controls/DragControls.js +187 -85
- package/controls/FirstPersonControls.cjs.js +1 -0
- package/controls/FirstPersonControls.js +193 -123
- package/controls/FlyControls.cjs.js +1 -0
- package/controls/FlyControls.d.ts +5 -4
- package/controls/FlyControls.js +160 -90
- package/controls/OrbitControls.cjs.js +1 -0
- package/controls/OrbitControls.js +481 -232
- package/controls/PointerLockControls.cjs.js +1 -0
- package/controls/PointerLockControls.js +99 -63
- package/controls/TrackballControls.cjs.js +1 -0
- package/controls/TrackballControls.js +383 -211
- package/controls/TransformControls.cjs.js +1 -0
- package/controls/TransformControls.js +782 -575
- package/controls/experimental/CameraControls.cjs.js +1 -0
- package/controls/experimental/CameraControls.js +609 -329
- package/csm/CSM.cjs.js +1 -0
- package/csm/CSM.js +108 -47
- package/csm/CSMFrustum.cjs.js +1 -0
- package/csm/CSMFrustum.js +29 -14
- package/csm/CSMHelper.cjs.js +1 -0
- package/csm/CSMHelper.js +34 -20
- package/csm/CSMShader.cjs.js +1 -0
- package/csm/CSMShader.js +11 -7
- package/curves/CurveExtras.cjs.js +1 -0
- package/curves/CurveExtras.js +115 -73
- package/curves/NURBSCurve.cjs.js +1 -0
- package/curves/NURBSCurve.js +43 -15
- package/curves/NURBSSurface.cjs.js +1 -0
- package/curves/NURBSSurface.js +27 -11
- package/curves/NURBSUtils.cjs.js +1 -0
- package/curves/NURBSUtils.js +203 -54
- package/custom.d.cjs.js +1 -0
- package/{shaders/types.mjs → custom.d.js} +0 -0
- package/deprecated/Geometry.cjs.js +1 -0
- package/deprecated/Geometry.js +486 -191
- package/effects/AnaglyphEffect.cjs.js +1 -0
- package/effects/AnaglyphEffect.js +60 -95
- package/effects/AsciiEffect.cjs.js +1 -0
- package/effects/AsciiEffect.js +110 -80
- package/effects/OutlineEffect.cjs.js +1 -0
- package/effects/OutlineEffect.js +204 -121
- package/effects/ParallaxBarrierEffect.cjs.js +1 -0
- package/effects/ParallaxBarrierEffect.js +38 -39
- package/effects/PeppersGhostEffect.cjs.js +1 -0
- package/effects/PeppersGhostEffect.js +68 -19
- package/effects/StereoEffect.cjs.js +1 -0
- package/effects/StereoEffect.js +16 -12
- package/environments/RoomEnvironment.cjs.js +1 -0
- package/environments/RoomEnvironment.js +47 -52
- package/exporters/ColladaExporter.cjs.js +1 -0
- package/exporters/ColladaExporter.js +241 -115
- package/exporters/DRACOExporter.cjs.js +1 -0
- package/exporters/DRACOExporter.js +121 -67
- package/exporters/GLTFExporter.cjs.js +1 -0
- package/exporters/GLTFExporter.js +1014 -463
- package/exporters/MMDExporter.cjs.js +1 -0
- package/exporters/MMDExporter.js +102 -44
- package/exporters/OBJExporter.cjs.js +1 -0
- package/exporters/OBJExporter.js +140 -78
- package/exporters/PLYExporter.cjs.js +1 -0
- package/exporters/PLYExporter.js +154 -93
- package/exporters/STLExporter.cjs.js +1 -0
- package/exporters/STLExporter.js +81 -30
- package/exporters/USDZExporter.cjs.js +1 -0
- package/exporters/USDZExporter.js +144 -84
- package/geometries/BoxLineGeometry.cjs.js +1 -0
- package/geometries/BoxLineGeometry.js +14 -7
- package/geometries/ConvexGeometry.cjs.js +1 -0
- package/geometries/ConvexGeometry.js +23 -14
- package/geometries/DecalGeometry.cjs.js +1 -0
- package/geometries/DecalGeometry.js +162 -108
- package/geometries/LightningStrike.cjs.js +1 -0
- package/geometries/LightningStrike.js +294 -101
- package/geometries/ParametricGeometries.cjs.js +1 -0
- package/geometries/ParametricGeometries.js +76 -26
- package/geometries/ParametricGeometry.cjs.js +1 -0
- package/geometries/ParametricGeometry.js +48 -24
- package/geometries/RoundedBoxGeometry.cjs.js +1 -0
- package/geometries/RoundedBoxGeometry.js +64 -33
- package/geometries/TeapotGeometry.cjs.js +1 -0
- package/geometries/TeapotGeometry.js +174 -1434
- package/geometries/TextGeometry.cjs.js +1 -0
- package/geometries/TextGeometry.js +17 -9
- package/helpers/LightProbeHelper.cjs.js +1 -0
- package/helpers/LightProbeHelper.js +21 -53
- package/helpers/PositionalAudioHelper.cjs.js +1 -0
- package/helpers/PositionalAudioHelper.js +30 -23
- package/helpers/RectAreaLightHelper.cjs.js +1 -0
- package/helpers/RectAreaLightHelper.js +33 -17
- package/helpers/VertexNormalsHelper.cjs.js +1 -0
- package/helpers/VertexNormalsHelper.js +41 -20
- package/helpers/VertexTangentsHelper.cjs.js +1 -0
- package/helpers/VertexTangentsHelper.js +36 -18
- package/index.cjs.js +1 -0
- package/index.js +333 -969
- package/interactive/InteractiveGroup.cjs.js +1 -0
- package/interactive/InteractiveGroup.d.ts +5 -0
- package/interactive/InteractiveGroup.js +87 -0
- package/interactive/SelectionBox.cjs.js +1 -0
- package/interactive/SelectionBox.js +46 -31
- package/interactive/SelectionHelper.cjs.js +1 -0
- package/interactive/SelectionHelper.js +21 -16
- package/libs/MeshoptDecoder.cjs.js +1 -0
- package/libs/MeshoptDecoder.js +58 -147
- package/libs/MotionControllers.cjs.js +1 -0
- package/libs/MotionControllers.js +208 -66
- package/lights/LightProbeGenerator.cjs.js +1 -0
- package/lights/LightProbeGenerator.js +96 -40
- package/lights/RectAreaLightUniformsLib.cjs.js +1 -0
- package/lights/RectAreaLightUniformsLib.js +9 -32842
- package/lines/Line2.cjs.js +1 -0
- package/lines/Line2.js +12 -9
- package/lines/LineGeometry.cjs.js +1 -0
- package/lines/LineGeometry.js +19 -7
- package/lines/LineMaterial.cjs.js +1 -0
- package/lines/LineMaterial.js +89 -51
- package/lines/LineSegments2.cjs.js +1 -0
- package/lines/LineSegments2.js +165 -56
- package/lines/LineSegmentsGeometry.cjs.js +1 -0
- package/lines/LineSegmentsGeometry.js +71 -29
- package/lines/Wireframe.cjs.js +1 -0
- package/lines/Wireframe.js +29 -15
- package/lines/WireframeGeometry2.cjs.js +1 -0
- package/lines/WireframeGeometry2.js +9 -8
- package/loaders/3DMLoader.cjs.js +1 -0
- package/loaders/3DMLoader.js +469 -234
- package/loaders/3MFLoader.cjs.js +1 -0
- package/loaders/3MFLoader.js +555 -340
- package/loaders/AMFLoader.cjs.js +1 -0
- package/loaders/AMFLoader.js +219 -114
- package/loaders/AssimpLoader.cjs.js +1 -0
- package/loaders/AssimpLoader.js +725 -328
- package/loaders/BVHLoader.cjs.js +1 -0
- package/loaders/BVHLoader.js +200 -94
- package/loaders/BasisTextureLoader.cjs.js +1 -0
- package/loaders/BasisTextureLoader.js +357 -229
- package/loaders/ColladaLoader.cjs.js +1 -0
- package/loaders/ColladaLoader.js +1522 -932
- package/loaders/DDSLoader.cjs.js +1 -0
- package/loaders/DDSLoader.js +108 -42
- package/loaders/DRACOLoader.cjs.js +1 -0
- package/loaders/DRACOLoader.js +210 -103
- package/loaders/EXRLoader.cjs.js +1 -0
- package/loaders/EXRLoader.js +809 -461
- package/loaders/FBXLoader.cjs.js +1 -0
- package/loaders/FBXLoader.js +1397 -842
- package/loaders/FontLoader.cjs.js +1 -0
- package/loaders/FontLoader.js +66 -33
- package/loaders/GCodeLoader.cjs.js +1 -0
- package/loaders/GCodeLoader.js +111 -63
- package/loaders/GLTFLoader.cjs.js +1 -0
- package/loaders/GLTFLoader.js +1484 -771
- package/loaders/HDRCubeTextureLoader.cjs.js +1 -0
- package/loaders/HDRCubeTextureLoader.js +50 -45
- package/loaders/KMZLoader.cjs.js +1 -0
- package/loaders/KMZLoader.js +55 -42
- package/loaders/KTX2Loader.cjs.js +1 -0
- package/loaders/KTX2Loader.js +362 -229
- package/loaders/KTXLoader.cjs.js +1 -0
- package/loaders/KTXLoader.js +99 -37
- package/loaders/LDrawLoader.cjs.js +1 -0
- package/loaders/LDrawLoader.js +746 -313
- package/loaders/LUT3dlLoader.cjs.js +1 -0
- package/loaders/LUT3dlLoader.js +62 -50
- package/loaders/LUTCubeLoader.cjs.js +1 -0
- package/loaders/LUTCubeLoader.js +56 -45
- package/loaders/LWOLoader.cjs.js +1 -0
- package/loaders/LWOLoader.js +339 -227
- package/loaders/LottieLoader.cjs.js +1 -0
- package/loaders/LottieLoader.js +38 -36
- package/loaders/MD2Loader.cjs.js +1 -0
- package/loaders/MD2Loader.js +91 -248
- package/loaders/MDDLoader.cjs.js +1 -0
- package/loaders/MDDLoader.js +45 -25
- package/loaders/MMDLoader.cjs.js +1 -0
- package/loaders/MMDLoader.js +795 -359
- package/loaders/MTLLoader.cjs.js +1 -0
- package/loaders/MTLLoader.js +201 -91
- package/loaders/NRRDLoader.cjs.js +1 -0
- package/loaders/NRRDLoader.js +263 -182
- package/loaders/NodeMaterialLoader.cjs.js +1 -0
- package/loaders/NodeMaterialLoader.js +14 -121
- package/loaders/OBJLoader.cjs.js +1 -0
- package/loaders/OBJLoader.js +283 -161
- package/loaders/PCDLoader.cjs.js +1 -0
- package/loaders/PCDLoader.js +164 -145
- package/loaders/PDBLoader.cjs.js +1 -0
- package/loaders/PDBLoader.js +63 -45
- package/loaders/PLYLoader.cjs.js +1 -0
- package/loaders/PLYLoader.js +203 -106
- package/loaders/PRWMLoader.cjs.js +1 -0
- package/loaders/PRWMLoader.js +110 -73
- package/loaders/PVRLoader.cjs.js +1 -0
- package/loaders/PVRLoader.js +93 -32
- package/loaders/RGBELoader.cjs.js +1 -0
- package/loaders/RGBELoader.js +233 -96
- package/loaders/RGBMLoader.cjs.js +1 -0
- package/loaders/RGBMLoader.js +514 -344
- package/loaders/STLLoader.cjs.js +1 -0
- package/loaders/STLLoader.js +165 -59
- package/loaders/SVGLoader.cjs.js +1 -0
- package/loaders/SVGLoader.js +851 -481
- package/loaders/TDSLoader.cjs.js +1 -0
- package/loaders/TDSLoader.js +527 -137
- package/loaders/TGALoader.cjs.js +1 -0
- package/loaders/TGALoader.js +205 -94
- package/loaders/TTFLoader.cjs.js +1 -0
- package/loaders/TTFLoader.js +79 -58
- package/loaders/TiltLoader.cjs.js +1 -0
- package/loaders/TiltLoader.js +167 -129
- package/loaders/VOXLoader.cjs.js +1 -0
- package/loaders/VOXLoader.js +84 -320
- package/loaders/VRMLLoader.cjs.js +1 -0
- package/loaders/VRMLLoader.js +1268 -786
- package/loaders/VRMLoader.cjs.js +1 -0
- package/loaders/VRMLoader.js +31 -23
- package/loaders/VTKLoader.cjs.js +1 -0
- package/loaders/VTKLoader.js +407 -219
- package/loaders/XLoader.cjs.js +1 -0
- package/loaders/XLoader.js +1259 -1083
- package/loaders/XYZLoader.cjs.js +1 -0
- package/loaders/XYZLoader.js +34 -28
- package/loaders/lwo/IFFParser.cjs.js +1 -0
- package/loaders/lwo/IFFParser.js +492 -238
- package/loaders/lwo/LWO2Parser.cjs.js +1 -0
- package/loaders/lwo/LWO2Parser.js +279 -176
- package/loaders/lwo/LWO3Parser.cjs.js +1 -0
- package/loaders/lwo/LWO3Parser.js +247 -160
- package/math/Capsule.cjs.js +1 -0
- package/math/Capsule.js +43 -56
- package/math/ColorConverter.cjs.js +1 -0
- package/math/ColorConverter.js +32 -18
- package/math/ConvexHull.cjs.js +1 -0
- package/math/ConvexHull.js +357 -97
- package/math/ImprovedNoise.cjs.js +1 -0
- package/math/ImprovedNoise.js +32 -282
- package/math/Lut.cjs.js +1 -0
- package/math/Lut.js +35 -51
- package/math/MeshSurfaceSampler.cjs.js +1 -0
- package/math/MeshSurfaceSampler.js +68 -25
- package/math/OBB.cjs.js +1 -0
- package/math/OBB.js +152 -91
- package/math/Octree.cjs.js +1 -0
- package/math/Octree.js +139 -76
- package/math/SimplexNoise.cjs.js +1 -0
- package/math/SimplexNoise.js +238 -217
- package/misc/ConvexObjectBreaker.cjs.js +1 -0
- package/misc/ConvexObjectBreaker.js +185 -79
- package/misc/GPUComputationRenderer.cjs.js +1 -0
- package/misc/GPUComputationRenderer.js +194 -69
- package/misc/Gyroscope.cjs.js +1 -0
- package/misc/Gyroscope.js +22 -16
- package/misc/MD2Character.cjs.js +1 -0
- package/misc/MD2Character.js +74 -52
- package/misc/MD2CharacterComplex.cjs.js +1 -0
- package/misc/MD2CharacterComplex.js +163 -112
- package/misc/MorphAnimMesh.cjs.js +1 -0
- package/misc/MorphAnimMesh.js +28 -20
- package/misc/MorphBlendMesh.cjs.js +1 -0
- package/misc/MorphBlendMesh.js +69 -45
- package/misc/ProgressiveLightmap.cjs.js +1 -0
- package/misc/ProgressiveLightmap.js +187 -70
- package/misc/RollerCoaster.cjs.js +1 -0
- package/misc/RollerCoaster.js +135 -106
- package/misc/TubePainter.cjs.js +1 -0
- package/misc/TubePainter.js +92 -74
- package/misc/Volume.cjs.js +1 -0
- package/misc/Volume.js +270 -108
- package/misc/VolumeSlice.cjs.js +1 -0
- package/misc/VolumeSlice.js +122 -34
- package/misc/WebGL.cjs.js +1 -0
- package/misc/WebGL.js +34 -37
- package/modifiers/CurveModifier.cjs.js +1 -0
- package/modifiers/CurveModifier.js +151 -46
- package/modifiers/EdgeSplitModifier.cjs.js +1 -0
- package/modifiers/EdgeSplitModifier.js +90 -46
- package/modifiers/SimplifyModifier.cjs.js +1 -0
- package/modifiers/SimplifyModifier.js +202 -77
- package/modifiers/TessellateModifier.cjs.js +1 -0
- package/modifiers/TessellateModifier.js +90 -65
- package/nodes/Nodes.cjs.js +1 -0
- package/nodes/Nodes.js +140 -274
- package/nodes/ShaderNode.cjs.js +1 -0
- package/nodes/ShaderNode.js +196 -296
- package/nodes/accessors/BufferNode.cjs.js +1 -0
- package/nodes/accessors/BufferNode.js +8 -4
- package/nodes/accessors/CameraNode.cjs.js +1 -0
- package/nodes/accessors/CameraNode.js +25 -20
- package/nodes/accessors/CubeTextureNode.cjs.js +1 -0
- package/nodes/accessors/CubeTextureNode.js +26 -14
- package/nodes/accessors/MaterialNode.cjs.js +1 -0
- package/nodes/accessors/MaterialNode.js +53 -43
- package/nodes/accessors/MaterialReferenceNode.cjs.js +1 -0
- package/nodes/accessors/MaterialReferenceNode.js +6 -3
- package/nodes/accessors/ModelNode.cjs.js +1 -0
- package/nodes/accessors/ModelNode.js +5 -3
- package/nodes/accessors/ModelViewProjectionNode.cjs.js +1 -0
- package/nodes/accessors/ModelViewProjectionNode.js +13 -14
- package/nodes/accessors/NormalNode.cjs.js +1 -0
- package/nodes/accessors/NormalNode.js +39 -40
- package/nodes/accessors/Object3DNode.cjs.js +1 -0
- package/nodes/accessors/Object3DNode.js +50 -40
- package/nodes/accessors/PointUVNode.cjs.js +1 -0
- package/nodes/accessors/PointUVNode.js +9 -5
- package/nodes/accessors/PositionNode.cjs.js +1 -0
- package/nodes/accessors/PositionNode.js +41 -42
- package/nodes/accessors/ReferenceNode.cjs.js +1 -0
- package/nodes/accessors/ReferenceNode.js +17 -10
- package/nodes/accessors/ReflectNode.cjs.js +1 -0
- package/nodes/accessors/ReflectNode.js +26 -23
- package/nodes/accessors/SkinningNode.cjs.js +1 -0
- package/nodes/accessors/SkinningNode.js +48 -46
- package/nodes/accessors/TextureNode.cjs.js +1 -0
- package/nodes/accessors/TextureNode.js +29 -14
- package/nodes/accessors/UVNode.cjs.js +1 -0
- package/nodes/accessors/UVNode.js +11 -5
- package/nodes/core/ArrayUniformNode.cjs.js +1 -0
- package/nodes/core/ArrayUniformNode.js +7 -3
- package/nodes/core/AttributeNode.cjs.js +1 -0
- package/nodes/core/AttributeNode.js +12 -5
- package/nodes/core/BypassNode.cjs.js +1 -0
- package/nodes/core/BypassNode.js +12 -5
- package/nodes/core/CodeNode.cjs.js +1 -0
- package/nodes/core/CodeNode.js +12 -4
- package/nodes/core/ConstNode.cjs.js +1 -0
- package/nodes/core/ConstNode.js +7 -3
- package/nodes/core/ContextNode.cjs.js +1 -0
- package/nodes/core/ContextNode.js +8 -3
- package/nodes/core/ExpressionNode.cjs.js +1 -0
- package/nodes/core/ExpressionNode.js +9 -5
- package/nodes/core/FunctionCallNode.cjs.js +1 -0
- package/nodes/core/FunctionCallNode.js +15 -6
- package/nodes/core/FunctionNode.cjs.js +1 -0
- package/nodes/core/FunctionNode.js +25 -10
- package/nodes/core/InputNode.cjs.js +1 -0
- package/nodes/core/InputNode.js +23 -12
- package/nodes/core/Node.cjs.js +1 -0
- package/nodes/core/Node.js +75 -35
- package/nodes/core/NodeAttribute.cjs.js +1 -0
- package/nodes/core/NodeAttribute.js +4 -2
- package/nodes/core/NodeBuilder.cjs.js +1 -0
- package/nodes/core/NodeBuilder.js +224 -110
- package/nodes/core/NodeCode.cjs.js +1 -0
- package/nodes/core/NodeCode.js +7 -4
- package/nodes/core/NodeFrame.cjs.js +1 -0
- package/nodes/core/NodeFrame.js +12 -9
- package/nodes/core/NodeFunction.cjs.js +1 -0
- package/nodes/core/NodeFunction.js +17 -0
- package/nodes/core/NodeFunctionInput.cjs.js +1 -0
- package/nodes/core/NodeFunctionInput.js +5 -3
- package/nodes/core/NodeKeywords.cjs.js +1 -0
- package/nodes/core/NodeKeywords.js +16 -5
- package/nodes/core/NodeParser.cjs.js +1 -0
- package/nodes/core/NodeParser.js +8 -0
- package/nodes/core/NodeUniform.cjs.js +1 -0
- package/nodes/core/NodeUniform.js +7 -3
- package/nodes/core/NodeUtils.cjs.js +1 -0
- package/nodes/core/NodeUtils.js +43 -39
- package/nodes/core/NodeVar.cjs.js +1 -0
- package/nodes/core/NodeVar.js +4 -2
- package/nodes/core/NodeVary.cjs.js +1 -0
- package/nodes/core/NodeVary.js +4 -2
- package/nodes/core/PropertyNode.cjs.js +1 -0
- package/nodes/core/PropertyNode.js +10 -4
- package/nodes/core/TempNode.cjs.js +1 -0
- package/nodes/core/TempNode.js +11 -5
- package/nodes/core/UniformNode.cjs.js +1 -0
- package/nodes/core/UniformNode.js +10 -4
- package/nodes/core/VarNode.cjs.js +1 -0
- package/nodes/core/VarNode.js +11 -3
- package/nodes/core/VaryNode.cjs.js +1 -0
- package/nodes/core/VaryNode.js +15 -6
- package/nodes/core/constants.cjs.js +1 -0
- package/nodes/core/constants.js +7 -20
- package/nodes/display/ColorSpaceNode.cjs.js +1 -0
- package/nodes/display/ColorSpaceNode.js +38 -34
- package/nodes/display/NormalMapNode.cjs.js +1 -0
- package/nodes/display/NormalMapNode.js +53 -35
- package/nodes/fog/FogNode.cjs.js +1 -0
- package/nodes/fog/FogNode.js +9 -5
- package/nodes/fog/FogRangeNode.cjs.js +1 -0
- package/nodes/fog/FogRangeNode.js +9 -5
- package/nodes/functions/BSDFs.cjs.js +1 -0
- package/nodes/functions/BSDFs.js +118 -61
- package/nodes/functions/PhysicalMaterialFunctions.cjs.js +1 -0
- package/nodes/functions/PhysicalMaterialFunctions.js +57 -0
- package/nodes/lights/LightContextNode.cjs.js +1 -0
- package/nodes/lights/LightContextNode.js +23 -14
- package/nodes/lights/LightNode.cjs.js +1 -0
- package/nodes/lights/LightNode.js +31 -27
- package/nodes/lights/LightsNode.cjs.js +1 -0
- package/nodes/lights/LightsNode.js +28 -9
- package/nodes/loaders/NodeLoader.cjs.js +1 -0
- package/nodes/loaders/NodeLoader.js +42 -27
- package/nodes/loaders/NodeMaterialLoader.cjs.js +1 -0
- package/nodes/loaders/NodeMaterialLoader.js +10 -4
- package/nodes/loaders/NodeObjectLoader.cjs.js +1 -0
- package/nodes/loaders/NodeObjectLoader.js +19 -9
- package/nodes/materials/LineBasicNodeMaterial.cjs.js +1 -0
- package/nodes/materials/LineBasicNodeMaterial.js +10 -5
- package/nodes/materials/Materials.cjs.js +1 -0
- package/nodes/materials/Materials.js +17 -14
- package/nodes/materials/MeshBasicNodeMaterial.cjs.js +1 -0
- package/nodes/materials/MeshBasicNodeMaterial.js +10 -5
- package/nodes/materials/MeshStandardNodeMaterial.cjs.js +1 -0
- package/nodes/materials/MeshStandardNodeMaterial.js +8 -5
- package/nodes/materials/NodeMaterial.cjs.js +1 -0
- package/nodes/materials/NodeMaterial.js +36 -20
- package/nodes/materials/PointsNodeMaterial.cjs.js +1 -0
- package/nodes/materials/PointsNodeMaterial.js +10 -5
- package/nodes/math/CondNode.cjs.js +1 -0
- package/nodes/math/CondNode.js +23 -11
- package/nodes/math/MathNode.cjs.js +1 -0
- package/nodes/math/MathNode.js +142 -98
- package/nodes/math/OperatorNode.cjs.js +1 -0
- package/nodes/math/OperatorNode.js +46 -24
- package/nodes/parsers/GLSLNodeFunction.cjs.js +1 -0
- package/nodes/parsers/GLSLNodeFunction.js +101 -0
- package/nodes/parsers/GLSLNodeParser.cjs.js +1 -0
- package/nodes/parsers/GLSLNodeParser.js +13 -0
- package/nodes/parsers/WGSLNodeFunction.cjs.js +1 -0
- package/nodes/parsers/WGSLNodeFunction.js +71 -0
- package/nodes/parsers/WGSLNodeParser.cjs.js +1 -0
- package/nodes/parsers/WGSLNodeParser.js +13 -0
- package/nodes/procedural/CheckerNode.cjs.js +1 -0
- package/nodes/procedural/CheckerNode.js +19 -13
- package/nodes/utils/ArrayElementNode.cjs.js +1 -0
- package/nodes/utils/ArrayElementNode.js +8 -4
- package/nodes/utils/ConvertNode.cjs.js +1 -0
- package/nodes/utils/ConvertNode.js +8 -3
- package/nodes/utils/JoinNode.cjs.js +1 -0
- package/nodes/utils/JoinNode.js +11 -7
- package/nodes/utils/MatcapUVNode.cjs.js +1 -0
- package/nodes/utils/MatcapUVNode.js +11 -8
- package/nodes/utils/OscNode.cjs.js +1 -0
- package/nodes/utils/OscNode.js +33 -27
- package/nodes/utils/SplitNode.cjs.js +1 -0
- package/nodes/utils/SplitNode.js +20 -6
- package/nodes/utils/SpriteSheetUVNode.cjs.js +1 -0
- package/nodes/utils/SpriteSheetUVNode.js +23 -23
- package/nodes/utils/TimerNode.cjs.js +1 -0
- package/nodes/utils/TimerNode.js +24 -20
- package/objects/GroundProjectedEnv.cjs.js +1 -0
- package/objects/GroundProjectedEnv.js +37 -22
- package/objects/Lensflare.cjs.js +1 -0
- package/objects/Lensflare.js +156 -86
- package/objects/LightningStorm.cjs.js +1 -0
- package/objects/LightningStorm.js +102 -38
- package/objects/MarchingCubes.cjs.js +1 -0
- package/objects/MarchingCubes.js +303 -150
- package/objects/Reflector.cjs.js +1 -0
- package/objects/Reflector.js +72 -50
- package/objects/ReflectorForSSRPass.cjs.js +1 -0
- package/objects/ReflectorForSSRPass.js +131 -80
- package/objects/ReflectorRTT.cjs.js +1 -0
- package/objects/ReflectorRTT.js +7 -6
- package/objects/Refractor.cjs.js +1 -0
- package/objects/Refractor.js +106 -64
- package/objects/ShadowMesh.cjs.js +1 -0
- package/objects/ShadowMesh.js +17 -8
- package/objects/Sky.cjs.js +1 -0
- package/objects/Sky.js +80 -119
- package/objects/Water.cjs.js +1 -0
- package/objects/Water.js +127 -83
- package/objects/Water2.cjs.js +1 -0
- package/objects/Water2.js +108 -72
- package/offscreen/jank.cjs.js +1 -0
- package/offscreen/jank.js +14 -10
- package/offscreen/offscreen.cjs.js +1 -0
- package/offscreen/offscreen.js +5 -4
- package/offscreen/scene.cjs.js +1 -0
- package/offscreen/scene.js +48 -45
- package/package.json +3 -3
- package/physics/AmmoPhysics.cjs.js +1 -0
- package/physics/AmmoPhysics.js +71 -30
- package/postprocessing/AdaptiveToneMappingPass.cjs.js +1 -0
- package/postprocessing/AdaptiveToneMappingPass.js +123 -97
- package/postprocessing/AfterimagePass.cjs.js +1 -0
- package/postprocessing/AfterimagePass.js +49 -28
- package/postprocessing/BloomPass.cjs.js +1 -0
- package/postprocessing/BloomPass.js +69 -43
- package/postprocessing/BokehPass.cjs.js +1 -0
- package/postprocessing/BokehPass.js +69 -39
- package/postprocessing/ClearPass.cjs.js +1 -0
- package/postprocessing/ClearPass.js +25 -10
- package/postprocessing/CubeTexturePass.cjs.js +1 -0
- package/postprocessing/CubeTexturePass.js +27 -28
- package/postprocessing/DotScreenPass.cjs.js +1 -0
- package/postprocessing/DotScreenPass.js +32 -24
- package/postprocessing/EffectComposer.cjs.js +1 -0
- package/postprocessing/EffectComposer.js +86 -39
- package/postprocessing/FilmPass.cjs.js +1 -0
- package/postprocessing/FilmPass.js +30 -25
- package/postprocessing/GlitchPass.cjs.js +1 -0
- package/postprocessing/GlitchPass.js +61 -38
- package/postprocessing/HalftonePass.cjs.js +1 -0
- package/postprocessing/HalftonePass.js +39 -19
- package/postprocessing/LUTPass.cjs.js +1 -0
- package/postprocessing/LUTPass.js +38 -13
- package/postprocessing/MaskPass.cjs.js +1 -0
- package/postprocessing/MaskPass.js +38 -19
- package/postprocessing/OutlinePass.cjs.js +1 -0
- package/postprocessing/OutlinePass.js +277 -135
- package/postprocessing/Pass.cjs.js +1 -0
- package/postprocessing/Pass.js +44 -20
- package/postprocessing/RenderPass.cjs.js +1 -0
- package/postprocessing/RenderPass.js +36 -13
- package/postprocessing/RenderPixelatedPass.cjs.js +1 -0
- package/postprocessing/RenderPixelatedPass.js +58 -44
- package/postprocessing/SAOPass.cjs.js +1 -0
- package/postprocessing/SAOPass.js +189 -154
- package/postprocessing/SMAAPass.cjs.js +1 -0
- package/postprocessing/SMAAPass.js +84 -64
- package/postprocessing/SSAARenderPass.cjs.js +1 -0
- package/postprocessing/SSAARenderPass.js +69 -121
- package/postprocessing/SSAOPass.cjs.js +1 -0
- package/postprocessing/SSAOPass.js +172 -123
- package/postprocessing/SSRPass.cjs.js +1 -0
- package/postprocessing/SSRPass.js +280 -211
- package/postprocessing/SavePass.cjs.js +1 -0
- package/postprocessing/SavePass.js +25 -20
- package/postprocessing/ShaderPass.cjs.js +1 -0
- package/postprocessing/ShaderPass.js +30 -14
- package/postprocessing/TAARenderPass.cjs.js +1 -0
- package/postprocessing/TAARenderPass.js +61 -42
- package/postprocessing/TexturePass.cjs.js +1 -0
- package/postprocessing/TexturePass.js +22 -21
- package/postprocessing/UnrealBloomPass.cjs.js +1 -0
- package/postprocessing/UnrealBloomPass.js +213 -105
- package/renderers/CSS2DRenderer.cjs.js +1 -0
- package/renderers/CSS2DRenderer.js +56 -44
- package/renderers/CSS3DRenderer.cjs.js +1 -0
- package/renderers/CSS3DRenderer.js +86 -53
- package/renderers/Projector.cjs.js +1 -0
- package/renderers/Projector.js +274 -107
- package/renderers/SVGRenderer.cjs.js +1 -0
- package/renderers/SVGRenderer.js +182 -72
- package/renderers/nodes/accessors/CameraNode.cjs.js +1 -0
- package/renderers/nodes/accessors/CameraNode.js +40 -29
- package/renderers/nodes/accessors/ModelNode.cjs.js +1 -0
- package/renderers/nodes/accessors/ModelNode.js +37 -28
- package/renderers/nodes/accessors/ModelViewProjectionNode.cjs.js +1 -0
- package/renderers/nodes/accessors/ModelViewProjectionNode.js +23 -10
- package/renderers/nodes/accessors/NormalNode.cjs.js +1 -0
- package/renderers/nodes/accessors/NormalNode.js +45 -35
- package/renderers/nodes/accessors/PositionNode.cjs.js +1 -0
- package/renderers/nodes/accessors/PositionNode.js +19 -18
- package/renderers/nodes/accessors/UVNode.cjs.js +1 -0
- package/renderers/nodes/accessors/UVNode.js +10 -5
- package/renderers/nodes/core/AttributeNode.cjs.js +1 -0
- package/renderers/nodes/core/AttributeNode.js +14 -5
- package/renderers/nodes/core/InputNode.cjs.js +1 -0
- package/renderers/nodes/core/InputNode.js +14 -4
- package/renderers/nodes/core/Node.cjs.js +1 -0
- package/renderers/nodes/core/Node.js +17 -7
- package/renderers/nodes/core/NodeAttribute.cjs.js +1 -0
- package/renderers/nodes/core/NodeAttribute.js +6 -3
- package/renderers/nodes/core/NodeBuilder.cjs.js +1 -0
- package/renderers/nodes/core/NodeBuilder.js +154 -87
- package/renderers/nodes/core/NodeFrame.cjs.js +1 -0
- package/renderers/nodes/core/NodeFrame.js +12 -9
- package/renderers/nodes/core/NodeSlot.cjs.js +1 -0
- package/renderers/nodes/core/NodeSlot.js +3 -2
- package/renderers/nodes/core/NodeUniform.cjs.js +1 -0
- package/renderers/nodes/core/NodeUniform.js +9 -4
- package/renderers/nodes/core/NodeVary.cjs.js +1 -0
- package/renderers/nodes/core/NodeVary.js +7 -4
- package/renderers/nodes/core/VaryNode.cjs.js +1 -0
- package/renderers/nodes/core/VaryNode.js +12 -6
- package/renderers/nodes/core/constants.cjs.js +1 -0
- package/renderers/nodes/core/constants.js +13 -16
- package/renderers/nodes/inputs/ColorNode.cjs.js +1 -0
- package/renderers/nodes/inputs/ColorNode.js +11 -5
- package/renderers/nodes/inputs/FloatNode.cjs.js +1 -0
- package/renderers/nodes/inputs/FloatNode.js +11 -5
- package/renderers/nodes/inputs/Matrix3Node.cjs.js +1 -0
- package/renderers/nodes/inputs/Matrix3Node.js +13 -7
- package/renderers/nodes/inputs/Matrix4Node.cjs.js +1 -0
- package/renderers/nodes/inputs/Matrix4Node.js +13 -7
- package/renderers/nodes/inputs/TextureNode.cjs.js +1 -0
- package/renderers/nodes/inputs/TextureNode.js +15 -7
- package/renderers/nodes/inputs/Vector2Node.cjs.js +1 -0
- package/renderers/nodes/inputs/Vector2Node.js +11 -5
- package/renderers/nodes/inputs/Vector3Node.cjs.js +1 -0
- package/renderers/nodes/inputs/Vector3Node.js +13 -7
- package/renderers/nodes/inputs/Vector4Node.cjs.js +1 -0
- package/renderers/nodes/inputs/Vector4Node.js +13 -7
- package/renderers/nodes/math/MathNode.cjs.js +1 -0
- package/renderers/nodes/math/MathNode.js +30 -20
- package/renderers/nodes/math/OperatorNode.cjs.js +1 -0
- package/renderers/nodes/math/OperatorNode.js +20 -4
- package/renderers/nodes/utils/SwitchNode.cjs.js +1 -0
- package/renderers/nodes/utils/SwitchNode.js +9 -4
- package/renderers/nodes/utils/TimerNode.cjs.js +1 -0
- package/renderers/nodes/utils/TimerNode.js +10 -5
- package/renderers/webgpu/WebGPU.cjs.js +1 -0
- package/renderers/webgpu/WebGPU.js +16 -14
- package/renderers/webgpu/WebGPUAttributes.cjs.js +1 -0
- package/renderers/webgpu/WebGPUAttributes.js +23 -16
- package/renderers/webgpu/WebGPUBackground.cjs.js +1 -0
- package/renderers/webgpu/WebGPUBackground.js +30 -13
- package/renderers/webgpu/WebGPUBinding.cjs.js +1 -0
- package/renderers/webgpu/WebGPUBinding.js +7 -4
- package/renderers/webgpu/WebGPUBindings.cjs.js +1 -0
- package/renderers/webgpu/WebGPUBindings.js +57 -21
- package/renderers/webgpu/WebGPUComputePipelines.cjs.js +1 -0
- package/renderers/webgpu/WebGPUComputePipelines.js +25 -14
- package/renderers/webgpu/WebGPUGeometries.cjs.js +1 -0
- package/renderers/webgpu/WebGPUGeometries.js +15 -5
- package/renderers/webgpu/WebGPUInfo.cjs.js +1 -0
- package/renderers/webgpu/WebGPUInfo.js +8 -3
- package/renderers/webgpu/WebGPUObjects.cjs.js +1 -0
- package/renderers/webgpu/WebGPUObjects.js +10 -5
- package/renderers/webgpu/WebGPUProperties.cjs.js +1 -0
- package/renderers/webgpu/WebGPUProperties.js +11 -5
- package/renderers/webgpu/WebGPURenderLists.cjs.js +1 -0
- package/renderers/webgpu/WebGPURenderLists.js +36 -20
- package/renderers/webgpu/WebGPURenderPipelines.cjs.js +1 -0
- package/renderers/webgpu/WebGPURenderPipelines.js +387 -260
- package/renderers/webgpu/WebGPURenderer.cjs.js +1 -0
- package/renderers/webgpu/WebGPURenderer.js +262 -124
- package/renderers/webgpu/WebGPUSampledTexture.cjs.js +1 -0
- package/renderers/webgpu/WebGPUSampledTexture.js +31 -18
- package/renderers/webgpu/WebGPUSampler.cjs.js +1 -0
- package/renderers/webgpu/WebGPUSampler.js +12 -7
- package/renderers/webgpu/WebGPUStorageBuffer.cjs.js +1 -0
- package/renderers/webgpu/WebGPUStorageBuffer.js +12 -7
- package/renderers/webgpu/WebGPUTextureRenderer.cjs.js +1 -0
- package/renderers/webgpu/WebGPUTextureRenderer.js +11 -5
- package/renderers/webgpu/WebGPUTextureUtils.cjs.js +1 -0
- package/renderers/webgpu/WebGPUTextureUtils.js +40 -29
- package/renderers/webgpu/WebGPUTextures.cjs.js +1 -0
- package/renderers/webgpu/WebGPUTextures.js +333 -186
- package/renderers/webgpu/WebGPUUniform.cjs.js +1 -0
- package/renderers/webgpu/WebGPUUniform.js +51 -25
- package/renderers/webgpu/WebGPUUniformsGroup.cjs.js +1 -0
- package/renderers/webgpu/WebGPUUniformsGroup.js +72 -32
- package/renderers/webgpu/constants.cjs.js +1 -0
- package/renderers/webgpu/constants.js +181 -190
- package/renderers/webgpu/nodes/ShaderLib.cjs.js +1 -0
- package/renderers/webgpu/nodes/ShaderLib.js +2 -2
- package/renderers/webgpu/nodes/WebGPUNodeBuilder.cjs.js +1 -0
- package/renderers/webgpu/nodes/WebGPUNodeBuilder.js +124 -53
- package/renderers/webgpu/nodes/WebGPUNodeUniform.cjs.js +1 -0
- package/renderers/webgpu/nodes/WebGPUNodeUniform.js +31 -17
- package/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.cjs.js +1 -0
- package/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.js +9 -8
- package/renderers/webgpu/nodes/WebGPUNodes.cjs.js +1 -0
- package/renderers/webgpu/nodes/WebGPUNodes.js +45 -7
- package/shaders/ACESFilmicToneMappingShader.cjs.js +1 -0
- package/shaders/ACESFilmicToneMappingShader.js +24 -44
- package/shaders/AfterimageShader.cjs.js +1 -0
- package/shaders/AfterimageShader.js +18 -28
- package/shaders/BasicShader.cjs.js +1 -0
- package/shaders/BasicShader.js +7 -9
- package/shaders/BleachBypassShader.cjs.js +1 -0
- package/shaders/BleachBypassShader.js +15 -31
- package/shaders/BlendShader.cjs.js +1 -0
- package/shaders/BlendShader.js +19 -26
- package/shaders/BokehShader.cjs.js +1 -0
- package/shaders/BokehShader.js +36 -98
- package/shaders/BokehShader2.cjs.js +1 -0
- package/shaders/BokehShader2.js +90 -261
- package/shaders/BrightnessContrastShader.cjs.js +1 -0
- package/shaders/BrightnessContrastShader.js +19 -28
- package/shaders/ColorCorrectionShader.cjs.js +1 -0
- package/shaders/ColorCorrectionShader.js +22 -26
- package/shaders/ColorifyShader.cjs.js +1 -0
- package/shaders/ColorifyShader.js +16 -24
- package/shaders/ConvolutionShader.cjs.js +1 -0
- package/shaders/ConvolutionShader.js +36 -40
- package/shaders/CopyShader.cjs.js +1 -0
- package/shaders/CopyShader.js +13 -21
- package/shaders/DOFMipMapShader.cjs.js +1 -0
- package/shaders/DOFMipMapShader.js +21 -28
- package/shaders/DepthLimitedBlurShader.cjs.js +1 -0
- package/shaders/DepthLimitedBlurShader.js +40 -85
- package/shaders/DigitalGlitch.cjs.js +1 -0
- package/shaders/DigitalGlitch.js +46 -74
- package/shaders/DotScreenShader.cjs.js +1 -0
- package/shaders/DotScreenShader.js +27 -35
- package/shaders/FXAAShader.cjs.js +1 -0
- package/shaders/FXAAShader.js +19 -1094
- package/shaders/FilmShader.cjs.js +1 -0
- package/shaders/FilmShader.js +52 -38
- package/shaders/FocusShader.cjs.js +1 -0
- package/shaders/FocusShader.js +24 -51
- package/shaders/FreiChenShader.cjs.js +1 -0
- package/shaders/FreiChenShader.js +24 -57
- package/shaders/FresnelShader.cjs.js +1 -0
- package/shaders/FresnelShader.js +22 -43
- package/shaders/GammaCorrectionShader.cjs.js +1 -0
- package/shaders/GammaCorrectionShader.js +11 -19
- package/shaders/GodRaysShader.cjs.js +1 -0
- package/shaders/GodRaysShader.js +94 -103
- package/shaders/HalftoneShader.cjs.js +1 -0
- package/shaders/HalftoneShader.js +65 -208
- package/shaders/HorizontalBlurShader.cjs.js +1 -0
- package/shaders/HorizontalBlurShader.js +23 -7
- package/shaders/HorizontalTiltShiftShader.cjs.js +1 -0
- package/shaders/HorizontalTiltShiftShader.js +21 -33
- package/shaders/HueSaturationShader.cjs.js +1 -0
- package/shaders/HueSaturationShader.js +21 -37
- package/shaders/KaleidoShader.cjs.js +1 -0
- package/shaders/KaleidoShader.js +22 -30
- package/shaders/LuminosityHighPassShader.cjs.js +1 -0
- package/shaders/LuminosityHighPassShader.js +27 -33
- package/shaders/LuminosityShader.cjs.js +1 -0
- package/shaders/LuminosityShader.js +11 -21
- package/shaders/MirrorShader.cjs.js +1 -0
- package/shaders/MirrorShader.js +16 -31
- package/shaders/NormalMapShader.cjs.js +1 -0
- package/shaders/NormalMapShader.js +23 -27
- package/shaders/ParallaxShader.cjs.js +1 -0
- package/shaders/ParallaxShader.js +48 -107
- package/shaders/PixelShader.cjs.js +1 -0
- package/shaders/PixelShader.js +16 -24
- package/shaders/RGBShiftShader.cjs.js +1 -0
- package/shaders/RGBShiftShader.js +22 -26
- package/shaders/SAOShader.cjs.js +1 -0
- package/shaders/SAOShader.js +48 -132
- package/shaders/SMAAShader.cjs.js +1 -0
- package/shaders/SMAAShader.js +135 -256
- package/shaders/SSAOShader.cjs.js +1 -0
- package/shaders/SSAOShader.js +81 -153
- package/shaders/SSRShader.cjs.js +1 -0
- package/shaders/SSRShader.js +87 -32
- package/shaders/SepiaShader.cjs.js +1 -0
- package/shaders/SepiaShader.js +15 -25
- package/shaders/SobelOperatorShader.cjs.js +1 -0
- package/shaders/SobelOperatorShader.js +29 -40
- package/shaders/SubsurfaceScatteringShader.cjs.js +1 -0
- package/shaders/SubsurfaceScatteringShader.js +39 -53
- package/shaders/TechnicolorShader.cjs.js +1 -0
- package/shaders/TechnicolorShader.js +13 -20
- package/shaders/ToneMapShader.cjs.js +1 -0
- package/shaders/ToneMapShader.js +28 -44
- package/shaders/ToonShader.cjs.js +1 -0
- package/shaders/ToonShader.js +96 -172
- package/shaders/TriangleBlurShader.cjs.js +1 -0
- package/shaders/TriangleBlurShader.js +23 -32
- package/shaders/UnpackDepthRGBAShader.cjs.js +1 -0
- package/shaders/UnpackDepthRGBAShader.js +14 -22
- package/shaders/VerticalBlurShader.cjs.js +1 -0
- package/shaders/VerticalBlurShader.js +23 -7
- package/shaders/VerticalTiltShiftShader.cjs.js +1 -0
- package/shaders/VerticalTiltShiftShader.js +21 -33
- package/shaders/VignetteShader.cjs.js +1 -0
- package/shaders/VignetteShader.js +28 -24
- package/shaders/VolumeShader.cjs.js +1 -0
- package/shaders/VolumeShader.js +77 -174
- package/shaders/WaterRefractionShader.cjs.js +1 -0
- package/shaders/WaterRefractionShader.js +6 -38
- package/shaders/types.cjs.js +1 -0
- package/shaders/types.js +1 -1
- package/textures/FlakesTexture.cjs.js +1 -0
- package/textures/FlakesTexture.js +10 -8
- package/types/helpers.cjs.js +1 -0
- package/types/helpers.js +2 -3
- package/types/shared.cjs.js +1 -0
- package/types/shared.js +1 -0
- package/types/utils.cjs.js +1 -0
- package/types/utils.js +1 -0
- package/utils/BufferGeometryUtils.cjs.js +1 -0
- package/utils/BufferGeometryUtils.js +325 -251
- package/utils/GeometryCompressionUtils.cjs.js +1 -0
- package/utils/GeometryCompressionUtils.js +239 -241
- package/utils/GeometryUtils.cjs.js +1 -0
- package/utils/GeometryUtils.js +94 -41
- package/utils/LDrawUtils.cjs.js +1 -0
- package/utils/LDrawUtils.d.ts +5 -0
- package/utils/LDrawUtils.js +144 -0
- package/utils/RoughnessMipmapper.cjs.js +1 -0
- package/utils/RoughnessMipmapper.js +82 -38
- package/utils/SceneUtils.cjs.js +1 -0
- package/utils/SceneUtils.js +20 -15
- package/utils/ShadowMapViewer.cjs.js +1 -0
- package/utils/ShadowMapViewer.js +95 -49
- package/utils/SkeletonUtils.cjs.js +1 -0
- package/utils/SkeletonUtils.js +165 -74
- package/utils/UVsDebug.cjs.js +1 -0
- package/utils/UVsDebug.js +62 -32
- package/utils/WorkerPool.cjs.js +1 -0
- package/utils/WorkerPool.js +33 -13
- package/webxr/ARButton.cjs.js +1 -0
- package/webxr/ARButton.js +98 -72
- package/webxr/OculusHandModel.cjs.js +1 -0
- package/webxr/OculusHandModel.js +37 -18
- package/webxr/OculusHandPointerModel.cjs.js +1 -0
- package/webxr/OculusHandPointerModel.js +80 -58
- package/webxr/Text2D.cjs.js +1 -0
- package/webxr/Text2D.js +19 -37
- package/webxr/VRButton.cjs.js +1 -0
- package/webxr/VRButton.js +90 -59
- package/webxr/XRControllerModelFactory.cjs.js +1 -0
- package/webxr/XRControllerModelFactory.js +116 -58
- package/webxr/XREstimatedLight.cjs.js +1 -0
- package/webxr/XREstimatedLight.js +66 -39
- package/webxr/XRHandMeshModel.cjs.js +1 -0
- package/webxr/XRHandMeshModel.js +29 -40
- package/webxr/XRHandModelFactory.cjs.js +1 -0
- package/webxr/XRHandModelFactory.js +31 -28
- package/webxr/XRHandPrimitiveModel.cjs.js +1 -0
- package/webxr/XRHandPrimitiveModel.js +27 -41
- package/animation/AnimationClipCreator.mjs +0 -57
- package/animation/CCDIKSolver.mjs +0 -223
- package/animation/MMDAnimationHelper.mjs +0 -514
- package/animation/MMDPhysics.mjs +0 -769
- package/cameras/CinematicCamera.mjs +0 -129
- package/controls/ArcballControls.mjs +0 -1737
- package/controls/DeviceOrientationControls.mjs +0 -74
- package/controls/DragControls.mjs +0 -172
- package/controls/FirstPersonControls.mjs +0 -220
- package/controls/FlyControls.mjs +0 -239
- package/controls/OrbitControls.mjs +0 -731
- package/controls/PointerLockControls.mjs +0 -88
- package/controls/TrackballControls.mjs +0 -481
- package/controls/TransformControls.mjs +0 -1068
- package/controls/experimental/CameraControls.mjs +0 -673
- package/csm/CSM.mjs +0 -244
- package/csm/CSMFrustum.mjs +0 -75
- package/csm/CSMHelper.mjs +0 -114
- package/csm/CSMShader.mjs +0 -251
- package/curves/CurveExtras.mjs +0 -224
- package/curves/NURBSCurve.mjs +0 -35
- package/curves/NURBSSurface.mjs +0 -28
- package/curves/NURBSUtils.mjs +0 -226
- package/deprecated/Geometry.mjs +0 -966
- package/effects/AnaglyphEffect.mjs +0 -120
- package/effects/AsciiEffect.mjs +0 -173
- package/effects/OutlineEffect.mjs +0 -295
- package/effects/ParallaxBarrierEffect.mjs +0 -64
- package/effects/PeppersGhostEffect.mjs +0 -85
- package/effects/StereoEffect.mjs +0 -32
- package/environments/RoomEnvironment.mjs +0 -78
- package/exporters/ColladaExporter.mjs +0 -299
- package/exporters/DRACOExporter.mjs +0 -132
- package/exporters/GLTFExporter.mjs +0 -1381
- package/exporters/MMDExporter.mjs +0 -102
- package/exporters/OBJExporter.mjs +0 -166
- package/exporters/PLYExporter.mjs +0 -278
- package/exporters/STLExporter.mjs +0 -129
- package/exporters/USDZExporter.mjs +0 -328
- package/geometries/BoxLineGeometry.mjs +0 -45
- package/geometries/ConvexGeometry.mjs +0 -29
- package/geometries/DecalGeometry.mjs +0 -184
- package/geometries/LightningStrike.mjs +0 -547
- package/geometries/ParametricGeometries.mjs +0 -129
- package/geometries/ParametricGeometry.mjs +0 -63
- package/geometries/RoundedBoxGeometry.mjs +0 -91
- package/geometries/TeapotGeometry.mjs +0 -1557
- package/geometries/TextGeometry.mjs +0 -23
- package/helpers/LightProbeHelper.mjs +0 -72
- package/helpers/PositionalAudioHelper.mjs +0 -68
- package/helpers/RectAreaLightHelper.mjs +0 -44
- package/helpers/VertexNormalsHelper.mjs +0 -54
- package/helpers/VertexTangentsHelper.mjs +0 -45
- package/index.mjs +0 -969
- package/interactive/SelectionBox.mjs +0 -137
- package/interactive/SelectionHelper.mjs +0 -54
- package/libs/MeshoptDecoder.mjs +0 -210
- package/libs/MotionControllers.mjs +0 -261
- package/lights/LightProbeGenerator.mjs +0 -145
- package/lights/RectAreaLightUniformsLib.mjs +0 -32842
- package/lines/Line2.mjs +0 -13
- package/lines/LineGeometry.mjs +0 -44
- package/lines/LineMaterial.mjs +0 -539
- package/lines/LineSegments2.mjs +0 -202
- package/lines/LineSegmentsGeometry.mjs +0 -124
- package/lines/Wireframe.mjs +0 -31
- package/lines/WireframeGeometry2.mjs +0 -13
- package/loaders/3DMLoader.mjs +0 -802
- package/loaders/3MFLoader.mjs +0 -837
- package/loaders/AMFLoader.mjs +0 -284
- package/loaders/AssimpLoader.mjs +0 -1396
- package/loaders/BVHLoader.mjs +0 -207
- package/loaders/BasisTextureLoader.mjs +0 -474
- package/loaders/ColladaLoader.mjs +0 -2403
- package/loaders/DDSLoader.mjs +0 -148
- package/loaders/DRACOLoader.mjs +0 -340
- package/loaders/EXRLoader.mjs +0 -1351
- package/loaders/FBXLoader.mjs +0 -2362
- package/loaders/FontLoader.mjs +0 -111
- package/loaders/GCodeLoader.mjs +0 -141
- package/loaders/GLTFLoader.mjs +0 -2316
- package/loaders/HDRCubeTextureLoader.mjs +0 -77
- package/loaders/KMZLoader.mjs +0 -75
- package/loaders/KTX2Loader.mjs +0 -427
- package/loaders/KTXLoader.mjs +0 -87
- package/loaders/LDrawLoader.mjs +0 -1409
- package/loaders/LUT3dlLoader.mjs +0 -100
- package/loaders/LUTCubeLoader.mjs +0 -104
- package/loaders/LWOLoader.mjs +0 -625
- package/loaders/LottieLoader.mjs +0 -47
- package/loaders/MD2Loader.mjs +0 -359
- package/loaders/MDDLoader.mjs +0 -58
- package/loaders/MMDLoader.mjs +0 -998
- package/loaders/MTLLoader.mjs +0 -280
- package/loaders/NRRDLoader.mjs +0 -401
- package/loaders/NodeMaterialLoader.mjs +0 -146
- package/loaders/OBJLoader.mjs +0 -487
- package/loaders/PCDLoader.mjs +0 -248
- package/loaders/PDBLoader.mjs +0 -246
- package/loaders/PLYLoader.mjs +0 -317
- package/loaders/PRWMLoader.mjs +0 -160
- package/loaders/PVRLoader.mjs +0 -131
- package/loaders/RGBELoader.mjs +0 -244
- package/loaders/RGBMLoader.mjs +0 -998
- package/loaders/STLLoader.mjs +0 -190
- package/loaders/SVGLoader.mjs +0 -1709
- package/loaders/TDSLoader.mjs +0 -480
- package/loaders/TGALoader.mjs +0 -285
- package/loaders/TTFLoader.mjs +0 -131
- package/loaders/TiltLoader.mjs +0 -373
- package/loaders/VOXLoader.mjs +0 -431
- package/loaders/VRMLLoader.mjs +0 -2093
- package/loaders/VRMLoader.mjs +0 -38
- package/loaders/VTKLoader.mjs +0 -646
- package/loaders/XLoader.mjs +0 -1258
- package/loaders/XYZLoader.mjs +0 -60
- package/loaders/lwo/IFFParser.mjs +0 -697
- package/loaders/lwo/LWO2Parser.mjs +0 -327
- package/loaders/lwo/LWO3Parser.mjs +0 -298
- package/math/Capsule.mjs +0 -100
- package/math/ColorConverter.mjs +0 -51
- package/math/ConvexHull.mjs +0 -574
- package/math/ImprovedNoise.mjs +0 -302
- package/math/Lut.mjs +0 -135
- package/math/MeshSurfaceSampler.mjs +0 -107
- package/math/OBB.mjs +0 -235
- package/math/Octree.mjs +0 -278
- package/math/SimplexNoise.mjs +0 -425
- package/misc/ConvexObjectBreaker.mjs +0 -292
- package/misc/GPUComputationRenderer.mjs +0 -171
- package/misc/Gyroscope.mjs +0 -35
- package/misc/MD2Character.mjs +0 -162
- package/misc/MD2CharacterComplex.mjs +0 -328
- package/misc/MorphAnimMesh.mjs +0 -40
- package/misc/MorphBlendMesh.mjs +0 -179
- package/misc/ProgressiveLightmap.mjs +0 -166
- package/misc/RollerCoaster.mjs +0 -346
- package/misc/TubePainter.mjs +0 -123
- package/misc/Volume.mjs +0 -244
- package/misc/VolumeSlice.mjs +0 -106
- package/misc/WebGL.mjs +0 -74
- package/modifiers/CurveModifier.mjs +0 -182
- package/modifiers/EdgeSplitModifier.mjs +0 -162
- package/modifiers/SimplifyModifier.mjs +0 -282
- package/modifiers/TessellateModifier.mjs +0 -206
- package/nodes/Nodes.mjs +0 -400
- package/nodes/ShaderNode.mjs +0 -408
- package/nodes/accessors/BufferNode.mjs +0 -15
- package/nodes/accessors/CameraNode.mjs +0 -44
- package/nodes/accessors/CubeTextureNode.mjs +0 -42
- package/nodes/accessors/MaterialNode.mjs +0 -71
- package/nodes/accessors/MaterialReferenceNode.mjs +0 -14
- package/nodes/accessors/ModelNode.mjs +0 -9
- package/nodes/accessors/ModelViewProjectionNode.mjs +0 -24
- package/nodes/accessors/NormalNode.mjs +0 -62
- package/nodes/accessors/Object3DNode.mjs +0 -76
- package/nodes/accessors/PointUVNode.mjs +0 -13
- package/nodes/accessors/PositionNode.mjs +0 -65
- package/nodes/accessors/ReferenceNode.mjs +0 -37
- package/nodes/accessors/ReflectNode.mjs +0 -43
- package/nodes/accessors/SkinningNode.mjs +0 -58
- package/nodes/accessors/TextureNode.mjs +0 -54
- package/nodes/accessors/UVNode.mjs +0 -23
- package/nodes/core/ArrayUniformNode.mjs +0 -14
- package/nodes/core/AttributeNode.mjs +0 -30
- package/nodes/core/BypassNode.mjs +0 -22
- package/nodes/core/CodeNode.mjs +0 -28
- package/nodes/core/ConstNode.mjs +0 -14
- package/nodes/core/ContextNode.mjs +0 -22
- package/nodes/core/ExpressionNode.mjs +0 -19
- package/nodes/core/FunctionCallNode.mjs +0 -37
- package/nodes/core/FunctionNode.mjs +0 -56
- package/nodes/core/InputNode.mjs +0 -38
- package/nodes/core/Node.mjs +0 -139
- package/nodes/core/NodeAttribute.mjs +0 -10
- package/nodes/core/NodeBuilder.mjs +0 -395
- package/nodes/core/NodeCode.mjs +0 -11
- package/nodes/core/NodeFrame.mjs +0 -35
- package/nodes/core/NodeFunctionInput.mjs +0 -13
- package/nodes/core/NodeKeywords.mjs +0 -44
- package/nodes/core/NodeUniform.mjs +0 -18
- package/nodes/core/NodeUtils.mjs +0 -57
- package/nodes/core/NodeVar.mjs +0 -10
- package/nodes/core/NodeVary.mjs +0 -10
- package/nodes/core/PropertyNode.mjs +0 -21
- package/nodes/core/TempNode.mjs +0 -25
- package/nodes/core/UniformNode.mjs +0 -23
- package/nodes/core/VarNode.mjs +0 -31
- package/nodes/core/VaryNode.mjs +0 -30
- package/nodes/core/constants.mjs +0 -24
- package/nodes/display/ColorSpaceNode.mjs +0 -63
- package/nodes/display/NormalMapNode.mjs +0 -54
- package/nodes/fog/FogNode.mjs +0 -15
- package/nodes/fog/FogRangeNode.mjs +0 -17
- package/nodes/functions/BSDFs.mjs +0 -64
- package/nodes/lights/LightContextNode.mjs +0 -35
- package/nodes/lights/LightNode.mjs +0 -58
- package/nodes/lights/LightsNode.mjs +0 -59
- package/nodes/loaders/NodeLoader.mjs +0 -66
- package/nodes/loaders/NodeMaterialLoader.mjs +0 -24
- package/nodes/loaders/NodeObjectLoader.mjs +0 -40
- package/nodes/materials/LineBasicNodeMaterial.mjs +0 -27
- package/nodes/materials/Materials.mjs +0 -28
- package/nodes/materials/MeshBasicNodeMaterial.mjs +0 -28
- package/nodes/materials/MeshStandardNodeMaterial.mjs +0 -41
- package/nodes/materials/NodeMaterial.mjs +0 -64
- package/nodes/materials/PointsNodeMaterial.mjs +0 -30
- package/nodes/math/CondNode.mjs +0 -38
- package/nodes/math/MathNode.mjs +0 -163
- package/nodes/math/OperatorNode.mjs +0 -103
- package/nodes/procedural/CheckerNode.mjs +0 -21
- package/nodes/utils/ArrayElementNode.mjs +0 -19
- package/nodes/utils/ConvertNode.mjs +0 -25
- package/nodes/utils/JoinNode.mjs +0 -26
- package/nodes/utils/MatcapUVNode.mjs +0 -16
- package/nodes/utils/OscNode.mjs +0 -50
- package/nodes/utils/SplitNode.mjs +0 -45
- package/nodes/utils/SpriteSheetUVNode.mjs +0 -40
- package/nodes/utils/TimerNode.mjs +0 -44
- package/objects/GroundProjectedEnv.mjs +0 -130
- package/objects/Lensflare.mjs +0 -262
- package/objects/LightningStorm.mjs +0 -110
- package/objects/MarchingCubes.mjs +0 -457
- package/objects/Reflector.mjs +0 -166
- package/objects/ReflectorForSSRPass.mjs +0 -247
- package/objects/ReflectorRTT.mjs +0 -10
- package/objects/Refractor.mjs +0 -178
- package/objects/ShadowMesh.mjs +0 -41
- package/objects/Sky.mjs +0 -124
- package/objects/Water.mjs +0 -235
- package/objects/Water2.mjs +0 -252
- package/offscreen/jank.mjs +0 -27
- package/offscreen/offscreen.mjs +0 -5
- package/offscreen/scene.mjs +0 -52
- package/physics/AmmoPhysics.mjs +0 -165
- package/postprocessing/AdaptiveToneMappingPass.mjs +0 -221
- package/postprocessing/AfterimagePass.mjs +0 -55
- package/postprocessing/BloomPass.mjs +0 -90
- package/postprocessing/BokehPass.mjs +0 -76
- package/postprocessing/ClearPass.mjs +0 -27
- package/postprocessing/CubeTexturePass.mjs +0 -49
- package/postprocessing/DotScreenPass.mjs +0 -40
- package/postprocessing/EffectComposer.mjs +0 -139
- package/postprocessing/FilmPass.mjs +0 -42
- package/postprocessing/GlitchPass.mjs +0 -75
- package/postprocessing/HalftonePass.mjs +0 -44
- package/postprocessing/LUTPass.mjs +0 -136
- package/postprocessing/MaskPass.mjs +0 -60
- package/postprocessing/OutlinePass.mjs +0 -438
- package/postprocessing/Pass.mjs +0 -37
- package/postprocessing/RenderPass.mjs +0 -48
- package/postprocessing/RenderPixelatedPass.mjs +0 -199
- package/postprocessing/SAOPass.mjs +0 -282
- package/postprocessing/SMAAPass.mjs +0 -112
- package/postprocessing/SSAARenderPass.mjs +0 -170
- package/postprocessing/SSAOPass.mjs +0 -265
- package/postprocessing/SSRPass.mjs +0 -432
- package/postprocessing/SavePass.mjs +0 -37
- package/postprocessing/ShaderPass.mjs +0 -39
- package/postprocessing/TAARenderPass.mjs +0 -88
- package/postprocessing/TexturePass.mjs +0 -39
- package/postprocessing/UnrealBloomPass.mjs +0 -220
- package/renderers/CSS2DRenderer.mjs +0 -112
- package/renderers/CSS3DRenderer.mjs +0 -133
- package/renderers/Projector.mjs +0 -511
- package/renderers/SVGRenderer.mjs +0 -306
- package/renderers/nodes/accessors/CameraNode.mjs +0 -63
- package/renderers/nodes/accessors/ModelNode.mjs +0 -61
- package/renderers/nodes/accessors/ModelViewProjectionNode.mjs +0 -21
- package/renderers/nodes/accessors/NormalNode.mjs +0 -61
- package/renderers/nodes/accessors/PositionNode.mjs +0 -30
- package/renderers/nodes/accessors/UVNode.mjs +0 -13
- package/renderers/nodes/core/AttributeNode.mjs +0 -35
- package/renderers/nodes/core/InputNode.mjs +0 -31
- package/renderers/nodes/core/Node.mjs +0 -34
- package/renderers/nodes/core/NodeAttribute.mjs +0 -10
- package/renderers/nodes/core/NodeBuilder.mjs +0 -243
- package/renderers/nodes/core/NodeFrame.mjs +0 -35
- package/renderers/nodes/core/NodeSlot.mjs +0 -10
- package/renderers/nodes/core/NodeUniform.mjs +0 -18
- package/renderers/nodes/core/NodeVary.mjs +0 -11
- package/renderers/nodes/core/VaryNode.mjs +0 -22
- package/renderers/nodes/core/constants.mjs +0 -22
- package/renderers/nodes/inputs/ColorNode.mjs +0 -11
- package/renderers/nodes/inputs/FloatNode.mjs +0 -11
- package/renderers/nodes/inputs/Matrix3Node.mjs +0 -12
- package/renderers/nodes/inputs/Matrix4Node.mjs +0 -12
- package/renderers/nodes/inputs/TextureNode.mjs +0 -20
- package/renderers/nodes/inputs/Vector2Node.mjs +0 -11
- package/renderers/nodes/inputs/Vector3Node.mjs +0 -12
- package/renderers/nodes/inputs/Vector4Node.mjs +0 -12
- package/renderers/nodes/math/MathNode.mjs +0 -55
- package/renderers/nodes/math/OperatorNode.mjs +0 -42
- package/renderers/nodes/utils/SwitchNode.mjs +0 -20
- package/renderers/nodes/utils/TimerNode.mjs +0 -14
- package/renderers/webgpu/WebGPU.mjs +0 -24
- package/renderers/webgpu/WebGPUAttributes.mjs +0 -69
- package/renderers/webgpu/WebGPUBackground.mjs +0 -61
- package/renderers/webgpu/WebGPUBinding.mjs +0 -14
- package/renderers/webgpu/WebGPUBindings.mjs +0 -155
- package/renderers/webgpu/WebGPUComputePipelines.mjs +0 -44
- package/renderers/webgpu/WebGPUGeometries.mjs +0 -41
- package/renderers/webgpu/WebGPUInfo.mjs +0 -46
- package/renderers/webgpu/WebGPUObjects.mjs +0 -25
- package/renderers/webgpu/WebGPUProperties.mjs +0 -22
- package/renderers/webgpu/WebGPURenderLists.mjs +0 -119
- package/renderers/webgpu/WebGPURenderPipelines.mjs +0 -545
- package/renderers/webgpu/WebGPURenderer.mjs +0 -574
- package/renderers/webgpu/WebGPUSampledTexture.mjs +0 -40
- package/renderers/webgpu/WebGPUSampler.mjs +0 -15
- package/renderers/webgpu/WebGPUStorageBuffer.mjs +0 -15
- package/renderers/webgpu/WebGPUTextureRenderer.mjs +0 -23
- package/renderers/webgpu/WebGPUTextureUtils.mjs +0 -98
- package/renderers/webgpu/WebGPUTextures.mjs +0 -484
- package/renderers/webgpu/WebGPUUniform.mjs +0 -81
- package/renderers/webgpu/WebGPUUniformsGroup.mjs +0 -176
- package/renderers/webgpu/constants.mjs +0 -230
- package/renderers/webgpu/nodes/ShaderLib.mjs +0 -42
- package/renderers/webgpu/nodes/WebGPUNodeBuilder.mjs +0 -165
- package/renderers/webgpu/nodes/WebGPUNodeUniform.mjs +0 -73
- package/renderers/webgpu/nodes/WebGPUNodeUniformsGroup.mjs +0 -15
- package/renderers/webgpu/nodes/WebGPUNodes.mjs +0 -40
- package/shaders/ACESFilmicToneMappingShader.mjs +0 -48
- package/shaders/AfterimageShader.mjs +0 -32
- package/shaders/BasicShader.mjs +0 -12
- package/shaders/BleachBypassShader.mjs +0 -35
- package/shaders/BlendShader.mjs +0 -30
- package/shaders/BokehShader.mjs +0 -106
- package/shaders/BokehShader2.mjs +0 -269
- package/shaders/BrightnessContrastShader.mjs +0 -32
- package/shaders/ColorCorrectionShader.mjs +0 -30
- package/shaders/ColorifyShader.mjs +0 -28
- package/shaders/ConvolutionShader.mjs +0 -55
- package/shaders/CopyShader.mjs +0 -25
- package/shaders/DOFMipMapShader.mjs +0 -32
- package/shaders/DepthLimitedBlurShader.mjs +0 -114
- package/shaders/DigitalGlitch.mjs +0 -78
- package/shaders/DotScreenShader.mjs +0 -39
- package/shaders/FXAAShader.mjs +0 -1098
- package/shaders/FilmShader.mjs +0 -42
- package/shaders/FocusShader.mjs +0 -55
- package/shaders/FreiChenShader.mjs +0 -61
- package/shaders/FresnelShader.mjs +0 -47
- package/shaders/GammaCorrectionShader.mjs +0 -23
- package/shaders/GodRaysShader.mjs +0 -146
- package/shaders/HalftoneShader.mjs +0 -212
- package/shaders/HorizontalBlurShader.mjs +0 -43
- package/shaders/HorizontalTiltShiftShader.mjs +0 -37
- package/shaders/HueSaturationShader.mjs +0 -41
- package/shaders/KaleidoShader.mjs +0 -34
- package/shaders/LuminosityHighPassShader.mjs +0 -37
- package/shaders/LuminosityShader.mjs +0 -25
- package/shaders/MirrorShader.mjs +0 -35
- package/shaders/NormalMapShader.mjs +0 -31
- package/shaders/ParallaxShader.mjs +0 -113
- package/shaders/PixelShader.mjs +0 -28
- package/shaders/RGBShiftShader.mjs +0 -30
- package/shaders/SAOShader.mjs +0 -144
- package/shaders/SMAAShader.mjs +0 -272
- package/shaders/SSAOShader.mjs +0 -172
- package/shaders/SSRShader.mjs +0 -324
- package/shaders/SepiaShader.mjs +0 -29
- package/shaders/SobelOperatorShader.mjs +0 -44
- package/shaders/SubsurfaceScatteringShader.mjs +0 -59
- package/shaders/TechnicolorShader.mjs +0 -24
- package/shaders/ToneMapShader.mjs +0 -48
- package/shaders/ToonShader.mjs +0 -188
- package/shaders/TriangleBlurShader.mjs +0 -36
- package/shaders/UnpackDepthRGBAShader.mjs +0 -26
- package/shaders/VerticalBlurShader.mjs +0 -44
- package/shaders/VerticalTiltShiftShader.mjs +0 -37
- package/shaders/VignetteShader.mjs +0 -28
- package/shaders/VolumeShader.mjs +0 -178
- package/shaders/WaterRefractionShader.mjs +0 -57
- package/textures/FlakesTexture.mjs +0 -30
- package/types/helpers.mjs +0 -4
- package/utils/BufferGeometryUtils.mjs +0 -570
- package/utils/GeometryCompressionUtils.mjs +0 -547
- package/utils/GeometryUtils.mjs +0 -108
- package/utils/RoughnessMipmapper.mjs +0 -213
- package/utils/SceneUtils.mjs +0 -36
- package/utils/ShadowMapViewer.mjs +0 -114
- package/utils/SkeletonUtils.mjs +0 -292
- package/utils/UVsDebug.mjs +0 -85
- package/utils/WorkerPool.mjs +0 -62
- package/webxr/ARButton.mjs +0 -119
- package/webxr/OculusHandModel.mjs +0 -71
- package/webxr/OculusHandPointerModel.mjs +0 -207
- package/webxr/Text2D.mjs +0 -31
- package/webxr/VRButton.mjs +0 -105
- package/webxr/XRControllerModelFactory.mjs +0 -146
- package/webxr/XREstimatedLight.mjs +0 -126
- package/webxr/XRHandMeshModel.mjs +0 -73
- package/webxr/XRHandModelFactory.mjs +0 -61
- package/webxr/XRHandPrimitiveModel.mjs +0 -68
package/loaders/EXRLoader.js
CHANGED
|
@@ -1,19 +1,90 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { DataTextureLoader, HalfFloatType, FloatType, RGBAFormat, LinearEncoding, RedFormat, LinearFilter, DataUtils } from 'three';
|
|
2
|
+
import { unzlibSync } from 'fflate';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* OpenEXR loader currently supports uncompressed, ZIP(S), RLE, PIZ and DWA/B compression.
|
|
6
|
+
* Supports reading as UnsignedByte, HalfFloat and Float type data texture.
|
|
7
|
+
*
|
|
8
|
+
* Referred to the original Industrial Light & Magic OpenEXR implementation and the TinyEXR / Syoyo Fujita
|
|
9
|
+
* implementation, so I have preserved their copyright notices.
|
|
10
|
+
*/
|
|
11
|
+
// /*
|
|
12
|
+
// Copyright (c) 2014 - 2017, Syoyo Fujita
|
|
13
|
+
// All rights reserved.
|
|
14
|
+
// Redistribution and use in source and binary forms, with or without
|
|
15
|
+
// modification, are permitted provided that the following conditions are met:
|
|
16
|
+
// * Redistributions of source code must retain the above copyright
|
|
17
|
+
// notice, this list of conditions and the following disclaimer.
|
|
18
|
+
// * Redistributions in binary form must reproduce the above copyright
|
|
19
|
+
// notice, this list of conditions and the following disclaimer in the
|
|
20
|
+
// documentation and/or other materials provided with the distribution.
|
|
21
|
+
// * Neither the name of the Syoyo Fujita nor the
|
|
22
|
+
// names of its contributors may be used to endorse or promote products
|
|
23
|
+
// derived from this software without specific prior written permission.
|
|
24
|
+
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
25
|
+
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
26
|
+
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
27
|
+
// DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
|
|
28
|
+
// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
29
|
+
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
30
|
+
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
31
|
+
// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
32
|
+
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
33
|
+
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
34
|
+
// */
|
|
35
|
+
// // TinyEXR contains some OpenEXR code, which is licensed under ------------
|
|
36
|
+
// ///////////////////////////////////////////////////////////////////////////
|
|
37
|
+
// //
|
|
38
|
+
// // Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
|
|
39
|
+
// // Digital Ltd. LLC
|
|
40
|
+
// //
|
|
41
|
+
// // All rights reserved.
|
|
42
|
+
// //
|
|
43
|
+
// // Redistribution and use in source and binary forms, with or without
|
|
44
|
+
// // modification, are permitted provided that the following conditions are
|
|
45
|
+
// // met:
|
|
46
|
+
// // * Redistributions of source code must retain the above copyright
|
|
47
|
+
// // notice, this list of conditions and the following disclaimer.
|
|
48
|
+
// // * Redistributions in binary form must reproduce the above
|
|
49
|
+
// // copyright notice, this list of conditions and the following disclaimer
|
|
50
|
+
// // in the documentation and/or other materials provided with the
|
|
51
|
+
// // distribution.
|
|
52
|
+
// // * Neither the name of Industrial Light & Magic nor the names of
|
|
53
|
+
// // its contributors may be used to endorse or promote products derived
|
|
54
|
+
// // from this software without specific prior written permission.
|
|
55
|
+
// //
|
|
56
|
+
// // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
57
|
+
// // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
58
|
+
// // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
59
|
+
// // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
60
|
+
// // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
61
|
+
// // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
62
|
+
// // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
63
|
+
// // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
64
|
+
// // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
65
|
+
// // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
66
|
+
// // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
67
|
+
// //
|
|
68
|
+
// ///////////////////////////////////////////////////////////////////////////
|
|
69
|
+
// // End of OpenEXR license -------------------------------------------------
|
|
70
|
+
|
|
71
|
+
class EXRLoader extends DataTextureLoader {
|
|
6
72
|
constructor(manager) {
|
|
7
73
|
super(manager);
|
|
8
|
-
this.type =
|
|
74
|
+
this.type = HalfFloatType;
|
|
9
75
|
}
|
|
76
|
+
|
|
10
77
|
parse(buffer) {
|
|
11
78
|
const USHORT_RANGE = 1 << 16;
|
|
12
79
|
const BITMAP_SIZE = USHORT_RANGE >> 3;
|
|
13
|
-
const HUF_ENCBITS = 16;
|
|
14
|
-
|
|
15
|
-
const
|
|
16
|
-
|
|
80
|
+
const HUF_ENCBITS = 16; // literal (value) bit length
|
|
81
|
+
|
|
82
|
+
const HUF_DECBITS = 14; // decoding bit size (>= 8)
|
|
83
|
+
|
|
84
|
+
const HUF_ENCSIZE = (1 << HUF_ENCBITS) + 1; // encoding table size
|
|
85
|
+
|
|
86
|
+
const HUF_DECSIZE = 1 << HUF_DECBITS; // decoding table size
|
|
87
|
+
|
|
17
88
|
const HUF_DECMASK = HUF_DECSIZE - 1;
|
|
18
89
|
const NBITS = 16;
|
|
19
90
|
const A_OFFSET = 1 << NBITS - 1;
|
|
@@ -32,18 +103,23 @@ class EXRLoader extends THREE.DataTextureLoader {
|
|
|
32
103
|
const LOSSY_DCT = 1;
|
|
33
104
|
const RLE = 2;
|
|
34
105
|
const logBase = Math.pow(2.7182818, 2.2);
|
|
106
|
+
|
|
35
107
|
function reverseLutFromBitmap(bitmap, lut) {
|
|
36
108
|
var k = 0;
|
|
109
|
+
|
|
37
110
|
for (var i = 0; i < USHORT_RANGE; ++i) {
|
|
38
111
|
if (i == 0 || bitmap[i >> 3] & 1 << (i & 7)) {
|
|
39
112
|
lut[k++] = i;
|
|
40
113
|
}
|
|
41
114
|
}
|
|
115
|
+
|
|
42
116
|
var n = k - 1;
|
|
43
|
-
|
|
44
|
-
|
|
117
|
+
|
|
118
|
+
while (k < USHORT_RANGE) lut[k++] = 0;
|
|
119
|
+
|
|
45
120
|
return n;
|
|
46
121
|
}
|
|
122
|
+
|
|
47
123
|
function hufClearDecTable(hdec) {
|
|
48
124
|
for (var i = 0; i < HUF_DECSIZE; i++) {
|
|
49
125
|
hdec[i] = {};
|
|
@@ -52,139 +128,185 @@ class EXRLoader extends THREE.DataTextureLoader {
|
|
|
52
128
|
hdec[i].p = null;
|
|
53
129
|
}
|
|
54
130
|
}
|
|
55
|
-
|
|
56
|
-
|
|
131
|
+
|
|
132
|
+
const getBitsReturn = {
|
|
133
|
+
l: 0,
|
|
134
|
+
c: 0,
|
|
135
|
+
lc: 0
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
function getBits(nBits, c, lc, uInt8Array, inOffset) {
|
|
57
139
|
while (lc < nBits) {
|
|
58
|
-
c = c << 8 | parseUint8Array(
|
|
140
|
+
c = c << 8 | parseUint8Array(uInt8Array, inOffset);
|
|
59
141
|
lc += 8;
|
|
60
142
|
}
|
|
143
|
+
|
|
61
144
|
lc -= nBits;
|
|
62
145
|
getBitsReturn.l = c >> lc & (1 << nBits) - 1;
|
|
63
146
|
getBitsReturn.c = c;
|
|
64
147
|
getBitsReturn.lc = lc;
|
|
65
148
|
}
|
|
149
|
+
|
|
66
150
|
const hufTableBuffer = new Array(59);
|
|
151
|
+
|
|
67
152
|
function hufCanonicalCodeTable(hcode) {
|
|
68
|
-
for (var i = 0; i <= 58; ++i)
|
|
69
|
-
|
|
70
|
-
for (var i = 0; i < HUF_ENCSIZE; ++i)
|
|
71
|
-
|
|
153
|
+
for (var i = 0; i <= 58; ++i) hufTableBuffer[i] = 0;
|
|
154
|
+
|
|
155
|
+
for (var i = 0; i < HUF_ENCSIZE; ++i) hufTableBuffer[hcode[i]] += 1;
|
|
156
|
+
|
|
72
157
|
var c = 0;
|
|
158
|
+
|
|
73
159
|
for (var i = 58; i > 0; --i) {
|
|
74
160
|
var nc = c + hufTableBuffer[i] >> 1;
|
|
75
161
|
hufTableBuffer[i] = c;
|
|
76
162
|
c = nc;
|
|
77
163
|
}
|
|
164
|
+
|
|
78
165
|
for (var i = 0; i < HUF_ENCSIZE; ++i) {
|
|
79
166
|
var l = hcode[i];
|
|
80
|
-
if (l > 0)
|
|
81
|
-
hcode[i] = l | hufTableBuffer[l]++ << 6;
|
|
167
|
+
if (l > 0) hcode[i] = l | hufTableBuffer[l]++ << 6;
|
|
82
168
|
}
|
|
83
169
|
}
|
|
84
|
-
|
|
170
|
+
|
|
171
|
+
function hufUnpackEncTable(uInt8Array, inDataView, inOffset, ni, im, iM, hcode) {
|
|
85
172
|
var p = inOffset;
|
|
86
173
|
var c = 0;
|
|
87
174
|
var lc = 0;
|
|
175
|
+
|
|
88
176
|
for (; im <= iM; im++) {
|
|
89
|
-
if (p.value - inOffset.value > ni)
|
|
90
|
-
|
|
91
|
-
getBits(6, c, lc, uInt8Array2, p);
|
|
177
|
+
if (p.value - inOffset.value > ni) return false;
|
|
178
|
+
getBits(6, c, lc, uInt8Array, p);
|
|
92
179
|
var l = getBitsReturn.l;
|
|
93
180
|
c = getBitsReturn.c;
|
|
94
181
|
lc = getBitsReturn.lc;
|
|
95
182
|
hcode[im] = l;
|
|
183
|
+
|
|
96
184
|
if (l == LONG_ZEROCODE_RUN) {
|
|
97
185
|
if (p.value - inOffset.value > ni) {
|
|
98
|
-
throw
|
|
186
|
+
throw 'Something wrong with hufUnpackEncTable';
|
|
99
187
|
}
|
|
100
|
-
|
|
188
|
+
|
|
189
|
+
getBits(8, c, lc, uInt8Array, p);
|
|
101
190
|
var zerun = getBitsReturn.l + SHORTEST_LONG_RUN;
|
|
102
191
|
c = getBitsReturn.c;
|
|
103
192
|
lc = getBitsReturn.lc;
|
|
193
|
+
|
|
104
194
|
if (im + zerun > iM + 1) {
|
|
105
|
-
throw
|
|
195
|
+
throw 'Something wrong with hufUnpackEncTable';
|
|
106
196
|
}
|
|
107
|
-
|
|
108
|
-
|
|
197
|
+
|
|
198
|
+
while (zerun--) hcode[im++] = 0;
|
|
199
|
+
|
|
109
200
|
im--;
|
|
110
201
|
} else if (l >= SHORT_ZEROCODE_RUN) {
|
|
111
202
|
var zerun = l - SHORT_ZEROCODE_RUN + 2;
|
|
203
|
+
|
|
112
204
|
if (im + zerun > iM + 1) {
|
|
113
|
-
throw
|
|
205
|
+
throw 'Something wrong with hufUnpackEncTable';
|
|
114
206
|
}
|
|
115
|
-
|
|
116
|
-
|
|
207
|
+
|
|
208
|
+
while (zerun--) hcode[im++] = 0;
|
|
209
|
+
|
|
117
210
|
im--;
|
|
118
211
|
}
|
|
119
212
|
}
|
|
213
|
+
|
|
120
214
|
hufCanonicalCodeTable(hcode);
|
|
121
215
|
}
|
|
216
|
+
|
|
122
217
|
function hufLength(code) {
|
|
123
218
|
return code & 63;
|
|
124
219
|
}
|
|
220
|
+
|
|
125
221
|
function hufCode(code) {
|
|
126
222
|
return code >> 6;
|
|
127
223
|
}
|
|
224
|
+
|
|
128
225
|
function hufBuildDecTable(hcode, im, iM, hdecod) {
|
|
129
226
|
for (; im <= iM; im++) {
|
|
130
227
|
var c = hufCode(hcode[im]);
|
|
131
228
|
var l = hufLength(hcode[im]);
|
|
229
|
+
|
|
132
230
|
if (c >> l) {
|
|
133
|
-
throw
|
|
231
|
+
throw 'Invalid table entry';
|
|
134
232
|
}
|
|
233
|
+
|
|
135
234
|
if (l > HUF_DECBITS) {
|
|
136
235
|
var pl = hdecod[c >> l - HUF_DECBITS];
|
|
236
|
+
|
|
137
237
|
if (pl.len) {
|
|
138
|
-
throw
|
|
238
|
+
throw 'Invalid table entry';
|
|
139
239
|
}
|
|
240
|
+
|
|
140
241
|
pl.lit++;
|
|
242
|
+
|
|
141
243
|
if (pl.p) {
|
|
142
244
|
var p = pl.p;
|
|
143
245
|
pl.p = new Array(pl.lit);
|
|
246
|
+
|
|
144
247
|
for (var i = 0; i < pl.lit - 1; ++i) {
|
|
145
248
|
pl.p[i] = p[i];
|
|
146
249
|
}
|
|
147
250
|
} else {
|
|
148
251
|
pl.p = new Array(1);
|
|
149
252
|
}
|
|
253
|
+
|
|
150
254
|
pl.p[pl.lit - 1] = im;
|
|
151
255
|
} else if (l) {
|
|
152
256
|
var plOffset = 0;
|
|
257
|
+
|
|
153
258
|
for (var i = 1 << HUF_DECBITS - l; i > 0; i--) {
|
|
154
259
|
var pl = hdecod[(c << HUF_DECBITS - l) + plOffset];
|
|
260
|
+
|
|
155
261
|
if (pl.len || pl.p) {
|
|
156
|
-
throw
|
|
262
|
+
throw 'Invalid table entry';
|
|
157
263
|
}
|
|
264
|
+
|
|
158
265
|
pl.len = l;
|
|
159
266
|
pl.lit = im;
|
|
160
267
|
plOffset++;
|
|
161
268
|
}
|
|
162
269
|
}
|
|
163
270
|
}
|
|
271
|
+
|
|
164
272
|
return true;
|
|
165
273
|
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
c
|
|
274
|
+
|
|
275
|
+
const getCharReturn = {
|
|
276
|
+
c: 0,
|
|
277
|
+
lc: 0
|
|
278
|
+
};
|
|
279
|
+
|
|
280
|
+
function getChar(c, lc, uInt8Array, inOffset) {
|
|
281
|
+
c = c << 8 | parseUint8Array(uInt8Array, inOffset);
|
|
169
282
|
lc += 8;
|
|
170
283
|
getCharReturn.c = c;
|
|
171
284
|
getCharReturn.lc = lc;
|
|
172
285
|
}
|
|
173
|
-
|
|
174
|
-
|
|
286
|
+
|
|
287
|
+
const getCodeReturn = {
|
|
288
|
+
c: 0,
|
|
289
|
+
lc: 0
|
|
290
|
+
};
|
|
291
|
+
|
|
292
|
+
function getCode(po, rlc, c, lc, uInt8Array, inDataView, inOffset, outBuffer, outBufferOffset, outBufferEndOffset) {
|
|
175
293
|
if (po == rlc) {
|
|
176
294
|
if (lc < 8) {
|
|
177
|
-
getChar(c, lc,
|
|
295
|
+
getChar(c, lc, uInt8Array, inOffset);
|
|
178
296
|
c = getCharReturn.c;
|
|
179
297
|
lc = getCharReturn.lc;
|
|
180
298
|
}
|
|
299
|
+
|
|
181
300
|
lc -= 8;
|
|
182
301
|
var cs = c >> lc;
|
|
183
302
|
var cs = new Uint8Array([cs])[0];
|
|
303
|
+
|
|
184
304
|
if (outBufferOffset.value + cs > outBufferEndOffset) {
|
|
185
305
|
return false;
|
|
186
306
|
}
|
|
307
|
+
|
|
187
308
|
var s = outBuffer[outBufferOffset.value - 1];
|
|
309
|
+
|
|
188
310
|
while (cs-- > 0) {
|
|
189
311
|
outBuffer[outBufferOffset.value++] = s;
|
|
190
312
|
}
|
|
@@ -193,17 +315,25 @@ class EXRLoader extends THREE.DataTextureLoader {
|
|
|
193
315
|
} else {
|
|
194
316
|
return false;
|
|
195
317
|
}
|
|
318
|
+
|
|
196
319
|
getCodeReturn.c = c;
|
|
197
320
|
getCodeReturn.lc = lc;
|
|
198
321
|
}
|
|
322
|
+
|
|
199
323
|
function UInt16(value) {
|
|
200
|
-
return value &
|
|
324
|
+
return value & 0xffff;
|
|
201
325
|
}
|
|
326
|
+
|
|
202
327
|
function Int16(value) {
|
|
203
328
|
var ref = UInt16(value);
|
|
204
|
-
return ref >
|
|
329
|
+
return ref > 0x7fff ? ref - 0x10000 : ref;
|
|
205
330
|
}
|
|
206
|
-
|
|
331
|
+
|
|
332
|
+
const wdec14Return = {
|
|
333
|
+
a: 0,
|
|
334
|
+
b: 0
|
|
335
|
+
};
|
|
336
|
+
|
|
207
337
|
function wdec14(l, h) {
|
|
208
338
|
var ls = Int16(l);
|
|
209
339
|
var hs = Int16(h);
|
|
@@ -214,6 +344,7 @@ class EXRLoader extends THREE.DataTextureLoader {
|
|
|
214
344
|
wdec14Return.a = as;
|
|
215
345
|
wdec14Return.b = bs;
|
|
216
346
|
}
|
|
347
|
+
|
|
217
348
|
function wdec16(l, h) {
|
|
218
349
|
var m = UInt16(l);
|
|
219
350
|
var d = UInt16(h);
|
|
@@ -222,16 +353,19 @@ class EXRLoader extends THREE.DataTextureLoader {
|
|
|
222
353
|
wdec14Return.a = aa;
|
|
223
354
|
wdec14Return.b = bb;
|
|
224
355
|
}
|
|
225
|
-
|
|
356
|
+
|
|
357
|
+
function wav2Decode(buffer, j, nx, ox, ny, oy, mx) {
|
|
226
358
|
var w14 = mx < 1 << 14;
|
|
227
359
|
var n = nx > ny ? ny : nx;
|
|
228
360
|
var p = 1;
|
|
229
361
|
var p2;
|
|
230
|
-
|
|
231
|
-
|
|
362
|
+
|
|
363
|
+
while (p <= n) p <<= 1;
|
|
364
|
+
|
|
232
365
|
p >>= 1;
|
|
233
366
|
p2 = p;
|
|
234
367
|
p >>= 1;
|
|
368
|
+
|
|
235
369
|
while (p >= 1) {
|
|
236
370
|
var py = 0;
|
|
237
371
|
var ey = py + oy * (ny - p2);
|
|
@@ -240,200 +374,217 @@ class EXRLoader extends THREE.DataTextureLoader {
|
|
|
240
374
|
var ox1 = ox * p;
|
|
241
375
|
var ox2 = ox * p2;
|
|
242
376
|
var i00, i01, i10, i11;
|
|
377
|
+
|
|
243
378
|
for (; py <= ey; py += oy2) {
|
|
244
379
|
var px = py;
|
|
245
380
|
var ex = py + ox * (nx - p2);
|
|
381
|
+
|
|
246
382
|
for (; px <= ex; px += ox2) {
|
|
247
383
|
var p01 = px + ox1;
|
|
248
384
|
var p10 = px + oy1;
|
|
249
385
|
var p11 = p10 + ox1;
|
|
386
|
+
|
|
250
387
|
if (w14) {
|
|
251
|
-
wdec14(
|
|
388
|
+
wdec14(buffer[px + j], buffer[p10 + j]);
|
|
252
389
|
i00 = wdec14Return.a;
|
|
253
390
|
i10 = wdec14Return.b;
|
|
254
|
-
wdec14(
|
|
391
|
+
wdec14(buffer[p01 + j], buffer[p11 + j]);
|
|
255
392
|
i01 = wdec14Return.a;
|
|
256
393
|
i11 = wdec14Return.b;
|
|
257
394
|
wdec14(i00, i01);
|
|
258
|
-
|
|
259
|
-
|
|
395
|
+
buffer[px + j] = wdec14Return.a;
|
|
396
|
+
buffer[p01 + j] = wdec14Return.b;
|
|
260
397
|
wdec14(i10, i11);
|
|
261
|
-
|
|
262
|
-
|
|
398
|
+
buffer[p10 + j] = wdec14Return.a;
|
|
399
|
+
buffer[p11 + j] = wdec14Return.b;
|
|
263
400
|
} else {
|
|
264
|
-
wdec16(
|
|
401
|
+
wdec16(buffer[px + j], buffer[p10 + j]);
|
|
265
402
|
i00 = wdec14Return.a;
|
|
266
403
|
i10 = wdec14Return.b;
|
|
267
|
-
wdec16(
|
|
404
|
+
wdec16(buffer[p01 + j], buffer[p11 + j]);
|
|
268
405
|
i01 = wdec14Return.a;
|
|
269
406
|
i11 = wdec14Return.b;
|
|
270
407
|
wdec16(i00, i01);
|
|
271
|
-
|
|
272
|
-
|
|
408
|
+
buffer[px + j] = wdec14Return.a;
|
|
409
|
+
buffer[p01 + j] = wdec14Return.b;
|
|
273
410
|
wdec16(i10, i11);
|
|
274
|
-
|
|
275
|
-
|
|
411
|
+
buffer[p10 + j] = wdec14Return.a;
|
|
412
|
+
buffer[p11 + j] = wdec14Return.b;
|
|
276
413
|
}
|
|
277
414
|
}
|
|
415
|
+
|
|
278
416
|
if (nx & p) {
|
|
279
417
|
var p10 = px + oy1;
|
|
280
|
-
if (w14)
|
|
281
|
-
wdec14(buffer2[px + j], buffer2[p10 + j]);
|
|
282
|
-
else
|
|
283
|
-
wdec16(buffer2[px + j], buffer2[p10 + j]);
|
|
418
|
+
if (w14) wdec14(buffer[px + j], buffer[p10 + j]);else wdec16(buffer[px + j], buffer[p10 + j]);
|
|
284
419
|
i00 = wdec14Return.a;
|
|
285
|
-
|
|
286
|
-
|
|
420
|
+
buffer[p10 + j] = wdec14Return.b;
|
|
421
|
+
buffer[px + j] = i00;
|
|
287
422
|
}
|
|
288
423
|
}
|
|
424
|
+
|
|
289
425
|
if (ny & p) {
|
|
290
426
|
var px = py;
|
|
291
427
|
var ex = py + ox * (nx - p2);
|
|
428
|
+
|
|
292
429
|
for (; px <= ex; px += ox2) {
|
|
293
430
|
var p01 = px + ox1;
|
|
294
|
-
if (w14)
|
|
295
|
-
wdec14(buffer2[px + j], buffer2[p01 + j]);
|
|
296
|
-
else
|
|
297
|
-
wdec16(buffer2[px + j], buffer2[p01 + j]);
|
|
431
|
+
if (w14) wdec14(buffer[px + j], buffer[p01 + j]);else wdec16(buffer[px + j], buffer[p01 + j]);
|
|
298
432
|
i00 = wdec14Return.a;
|
|
299
|
-
|
|
300
|
-
|
|
433
|
+
buffer[p01 + j] = wdec14Return.b;
|
|
434
|
+
buffer[px + j] = i00;
|
|
301
435
|
}
|
|
302
436
|
}
|
|
437
|
+
|
|
303
438
|
p2 = p;
|
|
304
439
|
p >>= 1;
|
|
305
440
|
}
|
|
441
|
+
|
|
306
442
|
return py;
|
|
307
443
|
}
|
|
308
|
-
|
|
444
|
+
|
|
445
|
+
function hufDecode(encodingTable, decodingTable, uInt8Array, inDataView, inOffset, ni, rlc, no, outBuffer, outOffset) {
|
|
309
446
|
var c = 0;
|
|
310
447
|
var lc = 0;
|
|
311
448
|
var outBufferEndOffset = no;
|
|
312
449
|
var inOffsetEnd = Math.trunc(inOffset.value + (ni + 7) / 8);
|
|
450
|
+
|
|
313
451
|
while (inOffset.value < inOffsetEnd) {
|
|
314
|
-
getChar(c, lc,
|
|
452
|
+
getChar(c, lc, uInt8Array, inOffset);
|
|
315
453
|
c = getCharReturn.c;
|
|
316
454
|
lc = getCharReturn.lc;
|
|
455
|
+
|
|
317
456
|
while (lc >= HUF_DECBITS) {
|
|
318
457
|
var index = c >> lc - HUF_DECBITS & HUF_DECMASK;
|
|
319
458
|
var pl = decodingTable[index];
|
|
459
|
+
|
|
320
460
|
if (pl.len) {
|
|
321
461
|
lc -= pl.len;
|
|
322
|
-
getCode(pl.lit, rlc, c, lc,
|
|
462
|
+
getCode(pl.lit, rlc, c, lc, uInt8Array, inDataView, inOffset, outBuffer, outOffset, outBufferEndOffset);
|
|
323
463
|
c = getCodeReturn.c;
|
|
324
464
|
lc = getCodeReturn.lc;
|
|
325
465
|
} else {
|
|
326
466
|
if (!pl.p) {
|
|
327
|
-
throw
|
|
467
|
+
throw 'hufDecode issues';
|
|
328
468
|
}
|
|
469
|
+
|
|
329
470
|
var j;
|
|
471
|
+
|
|
330
472
|
for (j = 0; j < pl.lit; j++) {
|
|
331
473
|
var l = hufLength(encodingTable[pl.p[j]]);
|
|
474
|
+
|
|
332
475
|
while (lc < l && inOffset.value < inOffsetEnd) {
|
|
333
|
-
getChar(c, lc,
|
|
476
|
+
getChar(c, lc, uInt8Array, inOffset);
|
|
334
477
|
c = getCharReturn.c;
|
|
335
478
|
lc = getCharReturn.lc;
|
|
336
479
|
}
|
|
480
|
+
|
|
337
481
|
if (lc >= l) {
|
|
338
482
|
if (hufCode(encodingTable[pl.p[j]]) == (c >> lc - l & (1 << l) - 1)) {
|
|
339
483
|
lc -= l;
|
|
340
|
-
getCode(
|
|
341
|
-
pl.p[j],
|
|
342
|
-
rlc,
|
|
343
|
-
c,
|
|
344
|
-
lc,
|
|
345
|
-
uInt8Array2,
|
|
346
|
-
inDataView,
|
|
347
|
-
inOffset,
|
|
348
|
-
outBuffer,
|
|
349
|
-
outOffset,
|
|
350
|
-
outBufferEndOffset
|
|
351
|
-
);
|
|
484
|
+
getCode(pl.p[j], rlc, c, lc, uInt8Array, inDataView, inOffset, outBuffer, outOffset, outBufferEndOffset);
|
|
352
485
|
c = getCodeReturn.c;
|
|
353
486
|
lc = getCodeReturn.lc;
|
|
354
487
|
break;
|
|
355
488
|
}
|
|
356
489
|
}
|
|
357
490
|
}
|
|
491
|
+
|
|
358
492
|
if (j == pl.lit) {
|
|
359
|
-
throw
|
|
493
|
+
throw 'hufDecode issues';
|
|
360
494
|
}
|
|
361
495
|
}
|
|
362
496
|
}
|
|
363
497
|
}
|
|
498
|
+
|
|
364
499
|
var i = 8 - ni & 7;
|
|
365
500
|
c >>= i;
|
|
366
501
|
lc -= i;
|
|
502
|
+
|
|
367
503
|
while (lc > 0) {
|
|
368
504
|
var pl = decodingTable[c << HUF_DECBITS - lc & HUF_DECMASK];
|
|
505
|
+
|
|
369
506
|
if (pl.len) {
|
|
370
507
|
lc -= pl.len;
|
|
371
|
-
getCode(pl.lit, rlc, c, lc,
|
|
508
|
+
getCode(pl.lit, rlc, c, lc, uInt8Array, inDataView, inOffset, outBuffer, outOffset, outBufferEndOffset);
|
|
372
509
|
c = getCodeReturn.c;
|
|
373
510
|
lc = getCodeReturn.lc;
|
|
374
511
|
} else {
|
|
375
|
-
throw
|
|
512
|
+
throw 'hufDecode issues';
|
|
376
513
|
}
|
|
377
514
|
}
|
|
515
|
+
|
|
378
516
|
return true;
|
|
379
517
|
}
|
|
380
|
-
|
|
381
|
-
|
|
518
|
+
|
|
519
|
+
function hufUncompress(uInt8Array, inDataView, inOffset, nCompressed, outBuffer, nRaw) {
|
|
520
|
+
var outOffset = {
|
|
521
|
+
value: 0
|
|
522
|
+
};
|
|
382
523
|
var initialInOffset = inOffset.value;
|
|
383
524
|
var im = parseUint32(inDataView, inOffset);
|
|
384
525
|
var iM = parseUint32(inDataView, inOffset);
|
|
385
526
|
inOffset.value += 4;
|
|
386
527
|
var nBits = parseUint32(inDataView, inOffset);
|
|
387
528
|
inOffset.value += 4;
|
|
529
|
+
|
|
388
530
|
if (im < 0 || im >= HUF_ENCSIZE || iM < 0 || iM >= HUF_ENCSIZE) {
|
|
389
|
-
throw
|
|
531
|
+
throw 'Something wrong with HUF_ENCSIZE';
|
|
390
532
|
}
|
|
533
|
+
|
|
391
534
|
var freq = new Array(HUF_ENCSIZE);
|
|
392
535
|
var hdec = new Array(HUF_DECSIZE);
|
|
393
536
|
hufClearDecTable(hdec);
|
|
394
537
|
var ni = nCompressed - (inOffset.value - initialInOffset);
|
|
395
|
-
hufUnpackEncTable(
|
|
538
|
+
hufUnpackEncTable(uInt8Array, inDataView, inOffset, ni, im, iM, freq);
|
|
539
|
+
|
|
396
540
|
if (nBits > 8 * (nCompressed - (inOffset.value - initialInOffset))) {
|
|
397
|
-
throw
|
|
541
|
+
throw 'Something wrong with hufUncompress';
|
|
398
542
|
}
|
|
543
|
+
|
|
399
544
|
hufBuildDecTable(freq, im, iM, hdec);
|
|
400
|
-
hufDecode(freq, hdec,
|
|
545
|
+
hufDecode(freq, hdec, uInt8Array, inDataView, inOffset, nBits, iM, nRaw, outBuffer, outOffset);
|
|
401
546
|
}
|
|
547
|
+
|
|
402
548
|
function applyLut(lut, data, nData) {
|
|
403
549
|
for (var i = 0; i < nData; ++i) {
|
|
404
550
|
data[i] = lut[data[i]];
|
|
405
551
|
}
|
|
406
552
|
}
|
|
553
|
+
|
|
407
554
|
function predictor(source) {
|
|
408
555
|
for (var t = 1; t < source.length; t++) {
|
|
409
556
|
var d = source[t - 1] + source[t] - 128;
|
|
410
557
|
source[t] = d;
|
|
411
558
|
}
|
|
412
559
|
}
|
|
560
|
+
|
|
413
561
|
function interleaveScalar(source, out) {
|
|
414
562
|
var t1 = 0;
|
|
415
563
|
var t2 = Math.floor((source.length + 1) / 2);
|
|
416
564
|
var s = 0;
|
|
417
565
|
var stop = source.length - 1;
|
|
566
|
+
|
|
418
567
|
while (true) {
|
|
419
|
-
if (s > stop)
|
|
420
|
-
break;
|
|
568
|
+
if (s > stop) break;
|
|
421
569
|
out[s++] = source[t1++];
|
|
422
|
-
if (s > stop)
|
|
423
|
-
break;
|
|
570
|
+
if (s > stop) break;
|
|
424
571
|
out[s++] = source[t2++];
|
|
425
572
|
}
|
|
426
573
|
}
|
|
574
|
+
|
|
427
575
|
function decodeRunLength(source) {
|
|
428
576
|
var size = source.byteLength;
|
|
429
577
|
var out = new Array();
|
|
430
578
|
var p = 0;
|
|
431
579
|
var reader = new DataView(source);
|
|
580
|
+
|
|
432
581
|
while (size > 0) {
|
|
433
582
|
var l = reader.getInt8(p++);
|
|
583
|
+
|
|
434
584
|
if (l < 0) {
|
|
435
585
|
var count = -l;
|
|
436
586
|
size -= count + 1;
|
|
587
|
+
|
|
437
588
|
for (var i = 0; i < count; i++) {
|
|
438
589
|
out.push(reader.getUint8(p++));
|
|
439
590
|
}
|
|
@@ -441,121 +592,153 @@ class EXRLoader extends THREE.DataTextureLoader {
|
|
|
441
592
|
var count = l;
|
|
442
593
|
size -= 2;
|
|
443
594
|
var value = reader.getUint8(p++);
|
|
595
|
+
|
|
444
596
|
for (var i = 0; i < count + 1; i++) {
|
|
445
597
|
out.push(value);
|
|
446
598
|
}
|
|
447
599
|
}
|
|
448
600
|
}
|
|
601
|
+
|
|
449
602
|
return out;
|
|
450
603
|
}
|
|
604
|
+
|
|
451
605
|
function lossyDctDecode(cscSet, rowPtrs, channelData, acBuffer, dcBuffer, outBuffer) {
|
|
452
606
|
var dataView = new DataView(outBuffer.buffer);
|
|
453
607
|
var width = channelData[cscSet.idx[0]].width;
|
|
454
608
|
var height = channelData[cscSet.idx[0]].height;
|
|
455
609
|
var numComp = 3;
|
|
456
|
-
var numFullBlocksX = Math.floor(width / 8);
|
|
457
|
-
var numBlocksX = Math.ceil(width / 8);
|
|
458
|
-
var numBlocksY = Math.ceil(height / 8);
|
|
610
|
+
var numFullBlocksX = Math.floor(width / 8.0);
|
|
611
|
+
var numBlocksX = Math.ceil(width / 8.0);
|
|
612
|
+
var numBlocksY = Math.ceil(height / 8.0);
|
|
459
613
|
var leftoverX = width - (numBlocksX - 1) * 8;
|
|
460
614
|
var leftoverY = height - (numBlocksY - 1) * 8;
|
|
461
|
-
var currAcComp = {
|
|
615
|
+
var currAcComp = {
|
|
616
|
+
value: 0
|
|
617
|
+
};
|
|
462
618
|
var currDcComp = new Array(numComp);
|
|
463
619
|
var dctData = new Array(numComp);
|
|
464
620
|
var halfZigBlock = new Array(numComp);
|
|
465
621
|
var rowBlock = new Array(numComp);
|
|
466
622
|
var rowOffsets = new Array(numComp);
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
623
|
+
|
|
624
|
+
for (let comp = 0; comp < numComp; ++comp) {
|
|
625
|
+
rowOffsets[comp] = rowPtrs[cscSet.idx[comp]];
|
|
626
|
+
currDcComp[comp] = comp < 1 ? 0 : currDcComp[comp - 1] + numBlocksX * numBlocksY;
|
|
627
|
+
dctData[comp] = new Float32Array(64);
|
|
628
|
+
halfZigBlock[comp] = new Uint16Array(64);
|
|
629
|
+
rowBlock[comp] = new Uint16Array(numBlocksX * 64);
|
|
473
630
|
}
|
|
631
|
+
|
|
474
632
|
for (let blocky = 0; blocky < numBlocksY; ++blocky) {
|
|
475
633
|
var maxY = 8;
|
|
476
|
-
if (blocky == numBlocksY - 1)
|
|
477
|
-
maxY = leftoverY;
|
|
634
|
+
if (blocky == numBlocksY - 1) maxY = leftoverY;
|
|
478
635
|
var maxX = 8;
|
|
636
|
+
|
|
479
637
|
for (let blockx = 0; blockx < numBlocksX; ++blockx) {
|
|
480
|
-
if (blockx == numBlocksX - 1)
|
|
481
|
-
|
|
482
|
-
for (let
|
|
483
|
-
halfZigBlock[
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
638
|
+
if (blockx == numBlocksX - 1) maxX = leftoverX;
|
|
639
|
+
|
|
640
|
+
for (let comp = 0; comp < numComp; ++comp) {
|
|
641
|
+
halfZigBlock[comp].fill(0); // set block DC component
|
|
642
|
+
|
|
643
|
+
halfZigBlock[comp][0] = dcBuffer[currDcComp[comp]++]; // set block AC components
|
|
644
|
+
|
|
645
|
+
unRleAC(currAcComp, acBuffer, halfZigBlock[comp]); // UnZigZag block to float
|
|
646
|
+
|
|
647
|
+
unZigZag(halfZigBlock[comp], dctData[comp]); // decode float dct
|
|
648
|
+
|
|
649
|
+
dctInverse(dctData[comp]);
|
|
488
650
|
}
|
|
489
|
-
|
|
651
|
+
|
|
652
|
+
{
|
|
490
653
|
csc709Inverse(dctData);
|
|
491
654
|
}
|
|
492
|
-
|
|
493
|
-
|
|
655
|
+
|
|
656
|
+
for (let comp = 0; comp < numComp; ++comp) {
|
|
657
|
+
convertToHalf(dctData[comp], rowBlock[comp], blockx * 64);
|
|
494
658
|
}
|
|
495
|
-
}
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
659
|
+
} // blockx
|
|
660
|
+
|
|
661
|
+
|
|
662
|
+
let offset = 0;
|
|
663
|
+
|
|
664
|
+
for (let comp = 0; comp < numComp; ++comp) {
|
|
665
|
+
const type = channelData[cscSet.idx[comp]].type;
|
|
666
|
+
|
|
667
|
+
for (let y = 8 * blocky; y < 8 * blocky + maxY; ++y) {
|
|
668
|
+
offset = rowOffsets[comp][y];
|
|
669
|
+
|
|
501
670
|
for (let blockx = 0; blockx < numFullBlocksX; ++blockx) {
|
|
502
|
-
const src = blockx * 64 + (
|
|
503
|
-
dataView.setUint16(
|
|
504
|
-
dataView.setUint16(
|
|
505
|
-
dataView.setUint16(
|
|
506
|
-
dataView.setUint16(
|
|
507
|
-
dataView.setUint16(
|
|
508
|
-
dataView.setUint16(
|
|
509
|
-
dataView.setUint16(
|
|
510
|
-
dataView.setUint16(
|
|
511
|
-
|
|
671
|
+
const src = blockx * 64 + (y & 0x7) * 8;
|
|
672
|
+
dataView.setUint16(offset + 0 * INT16_SIZE * type, rowBlock[comp][src + 0], true);
|
|
673
|
+
dataView.setUint16(offset + 1 * INT16_SIZE * type, rowBlock[comp][src + 1], true);
|
|
674
|
+
dataView.setUint16(offset + 2 * INT16_SIZE * type, rowBlock[comp][src + 2], true);
|
|
675
|
+
dataView.setUint16(offset + 3 * INT16_SIZE * type, rowBlock[comp][src + 3], true);
|
|
676
|
+
dataView.setUint16(offset + 4 * INT16_SIZE * type, rowBlock[comp][src + 4], true);
|
|
677
|
+
dataView.setUint16(offset + 5 * INT16_SIZE * type, rowBlock[comp][src + 5], true);
|
|
678
|
+
dataView.setUint16(offset + 6 * INT16_SIZE * type, rowBlock[comp][src + 6], true);
|
|
679
|
+
dataView.setUint16(offset + 7 * INT16_SIZE * type, rowBlock[comp][src + 7], true);
|
|
680
|
+
offset += 8 * INT16_SIZE * type;
|
|
512
681
|
}
|
|
513
|
-
}
|
|
682
|
+
} // handle partial X blocks
|
|
683
|
+
|
|
684
|
+
|
|
514
685
|
if (numFullBlocksX != numBlocksX) {
|
|
515
|
-
for (let
|
|
516
|
-
const
|
|
517
|
-
const src = numFullBlocksX * 64 + (
|
|
518
|
-
|
|
519
|
-
|
|
686
|
+
for (let y = 8 * blocky; y < 8 * blocky + maxY; ++y) {
|
|
687
|
+
const offset = rowOffsets[comp][y] + 8 * numFullBlocksX * INT16_SIZE * type;
|
|
688
|
+
const src = numFullBlocksX * 64 + (y & 0x7) * 8;
|
|
689
|
+
|
|
690
|
+
for (let x = 0; x < maxX; ++x) {
|
|
691
|
+
dataView.setUint16(offset + x * INT16_SIZE * type, rowBlock[comp][src + x], true);
|
|
520
692
|
}
|
|
521
693
|
}
|
|
522
694
|
}
|
|
523
|
-
}
|
|
524
|
-
|
|
695
|
+
} // comp
|
|
696
|
+
|
|
697
|
+
} // blocky
|
|
698
|
+
|
|
699
|
+
|
|
525
700
|
var halfRow = new Uint16Array(width);
|
|
526
|
-
var dataView = new DataView(outBuffer.buffer);
|
|
701
|
+
var dataView = new DataView(outBuffer.buffer); // convert channels back to float, if needed
|
|
702
|
+
|
|
527
703
|
for (var comp = 0; comp < numComp; ++comp) {
|
|
528
704
|
channelData[cscSet.idx[comp]].decoded = true;
|
|
529
705
|
var type = channelData[cscSet.idx[comp]].type;
|
|
530
|
-
if (channelData[comp].type != 2)
|
|
531
|
-
|
|
706
|
+
if (channelData[comp].type != 2) continue;
|
|
707
|
+
|
|
532
708
|
for (var y = 0; y < height; ++y) {
|
|
533
|
-
const
|
|
709
|
+
const offset = rowOffsets[comp][y];
|
|
710
|
+
|
|
534
711
|
for (var x = 0; x < width; ++x) {
|
|
535
|
-
halfRow[x] = dataView.getUint16(
|
|
712
|
+
halfRow[x] = dataView.getUint16(offset + x * INT16_SIZE * type, true);
|
|
536
713
|
}
|
|
714
|
+
|
|
537
715
|
for (var x = 0; x < width; ++x) {
|
|
538
|
-
dataView.setFloat32(
|
|
716
|
+
dataView.setFloat32(offset + x * INT16_SIZE * type, decodeFloat16(halfRow[x]), true);
|
|
539
717
|
}
|
|
540
718
|
}
|
|
541
719
|
}
|
|
542
720
|
}
|
|
721
|
+
|
|
543
722
|
function unRleAC(currAcComp, acBuffer, halfZigBlock) {
|
|
544
723
|
var acValue;
|
|
545
724
|
var dctComp = 1;
|
|
725
|
+
|
|
546
726
|
while (dctComp < 64) {
|
|
547
727
|
acValue = acBuffer[currAcComp.value];
|
|
548
|
-
|
|
728
|
+
|
|
729
|
+
if (acValue == 0xff00) {
|
|
549
730
|
dctComp = 64;
|
|
550
|
-
} else if (acValue >> 8 ==
|
|
551
|
-
dctComp += acValue &
|
|
731
|
+
} else if (acValue >> 8 == 0xff) {
|
|
732
|
+
dctComp += acValue & 0xff;
|
|
552
733
|
} else {
|
|
553
734
|
halfZigBlock[dctComp] = acValue;
|
|
554
735
|
dctComp++;
|
|
555
736
|
}
|
|
737
|
+
|
|
556
738
|
currAcComp.value++;
|
|
557
739
|
}
|
|
558
740
|
}
|
|
741
|
+
|
|
559
742
|
function unZigZag(src, dst) {
|
|
560
743
|
dst[0] = decodeFloat16(src[0]);
|
|
561
744
|
dst[1] = decodeFloat16(src[1]);
|
|
@@ -622,18 +805,20 @@ class EXRLoader extends THREE.DataTextureLoader {
|
|
|
622
805
|
dst[62] = decodeFloat16(src[62]);
|
|
623
806
|
dst[63] = decodeFloat16(src[63]);
|
|
624
807
|
}
|
|
808
|
+
|
|
625
809
|
function dctInverse(data) {
|
|
626
|
-
const a = 0.5 * Math.cos(3.14159 / 4);
|
|
627
|
-
const b = 0.5 * Math.cos(3.14159 / 16);
|
|
628
|
-
const c = 0.5 * Math.cos(3.14159 / 8);
|
|
629
|
-
const d = 0.5 * Math.cos(3 * 3.14159 / 16);
|
|
630
|
-
const e = 0.5 * Math.cos(5 * 3.14159 / 16);
|
|
631
|
-
const f = 0.5 * Math.cos(3 * 3.14159 / 8);
|
|
632
|
-
const g = 0.5 * Math.cos(7 * 3.14159 / 16);
|
|
810
|
+
const a = 0.5 * Math.cos(3.14159 / 4.0);
|
|
811
|
+
const b = 0.5 * Math.cos(3.14159 / 16.0);
|
|
812
|
+
const c = 0.5 * Math.cos(3.14159 / 8.0);
|
|
813
|
+
const d = 0.5 * Math.cos(3.0 * 3.14159 / 16.0);
|
|
814
|
+
const e = 0.5 * Math.cos(5.0 * 3.14159 / 16.0);
|
|
815
|
+
const f = 0.5 * Math.cos(3.0 * 3.14159 / 8.0);
|
|
816
|
+
const g = 0.5 * Math.cos(7.0 * 3.14159 / 16.0);
|
|
633
817
|
var alpha = new Array(4);
|
|
634
818
|
var beta = new Array(4);
|
|
635
819
|
var theta = new Array(4);
|
|
636
820
|
var gamma = new Array(4);
|
|
821
|
+
|
|
637
822
|
for (var row = 0; row < 8; ++row) {
|
|
638
823
|
var rowPtr = row * 8;
|
|
639
824
|
alpha[0] = c * data[rowPtr + 2];
|
|
@@ -661,6 +846,7 @@ class EXRLoader extends THREE.DataTextureLoader {
|
|
|
661
846
|
data[rowPtr + 6] = gamma[1] - beta[1];
|
|
662
847
|
data[rowPtr + 7] = gamma[0] - beta[0];
|
|
663
848
|
}
|
|
849
|
+
|
|
664
850
|
for (var column = 0; column < 8; ++column) {
|
|
665
851
|
alpha[0] = c * data[16 + column];
|
|
666
852
|
alpha[1] = f * data[16 + column];
|
|
@@ -688,6 +874,7 @@ class EXRLoader extends THREE.DataTextureLoader {
|
|
|
688
874
|
data[56 + column] = gamma[0] - beta[0];
|
|
689
875
|
}
|
|
690
876
|
}
|
|
877
|
+
|
|
691
878
|
function csc709Inverse(data) {
|
|
692
879
|
for (var i = 0; i < 64; ++i) {
|
|
693
880
|
var y = data[0][i];
|
|
@@ -698,132 +885,175 @@ class EXRLoader extends THREE.DataTextureLoader {
|
|
|
698
885
|
data[2][i] = y + 1.8556 * cb;
|
|
699
886
|
}
|
|
700
887
|
}
|
|
888
|
+
|
|
701
889
|
function convertToHalf(src, dst, idx) {
|
|
702
890
|
for (var i = 0; i < 64; ++i) {
|
|
703
|
-
dst[idx + i] =
|
|
891
|
+
dst[idx + i] = DataUtils.toHalfFloat(toLinear(src[i]));
|
|
704
892
|
}
|
|
705
893
|
}
|
|
894
|
+
|
|
706
895
|
function toLinear(float) {
|
|
707
896
|
if (float <= 1) {
|
|
708
897
|
return Math.sign(float) * Math.pow(Math.abs(float), 2.2);
|
|
709
898
|
} else {
|
|
710
|
-
return Math.sign(float) * Math.pow(logBase, Math.abs(float) - 1);
|
|
899
|
+
return Math.sign(float) * Math.pow(logBase, Math.abs(float) - 1.0);
|
|
711
900
|
}
|
|
712
901
|
}
|
|
902
|
+
|
|
713
903
|
function uncompressRAW(info) {
|
|
714
904
|
return new DataView(info.array.buffer, info.offset.value, info.size);
|
|
715
905
|
}
|
|
906
|
+
|
|
716
907
|
function uncompressRLE(info) {
|
|
717
908
|
var compressed = info.viewer.buffer.slice(info.offset.value, info.offset.value + info.size);
|
|
718
909
|
var rawBuffer = new Uint8Array(decodeRunLength(compressed));
|
|
719
910
|
var tmpBuffer = new Uint8Array(rawBuffer.length);
|
|
720
|
-
predictor(rawBuffer);
|
|
721
|
-
|
|
911
|
+
predictor(rawBuffer); // revert predictor
|
|
912
|
+
|
|
913
|
+
interleaveScalar(rawBuffer, tmpBuffer); // interleave pixels
|
|
914
|
+
|
|
722
915
|
return new DataView(tmpBuffer.buffer);
|
|
723
916
|
}
|
|
917
|
+
|
|
724
918
|
function uncompressZIP(info) {
|
|
725
919
|
var compressed = info.array.slice(info.offset.value, info.offset.value + info.size);
|
|
726
|
-
var rawBuffer =
|
|
920
|
+
var rawBuffer = unzlibSync(compressed); // eslint-disable-line no-undef
|
|
921
|
+
|
|
727
922
|
var tmpBuffer = new Uint8Array(rawBuffer.length);
|
|
728
|
-
predictor(rawBuffer);
|
|
729
|
-
|
|
923
|
+
predictor(rawBuffer); // revert predictor
|
|
924
|
+
|
|
925
|
+
interleaveScalar(rawBuffer, tmpBuffer); // interleave pixels
|
|
926
|
+
|
|
730
927
|
return new DataView(tmpBuffer.buffer);
|
|
731
928
|
}
|
|
929
|
+
|
|
732
930
|
function uncompressPIZ(info) {
|
|
733
931
|
var inDataView = info.viewer;
|
|
734
|
-
var inOffset = {
|
|
932
|
+
var inOffset = {
|
|
933
|
+
value: info.offset.value
|
|
934
|
+
};
|
|
735
935
|
var outBuffer = new Uint16Array(info.width * info.scanlineBlockSize * (info.channels * info.type));
|
|
736
|
-
var bitmap = new Uint8Array(BITMAP_SIZE);
|
|
936
|
+
var bitmap = new Uint8Array(BITMAP_SIZE); // Setup channel info
|
|
937
|
+
|
|
737
938
|
var outBufferEnd = 0;
|
|
738
939
|
var pizChannelData = new Array(info.channels);
|
|
940
|
+
|
|
739
941
|
for (var i = 0; i < info.channels; i++) {
|
|
740
942
|
pizChannelData[i] = {};
|
|
741
|
-
pizChannelData[i][
|
|
742
|
-
pizChannelData[i][
|
|
743
|
-
pizChannelData[i][
|
|
744
|
-
pizChannelData[i][
|
|
745
|
-
pizChannelData[i][
|
|
943
|
+
pizChannelData[i]['start'] = outBufferEnd;
|
|
944
|
+
pizChannelData[i]['end'] = pizChannelData[i]['start'];
|
|
945
|
+
pizChannelData[i]['nx'] = info.width;
|
|
946
|
+
pizChannelData[i]['ny'] = info.lines;
|
|
947
|
+
pizChannelData[i]['size'] = info.type;
|
|
746
948
|
outBufferEnd += pizChannelData[i].nx * pizChannelData[i].ny * pizChannelData[i].size;
|
|
747
|
-
}
|
|
949
|
+
} // Read range compression data
|
|
950
|
+
|
|
951
|
+
|
|
748
952
|
var minNonZero = parseUint16(inDataView, inOffset);
|
|
749
953
|
var maxNonZero = parseUint16(inDataView, inOffset);
|
|
954
|
+
|
|
750
955
|
if (maxNonZero >= BITMAP_SIZE) {
|
|
751
|
-
throw
|
|
956
|
+
throw 'Something is wrong with PIZ_COMPRESSION BITMAP_SIZE';
|
|
752
957
|
}
|
|
958
|
+
|
|
753
959
|
if (minNonZero <= maxNonZero) {
|
|
754
960
|
for (var i = 0; i < maxNonZero - minNonZero + 1; i++) {
|
|
755
961
|
bitmap[i + minNonZero] = parseUint8(inDataView, inOffset);
|
|
756
962
|
}
|
|
757
|
-
}
|
|
963
|
+
} // Reverse LUT
|
|
964
|
+
|
|
965
|
+
|
|
758
966
|
var lut = new Uint16Array(USHORT_RANGE);
|
|
759
967
|
var maxValue = reverseLutFromBitmap(bitmap, lut);
|
|
760
|
-
var length = parseUint32(inDataView, inOffset);
|
|
761
|
-
|
|
968
|
+
var length = parseUint32(inDataView, inOffset); // Huffman decoding
|
|
969
|
+
|
|
970
|
+
hufUncompress(info.array, inDataView, inOffset, length, outBuffer, outBufferEnd); // Wavelet decoding
|
|
971
|
+
|
|
762
972
|
for (var i = 0; i < info.channels; ++i) {
|
|
763
973
|
var cd = pizChannelData[i];
|
|
974
|
+
|
|
764
975
|
for (var j = 0; j < pizChannelData[i].size; ++j) {
|
|
765
976
|
wav2Decode(outBuffer, cd.start + j, cd.nx, cd.size, cd.ny, cd.nx * cd.size, maxValue);
|
|
766
977
|
}
|
|
767
|
-
}
|
|
768
|
-
|
|
769
|
-
|
|
978
|
+
} // Expand the pixel data to their original range
|
|
979
|
+
|
|
980
|
+
|
|
981
|
+
applyLut(lut, outBuffer, outBufferEnd); // Rearrange the pixel data into the format expected by the caller.
|
|
982
|
+
|
|
983
|
+
var tmpOffset = 0;
|
|
770
984
|
var tmpBuffer = new Uint8Array(outBuffer.buffer.byteLength);
|
|
985
|
+
|
|
771
986
|
for (var y = 0; y < info.lines; y++) {
|
|
772
987
|
for (var c = 0; c < info.channels; c++) {
|
|
773
988
|
var cd = pizChannelData[c];
|
|
774
989
|
var n = cd.nx * cd.size;
|
|
775
990
|
var cp = new Uint8Array(outBuffer.buffer, cd.end * INT16_SIZE, n * INT16_SIZE);
|
|
776
|
-
tmpBuffer.set(cp,
|
|
777
|
-
|
|
991
|
+
tmpBuffer.set(cp, tmpOffset);
|
|
992
|
+
tmpOffset += n * INT16_SIZE;
|
|
778
993
|
cd.end += n;
|
|
779
994
|
}
|
|
780
995
|
}
|
|
996
|
+
|
|
781
997
|
return new DataView(tmpBuffer.buffer);
|
|
782
998
|
}
|
|
999
|
+
|
|
783
1000
|
function uncompressPXR(info) {
|
|
784
1001
|
var compressed = info.array.slice(info.offset.value, info.offset.value + info.size);
|
|
785
|
-
var rawBuffer =
|
|
1002
|
+
var rawBuffer = unzlibSync(compressed); // eslint-disable-line no-undef
|
|
1003
|
+
|
|
786
1004
|
const sz = info.lines * info.channels * info.width;
|
|
787
1005
|
const tmpBuffer = info.type == 1 ? new Uint16Array(sz) : new Uint32Array(sz);
|
|
788
1006
|
let tmpBufferEnd = 0;
|
|
789
1007
|
let writePtr = 0;
|
|
790
1008
|
const ptr = new Array(4);
|
|
1009
|
+
|
|
791
1010
|
for (let y = 0; y < info.lines; y++) {
|
|
792
1011
|
for (let c = 0; c < info.channels; c++) {
|
|
793
1012
|
let pixel = 0;
|
|
1013
|
+
|
|
794
1014
|
switch (info.type) {
|
|
795
1015
|
case 1:
|
|
796
1016
|
ptr[0] = tmpBufferEnd;
|
|
797
1017
|
ptr[1] = ptr[0] + info.width;
|
|
798
1018
|
tmpBufferEnd = ptr[1] + info.width;
|
|
1019
|
+
|
|
799
1020
|
for (let j = 0; j < info.width; ++j) {
|
|
800
1021
|
const diff = rawBuffer[ptr[0]++] << 8 | rawBuffer[ptr[1]++];
|
|
801
1022
|
pixel += diff;
|
|
802
1023
|
tmpBuffer[writePtr] = pixel;
|
|
803
1024
|
writePtr++;
|
|
804
1025
|
}
|
|
1026
|
+
|
|
805
1027
|
break;
|
|
1028
|
+
|
|
806
1029
|
case 2:
|
|
807
1030
|
ptr[0] = tmpBufferEnd;
|
|
808
1031
|
ptr[1] = ptr[0] + info.width;
|
|
809
1032
|
ptr[2] = ptr[1] + info.width;
|
|
810
1033
|
tmpBufferEnd = ptr[2] + info.width;
|
|
1034
|
+
|
|
811
1035
|
for (let j = 0; j < info.width; ++j) {
|
|
812
1036
|
const diff = rawBuffer[ptr[0]++] << 24 | rawBuffer[ptr[1]++] << 16 | rawBuffer[ptr[2]++] << 8;
|
|
813
1037
|
pixel += diff;
|
|
814
1038
|
tmpBuffer[writePtr] = pixel;
|
|
815
1039
|
writePtr++;
|
|
816
1040
|
}
|
|
1041
|
+
|
|
817
1042
|
break;
|
|
818
1043
|
}
|
|
819
1044
|
}
|
|
820
1045
|
}
|
|
1046
|
+
|
|
821
1047
|
return new DataView(tmpBuffer.buffer);
|
|
822
1048
|
}
|
|
1049
|
+
|
|
823
1050
|
function uncompressDWA(info) {
|
|
824
1051
|
var inDataView = info.viewer;
|
|
825
|
-
var inOffset = {
|
|
826
|
-
|
|
1052
|
+
var inOffset = {
|
|
1053
|
+
value: info.offset.value
|
|
1054
|
+
};
|
|
1055
|
+
var outBuffer = new Uint8Array(info.width * info.lines * (info.channels * info.type * INT16_SIZE)); // Read compression header information
|
|
1056
|
+
|
|
827
1057
|
var dwaHeader = {
|
|
828
1058
|
version: parseInt64(inDataView, inOffset),
|
|
829
1059
|
unknownUncompressedSize: parseInt64(inDataView, inOffset),
|
|
@@ -837,11 +1067,15 @@ class EXRLoader extends THREE.DataTextureLoader {
|
|
|
837
1067
|
totalDcUncompressedCount: parseInt64(inDataView, inOffset),
|
|
838
1068
|
acCompression: parseInt64(inDataView, inOffset)
|
|
839
1069
|
};
|
|
1070
|
+
|
|
840
1071
|
if (dwaHeader.version < 2) {
|
|
841
|
-
throw
|
|
842
|
-
}
|
|
1072
|
+
throw 'EXRLoader.parse: ' + EXRHeader.compression + ' version ' + dwaHeader.version + ' is unsupported';
|
|
1073
|
+
} // Read channel ruleset information
|
|
1074
|
+
|
|
1075
|
+
|
|
843
1076
|
var channelRules = new Array();
|
|
844
1077
|
var ruleSize = parseUint16(inDataView, inOffset) - INT16_SIZE;
|
|
1078
|
+
|
|
845
1079
|
while (ruleSize > 0) {
|
|
846
1080
|
var name = parseNullTerminatedString(inDataView.buffer, inOffset);
|
|
847
1081
|
var value = parseUint8(inDataView, inOffset);
|
|
@@ -850,15 +1084,18 @@ class EXRLoader extends THREE.DataTextureLoader {
|
|
|
850
1084
|
var index = new Int8Array([csc])[0];
|
|
851
1085
|
var type = parseUint8(inDataView, inOffset);
|
|
852
1086
|
channelRules.push({
|
|
853
|
-
name,
|
|
854
|
-
index,
|
|
855
|
-
type,
|
|
856
|
-
compression
|
|
1087
|
+
name: name,
|
|
1088
|
+
index: index,
|
|
1089
|
+
type: type,
|
|
1090
|
+
compression: compression
|
|
857
1091
|
});
|
|
858
1092
|
ruleSize -= name.length + 3;
|
|
859
|
-
}
|
|
1093
|
+
} // Classify channels
|
|
1094
|
+
|
|
1095
|
+
|
|
860
1096
|
var channels = EXRHeader.channels;
|
|
861
1097
|
var channelData = new Array(info.channels);
|
|
1098
|
+
|
|
862
1099
|
for (var i = 0; i < info.channels; ++i) {
|
|
863
1100
|
var cd = channelData[i] = {};
|
|
864
1101
|
var channel = channels[i];
|
|
@@ -870,43 +1107,48 @@ class EXRLoader extends THREE.DataTextureLoader {
|
|
|
870
1107
|
cd.width = info.width;
|
|
871
1108
|
cd.height = info.lines;
|
|
872
1109
|
}
|
|
1110
|
+
|
|
873
1111
|
var cscSet = {
|
|
874
1112
|
idx: new Array(3)
|
|
875
1113
|
};
|
|
876
|
-
|
|
877
|
-
|
|
1114
|
+
|
|
1115
|
+
for (var offset = 0; offset < info.channels; ++offset) {
|
|
1116
|
+
var cd = channelData[offset];
|
|
1117
|
+
|
|
878
1118
|
for (var i = 0; i < channelRules.length; ++i) {
|
|
879
1119
|
var rule = channelRules[i];
|
|
1120
|
+
|
|
880
1121
|
if (cd.name == rule.name) {
|
|
881
1122
|
cd.compression = rule.compression;
|
|
1123
|
+
|
|
882
1124
|
if (rule.index >= 0) {
|
|
883
|
-
cscSet.idx[rule.index] =
|
|
1125
|
+
cscSet.idx[rule.index] = offset;
|
|
884
1126
|
}
|
|
885
|
-
|
|
1127
|
+
|
|
1128
|
+
cd.offset = offset;
|
|
886
1129
|
}
|
|
887
1130
|
}
|
|
888
|
-
}
|
|
1131
|
+
} // Read DCT - AC component data
|
|
1132
|
+
|
|
1133
|
+
|
|
889
1134
|
if (dwaHeader.acCompressedSize > 0) {
|
|
890
1135
|
switch (dwaHeader.acCompression) {
|
|
891
1136
|
case STATIC_HUFFMAN:
|
|
892
1137
|
var acBuffer = new Uint16Array(dwaHeader.totalAcUncompressedCount);
|
|
893
|
-
hufUncompress(
|
|
894
|
-
info.array,
|
|
895
|
-
inDataView,
|
|
896
|
-
inOffset,
|
|
897
|
-
dwaHeader.acCompressedSize,
|
|
898
|
-
acBuffer,
|
|
899
|
-
dwaHeader.totalAcUncompressedCount
|
|
900
|
-
);
|
|
1138
|
+
hufUncompress(info.array, inDataView, inOffset, dwaHeader.acCompressedSize, acBuffer, dwaHeader.totalAcUncompressedCount);
|
|
901
1139
|
break;
|
|
1140
|
+
|
|
902
1141
|
case DEFLATE:
|
|
903
1142
|
var compressed = info.array.slice(inOffset.value, inOffset.value + dwaHeader.totalAcUncompressedCount);
|
|
904
|
-
var data =
|
|
1143
|
+
var data = unzlibSync(compressed); // eslint-disable-line no-undef
|
|
1144
|
+
|
|
905
1145
|
var acBuffer = new Uint16Array(data.buffer);
|
|
906
1146
|
inOffset.value += dwaHeader.totalAcUncompressedCount;
|
|
907
1147
|
break;
|
|
908
1148
|
}
|
|
909
|
-
}
|
|
1149
|
+
} // Read DCT - DC component data
|
|
1150
|
+
|
|
1151
|
+
|
|
910
1152
|
if (dwaHeader.dcCompressedSize > 0) {
|
|
911
1153
|
var zlibInfo = {
|
|
912
1154
|
array: info.array,
|
|
@@ -915,404 +1157,505 @@ class EXRLoader extends THREE.DataTextureLoader {
|
|
|
915
1157
|
};
|
|
916
1158
|
var dcBuffer = new Uint16Array(uncompressZIP(zlibInfo).buffer);
|
|
917
1159
|
inOffset.value += dwaHeader.dcCompressedSize;
|
|
918
|
-
}
|
|
1160
|
+
} // Read RLE compressed data
|
|
1161
|
+
|
|
1162
|
+
|
|
919
1163
|
if (dwaHeader.rleRawSize > 0) {
|
|
920
1164
|
var compressed = info.array.slice(inOffset.value, inOffset.value + dwaHeader.rleCompressedSize);
|
|
921
|
-
var data =
|
|
1165
|
+
var data = unzlibSync(compressed); // eslint-disable-line no-undef
|
|
1166
|
+
|
|
922
1167
|
var rleBuffer = decodeRunLength(data.buffer);
|
|
923
1168
|
inOffset.value += dwaHeader.rleCompressedSize;
|
|
924
|
-
}
|
|
1169
|
+
} // Prepare outbuffer data offset
|
|
1170
|
+
|
|
1171
|
+
|
|
925
1172
|
var outBufferEnd = 0;
|
|
926
1173
|
var rowOffsets = new Array(channelData.length);
|
|
1174
|
+
|
|
927
1175
|
for (var i = 0; i < rowOffsets.length; ++i) {
|
|
928
1176
|
rowOffsets[i] = new Array();
|
|
929
1177
|
}
|
|
1178
|
+
|
|
930
1179
|
for (var y = 0; y < info.lines; ++y) {
|
|
931
1180
|
for (var chan = 0; chan < channelData.length; ++chan) {
|
|
932
1181
|
rowOffsets[chan].push(outBufferEnd);
|
|
933
1182
|
outBufferEnd += channelData[chan].width * info.type * INT16_SIZE;
|
|
934
1183
|
}
|
|
935
|
-
}
|
|
936
|
-
|
|
1184
|
+
} // Lossy DCT decode RGB channels
|
|
1185
|
+
|
|
1186
|
+
|
|
1187
|
+
lossyDctDecode(cscSet, rowOffsets, channelData, acBuffer, dcBuffer, outBuffer); // Decode other channels
|
|
1188
|
+
|
|
937
1189
|
for (var i = 0; i < channelData.length; ++i) {
|
|
938
1190
|
var cd = channelData[i];
|
|
939
|
-
if (cd.decoded)
|
|
940
|
-
|
|
1191
|
+
if (cd.decoded) continue;
|
|
1192
|
+
|
|
941
1193
|
switch (cd.compression) {
|
|
942
1194
|
case RLE:
|
|
943
1195
|
var row = 0;
|
|
944
1196
|
var rleOffset = 0;
|
|
1197
|
+
|
|
945
1198
|
for (var y = 0; y < info.lines; ++y) {
|
|
946
1199
|
var rowOffsetBytes = rowOffsets[i][row];
|
|
1200
|
+
|
|
947
1201
|
for (var x = 0; x < cd.width; ++x) {
|
|
948
1202
|
for (var byte = 0; byte < INT16_SIZE * cd.type; ++byte) {
|
|
949
1203
|
outBuffer[rowOffsetBytes++] = rleBuffer[rleOffset + byte * cd.width * cd.height];
|
|
950
1204
|
}
|
|
1205
|
+
|
|
951
1206
|
rleOffset++;
|
|
952
1207
|
}
|
|
1208
|
+
|
|
953
1209
|
row++;
|
|
954
1210
|
}
|
|
1211
|
+
|
|
955
1212
|
break;
|
|
956
|
-
|
|
1213
|
+
|
|
1214
|
+
case LOSSY_DCT: // skip
|
|
1215
|
+
|
|
957
1216
|
default:
|
|
958
|
-
throw
|
|
1217
|
+
throw 'EXRLoader.parse: unsupported channel compression';
|
|
959
1218
|
}
|
|
960
1219
|
}
|
|
1220
|
+
|
|
961
1221
|
return new DataView(outBuffer.buffer);
|
|
962
1222
|
}
|
|
963
|
-
|
|
964
|
-
|
|
1223
|
+
|
|
1224
|
+
function parseNullTerminatedString(buffer, offset) {
|
|
1225
|
+
var uintBuffer = new Uint8Array(buffer);
|
|
965
1226
|
var endOffset = 0;
|
|
966
|
-
|
|
1227
|
+
|
|
1228
|
+
while (uintBuffer[offset.value + endOffset] != 0) {
|
|
967
1229
|
endOffset += 1;
|
|
968
1230
|
}
|
|
969
|
-
|
|
970
|
-
|
|
1231
|
+
|
|
1232
|
+
var stringValue = new TextDecoder().decode(uintBuffer.slice(offset.value, offset.value + endOffset));
|
|
1233
|
+
offset.value = offset.value + endOffset + 1;
|
|
971
1234
|
return stringValue;
|
|
972
1235
|
}
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
1236
|
+
|
|
1237
|
+
function parseFixedLengthString(buffer, offset, size) {
|
|
1238
|
+
var stringValue = new TextDecoder().decode(new Uint8Array(buffer).slice(offset.value, offset.value + size));
|
|
1239
|
+
offset.value = offset.value + size;
|
|
976
1240
|
return stringValue;
|
|
977
1241
|
}
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
var
|
|
1242
|
+
|
|
1243
|
+
function parseRational(dataView, offset) {
|
|
1244
|
+
var x = parseInt32(dataView, offset);
|
|
1245
|
+
var y = parseUint32(dataView, offset);
|
|
981
1246
|
return [x, y];
|
|
982
1247
|
}
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
var
|
|
1248
|
+
|
|
1249
|
+
function parseTimecode(dataView, offset) {
|
|
1250
|
+
var x = parseUint32(dataView, offset);
|
|
1251
|
+
var y = parseUint32(dataView, offset);
|
|
986
1252
|
return [x, y];
|
|
987
1253
|
}
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
1254
|
+
|
|
1255
|
+
function parseInt32(dataView, offset) {
|
|
1256
|
+
var Int32 = dataView.getInt32(offset.value, true);
|
|
1257
|
+
offset.value = offset.value + INT32_SIZE;
|
|
991
1258
|
return Int32;
|
|
992
1259
|
}
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
1260
|
+
|
|
1261
|
+
function parseUint32(dataView, offset) {
|
|
1262
|
+
var Uint32 = dataView.getUint32(offset.value, true);
|
|
1263
|
+
offset.value = offset.value + INT32_SIZE;
|
|
996
1264
|
return Uint32;
|
|
997
1265
|
}
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1266
|
+
|
|
1267
|
+
function parseUint8Array(uInt8Array, offset) {
|
|
1268
|
+
var Uint8 = uInt8Array[offset.value];
|
|
1269
|
+
offset.value = offset.value + INT8_SIZE;
|
|
1001
1270
|
return Uint8;
|
|
1002
1271
|
}
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1272
|
+
|
|
1273
|
+
function parseUint8(dataView, offset) {
|
|
1274
|
+
var Uint8 = dataView.getUint8(offset.value);
|
|
1275
|
+
offset.value = offset.value + INT8_SIZE;
|
|
1006
1276
|
return Uint8;
|
|
1007
1277
|
}
|
|
1008
|
-
|
|
1278
|
+
|
|
1279
|
+
const parseInt64 = function (dataView, offset) {
|
|
1009
1280
|
let int;
|
|
1010
|
-
|
|
1011
|
-
|
|
1281
|
+
|
|
1282
|
+
if ('getBigInt64' in DataView.prototype) {
|
|
1283
|
+
int = Number(dataView.getBigInt64(offset.value, true));
|
|
1012
1284
|
} else {
|
|
1013
|
-
int = dataView.getUint32(
|
|
1285
|
+
int = dataView.getUint32(offset.value + 4, true) + Number(dataView.getUint32(offset.value, true) << 32);
|
|
1014
1286
|
}
|
|
1015
|
-
|
|
1287
|
+
|
|
1288
|
+
offset.value += ULONG_SIZE;
|
|
1016
1289
|
return int;
|
|
1017
1290
|
};
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1291
|
+
|
|
1292
|
+
function parseFloat32(dataView, offset) {
|
|
1293
|
+
var float = dataView.getFloat32(offset.value, true);
|
|
1294
|
+
offset.value += FLOAT32_SIZE;
|
|
1021
1295
|
return float;
|
|
1022
1296
|
}
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1297
|
+
|
|
1298
|
+
function decodeFloat32(dataView, offset) {
|
|
1299
|
+
return DataUtils.toHalfFloat(parseFloat32(dataView, offset));
|
|
1300
|
+
} // https://stackoverflow.com/questions/5678432/decompressing-half-precision-floats-in-javascript
|
|
1301
|
+
|
|
1302
|
+
|
|
1026
1303
|
function decodeFloat16(binary) {
|
|
1027
|
-
var exponent = (binary &
|
|
1028
|
-
|
|
1304
|
+
var exponent = (binary & 0x7c00) >> 10,
|
|
1305
|
+
fraction = binary & 0x03ff;
|
|
1306
|
+
return (binary >> 15 ? -1 : 1) * (exponent ? exponent === 0x1f ? fraction ? NaN : Infinity : Math.pow(2, exponent - 15) * (1 + fraction / 0x400) : 6.103515625e-5 * (fraction / 0x400));
|
|
1029
1307
|
}
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1308
|
+
|
|
1309
|
+
function parseUint16(dataView, offset) {
|
|
1310
|
+
var Uint16 = dataView.getUint16(offset.value, true);
|
|
1311
|
+
offset.value += INT16_SIZE;
|
|
1033
1312
|
return Uint16;
|
|
1034
1313
|
}
|
|
1035
|
-
|
|
1036
|
-
|
|
1314
|
+
|
|
1315
|
+
function parseFloat16(buffer, offset) {
|
|
1316
|
+
return decodeFloat16(parseUint16(buffer, offset));
|
|
1037
1317
|
}
|
|
1038
|
-
|
|
1039
|
-
|
|
1318
|
+
|
|
1319
|
+
function parseChlist(dataView, buffer, offset, size) {
|
|
1320
|
+
var startOffset = offset.value;
|
|
1040
1321
|
var channels = [];
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
var
|
|
1044
|
-
var
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1322
|
+
|
|
1323
|
+
while (offset.value < startOffset + size - 1) {
|
|
1324
|
+
var name = parseNullTerminatedString(buffer, offset);
|
|
1325
|
+
var pixelType = parseInt32(dataView, offset);
|
|
1326
|
+
var pLinear = parseUint8(dataView, offset);
|
|
1327
|
+
offset.value += 3; // reserved, three chars
|
|
1328
|
+
|
|
1329
|
+
var xSampling = parseInt32(dataView, offset);
|
|
1330
|
+
var ySampling = parseInt32(dataView, offset);
|
|
1048
1331
|
channels.push({
|
|
1049
|
-
name,
|
|
1050
|
-
pixelType,
|
|
1051
|
-
pLinear,
|
|
1052
|
-
xSampling,
|
|
1053
|
-
ySampling
|
|
1332
|
+
name: name,
|
|
1333
|
+
pixelType: pixelType,
|
|
1334
|
+
pLinear: pLinear,
|
|
1335
|
+
xSampling: xSampling,
|
|
1336
|
+
ySampling: ySampling
|
|
1054
1337
|
});
|
|
1055
1338
|
}
|
|
1056
|
-
|
|
1339
|
+
|
|
1340
|
+
offset.value += 1;
|
|
1057
1341
|
return channels;
|
|
1058
1342
|
}
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
var
|
|
1062
|
-
var
|
|
1063
|
-
var
|
|
1064
|
-
var
|
|
1065
|
-
var
|
|
1066
|
-
var
|
|
1067
|
-
var
|
|
1343
|
+
|
|
1344
|
+
function parseChromaticities(dataView, offset) {
|
|
1345
|
+
var redX = parseFloat32(dataView, offset);
|
|
1346
|
+
var redY = parseFloat32(dataView, offset);
|
|
1347
|
+
var greenX = parseFloat32(dataView, offset);
|
|
1348
|
+
var greenY = parseFloat32(dataView, offset);
|
|
1349
|
+
var blueX = parseFloat32(dataView, offset);
|
|
1350
|
+
var blueY = parseFloat32(dataView, offset);
|
|
1351
|
+
var whiteX = parseFloat32(dataView, offset);
|
|
1352
|
+
var whiteY = parseFloat32(dataView, offset);
|
|
1068
1353
|
return {
|
|
1069
|
-
redX,
|
|
1070
|
-
redY,
|
|
1071
|
-
greenX,
|
|
1072
|
-
greenY,
|
|
1073
|
-
blueX,
|
|
1074
|
-
blueY,
|
|
1075
|
-
whiteX,
|
|
1076
|
-
whiteY
|
|
1354
|
+
redX: redX,
|
|
1355
|
+
redY: redY,
|
|
1356
|
+
greenX: greenX,
|
|
1357
|
+
greenY: greenY,
|
|
1358
|
+
blueX: blueX,
|
|
1359
|
+
blueY: blueY,
|
|
1360
|
+
whiteX: whiteX,
|
|
1361
|
+
whiteY: whiteY
|
|
1077
1362
|
};
|
|
1078
1363
|
}
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
"ZIPS_COMPRESSION",
|
|
1084
|
-
"ZIP_COMPRESSION",
|
|
1085
|
-
"PIZ_COMPRESSION",
|
|
1086
|
-
"PXR24_COMPRESSION",
|
|
1087
|
-
"B44_COMPRESSION",
|
|
1088
|
-
"B44A_COMPRESSION",
|
|
1089
|
-
"DWAA_COMPRESSION",
|
|
1090
|
-
"DWAB_COMPRESSION"
|
|
1091
|
-
];
|
|
1092
|
-
var compression = parseUint8(dataView, offset2);
|
|
1364
|
+
|
|
1365
|
+
function parseCompression(dataView, offset) {
|
|
1366
|
+
var compressionCodes = ['NO_COMPRESSION', 'RLE_COMPRESSION', 'ZIPS_COMPRESSION', 'ZIP_COMPRESSION', 'PIZ_COMPRESSION', 'PXR24_COMPRESSION', 'B44_COMPRESSION', 'B44A_COMPRESSION', 'DWAA_COMPRESSION', 'DWAB_COMPRESSION'];
|
|
1367
|
+
var compression = parseUint8(dataView, offset);
|
|
1093
1368
|
return compressionCodes[compression];
|
|
1094
1369
|
}
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
var
|
|
1098
|
-
var
|
|
1099
|
-
var
|
|
1100
|
-
|
|
1370
|
+
|
|
1371
|
+
function parseBox2i(dataView, offset) {
|
|
1372
|
+
var xMin = parseUint32(dataView, offset);
|
|
1373
|
+
var yMin = parseUint32(dataView, offset);
|
|
1374
|
+
var xMax = parseUint32(dataView, offset);
|
|
1375
|
+
var yMax = parseUint32(dataView, offset);
|
|
1376
|
+
return {
|
|
1377
|
+
xMin: xMin,
|
|
1378
|
+
yMin: yMin,
|
|
1379
|
+
xMax: xMax,
|
|
1380
|
+
yMax: yMax
|
|
1381
|
+
};
|
|
1101
1382
|
}
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
var
|
|
1383
|
+
|
|
1384
|
+
function parseLineOrder(dataView, offset) {
|
|
1385
|
+
var lineOrders = ['INCREASING_Y'];
|
|
1386
|
+
var lineOrder = parseUint8(dataView, offset);
|
|
1105
1387
|
return lineOrders[lineOrder];
|
|
1106
1388
|
}
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
var
|
|
1389
|
+
|
|
1390
|
+
function parseV2f(dataView, offset) {
|
|
1391
|
+
var x = parseFloat32(dataView, offset);
|
|
1392
|
+
var y = parseFloat32(dataView, offset);
|
|
1110
1393
|
return [x, y];
|
|
1111
1394
|
}
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
var
|
|
1115
|
-
var
|
|
1395
|
+
|
|
1396
|
+
function parseV3f(dataView, offset) {
|
|
1397
|
+
var x = parseFloat32(dataView, offset);
|
|
1398
|
+
var y = parseFloat32(dataView, offset);
|
|
1399
|
+
var z = parseFloat32(dataView, offset);
|
|
1116
1400
|
return [x, y, z];
|
|
1117
1401
|
}
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1402
|
+
|
|
1403
|
+
function parseValue(dataView, buffer, offset, type, size) {
|
|
1404
|
+
if (type === 'string' || type === 'stringvector' || type === 'iccProfile') {
|
|
1405
|
+
return parseFixedLengthString(buffer, offset, size);
|
|
1406
|
+
} else if (type === 'chlist') {
|
|
1407
|
+
return parseChlist(dataView, buffer, offset, size);
|
|
1408
|
+
} else if (type === 'chromaticities') {
|
|
1409
|
+
return parseChromaticities(dataView, offset);
|
|
1410
|
+
} else if (type === 'compression') {
|
|
1411
|
+
return parseCompression(dataView, offset);
|
|
1412
|
+
} else if (type === 'box2i') {
|
|
1413
|
+
return parseBox2i(dataView, offset);
|
|
1414
|
+
} else if (type === 'lineOrder') {
|
|
1415
|
+
return parseLineOrder(dataView, offset);
|
|
1416
|
+
} else if (type === 'float') {
|
|
1417
|
+
return parseFloat32(dataView, offset);
|
|
1418
|
+
} else if (type === 'v2f') {
|
|
1419
|
+
return parseV2f(dataView, offset);
|
|
1420
|
+
} else if (type === 'v3f') {
|
|
1421
|
+
return parseV3f(dataView, offset);
|
|
1422
|
+
} else if (type === 'int') {
|
|
1423
|
+
return parseInt32(dataView, offset);
|
|
1424
|
+
} else if (type === 'rational') {
|
|
1425
|
+
return parseRational(dataView, offset);
|
|
1426
|
+
} else if (type === 'timecode') {
|
|
1427
|
+
return parseTimecode(dataView, offset);
|
|
1428
|
+
} else if (type === 'preview') {
|
|
1429
|
+
offset.value += size;
|
|
1430
|
+
return 'skipped';
|
|
1146
1431
|
} else {
|
|
1147
|
-
|
|
1148
|
-
return
|
|
1432
|
+
offset.value += size;
|
|
1433
|
+
return undefined;
|
|
1149
1434
|
}
|
|
1150
1435
|
}
|
|
1151
|
-
|
|
1152
|
-
|
|
1436
|
+
|
|
1437
|
+
function parseHeader(dataView, buffer, offset) {
|
|
1438
|
+
const EXRHeader = {};
|
|
1439
|
+
|
|
1153
1440
|
if (dataView.getUint32(0, true) != 20000630) {
|
|
1441
|
+
// magic
|
|
1154
1442
|
throw "THREE.EXRLoader: provided file doesn't appear to be in OpenEXR format.";
|
|
1155
1443
|
}
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1444
|
+
|
|
1445
|
+
EXRHeader.version = dataView.getUint8(4);
|
|
1446
|
+
const spec = dataView.getUint8(5); // fullMask
|
|
1447
|
+
|
|
1448
|
+
EXRHeader.spec = {
|
|
1159
1449
|
singleTile: !!(spec & 2),
|
|
1160
1450
|
longName: !!(spec & 4),
|
|
1161
1451
|
deepFormat: !!(spec & 8),
|
|
1162
1452
|
multiPart: !!(spec & 16)
|
|
1163
|
-
};
|
|
1164
|
-
|
|
1453
|
+
}; // start of header
|
|
1454
|
+
|
|
1455
|
+
offset.value = 8; // start at 8 - after pre-amble
|
|
1456
|
+
|
|
1165
1457
|
var keepReading = true;
|
|
1458
|
+
|
|
1166
1459
|
while (keepReading) {
|
|
1167
|
-
var attributeName = parseNullTerminatedString(
|
|
1460
|
+
var attributeName = parseNullTerminatedString(buffer, offset);
|
|
1461
|
+
|
|
1168
1462
|
if (attributeName == 0) {
|
|
1169
1463
|
keepReading = false;
|
|
1170
1464
|
} else {
|
|
1171
|
-
var attributeType = parseNullTerminatedString(
|
|
1172
|
-
var attributeSize = parseUint32(dataView,
|
|
1173
|
-
var attributeValue = parseValue(dataView,
|
|
1174
|
-
|
|
1175
|
-
|
|
1465
|
+
var attributeType = parseNullTerminatedString(buffer, offset);
|
|
1466
|
+
var attributeSize = parseUint32(dataView, offset);
|
|
1467
|
+
var attributeValue = parseValue(dataView, buffer, offset, attributeType, attributeSize);
|
|
1468
|
+
|
|
1469
|
+
if (attributeValue === undefined) {
|
|
1470
|
+
console.warn(`EXRLoader.parse: skipped unknown header attribute type \'${attributeType}\'.`);
|
|
1176
1471
|
} else {
|
|
1177
|
-
|
|
1472
|
+
EXRHeader[attributeName] = attributeValue;
|
|
1178
1473
|
}
|
|
1179
1474
|
}
|
|
1180
1475
|
}
|
|
1476
|
+
|
|
1181
1477
|
if (spec != 0) {
|
|
1182
|
-
console.error(
|
|
1183
|
-
throw
|
|
1478
|
+
console.error('EXRHeader:', EXRHeader);
|
|
1479
|
+
throw 'THREE.EXRLoader: provided file is currently unsupported.';
|
|
1184
1480
|
}
|
|
1185
|
-
|
|
1481
|
+
|
|
1482
|
+
return EXRHeader;
|
|
1186
1483
|
}
|
|
1187
|
-
|
|
1188
|
-
|
|
1484
|
+
|
|
1485
|
+
function setupDecoder(EXRHeader, dataView, uInt8Array, offset, outputType) {
|
|
1486
|
+
const EXRDecoder = {
|
|
1189
1487
|
size: 0,
|
|
1190
1488
|
viewer: dataView,
|
|
1191
|
-
array:
|
|
1192
|
-
offset:
|
|
1193
|
-
width:
|
|
1194
|
-
height:
|
|
1195
|
-
channels:
|
|
1489
|
+
array: uInt8Array,
|
|
1490
|
+
offset: offset,
|
|
1491
|
+
width: EXRHeader.dataWindow.xMax - EXRHeader.dataWindow.xMin + 1,
|
|
1492
|
+
height: EXRHeader.dataWindow.yMax - EXRHeader.dataWindow.yMin + 1,
|
|
1493
|
+
channels: EXRHeader.channels.length,
|
|
1196
1494
|
bytesPerLine: null,
|
|
1197
1495
|
lines: null,
|
|
1198
1496
|
inputSize: null,
|
|
1199
|
-
type:
|
|
1497
|
+
type: EXRHeader.channels[0].pixelType,
|
|
1200
1498
|
uncompress: null,
|
|
1201
1499
|
getter: null,
|
|
1202
1500
|
format: null,
|
|
1203
1501
|
encoding: null
|
|
1204
1502
|
};
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1503
|
+
|
|
1504
|
+
switch (EXRHeader.compression) {
|
|
1505
|
+
case 'NO_COMPRESSION':
|
|
1506
|
+
EXRDecoder.lines = 1;
|
|
1507
|
+
EXRDecoder.uncompress = uncompressRAW;
|
|
1209
1508
|
break;
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1509
|
+
|
|
1510
|
+
case 'RLE_COMPRESSION':
|
|
1511
|
+
EXRDecoder.lines = 1;
|
|
1512
|
+
EXRDecoder.uncompress = uncompressRLE;
|
|
1213
1513
|
break;
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1514
|
+
|
|
1515
|
+
case 'ZIPS_COMPRESSION':
|
|
1516
|
+
EXRDecoder.lines = 1;
|
|
1517
|
+
EXRDecoder.uncompress = uncompressZIP;
|
|
1217
1518
|
break;
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1519
|
+
|
|
1520
|
+
case 'ZIP_COMPRESSION':
|
|
1521
|
+
EXRDecoder.lines = 16;
|
|
1522
|
+
EXRDecoder.uncompress = uncompressZIP;
|
|
1221
1523
|
break;
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1524
|
+
|
|
1525
|
+
case 'PIZ_COMPRESSION':
|
|
1526
|
+
EXRDecoder.lines = 32;
|
|
1527
|
+
EXRDecoder.uncompress = uncompressPIZ;
|
|
1225
1528
|
break;
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1529
|
+
|
|
1530
|
+
case 'PXR24_COMPRESSION':
|
|
1531
|
+
EXRDecoder.lines = 16;
|
|
1532
|
+
EXRDecoder.uncompress = uncompressPXR;
|
|
1229
1533
|
break;
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1534
|
+
|
|
1535
|
+
case 'DWAA_COMPRESSION':
|
|
1536
|
+
EXRDecoder.lines = 32;
|
|
1537
|
+
EXRDecoder.uncompress = uncompressDWA;
|
|
1233
1538
|
break;
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1539
|
+
|
|
1540
|
+
case 'DWAB_COMPRESSION':
|
|
1541
|
+
EXRDecoder.lines = 256;
|
|
1542
|
+
EXRDecoder.uncompress = uncompressDWA;
|
|
1237
1543
|
break;
|
|
1544
|
+
|
|
1238
1545
|
default:
|
|
1239
|
-
throw
|
|
1546
|
+
throw 'EXRLoader.parse: ' + EXRHeader.compression + ' is unsupported';
|
|
1240
1547
|
}
|
|
1241
|
-
|
|
1242
|
-
|
|
1548
|
+
|
|
1549
|
+
EXRDecoder.scanlineBlockSize = EXRDecoder.lines;
|
|
1550
|
+
|
|
1551
|
+
if (EXRDecoder.type == 1) {
|
|
1552
|
+
// half
|
|
1243
1553
|
switch (outputType) {
|
|
1244
|
-
case
|
|
1245
|
-
|
|
1246
|
-
|
|
1554
|
+
case FloatType:
|
|
1555
|
+
EXRDecoder.getter = parseFloat16;
|
|
1556
|
+
EXRDecoder.inputSize = INT16_SIZE;
|
|
1247
1557
|
break;
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1558
|
+
|
|
1559
|
+
case HalfFloatType:
|
|
1560
|
+
EXRDecoder.getter = parseUint16;
|
|
1561
|
+
EXRDecoder.inputSize = INT16_SIZE;
|
|
1251
1562
|
break;
|
|
1252
1563
|
}
|
|
1253
|
-
} else if (
|
|
1564
|
+
} else if (EXRDecoder.type == 2) {
|
|
1565
|
+
// float
|
|
1254
1566
|
switch (outputType) {
|
|
1255
|
-
case
|
|
1256
|
-
|
|
1257
|
-
|
|
1567
|
+
case FloatType:
|
|
1568
|
+
EXRDecoder.getter = parseFloat32;
|
|
1569
|
+
EXRDecoder.inputSize = FLOAT32_SIZE;
|
|
1258
1570
|
break;
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1571
|
+
|
|
1572
|
+
case HalfFloatType:
|
|
1573
|
+
EXRDecoder.getter = decodeFloat32;
|
|
1574
|
+
EXRDecoder.inputSize = FLOAT32_SIZE;
|
|
1262
1575
|
}
|
|
1263
1576
|
} else {
|
|
1264
|
-
throw
|
|
1577
|
+
throw 'EXRLoader.parse: unsupported pixelType ' + EXRDecoder.type + ' for ' + EXRHeader.compression + '.';
|
|
1265
1578
|
}
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1579
|
+
|
|
1580
|
+
EXRDecoder.blockCount = (EXRHeader.dataWindow.yMax + 1) / EXRDecoder.scanlineBlockSize;
|
|
1581
|
+
|
|
1582
|
+
for (var i = 0; i < EXRDecoder.blockCount; i++) parseInt64(dataView, offset); // scanlineOffset
|
|
1583
|
+
// we should be passed the scanline offset table, ready to start reading pixel data.
|
|
1584
|
+
// RGB images will be converted to RGBA format, preventing software emulation in select devices.
|
|
1585
|
+
|
|
1586
|
+
|
|
1587
|
+
EXRDecoder.outputChannels = EXRDecoder.channels == 3 ? 4 : EXRDecoder.channels;
|
|
1588
|
+
const size = EXRDecoder.width * EXRDecoder.height * EXRDecoder.outputChannels;
|
|
1589
|
+
|
|
1271
1590
|
switch (outputType) {
|
|
1272
|
-
case
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1591
|
+
case FloatType:
|
|
1592
|
+
EXRDecoder.byteArray = new Float32Array(size); // Fill initially with 1s for the alpha value if the texture is not RGBA, RGB values will be overwritten
|
|
1593
|
+
|
|
1594
|
+
if (EXRDecoder.channels < EXRDecoder.outputChannels) EXRDecoder.byteArray.fill(1, 0, size);
|
|
1276
1595
|
break;
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1596
|
+
|
|
1597
|
+
case HalfFloatType:
|
|
1598
|
+
EXRDecoder.byteArray = new Uint16Array(size);
|
|
1599
|
+
if (EXRDecoder.channels < EXRDecoder.outputChannels) EXRDecoder.byteArray.fill(0x3c00, 0, size); // Uint16Array holds half float data, 0x3C00 is 1
|
|
1600
|
+
|
|
1281
1601
|
break;
|
|
1602
|
+
|
|
1282
1603
|
default:
|
|
1283
|
-
console.error(
|
|
1604
|
+
console.error('THREE.EXRLoader: unsupported type: ', outputType);
|
|
1284
1605
|
break;
|
|
1285
1606
|
}
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1607
|
+
|
|
1608
|
+
EXRDecoder.bytesPerLine = EXRDecoder.width * EXRDecoder.inputSize * EXRDecoder.channels;
|
|
1609
|
+
|
|
1610
|
+
if (EXRDecoder.outputChannels == 4) {
|
|
1611
|
+
EXRDecoder.format = RGBAFormat;
|
|
1612
|
+
EXRDecoder.encoding = LinearEncoding;
|
|
1290
1613
|
} else {
|
|
1291
|
-
|
|
1292
|
-
|
|
1614
|
+
EXRDecoder.format = RedFormat;
|
|
1615
|
+
EXRDecoder.encoding = LinearEncoding;
|
|
1293
1616
|
}
|
|
1294
|
-
|
|
1295
|
-
|
|
1617
|
+
|
|
1618
|
+
return EXRDecoder;
|
|
1619
|
+
} // start parsing file [START]
|
|
1620
|
+
|
|
1621
|
+
|
|
1296
1622
|
const bufferDataView = new DataView(buffer);
|
|
1297
1623
|
const uInt8Array = new Uint8Array(buffer);
|
|
1298
|
-
const offset = {
|
|
1299
|
-
|
|
1624
|
+
const offset = {
|
|
1625
|
+
value: 0
|
|
1626
|
+
}; // get header information and validate format.
|
|
1627
|
+
|
|
1628
|
+
const EXRHeader = parseHeader(bufferDataView, buffer, offset); // get input compression information and prepare decoding.
|
|
1629
|
+
|
|
1300
1630
|
const EXRDecoder = setupDecoder(EXRHeader, bufferDataView, uInt8Array, offset, this.type);
|
|
1301
|
-
const tmpOffset = {
|
|
1302
|
-
|
|
1631
|
+
const tmpOffset = {
|
|
1632
|
+
value: 0
|
|
1633
|
+
};
|
|
1634
|
+
const channelOffsets = {
|
|
1635
|
+
R: 0,
|
|
1636
|
+
G: 1,
|
|
1637
|
+
B: 2,
|
|
1638
|
+
A: 3,
|
|
1639
|
+
Y: 0
|
|
1640
|
+
};
|
|
1641
|
+
|
|
1303
1642
|
for (let scanlineBlockIdx = 0; scanlineBlockIdx < EXRDecoder.height / EXRDecoder.scanlineBlockSize; scanlineBlockIdx++) {
|
|
1304
|
-
const line = parseUint32(bufferDataView, offset);
|
|
1305
|
-
|
|
1643
|
+
const line = parseUint32(bufferDataView, offset); // line_no
|
|
1644
|
+
|
|
1645
|
+
EXRDecoder.size = parseUint32(bufferDataView, offset); // data_len
|
|
1646
|
+
|
|
1306
1647
|
EXRDecoder.lines = line + EXRDecoder.scanlineBlockSize > EXRDecoder.height ? EXRDecoder.height - line : EXRDecoder.scanlineBlockSize;
|
|
1307
1648
|
const isCompressed = EXRDecoder.size < EXRDecoder.lines * EXRDecoder.bytesPerLine;
|
|
1308
1649
|
const viewer = isCompressed ? EXRDecoder.uncompress(EXRDecoder) : uncompressRAW(EXRDecoder);
|
|
1309
1650
|
offset.value += EXRDecoder.size;
|
|
1651
|
+
|
|
1310
1652
|
for (let line_y = 0; line_y < EXRDecoder.scanlineBlockSize; line_y++) {
|
|
1311
1653
|
const true_y = line_y + scanlineBlockIdx * EXRDecoder.scanlineBlockSize;
|
|
1312
|
-
if (true_y >= EXRDecoder.height)
|
|
1313
|
-
|
|
1654
|
+
if (true_y >= EXRDecoder.height) break;
|
|
1655
|
+
|
|
1314
1656
|
for (let channelID = 0; channelID < EXRDecoder.channels; channelID++) {
|
|
1315
1657
|
const cOff = channelOffsets[EXRHeader.channels[channelID].name];
|
|
1658
|
+
|
|
1316
1659
|
for (let x = 0; x < EXRDecoder.width; x++) {
|
|
1317
1660
|
tmpOffset.value = (line_y * (EXRDecoder.channels * EXRDecoder.width) + channelID * EXRDecoder.width + x) * EXRDecoder.inputSize;
|
|
1318
1661
|
const outIndex = (EXRDecoder.height - 1 - true_y) * (EXRDecoder.width * EXRDecoder.outputChannels) + x * EXRDecoder.outputChannels + cOff;
|
|
@@ -1321,6 +1664,7 @@ class EXRLoader extends THREE.DataTextureLoader {
|
|
|
1321
1664
|
}
|
|
1322
1665
|
}
|
|
1323
1666
|
}
|
|
1667
|
+
|
|
1324
1668
|
return {
|
|
1325
1669
|
header: EXRHeader,
|
|
1326
1670
|
width: EXRDecoder.width,
|
|
@@ -1331,21 +1675,25 @@ class EXRLoader extends THREE.DataTextureLoader {
|
|
|
1331
1675
|
type: this.type
|
|
1332
1676
|
};
|
|
1333
1677
|
}
|
|
1678
|
+
|
|
1334
1679
|
setDataType(value) {
|
|
1335
1680
|
this.type = value;
|
|
1336
1681
|
return this;
|
|
1337
1682
|
}
|
|
1683
|
+
|
|
1338
1684
|
load(url, onLoad, onProgress, onError) {
|
|
1339
1685
|
function onLoadCallback(texture, texData) {
|
|
1340
1686
|
texture.encoding = texData.encoding;
|
|
1341
|
-
texture.minFilter =
|
|
1342
|
-
texture.magFilter =
|
|
1687
|
+
texture.minFilter = LinearFilter;
|
|
1688
|
+
texture.magFilter = LinearFilter;
|
|
1343
1689
|
texture.generateMipmaps = false;
|
|
1344
1690
|
texture.flipY = false;
|
|
1345
|
-
if (onLoad)
|
|
1346
|
-
onLoad(texture, texData);
|
|
1691
|
+
if (onLoad) onLoad(texture, texData);
|
|
1347
1692
|
}
|
|
1693
|
+
|
|
1348
1694
|
return super.load(url, onLoadCallback, onProgress, onError);
|
|
1349
1695
|
}
|
|
1696
|
+
|
|
1350
1697
|
}
|
|
1351
|
-
|
|
1698
|
+
|
|
1699
|
+
export { EXRLoader };
|