super-three 0.170.1 → 0.172.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 (413) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +157 -49
  3. package/build/three.core.js +104 -42
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +53 -8
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +10 -5
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +21191 -1008
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +21189 -1008
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/jsm/Addons.js +0 -5
  14. package/examples/jsm/animation/CCDIKSolver.js +3 -2
  15. package/examples/jsm/controls/ArcballControls.js +28 -19
  16. package/examples/jsm/controls/OrbitControls.js +5 -4
  17. package/examples/jsm/csm/CSMShadowNode.js +16 -11
  18. package/examples/jsm/curves/NURBSCurve.js +1 -1
  19. package/examples/jsm/curves/NURBSUtils.js +3 -0
  20. package/examples/jsm/effects/OutlineEffect.js +1 -1
  21. package/examples/jsm/exporters/GLTFExporter.js +11 -7
  22. package/examples/jsm/exporters/KTX2Exporter.js +1 -1
  23. package/examples/jsm/exporters/PLYExporter.js +2 -2
  24. package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
  25. package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
  26. package/examples/jsm/lights/LightProbeGenerator.js +3 -3
  27. package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
  28. package/examples/jsm/loaders/3MFLoader.js +6 -3
  29. package/examples/jsm/loaders/BVHLoader.js +1 -1
  30. package/examples/jsm/loaders/ColladaLoader.js +5 -5
  31. package/examples/jsm/loaders/DDSLoader.js +42 -0
  32. package/examples/jsm/loaders/GCodeLoader.js +1 -1
  33. package/examples/jsm/loaders/GLTFLoader.js +22 -2
  34. package/examples/jsm/loaders/KTX2Loader.js +6 -1
  35. package/examples/jsm/loaders/KTXLoader.js +4 -4
  36. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  37. package/examples/jsm/loaders/LottieLoader.js +1 -1
  38. package/examples/jsm/loaders/MTLLoader.js +1 -0
  39. package/examples/jsm/loaders/NRRDLoader.js +1 -1
  40. package/examples/jsm/loaders/PLYLoader.js +7 -7
  41. package/examples/jsm/loaders/PVRLoader.js +1 -1
  42. package/examples/jsm/loaders/SVGLoader.js +2 -2
  43. package/examples/jsm/loaders/TDSLoader.js +1 -1
  44. package/examples/jsm/loaders/VRMLLoader.js +7 -7
  45. package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
  46. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
  47. package/examples/jsm/math/ConvexHull.js +1 -1
  48. package/examples/jsm/math/OBB.js +17 -0
  49. package/examples/jsm/misc/ProgressiveLightMapGPU.js +10 -10
  50. package/examples/jsm/misc/Volume.js +20 -12
  51. package/examples/jsm/misc/VolumeSlice.js +2 -2
  52. package/examples/jsm/modifiers/CurveModifier.js +10 -8
  53. package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
  54. package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
  55. package/examples/jsm/objects/GroundedSkybox.js +4 -4
  56. package/examples/jsm/objects/Sky.js +2 -2
  57. package/examples/jsm/objects/SkyMesh.js +3 -3
  58. package/examples/jsm/objects/Water2.js +1 -1
  59. package/examples/jsm/objects/Water2Mesh.js +2 -2
  60. package/examples/jsm/objects/WaterMesh.js +4 -4
  61. package/examples/jsm/postprocessing/BloomPass.js +2 -2
  62. package/examples/jsm/postprocessing/EffectComposer.js +1 -2
  63. package/examples/jsm/postprocessing/OutlinePass.js +4 -4
  64. package/examples/jsm/postprocessing/SAOPass.js +1 -2
  65. package/examples/jsm/postprocessing/SMAAPass.js +1 -3
  66. package/examples/jsm/postprocessing/SSAOPass.js +2 -4
  67. package/examples/jsm/postprocessing/SSRPass.js +2 -4
  68. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
  69. package/examples/jsm/renderers/SVGRenderer.js +6 -4
  70. package/examples/jsm/shaders/BokehShader2.js +1 -1
  71. package/examples/jsm/shaders/GodRaysShader.js +3 -3
  72. package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
  73. package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
  74. package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
  75. package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
  76. package/examples/jsm/tsl/display/BleachBypass.js +10 -0
  77. package/examples/jsm/tsl/display/BloomNode.js +233 -26
  78. package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
  79. package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
  80. package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
  81. package/examples/jsm/tsl/display/FXAANode.js +52 -3
  82. package/examples/jsm/tsl/display/FilmNode.js +47 -1
  83. package/examples/jsm/tsl/display/GTAONode.js +210 -14
  84. package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
  85. package/examples/jsm/tsl/display/LensflareNode.js +131 -13
  86. package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
  87. package/examples/jsm/tsl/display/MotionBlur.js +12 -2
  88. package/examples/jsm/tsl/display/OutlineNode.js +343 -26
  89. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
  90. package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
  91. package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
  92. package/examples/jsm/tsl/display/SMAANode.js +187 -46
  93. package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
  94. package/examples/jsm/tsl/display/SSRNode.js +194 -21
  95. package/examples/jsm/tsl/display/Sepia.js +9 -0
  96. package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
  97. package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
  98. package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
  99. package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
  100. package/examples/jsm/tsl/display/TransitionNode.js +71 -6
  101. package/examples/jsm/tsl/display/hashBlur.js +14 -3
  102. package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
  103. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  104. package/examples/jsm/utils/CameraUtils.js +4 -1
  105. package/examples/jsm/utils/GeometryUtils.js +22 -19
  106. package/examples/jsm/utils/SceneUtils.js +2 -2
  107. package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
  108. package/examples/jsm/webxr/XREstimatedLight.js +1 -1
  109. package/package.json +8 -3
  110. package/src/Three.Core.js +2 -0
  111. package/src/Three.Legacy.js +0 -21
  112. package/src/Three.TSL.js +9 -4
  113. package/src/Three.WebGPU.Nodes.js +2 -2
  114. package/src/Three.WebGPU.js +2 -2
  115. package/src/animation/PropertyBinding.js +2 -2
  116. package/src/cameras/PerspectiveCamera.js +18 -2
  117. package/src/constants.js +1 -1
  118. package/src/core/RenderTarget.js +18 -0
  119. package/src/core/RenderTarget3D.js +22 -0
  120. package/src/core/RenderTargetArray.js +22 -0
  121. package/src/extras/Earcut.js +1 -1
  122. package/src/extras/PMREMGenerator.js +20 -0
  123. package/src/extras/TextureUtils.js +6 -0
  124. package/src/helpers/CameraHelper.js +16 -13
  125. package/src/loaders/nodes/NodeLoader.js +59 -0
  126. package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
  127. package/src/loaders/nodes/NodeObjectLoader.js +61 -0
  128. package/src/materials/nodes/InstancedPointsNodeMaterial.js +72 -19
  129. package/src/materials/nodes/Line2NodeMaterial.js +128 -34
  130. package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
  131. package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
  132. package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
  133. package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
  134. package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
  135. package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
  136. package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
  137. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
  138. package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
  139. package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
  140. package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
  141. package/src/materials/nodes/NodeMaterial.js +474 -21
  142. package/src/materials/nodes/PointsNodeMaterial.js +22 -13
  143. package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
  144. package/src/materials/nodes/SpriteNodeMaterial.js +77 -19
  145. package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
  146. package/src/materials/nodes/manager/NodeMaterialObserver.js +87 -0
  147. package/src/nodes/Nodes.js +1 -6
  148. package/src/nodes/TSL.js +2 -3
  149. package/src/nodes/accessors/AccessorsUtils.js +27 -0
  150. package/src/nodes/accessors/Arrays.js +24 -5
  151. package/src/nodes/accessors/BatchNode.js +39 -3
  152. package/src/nodes/accessors/Bitangent.js +37 -0
  153. package/src/nodes/accessors/BufferAttributeNode.js +178 -5
  154. package/src/nodes/accessors/BufferNode.js +63 -0
  155. package/src/nodes/accessors/BuiltinNode.js +38 -0
  156. package/src/nodes/accessors/Camera.js +49 -0
  157. package/src/nodes/accessors/ClippingNode.js +71 -2
  158. package/src/nodes/accessors/CubeTextureNode.js +64 -0
  159. package/src/nodes/accessors/InstanceNode.js +85 -2
  160. package/src/nodes/accessors/InstancedMeshNode.js +28 -3
  161. package/src/nodes/accessors/InstancedPointsMaterialNode.js +13 -0
  162. package/src/nodes/accessors/Lights.js +50 -1
  163. package/src/nodes/accessors/MaterialNode.js +302 -8
  164. package/src/nodes/accessors/MaterialProperties.js +7 -0
  165. package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
  166. package/src/nodes/accessors/ModelNode.js +100 -5
  167. package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
  168. package/src/nodes/accessors/MorphNode.js +48 -4
  169. package/src/nodes/accessors/Normal.js +59 -3
  170. package/src/nodes/accessors/Object3DNode.js +102 -1
  171. package/src/nodes/accessors/PointUVNode.js +26 -0
  172. package/src/nodes/accessors/Position.js +53 -4
  173. package/src/nodes/accessors/ReferenceBaseNode.js +188 -0
  174. package/src/nodes/accessors/ReferenceNode.js +202 -2
  175. package/src/nodes/accessors/ReflectVector.js +24 -0
  176. package/src/nodes/accessors/RendererReferenceNode.js +46 -1
  177. package/src/nodes/accessors/SceneNode.js +54 -0
  178. package/src/nodes/accessors/SkinningNode.js +127 -1
  179. package/src/nodes/accessors/StorageBufferNode.js +168 -4
  180. package/src/nodes/accessors/StorageTextureNode.js +118 -0
  181. package/src/nodes/accessors/Tangent.js +36 -0
  182. package/src/nodes/accessors/Texture3DNode.js +89 -5
  183. package/src/nodes/accessors/TextureBicubic.js +12 -2
  184. package/src/nodes/accessors/TextureNode.js +309 -10
  185. package/src/nodes/accessors/TextureSizeNode.js +42 -0
  186. package/src/nodes/accessors/UV.js +10 -1
  187. package/src/nodes/accessors/UniformArrayNode.js +223 -23
  188. package/src/nodes/accessors/UserDataNode.js +46 -0
  189. package/src/nodes/accessors/VelocityNode.js +82 -0
  190. package/src/nodes/accessors/VertexColorNode.js +39 -2
  191. package/src/nodes/code/CodeNode.js +95 -1
  192. package/src/nodes/code/ExpressionNode.js +28 -0
  193. package/src/nodes/code/FunctionCallNode.js +37 -0
  194. package/src/nodes/code/FunctionNode.js +45 -0
  195. package/src/nodes/code/ScriptableNode.js +223 -1
  196. package/src/nodes/code/ScriptableValueNode.js +85 -1
  197. package/src/nodes/core/AssignNode.js +48 -2
  198. package/src/nodes/core/AttributeNode.js +43 -0
  199. package/src/nodes/core/BypassNode.js +47 -2
  200. package/src/nodes/core/CacheNode.js +53 -2
  201. package/src/nodes/core/ConstNode.js +24 -0
  202. package/src/nodes/core/ContextNode.js +65 -0
  203. package/src/nodes/core/IndexNode.js +68 -7
  204. package/src/nodes/core/InputNode.js +48 -0
  205. package/src/nodes/core/LightingModel.js +60 -0
  206. package/src/nodes/core/MRTNode.js +66 -0
  207. package/src/nodes/core/Node.js +337 -12
  208. package/src/nodes/core/NodeAttribute.js +38 -0
  209. package/src/nodes/core/NodeBuilder.js +945 -15
  210. package/src/nodes/core/NodeCache.js +41 -2
  211. package/src/nodes/core/NodeCode.js +31 -0
  212. package/src/nodes/core/NodeFrame.js +123 -2
  213. package/src/nodes/core/NodeFunction.js +46 -0
  214. package/src/nodes/core/NodeFunctionInput.js +44 -0
  215. package/src/nodes/core/NodeParser.js +11 -0
  216. package/src/nodes/core/NodeUniform.js +52 -0
  217. package/src/nodes/core/NodeUtils.js +141 -0
  218. package/src/nodes/core/NodeVar.js +30 -0
  219. package/src/nodes/core/NodeVarying.js +28 -0
  220. package/src/nodes/core/OutputStructNode.js +33 -2
  221. package/src/nodes/core/ParameterNode.js +28 -0
  222. package/src/nodes/core/PropertyNode.js +232 -0
  223. package/src/nodes/core/StackNode.js +78 -0
  224. package/src/nodes/core/StructTypeNode.js +39 -1
  225. package/src/nodes/core/TempNode.js +30 -4
  226. package/src/nodes/core/UniformGroupNode.js +82 -7
  227. package/src/nodes/core/UniformNode.js +66 -0
  228. package/src/nodes/core/VarNode.js +52 -0
  229. package/src/nodes/core/VaryingNode.js +83 -2
  230. package/src/nodes/core/constants.js +36 -0
  231. package/src/nodes/display/BumpMapNode.js +37 -0
  232. package/src/nodes/display/ColorAdjustment.js +53 -11
  233. package/src/nodes/display/ColorSpaceFunctions.js +16 -0
  234. package/src/nodes/display/ColorSpaceNode.js +82 -0
  235. package/src/nodes/display/FrontFacingNode.js +29 -0
  236. package/src/nodes/display/NormalMapNode.js +43 -0
  237. package/src/nodes/display/PassNode.js +298 -7
  238. package/src/nodes/display/PosterizeNode.js +33 -0
  239. package/src/nodes/display/RenderOutputNode.js +66 -1
  240. package/src/nodes/display/ScreenNode.js +87 -0
  241. package/src/nodes/display/ToneMappingFunctions.js +58 -10
  242. package/src/nodes/display/ToneMappingNode.js +55 -2
  243. package/src/nodes/display/ToonOutlinePassNode.js +73 -0
  244. package/src/nodes/display/ViewportDepthNode.js +122 -8
  245. package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
  246. package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
  247. package/src/nodes/display/ViewportTextureNode.js +57 -0
  248. package/src/nodes/fog/Fog.js +93 -0
  249. package/src/nodes/functions/BasicLightingModel.js +24 -0
  250. package/src/nodes/functions/PhongLightingModel.js +34 -2
  251. package/src/nodes/functions/PhysicalLightingModel.js +167 -8
  252. package/src/nodes/functions/ShadowMaskModel.js +23 -0
  253. package/src/nodes/functions/ToonLightingModel.js +20 -0
  254. package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
  255. package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
  256. package/src/nodes/geometry/RangeNode.js +54 -2
  257. package/src/nodes/gpgpu/AtomicFunctionNode.js +157 -1
  258. package/src/nodes/gpgpu/BarrierNode.js +47 -0
  259. package/src/nodes/gpgpu/ComputeBuiltinNode.js +126 -0
  260. package/src/nodes/gpgpu/ComputeNode.js +106 -2
  261. package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
  262. package/src/nodes/lighting/AONode.js +18 -0
  263. package/src/nodes/lighting/AmbientLightNode.js +10 -0
  264. package/src/nodes/lighting/AnalyticLightNode.js +97 -2
  265. package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
  266. package/src/nodes/lighting/BasicLightMapNode.js +17 -0
  267. package/src/nodes/lighting/DirectionalLightNode.js +10 -0
  268. package/src/nodes/lighting/EnvironmentNode.js +18 -0
  269. package/src/nodes/lighting/HemisphereLightNode.js +31 -0
  270. package/src/nodes/lighting/IESSpotLightNode.js +11 -0
  271. package/src/nodes/lighting/IrradianceNode.js +17 -0
  272. package/src/nodes/lighting/LightProbeNode.js +20 -0
  273. package/src/nodes/lighting/LightUtils.js +12 -0
  274. package/src/nodes/lighting/LightingContextNode.js +48 -0
  275. package/src/nodes/lighting/LightingNode.js +15 -6
  276. package/src/nodes/lighting/LightsNode.js +132 -1
  277. package/src/nodes/lighting/PointLightNode.js +32 -1
  278. package/src/nodes/lighting/PointShadowNode.js +54 -1
  279. package/src/nodes/lighting/RectAreaLightNode.js +44 -6
  280. package/src/nodes/lighting/ShadowBaseNode.js +93 -0
  281. package/src/nodes/lighting/ShadowNode.js +240 -34
  282. package/src/nodes/lighting/SpotLightNode.js +43 -0
  283. package/src/nodes/math/ConditionalNode.js +70 -3
  284. package/src/nodes/math/Hash.js +9 -0
  285. package/src/nodes/math/MathNode.js +614 -11
  286. package/src/nodes/math/MathUtils.js +45 -1
  287. package/src/nodes/math/OperatorNode.js +233 -0
  288. package/src/nodes/math/TriNoise3D.js +18 -7
  289. package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
  290. package/src/nodes/parsers/GLSLNodeParser.js +11 -0
  291. package/src/nodes/pmrem/PMREMNode.js +133 -0
  292. package/src/nodes/pmrem/PMREMUtils.js +1 -1
  293. package/src/nodes/procedural/Checker.js +9 -0
  294. package/src/nodes/tsl/TSLBase.js +2 -2
  295. package/src/nodes/utils/ArrayElementNode.js +38 -2
  296. package/src/nodes/utils/ConvertNode.js +31 -0
  297. package/src/nodes/utils/CubeMapNode.js +78 -0
  298. package/src/nodes/utils/Discard.js +16 -0
  299. package/src/nodes/utils/EquirectUVNode.js +31 -1
  300. package/src/nodes/utils/FlipNode.js +38 -0
  301. package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
  302. package/src/nodes/utils/JoinNode.js +25 -0
  303. package/src/nodes/utils/LoopNode.js +74 -1
  304. package/src/nodes/utils/MatcapUVNode.js +17 -0
  305. package/src/nodes/utils/MaxMipLevelNode.js +49 -0
  306. package/src/nodes/utils/Oscillators.js +33 -0
  307. package/src/nodes/utils/Packing.js +17 -0
  308. package/src/nodes/utils/PostProcessingUtils.js +28 -23
  309. package/src/nodes/utils/RTTNode.js +123 -2
  310. package/src/nodes/utils/ReflectorNode.js +174 -4
  311. package/src/nodes/utils/RemapNode.js +79 -0
  312. package/src/nodes/utils/RotateNode.js +41 -0
  313. package/src/nodes/utils/SetNode.js +44 -1
  314. package/src/nodes/utils/SplitNode.js +55 -3
  315. package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
  316. package/src/nodes/utils/SpriteUtils.js +17 -0
  317. package/src/nodes/utils/StorageArrayElementNode.js +40 -0
  318. package/src/nodes/utils/Timer.js +19 -0
  319. package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
  320. package/src/nodes/utils/UVUtils.js +20 -0
  321. package/src/nodes/utils/ViewportUtils.js +13 -0
  322. package/src/objects/BatchedMesh.js +1 -2
  323. package/src/objects/ClippingGroup.js +49 -0
  324. package/src/renderers/WebGLRenderer.js +23 -4
  325. package/src/renderers/common/Animation.js +63 -0
  326. package/src/renderers/common/Attributes.js +36 -0
  327. package/src/renderers/common/Backend.js +467 -52
  328. package/src/renderers/common/Background.js +34 -1
  329. package/src/renderers/common/BindGroup.js +43 -0
  330. package/src/renderers/common/Binding.js +35 -0
  331. package/src/renderers/common/Bindings.js +93 -1
  332. package/src/renderers/common/Buffer.js +49 -0
  333. package/src/renderers/common/BufferUtils.js +27 -0
  334. package/src/renderers/common/BundleGroup.js +57 -0
  335. package/src/renderers/common/ChainMap.js +38 -1
  336. package/src/renderers/common/ClippingContext.js +107 -14
  337. package/src/renderers/common/Color4.js +36 -0
  338. package/src/renderers/common/ComputePipeline.js +24 -0
  339. package/src/renderers/common/CubeRenderTarget.js +13 -0
  340. package/src/renderers/common/DataMap.js +37 -1
  341. package/src/renderers/common/Geometries.js +98 -0
  342. package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
  343. package/src/renderers/common/Info.js +87 -0
  344. package/src/renderers/common/Lighting.js +26 -0
  345. package/src/renderers/common/Pipeline.js +22 -0
  346. package/src/renderers/common/Pipelines.js +148 -5
  347. package/src/renderers/common/PostProcessing.js +75 -3
  348. package/src/renderers/common/ProgrammableStage.js +60 -2
  349. package/src/renderers/common/QuadMesh.js +54 -5
  350. package/src/renderers/common/RenderBundle.js +14 -8
  351. package/src/renderers/common/RenderBundles.js +33 -10
  352. package/src/renderers/common/RenderContext.js +169 -4
  353. package/src/renderers/common/RenderContexts.js +42 -2
  354. package/src/renderers/common/RenderList.js +178 -0
  355. package/src/renderers/common/RenderLists.js +31 -0
  356. package/src/renderers/common/RenderObject.js +328 -4
  357. package/src/renderers/common/RenderObjects.js +101 -7
  358. package/src/renderers/common/RenderPipeline.js +24 -0
  359. package/src/renderers/common/Renderer.js +1096 -31
  360. package/src/renderers/common/RendererUtils.js +193 -0
  361. package/src/renderers/common/SampledTexture.js +121 -0
  362. package/src/renderers/common/Sampler.js +30 -0
  363. package/src/renderers/common/StorageBuffer.js +24 -0
  364. package/src/renderers/common/StorageBufferAttribute.js +31 -2
  365. package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
  366. package/src/renderers/common/StorageTexture.js +38 -0
  367. package/src/renderers/common/Textures.js +83 -0
  368. package/src/renderers/common/Uniform.js +188 -2
  369. package/src/renderers/common/UniformBuffer.js +19 -0
  370. package/src/renderers/common/UniformsGroup.js +139 -2
  371. package/src/renderers/common/extras/PMREMGenerator.js +24 -3
  372. package/src/renderers/common/nodes/NodeBuilderState.js +95 -1
  373. package/src/renderers/common/nodes/NodeLibrary.js +89 -0
  374. package/src/renderers/common/nodes/NodeSampledTexture.js +91 -2
  375. package/src/renderers/common/nodes/NodeSampler.js +28 -0
  376. package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
  377. package/src/renderers/common/nodes/NodeUniform.js +189 -0
  378. package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
  379. package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
  380. package/src/renderers/common/nodes/Nodes.js +327 -60
  381. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
  382. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
  383. package/src/renderers/webgl-fallback/WebGLBackend.js +547 -29
  384. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +0 -1
  385. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +1 -1
  386. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +1 -1
  387. package/src/renderers/webgpu/WebGPUBackend.js +480 -49
  388. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +34 -0
  389. package/src/renderers/webgpu/WebGPURenderer.js +35 -0
  390. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
  391. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
  392. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +59 -11
  393. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
  394. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  395. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +10 -8
  396. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +9 -1
  397. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +5 -9
  398. package/src/renderers/webgpu/utils/WebGPUUtils.js +30 -0
  399. package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
  400. package/src/renderers/webxr/WebXRManager.js +7 -1
  401. package/src/textures/Data3DTexture.js +2 -2
  402. package/src/textures/Texture.js +4 -0
  403. package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
  404. package/examples/jsm/animation/MMDPhysics.js +0 -1408
  405. package/examples/jsm/exporters/MMDExporter.js +0 -223
  406. package/examples/jsm/libs/mmdparser.module.js +0 -11530
  407. package/examples/jsm/loaders/MMDLoader.js +0 -2298
  408. package/examples/jsm/shaders/MMDToonShader.js +0 -134
  409. package/src/nodes/core/UniformGroup.js +0 -13
  410. package/src/nodes/fog/FogExp2Node.js +0 -35
  411. package/src/nodes/fog/FogNode.js +0 -50
  412. package/src/nodes/fog/FogRangeNode.js +0 -36
  413. package/src/renderers/common/PostProcessingUtils.js +0 -86
