@plastic-software/three 0.179.0 → 0.181.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 (430) hide show
  1. package/build/three.cjs +1108 -591
  2. package/build/three.core.js +616 -345
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +488 -250
  5. package/build/three.module.min.js +1 -1
  6. package/build/three.tsl.js +37 -6
  7. package/build/three.tsl.min.js +1 -1
  8. package/build/three.webgpu.js +6576 -2152
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +6575 -2151
  11. package/build/three.webgpu.nodes.min.js +1 -1
  12. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  13. package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  14. package/examples/jsm/Addons.js +1 -1
  15. package/examples/jsm/animation/CCDIKSolver.js +1 -1
  16. package/examples/jsm/controls/ArcballControls.js +8 -8
  17. package/examples/jsm/controls/DragControls.js +7 -57
  18. package/examples/jsm/controls/FirstPersonControls.js +3 -3
  19. package/examples/jsm/controls/FlyControls.js +1 -1
  20. package/examples/jsm/controls/OrbitControls.js +2 -2
  21. package/examples/jsm/controls/PointerLockControls.js +2 -10
  22. package/examples/jsm/controls/TrackballControls.js +1 -1
  23. package/examples/jsm/controls/TransformControls.js +1 -1
  24. package/examples/jsm/effects/AsciiEffect.js +8 -8
  25. package/examples/jsm/exporters/DRACOExporter.js +2 -2
  26. package/examples/jsm/exporters/EXRExporter.js +1 -1
  27. package/examples/jsm/exporters/GLTFExporter.js +33 -25
  28. package/examples/jsm/exporters/KTX2Exporter.js +4 -2
  29. package/examples/jsm/exporters/PLYExporter.js +1 -1
  30. package/examples/jsm/exporters/USDZExporter.js +9 -2
  31. package/examples/jsm/geometries/DecalGeometry.js +2 -2
  32. package/examples/jsm/geometries/ParametricGeometry.js +1 -1
  33. package/examples/jsm/geometries/TeapotGeometry.js +2 -2
  34. package/examples/jsm/geometries/TextGeometry.js +3 -2
  35. package/examples/jsm/gpgpu/BitonicSort.js +715 -0
  36. package/examples/jsm/helpers/ViewHelper.js +43 -5
  37. package/examples/jsm/inspector/Inspector.js +427 -0
  38. package/examples/jsm/inspector/RendererInspector.js +415 -0
  39. package/examples/jsm/inspector/tabs/Console.js +204 -0
  40. package/examples/jsm/inspector/tabs/Parameters.js +332 -0
  41. package/examples/jsm/inspector/tabs/Performance.js +268 -0
  42. package/examples/jsm/inspector/tabs/Viewer.js +166 -0
  43. package/examples/jsm/inspector/ui/Graph.js +95 -0
  44. package/examples/jsm/inspector/ui/Item.js +170 -0
  45. package/examples/jsm/inspector/ui/List.js +75 -0
  46. package/examples/jsm/inspector/ui/Profiler.js +170 -0
  47. package/examples/jsm/inspector/ui/Style.js +654 -0
  48. package/examples/jsm/inspector/ui/Tab.js +46 -0
  49. package/examples/jsm/inspector/ui/Values.js +423 -0
  50. package/examples/jsm/inspector/ui/utils.js +56 -0
  51. package/examples/jsm/interactive/HTMLMesh.js +6 -10
  52. package/examples/jsm/interactive/InteractiveGroup.js +1 -1
  53. package/examples/jsm/interactive/SelectionBox.js +30 -0
  54. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  55. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  56. package/examples/jsm/lines/Line2.js +3 -3
  57. package/examples/jsm/lines/LineGeometry.js +1 -1
  58. package/examples/jsm/lines/LineSegments2.js +2 -2
  59. package/examples/jsm/lines/Wireframe.js +2 -2
  60. package/examples/jsm/lines/WireframeGeometry2.js +1 -1
  61. package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
  62. package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
  63. package/examples/jsm/loaders/3MFLoader.js +1 -1
  64. package/examples/jsm/loaders/ColladaLoader.js +3 -3
  65. package/examples/jsm/loaders/DDSLoader.js +1 -1
  66. package/examples/jsm/loaders/DRACOLoader.js +73 -22
  67. package/examples/jsm/loaders/EXRLoader.js +5 -5
  68. package/examples/jsm/loaders/FBXLoader.js +2 -2
  69. package/examples/jsm/loaders/FontLoader.js +23 -5
  70. package/examples/jsm/loaders/GLTFLoader.js +14 -8
  71. package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
  72. package/examples/jsm/loaders/HDRLoader.js +486 -0
  73. package/examples/jsm/loaders/KTX2Loader.js +136 -49
  74. package/examples/jsm/loaders/KTXLoader.js +2 -2
  75. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  76. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  77. package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
  78. package/examples/jsm/loaders/LWOLoader.js +2 -2
  79. package/examples/jsm/loaders/MaterialXLoader.js +22 -5
  80. package/examples/jsm/loaders/OBJLoader.js +1 -1
  81. package/examples/jsm/loaders/PDBLoader.js +1 -1
  82. package/examples/jsm/loaders/RGBELoader.js +7 -473
  83. package/examples/jsm/loaders/SVGLoader.js +2 -2
  84. package/examples/jsm/loaders/TTFLoader.js +4 -4
  85. package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
  86. package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
  87. package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  88. package/examples/jsm/math/ColorSpaces.js +19 -1
  89. package/examples/jsm/math/ConvexHull.js +3 -3
  90. package/examples/jsm/math/ImprovedNoise.js +1 -1
  91. package/examples/jsm/math/Lut.js +2 -2
  92. package/examples/jsm/math/SimplexNoise.js +1 -1
  93. package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
  94. package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
  95. package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
  96. package/examples/jsm/misc/TubePainter.js +383 -40
  97. package/examples/jsm/misc/Volume.js +1 -1
  98. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  99. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  100. package/examples/jsm/objects/Sky.js +1 -1
  101. package/examples/jsm/objects/SkyMesh.js +1 -1
  102. package/examples/jsm/objects/Water.js +3 -3
  103. package/examples/jsm/objects/WaterMesh.js +6 -6
  104. package/examples/jsm/postprocessing/GlitchPass.js +2 -2
  105. package/examples/jsm/postprocessing/OutlinePass.js +1 -1
  106. package/examples/jsm/postprocessing/SSRPass.js +37 -8
  107. package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
  108. package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
  109. package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
  110. package/examples/jsm/renderers/SVGRenderer.js +1 -1
  111. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
  112. package/examples/jsm/shaders/AfterimageShader.js +1 -1
  113. package/examples/jsm/shaders/BleachBypassShader.js +1 -1
  114. package/examples/jsm/shaders/BokehShader.js +1 -1
  115. package/examples/jsm/shaders/BokehShader2.js +1 -1
  116. package/examples/jsm/shaders/DotScreenShader.js +1 -1
  117. package/examples/jsm/shaders/FocusShader.js +1 -1
  118. package/examples/jsm/shaders/GTAOShader.js +2 -2
  119. package/examples/jsm/shaders/GodRaysShader.js +1 -1
  120. package/examples/jsm/shaders/KaleidoShader.js +1 -1
  121. package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
  122. package/examples/jsm/shaders/SSRShader.js +1 -1
  123. package/examples/jsm/shaders/SepiaShader.js +1 -1
  124. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
  125. package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
  126. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +1 -1
  127. package/examples/jsm/shaders/VignetteShader.js +1 -1
  128. package/examples/jsm/transpiler/GLSLDecoder.js +22 -19
  129. package/examples/jsm/transpiler/TSLEncoder.js +9 -10
  130. package/examples/jsm/transpiler/WGSLEncoder.js +24 -0
  131. package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
  132. package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
  133. package/examples/jsm/tsl/display/BloomNode.js +7 -3
  134. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +2 -1
  135. package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
  136. package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
  137. package/examples/jsm/tsl/display/GTAONode.js +53 -5
  138. package/examples/jsm/tsl/display/GaussianBlurNode.js +49 -35
  139. package/examples/jsm/tsl/display/OutlineNode.js +13 -2
  140. package/examples/jsm/tsl/display/SSGINode.js +654 -0
  141. package/examples/jsm/tsl/display/SSRNode.js +182 -65
  142. package/examples/jsm/tsl/display/SSSNode.js +488 -0
  143. package/examples/jsm/tsl/display/TRAANode.js +124 -7
  144. package/examples/jsm/tsl/display/boxBlur.js +65 -0
  145. package/examples/jsm/tsl/display/hashBlur.js +16 -18
  146. package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
  147. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  148. package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
  149. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  150. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  151. package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
  152. package/package.json +5 -10
  153. package/src/Three.Core.js +4 -2
  154. package/src/Three.TSL.js +36 -5
  155. package/src/Three.WebGPU.Nodes.js +2 -0
  156. package/src/Three.WebGPU.js +2 -0
  157. package/src/animation/AnimationClip.js +20 -4
  158. package/src/animation/AnimationMixer.js +3 -3
  159. package/src/animation/AnimationObjectGroup.js +2 -1
  160. package/src/animation/KeyframeTrack.js +7 -6
  161. package/src/animation/PropertyBinding.js +12 -11
  162. package/src/audio/Audio.js +10 -9
  163. package/src/audio/PositionalAudio.js +1 -1
  164. package/src/cameras/OrthographicCamera.js +1 -1
  165. package/src/cameras/PerspectiveCamera.js +1 -1
  166. package/src/cameras/StereoCamera.js +2 -2
  167. package/src/constants.js +11 -3
  168. package/src/core/BufferGeometry.js +10 -10
  169. package/src/core/EventDispatcher.js +1 -1
  170. package/src/core/InterleavedBuffer.js +1 -1
  171. package/src/core/InterleavedBufferAttribute.js +3 -2
  172. package/src/core/Object3D.js +3 -2
  173. package/src/core/Raycaster.js +2 -1
  174. package/src/core/RenderTarget.js +10 -1
  175. package/src/extras/Controls.js +5 -4
  176. package/src/extras/DataUtils.js +2 -1
  177. package/src/extras/Earcut.js +6 -0
  178. package/src/extras/ImageUtils.js +2 -2
  179. package/src/extras/PMREMGenerator.js +268 -55
  180. package/src/extras/TextureUtils.js +2 -1
  181. package/src/extras/core/Curve.js +2 -1
  182. package/src/extras/core/Interpolations.js +7 -1
  183. package/src/extras/core/ShapePath.js +4 -4
  184. package/src/extras/lib/earcut.js +8 -8
  185. package/src/geometries/BoxGeometry.js +1 -0
  186. package/src/geometries/CapsuleGeometry.js +1 -0
  187. package/src/geometries/CircleGeometry.js +1 -0
  188. package/src/geometries/ConeGeometry.js +1 -0
  189. package/src/geometries/CylinderGeometry.js +1 -0
  190. package/src/geometries/DodecahedronGeometry.js +1 -0
  191. package/src/geometries/ExtrudeGeometry.js +8 -6
  192. package/src/geometries/IcosahedronGeometry.js +1 -0
  193. package/src/geometries/LatheGeometry.js +1 -0
  194. package/src/geometries/OctahedronGeometry.js +1 -0
  195. package/src/geometries/PlaneGeometry.js +1 -0
  196. package/src/geometries/RingGeometry.js +1 -0
  197. package/src/geometries/ShapeGeometry.js +1 -0
  198. package/src/geometries/SphereGeometry.js +1 -0
  199. package/src/geometries/TetrahedronGeometry.js +1 -0
  200. package/src/geometries/TorusGeometry.js +1 -0
  201. package/src/geometries/TorusKnotGeometry.js +1 -0
  202. package/src/geometries/TubeGeometry.js +1 -0
  203. package/src/helpers/CameraHelper.js +1 -1
  204. package/src/lights/webgpu/ProjectorLight.js +1 -1
  205. package/src/loaders/AnimationLoader.js +2 -1
  206. package/src/loaders/AudioLoader.js +2 -1
  207. package/src/loaders/BufferGeometryLoader.js +2 -2
  208. package/src/loaders/Cache.js +2 -2
  209. package/src/loaders/DataTextureLoader.js +1 -1
  210. package/src/loaders/FileLoader.js +3 -2
  211. package/src/loaders/ImageBitmapLoader.js +5 -4
  212. package/src/loaders/ImageLoader.js +1 -1
  213. package/src/loaders/Loader.js +3 -3
  214. package/src/loaders/LoadingManager.js +25 -3
  215. package/src/loaders/MaterialLoader.js +3 -2
  216. package/src/loaders/ObjectLoader.js +13 -13
  217. package/src/loaders/TextureLoader.js +1 -1
  218. package/src/loaders/nodes/NodeLoader.js +3 -2
  219. package/src/materials/Material.js +16 -3
  220. package/src/materials/MeshBasicMaterial.js +1 -0
  221. package/src/materials/MeshDepthMaterial.js +1 -0
  222. package/src/materials/MeshDistanceMaterial.js +1 -1
  223. package/src/materials/MeshLambertMaterial.js +2 -1
  224. package/src/materials/MeshMatcapMaterial.js +22 -0
  225. package/src/materials/MeshNormalMaterial.js +1 -0
  226. package/src/materials/MeshPhongMaterial.js +2 -1
  227. package/src/materials/MeshPhysicalMaterial.js +2 -1
  228. package/src/materials/MeshStandardMaterial.js +8 -7
  229. package/src/materials/MeshToonMaterial.js +1 -0
  230. package/src/materials/PointsMaterial.js +1 -1
  231. package/src/materials/ShaderMaterial.js +2 -2
  232. package/src/materials/nodes/Line2NodeMaterial.js +2 -2
  233. package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
  234. package/src/materials/nodes/NodeMaterial.js +62 -22
  235. package/src/materials/nodes/PointsNodeMaterial.js +81 -28
  236. package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
  237. package/src/materials/nodes/manager/NodeMaterialObserver.js +3 -2
  238. package/src/math/Color.js +6 -5
  239. package/src/math/ColorManagement.js +9 -3
  240. package/src/math/Cylindrical.js +1 -1
  241. package/src/math/Euler.js +2 -1
  242. package/src/math/MathUtils.js +13 -11
  243. package/src/math/Matrix2.js +1 -1
  244. package/src/math/Matrix3.js +2 -2
  245. package/src/math/Matrix4.js +7 -7
  246. package/src/math/Plane.js +1 -1
  247. package/src/math/Quaternion.js +68 -66
  248. package/src/math/Spherical.js +1 -1
  249. package/src/nodes/Nodes.js +4 -1
  250. package/src/nodes/TSL.js +4 -1
  251. package/src/nodes/accessors/BufferNode.js +1 -1
  252. package/src/nodes/accessors/Camera.js +133 -7
  253. package/src/nodes/accessors/ClippingNode.js +6 -5
  254. package/src/nodes/accessors/CubeTextureNode.js +5 -4
  255. package/src/nodes/accessors/InstanceNode.js +25 -5
  256. package/src/nodes/accessors/Lights.js +10 -0
  257. package/src/nodes/accessors/Normal.js +5 -4
  258. package/src/nodes/accessors/Object3DNode.js +1 -1
  259. package/src/nodes/accessors/Position.js +18 -2
  260. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  261. package/src/nodes/accessors/ReferenceNode.js +3 -2
  262. package/src/nodes/accessors/SceneNode.js +2 -1
  263. package/src/nodes/accessors/StorageBufferNode.js +2 -1
  264. package/src/nodes/accessors/StorageTextureNode.js +22 -0
  265. package/src/nodes/accessors/Texture3DNode.js +14 -1
  266. package/src/nodes/accessors/TextureNode.js +130 -44
  267. package/src/nodes/code/FunctionCallNode.js +24 -4
  268. package/src/nodes/code/FunctionNode.js +23 -0
  269. package/src/nodes/core/ArrayNode.js +1 -0
  270. package/src/nodes/core/AssignNode.js +4 -3
  271. package/src/nodes/core/AttributeNode.js +2 -1
  272. package/src/nodes/core/ContextNode.js +29 -10
  273. package/src/nodes/core/IndexNode.js +2 -2
  274. package/src/nodes/core/InputNode.js +2 -1
  275. package/src/nodes/core/InspectorNode.js +128 -0
  276. package/src/nodes/core/{CacheNode.js → IsolateNode.js} +40 -7
  277. package/src/nodes/core/Node.js +152 -31
  278. package/src/nodes/core/NodeBuilder.js +183 -35
  279. package/src/nodes/core/NodeFrame.js +21 -21
  280. package/src/nodes/core/NodeFunction.js +2 -1
  281. package/src/nodes/core/NodeParser.js +2 -1
  282. package/src/nodes/core/NodeUniform.js +1 -1
  283. package/src/nodes/core/NodeUtils.js +17 -91
  284. package/src/nodes/core/ParameterNode.js +31 -0
  285. package/src/nodes/core/PropertyNode.js +7 -0
  286. package/src/nodes/core/StackNode.js +43 -16
  287. package/src/nodes/core/StructNode.js +5 -5
  288. package/src/nodes/core/StructTypeNode.js +1 -0
  289. package/src/nodes/core/SubBuildNode.js +2 -2
  290. package/src/nodes/core/UniformNode.js +18 -10
  291. package/src/nodes/core/VarNode.js +70 -33
  292. package/src/nodes/core/VaryingNode.js +3 -2
  293. package/src/nodes/display/BlendModes.js +5 -4
  294. package/src/nodes/display/BumpMapNode.js +1 -1
  295. package/src/nodes/display/ColorAdjustment.js +1 -1
  296. package/src/nodes/display/FrontFacingNode.js +4 -8
  297. package/src/nodes/display/NormalMapNode.js +2 -1
  298. package/src/nodes/display/PassNode.js +52 -11
  299. package/src/nodes/display/RenderOutputNode.js +28 -2
  300. package/src/nodes/display/ScreenNode.js +44 -14
  301. package/src/nodes/display/ToneMappingNode.js +31 -4
  302. package/src/nodes/display/ToonOutlinePassNode.js +8 -0
  303. package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
  304. package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
  305. package/src/nodes/display/ViewportTextureNode.js +42 -12
  306. package/src/nodes/fog/Fog.js +3 -2
  307. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  308. package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
  309. package/src/nodes/functions/BasicLightingModel.js +2 -1
  310. package/src/nodes/functions/PhysicalLightingModel.js +3 -2
  311. package/src/nodes/functions/VolumetricLightingModel.js +5 -5
  312. package/src/nodes/geometry/RangeNode.js +40 -4
  313. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
  314. package/src/nodes/gpgpu/ComputeNode.js +17 -5
  315. package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
  316. package/src/nodes/gpgpu/WorkgroupInfoNode.js +2 -1
  317. package/src/nodes/lighting/EnvironmentNode.js +6 -6
  318. package/src/nodes/lighting/LightsNode.js +3 -4
  319. package/src/nodes/lighting/PointShadowNode.js +6 -0
  320. package/src/nodes/lighting/ShadowFilterNode.js +2 -0
  321. package/src/nodes/lighting/ShadowNode.js +75 -8
  322. package/src/nodes/math/BitcastNode.js +156 -0
  323. package/src/nodes/math/ConditionalNode.js +24 -7
  324. package/src/nodes/math/MathNode.js +25 -19
  325. package/src/nodes/math/OperatorNode.js +7 -5
  326. package/src/nodes/pmrem/PMREMUtils.js +117 -2
  327. package/src/nodes/shapes/Shapes.js +1 -1
  328. package/src/nodes/tsl/TSLBase.js +5 -2
  329. package/src/nodes/tsl/TSLCore.js +460 -159
  330. package/src/nodes/utils/DebugNode.js +2 -1
  331. package/src/nodes/utils/EventNode.js +36 -0
  332. package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
  333. package/src/nodes/utils/JoinNode.js +6 -3
  334. package/src/nodes/utils/LoopNode.js +20 -24
  335. package/src/nodes/utils/MemberNode.js +59 -7
  336. package/src/nodes/utils/PostProcessingUtils.js +28 -1
  337. package/src/nodes/utils/RTTNode.js +13 -3
  338. package/src/nodes/utils/ReflectorNode.js +58 -7
  339. package/src/nodes/utils/SampleNode.js +12 -2
  340. package/src/nodes/utils/SplitNode.js +11 -0
  341. package/src/nodes/utils/Timer.js +0 -47
  342. package/src/objects/BatchedMesh.js +2 -2
  343. package/src/objects/LOD.js +1 -1
  344. package/src/objects/Line.js +2 -1
  345. package/src/objects/LineSegments.js +2 -1
  346. package/src/objects/Skeleton.js +3 -2
  347. package/src/objects/SkinnedMesh.js +3 -1
  348. package/src/objects/Sprite.js +4 -3
  349. package/src/renderers/WebGLRenderer.js +48 -41
  350. package/src/renderers/common/Animation.js +13 -1
  351. package/src/renderers/common/Attributes.js +1 -1
  352. package/src/renderers/common/Backend.js +108 -27
  353. package/src/renderers/common/Background.js +2 -1
  354. package/src/renderers/common/Bindings.js +58 -2
  355. package/src/renderers/common/CanvasTarget.js +341 -0
  356. package/src/renderers/common/ChainMap.js +1 -1
  357. package/src/renderers/common/DataMap.js +1 -1
  358. package/src/renderers/common/Geometries.js +26 -0
  359. package/src/renderers/common/Info.js +4 -2
  360. package/src/renderers/common/InspectorBase.js +146 -0
  361. package/src/renderers/common/Pipelines.js +1 -1
  362. package/src/renderers/common/PostProcessing.js +6 -25
  363. package/src/renderers/common/QuadMesh.js +7 -1
  364. package/src/renderers/common/RenderContext.js +2 -2
  365. package/src/renderers/common/RenderList.js +7 -3
  366. package/src/renderers/common/RenderObject.js +16 -2
  367. package/src/renderers/common/RenderObjects.js +1 -1
  368. package/src/renderers/common/Renderer.js +473 -245
  369. package/src/renderers/common/RendererUtils.js +9 -0
  370. package/src/renderers/common/SampledTexture.js +9 -1
  371. package/src/renderers/common/Sampler.js +50 -12
  372. package/src/renderers/common/StorageTexture.js +9 -1
  373. package/src/renderers/common/Textures.js +121 -45
  374. package/src/renderers/common/TimestampQueryPool.js +65 -3
  375. package/src/renderers/common/UniformsGroup.js +2 -1
  376. package/src/renderers/common/XRManager.js +42 -22
  377. package/src/renderers/common/extras/PMREMGenerator.js +160 -65
  378. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  379. package/src/renderers/common/nodes/NodeLibrary.js +9 -7
  380. package/src/renderers/common/nodes/NodeSampler.js +13 -1
  381. package/src/renderers/common/nodes/Nodes.js +38 -16
  382. package/src/renderers/shaders/DFGLUTData.js +64 -0
  383. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
  384. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
  385. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
  386. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
  387. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
  388. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  389. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
  390. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
  391. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +7 -15
  392. package/src/renderers/shaders/ShaderLib/depth.glsl.js +1 -1
  393. package/src/renderers/shaders/UniformsLib.js +1 -0
  394. package/src/renderers/shaders/UniformsUtils.js +25 -4
  395. package/src/renderers/webgl/WebGLCapabilities.js +2 -1
  396. package/src/renderers/webgl/WebGLExtensions.js +2 -25
  397. package/src/renderers/webgl/WebGLInfo.js +3 -1
  398. package/src/renderers/webgl/WebGLProgram.js +15 -14
  399. package/src/renderers/webgl/WebGLPrograms.js +2 -1
  400. package/src/renderers/webgl/WebGLShadowMap.js +3 -2
  401. package/src/renderers/webgl/WebGLState.js +15 -14
  402. package/src/renderers/webgl/WebGLTextures.js +19 -14
  403. package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
  404. package/src/renderers/webgl/WebGLUtils.js +3 -2
  405. package/src/renderers/webgl-fallback/WebGLBackend.js +199 -167
  406. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +181 -25
  407. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
  408. package/src/renderers/webgl-fallback/utils/WebGLState.js +7 -6
  409. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +169 -19
  410. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
  411. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
  412. package/src/renderers/webgpu/WebGPUBackend.js +153 -123
  413. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
  414. package/src/renderers/webgpu/WebGPURenderer.js +3 -2
  415. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +142 -50
  416. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +2 -1
  417. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +5 -3
  418. package/src/renderers/webgpu/utils/WebGPUConstants.js +7 -2
  419. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +53 -34
  420. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
  421. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +260 -99
  422. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
  423. package/src/renderers/webgpu/utils/WebGPUUtils.js +22 -2
  424. package/src/renderers/webxr/WebXRManager.js +42 -26
  425. package/src/textures/ExternalTexture.js +15 -4
  426. package/src/textures/Source.js +3 -2
  427. package/src/textures/Texture.js +3 -2
  428. package/src/textures/VideoTexture.js +2 -3
  429. package/src/utils.js +67 -3
  430. package/examples/jsm/loaders/RGBMLoader.js +0 -1148
