super-three 0.133.2 → 0.135.0

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.
Files changed (246) hide show
  1. package/build/three.js +619 -538
  2. package/build/three.min.js +1 -1
  3. package/build/three.module.js +763 -616
  4. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff +0 -0
  5. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff2 +0 -0
  6. package/examples/fonts/open-sans/open-sans.css +9 -0
  7. package/examples/fonts/tabler-icons/fonts/tabler-icons.eot +0 -0
  8. package/examples/fonts/tabler-icons/fonts/tabler-icons.ttf +0 -0
  9. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff +0 -0
  10. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff2 +0 -0
  11. package/examples/fonts/tabler-icons/tabler-icons.min.css +4 -0
  12. package/examples/js/controls/ArcballControls.js +68 -27
  13. package/examples/js/controls/DragControls.js +7 -0
  14. package/examples/js/controls/OrbitControls.js +5 -36
  15. package/examples/js/controls/TrackballControls.js +3 -2
  16. package/examples/js/csm/CSM.js +2 -2
  17. package/examples/js/csm/CSMFrustum.js +133 -0
  18. package/examples/js/exporters/GLTFExporter.js +147 -63
  19. package/examples/js/exporters/USDZExporter.js +45 -26
  20. package/examples/js/lines/LineMaterial.js +58 -20
  21. package/examples/js/lines/LineSegments2.js +29 -24
  22. package/examples/js/loaders/3DMLoader.js +24 -11
  23. package/examples/js/loaders/3MFLoader.js +2 -2
  24. package/examples/js/loaders/ColladaLoader.js +61 -3
  25. package/examples/js/loaders/FBXLoader.js +1 -1
  26. package/examples/js/loaders/GLTFLoader.js +94 -31
  27. package/examples/js/loaders/KTX2Loader.js +12 -0
  28. package/examples/js/loaders/LWOLoader.js +8 -6
  29. package/examples/js/loaders/LogLuvLoader.js +766 -0
  30. package/examples/js/loaders/PLYLoader.js +32 -7
  31. package/examples/js/loaders/RGBELoader.js +2 -1
  32. package/examples/js/loaders/SVGLoader.js +7 -3
  33. package/examples/js/loaders/TDSLoader.js +237 -271
  34. package/examples/js/loaders/lwo/LWO2Parser.js +1 -0
  35. package/examples/js/loaders/lwo/LWO3Parser.js +4 -2
  36. package/examples/js/objects/MarchingCubes.js +42 -128
  37. package/examples/js/renderers/CSS2DRenderer.js +4 -4
  38. package/examples/js/renderers/CSS3DRenderer.js +4 -4
  39. package/examples/js/utils/RoughnessMipmapper.js +1 -0
  40. package/examples/jsm/controls/ArcballControls.js +61 -29
  41. package/examples/jsm/controls/DragControls.js +7 -0
  42. package/examples/jsm/controls/OrbitControls.js +9 -51
  43. package/examples/jsm/controls/TrackballControls.js +1 -1
  44. package/examples/jsm/csm/CSM.js +3 -3
  45. package/examples/jsm/csm/{Frustum.js → CSMFrustum.js} +3 -3
  46. package/examples/jsm/exporters/GLTFExporter.js +160 -74
  47. package/examples/jsm/exporters/USDZExporter.js +47 -26
  48. package/examples/jsm/libs/flow.module.js +3218 -0
  49. package/examples/jsm/libs/lil-gui.module.min.js +8 -0
  50. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  51. package/examples/jsm/lines/LineMaterial.js +59 -23
  52. package/examples/jsm/lines/LineSegments2.js +22 -18
  53. package/examples/jsm/loaders/3DMLoader.js +18 -12
  54. package/examples/jsm/loaders/3MFLoader.js +2 -2
  55. package/examples/jsm/loaders/ColladaLoader.js +61 -3
  56. package/examples/jsm/loaders/FBXLoader.js +1 -1
  57. package/examples/jsm/loaders/GLTFLoader.js +99 -35
  58. package/examples/jsm/loaders/KTX2Loader.js +19 -0
  59. package/examples/jsm/loaders/LWOLoader.js +8 -6
  60. package/examples/jsm/loaders/LogLuvLoader.js +606 -0
  61. package/examples/jsm/loaders/PLYLoader.js +33 -7
  62. package/examples/jsm/loaders/SVGLoader.js +7 -4
  63. package/examples/jsm/loaders/TDSLoader.js +225 -285
  64. package/examples/jsm/loaders/lwo/LWO2Parser.js +1 -0
  65. package/examples/jsm/loaders/lwo/LWO3Parser.js +2 -2
  66. package/examples/jsm/node-editor/NodeEditor.js +455 -0
  67. package/examples/jsm/node-editor/accessors/NormalEditor.js +30 -0
  68. package/examples/jsm/node-editor/accessors/PositionEditor.js +30 -0
  69. package/examples/jsm/node-editor/accessors/UVEditor.js +26 -0
  70. package/examples/jsm/node-editor/display/BlendEditor.js +43 -0
  71. package/examples/jsm/node-editor/examples/animate-uv.json +1 -0
  72. package/examples/jsm/node-editor/examples/fake-top-light.json +1 -0
  73. package/examples/jsm/node-editor/examples/oscillator-color.json +1 -0
  74. package/examples/jsm/node-editor/examples/rim.json +1 -0
  75. package/examples/jsm/node-editor/inputs/ColorEditor.js +91 -0
  76. package/examples/jsm/node-editor/inputs/FloatEditor.js +24 -0
  77. package/examples/jsm/node-editor/inputs/SliderEditor.js +68 -0
  78. package/examples/jsm/node-editor/inputs/Vector2Editor.js +28 -0
  79. package/examples/jsm/node-editor/inputs/Vector3Editor.js +30 -0
  80. package/examples/jsm/node-editor/inputs/Vector4Editor.js +37 -0
  81. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +69 -0
  82. package/examples/jsm/node-editor/math/DotEditor.js +36 -0
  83. package/examples/jsm/node-editor/math/InvertEditor.js +38 -0
  84. package/examples/jsm/node-editor/math/LimiterEditor.js +48 -0
  85. package/examples/jsm/node-editor/math/NormalizeEditor.js +26 -0
  86. package/examples/jsm/node-editor/math/OperatorEditor.js +50 -0
  87. package/examples/jsm/node-editor/math/PowerEditor.js +34 -0
  88. package/examples/jsm/node-editor/math/TrigonometryEditor.js +39 -0
  89. package/examples/jsm/node-editor/procedural/CheckerEditor.js +26 -0
  90. package/examples/jsm/node-editor/utils/OscillatorEditor.js +42 -0
  91. package/examples/jsm/node-editor/utils/TimerEditor.js +57 -0
  92. package/examples/jsm/nodes/materials/StandardNodeMaterial.js +1 -1
  93. package/examples/jsm/nodes/materials/nodes/StandardNode.js +6 -6
  94. package/examples/jsm/nodes/utils/ColorSpaceNode.js +1 -49
  95. package/examples/jsm/objects/MarchingCubes.js +46 -152
  96. package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +1 -1
  97. package/examples/jsm/postprocessing/AfterimagePass.js +1 -1
  98. package/examples/jsm/postprocessing/BloomPass.js +1 -1
  99. package/examples/jsm/postprocessing/BokehPass.js +1 -1
  100. package/examples/jsm/postprocessing/ClearPass.js +1 -1
  101. package/examples/jsm/postprocessing/CubeTexturePass.js +1 -1
  102. package/examples/jsm/postprocessing/DotScreenPass.js +1 -1
  103. package/examples/jsm/postprocessing/EffectComposer.js +3 -3
  104. package/examples/jsm/postprocessing/FilmPass.js +1 -1
  105. package/examples/jsm/postprocessing/GlitchPass.js +1 -1
  106. package/examples/jsm/postprocessing/HalftonePass.js +1 -1
  107. package/examples/jsm/postprocessing/MaskPass.js +1 -1
  108. package/examples/jsm/postprocessing/OutlinePass.js +1 -1
  109. package/examples/jsm/postprocessing/RenderPass.js +1 -1
  110. package/examples/jsm/postprocessing/SAOPass.js +1 -1
  111. package/examples/jsm/postprocessing/SMAAPass.js +1 -1
  112. package/examples/jsm/postprocessing/SSAARenderPass.js +1 -1
  113. package/examples/jsm/postprocessing/SSAOPass.js +1 -1
  114. package/examples/jsm/postprocessing/SSRPass.js +1 -1
  115. package/examples/jsm/postprocessing/SSRrPass.js +1 -1
  116. package/examples/jsm/postprocessing/SavePass.js +1 -1
  117. package/examples/jsm/postprocessing/ShaderPass.js +1 -1
  118. package/examples/jsm/postprocessing/TAARenderPass.js +1 -1
  119. package/examples/jsm/postprocessing/TexturePass.js +1 -1
  120. package/examples/jsm/postprocessing/UnrealBloomPass.js +1 -1
  121. package/examples/jsm/renderers/CSS2DRenderer.js +5 -4
  122. package/examples/jsm/renderers/CSS3DRenderer.js +5 -4
  123. package/examples/jsm/renderers/nodes/Nodes.js +14 -13
  124. package/examples/jsm/renderers/nodes/ShaderNode.js +193 -41
  125. package/examples/jsm/renderers/nodes/accessors/MaterialNode.js +6 -6
  126. package/examples/jsm/renderers/nodes/accessors/ModelViewProjectionNode.js +5 -5
  127. package/examples/jsm/renderers/nodes/accessors/NormalNode.js +14 -3
  128. package/examples/jsm/renderers/nodes/accessors/PointUVNode.js +3 -3
  129. package/examples/jsm/renderers/nodes/accessors/PositionNode.js +15 -5
  130. package/examples/jsm/renderers/nodes/accessors/SkinningNode.js +107 -0
  131. package/examples/jsm/renderers/nodes/accessors/UVNode.js +7 -5
  132. package/examples/jsm/renderers/nodes/core/ArrayInputNode.js +3 -3
  133. package/examples/jsm/renderers/nodes/core/AttributeNode.js +6 -0
  134. package/examples/jsm/renderers/nodes/core/BypassNode.js +38 -0
  135. package/examples/jsm/renderers/nodes/core/CodeNode.js +3 -3
  136. package/examples/jsm/renderers/nodes/core/ContextNode.js +4 -19
  137. package/examples/jsm/renderers/nodes/core/ExpressionNode.js +13 -2
  138. package/examples/jsm/renderers/nodes/core/FunctionNode.js +19 -132
  139. package/examples/jsm/renderers/nodes/core/InputNode.js +13 -3
  140. package/examples/jsm/renderers/nodes/core/Node.js +32 -10
  141. package/examples/jsm/renderers/nodes/core/NodeBuilder.js +146 -128
  142. package/examples/jsm/renderers/nodes/core/NodeFunction.js +22 -0
  143. package/examples/jsm/renderers/nodes/core/NodeFunctionInput.js +4 -4
  144. package/examples/jsm/renderers/nodes/core/NodeKeywords.js +18 -179
  145. package/examples/jsm/renderers/nodes/core/NodeParser.js +11 -0
  146. package/examples/jsm/renderers/nodes/core/NodeVar.js +2 -2
  147. package/examples/jsm/renderers/nodes/core/PropertyNode.js +14 -2
  148. package/examples/jsm/renderers/nodes/core/TempNode.js +10 -13
  149. package/examples/jsm/renderers/nodes/core/VarNode.js +12 -7
  150. package/examples/jsm/renderers/nodes/core/VaryNode.js +23 -8
  151. package/examples/jsm/renderers/nodes/core/constants.js +2 -0
  152. package/examples/jsm/renderers/nodes/display/ColorSpaceNode.js +47 -25
  153. package/examples/jsm/renderers/nodes/display/NormalMapNode.js +21 -22
  154. package/examples/jsm/renderers/nodes/functions/BSDFs.js +64 -101
  155. package/examples/jsm/renderers/nodes/inputs/BufferNode.js +25 -0
  156. package/examples/jsm/renderers/nodes/inputs/IntNode.js +17 -0
  157. package/examples/jsm/renderers/nodes/inputs/TextureNode.js +10 -2
  158. package/examples/jsm/renderers/nodes/lights/LightContextNode.js +20 -14
  159. package/examples/jsm/renderers/nodes/lights/LightNode.js +32 -36
  160. package/examples/jsm/renderers/nodes/math/CondNode.js +60 -0
  161. package/examples/jsm/renderers/nodes/math/MathNode.js +87 -36
  162. package/examples/jsm/renderers/nodes/math/OperatorNode.js +124 -31
  163. package/examples/jsm/renderers/nodes/parsers/GLSLNodeFunction.js +137 -0
  164. package/examples/jsm/renderers/nodes/parsers/GLSLNodeParser.js +14 -0
  165. package/examples/jsm/renderers/nodes/parsers/WGSLNodeFunction.js +89 -0
  166. package/examples/jsm/renderers/nodes/parsers/WGSLNodeParser.js +14 -0
  167. package/examples/jsm/renderers/nodes/procedural/CheckerNode.js +7 -9
  168. package/examples/jsm/renderers/nodes/utils/ArrayElementNode.js +31 -0
  169. package/examples/jsm/renderers/nodes/utils/ConvertNode.js +33 -0
  170. package/examples/jsm/renderers/nodes/utils/JoinNode.js +7 -7
  171. package/examples/jsm/renderers/nodes/utils/OscNode.js +58 -0
  172. package/examples/jsm/renderers/nodes/utils/SplitNode.js +18 -8
  173. package/examples/jsm/renderers/nodes/utils/SpriteSheetUVNode.js +7 -7
  174. package/examples/jsm/renderers/webgl/nodes/SlotNode.js +22 -0
  175. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +191 -94
  176. package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +2 -2
  177. package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +2 -2
  178. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +1 -1
  179. package/examples/jsm/renderers/webgpu/WebGPUBindings.js +3 -3
  180. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +2 -4
  181. package/examples/jsm/renderers/webgpu/WebGPUProgrammableStage.js +2 -4
  182. package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +15 -23
  183. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +3 -5
  184. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +11 -27
  185. package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +62 -28
  186. package/examples/jsm/renderers/webgpu/WebGPUTextures.js +34 -27
  187. package/examples/jsm/renderers/webgpu/constants.js +2 -2
  188. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +430 -98
  189. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
  190. package/examples/jsm/utils/RoughnessMipmapper.js +1 -0
  191. package/examples/jsm/webxr/OculusHandPointerModel.js +6 -6
  192. package/package.json +10 -10
  193. package/src/Three.Legacy.js +6 -0
  194. package/src/Three.js +0 -1
  195. package/src/cameras/StereoCamera.js +8 -7
  196. package/src/constants.js +1 -2
  197. package/src/core/Layers.js +7 -1
  198. package/src/core/Object3D.js +2 -0
  199. package/src/extras/PMREMGenerator.js +11 -6
  200. package/src/loaders/FileLoader.js +89 -152
  201. package/src/loaders/ImageLoader.js +9 -4
  202. package/src/loaders/LoaderUtils.js +26 -0
  203. package/src/loaders/MaterialLoader.js +7 -4
  204. package/src/loaders/ObjectLoader.js +2 -0
  205. package/src/materials/Material.js +4 -4
  206. package/src/materials/MeshPhysicalMaterial.js +20 -14
  207. package/src/math/MathUtils.js +5 -16
  208. package/src/renderers/WebGLMultisampleRenderTarget.js +7 -1
  209. package/src/renderers/WebGLRenderer.js +83 -117
  210. package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +2 -2
  211. package/src/renderers/shaders/ShaderChunk/encodings_pars_fragment.glsl.js +0 -27
  212. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  213. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +19 -6
  214. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
  215. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  216. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +1 -1
  217. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +13 -5
  218. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +2 -1
  219. package/src/renderers/shaders/ShaderLib.js +6 -4
  220. package/src/renderers/shaders/UniformsLib.js +1 -2
  221. package/src/renderers/webgl/WebGLExtensions.js +1 -0
  222. package/src/renderers/webgl/WebGLMaterials.js +27 -15
  223. package/src/renderers/webgl/WebGLProgram.js +10 -6
  224. package/src/renderers/webgl/WebGLPrograms.js +17 -12
  225. package/src/renderers/webgl/WebGLShadowMap.js +14 -5
  226. package/src/renderers/webgl/WebGLState.js +31 -17
  227. package/src/renderers/webgl/WebGLTextures.js +188 -51
  228. package/src/renderers/webgl/WebGLUniforms.js +45 -1
  229. package/src/renderers/webxr/WebXRManager.js +71 -110
  230. package/src/textures/Texture.js +6 -0
  231. package/src/utils.js +37 -1
  232. package/examples/js/controls/DeviceOrientationControls.js +0 -147
  233. package/examples/js/libs/dat.gui.min.js +0 -14
  234. package/examples/jsm/controls/DeviceOrientationControls.js +0 -153
  235. package/examples/jsm/libs/dat.gui.module.js +0 -3575
  236. package/examples/jsm/libs/glslang.js +0 -78
  237. package/examples/jsm/libs/glslang.wasm +0 -0
  238. package/examples/jsm/renderers/nodes/consts/MathConsts.js +0 -7
  239. package/examples/jsm/renderers/nodes/core/ConstNode.js +0 -39
  240. package/examples/jsm/renderers/nodes/core/NodeSlot.js +0 -13
  241. package/examples/jsm/renderers/nodes/core/StructNode.js +0 -80
  242. package/examples/jsm/renderers/nodes/core/StructVarNode.js +0 -75
  243. package/examples/jsm/renderers/nodes/functions/EncodingFunctions.js +0 -99
  244. package/examples/jsm/renderers/nodes/functions/MathFunctions.js +0 -47
  245. package/examples/jsm/renderers/webgpu/nodes/ShaderLib.js +0 -152
  246. package/src/extras/objects/ImmediateRenderObject.js +0 -31