@@ -1,10 +1,40 @@
1
+ /**
2
+ * {@link NodeBuilder} is going to create instances of this class during the build process
3
+ * of nodes. They represent the final shader variables that are going to be generated
4
+ * by the builder. A dictionary of node variables is maintained in {@link NodeBuilder#vars} for
5
+ * this purpose.
6
+ */
1
7
  class NodeVar {
2
8
 
9
+ /**
10
+ * Constructs a new node variable.
11
+ *
12
+ * @param {String} name - The name of the variable.
13
+ * @param {String} type - The type of the variable.
14
+ */
3
15
  constructor( name, type ) {
4
16
 
17
+ /**
18
+ * This flag can be used for type testing.
19
+ *
20
+ * @type {Boolean}
21
+ * @readonly
22
+ * @default true
23
+ */
5
24
  this.isNodeVar = true;
6
25
 
26
+ /**
27
+ * The name of the variable.
28
+ *
29
+ * @type {String}
30
+ */
7
31
  this.name = name;
32
+
33
+ /**
34
+ * The type of the variable.
35
+ *
36
+ * @type {String}
37
+ */
8
38
  this.type = type;
9
39
 
10
40
  }
@@ -1,13 +1,41 @@
1
1
  import NodeVar from './NodeVar.js';
2
2
 
3
+ /**
4
+ * {@link NodeBuilder} is going to create instances of this class during the build process
5
+ * of nodes. They represent the final shader varyings that are going to be generated
6
+ * by the builder. An array of node varyings is maintained in {@link NodeBuilder#varyings} for
7
+ * this purpose.
8
+ *
9
+ * @augments NodeVar
10
+ */
3
11
  class NodeVarying extends NodeVar {
4
12
 
13
+ /**
14
+ * Constructs a new node varying.
15
+ *
16
+ * @param {String} name - The name of the varying.
17
+ * @param {String} type - The type of the varying.
18
+ */
5
19
  constructor( name, type ) {
6
20
 
7
21
  super( name, type );
8
22
 
23
+ /**
24
+ * Whether this varying requires interpolation or not. This property can be used
25
+ * to check if the varying can be optimized for a variable.
26
+ *
27
+ * @type {Boolean}
28
+ * @default false
29
+ */
9
30
  this.needsInterpolation = false;
10
31
 
32
+ /**
33
+ * This flag can be used for type testing.
34
+ *
35
+ * @type {Boolean}
36
+ * @readonly
37
+ * @default true
38
+ */
11
39
  this.isNodeVarying = true;
12
40
 
13
41
  }
@@ -1,7 +1,13 @@
1
1
  import Node from './Node.js';
2
- import StructTypeNode from './StructTypeNode.js';
3
2
  import { nodeProxy } from '../tsl/TSLBase.js';
4
3
 
4
+ /** @module OutputStructNode **/
5
+
6
+ /**
7
+ * This node can be used to define multiple outputs in a shader programs.
8
+ *
9
+ * @augments Node
10
+ */
5
11
  class OutputStructNode extends Node {
6
12
 
7
13
  static get type() {
@@ -10,12 +16,30 @@ class OutputStructNode extends Node {
10
16
 
11
17
  }
12
18
 
19
+ /**
20
+ * Constructs a new output struct node. The constructor can be invoked with an
21
+ * arbitrary number of nodes representing the members.
22
+ *
23
+ * @param {...Node} members - A parameter list of nodes.
24
+ */
13
25
  constructor( ...members ) {
14
26
 
15
27
  super();
16
28
 
29
+ /**
30
+ * An array of nodes which defines the output.
31
+ *
32
+ * @type {Array<Node>}
33
+ */
17
34
  this.members = members;
18
35
 
36
+ /**
37
+ * This flag can be used for type testing.
38
+ *
39
+ * @type {Boolean}
40
+ * @readonly
41
+ * @default true
42
+ */
19
43
  this.isOutputStructNode = true;
20
44
 
21
45
  }
@@ -33,7 +57,7 @@ class OutputStructNode extends Node {
33
57
 
34
58
  }
35
59
 
36
- this.nodeType = builder.getStructTypeFromNode( new StructTypeNode( types ) ).name;
60
+ this.nodeType = builder.getStructTypeFromNode( this, types ).name;
37
61
 
38
62
  }
39
63
 
@@ -60,4 +84,11 @@ class OutputStructNode extends Node {
60
84
 
61
85
  export default OutputStructNode;
62
86
 
87
+ /**
88
+ * TSL function for creating an output struct node.
89
+ *
90
+ * @function
91
+ * @param {...Node} members - A parameter list of nodes.
92
+ * @returns {OutputStructNode}
93
+ */
63
94
  export const outputStruct = /*@__PURE__*/ nodeProxy( OutputStructNode );
@@ -1,6 +1,13 @@
1
1
  import { nodeObject } from '../tsl/TSLBase.js';
2
2
  import PropertyNode from './PropertyNode.js';
3
3
 
4
+ /** @module ParameterNode **/
5
+
6
+ /**
7
+ * Special version of {@link PropertyNode} which is used for parameters.
8
+ *
9
+ * @augments PropertyNode
10
+ */
4
11
  class ParameterNode extends PropertyNode {
5
12
 
6
13
  static get type() {
@@ -9,10 +16,23 @@ class ParameterNode extends PropertyNode {
9
16
 
10
17
  }
11
18
 
19
+ /**
20
+ * Constructs a new parameter node.
21
+ *
22
+ * @param {String} nodeType - The type of the node.
23
+ * @param {String?} [name=null] - The name of the parameter in the shader.
24
+ */
12
25
  constructor( nodeType, name = null ) {
13
26
 
14
27
  super( nodeType, name );
15
28
 
29
+ /**
30
+ * This flag can be used for type testing.
31
+ *
32
+ * @type {Boolean}
33
+ * @readonly
34
+ * @default true
35
+ */
16
36
  this.isParameterNode = true;
17
37
 
18
38
  }
@@ -33,4 +53,12 @@ class ParameterNode extends PropertyNode {
33
53
 
34
54
  export default ParameterNode;
35
55
 
56
+ /**
57
+ * TSL function for creating a parameter node.
58
+ *
59
+ * @function
60
+ * @param {String} type - The type of the node.
61
+ * @param {String?} name - The name of the parameter in the shader.
62
+ * @returns {ParameterNode}
63
+ */
36
64
  export const parameter = ( type, name ) => nodeObject( new ParameterNode( type, name ) );
@@ -1,6 +1,20 @@
1
1
  import Node from './Node.js';
2
2
  import { nodeImmutable, nodeObject } from '../tsl/TSLCore.js';
3
3
 
4
+ /** @module PropertyNode **/
5
+
6
+ /**
7
+ * This class represents a shader property. It can be used
8
+ * to explicitly define a property and assign a value to it.
9
+ *
10
+ * ```js
11
+ * const threshold = property( 'float', 'threshold' ).assign( THRESHOLD );
12
+ *```
13
+ * `PropertyNode` is used by the engine to predefined common material properties
14
+ * for TSL code.
15
+ *
16
+ * @augments Node
17
+ */
4
18
  class PropertyNode extends Node {
5
19
 
6
20
  static get type() {
@@ -9,13 +23,41 @@ class PropertyNode extends Node {
9
23
 
10
24
  }
11
25
 
26
+ /**
27
+ * Constructs a new property node.
28
+ *
29
+ * @param {String} nodeType - The type of the node.
30
+ * @param {String?} [name=null] - The name of the property in the shader.
31
+ * @param {Boolean} [varying=false] - Whether this property is a varying or not.
32
+ */
12
33
  constructor( nodeType, name = null, varying = false ) {
13
34
 
14
35
  super( nodeType );
15
36
 
37
+ /**
38
+ * The name of the property in the shader. If no name is defined,
39
+ * the node system auto-generates one.
40
+ *
41
+ * @type {String?}
42
+ * @default null
43
+ */
16
44
  this.name = name;
45
+
46
+ /**
47
+ * Whether this property is a varying or not.
48
+ *
49
+ * @type {Boolean}
50
+ * @default false
51
+ */
17
52
  this.varying = varying;
18
53
 
54
+ /**
55
+ * This flag can be used for type testing.
56
+ *
57
+ * @type {Boolean}
58
+ * @readonly
59
+ * @default true
60
+ */
19
61
  this.isPropertyNode = true;
20
62
 
21
63
  }
@@ -26,6 +68,12 @@ class PropertyNode extends Node {
26
68
 
27
69
  }
28
70
 
71
+ /**
72
+ * The method is overwritten so it always returns `true`.
73
+ *
74
+ * @param {NodeBuilder} builder - The current node builder.
75
+ * @return {Boolean} Whether this node is global or not.
76
+ */
29
77
  isGlobal( /*builder*/ ) {
30
78
 
31
79
  return true;
@@ -55,34 +103,218 @@ class PropertyNode extends Node {
55
103
 
56
104
  export default PropertyNode;
57
105
 
106
+ /**
107
+ * TSL function for creating a property node.
108
+ *
109
+ * @function
110
+ * @param {String} type - The type of the node.
111
+ * @param {String?} [name=null] - The name of the property in the shader.
112
+ * @returns {PropertyNode}
113
+ */
58
114
  export const property = ( type, name ) => nodeObject( new PropertyNode( type, name ) );
115
+
116
+ /**
117
+ * TSL function for creating a varying property node.
118
+ *
119
+ * @function
120
+ * @param {String} type - The type of the node.
121
+ * @param {String?} [name=null] - The name of the varying in the shader.
122
+ * @returns {PropertyNode}
123
+ */
59
124
  export const varyingProperty = ( type, name ) => nodeObject( new PropertyNode( type, name, true ) );
60
125
 
126
+ /**
127
+ * TSL object that represents the shader variable `DiffuseColor`.
128
+ *
129
+ * @type {PropertyNode<vec4>}
130
+ */
61
131
  export const diffuseColor = /*@__PURE__*/ nodeImmutable( PropertyNode, 'vec4', 'DiffuseColor' );
132
+
133
+ /**
134
+ * TSL object that represents the shader variable `EmissiveColor`.
135
+ *
136
+ * @type {PropertyNode<vec3>}
137
+ */
62
138
  export const emissive = /*@__PURE__*/ nodeImmutable( PropertyNode, 'vec3', 'EmissiveColor' );
139
+
140
+ /**
141
+ * TSL object that represents the shader variable `Roughness`.
142
+ *
143
+ * @type {PropertyNode<float>}
144
+ */
63
145
  export const roughness = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'Roughness' );
146
+
147
+ /**
148
+ * TSL object that represents the shader variable `Metalness`.
149
+ *
150
+ * @type {PropertyNode<float>}
151
+ */
64
152
  export const metalness = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'Metalness' );
153
+
154
+ /**
155
+ * TSL object that represents the shader variable `Clearcoat`.
156
+ *
157
+ * @type {PropertyNode<float>}
158
+ */
65
159
  export const clearcoat = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'Clearcoat' );
160
+
161
+ /**
162
+ * TSL object that represents the shader variable `ClearcoatRoughness`.
163
+ *
164
+ * @type {PropertyNode<float>}
165
+ */
66
166
  export const clearcoatRoughness = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'ClearcoatRoughness' );
167
+
168
+ /**
169
+ * TSL object that represents the shader variable `Sheen`.
170
+ *
171
+ * @type {PropertyNode<vec3>}
172
+ */
67
173
  export const sheen = /*@__PURE__*/ nodeImmutable( PropertyNode, 'vec3', 'Sheen' );
174
+
175
+ /**
176
+ * TSL object that represents the shader variable `SheenRoughness`.
177
+ *
178
+ * @type {PropertyNode<float>}
179
+ */
68
180
  export const sheenRoughness = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'SheenRoughness' );
181
+
182
+ /**
183
+ * TSL object that represents the shader variable `Iridescence`.
184
+ *
185
+ * @type {PropertyNode<float>}
186
+ */
69
187
  export const iridescence = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'Iridescence' );
188
+
189
+ /**
190
+ * TSL object that represents the shader variable `IridescenceIOR`.
191
+ *
192
+ * @type {PropertyNode<float>}
193
+ */
70
194
  export const iridescenceIOR = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'IridescenceIOR' );
195
+
196
+ /**
197
+ * TSL object that represents the shader variable `IridescenceThickness`.
198
+ *
199
+ * @type {PropertyNode<float>}
200
+ */
71
201
  export const iridescenceThickness = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'IridescenceThickness' );
202
+
203
+ /**
204
+ * TSL object that represents the shader variable `AlphaT`.
205
+ *
206
+ * @type {PropertyNode<float>}
207
+ */
72
208
  export const alphaT = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'AlphaT' );
209
+
210
+ /**
211
+ * TSL object that represents the shader variable `Anisotropy`.
212
+ *
213
+ * @type {PropertyNode<float>}
214
+ */
73
215
  export const anisotropy = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'Anisotropy' );
216
+
217
+ /**
218
+ * TSL object that represents the shader variable `AnisotropyT`.
219
+ *
220
+ * @type {PropertyNode<vec3>}
221
+ */
74
222
  export const anisotropyT = /*@__PURE__*/ nodeImmutable( PropertyNode, 'vec3', 'AnisotropyT' );
223
+
224
+ /**
225
+ * TSL object that represents the shader variable `AnisotropyB`.
226
+ *
227
+ * @type {PropertyNode<vec3>}
228
+ */
75
229
  export const anisotropyB = /*@__PURE__*/ nodeImmutable( PropertyNode, 'vec3', 'AnisotropyB' );
230
+
231
+ /**
232
+ * TSL object that represents the shader variable `SpecularColor`.
233
+ *
234
+ * @type {PropertyNode<color>}
235
+ */
76
236
  export const specularColor = /*@__PURE__*/ nodeImmutable( PropertyNode, 'color', 'SpecularColor' );
237
+
238
+ /**
239
+ * TSL object that represents the shader variable `SpecularF90`.
240
+ *
241
+ * @type {PropertyNode<float>}
242
+ */
77
243
  export const specularF90 = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'SpecularF90' );
