super-three 0.171.0 → 0.173.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 (455) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/build/three.cjs +594 -427
  4. package/build/three.core.js +515 -81
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +79 -350
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +20 -7
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +29362 -3427
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +29361 -3427
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +0 -5
  15. package/examples/jsm/animation/CCDIKSolver.js +9 -7
  16. package/examples/jsm/capabilities/WebGPU.js +1 -1
  17. package/examples/jsm/controls/ArcballControls.js +48 -37
  18. package/examples/jsm/controls/OrbitControls.js +5 -4
  19. package/examples/jsm/csm/CSMShadowNode.js +16 -11
  20. package/examples/jsm/curves/NURBSCurve.js +1 -1
  21. package/examples/jsm/curves/NURBSUtils.js +3 -0
  22. package/examples/jsm/effects/OutlineEffect.js +1 -1
  23. package/examples/jsm/exporters/GLTFExporter.js +34 -29
  24. package/examples/jsm/exporters/KTX2Exporter.js +1 -1
  25. package/examples/jsm/exporters/PLYExporter.js +2 -2
  26. package/examples/jsm/geometries/TextGeometry.js +1 -12
  27. package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
  28. package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
  29. package/examples/jsm/interactive/InteractiveGroup.js +108 -51
  30. package/examples/jsm/libs/demuxer_mp4.js +109 -0
  31. package/examples/jsm/lights/LightProbeGenerator.js +3 -3
  32. package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
  33. package/examples/jsm/loaders/3MFLoader.js +6 -3
  34. package/examples/jsm/loaders/BVHLoader.js +1 -1
  35. package/examples/jsm/loaders/ColladaLoader.js +5 -5
  36. package/examples/jsm/loaders/DDSLoader.js +42 -0
  37. package/examples/jsm/loaders/GCodeLoader.js +4 -2
  38. package/examples/jsm/loaders/GLTFLoader.js +22 -4
  39. package/examples/jsm/loaders/KTX2Loader.js +6 -1
  40. package/examples/jsm/loaders/KTXLoader.js +4 -4
  41. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  42. package/examples/jsm/loaders/LottieLoader.js +1 -1
  43. package/examples/jsm/loaders/MTLLoader.js +1 -0
  44. package/examples/jsm/loaders/NRRDLoader.js +1 -1
  45. package/examples/jsm/loaders/PLYLoader.js +7 -7
  46. package/examples/jsm/loaders/PVRLoader.js +1 -1
  47. package/examples/jsm/loaders/SVGLoader.js +2 -2
  48. package/examples/jsm/loaders/TDSLoader.js +1 -2
  49. package/examples/jsm/loaders/VRMLLoader.js +7 -7
  50. package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
  51. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
  52. package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
  53. package/examples/jsm/math/ConvexHull.js +1 -1
  54. package/examples/jsm/math/OBB.js +17 -0
  55. package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
  56. package/examples/jsm/misc/ProgressiveLightMap.js +4 -3
  57. package/examples/jsm/misc/ProgressiveLightMapGPU.js +14 -13
  58. package/examples/jsm/misc/Volume.js +27 -17
  59. package/examples/jsm/misc/VolumeSlice.js +7 -5
  60. package/examples/jsm/modifiers/CurveModifier.js +10 -8
  61. package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
  62. package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
  63. package/examples/jsm/objects/GroundedSkybox.js +4 -4
  64. package/examples/jsm/objects/Sky.js +2 -2
  65. package/examples/jsm/objects/SkyMesh.js +3 -3
  66. package/examples/jsm/objects/Water2.js +1 -1
  67. package/examples/jsm/objects/Water2Mesh.js +2 -2
  68. package/examples/jsm/objects/WaterMesh.js +29 -24
  69. package/examples/jsm/physics/JoltPhysics.js +7 -7
  70. package/examples/jsm/physics/RapierPhysics.js +4 -4
  71. package/examples/jsm/postprocessing/BloomPass.js +2 -2
  72. package/examples/jsm/postprocessing/EffectComposer.js +1 -2
  73. package/examples/jsm/postprocessing/OutlinePass.js +4 -4
  74. package/examples/jsm/postprocessing/OutputPass.js +2 -0
  75. package/examples/jsm/postprocessing/SAOPass.js +1 -2
  76. package/examples/jsm/postprocessing/SMAAPass.js +1 -3
  77. package/examples/jsm/postprocessing/SSAOPass.js +2 -4
  78. package/examples/jsm/postprocessing/SSRPass.js +2 -4
  79. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
  80. package/examples/jsm/renderers/SVGRenderer.js +6 -4
  81. package/examples/jsm/shaders/BokehShader2.js +1 -1
  82. package/examples/jsm/shaders/GodRaysShader.js +3 -3
  83. package/examples/jsm/shaders/OutputShader.js +5 -1
  84. package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
  85. package/examples/jsm/transpiler/GLSLDecoder.js +2 -2
  86. package/examples/jsm/transpiler/TSLEncoder.js +2 -0
  87. package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
  88. package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
  89. package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
  90. package/examples/jsm/tsl/display/BleachBypass.js +10 -0
  91. package/examples/jsm/tsl/display/BloomNode.js +233 -26
  92. package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
  93. package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
  94. package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
  95. package/examples/jsm/tsl/display/FXAANode.js +52 -3
  96. package/examples/jsm/tsl/display/FilmNode.js +47 -1
  97. package/examples/jsm/tsl/display/GTAONode.js +210 -14
  98. package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
  99. package/examples/jsm/tsl/display/LensflareNode.js +131 -13
  100. package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
  101. package/examples/jsm/tsl/display/MotionBlur.js +12 -2
  102. package/examples/jsm/tsl/display/OutlineNode.js +343 -26
  103. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
  104. package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
  105. package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
  106. package/examples/jsm/tsl/display/SMAANode.js +187 -46
  107. package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
  108. package/examples/jsm/tsl/display/SSRNode.js +194 -21
  109. package/examples/jsm/tsl/display/Sepia.js +9 -0
  110. package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
  111. package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
  112. package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
  113. package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
  114. package/examples/jsm/tsl/display/TransitionNode.js +71 -6
  115. package/examples/jsm/tsl/display/hashBlur.js +14 -3
  116. package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
  117. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  118. package/examples/jsm/utils/CameraUtils.js +4 -1
  119. package/examples/jsm/utils/GeometryUtils.js +22 -19
  120. package/examples/jsm/utils/SceneUtils.js +2 -2
  121. package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
  122. package/examples/jsm/webxr/XREstimatedLight.js +1 -1
  123. package/package.json +8 -3
  124. package/src/Three.Core.js +4 -0
  125. package/src/Three.Legacy.js +0 -21
  126. package/src/Three.TSL.js +18 -5
  127. package/src/Three.WebGPU.Nodes.js +2 -2
  128. package/src/Three.WebGPU.js +2 -2
  129. package/src/animation/PropertyBinding.js +2 -2
  130. package/src/cameras/ArrayCamera.js +1 -0
  131. package/src/cameras/PerspectiveCamera.js +18 -2
  132. package/src/constants.js +6 -1
  133. package/src/core/BufferAttribute.js +4 -0
  134. package/src/core/EventDispatcher.js +8 -6
  135. package/src/core/RenderTarget.js +18 -0
  136. package/src/core/RenderTarget3D.js +22 -0
  137. package/src/core/RenderTargetArray.js +22 -0
  138. package/src/extras/Earcut.js +1 -1
  139. package/src/extras/ImageUtils.js +1 -11
  140. package/src/extras/PMREMGenerator.js +20 -0
  141. package/src/extras/TextureUtils.js +6 -0
  142. package/src/helpers/CameraHelper.js +16 -13
  143. package/src/loaders/nodes/NodeLoader.js +59 -0
  144. package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
  145. package/src/loaders/nodes/NodeObjectLoader.js +61 -0
  146. package/src/materials/nodes/Line2NodeMaterial.js +128 -34
  147. package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
  148. package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
  149. package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
  150. package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
  151. package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
  152. package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
  153. package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
  154. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
  155. package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
  156. package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
  157. package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
  158. package/src/materials/nodes/NodeMaterial.js +476 -23
  159. package/src/materials/nodes/NodeMaterials.js +0 -1
  160. package/src/materials/nodes/PointsNodeMaterial.js +121 -10
  161. package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
  162. package/src/materials/nodes/SpriteNodeMaterial.js +78 -20
  163. package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
  164. package/src/materials/nodes/manager/NodeMaterialObserver.js +95 -0
  165. package/src/nodes/Nodes.js +5 -6
  166. package/src/nodes/TSL.js +6 -3
  167. package/src/nodes/accessors/AccessorsUtils.js +27 -0
  168. package/src/nodes/accessors/Arrays.js +47 -6
  169. package/src/nodes/accessors/BatchNode.js +42 -6
  170. package/src/nodes/accessors/Bitangent.js +37 -0
  171. package/src/nodes/accessors/BufferAttributeNode.js +178 -5
  172. package/src/nodes/accessors/BufferNode.js +63 -0
  173. package/src/nodes/accessors/BuiltinNode.js +38 -0
  174. package/src/nodes/accessors/Camera.js +113 -3
  175. package/src/nodes/accessors/ClippingNode.js +71 -2
  176. package/src/nodes/accessors/CubeTextureNode.js +64 -0
  177. package/src/nodes/accessors/InstanceNode.js +85 -2
  178. package/src/nodes/accessors/InstancedMeshNode.js +28 -3
  179. package/src/nodes/accessors/Lights.js +50 -1
  180. package/src/nodes/accessors/MaterialNode.js +306 -12
  181. package/src/nodes/accessors/MaterialProperties.js +7 -0
  182. package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
  183. package/src/nodes/accessors/ModelNode.js +100 -5
  184. package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
  185. package/src/nodes/accessors/MorphNode.js +48 -4
  186. package/src/nodes/accessors/Normal.js +65 -5
  187. package/src/nodes/accessors/Object3DNode.js +101 -1
  188. package/src/nodes/accessors/PointUVNode.js +26 -0
  189. package/src/nodes/accessors/Position.js +56 -7
  190. package/src/nodes/accessors/ReferenceBaseNode.js +186 -0
  191. package/src/nodes/accessors/ReferenceNode.js +201 -2
  192. package/src/nodes/accessors/ReflectVector.js +24 -0
  193. package/src/nodes/accessors/RendererReferenceNode.js +46 -1
  194. package/src/nodes/accessors/SceneNode.js +54 -0
  195. package/src/nodes/accessors/SkinningNode.js +127 -1
  196. package/src/nodes/accessors/StorageBufferNode.js +209 -8
  197. package/src/nodes/accessors/StorageTextureNode.js +118 -0
  198. package/src/nodes/accessors/Tangent.js +38 -2
  199. package/src/nodes/accessors/Texture3DNode.js +91 -7
  200. package/src/nodes/accessors/TextureBicubic.js +12 -2
  201. package/src/nodes/accessors/TextureNode.js +316 -10
  202. package/src/nodes/accessors/TextureSizeNode.js +42 -0
  203. package/src/nodes/accessors/UV.js +10 -1
  204. package/src/nodes/accessors/UniformArrayNode.js +231 -25
  205. package/src/nodes/accessors/UserDataNode.js +46 -0
  206. package/src/nodes/accessors/VelocityNode.js +80 -0
  207. package/src/nodes/accessors/VertexColorNode.js +39 -2
  208. package/src/nodes/code/CodeNode.js +95 -1
  209. package/src/nodes/code/ExpressionNode.js +28 -0
  210. package/src/nodes/code/FunctionCallNode.js +37 -0
  211. package/src/nodes/code/FunctionNode.js +45 -0
  212. package/src/nodes/code/ScriptableNode.js +223 -1
  213. package/src/nodes/code/ScriptableValueNode.js +85 -1
  214. package/src/nodes/core/ArrayNode.js +125 -0
  215. package/src/nodes/core/AssignNode.js +48 -2
  216. package/src/nodes/core/AttributeNode.js +43 -0
  217. package/src/nodes/core/BypassNode.js +47 -2
  218. package/src/nodes/core/CacheNode.js +53 -2
  219. package/src/nodes/core/ConstNode.js +32 -0
  220. package/src/nodes/core/ContextNode.js +65 -0
  221. package/src/nodes/core/IndexNode.js +68 -7
  222. package/src/nodes/core/InputNode.js +48 -0
  223. package/src/nodes/core/LightingModel.js +60 -0
  224. package/src/nodes/core/MRTNode.js +66 -0
  225. package/src/nodes/core/Node.js +350 -12
  226. package/src/nodes/core/NodeAttribute.js +38 -0
  227. package/src/nodes/core/NodeBuilder.js +1166 -26
  228. package/src/nodes/core/NodeCache.js +41 -2
  229. package/src/nodes/core/NodeCode.js +31 -0
  230. package/src/nodes/core/NodeFrame.js +123 -2
  231. package/src/nodes/core/NodeFunction.js +46 -0
  232. package/src/nodes/core/NodeFunctionInput.js +44 -0
  233. package/src/nodes/core/NodeParser.js +11 -0
  234. package/src/nodes/core/NodeUniform.js +52 -0
  235. package/src/nodes/core/NodeUtils.js +152 -1
  236. package/src/nodes/core/NodeVar.js +47 -1
  237. package/src/nodes/core/NodeVarying.js +28 -0
  238. package/src/nodes/core/OutputStructNode.js +51 -10
  239. package/src/nodes/core/ParameterNode.js +28 -0
  240. package/src/nodes/core/PropertyNode.js +232 -0
  241. package/src/nodes/core/StackNode.js +98 -1
  242. package/src/nodes/core/StructNode.js +121 -0
  243. package/src/nodes/core/StructType.js +13 -0
  244. package/src/nodes/core/StructTypeNode.js +105 -6
  245. package/src/nodes/core/TempNode.js +31 -5
  246. package/src/nodes/core/UniformGroupNode.js +82 -7
  247. package/src/nodes/core/UniformNode.js +66 -0
  248. package/src/nodes/core/VarNode.js +146 -7
  249. package/src/nodes/core/VaryingNode.js +100 -3
  250. package/src/nodes/core/constants.js +36 -0
  251. package/src/nodes/display/BlendModes.js +88 -1
  252. package/src/nodes/display/BumpMapNode.js +37 -0
  253. package/src/nodes/display/ColorAdjustment.js +53 -11
  254. package/src/nodes/display/ColorSpaceFunctions.js +16 -0
  255. package/src/nodes/display/ColorSpaceNode.js +82 -0
  256. package/src/nodes/display/FrontFacingNode.js +29 -0
  257. package/src/nodes/display/NormalMapNode.js +43 -0
  258. package/src/nodes/display/PassNode.js +300 -7
  259. package/src/nodes/display/PosterizeNode.js +33 -0
  260. package/src/nodes/display/RenderOutputNode.js +66 -1
  261. package/src/nodes/display/ScreenNode.js +96 -0
  262. package/src/nodes/display/ToneMappingFunctions.js +58 -10
  263. package/src/nodes/display/ToneMappingNode.js +55 -2
  264. package/src/nodes/display/ToonOutlinePassNode.js +73 -0
  265. package/src/nodes/display/ViewportDepthNode.js +122 -8
  266. package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
  267. package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
  268. package/src/nodes/display/ViewportTextureNode.js +57 -0
  269. package/src/nodes/fog/Fog.js +110 -0
  270. package/src/nodes/functions/BasicLightingModel.js +24 -0
  271. package/src/nodes/functions/PhongLightingModel.js +34 -2
  272. package/src/nodes/functions/PhysicalLightingModel.js +167 -8
  273. package/src/nodes/functions/ShadowMaskModel.js +23 -0
  274. package/src/nodes/functions/ToonLightingModel.js +20 -0
  275. package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
  276. package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
  277. package/src/nodes/geometry/RangeNode.js +54 -2
  278. package/src/nodes/gpgpu/AtomicFunctionNode.js +174 -2
  279. package/src/nodes/gpgpu/BarrierNode.js +47 -0
  280. package/src/nodes/gpgpu/ComputeBuiltinNode.js +134 -0
  281. package/src/nodes/gpgpu/ComputeNode.js +106 -2
  282. package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
  283. package/src/nodes/lighting/AONode.js +18 -0
  284. package/src/nodes/lighting/AmbientLightNode.js +10 -0
  285. package/src/nodes/lighting/AnalyticLightNode.js +97 -2
  286. package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
  287. package/src/nodes/lighting/BasicLightMapNode.js +17 -0
  288. package/src/nodes/lighting/DirectionalLightNode.js +10 -0
  289. package/src/nodes/lighting/EnvironmentNode.js +18 -0
  290. package/src/nodes/lighting/HemisphereLightNode.js +31 -0
  291. package/src/nodes/lighting/IESSpotLightNode.js +11 -0
  292. package/src/nodes/lighting/IrradianceNode.js +17 -0
  293. package/src/nodes/lighting/LightProbeNode.js +20 -0
  294. package/src/nodes/lighting/LightUtils.js +12 -0
  295. package/src/nodes/lighting/LightingContextNode.js +48 -0
  296. package/src/nodes/lighting/LightingNode.js +15 -6
  297. package/src/nodes/lighting/LightsNode.js +132 -1
  298. package/src/nodes/lighting/PointLightNode.js +32 -1
  299. package/src/nodes/lighting/PointShadowNode.js +54 -1
  300. package/src/nodes/lighting/RectAreaLightNode.js +44 -6
  301. package/src/nodes/lighting/ShadowBaseNode.js +93 -0
  302. package/src/nodes/lighting/ShadowNode.js +241 -35
  303. package/src/nodes/lighting/SpotLightNode.js +43 -0
  304. package/src/nodes/math/ConditionalNode.js +78 -4
  305. package/src/nodes/math/Hash.js +9 -0
  306. package/src/nodes/math/MathNode.js +627 -11
  307. package/src/nodes/math/MathUtils.js +45 -1
  308. package/src/nodes/math/OperatorNode.js +329 -18
  309. package/src/nodes/math/TriNoise3D.js +18 -7
  310. package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
  311. package/src/nodes/parsers/GLSLNodeParser.js +11 -0
  312. package/src/nodes/pmrem/PMREMNode.js +133 -0
  313. package/src/nodes/pmrem/PMREMUtils.js +2 -2
  314. package/src/nodes/procedural/Checker.js +9 -0
  315. package/src/nodes/shapes/Shapes.js +33 -0
  316. package/src/nodes/tsl/TSLBase.js +3 -2
  317. package/src/nodes/tsl/TSLCore.js +22 -2
  318. package/src/nodes/utils/ArrayElementNode.js +39 -3
  319. package/src/nodes/utils/ConvertNode.js +31 -0
  320. package/src/nodes/utils/CubeMapNode.js +78 -0
  321. package/src/nodes/utils/Discard.js +16 -0
  322. package/src/nodes/utils/EquirectUVNode.js +31 -1
  323. package/src/nodes/utils/FlipNode.js +38 -0
  324. package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
  325. package/src/nodes/utils/JoinNode.js +25 -0
  326. package/src/nodes/utils/LoopNode.js +82 -2
  327. package/src/nodes/utils/MatcapUVNode.js +17 -0
  328. package/src/nodes/utils/MaxMipLevelNode.js +49 -0
  329. package/src/nodes/utils/MemberNode.js +68 -0
  330. package/src/nodes/utils/Oscillators.js +33 -0
  331. package/src/nodes/utils/Packing.js +17 -0
  332. package/src/nodes/utils/PostProcessingUtils.js +28 -23
  333. package/src/nodes/utils/RTTNode.js +123 -2
  334. package/src/nodes/utils/ReflectorNode.js +174 -4
  335. package/src/nodes/utils/RemapNode.js +79 -0
  336. package/src/nodes/utils/RotateNode.js +41 -0
  337. package/src/nodes/utils/SetNode.js +44 -1
  338. package/src/nodes/utils/SplitNode.js +55 -3
  339. package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
  340. package/src/nodes/utils/SpriteUtils.js +17 -0
  341. package/src/nodes/utils/StorageArrayElementNode.js +54 -0
  342. package/src/nodes/utils/Timer.js +40 -0
  343. package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
  344. package/src/nodes/utils/UVUtils.js +20 -0
  345. package/src/nodes/utils/ViewportUtils.js +13 -0
  346. package/src/objects/BatchedMesh.js +2 -3
  347. package/src/objects/ClippingGroup.js +49 -0
  348. package/src/objects/Line.js +6 -6
  349. package/src/renderers/WebGLRenderer.js +30 -4
  350. package/src/renderers/common/Animation.js +85 -0
  351. package/src/renderers/common/Attributes.js +36 -0
  352. package/src/renderers/common/Backend.js +502 -44
  353. package/src/renderers/common/Background.js +48 -1
  354. package/src/renderers/common/BindGroup.js +43 -0
  355. package/src/renderers/common/Binding.js +35 -0
  356. package/src/renderers/common/Bindings.js +93 -1
  357. package/src/renderers/common/Buffer.js +49 -0
  358. package/src/renderers/common/BufferUtils.js +27 -0
  359. package/src/renderers/common/BundleGroup.js +57 -0
  360. package/src/renderers/common/ChainMap.js +45 -6
  361. package/src/renderers/common/ClippingContext.js +108 -15
  362. package/src/renderers/common/Color4.js +40 -0
  363. package/src/renderers/common/ComputePipeline.js +24 -0
  364. package/src/renderers/common/CubeRenderTarget.js +13 -0
  365. package/src/renderers/common/DataMap.js +37 -1
  366. package/src/renderers/common/Geometries.js +91 -14
  367. package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
  368. package/src/renderers/common/Info.js +78 -35
  369. package/src/renderers/common/Lighting.js +34 -6
  370. package/src/renderers/common/Pipeline.js +22 -0
  371. package/src/renderers/common/Pipelines.js +148 -5
  372. package/src/renderers/common/PostProcessing.js +99 -11
  373. package/src/renderers/common/ProgrammableStage.js +60 -2
  374. package/src/renderers/common/QuadMesh.js +54 -5
  375. package/src/renderers/common/RenderBundle.js +14 -8
  376. package/src/renderers/common/RenderBundles.js +39 -10
  377. package/src/renderers/common/RenderContext.js +201 -2
  378. package/src/renderers/common/RenderContexts.js +59 -6
  379. package/src/renderers/common/RenderList.js +178 -0
  380. package/src/renderers/common/RenderLists.js +40 -3
  381. package/src/renderers/common/RenderObject.js +400 -17
  382. package/src/renderers/common/RenderObjects.js +103 -7
  383. package/src/renderers/common/RenderPipeline.js +24 -0
  384. package/src/renderers/common/Renderer.js +1170 -86
  385. package/src/renderers/common/RendererUtils.js +193 -0
  386. package/src/renderers/common/SampledTexture.js +120 -0
  387. package/src/renderers/common/Sampler.js +30 -0
  388. package/src/renderers/common/StorageBuffer.js +24 -0
  389. package/src/renderers/common/StorageBufferAttribute.js +31 -2
  390. package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
  391. package/src/renderers/common/StorageTexture.js +38 -0
  392. package/src/renderers/common/Textures.js +97 -7
  393. package/src/renderers/common/TimestampQueryPool.js +39 -0
  394. package/src/renderers/common/Uniform.js +225 -3
  395. package/src/renderers/common/UniformBuffer.js +19 -0
  396. package/src/renderers/common/UniformsGroup.js +141 -2
  397. package/src/renderers/common/XRManager.js +1193 -0
  398. package/src/renderers/common/XRRenderTarget.js +74 -0
  399. package/src/renderers/common/extras/PMREMGenerator.js +76 -10
  400. package/src/renderers/common/nodes/NodeBuilderState.js +99 -5
  401. package/src/renderers/common/nodes/NodeLibrary.js +89 -0
  402. package/src/renderers/common/nodes/NodeSampledTexture.js +90 -2
  403. package/src/renderers/common/nodes/NodeSampler.js +28 -0
  404. package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
  405. package/src/renderers/common/nodes/NodeUniform.js +243 -2
  406. package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
  407. package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
  408. package/src/renderers/common/nodes/Nodes.js +352 -78
  409. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
  410. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
  411. package/src/renderers/webgl/WebGLBackground.js +4 -0
  412. package/src/renderers/webgl-fallback/WebGLBackend.js +819 -116
  413. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +347 -18
  414. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +58 -1
  415. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
  416. package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
  417. package/src/renderers/webgl-fallback/utils/WebGLState.js +323 -11
  418. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +168 -22
  419. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +359 -0
  420. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
  421. package/src/renderers/webgpu/WebGPUBackend.js +578 -164
  422. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +36 -0
  423. package/src/renderers/webgpu/WebGPURenderer.js +36 -0
  424. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
  425. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
  426. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +674 -52
  427. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
  428. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  429. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +95 -14
  430. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +94 -1
  431. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +102 -3
  432. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +98 -1
  433. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +262 -18
  434. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +274 -0
  435. package/src/renderers/webgpu/utils/WebGPUUtils.js +116 -4
  436. package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
  437. package/src/renderers/webxr/WebXRManager.js +19 -2
  438. package/src/textures/Data3DTexture.js +2 -2
  439. package/src/textures/Texture.js +4 -0
  440. package/src/textures/VideoFrameTexture.js +35 -0
  441. package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
  442. package/examples/jsm/animation/MMDPhysics.js +0 -1408
  443. package/examples/jsm/exporters/MMDExporter.js +0 -223
  444. package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -176
  445. package/examples/jsm/libs/mmdparser.module.js +0 -11530
  446. package/examples/jsm/loaders/MMDLoader.js +0 -2298
  447. package/examples/jsm/objects/InstancedPoints.js +0 -19
  448. package/examples/jsm/shaders/MMDToonShader.js +0 -134
  449. package/src/materials/nodes/InstancedPointsNodeMaterial.js +0 -156
  450. package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -24
  451. package/src/nodes/core/UniformGroup.js +0 -13
  452. package/src/nodes/fog/FogExp2Node.js +0 -35
  453. package/src/nodes/fog/FogNode.js +0 -50
  454. package/src/nodes/fog/FogRangeNode.js +0 -36
  455. package/src/renderers/common/PostProcessingUtils.js +0 -86
