super-three 0.133.4 → 0.136.1

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 (409) hide show
  1. package/LICENSE +1 -1
  2. package/build/three.js +2285 -1983
  3. package/build/three.min.js +1 -1
  4. package/build/three.module.js +5983 -5358
  5. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff +0 -0
  6. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff2 +0 -0
  7. package/examples/fonts/open-sans/open-sans.css +9 -0
  8. package/examples/fonts/tabler-icons/fonts/tabler-icons.eot +0 -0
  9. package/examples/fonts/tabler-icons/fonts/tabler-icons.svg +3966 -0
  10. package/examples/fonts/tabler-icons/fonts/tabler-icons.ttf +0 -0
  11. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff +0 -0
  12. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff2 +0 -0
  13. package/examples/fonts/tabler-icons/tabler-icons.min.css +4 -0
  14. package/examples/js/animation/CCDIKSolver.js +0 -1
  15. package/examples/js/animation/MMDPhysics.js +2 -4
  16. package/examples/js/cameras/CinematicCamera.js +2 -7
  17. package/examples/js/controls/ArcballControls.js +99 -72
  18. package/examples/js/controls/DragControls.js +7 -0
  19. package/examples/js/controls/OrbitControls.js +5 -36
  20. package/examples/js/controls/TrackballControls.js +3 -2
  21. package/examples/js/controls/TransformControls.js +24 -1
  22. package/examples/js/csm/CSM.js +2 -2
  23. package/examples/js/csm/CSMFrustum.js +133 -0
  24. package/examples/js/curves/CurveExtras.js +0 -2
  25. package/examples/js/effects/AsciiEffect.js +2 -9
  26. package/examples/js/exporters/GLTFExporter.js +148 -64
  27. package/examples/js/exporters/MMDExporter.js +1 -1
  28. package/examples/js/exporters/USDZExporter.js +45 -26
  29. package/examples/js/geometries/ConvexGeometry.js +1 -1
  30. package/examples/js/geometries/TeapotGeometry.js +0 -1
  31. package/examples/js/interactive/SelectionBox.js +2 -0
  32. package/examples/js/interactive/SelectionHelper.js +22 -7
  33. package/examples/js/lights/RectAreaLightUniformsLib.js +4 -0
  34. package/examples/js/lines/LineMaterial.js +58 -20
  35. package/examples/js/lines/LineSegments2.js +29 -24
  36. package/examples/js/loaders/3DMLoader.js +24 -11
  37. package/examples/js/loaders/3MFLoader.js +2 -2
  38. package/examples/js/loaders/AMFLoader.js +0 -2
  39. package/examples/js/loaders/BasisTextureLoader.js +1 -0
  40. package/examples/js/loaders/ColladaLoader.js +61 -4
  41. package/examples/js/loaders/EXRLoader.js +201 -272
  42. package/examples/js/loaders/FBXLoader.js +4 -5
  43. package/examples/js/loaders/GLTFLoader.js +98 -35
  44. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -10
  45. package/examples/js/loaders/KTX2Loader.js +23 -2
  46. package/examples/js/loaders/KTXLoader.js +1 -1
  47. package/examples/js/loaders/LDrawLoader.js +1169 -901
  48. package/examples/js/loaders/LUT3dlLoader.js +19 -10
  49. package/examples/js/loaders/LUTCubeLoader.js +5 -4
  50. package/examples/js/loaders/LWOLoader.js +8 -6
  51. package/examples/js/loaders/LogLuvLoader.js +766 -0
  52. package/examples/js/loaders/MMDLoader.js +0 -1
  53. package/examples/js/loaders/NRRDLoader.js +9 -2
  54. package/examples/js/loaders/OBJLoader.js +0 -2
  55. package/examples/js/loaders/PLYLoader.js +33 -8
  56. package/examples/js/loaders/RGBELoader.js +8 -22
  57. package/examples/js/loaders/RGBMLoader.js +56 -6
  58. package/examples/js/loaders/SVGLoader.js +12 -6
  59. package/examples/js/loaders/TDSLoader.js +237 -271
  60. package/examples/js/loaders/VOXLoader.js +1 -0
  61. package/examples/js/loaders/VRMLLoader.js +11 -22
  62. package/examples/js/loaders/lwo/LWO2Parser.js +1 -0
  63. package/examples/js/loaders/lwo/LWO3Parser.js +4 -2
  64. package/examples/js/math/ConvexHull.js +7 -13
  65. package/examples/js/math/ImprovedNoise.js +1 -1
  66. package/examples/js/misc/GPUComputationRenderer.js +3 -1
  67. package/examples/js/misc/Volume.js +2 -2
  68. package/examples/js/modifiers/CurveModifier.js +8 -7
  69. package/examples/js/modifiers/EdgeSplitModifier.js +1 -1
  70. package/examples/js/modifiers/SimplifyModifier.js +1 -1
  71. package/examples/js/objects/Lensflare.js +2 -10
  72. package/examples/js/objects/MarchingCubes.js +42 -128
  73. package/examples/js/objects/Reflector.js +8 -13
  74. package/examples/js/objects/ReflectorForSSRPass.js +0 -10
  75. package/examples/js/objects/Refractor.js +8 -13
  76. package/examples/js/objects/Sky.js +1 -1
  77. package/examples/js/objects/Water.js +3 -15
  78. package/examples/js/objects/Water2.js +4 -7
  79. package/examples/js/postprocessing/GlitchPass.js +6 -5
  80. package/examples/js/postprocessing/SMAAPass.js +2 -9
  81. package/examples/js/postprocessing/SSAOPass.js +10 -21
  82. package/examples/js/postprocessing/SavePass.js +1 -5
  83. package/examples/js/renderers/CSS2DRenderer.js +4 -4
  84. package/examples/js/renderers/CSS3DRenderer.js +4 -4
  85. package/examples/js/shaders/ConvolutionShader.js +0 -1
  86. package/examples/js/shaders/DigitalGlitch.js +3 -3
  87. package/examples/js/shaders/FXAAShader.js +1 -1
  88. package/examples/js/shaders/FilmShader.js +1 -1
  89. package/examples/js/shaders/GammaCorrectionShader.js +1 -1
  90. package/examples/js/shaders/HorizontalBlurShader.js +1 -2
  91. package/examples/js/shaders/MMDToonShader.js +0 -1
  92. package/examples/js/shaders/SSAOShader.js +1 -1
  93. package/examples/js/shaders/SSRShader.js +1 -1
  94. package/examples/js/shaders/SSRrShader.js +1 -1
  95. package/examples/js/shaders/VerticalBlurShader.js +1 -2
  96. package/examples/js/utils/GeometryUtils.js +1 -1
  97. package/examples/jsm/animation/CCDIKSolver.js +0 -1
  98. package/examples/jsm/animation/MMDPhysics.js +1 -3
  99. package/examples/jsm/cameras/CinematicCamera.js +2 -5
  100. package/examples/jsm/{WebGL.js → capabilities/WebGL.js} +2 -2
  101. package/examples/jsm/{renderers/webgpu → capabilities}/WebGPU.js +1 -1
  102. package/examples/jsm/controls/ArcballControls.js +80 -77
  103. package/examples/jsm/controls/DragControls.js +7 -0
  104. package/examples/jsm/controls/OrbitControls.js +9 -51
  105. package/examples/jsm/controls/TrackballControls.js +1 -1
  106. package/examples/jsm/controls/TransformControls.js +24 -1
  107. package/examples/jsm/csm/CSM.js +3 -3
  108. package/examples/jsm/csm/{Frustum.js → CSMFrustum.js} +3 -3
  109. package/examples/jsm/curves/CurveExtras.js +0 -2
  110. package/examples/jsm/effects/AsciiEffect.js +2 -9
  111. package/examples/jsm/exporters/GLTFExporter.js +169 -99
  112. package/examples/jsm/exporters/MMDExporter.js +1 -1
  113. package/examples/jsm/exporters/USDZExporter.js +47 -26
  114. package/examples/jsm/geometries/ConvexGeometry.js +1 -1
  115. package/examples/jsm/geometries/TeapotGeometry.js +0 -1
  116. package/examples/jsm/interactive/SelectionBox.js +1 -0
  117. package/examples/jsm/interactive/SelectionHelper.js +19 -7
  118. package/examples/jsm/libs/flow.module.js +3338 -0
  119. package/examples/jsm/libs/lil-gui.module.min.js +8 -0
  120. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  121. package/examples/jsm/lights/RectAreaLightUniformsLib.js +7 -0
  122. package/examples/jsm/lines/LineMaterial.js +59 -23
  123. package/examples/jsm/lines/LineSegments2.js +22 -18
  124. package/examples/jsm/loaders/3DMLoader.js +18 -12
  125. package/examples/jsm/loaders/3MFLoader.js +2 -2
  126. package/examples/jsm/loaders/AMFLoader.js +0 -2
  127. package/examples/jsm/loaders/BasisTextureLoader.js +7 -0
  128. package/examples/jsm/loaders/ColladaLoader.js +61 -4
  129. package/examples/jsm/loaders/EXRLoader.js +200 -306
  130. package/examples/jsm/loaders/FBXLoader.js +4 -5
  131. package/examples/jsm/loaders/GLTFLoader.js +102 -40
  132. package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -17
  133. package/examples/jsm/loaders/KTX2Loader.js +30 -2
  134. package/examples/jsm/loaders/KTXLoader.js +1 -1
  135. package/examples/jsm/loaders/LDrawLoader.js +1159 -898
  136. package/examples/jsm/loaders/LUT3dlLoader.js +19 -12
  137. package/examples/jsm/loaders/LUTCubeLoader.js +5 -5
  138. package/examples/jsm/loaders/LWOLoader.js +8 -6
  139. package/examples/jsm/loaders/LogLuvLoader.js +606 -0
  140. package/examples/jsm/loaders/MMDLoader.js +0 -1
  141. package/examples/jsm/loaders/NRRDLoader.js +10 -2
  142. package/examples/jsm/loaders/OBJLoader.js +0 -2
  143. package/examples/jsm/loaders/PLYLoader.js +34 -8
  144. package/examples/jsm/loaders/RGBELoader.js +7 -28
  145. package/examples/jsm/loaders/RGBMLoader.js +62 -8
  146. package/examples/jsm/loaders/SVGLoader.js +15 -7
  147. package/examples/jsm/loaders/TDSLoader.js +236 -275
  148. package/examples/jsm/loaders/VOXLoader.js +1 -0
  149. package/examples/jsm/loaders/VRMLLoader.js +11 -23
  150. package/examples/jsm/loaders/lwo/LWO2Parser.js +1 -0
  151. package/examples/jsm/loaders/lwo/LWO3Parser.js +2 -2
  152. package/examples/jsm/math/ConvexHull.js +7 -13
  153. package/examples/jsm/math/ImprovedNoise.js +1 -1
  154. package/examples/jsm/misc/GPUComputationRenderer.js +3 -1
  155. package/examples/jsm/misc/Volume.js +2 -2
  156. package/examples/jsm/modifiers/CurveModifier.js +9 -8
  157. package/examples/jsm/modifiers/EdgeSplitModifier.js +1 -1
  158. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  159. package/examples/jsm/node-editor/NodeEditor.js +455 -0
  160. package/examples/jsm/node-editor/accessors/NormalEditor.js +30 -0
  161. package/examples/jsm/node-editor/accessors/PositionEditor.js +30 -0
  162. package/examples/jsm/node-editor/accessors/UVEditor.js +26 -0
  163. package/examples/jsm/node-editor/display/BlendEditor.js +43 -0
  164. package/examples/jsm/node-editor/examples/animate-uv.json +1 -0
  165. package/examples/jsm/node-editor/examples/fake-top-light.json +1 -0
  166. package/examples/jsm/node-editor/examples/oscillator-color.json +1 -0
  167. package/examples/jsm/node-editor/examples/rim.json +1 -0
  168. package/examples/jsm/node-editor/inputs/ColorEditor.js +91 -0
  169. package/examples/jsm/node-editor/inputs/FloatEditor.js +24 -0
  170. package/examples/jsm/node-editor/inputs/SliderEditor.js +68 -0
  171. package/examples/jsm/node-editor/inputs/Vector2Editor.js +28 -0
  172. package/examples/jsm/node-editor/inputs/Vector3Editor.js +30 -0
  173. package/examples/jsm/node-editor/inputs/Vector4Editor.js +37 -0
  174. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +108 -0
  175. package/examples/jsm/node-editor/math/DotEditor.js +36 -0
  176. package/examples/jsm/node-editor/math/InvertEditor.js +38 -0
  177. package/examples/jsm/node-editor/math/LimiterEditor.js +48 -0
  178. package/examples/jsm/node-editor/math/NormalizeEditor.js +26 -0
  179. package/examples/jsm/node-editor/math/OperatorEditor.js +50 -0
  180. package/examples/jsm/node-editor/math/PowerEditor.js +34 -0
  181. package/examples/jsm/node-editor/math/TrigonometryEditor.js +39 -0
  182. package/examples/jsm/node-editor/procedural/CheckerEditor.js +26 -0
  183. package/examples/jsm/node-editor/utils/OscillatorEditor.js +42 -0
  184. package/examples/jsm/node-editor/utils/TimerEditor.js +57 -0
  185. package/examples/jsm/nodes/core/NodeBuilder.js +2 -2
  186. package/examples/jsm/nodes/materials/StandardNodeMaterial.js +1 -1
  187. package/examples/jsm/nodes/materials/nodes/StandardNode.js +7 -6
  188. package/examples/jsm/nodes/math/MathNode.js +12 -0
  189. package/examples/jsm/nodes/misc/BumpMapNode.js +1 -1
  190. package/examples/jsm/nodes/misc/TextureCubeUVNode.js +1 -4
  191. package/examples/jsm/nodes/utils/ColorSpaceNode.js +5 -177
  192. package/examples/jsm/objects/Lensflare.js +5 -16
  193. package/examples/jsm/objects/MarchingCubes.js +46 -152
  194. package/examples/jsm/objects/Reflector.js +8 -16
  195. package/examples/jsm/objects/ReflectorForSSRPass.js +0 -12
  196. package/examples/jsm/objects/Refractor.js +8 -16
  197. package/examples/jsm/objects/Sky.js +1 -1
  198. package/examples/jsm/objects/Water.js +3 -18
  199. package/examples/jsm/objects/Water2.js +4 -8
  200. package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +1 -1
  201. package/examples/jsm/postprocessing/AfterimagePass.js +1 -1
  202. package/examples/jsm/postprocessing/BloomPass.js +1 -1
  203. package/examples/jsm/postprocessing/BokehPass.js +1 -1
  204. package/examples/jsm/postprocessing/ClearPass.js +1 -1
  205. package/examples/jsm/postprocessing/CubeTexturePass.js +1 -1
  206. package/examples/jsm/postprocessing/DotScreenPass.js +1 -1
  207. package/examples/jsm/postprocessing/EffectComposer.js +3 -3
  208. package/examples/jsm/postprocessing/FilmPass.js +1 -1
  209. package/examples/jsm/postprocessing/GlitchPass.js +10 -7
  210. package/examples/jsm/postprocessing/HalftonePass.js +1 -1
  211. package/examples/jsm/postprocessing/MaskPass.js +1 -1
  212. package/examples/jsm/postprocessing/OutlinePass.js +1 -1
  213. package/examples/jsm/postprocessing/RenderPass.js +1 -1
  214. package/examples/jsm/postprocessing/SAOPass.js +2 -2
  215. package/examples/jsm/postprocessing/SMAAPass.js +3 -12
  216. package/examples/jsm/postprocessing/SSAARenderPass.js +1 -1
  217. package/examples/jsm/postprocessing/SSAOPass.js +15 -26
  218. package/examples/jsm/postprocessing/SSRPass.js +1 -1
  219. package/examples/jsm/postprocessing/SSRrPass.js +1 -1
  220. package/examples/jsm/postprocessing/SavePass.js +2 -4
  221. package/examples/jsm/postprocessing/ShaderPass.js +1 -1
  222. package/examples/jsm/postprocessing/TAARenderPass.js +1 -1
  223. package/examples/jsm/postprocessing/TexturePass.js +1 -1
  224. package/examples/jsm/postprocessing/UnrealBloomPass.js +1 -1
  225. package/examples/jsm/renderers/CSS2DRenderer.js +5 -4
  226. package/examples/jsm/renderers/CSS3DRenderer.js +5 -4
  227. package/examples/jsm/renderers/nodes/Nodes.js +17 -13
  228. package/examples/jsm/renderers/nodes/ShaderNode.js +229 -49
  229. package/examples/jsm/renderers/nodes/accessors/MaterialNode.js +6 -6
  230. package/examples/jsm/renderers/nodes/accessors/ModelViewProjectionNode.js +5 -5
  231. package/examples/jsm/renderers/nodes/accessors/NormalNode.js +14 -3
  232. package/examples/jsm/renderers/nodes/accessors/PointUVNode.js +3 -3
  233. package/examples/jsm/renderers/nodes/accessors/PositionNode.js +15 -5
  234. package/examples/jsm/renderers/nodes/accessors/SkinningNode.js +107 -0
  235. package/examples/jsm/renderers/nodes/accessors/UVNode.js +7 -5
  236. package/examples/jsm/renderers/nodes/core/ArrayInputNode.js +3 -3
  237. package/examples/jsm/renderers/nodes/core/AttributeNode.js +6 -0
  238. package/examples/jsm/renderers/nodes/core/BypassNode.js +38 -0
  239. package/examples/jsm/renderers/nodes/core/CodeNode.js +3 -3
  240. package/examples/jsm/renderers/nodes/core/ContextNode.js +4 -19
  241. package/examples/jsm/renderers/nodes/core/ExpressionNode.js +13 -2
  242. package/examples/jsm/renderers/nodes/core/FunctionNode.js +19 -132
  243. package/examples/jsm/renderers/nodes/core/InputNode.js +13 -3
  244. package/examples/jsm/renderers/nodes/core/Node.js +32 -10
  245. package/examples/jsm/renderers/nodes/core/NodeBuilder.js +146 -128
  246. package/examples/jsm/renderers/nodes/core/NodeFunction.js +22 -0
  247. package/examples/jsm/renderers/nodes/core/NodeFunctionInput.js +4 -4
  248. package/examples/jsm/renderers/nodes/core/NodeKeywords.js +18 -179
  249. package/examples/jsm/renderers/nodes/core/NodeParser.js +11 -0
  250. package/examples/jsm/renderers/nodes/core/NodeVar.js +2 -2
  251. package/examples/jsm/renderers/nodes/core/PropertyNode.js +14 -2
  252. package/examples/jsm/renderers/nodes/core/TempNode.js +10 -13
  253. package/examples/jsm/renderers/nodes/core/VarNode.js +12 -7
  254. package/examples/jsm/renderers/nodes/core/VaryNode.js +23 -8
  255. package/examples/jsm/renderers/nodes/core/constants.js +2 -0
  256. package/examples/jsm/renderers/nodes/display/ColorSpaceNode.js +43 -63
  257. package/examples/jsm/renderers/nodes/display/NormalMapNode.js +21 -22
  258. package/examples/jsm/renderers/nodes/functions/BSDFs.js +64 -101
  259. package/examples/jsm/renderers/nodes/functions/PhysicalMaterialFunctions.js +27 -0
  260. package/examples/jsm/renderers/nodes/inputs/BufferNode.js +25 -0
  261. package/examples/jsm/renderers/nodes/inputs/IntNode.js +17 -0
  262. package/examples/jsm/renderers/nodes/inputs/TextureNode.js +13 -10
  263. package/examples/jsm/renderers/nodes/lights/LightContextNode.js +20 -14
  264. package/examples/jsm/renderers/nodes/lights/LightNode.js +32 -36
  265. package/examples/jsm/renderers/nodes/math/CondNode.js +60 -0
  266. package/examples/jsm/renderers/nodes/math/MathNode.js +91 -37
  267. package/examples/jsm/renderers/nodes/math/OperatorNode.js +124 -31
  268. package/examples/jsm/renderers/nodes/parsers/GLSLNodeFunction.js +137 -0
  269. package/examples/jsm/renderers/nodes/parsers/GLSLNodeParser.js +14 -0
  270. package/examples/jsm/renderers/nodes/parsers/WGSLNodeFunction.js +89 -0
  271. package/examples/jsm/renderers/nodes/parsers/WGSLNodeParser.js +14 -0
  272. package/examples/jsm/renderers/nodes/procedural/CheckerNode.js +7 -9
  273. package/examples/jsm/renderers/nodes/utils/ArrayElementNode.js +31 -0
  274. package/examples/jsm/renderers/nodes/utils/ConvertNode.js +33 -0
  275. package/examples/jsm/renderers/nodes/utils/JoinNode.js +7 -7
  276. package/examples/jsm/renderers/nodes/utils/OscNode.js +58 -0
  277. package/examples/jsm/renderers/nodes/utils/SplitNode.js +18 -8
  278. package/examples/jsm/renderers/nodes/utils/SpriteSheetUVNode.js +7 -7
  279. package/examples/jsm/renderers/nodes/utils/TimerNode.js +1 -1
  280. package/examples/jsm/renderers/webgl/nodes/SlotNode.js +22 -0
  281. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +192 -95
  282. package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +2 -2
  283. package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +2 -2
  284. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +1 -1
  285. package/examples/jsm/renderers/webgpu/WebGPUBindings.js +10 -9
  286. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +2 -4
  287. package/examples/jsm/renderers/webgpu/WebGPUObjects.js +1 -1
  288. package/examples/jsm/renderers/webgpu/WebGPUProgrammableStage.js +2 -4
  289. package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +15 -23
  290. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +44 -65
  291. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +13 -31
  292. package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +61 -28
  293. package/examples/jsm/renderers/webgpu/WebGPUTextures.js +35 -29
  294. package/examples/jsm/renderers/webgpu/constants.js +2 -2
  295. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +459 -95
  296. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
  297. package/examples/jsm/shaders/ConvolutionShader.js +0 -1
  298. package/examples/jsm/shaders/DigitalGlitch.js +3 -3
  299. package/examples/jsm/shaders/FXAAShader.js +1 -1
  300. package/examples/jsm/shaders/FilmShader.js +1 -1
  301. package/examples/jsm/shaders/GammaCorrectionShader.js +1 -1
  302. package/examples/jsm/shaders/HorizontalBlurShader.js +1 -2
  303. package/examples/jsm/shaders/MMDToonShader.js +0 -1
  304. package/examples/jsm/shaders/SSAOShader.js +1 -1
  305. package/examples/jsm/shaders/SSRShader.js +1 -1
  306. package/examples/jsm/shaders/SSRrShader.js +1 -1
  307. package/examples/jsm/shaders/VerticalBlurShader.js +1 -2
  308. package/examples/jsm/utils/GeometryUtils.js +1 -1
  309. package/examples/jsm/utils/LDrawUtils.js +195 -0
  310. package/examples/jsm/utils/WorkerPool.js +11 -11
  311. package/examples/jsm/webxr/OculusHandPointerModel.js +6 -6
  312. package/examples/jsm/webxr/VRButton.js +24 -0
  313. package/examples/jsm/webxr/XREstimatedLight.js +2 -0
  314. package/package.json +27 -18
  315. package/src/Three.Legacy.js +18 -0
  316. package/src/Three.js +1 -3
  317. package/src/animation/AnimationMixer.js +1 -0
  318. package/src/cameras/CubeCamera.js +2 -0
  319. package/src/cameras/StereoCamera.js +8 -7
  320. package/src/constants.js +3 -23
  321. package/src/core/Layers.js +7 -1
  322. package/src/core/Object3D.js +3 -1
  323. package/src/extras/ImageUtils.js +63 -0
  324. package/src/extras/PMREMGenerator.js +49 -185
  325. package/src/extras/core/Interpolations.js +1 -1
  326. package/src/geometries/LatheGeometry.js +70 -47
  327. package/src/helpers/CameraHelper.js +1 -1
  328. package/src/loaders/FileLoader.js +98 -144
  329. package/src/loaders/ImageLoader.js +9 -4
  330. package/src/loaders/LoaderUtils.js +26 -0
  331. package/src/loaders/MaterialLoader.js +8 -5
  332. package/src/loaders/ObjectLoader.js +2 -0
  333. package/src/materials/Material.js +8 -8
  334. package/src/materials/MeshPhysicalMaterial.js +20 -14
  335. package/src/math/Color.js +1 -39
  336. package/src/math/MathUtils.js +5 -16
  337. package/src/math/Quaternion.js +1 -1
  338. package/src/math/Ray.js +2 -2
  339. package/src/math/Sphere.js +10 -1
  340. package/src/objects/Skeleton.js +1 -0
  341. package/src/renderers/WebGLCubeRenderTarget.js +0 -2
  342. package/src/renderers/WebGLMultisampleRenderTarget.js +7 -1
  343. package/src/renderers/WebGLRenderer.js +106 -199
  344. package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +2 -2
  345. package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +1 -1
  346. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +2 -24
  347. package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +0 -2
  348. package/src/renderers/shaders/ShaderChunk/encodings_pars_fragment.glsl.js +0 -78
  349. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  350. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -2
  351. package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +1 -1
  352. package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +1 -1
  353. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +1 -1
  354. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +19 -6
  355. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +28 -2
  356. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +10 -3
  357. package/src/renderers/shaders/ShaderChunk/map_particle_fragment.glsl.js +1 -2
  358. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +1 -1
  359. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  360. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +9 -8
  361. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -3
  362. package/src/renderers/shaders/ShaderLib/equirect.glsl.js +1 -3
  363. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +1 -1
  364. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +1 -2
  365. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +23 -5
  366. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +2 -1
  367. package/src/renderers/shaders/ShaderLib.js +8 -6
  368. package/src/renderers/shaders/UniformsLib.js +1 -2
  369. package/src/renderers/webgl/WebGLCapabilities.js +0 -2
  370. package/src/renderers/webgl/WebGLCubeMaps.js +0 -4
  371. package/src/renderers/webgl/WebGLCubeUVMaps.js +29 -16
  372. package/src/renderers/webgl/WebGLExtensions.js +1 -0
  373. package/src/renderers/webgl/WebGLMaterials.js +27 -15
  374. package/src/renderers/webgl/WebGLMorphtargets.js +13 -0
  375. package/src/renderers/webgl/WebGLProgram.js +12 -37
  376. package/src/renderers/webgl/WebGLPrograms.js +192 -70
  377. package/src/renderers/webgl/WebGLRenderLists.js +4 -14
  378. package/src/renderers/webgl/WebGLShaderCache.js +120 -0
  379. package/src/renderers/webgl/WebGLShadowMap.js +14 -5
  380. package/src/renderers/webgl/WebGLState.js +157 -17
  381. package/src/renderers/webgl/WebGLTextures.js +442 -83
  382. package/src/renderers/webgl/WebGLUniforms.js +45 -1
  383. package/src/renderers/webgl/WebGLUtils.js +86 -28
  384. package/src/renderers/webxr/WebXRManager.js +77 -109
  385. package/src/scenes/Scene.js +1 -1
  386. package/src/textures/DataTexture.js +0 -2
  387. package/src/textures/DataTexture2DArray.js +0 -2
  388. package/src/textures/DataTexture3D.js +0 -2
  389. package/src/textures/FramebufferTexture.js +25 -0
  390. package/src/textures/Texture.js +8 -1
  391. package/src/textures/VideoTexture.js +1 -3
  392. package/examples/js/WebGL.js +0 -90
  393. package/examples/js/controls/DeviceOrientationControls.js +0 -147
  394. package/examples/js/libs/dat.gui.min.js +0 -14
  395. package/examples/js/utils/RoughnessMipmapper.js +0 -278
  396. package/examples/jsm/controls/DeviceOrientationControls.js +0 -153
  397. package/examples/jsm/libs/dat.gui.module.js +0 -3575
  398. package/examples/jsm/libs/glslang.js +0 -78
  399. package/examples/jsm/libs/glslang.wasm +0 -0
  400. package/examples/jsm/renderers/nodes/consts/MathConsts.js +0 -7
  401. package/examples/jsm/renderers/nodes/core/ConstNode.js +0 -39
  402. package/examples/jsm/renderers/nodes/core/NodeSlot.js +0 -13
  403. package/examples/jsm/renderers/nodes/core/StructNode.js +0 -80
  404. package/examples/jsm/renderers/nodes/core/StructVarNode.js +0 -75
  405. package/examples/jsm/renderers/nodes/functions/EncodingFunctions.js +0 -99
  406. package/examples/jsm/renderers/nodes/functions/MathFunctions.js +0 -47
  407. package/examples/jsm/renderers/webgpu/nodes/ShaderLib.js +0 -152
  408. package/examples/jsm/utils/RoughnessMipmapper.js +0 -300
  409. package/src/extras/objects/ImmediateRenderObject.js +0 -31