244
+
245
+ /**
246
+ * TSL object that represents the shader variable `Shininess`.
247
+ *
248
+ * @type {PropertyNode<float>}
249
+ */
78
250
  export const shininess = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'Shininess' );
251
+
252
+ /**
253
+ * TSL object that represents the shader variable `Output`.
254
+ *
255
+ * @type {PropertyNode<vec4>}
256
+ */
79
257
  export const output = /*@__PURE__*/ nodeImmutable( PropertyNode, 'vec4', 'Output' );
258
+
259
+ /**
260
+ * TSL object that represents the shader variable `dashSize`.
261
+ *
262
+ * @type {PropertyNode<float>}
263
+ */
80
264
  export const dashSize = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'dashSize' );
265
+
266
+ /**
267
+ * TSL object that represents the shader variable `gapSize`.
268
+ *
269
+ * @type {PropertyNode<float>}
270
+ */
81
271
  export const gapSize = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'gapSize' );
272
+
273
+ /**
274
+ * TSL object that represents the shader variable `pointWidth`.
275
+ *
276
+ * @type {PropertyNode<float>}
277
+ */
82
278
  export const pointWidth = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'pointWidth' );
279
+
280
+ /**
281
+ * TSL object that represents the shader variable `IOR`.
282
+ *
283
+ * @type {PropertyNode<float>}
284
+ */
83
285
  export const ior = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'IOR' );