@@ -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,18 @@ class StackNode extends Node {
31
76
 
32
77
  }
33
78
 
79
+ getMemberType( builder, name ) {
80
+
81
+ return this.outputNode ? this.outputNode.getMemberType( builder, name ) : 'void';
82
+
83
+ }
84
+
85
+ /**
86
+ * Adds a node to this stack.
87
+ *
88
+ * @param {Node} node - The node to add.
89
+ * @return {StackNode} A reference to this stack node.
90
+ */
34
91
  add( node ) {
35
92
 
36
93
  this.nodes.push( node );
@@ -39,6 +96,13 @@ class StackNode extends Node {
39
96
 
40
97
  }
41
98
 
99
+ /**
100
+ * Represent an `if` statement in TSL.
101
+ *
102
+ * @param {Node} boolNode - Represents the condition.
103
+ * @param {Function} method - TSL code which is executed if the condition evaluates to `true`.
104
+ * @return {StackNode} A reference to this stack node.
105
+ */
42
106
  If( boolNode, method ) {
43
107
 
44
108
  const methodNode = new ShaderNode( method );
@@ -48,6 +112,13 @@ class StackNode extends Node {
48
112
 
49
113
  }
50
114
 
115
+ /**
116
+ * Represent an `elseif` statement in TSL.
117
+ *
118
+ * @param {Node} boolNode - Represents the condition.
119
+ * @param {Function} method - TSL code which is executed if the condition evaluates to `true`.
120
+ * @return {StackNode} A reference to this stack node.
121
+ */
51
122
  ElseIf( boolNode, method ) {
52
123
 
53
124
  const methodNode = new ShaderNode( method );
@@ -60,6 +131,12 @@ class StackNode extends Node {
60
131
 
61
132
  }
62
133
 
134
+ /**
135
+ * Represent an `else` statement in TSL.
136
+ *
137
+ * @param {Function} method - TSL code which is executed in the `else` case.
138
+ * @return {StackNode} A reference to this stack node.
139
+ */
63
140
  Else( method ) {
64
141
 
65
142
  this._currentCond.elseNode = new ShaderNode( method );
@@ -86,8 +163,15 @@ class StackNode extends Node {
86
163
 
87
164
  }
88
165
 
89
- //
166
+ // Deprecated
90
167
 
168
+ /**
169
+ * @function
170
+ * @deprecated since r168. Use {@link StackNode#Else} instead.
171
+ *
172
+ * @param {...any} params
173
+ * @returns {StackNode}
174
+ */
91
175
  else( ...params ) { // @deprecated, r168
92
176
 
93
177
  console.warn( 'TSL.StackNode: .else() has been renamed to .Else().' );
@@ -95,6 +179,12 @@ class StackNode extends Node {
95
179
 
96
180
  }
97
181
 
182
+ /**
183
+ * @deprecated since r168. Use {@link StackNode#ElseIf} instead.
184
+ *
185
+ * @param {...any} params
186
+ * @returns {StackNode}
187
+ */
98
188
  elseif( ...params ) { // @deprecated, r168
99
189
 
100
190
  console.warn( 'TSL.StackNode: .elseif() has been renamed to .ElseIf().' );
@@ -106,4 +196,11 @@ class StackNode extends Node {
106
196
 
107
197
  export default StackNode;
108
198
 
199
+ /**
200
+ * TSL function for creating a stack node.
201
+ *
202
+ * @function
203
+ * @param {StackNode?} [parent=null] - The parent stack node.
204
+ * @returns {StackNode}
205
+ */
109
206
  export const stack = /*@__PURE__*/ nodeProxy( StackNode );
@@ -0,0 +1,121 @@
1
+ import Node from './Node.js';
2
+ import StructTypeNode from './StructTypeNode.js';
3
+ import { nodeObject } from '../tsl/TSLCore.js';
4
+
5
+ /** @module StructNode **/
6
+
7
+ /**
8
+ * StructNode allows to create custom structures with multiple members.
9
+ * This can also be used to define structures in attribute and uniform data.
10
+ *
11
+ * ```js
12
+ * // Define a custom struct
13
+ * const BoundingBox = struct( { min: 'vec3', max: 'vec3' } );
14
+ *
15
+ * // Create a new instance of the struct
16
+ * const bb = BoundingBox( vec3( 0 ), vec3( 1 ) ); // style 1
17
+ * const bb = BoundingBox( { min: vec3( 0 ), max: vec3( 1 ) } ); // style 2
18
+ *
19
+ * // Access the struct members
20
+ * const min = bb.get( 'min' );
21
+ *
22
+ * // Assign a new value to a member
23
+ * min.assign( vec3() );
24
+ * ```
25
+ * @augments Node
26
+ */
27
+ class StructNode extends Node {
28
+
29
+ static get type() {
30
+
31
+ return 'StructNode';
32
+
33
+ }
34
+
35
+ constructor( structLayoutNode, values ) {
36
+
37
+ super( 'vec3' );
38
+
39
+ this.structLayoutNode = structLayoutNode;
40
+ this.values = values;
41
+
42
+ this.isStructNode = true;
43
+
44
+ }
45
+
46
+ getNodeType( builder ) {
47
+
48
+ return this.structLayoutNode.getNodeType( builder );
49
+
50
+ }
51
+
52
+ getMemberType( builder, name ) {
53
+
54
+ return this.structLayoutNode.getMemberType( builder, name );
55
+
56
+ }
57
+
58
+ generate( builder ) {
59
+
60
+ const nodeVar = builder.getVarFromNode( this );
61
+ const structType = nodeVar.type;
62
+ const propertyName = builder.getPropertyName( nodeVar );
63
+
64
+ builder.addLineFlowCode( `${ propertyName } = ${ builder.generateStruct( structType, this.structLayoutNode.membersLayout, this.values ) }`, this );
65
+
66
+ return nodeVar.name;
67
+
68
+ }
69
+
70
+ }
71
+
72
+ export default StructNode;
73
+
74
+ /**
75
+ * TSL function for creating a struct node.
76
+ *
77
+ * @function
78
+ * @param {Object} membersLayout - The layout of the struct members.
79
+ * @param {string} [name=null] - The name of the struct.
80
+ * @returns {Function} The struct function.
81
+ */
82
+ export const struct = ( membersLayout, name = null ) => {
83
+
84
+ const structLayout = new StructTypeNode( membersLayout, name );
85
+
86
+ const struct = ( ...params ) => {
87
+
88
+ let values = null;
89
+
90
+ if ( params.length > 0 ) {
91
+
92
+ if ( params[ 0 ].isNode ) {
93
+
94
+ values = {};
95
+
96
+ const names = Object.keys( membersLayout );
97
+
98
+ for ( let i = 0; i < params.length; i ++ ) {
99
+
100
+ values[ names[ i ] ] = params[ i ];
101
+
102
+ }
103
+
104
+ } else {
105
+
106
+ values = params[ 0 ];
107
+
108
+ }
109
+
110
+ }
111
+
112
+ return nodeObject( new StructNode( structLayout, values ) );
113
+
114
+ };
115
+
116
+ struct.layout = structLayout;
117
+ struct.isStruct = true;
118
+
119
+ return struct;
120
+
121
+ };
@@ -0,0 +1,13 @@
1
+ class StructType {
2
+
3
+ constructor( name, members ) {
4
+
5
+ this.name = name;
6
+ this.members = members;
7
+ this.output = false;
8
+
9
+ }
10
+
11
+ }
12
+
13
+ export default StructType;