@@ -5,6 +5,7 @@ import { Matrix4 } from '../../math/Matrix4.js';
5
5
  import { Vector2 } from '../../math/Vector2.js';
6
6
  import { Vector3 } from '../../math/Vector3.js';
7
7
  import { Vector4 } from '../../math/Vector4.js';
8
+ import { error } from '../../utils.js';
8
9
 
9
10
  // cyrb53 (c) 2018 bryc (github.com/bryc). License: Public domain. Attribution appreciated.
10
11
  // A fast and simple 64-bit (or 53-bit) string hash function with decent collision resistance.
@@ -49,6 +50,7 @@ function cyrb53( value, seed = 0 ) {
49
50
  /**
50
51
  * Computes a hash for the given string.
51
52
  *
53
+ * @private
52
54
  * @method
53
55
  * @param {string} str - The string to be hashed.
54
56
  * @return {number} The hash.
@@ -58,6 +60,7 @@ export const hashString = ( str ) => cyrb53( str );
58
60
  /**
59
61
  * Computes a hash for the given array.
60
62
  *
63
+ * @private
61
64
  * @method
62
65
  * @param {Array<number>} array - The array to be hashed.
63
66
  * @return {number} The hash.
@@ -67,100 +70,13 @@ export const hashArray = ( array ) => cyrb53( array );
67
70
  /**
68
71
  * Computes a hash for the given list of parameters.
69
72
  *
73
+ * @private
70
74
  * @method
71
75
  * @param {...number} params - A list of parameters.
72
76
  * @return {number} The hash.
73
77
  */
74
78
  export const hash = ( ...params ) => cyrb53( params );
75
79
 
76
- /**
77
- * Computes a cache key for the given node.
78
- *
79
- * @method
80
- * @param {Object|Node} object - The object to be hashed.
81
- * @param {boolean} [force=false] - Whether to force a cache key computation or not.
82
- * @return {number} The hash.
83
- */
84
- export function getCacheKey( object, force = false ) {
85
-
86
- const values = [];
87
-
88
- if ( object.isNode === true ) {
89
-
90
- values.push( object.id );
91
- object = object.getSelf();
92
-
93
- }
94
-
95
- for ( const { property, childNode } of getNodeChildren( object ) ) {
96
-
97
- values.push( cyrb53( property.slice( 0, - 4 ) ), childNode.getCacheKey( force ) );
98
-
99
- }
100
-
101
- return cyrb53( values );
102
-
103
- }
104
-
105
- /**
106
- * This generator function can be used to iterate over the node children
107
- * of the given object.
108
- *
109
- * @generator
110
- * @param {Object} node - The object to be hashed.
111
- * @param {boolean} [toJSON=false] - Whether to return JSON or not.
112
- * @yields {Object} A result node holding the property, index (if available) and the child node.
113
- */
114
- export function* getNodeChildren( node, toJSON = false ) {
115
-
116
- for ( const property in node ) {
117
-
118
- // Ignore private properties.
119
- if ( property.startsWith( '_' ) === true ) continue;
120
-
121
- const object = node[ property ];
122
-
123
- if ( Array.isArray( object ) === true ) {
124
-
125
- for ( let i = 0; i < object.length; i ++ ) {
126
-
127
- const child = object[ i ];
128
-
129
- if ( child && ( child.isNode === true || toJSON && typeof child.toJSON === 'function' ) ) {
130
-
131
- yield { property, index: i, childNode: child };
132
-
133
- }
134
-
135
- }
136
-
137
- } else if ( object && object.isNode === true ) {
138
-
139
- yield { property, childNode: object };
140
-
141
- } else if ( object && Object.getPrototypeOf( object ) === Object.prototype ) {
142
-
143
- for ( const subProperty in object ) {
144
-
145
- // Ignore private properties.
146
- if ( subProperty.startsWith( '_' ) === true ) continue;
147
-
148
- const child = object[ subProperty ];
149
-
150
- if ( child && ( child.isNode === true || toJSON && typeof child.toJSON === 'function' ) ) {
151
-
152
- yield { property, index: subProperty, childNode: child };
153
-
154
- }
155
-
156
- }
157
-
158
- }
159
-
160
- }
161
-
162
- }
163
-
164
80
  const typeFromLength = /*@__PURE__*/ new Map( [
165
81
  [ 1, 'float' ],
166
82
  [ 2, 'vec2' ],
@@ -175,6 +91,7 @@ const dataFromObject = /*@__PURE__*/ new WeakMap();
175
91
  /**
176
92
  * Returns the data type for the given the length.
177
93
  *
94
+ * @private
178
95
  * @method
179
96
  * @param {number} length - The length.
180
97
  * @return {string} The data type.
@@ -188,6 +105,7 @@ export function getTypeFromLength( length ) {
188
105
  /**
189
106
  * Returns the typed array for the given data type.
190
107
  *
108
+ * @private
191
109
  * @method
192
110
  * @param {string} type - The data type.
193
111
  * @return {TypedArray} The typed array.
@@ -221,6 +139,7 @@ export function getTypedArrayFromType( type ) {
221
139
  /**
222
140
  * Returns the length for the given data type.
223
141
  *
142
+ * @private
224
143
  * @method
225
144
  * @param {string} type - The data type.
226
145
  * @return {number} The length.
@@ -235,13 +154,14 @@ export function getLengthFromType( type ) {
235
154
  if ( /mat3/.test( type ) ) return 9;
236
155
  if ( /mat4/.test( type ) ) return 16;
237
156
 
238
- console.error( 'THREE.TSL: Unsupported type:', type );
157
+ error( 'TSL: Unsupported type:', type );
239
158
 
240
159
  }
241
160
 
242
161
  /**
243
162
  * Returns the gpu memory length for the given data type.
244
163
  *
164
+ * @private
245
165
  * @method
246
166
  * @param {string} type - The data type.
247
167
  * @return {number} The length.
@@ -256,13 +176,14 @@ export function getMemoryLengthFromType( type ) {
256
176
  if ( /mat3/.test( type ) ) return 12;
257
177
  if ( /mat4/.test( type ) ) return 16;
258
178
 
259
- console.error( 'THREE.TSL: Unsupported type:', type );
179
+ error( 'TSL: Unsupported type:', type );
260
180
 
261
181
  }
262
182
 
263
183
  /**
264
184
  * Returns the byte boundary for the given data type.
265
185
  *
186
+ * @private
266
187
  * @method
267
188
  * @param {string} type - The data type.
268
189
  * @return {number} The byte boundary.
@@ -277,13 +198,14 @@ export function getByteBoundaryFromType( type ) {
277
198
  if ( /mat3/.test( type ) ) return 48;
278
199
  if ( /mat4/.test( type ) ) return 64;
279
200
 
280
- console.error( 'THREE.TSL: Unsupported type:', type );
201
+ error( 'TSL: Unsupported type:', type );
281
202
 
282
203
  }
283
204
 
284
205
  /**
285
206
  * Returns the data type for the given value.
286
207
  *
208
+ * @private
287
209
  * @method
288
210
  * @param {any} value - The value.
289
211
  * @return {?string} The data type.
@@ -355,6 +277,7 @@ export function getValueType( value ) {
355
277
  /**
356
278
  * Returns the value/object for the given data type and parameters.
357
279
  *
280
+ * @private
358
281
  * @method
359
282
  * @param {string} type - The given type.
360
283
  * @param {...any} params - A parameter list.
@@ -425,6 +348,7 @@ export function getValueFromType( type, ...params ) {
425
348
  /**
426
349
  * Gets the object data that can be shared between different rendering steps.
427
350
  *
351
+ * @private
428
352
  * @param {Object} object - The object to get the data for.
429
353
  * @return {Object} The object data.
430
354
  */
@@ -446,6 +370,7 @@ export function getDataFromObject( object ) {
446
370
  /**
447
371
  * Converts the given array buffer to a Base64 string.
448
372
  *
373
+ * @private
449
374
  * @method
450
375
  * @param {ArrayBuffer} arrayBuffer - The array buffer.
451
376
  * @return {string} The Base64 string.
@@ -469,6 +394,7 @@ export function arrayBufferToBase64( arrayBuffer ) {
469
394
  /**
470
395
  * Converts the given Base64 string to an array buffer.
471
396
  *
397
+ * @private
472
398
  * @method
473
399
  * @param {string} base64 - The Base64 string.
474
400
  * @return {ArrayBuffer} The array buffer.
@@ -1,4 +1,5 @@
1
1
  import { nodeObject } from '../tsl/TSLBase.js';
2
+ import { error } from '../../utils.js';
2
3
  import PropertyNode from './PropertyNode.js';
3
4
 
4
5
  /**
@@ -35,6 +36,36 @@ class ParameterNode extends PropertyNode {
35
36
 
36
37
  }
37
38
 
39
+ /**
40
+ * Gets the type of a member variable in the parameter node.
41
+ *
42
+ * @param {NodeBuilder} builder - The node builder.
43
+ * @param {string} name - The name of the member variable.
44
+ * @returns {string}
45
+ */
46
+ getMemberType( builder, name ) {
47
+
48
+ const type = this.getNodeType( builder );
49
+ const struct = builder.getStructTypeNode( type );
50
+
51
+ let memberType;
52
+
53
+ if ( struct !== null ) {
54
+
55
+ memberType = struct.getMemberType( builder, name );
56
+
57
+ } else {
58
+
59
+ error( `TSL: Member "${ name }" not found in struct "${ type }".` );
60
+
61
+ memberType = 'float';
62
+
63
+ }
64
+
65
+ return memberType;
66
+
67
+ }
68
+
38
69
  getHash() {
39
70
 
40
71
  return this.uuid;
@@ -1,5 +1,6 @@
1
1
  import Node from './Node.js';
2
2
  import { nodeImmutable, nodeObject } from '../tsl/TSLCore.js';
3
+ import { hashString } from './NodeUtils.js';
3
4
 
4
5
  /**
5
6
  * This class represents a shader property. It can be used
@@ -68,6 +69,12 @@ class PropertyNode extends Node {
68
69
 
69
70
  }
70
71
 
72
+ customCacheKey() {
73
+
74
+ return hashString( this.type + ':' + ( this.name || '' ) + ':' + ( this.varying ? '1' : '0' ) );
75
+
76
+ }
77
+
71
78
  getHash( builder ) {
72
79
 
73
80
  return this.name || super.getHash( builder );
@@ -1,6 +1,7 @@
1
1
  import Node from './Node.js';
2
2
  import { select } from '../math/ConditionalNode.js';
3
3
  import { ShaderNode, nodeProxy, getCurrentStack, setCurrentStack, nodeObject } from '../tsl/TSLBase.js';
4
+ import { error } from '../../utils.js';
4
5
 
5
6
  /**
6
7
  * Stack is a helper for Nodes that need to produce stack-based code instead of continuous flow.
@@ -78,15 +79,21 @@ class StackNode extends Node {
78
79
 
79
80
  }
80
81
 
82
+ getElementType( builder ) {
83
+
84
+ return this.hasOutput ? this.outputNode.getElementType( builder ) : 'void';
85
+
86
+ }
87
+
81
88
  getNodeType( builder ) {
82
89
 
83
- return this.outputNode ? this.outputNode.getNodeType( builder ) : 'void';
90
+ return this.hasOutput ? this.outputNode.getNodeType( builder ) : 'void';
84
91
 
85
92
  }
86
93
 
87
94
  getMemberType( builder, name ) {
88
95
 
89
- return this.outputNode ? this.outputNode.getMemberType( builder, name ) : 'void';
96
+ return this.hasOutput ? this.outputNode.getMemberType( builder, name ) : 'void';
90
97
 
91
98
  }
92
99
 
@@ -96,7 +103,14 @@ class StackNode extends Node {
96
103
  * @param {Node} node - The node to add.
97
104
  * @return {StackNode} A reference to this stack node.
98
105
  */
99
- add( node ) {
106
+ addToStack( node ) {
107
+
108
+ if ( node.isNode !== true ) {
109
+
110
+ error( 'TSL: Invalid node added to stack.' );
111
+ return this;
112
+
113
+ }
100
114
 
101
115
  this.nodes.push( node );
102
116
 
@@ -116,7 +130,7 @@ class StackNode extends Node {
116
130
  const methodNode = new ShaderNode( method );
117
131
  this._currentCond = select( boolNode, methodNode );
118
132
 
119
- return this.add( this._currentCond );
133
+ return this.addToStack( this._currentCond );
120
134
 
121
135
  }
122
136
 
@@ -191,7 +205,7 @@ class StackNode extends Node {
191
205
 
192
206
  } else {
193
207
 
194
- throw new Error( 'TSL: Invalid parameter length. Case() requires at least two parameters.' );
208
+ error( 'TSL: Invalid parameter length. Case() requires at least two parameters.' );
195
209
 
196
210
  }
197
211
 
@@ -218,7 +232,7 @@ class StackNode extends Node {
218
232
 
219
233
  this._currentCond = condNode;
220
234
 
221
- return this.add( this._currentCond );
235
+ return this.addToStack( this._currentCond );
222
236
 
223
237
  } else {
224
238
 
@@ -255,9 +269,7 @@ class StackNode extends Node {
255
269
 
256
270
  if ( childNode.isVarNode && childNode.intent === true ) {
257
271
 
258
- const properties = builder.getNodeProperties( childNode );
259
-
260
- if ( properties.assign !== true ) {
272
+ if ( childNode.isAssign( builder ) !== true ) {
261
273
 
262
274
  continue;
263
275
 
@@ -275,14 +287,19 @@ class StackNode extends Node {
275
287
 
276
288
  }
277
289
 
290
+ get hasOutput() {
291
+
292
+ return this.outputNode && this.outputNode.isNode;
293
+
294
+ }
295
+
278
296
  build( builder, ...params ) {
279
297
 
280
- const previousBuildStack = builder.currentStack;
281
298
  const previousStack = getCurrentStack();
282
299
 
283
300
  setCurrentStack( this );
284
301
 
285
- builder.currentStack = this;
302
+ builder.setActiveStack( this );
286
303
 
287
304
  const buildStage = builder.buildStage;
288
305
 
@@ -290,9 +307,7 @@ class StackNode extends Node {
290
307
 
291
308
  if ( node.isVarNode && node.intent === true ) {
292
309
 
293
- const properties = builder.getNodeProperties( node );
294
-
295
- if ( properties.assign !== true ) {
310
+ if ( node.isAssign( builder ) !== true ) {
296
311
 
297
312
  continue;
298
313
 
@@ -325,11 +340,23 @@ class StackNode extends Node {
325
340
 
326
341
  }
327
342
 
328
- const result = this.outputNode ? this.outputNode.build( builder, ...params ) : super.build( builder, ...params );
343
+ //
344
+
345
+ let result;
346
+
347
+ if ( this.hasOutput ) {
348
+
349
+ result = this.outputNode.build( builder, ...params );
350
+
351
+ } else {
352
+
353
+ result = super.build( builder, ...params );
354
+
355
+ }
329
356
 
330
357
  setCurrentStack( previousStack );
331
358
 
332
- builder.currentStack = previousBuildStack;
359
+ builder.removeActiveStack( this );
333
360
 
334
361
  return result;
335
362
 
@@ -30,11 +30,11 @@ class StructNode extends Node {
30
30
 
31
31
  }
32
32
 
33
- constructor( structLayoutNode, values ) {
33
+ constructor( structTypeNode, values ) {
34
34
 
35
35
  super( 'vec3' );
36
36
 
37
- this.structLayoutNode = structLayoutNode;
37
+ this.structTypeNode = structTypeNode;
38
38
  this.values = values;
39
39
 
40
40
  this.isStructNode = true;
@@ -43,13 +43,13 @@ class StructNode extends Node {
43
43
 
44
44
  getNodeType( builder ) {
45
45
 
46
- return this.structLayoutNode.getNodeType( builder );
46
+ return this.structTypeNode.getNodeType( builder );
47
47
 
48
48
  }
49
49
 
50
50
  getMemberType( builder, name ) {
51
51
 
52
- return this.structLayoutNode.getMemberType( builder, name );
52
+ return this.structTypeNode.getMemberType( builder, name );
53
53
 
54
54
  }
55
55
 
@@ -59,7 +59,7 @@ class StructNode extends Node {
59
59
  const structType = nodeVar.type;
60
60
  const propertyName = builder.getPropertyName( nodeVar );
61
61
 
62
- builder.addLineFlowCode( `${ propertyName } = ${ builder.generateStruct( structType, this.structLayoutNode.membersLayout, this.values ) }`, this );
62
+ builder.addLineFlowCode( `${ propertyName } = ${ builder.generateStruct( structType, this.structTypeNode.membersLayout, this.values ) }`, this );
63
63
 
64
64
  return nodeVar.name;
65
65
 
@@ -138,6 +138,7 @@ class StructTypeNode extends Node {
138
138
 
139
139
  setup( builder ) {
140
140
 
141
+ builder.getStructTypeFromNode( this, this.membersLayout, this.name );
141
142
  builder.addInclude( this );
142
143
 
143
144
  }
@@ -7,7 +7,7 @@ import { nodeObject } from '../tsl/TSLCore.js';
7
7
  * @augments Node
8
8
  * @param {Node} node - The node to be built in the sub-build.
9
9
  * @param {string} name - The name of the sub-build.
10
- * @param {string|null} [nodeType=null] - The type of the node, if known.
10
+ * @param {?string} [nodeType=null] - The type of the node, if known.
11
11
  */
12
12
  class SubBuildNode extends Node {
13
13
 
@@ -83,7 +83,7 @@ export default SubBuildNode;
83
83
  * @function
84
84
  * @param {Node} node - The node to be built in the sub-build.
85
85
  * @param {string} name - The name of the sub-build.
86
- * @param {string|null} [type=null] - The type of the node, if known.
86
+ * @param {?string} [type=null] - The type of the node, if known.
87
87
  * @returns {Node} A node object wrapping the SubBuildNode instance.
88
88
  */
89
89
  export const subBuild = ( node, name, type = null ) => nodeObject( new SubBuildNode( nodeObject( node ), name, type ) );
@@ -1,6 +1,8 @@
1
1
  import InputNode from './InputNode.js';
2
2
  import { objectGroup } from './UniformGroupNode.js';
3
3
  import { nodeObject, getConstNodeType } from '../tsl/TSLCore.js';
4
+ import { getValueFromType } from './NodeUtils.js';
5
+ import { warn } from '../../utils.js';
4
6
 
5
7
  /**
6
8
  * Class for representing a uniform.
@@ -76,7 +78,7 @@ class UniformNode extends InputNode {
76
78
  */
77
79
  label( name ) {
78
80
 
79
- console.warn( 'THREE.TSL: "label()" has been deprecated. Use "setName()" instead.' ); // @deprecated r179
81
+ warn( 'TSL: "label()" has been deprecated. Use "setName()" instead.' ); // @deprecated r179
80
82
 
81
83
  return this.setName( name );
82
84
 
@@ -122,13 +124,11 @@ class UniformNode extends InputNode {
122
124
 
123
125
  onUpdate( callback, updateType ) {
124
126
 
125
- const self = this.getSelf();
126
-
127
- callback = callback.bind( self );
127
+ callback = callback.bind( this );
128
128
 
129
129
  return super.onUpdate( ( frame ) => {
130
130
 
131
- const value = callback( frame, self );
131
+ const value = callback( frame, this );
132
132
 
133
133
  if ( value !== undefined ) {
134
134
 
@@ -219,16 +219,24 @@ export default UniformNode;
219
219
  *
220
220
  * @tsl
221
221
  * @function
222
- * @param {any} arg1 - The value of this node. Usually a JS primitive or three.js object (vector, matrix, color, texture).
223
- * @param {string} [arg2] - The node type. If no explicit type is defined, the node tries to derive the type from its value.
222
+ * @param {any|string} value - The value of this uniform or your type. Usually a JS primitive or three.js object (vector, matrix, color, texture).
223
+ * @param {string} [type] - The node type. If no explicit type is defined, the node tries to derive the type from its value.
224
224
  * @returns {UniformNode}
225
225
  */
226
- export const uniform = ( arg1, arg2 ) => {
226
+ export const uniform = ( value, type ) => {
227
+
228
+ const nodeType = getConstNodeType( type || value );
229
+
230
+ if ( nodeType === value ) {
227
231
 
228
- const nodeType = getConstNodeType( arg2 || arg1 );
232
+ // if the value is a type but no having a value
233
+
234
+ value = getValueFromType( nodeType );
235
+
236
+ }
229
237
 
230
238
  // @TODO: get ConstNode from .traverse() in the future
231
- const value = ( arg1 && arg1.isNode === true ) ? ( arg1.node && arg1.node.value ) || arg1.value : arg1;
239
+ value = ( value && value.isNode === true ) ? ( value.node && value.node.value ) || value.value : value;
232
240
 
233
241
  return nodeObject( new UniformNode( value, nodeType ) );
234
242
 
@@ -1,5 +1,6 @@
1
1
  import Node from './Node.js';
2
- import { addMethodChaining, getCurrentStack, nodeProxy } from '../tsl/TSLCore.js';
2
+ import { addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
3
+ import { error } from '../../utils.js';
3
4
 
4
5
  /**
5
6
  * Class for representing shader variables as nodes. Variables are created from
@@ -146,14 +147,53 @@ class VarNode extends Node {
146
147
 
147
148
  }
148
149
 
150
+ isAssign( builder ) {
151
+
152
+ const properties = builder.getNodeProperties( this );
153
+
154
+ let assign = properties.assign;
155
+
156
+ if ( assign !== true ) {
157
+
158
+ if ( this.node.isShaderCallNodeInternal && this.node.shaderNode.getLayout() === null ) {
159
+
160
+ if ( builder.fnCall && builder.fnCall.shaderNode ) {
161
+
162
+ const shaderNodeData = builder.getDataFromNode( this.node.shaderNode );
163
+
164
+ if ( shaderNodeData.hasLoop ) {
165
+
166
+ assign = true;
167
+
168
+ }
169
+
170
+ }
171
+
172
+ }
173
+
174
+ }
175
+
176
+ return assign;
177
+
178
+ }
179
+
149
180
  build( ...params ) {
150
181
 
151
- if ( this.intent === true ) {
182
+ const builder = params[ 0 ];
152
183
 
153
- const builder = params[ 0 ];
154
- const properties = builder.getNodeProperties( this );
184
+ if ( this._hasStack( builder ) === false && builder.buildStage === 'setup' ) {
155
185
 
156
- if ( properties.assign !== true ) {
186
+ if ( builder.context.nodeLoop || builder.context.nodeBlock ) {
187
+
188
+ builder.getBaseStack().addToStack( this );
189
+
190
+ }
191
+
192
+ }
193
+
194
+ if ( this.intent === true ) {
195
+
196
+ if ( this.isAssign( builder ) !== true ) {
157
197
 
158
198
  return this.node.build( ...params );
159
199
 
@@ -183,7 +223,23 @@ class VarNode extends Node {
183
223
 
184
224
  }
185
225
 
186
- const vectorType = builder.getVectorType( this.getNodeType( builder ) );
226
+ const nodeType = this.getNodeType( builder );
227
+
228
+ if ( nodeType == 'void' ) {
229
+
230
+ if ( this.intent !== true ) {
231
+
232
+ error( 'TSL: ".toVar()" can not be used with void type.' );
233
+
234
+ }
235
+
236
+ const snippet = node.build( builder );
237
+
238
+ return snippet;
239
+
240
+ }
241
+
242
+ const vectorType = builder.getVectorType( nodeType );
187
243
  const snippet = node.build( builder, vectorType );
188
244
 
189
245
  const nodeVar = builder.getVarFromNode( this, name, vectorType, undefined, shouldTreatAsReadOnly );
@@ -216,6 +272,14 @@ class VarNode extends Node {
216
272
 
217
273
  }
218
274
 
275
+ _hasStack( builder ) {
276
+
277
+ const nodeData = builder.getDataFromNode( this );
278
+
279
+ return nodeData.stack !== undefined;
280
+
281
+ }
282
+
219
283
  }
220
284
 
221
285
  export default VarNode;
@@ -267,12 +331,6 @@ export const Const = ( node, name = null ) => createVar( node, name, true ).toSt
267
331
  */
268
332
  export const VarIntent = ( node ) => {
269
333
 
270
- if ( getCurrentStack() === null ) {
271
-
272
- return node;
273
-
274
- }
275
-
276
334
  return createVar( node ).setIntent( true ).toStack();
277
335
 
278
336
  };
@@ -282,24 +340,3 @@ export const VarIntent = ( node ) => {
282
340
  addMethodChaining( 'toVar', Var );
283
341
  addMethodChaining( 'toConst', Const );
284
342
  addMethodChaining( 'toVarIntent', VarIntent );
285
-
286
- // Deprecated
287
-
288
- /**
289
- * @tsl
290
- * @function
291
- * @deprecated since r170. Use `Var( node )` or `node.toVar()` instead.
292
- *
293
- * @param {any} node
294
- * @returns {VarNode}
295
- */
296
- export const temp = ( node ) => { // @deprecated, r170
297
-
298
- console.warn( 'TSL: "temp( node )" is deprecated. Use "Var( node )" or "node.toVar()" instead.' );
299
-
300
- return createVar( node );
301
-
302
- };
303
-
304
- addMethodChaining( 'temp', temp );
305
-