@@ -0,0 +1,606 @@
1
+ import {
2
+ DataUtils,
3
+ DataTextureLoader,
4
+ FloatType,
5
+ HalfFloatType,
6
+ RGBAFormat
7
+ } from 'three';
8
+
9
+ class LogLuvLoader extends DataTextureLoader {
10
+
11
+ constructor( manager ) {
12
+
13
+ super( manager );
14
+
15
+ this.type = HalfFloatType;
16
+
17
+ }
18
+
19
+ parse( buffer ) {
20
+
21
+ const ifds = UTIF.decode( buffer );
22
+ UTIF.decodeImage( buffer, ifds[ 0 ] );
23
+ const rgba = UTIF.toRGBA( ifds[ 0 ], this.type );
24
+
25
+ return {
26
+ width: ifds[ 0 ].width,
27
+ height: ifds[ 0 ].height,
28
+ data: rgba,
29
+ format: RGBAFormat,
30
+ type: this.type,
31
+ flipY: true
32
+ };
33
+
34
+ }
35
+
36
+ setDataType( value ) {
37
+
38
+ this.type = value;
39
+ return this;
40
+
41
+ }
42
+
43
+ }
44
+
45
+ // from https://github.com/photopea/UTIF.js (MIT License)
46
+
47
+ const UTIF = {};
48
+
49
+ UTIF.decode = function ( buff, prm ) {
50
+
51
+ if ( prm == null ) prm = { parseMN: true, debug: false }; // read MakerNote, debug
52
+ var data = new Uint8Array( buff ), offset = 0;
53
+
54
+ var id = UTIF._binBE.readASCII( data, offset, 2 ); offset += 2;
55
+ var bin = id == 'II' ? UTIF._binLE : UTIF._binBE;
56
+ bin.readUshort( data, offset ); offset += 2;
57
+
58
+ var ifdo = bin.readUint( data, offset ); offset += 4;
59
+ var ifds = [];
60
+ while ( true ) {
61
+
62
+ var cnt = bin.readUshort( data, ifdo ), typ = bin.readUshort( data, ifdo + 4 ); if ( cnt != 0 ) if ( typ < 1 || 13 < typ ) {
63
+
64
+ console.log( 'error in TIFF' ); break;
65
+
66
+ }
67
+
68
+
69
+ UTIF._readIFD( bin, data, ifdo, ifds, 0, prm );
70
+
71
+ ifdo = bin.readUint( data, ifdo + 2 + cnt * 12 );
72
+ if ( ifdo == 0 ) break;
73
+
74
+ }
75
+
76
+ return ifds;
77
+
78
+ };
79
+
80
+ UTIF.decodeImage = function ( buff, img, ifds ) {
81
+
82
+ if ( img.data ) return;
83
+ var data = new Uint8Array( buff );
84
+ var id = UTIF._binBE.readASCII( data, 0, 2 );
85
+
86
+ if ( img[ 't256' ] == null ) return; // No width => probably not an image
87
+ img.isLE = id == 'II';
88
+ img.width = img[ 't256' ][ 0 ]; //delete img["t256"];
89
+ img.height = img[ 't257' ][ 0 ]; //delete img["t257"];
90
+
91
+ var cmpr = img[ 't259' ] ? img[ 't259' ][ 0 ] : 1; //delete img["t259"];
92
+ var fo = img[ 't266' ] ? img[ 't266' ][ 0 ] : 1; //delete img["t266"];
93
+ if ( img[ 't284' ] && img[ 't284' ][ 0 ] == 2 ) console.log( 'PlanarConfiguration 2 should not be used!' );
94
+ if ( cmpr == 7 && img[ 't258' ] && img[ 't258' ].length > 3 ) img[ 't258' ] = img[ 't258' ].slice( 0, 3 );
95
+
96
+ var bipp; // bits per pixel
97
+ if ( img[ 't258' ] ) bipp = Math.min( 32, img[ 't258' ][ 0 ] ) * img[ 't258' ].length;
98
+ else bipp = ( img[ 't277' ] ? img[ 't277' ][ 0 ] : 1 );
99
+ // Some .NEF files have t258==14, even though they use 16 bits per pixel
100
+ if ( cmpr == 1 && img[ 't279' ] != null && img[ 't278' ] && img[ 't262' ][ 0 ] == 32803 ) {
101
+
102
+ bipp = Math.round( ( img[ 't279' ][ 0 ] * 8 ) / ( img.width * img[ 't278' ][ 0 ] ) );
103
+
104
+ }
105
+
106
+ var bipl = Math.ceil( img.width * bipp / 8 ) * 8;
107
+ var soff = img[ 't273' ]; if ( soff == null ) soff = img[ 't324' ];
108
+ var bcnt = img[ 't279' ]; if ( cmpr == 1 && soff.length == 1 ) bcnt = [ img.height * ( bipl >>> 3 ) ]; if ( bcnt == null ) bcnt = img[ 't325' ];
109
+ //bcnt[0] = Math.min(bcnt[0], data.length); // Hasselblad, "RAW_HASSELBLAD_H3D39II.3FR"
110
+ var bytes = new Uint8Array( img.height * ( bipl >>> 3 ) ), bilen = 0;
111
+
112
+ if ( img[ 't322' ] != null ) {
113
+
114
+ var tw = img[ 't322' ][ 0 ], th = img[ 't323' ][ 0 ];
115
+ var tx = Math.floor( ( img.width + tw - 1 ) / tw );
116
+ var ty = Math.floor( ( img.height + th - 1 ) / th );
117
+ var tbuff = new Uint8Array( Math.ceil( tw * th * bipp / 8 ) | 0 );
118
+ for ( var y = 0; y < ty; y ++ )
119
+ for ( var x = 0; x < tx; x ++ ) {
120
+
121
+ var i = y * tx + x; for ( var j = 0; j < tbuff.length; j ++ ) tbuff[ j ] = 0;
122
+ UTIF.decode._decompress( img, ifds, data, soff[ i ], bcnt[ i ], cmpr, tbuff, 0, fo );
123
+ // Might be required for 7 too. Need to check
124
+ if ( cmpr == 6 ) bytes = tbuff;
125
+ else UTIF._copyTile( tbuff, Math.ceil( tw * bipp / 8 ) | 0, th, bytes, Math.ceil( img.width * bipp / 8 ) | 0, img.height, Math.ceil( x * tw * bipp / 8 ) | 0, y * th );
126
+
127
+ }
128
+
129
+ bilen = bytes.length * 8;
130
+
131
+ } else {
132
+
133
+ var rps = img[ 't278' ] ? img[ 't278' ][ 0 ] : img.height; rps = Math.min( rps, img.height );
134
+ for ( var i = 0; i < soff.length; i ++ ) {
135
+
136
+ UTIF.decode._decompress( img, ifds, data, soff[ i ], bcnt[ i ], cmpr, bytes, Math.ceil( bilen / 8 ) | 0, fo );
137
+ bilen += bipl * rps;
138
+
139
+ }
140
+
141
+ bilen = Math.min( bilen, bytes.length * 8 );
142
+
143
+ }
144
+
145
+ img.data = new Uint8Array( bytes.buffer, 0, Math.ceil( bilen / 8 ) | 0 );
146
+
147
+ };
148
+
149
+ UTIF.decode._decompress = function ( img, ifds, data, off, len, cmpr, tgt, toff ) {
150
+
151
+ //console.log("compression", cmpr);
152
+ //var time = Date.now();
153
+ if ( cmpr == 34676 ) UTIF.decode._decodeLogLuv32( img, data, off, len, tgt, toff );
154
+ else console.log( 'Unsupported compression', cmpr );
155
+
156
+ //console.log(Date.now()-time);
157
+
158
+ var bps = ( img[ 't258' ] ? Math.min( 32, img[ 't258' ][ 0 ] ) : 1 );
159
+ var noc = ( img[ 't277' ] ? img[ 't277' ][ 0 ] : 1 ), bpp = ( bps * noc ) >>> 3, h = ( img[ 't278' ] ? img[ 't278' ][ 0 ] : img.height ), bpl = Math.ceil( bps * noc * img.width / 8 );
160
+
161
+ // convert to Little Endian /*
162
+ if ( bps == 16 && ! img.isLE && img[ 't33422' ] == null ) // not DNG
163
+ for ( var y = 0; y < h; y ++ ) {
164
+
165
+ //console.log("fixing endianity");
166
+ var roff = toff + y * bpl;
167
+ for ( var x = 1; x < bpl; x += 2 ) {
168
+
169
+ var t = tgt[ roff + x ]; tgt[ roff + x ] = tgt[ roff + x - 1 ]; tgt[ roff + x - 1 ] = t;
170
+
171
+ }
172
+
173
+ } //*/
174
+
175
+ if ( img[ 't317' ] && img[ 't317' ][ 0 ] == 2 ) {
176
+
177
+ for ( var y = 0; y < h; y ++ ) {
178
+
179
+ var ntoff = toff + y * bpl;
180
+ if ( bps == 16 ) for ( var j = bpp; j < bpl; j += 2 ) {
181
+
182
+ var nv = ( ( tgt[ ntoff + j + 1 ] << 8 ) | tgt[ ntoff + j ] ) + ( ( tgt[ ntoff + j - bpp + 1 ] << 8 ) | tgt[ ntoff + j - bpp ] );
183
+ tgt[ ntoff + j ] = nv & 255; tgt[ ntoff + j + 1 ] = ( nv >>> 8 ) & 255;
184
+
185
+ }
186
+ else if ( noc == 3 ) for ( var j = 3; j < bpl; j += 3 ) {
187
+
188
+ tgt[ ntoff + j ] = ( tgt[ ntoff + j ] + tgt[ ntoff + j - 3 ] ) & 255;
189
+ tgt[ ntoff + j + 1 ] = ( tgt[ ntoff + j + 1 ] + tgt[ ntoff + j - 2 ] ) & 255;
190
+ tgt[ ntoff + j + 2 ] = ( tgt[ ntoff + j + 2 ] + tgt[ ntoff + j - 1 ] ) & 255;
191
+
192
+ }
193
+ else for ( var j = bpp; j < bpl; j ++ ) tgt[ ntoff + j ] = ( tgt[ ntoff + j ] + tgt[ ntoff + j - bpp ] ) & 255;
194
+
195
+ }
196
+
197
+ }
198
+
199
+ };
200
+
201
+ UTIF.decode._decodeLogLuv32 = function ( img, data, off, len, tgt, toff ) {
202
+
203
+ var w = img.width, qw = w * 4;
204
+ var io = 0, out = new Uint8Array( qw );
205
+
206
+ while ( io < len ) {
207
+
208
+ var oo = 0;
209
+ while ( oo < qw ) {
210
+
211
+ var c = data[ off + io ]; io ++;
212
+ if ( c < 128 ) {
213
+
214
+ for ( var j = 0; j < c; j ++ ) out[ oo + j ] = data[ off + io + j ]; oo += c; io += c;
215
+
216
+ } else {
217
+
218
+ c = c - 126; for ( var j = 0; j < c; j ++ ) out[ oo + j ] = data[ off + io ]; oo += c; io ++;
219
+
220
+ }
221
+
222
+ }
223
+
224
+ for ( var x = 0; x < w; x ++ ) {
225
+
226
+ tgt[ toff + 0 ] = out[ x ];
227
+ tgt[ toff + 1 ] = out[ x + w ];
228
+ tgt[ toff + 2 ] = out[ x + w * 2 ];
229
+ tgt[ toff + 4 ] = out[ x + w * 3 ];
230
+ toff += 6;
231
+
232
+ }
233
+
234
+ }
235
+
236
+ };
237
+
238
+ UTIF.tags = {};
239
+ //UTIF.ttypes = { 256:3,257:3,258:3, 259:3, 262:3, 273:4, 274:3, 277:3,278:4,279:4, 282:5, 283:5, 284:3, 286:5,287:5, 296:3, 305:2, 306:2, 338:3, 513:4, 514:4, 34665:4 };
240
+ // start at tag 250
241
+ UTIF._types = function () {
242
+
243
+ var main = new Array( 250 ); main.fill( 0 );
244
+ main = main.concat( [ 0, 0, 0, 0, 4, 3, 3, 3, 3, 3, 0, 0, 3, 0, 0, 0, 3, 0, 0, 2, 2, 2, 2, 4, 3, 0, 0, 3, 4, 4, 3, 3, 5, 5, 3, 2, 5, 5, 0, 0, 0, 0, 4, 4, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 5, 5, 3, 0, 3, 3, 4, 4, 4, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] );
245
+ var rest = { 33432: 2, 33434: 5, 33437: 5, 34665: 4, 34850: 3, 34853: 4, 34855: 3, 34864: 3, 34866: 4, 36864: 7, 36867: 2, 36868: 2, 37121: 7, 37377: 10, 37378: 5, 37380: 10, 37381: 5, 37383: 3, 37384: 3, 37385: 3, 37386: 5, 37510: 7, 37520: 2, 37521: 2, 37522: 2, 40960: 7, 40961: 3, 40962: 4, 40963: 4, 40965: 4, 41486: 5, 41487: 5, 41488: 3, 41985: 3, 41986: 3, 41987: 3, 41988: 5, 41989: 3, 41990: 3, 41993: 3, 41994: 3, 41995: 7, 41996: 3, 42032: 2, 42033: 2, 42034: 5, 42036: 2, 42037: 2, 59932: 7 };
246
+ return {
247
+ basic: {
248
+ main: main,
249
+ rest: rest
250
+ },
251
+ gps: {
252
+ main: [ 1, 2, 5, 2, 5, 1, 5, 5, 0, 9 ],
253
+ rest: { 18: 2, 29: 2 }
254
+ }
255
+ };
256
+
257
+ }();
258
+
259
+ UTIF._readIFD = function ( bin, data, offset, ifds, depth, prm ) {
260
+
261
+ var cnt = bin.readUshort( data, offset ); offset += 2;
262
+ var ifd = {};
263
+
264
+ if ( prm.debug ) console.log( ' '.repeat( depth ), ifds.length - 1, '>>>----------------' );
265
+ for ( var i = 0; i < cnt; i ++ ) {
266
+
267
+ var tag = bin.readUshort( data, offset ); offset += 2;
268
+ var type = bin.readUshort( data, offset ); offset += 2;
269
+ var num = bin.readUint( data, offset ); offset += 4;
270
+ var voff = bin.readUint( data, offset ); offset += 4;
271
+
272
+ var arr = [];
273
+ //ifd["t"+tag+"-"+UTIF.tags[tag]] = arr;
274
+ if ( type == 1 || type == 7 ) {
275
+
276
+ arr = new Uint8Array( data.buffer, ( num < 5 ? offset - 4 : voff ), num );
277
+
278
+ }
279
+
280
+ if ( type == 2 ) {
281
+
282
+ var o0 = ( num < 5 ? offset - 4 : voff ), c = data[ o0 ], len = Math.max( 0, Math.min( num - 1, data.length - o0 ) );
283
+ if ( c < 128 || len == 0 ) arr.push( bin.readASCII( data, o0, len ) );
284
+ else arr = new Uint8Array( data.buffer, o0, len );
285
+
286
+ }
287
+
288
+ if ( type == 3 ) {
289
+
290
+ for ( var j = 0; j < num; j ++ ) arr.push( bin.readUshort( data, ( num < 3 ? offset - 4 : voff ) + 2 * j ) );
291
+
292
+ }
293
+
294
+ if ( type == 4
295
+ || type == 13 ) {
296
+
297
+ for ( var j = 0; j < num; j ++ ) arr.push( bin.readUint( data, ( num < 2 ? offset - 4 : voff ) + 4 * j ) );
298
+
299
+ }
300
+
301
+ if ( type == 5 || type == 10 ) {
302
+
303
+ var ri = type == 5 ? bin.readUint : bin.readInt;
304
+ for ( var j = 0; j < num; j ++ ) arr.push( [ ri( data, voff + j * 8 ), ri( data, voff + j * 8 + 4 ) ] );
305
+
306
+ }
307
+
308
+ if ( type == 8 ) {
309
+
310
+ for ( var j = 0; j < num; j ++ ) arr.push( bin.readShort( data, ( num < 3 ? offset - 4 : voff ) + 2 * j ) );
311
+
312
+ }
313
+
314
+ if ( type == 9 ) {
315
+
316
+ for ( var j = 0; j < num; j ++ ) arr.push( bin.readInt( data, ( num < 2 ? offset - 4 : voff ) + 4 * j ) );
317
+
318
+ }
319
+
320
+ if ( type == 11 ) {
321
+
322
+ for ( var j = 0; j < num; j ++ ) arr.push( bin.readFloat( data, voff + j * 4 ) );
323
+
324
+ }
325
+
326
+ if ( type == 12 ) {
327
+
328
+ for ( var j = 0; j < num; j ++ ) arr.push( bin.readDouble( data, voff + j * 8 ) );
329
+
330
+ }
331
+
332
+ if ( num != 0 && arr.length == 0 ) {
333
+
334
+ console.log( tag, 'unknown TIFF tag type: ', type, 'num:', num ); if ( i == 0 ) return; continue;
335
+
336
+ }
337
+
338
+ if ( prm.debug ) console.log( ' '.repeat( depth ), tag, type, UTIF.tags[ tag ], arr );
339
+
340
+ ifd[ 't' + tag ] = arr;
341
+
342
+ if ( tag == 330 && ifd[ 't272' ] && ifd[ 't272' ][ 0 ] == 'DSLR-A100' ) { } else if ( tag == 330 || tag == 34665 || tag == 34853 || ( tag == 50740 && bin.readUshort( data, bin.readUint( arr, 0 ) ) < 300 ) || tag == 61440 ) {
343
+
344
+ var oarr = tag == 50740 ? [ bin.readUint( arr, 0 ) ] : arr;
345
+ var subfd = [];
346
+ for ( var j = 0; j < oarr.length; j ++ ) UTIF._readIFD( bin, data, oarr[ j ], subfd, depth + 1, prm );
347
+ if ( tag == 330 ) ifd.subIFD = subfd;
348
+ if ( tag == 34665 ) ifd.exifIFD = subfd[ 0 ];
349
+ if ( tag == 34853 ) ifd.gpsiIFD = subfd[ 0 ]; //console.log("gps", subfd[0]); }
350
+ if ( tag == 50740 ) ifd.dngPrvt = subfd[ 0 ];
351
+ if ( tag == 61440 ) ifd.fujiIFD = subfd[ 0 ];
352
+
353
+ }
354
+
355
+ if ( tag == 37500 && prm.parseMN ) {
356
+
357
+ var mn = arr;
358
+ //console.log(bin.readASCII(mn,0,mn.length), mn);
359
+ if ( bin.readASCII( mn, 0, 5 ) == 'Nikon' ) ifd.makerNote = UTIF[ 'decode' ]( mn.slice( 10 ).buffer )[ 0 ];
360
+ else if ( bin.readUshort( data, voff ) < 300 && bin.readUshort( data, voff + 4 ) <= 12 ) {
361
+
362
+ var subsub = []; UTIF._readIFD( bin, data, voff, subsub, depth + 1, prm );
363
+ ifd.makerNote = subsub[ 0 ];
364
+
365
+ }
366
+
367
+ }
368
+
369
+ }
370
+
371
+ ifds.push( ifd );
372
+ if ( prm.debug ) console.log( ' '.repeat( depth ), '<<<---------------' );
373
+ return offset;
374
+
375
+ };
376
+
377
+ UTIF.toRGBA = function ( out, type ) {
378
+
379
+ const w = out.width, h = out.height, area = w * h, data = out.data;
380
+
381
+ let img;
382
+
383
+ switch ( type ) {
384
+
385
+ case HalfFloatType:
386
+
387
+ img = new Uint16Array( area * 4 );
388
+ break;
389
+
390
+ case FloatType:
391
+
392
+ img = new Float32Array( area * 4 );
393
+ break;
394
+
395
+ default:
396
+ console.error( 'THREE.LogLuvLoader: Unsupported texture data type:', type );
397
+
398
+ }
399
+
400
+ let intp = out[ 't262' ] ? out[ 't262' ][ 0 ] : 2;
401
+ const bps = out[ 't258' ] ? Math.min( 32, out[ 't258' ][ 0 ] ) : 1;
402
+
403
+ if ( out[ 't262' ] == null && bps == 1 ) intp = 0;
404
+
405
+ if ( intp == 32845 ) {
406
+
407
+ for ( let y = 0; y < h; y ++ ) {
408
+
409
+ for ( let x = 0; x < w; x ++ ) {
410
+
411
+ const si = ( y * w + x ) * 6, qi = ( y * w + x ) * 4;
412
+ let L = ( data[ si + 1 ] << 8 ) | data[ si ];
413
+
414
+ L = Math.pow( 2, ( L + 0.5 ) / 256 - 64 );
415
+ const u = ( data[ si + 3 ] + 0.5 ) / 410;
416
+ const v = ( data[ si + 5 ] + 0.5 ) / 410;
417
+
418
+ // Luv to xyY
419
+ const sX = ( 9 * u ) / ( 6 * u - 16 * v + 12 );
420
+ const sY = ( 4 * v ) / ( 6 * u - 16 * v + 12 );
421
+ const bY = L;
422
+
423
+ // xyY to XYZ
424
+ const X = ( sX * bY ) / sY, Y = bY, Z = ( 1 - sX - sY ) * bY / sY;
425
+
426
+ // XYZ to linear RGB
427
+ const r = 2.690 * X - 1.276 * Y - 0.414 * Z;
428
+ const g = - 1.022 * X + 1.978 * Y + 0.044 * Z;
429
+ const b = 0.061 * X - 0.224 * Y + 1.163 * Z;
430
+
431
+ if ( type === HalfFloatType ) {
432
+
433
+ img[ qi ] = DataUtils.toHalfFloat( Math.min( r, 65504 ) );
434
+ img[ qi + 1 ] = DataUtils.toHalfFloat( Math.min( g, 65504 ) );
435
+ img[ qi + 2 ] = DataUtils.toHalfFloat( Math.min( b, 65504 ) );
436
+ img[ qi + 3 ] = DataUtils.toHalfFloat( 1 );
437
+
438
+
439
+ } else {
440
+
441
+ img[ qi ] = r;
442
+ img[ qi + 1 ] = g;
443
+ img[ qi + 2 ] = b;
444
+ img[ qi + 3 ] = 1;
445
+
446
+ }
447
+
448
+ }
449
+
450
+ }
451
+
452
+ } else {
453
+
454
+ console.log( 'Unsupported Photometric interpretation: ' + intp );
455
+
456
+ }
457
+
458
+ return img;
459
+
460
+ };
461
+
462
+ UTIF._binBE =
463
+ {
464
+ nextZero: function ( data, o ) {
465
+
466
+ while ( data[ o ] != 0 ) o ++; return o;
467
+
468
+ },
469
+ readUshort: function ( buff, p ) {
470
+
471
+ return ( buff[ p ] << 8 ) | buff[ p + 1 ];
472
+
473
+ },
474
+ readShort: function ( buff, p ) {
475
+
476
+ var a = UTIF._binBE.ui8; a[ 0 ] = buff[ p + 1 ]; a[ 1 ] = buff[ p + 0 ]; return UTIF._binBE.i16[ 0 ];
477
+
478
+ },
479
+ readInt: function ( buff, p ) {
480
+
481
+ var a = UTIF._binBE.ui8; a[ 0 ] = buff[ p + 3 ]; a[ 1 ] = buff[ p + 2 ]; a[ 2 ] = buff[ p + 1 ]; a[ 3 ] = buff[ p + 0 ]; return UTIF._binBE.i32[ 0 ];
482
+
483
+ },
484
+ readUint: function ( buff, p ) {
485
+
486
+ var a = UTIF._binBE.ui8; a[ 0 ] = buff[ p + 3 ]; a[ 1 ] = buff[ p + 2 ]; a[ 2 ] = buff[ p + 1 ]; a[ 3 ] = buff[ p + 0 ]; return UTIF._binBE.ui32[ 0 ];
487
+
488
+ },
489
+ readASCII: function ( buff, p, l ) {
490
+
491
+ var s = ''; for ( var i = 0; i < l; i ++ ) s += String.fromCharCode( buff[ p + i ] ); return s;
492
+
493
+ },
494
+ readFloat: function ( buff, p ) {
495
+
496
+ var a = UTIF._binBE.ui8; for ( var i = 0; i < 4; i ++ ) a[ i ] = buff[ p + 3 - i ]; return UTIF._binBE.fl32[ 0 ];
497
+
498
+ },
499
+ readDouble: function ( buff, p ) {
500
+
501
+ var a = UTIF._binBE.ui8; for ( var i = 0; i < 8; i ++ ) a[ i ] = buff[ p + 7 - i ]; return UTIF._binBE.fl64[ 0 ];
502
+
503
+ },
504
+
505
+ writeUshort: function ( buff, p, n ) {
506
+
507
+ buff[ p ] = ( n >> 8 ) & 255; buff[ p + 1 ] = n & 255;
508
+
509
+ },
510
+ writeInt: function ( buff, p, n ) {
511
+
512
+ var a = UTIF._binBE.ui8; UTIF._binBE.i32[ 0 ] = n; buff[ p + 3 ] = a[ 0 ]; buff[ p + 2 ] = a[ 1 ]; buff[ p + 1 ] = a[ 2 ]; buff[ p + 0 ] = a[ 3 ];
513
+
514
+ },
515
+ writeUint: function ( buff, p, n ) {
516
+
517
+ buff[ p ] = ( n >> 24 ) & 255; buff[ p + 1 ] = ( n >> 16 ) & 255; buff[ p + 2 ] = ( n >> 8 ) & 255; buff[ p + 3 ] = ( n >> 0 ) & 255;
518
+
519
+ },
520
+ writeASCII: function ( buff, p, s ) {
521
+
522
+ for ( var i = 0; i < s.length; i ++ ) buff[ p + i ] = s.charCodeAt( i );
523
+
524
+ },
525
+ writeDouble: function ( buff, p, n ) {
526
+
527
+ UTIF._binBE.fl64[ 0 ] = n;
528
+ for ( var i = 0; i < 8; i ++ ) buff[ p + i ] = UTIF._binBE.ui8[ 7 - i ];
529
+
530
+ }
531
+ };
532
+ UTIF._binBE.ui8 = new Uint8Array( 8 );
533
+ UTIF._binBE.i16 = new Int16Array( UTIF._binBE.ui8.buffer );
534
+ UTIF._binBE.i32 = new Int32Array( UTIF._binBE.ui8.buffer );
535
+ UTIF._binBE.ui32 = new Uint32Array( UTIF._binBE.ui8.buffer );
536
+ UTIF._binBE.fl32 = new Float32Array( UTIF._binBE.ui8.buffer );
537
+ UTIF._binBE.fl64 = new Float64Array( UTIF._binBE.ui8.buffer );
538
+
539
+ UTIF._binLE =
540
+ {
541
+ nextZero: UTIF._binBE.nextZero,
542
+ readUshort: function ( buff, p ) {
543
+
544
+ return ( buff[ p + 1 ] << 8 ) | buff[ p ];
545
+
546
+ },
547
+ readShort: function ( buff, p ) {
548
+
549
+ var a = UTIF._binBE.ui8; a[ 0 ] = buff[ p + 0 ]; a[ 1 ] = buff[ p + 1 ]; return UTIF._binBE.i16[ 0 ];
550
+
551
+ },
552
+ readInt: function ( buff, p ) {
553
+
554
+ var a = UTIF._binBE.ui8; a[ 0 ] = buff[ p + 0 ]; a[ 1 ] = buff[ p + 1 ]; a[ 2 ] = buff[ p + 2 ]; a[ 3 ] = buff[ p + 3 ]; return UTIF._binBE.i32[ 0 ];
555
+
556
+ },
557
+ readUint: function ( buff, p ) {
558
+
559
+ var a = UTIF._binBE.ui8; a[ 0 ] = buff[ p + 0 ]; a[ 1 ] = buff[ p + 1 ]; a[ 2 ] = buff[ p + 2 ]; a[ 3 ] = buff[ p + 3 ]; return UTIF._binBE.ui32[ 0 ];
560
+
561
+ },
562
+ readASCII: UTIF._binBE.readASCII,
563
+ readFloat: function ( buff, p ) {
564
+
565
+ var a = UTIF._binBE.ui8; for ( var i = 0; i < 4; i ++ ) a[ i ] = buff[ p + i ]; return UTIF._binBE.fl32[ 0 ];
566
+
567
+ },
568
+ readDouble: function ( buff, p ) {
569
+
570
+ var a = UTIF._binBE.ui8; for ( var i = 0; i < 8; i ++ ) a[ i ] = buff[ p + i ]; return UTIF._binBE.fl64[ 0 ];
571
+
572
+ },
573
+
574
+ writeUshort: function ( buff, p, n ) {
575
+
576
+ buff[ p ] = ( n ) & 255; buff[ p + 1 ] = ( n >> 8 ) & 255;
577
+
578
+ },
579
+ writeInt: function ( buff, p, n ) {
580
+
581
+ var a = UTIF._binBE.ui8; UTIF._binBE.i32[ 0 ] = n; buff[ p + 0 ] = a[ 0 ]; buff[ p + 1 ] = a[ 1 ]; buff[ p + 2 ] = a[ 2 ]; buff[ p + 3 ] = a[ 3 ];
582
+
583
+ },
584
+ writeUint: function ( buff, p, n ) {
585
+
586
+ buff[ p ] = ( n >>> 0 ) & 255; buff[ p + 1 ] = ( n >>> 8 ) & 255; buff[ p + 2 ] = ( n >>> 16 ) & 255; buff[ p + 3 ] = ( n >>> 24 ) & 255;
587
+
588
+ },
589
+ writeASCII: UTIF._binBE.writeASCII
590
+ };
591
+ UTIF._copyTile = function ( tb, tw, th, b, w, h, xoff, yoff ) {
592
+
593
+ //log("copyTile", tw, th, w, h, xoff, yoff);
594
+ var xlim = Math.min( tw, w - xoff );
595
+ var ylim = Math.min( th, h - yoff );
596
+ for ( var y = 0; y < ylim; y ++ ) {
597
+
598
+ var tof = ( yoff + y ) * w + xoff;
599
+ var sof = y * tw;
600
+ for ( var x = 0; x < xlim; x ++ ) b[ tof + x ] = tb[ sof + x ];
601
+
602
+ }
603
+
604
+ };
605
+
606
+ export { LogLuvLoader };
@@ -363,25 +363,51 @@ class PLYLoader extends Loader {
363
363
 
364
364
  function handleElement( buffer, elementName, element ) {
365
365
 
366
+ function findAttrName( names ) {
367
+
368
+ for ( let i = 0, l = names.length; i < l; i ++ ) {
369
+
370
+ const name = names[ i ];
371
+
372
+ if ( name in element ) return name;
373
+
374
+ }
375
+
376
+ return null;
377
+
378
+ }
379
+
380
+ const attrX = findAttrName( [ 'x', 'px', 'posx' ] ) || 'x';
381
+ const attrY = findAttrName( [ 'y', 'py', 'posy' ] ) || 'y';
382
+ const attrZ = findAttrName( [ 'z', 'pz', 'posz' ] ) || 'z';
383
+ const attrNX = findAttrName( [ 'nx', 'normalx' ] );
384
+ const attrNY = findAttrName( [ 'ny', 'normaly' ] );
385
+ const attrNZ = findAttrName( [ 'nz', 'normalz' ] );
386
+ const attrS = findAttrName( [ 's', 'u', 'texture_u', 'tx' ] );
387
+ const attrT = findAttrName( [ 't', 'v', 'texture_v', 'ty' ] );
388
+ const attrR = findAttrName( [ 'red', 'diffuse_red', 'r', 'diffuse_r' ] );
389
+ const attrG = findAttrName( [ 'green', 'diffuse_green', 'g', 'diffuse_g' ] );
390
+ const attrB = findAttrName( [ 'blue', 'diffuse_blue', 'b', 'diffuse_b' ] );
391
+
366
392
  if ( elementName === 'vertex' ) {
367
393
 
368
- buffer.vertices.push( element.x, element.y, element.z );
394
+ buffer.vertices.push( element[ attrX ], element[ attrY ], element[ attrZ ] );
369
395
 
370
- if ( 'nx' in element && 'ny' in element && 'nz' in element ) {
396
+ if ( attrNX !== null && attrNY !== null && attrNZ !== null ) {
371
397
 
372
- buffer.normals.push( element.nx, element.ny, element.nz );
398
+ buffer.normals.push( element[ attrNX ], element[ attrNY ], element[ attrNZ ] );
373
399
 
374
400
  }
375
401
 
376
- if ( 's' in element && 't' in element ) {
402
+ if ( attrS !== null && attrT !== null ) {
377
403
 
378
- buffer.uvs.push( element.s, element.t );
404
+ buffer.uvs.push( element[ attrS ], element[ attrT ] );
379
405
 
380
406
  }
381
407
 
382
- if ( 'red' in element && 'green' in element && 'blue' in element ) {
408
+ if ( attrR !== null && attrG !== null && attrB !== null ) {
383
409
 
384
- buffer.colors.push( element.red / 255.0, element.green / 255.0, element.blue / 255.0 );
410
+ buffer.colors.push( element[ attrR ] / 255.0, element[ attrG ] / 255.0, element[ attrB ] / 255.0 );
385
411
 
386
412
  }
387
413
 
@@ -2084,7 +2084,7 @@ class SVGLoader extends Loader {
2084
2084
 
2085
2085
  }
2086
2086
 
2087
- return { points: points, isCW: ShapeUtils.isClockWise( points ), identifier: identifier ++, boundingBox: new Box2( new Vector2( minX, minY ), new Vector2( maxX, maxY ) ) };
2087
+ return { curves: p.curves, points: points, isCW: ShapeUtils.isClockWise( points ), identifier: identifier ++, boundingBox: new Box2( new Vector2( minX, minY ), new Vector2( maxX, maxY ) ) };
2088
2088
 
2089
2089
  } );
2090
2090
 
@@ -2101,12 +2101,15 @@ class SVGLoader extends Loader {
2101
2101
 
2102
2102
  if ( ! amIAHole.isHole ) {
2103
2103
 
2104
- const shape = new Shape( p.points );
2104
+ const shape = new Shape();
2105
+ shape.curves = p.curves;
2105
2106
  const holes = isAHole.filter( h => h.isHole && h.for === p.identifier );
2106
2107
  holes.forEach( h => {
2107
2108
 
2108
- const path = simplePaths[ h.identifier ];
2109
- shape.holes.push( new Path( path.points ) );
2109
+ const hole = simplePaths[ h.identifier ];
2110
+ const path = new Path();
2111
+ path.curves = hole.curves;
2112
+ shape.holes.push( path );
2110
2113
 
2111
2114
  } );
2112
2115
  shapesToReturn.push( shape );