286
+
287
+ /**
288
+ * TSL object that represents the shader variable `Transmission`.
289
+ *
290
+ * @type {PropertyNode<float>}
291
+ */
84
292
  export const transmission = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'Transmission' );
293
+
294
+ /**
295
+ * TSL object that represents the shader variable `Thickness`.
296
+ *
297
+ * @type {PropertyNode<float>}
298
+ */
85
299
  export const thickness = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'Thickness' );
300
+
301
+ /**
302
+ * TSL object that represents the shader variable `AttenuationDistance`.
303
+ *
304
+ * @type {PropertyNode<float>}
305
+ */
86
306
  export const attenuationDistance = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'AttenuationDistance' );
307
+
308
+ /**
309
+ * TSL object that represents the shader variable `AttenuationColor`.
310
+ *
311
+ * @type {PropertyNode<color>}
312
+ */
87
313
  export const attenuationColor = /*@__PURE__*/ nodeImmutable( PropertyNode, 'color', 'AttenuationColor' );
314
+
315
+ /**
316
+ * TSL object that represents the shader variable `Dispersion`.
317
+ *
318
+ * @type {PropertyNode<float>}
319
+ */
88
320
  export const dispersion = /*@__PURE__*/ nodeImmutable( PropertyNode, 'float', 'Dispersion' );