@@ -1,4 +1,8 @@
1
- import TempNode from '../core/Node.js';
1
+ import TempNode from '../core/TempNode.js';
2
+ import ExpressionNode from '../core/ExpressionNode.js';
3
+ import JoinNode from '../utils/JoinNode.js';
4
+ import SplitNode from '../utils/SplitNode.js';
5
+ import OperatorNode from './OperatorNode.js';
2
6
 
3
7
  class MathNode extends TempNode {
4
8
 
@@ -16,7 +20,6 @@ class MathNode extends TempNode {
16
20
  static CEIL = 'ceil';
17
21
  static NORMALIZE = 'normalize';
18
22
  static FRACT = 'fract';
19
- static SATURATE = 'saturate';
20
23
  static SIN = 'sin';
21
24
  static COS = 'cos';
22
25
  static TAN = 'tan';
@@ -28,6 +31,10 @@ class MathNode extends TempNode {
28
31
  static LENGTH = 'length';
29
32
  static NEGATE = 'negate';
30
33
  static INVERT = 'invert';
34
+ static DFDX = 'dFdx';
35
+ static DFDY = 'dFdy';
36
+ static SATURATE = 'saturate';
37
+ static ROUND = 'round';
31
38
 
32
39
  // 2 inputs
33
40
 
@@ -40,6 +47,7 @@ class MathNode extends TempNode {
40
47
  static DOT = 'dot';
41
48
  static CROSS = 'cross';
42
49
  static POW = 'pow';
50
+ static TRANSFORM_DIRECTION = 'transformDirection';
43
51
 
44
52
  // 3 inputs
45
53
 
@@ -49,39 +57,43 @@ class MathNode extends TempNode {
49
57
  static SMOOTHSTEP = 'smoothstep';
50
58
  static FACEFORWARD = 'faceforward';
51
59
 
52
- constructor( method, a, b = null, c = null ) {
60
+ constructor( method, aNode, bNode = null, cNode = null ) {
53
61
 
54
62
  super();
55
63
 
56
64
  this.method = method;
57
65
 
58
- this.a = a;
59
- this.b = b;
60
- this.c = c;
66
+ this.aNode = aNode;
67
+ this.bNode = bNode;
68
+ this.cNode = cNode;
61
69
 
62
70
  }
63
71
 
64
72
  getInputType( builder ) {
65
73
 
66
- const aLen = this.a.getTypeLength( builder );
67
- const bLen = this.b ? this.b.getTypeLength( builder ) : 0;
68
- const cLen = this.c ? this.c.getTypeLength( builder ) : 0;
74
+ const aType = this.aNode.getNodeType( builder );
75
+ const bType = this.bNode ? this.bNode.getNodeType( builder ) : null;
76
+ const cType = this.cNode ? this.cNode.getNodeType( builder ) : null;
77
+
78
+ const aLen = builder.getTypeLength( aType );
79
+ const bLen = builder.getTypeLength( bType );
80
+ const cLen = builder.getTypeLength( cType );
69
81
 
70
82
  if ( aLen > bLen && aLen > cLen ) {
71
83
 
72
- return this.a.getNodeType( builder );
84
+ return aType;
73
85
 
74
86
  } else if ( bLen > cLen ) {
75
87
 
76
- return this.b.getNodeType( builder );
88
+ return bType;
77
89
 
78
90
  } else if ( cLen > aLen ) {
79
91
 
80
- this.c.getNodeType( builder )
92
+ return cType;
81
93
 
82
94
  }
83
95
 
84
- return this.a.getNodeType( builder );
96
+ return aType;
85
97
 
86
98
  }
87
99
 
@@ -93,7 +105,7 @@ class MathNode extends TempNode {
93
105
 
94
106
  return 'float';
95
107
 
96
- } else if (method === MathNode.CROSS) {
108
+ } else if ( method === MathNode.CROSS ) {
97
109
 
98
110
  return 'vec3';
99
111
 
@@ -105,20 +117,62 @@ class MathNode extends TempNode {
105
117
 
106
118
  }
107
119
 
108
- generate( builder ) {
120
+ generate( builder, output ) {
109
121
 
110
122
  const method = this.method;
111
123
 
112
124
  const type = this.getNodeType( builder );
113
125
  const inputType = this.getInputType( builder );
114
126
 
115
- if ( method === MathNode.NEGATE ) {
127
+ const a = this.aNode;
128
+ const b = this.bNode;
129
+ const c = this.cNode;
130
+
131
+ const isWebGL = builder.renderer.isWebGLRenderer === true;
132
+
133
+ if ( isWebGL && ( method === MathNode.DFDX || method === MathNode.DFDY ) && output === 'vec3' ) {
134
+
135
+ // Workaround for Adreno 3XX dFd*( vec3 ) bug. See #9988
136
+
137
+ return new JoinNode( [
138
+ new MathNode( method, new SplitNode( a, 'x' ) ),
139
+ new MathNode( method, new SplitNode( a, 'y' ) ),
140
+ new MathNode( method, new SplitNode( a, 'z' ) )
141
+ ] ).build( builder );
142
+
143
+ } else if ( method === MathNode.TRANSFORM_DIRECTION ) {
144
+
145
+ // dir can be either a direction vector or a normal vector
146
+ // upper-left 3x3 of matrix is assumed to be orthogonal
147
+
148
+ let tA = a;
149
+ let tB = b;
150
+
151
+ if ( builder.isMatrix( tA.getNodeType( builder ) ) ) {
152
+
153
+ tB = new ExpressionNode( `${ builder.getType( 'vec4' ) }( ${ tB.build( builder, 'vec3' ) }, 0.0 )`, 'vec4' );
154
+
155
+ } else {
156
+
157
+ tA = new ExpressionNode( `${ builder.getType( 'vec4' ) }( ${ tA.build( builder, 'vec3' ) }, 0.0 )`, 'vec4' );
158
+
159
+ }
160
+
161
+ const mulNode = new SplitNode( new OperatorNode( '*', tA, tB ), 'xyz' );
162
+
163
+ return new MathNode( MathNode.NORMALIZE, mulNode ).build( builder );
164
+
165
+ } else if ( method === MathNode.SATURATE ) {
166
+
167
+ return `clamp( ${ a.build( builder, inputType ) }, 0.0, 1.0 )`;
168
+
169
+ } else if ( method === MathNode.NEGATE ) {
116
170
 
117
- return '( -' + this.a.build( builder, inputType ) + ' )';
171
+ return '( -' + a.build( builder, inputType ) + ' )';
118
172
 
119
173
  } else if ( method === MathNode.INVERT ) {
120
174
 
121
- return '( 1.0 - ' + this.a.build( builder, inputType ) + ' )';
175
+ return '( 1.0 - ' + a.build( builder, inputType ) + ' )';
122
176
 
123
177
  } else {
124
178
 
@@ -127,57 +181,57 @@ class MathNode extends TempNode {
127
181
  if ( method === MathNode.CROSS ) {
128
182
 
129
183
  params.push(
130
- this.a.build( builder, type ),
131
- this.b.build( builder, type )
184
+ a.build( builder, type ),
185
+ b.build( builder, type )
132
186
  );
133
187
 
134
188
  } else if ( method === MathNode.STEP ) {
135
189
 
136
190
  params.push(
137
- this.b.build( builder, this.a.getTypeLength( builder ) === 1 ? 'float' : inputType ),
138
- this.b.build( builder, inputType )
191
+ a.build( builder, builder.getTypeLength( a.getNodeType( builder ) ) === 1 ? 'float' : inputType ),
192
+ b.build( builder, inputType )
139
193
  );
140
194
 
141
- } else if ( method === MathNode.MIN || method === MathNode.MAX || method === MathNode.MOD ) {
195
+ } else if ( ( isWebGL && ( method === MathNode.MIN || method === MathNode.MAX ) ) || method === MathNode.MOD ) {
142
196
 
143
197
  params.push(
144
- this.a.build( builder, inputType ),
145
- this.b.build( builder, this.b.getTypeLength( builder ) === 1 ? 'float' : inputType )
198
+ a.build( builder, inputType ),
199
+ b.build( builder, builder.getTypeLength( b.getNodeType( builder ) ) === 1 ? 'float' : inputType )
146
200
  );
147
201
 
148
202
  } else if ( method === MathNode.REFRACT ) {
149
203
 
150
204
  params.push(
151
- this.a.build( builder, inputType ),
152
- this.b.build( builder, inputType ),
153
- this.c.build( builder, 'float' )
205
+ a.build( builder, inputType ),
206
+ b.build( builder, inputType ),
207
+ c.build( builder, 'float' )
154
208
  );
155
209
 
156
210
  } else if ( method === MathNode.MIX ) {
157
211
 
158
212
  params.push(
159
- this.a.build( builder, inputType ),
160
- this.b.build( builder, inputType ),
161
- this.c.build( builder, this.c.getTypeLength( builder ) === 1 ? 'float' : inputType )
213
+ a.build( builder, inputType ),
214
+ b.build( builder, inputType ),
215
+ c.build( builder, builder.getTypeLength( c.getNodeType( builder ) ) === 1 ? 'float' : inputType )
162
216
  );
163
217
 
164
218
  } else {
165
219
 
166
- params.push( this.a.build( builder, inputType ) );
220
+ params.push( a.build( builder, inputType ) );
167
221
 
168
- if ( this.c !== null ) {
222
+ if ( c !== null ) {
169
223
 
170
- params.push( this.b.build( builder, inputType ), this.c.build( builder, inputType ) );
224
+ params.push( b.build( builder, inputType ), c.build( builder, inputType ) );
171
225
 
172
- } else if ( this.b !== null ) {
226
+ } else if ( b !== null ) {
173
227
 
174
- params.push( this.b.build( builder, inputType ) );
228
+ params.push( b.build( builder, inputType ) );
175
229
 
176
230
  }
177
231
 
178
232
  }
179
233
 
180
- return `${method}( ${params.join(', ')} )`;
234
+ return `${ builder.getMethod( method ) }( ${params.join( ', ' )} )`;
181
235
 
182
236
  }
183
237
 
@@ -2,77 +2,170 @@ import TempNode from '../core/TempNode.js';
2
2
 
3
3
  class OperatorNode extends TempNode {
4
4
 
5
- constructor( op, a, b ) {
5
+ constructor( op, aNode, bNode, ...params ) {
6
6
 
7
7
  super();
8
8
 
9
9
  this.op = op;
10
10
 
11
- this.a = a;
12
- this.b = b;
11
+ if ( params.length > 0 ) {
12
+
13
+ let finalBNode = bNode;
14
+
15
+ for ( let i = 0; i < params.length; i ++ ) {
16
+
17
+ finalBNode = new OperatorNode( op, finalBNode, params[ i ] );
18
+
19
+ }
20
+
21
+ bNode = finalBNode;
22
+
23
+ }
24
+
25
+ this.aNode = aNode;
26
+ this.bNode = bNode;
13
27
 
14
28
  }
15
29
 
16
- getNodeType( builder ) {
30
+ getNodeType( builder, output ) {
17
31
 
18
- const typeA = this.a.getNodeType( builder );
19
- const typeB = this.b.getNodeType( builder );
32
+ const op = this.op;
20
33
 
21
- if ( builder.isMatrix( typeA ) && builder.isVector( typeB ) ) {
34
+ const aNode = this.aNode;
35
+ const bNode = this.bNode;
22
36
 
23
- // matrix x vector
37
+ const typeA = aNode.getNodeType( builder );
38
+ const typeB = bNode.getNodeType( builder );
24
39
 
25
- return builder.getVectorFromMatrix( typeA );
40
+ if ( typeA === 'void' || typeB === 'void' ) {
26
41
 
27
- } else if ( builder.isVector( typeA ) && builder.isMatrix( typeB ) ) {
42
+ return 'void';
28
43
 
29
- // vector x matrix
44
+ } else if ( op === '=' ) {
30
45
 
31
- return builder.getVectorFromMatrix( typeB );
46
+ return typeA;
32
47
 
33
- } else if ( builder.getTypeLength( typeB ) > builder.getTypeLength( typeA ) ) {
48
+ } else if ( op === '==' || op === '&&' ) {
34
49
 
35
- // anytype x anytype: use the greater length vector
50
+ return 'bool';
36
51
 
37
- return typeB;
52
+ } else if ( op === '<=' || op === '>' ) {
38
53
 
39
- }
54
+ const length = builder.getTypeLength( output );
55
+
56
+ return length > 1 ? `bvec${ length }` : 'bool';
57
+
58
+ } else {
59
+
60
+ if ( typeA === 'float' && builder.isMatrix( typeB ) ) {
40
61
 
41
- return typeA;
62
+ return typeB;
63
+
64
+ } else if ( builder.isMatrix( typeA ) && builder.isVector( typeB ) ) {
65
+
66
+ // matrix x vector
67
+
68
+ return builder.getVectorFromMatrix( typeA );
69
+
70
+ } else if ( builder.isVector( typeA ) && builder.isMatrix( typeB ) ) {
71
+
72
+ // vector x matrix
73
+
74
+ return builder.getVectorFromMatrix( typeB );
75
+
76
+ } else if ( builder.getTypeLength( typeB ) > builder.getTypeLength( typeA ) ) {
77
+
78
+ // anytype x anytype: use the greater length vector
79
+
80
+ return typeB;
81
+
82
+ }
83
+
84
+ return typeA;
85
+
86
+ }
42
87
 
43
88
  }
44
89
 
45
90
  generate( builder, output ) {
46
91
 
47
- let typeA = this.a.getNodeType( builder );
48
- let typeB = this.b.getNodeType( builder );
92
+ const op = this.op;
49
93
 
50
- let type = this.getNodeType( builder );
94
+ const aNode = this.aNode;
95
+ const bNode = this.bNode;
51
96
 
52
- if ( builder.isMatrix( typeA ) && builder.isVector( typeB ) ) {
97
+ const type = this.getNodeType( builder, output );
53
98
 
54
- // matrix x vector
99
+ let typeA = null;
100
+ let typeB = null;
55
101
 
56
- type = typeB = builder.getVectorFromMatrix( typeA );
102
+ if ( type !== 'void' ) {
57
103
 
58
- } else if ( builder.isVector( typeA ) && builder.isMatrix( typeB ) ) {
104
+ typeA = aNode.getNodeType( builder );
105
+ typeB = bNode.getNodeType( builder );
59
106
 
60
- // vector x matrix
107
+ if ( op === '=' ) {
61
108
 
62
- type = typeB = builder.getVectorFromMatrix( typeB );
109
+ typeB = typeA;
63
110
 
64
- } else {
111
+ } else if ( builder.isMatrix( typeA ) && builder.isVector( typeB ) ) {
112
+
113
+ // matrix x vector
114
+
115
+ typeB = builder.getVectorFromMatrix( typeA );
116
+
117
+ } else if ( builder.isVector( typeA ) && builder.isMatrix( typeB ) ) {
118
+
119
+ // vector x matrix
120
+
121
+ typeA = builder.getVectorFromMatrix( typeB );
122
+
123
+ } else {
65
124
 
66
- // anytype x anytype
125
+ // anytype x anytype
126
+
127
+ typeA = typeB = type;
128
+
129
+ }
130
+
131
+ } else {
67
132
 
68
133
  typeA = typeB = type;
69
134
 
70
135
  }
71
136
 
72
- const a = this.a.build( builder, typeA );
73
- const b = this.b.build( builder, typeB );
137
+ const a = aNode.build( builder, typeA );
138
+ const b = bNode.build( builder, typeB );
139
+
140
+ const outputLength = builder.getTypeLength( output );
141
+
142
+ if ( output !== 'void' ) {
74
143
 
75
- return `( ${a} ${this.op} ${b} )`;
144
+ if ( op === '=' ) {
145
+
146
+ builder.addFlowCode( `${a} ${this.op} ${b}` );
147
+
148
+ return a;
149
+
150
+ } else if ( op === '>' && outputLength > 1 ) {
151
+
152
+ return `${ builder.getMethod( 'greaterThan' ) }( ${a}, ${b} )`;
153
+
154
+ } else if ( op === '<=' && outputLength > 1 ) {
155
+
156
+ return `${ builder.getMethod( 'lessThanEqual' ) }( ${a}, ${b} )`;
157
+
158
+ } else {
159
+
160
+ return `( ${a} ${this.op} ${b} )`;
161
+
162
+ }
163
+
164
+ } else if ( typeA !== 'void' ) {
165
+
166
+ return `${a} ${this.op} ${b}`;
167
+
168
+ }
76
169
 
77
170
  }
78
171
 
@@ -0,0 +1,137 @@
1
+ import NodeFunction from '../core/NodeFunction.js';
2
+ import NodeFunctionInput from '../core/NodeFunctionInput.js';
3
+
4
+ const declarationRegexp = /^\s*(highp|mediump|lowp)?\s*([a-z_0-9]+)\s*([a-z_0-9]+)?\s*\(([\s\S]*?)\)/i;
5
+ const propertiesRegexp = /[a-z_0-9]+/ig;
6
+
7
+ const pragmaMain = '#pragma main';
8
+
9
+ const parse = ( source ) => {
10
+
11
+ source = source.trim();
12
+
13
+ const pragmaMainIndex = source.indexOf( pragmaMain );
14
+
15
+ const mainCode = pragmaMainIndex !== - 1 ? source.substr( pragmaMainIndex + pragmaMain.length ) : source;
16
+
17
+ const declaration = mainCode.match( declarationRegexp );
18
+
19
+ if ( declaration !== null && declaration.length === 5 ) {
20
+
21
+ // tokenizer
22
+
23
+ const inputsCode = declaration[ 4 ];
24
+ const propsMatches = [];
25
+
26
+ let nameMatch = null;
27
+
28
+ while ( ( nameMatch = propertiesRegexp.exec( inputsCode ) ) !== null ) {
29
+
30
+ propsMatches.push( nameMatch );
31
+
32
+ }
33
+
34
+ // parser
35
+
36
+ const inputs = [];
37
+
38
+ let i = 0;
39
+
40
+ while ( i < propsMatches.length ) {
41
+
42
+ const isConst = propsMatches[ i ][ 0 ] === 'const';
43
+
44
+ if ( isConst === true ) {
45
+
46
+ i ++;
47
+
48
+ }
49
+
50
+ let qualifier = propsMatches[ i ][ 0 ];
51
+
52
+ if ( qualifier === 'in' || qualifier === 'out' || qualifier === 'inout' ) {
53
+
54
+ i ++;
55
+
56
+ } else {
57
+
58
+ qualifier = '';
59
+
60
+ }
61
+
62
+ const type = propsMatches[ i ++ ][ 0 ];
63
+
64
+ let count = Number.parseInt( propsMatches[ i ][ 0 ] );
65
+
66
+ if ( Number.isNaN( count ) === false ) i ++;
67
+ else count = null;
68
+
69
+ const name = propsMatches[ i ++ ][ 0 ];
70
+
71
+ inputs.push( new NodeFunctionInput( type, name, count, qualifier, isConst ) );
72
+
73
+ }
74
+
75
+ //
76
+
77
+ const blockCode = mainCode.substring( declaration[ 0 ].length );
78
+
79
+ const name = declaration[ 3 ] !== undefined ? declaration[ 3 ] : '';
80
+ const type = declaration[ 2 ];
81
+
82
+ const presicion = declaration[ 1 ] !== undefined ? declaration[ 1 ] : '';
83
+
84
+ const headerCode = pragmaMainIndex !== - 1 ? source.substr( 0, pragmaMainIndex ) : '';
85
+
86
+ return {
87
+ type,
88
+ inputs,
89
+ name,
90
+ presicion,
91
+ inputsCode,
92
+ blockCode,
93
+ headerCode
94
+ };
95
+
96
+ } else {
97
+
98
+ throw new Error( 'FunctionNode: Function is not a GLSL code.' );
99
+
100
+ }
101
+
102
+ };
103
+
104
+ class GLSLNodeFunction extends NodeFunction {
105
+
106
+ constructor( source ) {
107
+
108
+ const { type, inputs, name, presicion, inputsCode, blockCode, headerCode } = parse( source );
109
+
110
+ super( type, inputs, name, presicion );
111
+
112
+ this.inputsCode = inputsCode;
113
+ this.blockCode = blockCode;
114
+ this.headerCode = headerCode;
115
+
116
+ }
117
+
118
+ getCode( name = this.name ) {
119
+
120
+ const headerCode = this.headerCode;
121
+ const presicion = this.presicion;
122
+
123
+ let declarationCode = `${ this.type } ${ name } ( ${ this.inputsCode.trim() } )`;
124
+
125
+ if ( presicion !== '' ) {
126
+
127
+ declarationCode = `${ presicion } ${ declarationCode }`;
128
+
129
+ }
130
+
131
+ return headerCode + declarationCode + this.blockCode;
132
+
133
+ }
134
+
135
+ }
136
+
137
+ export default GLSLNodeFunction;
@@ -0,0 +1,14 @@
1
+ import NodeParser from '../core/NodeParser.js';
2
+ import GLSLNodeFunction from './GLSLNodeFunction.js';
3
+
4
+ class GLSLNodeParser extends NodeParser {
5
+
6
+ parseFunction( source ) {
7
+
8
+ return new GLSLNodeFunction( source );
9
+
10
+ }
11
+
12
+ }
13
+
14
+ export default GLSLNodeParser;
@@ -0,0 +1,89 @@
1
+ import NodeFunction from '../core/NodeFunction.js';
2
+ import NodeFunctionInput from '../core/NodeFunctionInput.js';
3
+
4
+ const declarationRegexp = /^fn\s*([a-z_0-9]+)?\s*\(([\s\S]*?)\)\s*\-\>\s*([a-z_0-9]+)?/i;
5
+ const propertiesRegexp = /[a-z_0-9]+/ig;
6
+
7
+ const parse = ( source ) => {
8
+
9
+ source = source.trim();
10
+
11
+ const declaration = source.match( declarationRegexp );
12
+
13
+ if ( declaration !== null && declaration.length === 4 ) {
14
+
15
+ // tokenizer
16
+
17
+ const inputsCode = declaration[ 2 ];
18
+ const propsMatches = [];
19
+
20
+ let nameMatch = null;
21
+
22
+ while ( ( nameMatch = propertiesRegexp.exec( inputsCode ) ) !== null ) {
23
+
24
+ propsMatches.push( nameMatch );
25
+
26
+ }
27
+
28
+ // parser
29
+
30
+ const inputs = [];
31
+
32
+ let i = 0;
33
+
34
+ while ( i < propsMatches.length ) {
35
+
36
+ const name = propsMatches[ i ++ ][ 0 ];
37
+ const type = propsMatches[ i ++ ][ 0 ];
38
+
39
+ propsMatches[ i ++ ][ 0 ]; // precision
40
+
41
+ inputs.push( new NodeFunctionInput( type, name ) );
42
+
43
+ }
44
+
45
+ //
46
+
47
+ const blockCode = source.substring( declaration[ 0 ].length );
48
+
49
+ const name = declaration[ 1 ] !== undefined ? declaration[ 1 ] : '';
50
+ const type = declaration[ 3 ];
51
+
52
+ return {
53
+ type,
54
+ inputs,
55
+ name,
56
+ inputsCode,
57
+ blockCode
58
+ };
59
+
60
+ } else {
61
+
62
+ throw new Error( 'FunctionNode: Function is not a WGSL code.' );
63
+
64
+ }
65
+
66
+ };
67
+
68
+ class WGSLNodeFunction extends NodeFunction {
69
+
70
+ constructor( source ) {
71
+
72
+ const { type, inputs, name, inputsCode, blockCode } = parse( source );
73
+
74
+ super( type, inputs, name );
75
+
76
+ this.inputsCode = inputsCode;
77
+ this.blockCode = blockCode;
78
+
79
+ }
80
+
81
+ getCode( name = this.name ) {
82
+
83
+ return `fn ${ name } ( ${ this.inputsCode.trim() } ) -> ${ this.type }` + this.blockCode;
84
+
85
+ }
86
+
87
+ }
88
+
89
+ export default WGSLNodeFunction;
@@ -0,0 +1,14 @@
1
+ import NodeParser from '../core/NodeParser.js';
2
+ import WGSLNodeFunction from './WGSLNodeFunction.js';
3
+
4
+ class WGSLNodeParser extends NodeParser {
5
+
6
+ parseFunction( source ) {
7
+
8
+ return new WGSLNodeFunction( source );
9
+
10
+ }
11
+
12
+ }
13
+
14
+ export default WGSLNodeParser;