@@ -2,6 +2,14 @@ import Node from './Node.js';
2
2
  import { select } from '../math/ConditionalNode.js';
3
3
  import { ShaderNode, nodeProxy, getCurrentStack, setCurrentStack } from '../tsl/TSLBase.js';
4
4
 
5
+ /** @module StackNode **/
6
+
7
+ /**
8
+ * Stack is a helper for Nodes that need to produce stack-based code instead of continuous flow.
9
+ * They are usually needed in cases like `If`, `Else`.
10
+ *
11
+ * @augments Node
12
+ */
5
13
  class StackNode extends Node {
6
14
 
7
15
  static get type() {
@@ -10,17 +18,54 @@ class StackNode extends Node {
10
18
 
11
19
  }
12
20
 
21
+ /**
22
+ * Constructs a new stack node.
23
+ *
24
+ * @param {StackNode?} [parent=null] - The parent stack node.
25
+ */
13
26
  constructor( parent = null ) {
14
27
 
15
28
  super();
16
29
 
30
+ /**
31
+ * List of nodes.
32
+ *
33
+ * @type {Array<Node>}
34
+ */
17
35
  this.nodes = [];
36
+
37
+ /**
38
+ * The output node.
39
+ *
40
+ * @type {Node?}
41
+ * @default null
42
+ */
18
43
  this.outputNode = null;
19
44
 
45
+ /**
46
+ * The parent stack node.
47
+ *
48
+ * @type {StackNode}
49
+ * @default null
50
+ */
20
51
  this.parent = parent;
21
52
 
53
+ /**
54
+ * The current conditional node.
55
+ *
56
+ * @private
57
+ * @type {ConditionalNode}
58
+ * @default null
59
+ */
22
60
  this._currentCond = null;
23
61
 
62
+ /**
63
+ * This flag can be used for type testing.
64
+ *
65
+ * @type {Boolean}
66
+ * @readonly
67
+ * @default true
68
+ */
24
69
  this.isStackNode = true;
25
70
 
26
71
  }
@@ -31,6 +76,12 @@ class StackNode extends Node {
31
76
 
32
77
  }
33
78
 
79
+ /**
80
+ * Adds a node to this stack.
81
+ *
82
+ * @param {Node} node - The node to add.
83
+ * @return {StackNode} A reference to this stack node.
84
+ */
34
85
  add( node ) {
35
86
 
36
87
  this.nodes.push( node );
@@ -39,6 +90,13 @@ class StackNode extends Node {
39
90
 
40
91
  }
41
92
 
93
+ /**
94
+ * Represent an `if` statement in TSL.
95
+ *
96
+ * @param {Node} boolNode - Represents the condition.
97
+ * @param {Function} method - TSL code which is executed if the condition evaluates to `true`.
98
+ * @return {StackNode} A reference to this stack node.
99
+ */
42
100
  If( boolNode, method ) {
43
101
 
44
102
  const methodNode = new ShaderNode( method );
@@ -48,6 +106,13 @@ class StackNode extends Node {
48
106
 
49
107
  }
50
108
 
109
+ /**
110
+ * Represent an `elseif` statement in TSL.
111
+ *
112
+ * @param {Node} boolNode - Represents the condition.
113
+ * @param {Function} method - TSL code which is executed if the condition evaluates to `true`.
114
+ * @return {StackNode} A reference to this stack node.
115
+ */
51
116
  ElseIf( boolNode, method ) {
52
117
 
53
118
  const methodNode = new ShaderNode( method );
@@ -60,6 +125,12 @@ class StackNode extends Node {
60
125
 
61
126
  }
62
127
 
128
+ /**
129
+ * Represent an `else` statement in TSL.
130
+ *
131
+ * @param {Function} method - TSL code which is executed in the `else` case.
132
+ * @return {StackNode} A reference to this stack node.
133
+ */
63
134
  Else( method ) {
64
135
 
65
136
  this._currentCond.elseNode = new ShaderNode( method );
@@ -106,4 +177,11 @@ class StackNode extends Node {
106
177
 
107
178
  export default StackNode;
108
179
 
180
+ /**
181
+ * TSL function for creating a stack node.
182
+ *
183
+ * @function
184
+ * @param {StackNode?} [parent=null] - The parent stack node.
185
+ * @returns {StackNode}
186
+ */
109
187
  export const stack = /*@__PURE__*/ nodeProxy( StackNode );
@@ -1,5 +1,11 @@
1
1
  import Node from './Node.js';
2
2
 
3
+ /**
4
+ * {@link NodeBuilder} is going to create instances of this class during the build process
5
+ * of nodes. They represent the final shader struct data that are going to be generated
6
+ * by the builder. A dictionary of struct types is maintained in {@link NodeBuilder#structs}
7
+ * for this purpose.
8
+ */
3
9
  class StructTypeNode extends Node {
4
10
 
5
11
  static get type() {
@@ -8,15 +14,47 @@ class StructTypeNode extends Node {
8
14
 
9
15
  }
10
16
 
11
- constructor( types ) {
17
+ /**
18
+ * Constructs a new struct type node.
19
+ *
20
+ * @param {String} name - The name of the struct.
21
+ * @param {Array<String>} types - An array of types.
22
+ */
23
+ constructor( name, types ) {
12
24
 
13
25
  super();
14
26
 
27
+ /**
28
+ * The name of the struct.
29
+ *
30
+ * @type {String}
31
+ */
32
+ this.name = name;
33
+
34
+
35
+ /**
36
+ * An array of types.
37
+ *
38
+ * @type {Array<String>}
39
+ */
15
40
  this.types = types;
41
+
42
+ /**
43
+ * This flag can be used for type testing.
44
+ *
45
+ * @type {Boolean}
46
+ * @readonly
47
+ * @default true
48
+ */
16
49
  this.isStructTypeNode = true;
17
50
 
18
51
  }
19
52
 
53
+ /**
54
+ * Returns the member types.
55
+ *
56
+ * @return {Array<String>} The types.
57
+ */
20
58
  getMemberTypes() {
21
59
 
22
60
  return this.types;