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,12 +1,59 @@
1
+ /**
2
+ * This renderer module provides a series of statistical information
3
+ * about the GPU memory and the rendering process. Useful for debugging
4
+ * and monitoring.
5
+ */
1
6
  class Info {
2
7
 
8
+ /**
9
+ * Constructs a new info component.
10
+ */
3
11
  constructor() {
4
12
 
13
+ /**
14
+ * Whether frame related metrics should automatically
15
+ * be resetted or not. This property should be set to `false`
16
+ * by apps which manage their own animation loop. They must
17
+ * then call `renderer.info.reset()` once per frame manually.
18
+ *
19
+ * @type {Boolean}
20
+ * @default true
21
+ */
5
22
  this.autoReset = true;
6
23
 
24
+ /**
25
+ * The current frame ID. This ID is managed
26
+ * by `NodeFrame`.
27
+ *
28
+ * @type {Number}
29
+ * @readonly
30
+ * @default 0
31
+ */
7
32
  this.frame = 0;
33
+
34
+ /**
35
+ * The number of render calls since the
36
+ * app has been started.
37
+ *
38
+ * @type {Number}
39
+ * @readonly
40
+ * @default 0
41
+ */
8
42
  this.calls = 0;
9
43
 
44
+ /**
45
+ * Render related metrics.
46
+ *
47
+ * @type {Object}
48
+ * @readonly
49
+ * @property {Number} calls - The number of render calls since the app has been started.
50
+ * @property {Number} frameCalls - The number of render calls of the current frame.
51
+ * @property {Number} drawCalls - The number of draw calls of the current frame.
52
+ * @property {Number} triangles - The number of rendered triangle primitives of the current frame.
53
+ * @property {Number} points - The number of rendered point primitives of the current frame.
54
+ * @property {Number} lines - The number of rendered line primitives of the current frame.
55
+ * @property {Number} timestamp - The timestamp of the frame when using `renderer.renderAsync()`.
56
+ */
10
57
  this.render = {
11
58
  calls: 0,
12
59
  frameCalls: 0,
@@ -15,18 +62,31 @@ class Info {
15
62
  points: 0,
16
63
  lines: 0,
17
64
  timestamp: 0,
18
- previousFrameCalls: 0,
19
- timestampCalls: 0
20
65
  };
21
66
 
67
+ /**
68
+ * Compute related metrics.
69
+ *
70
+ * @type {Object}
71
+ * @readonly
72
+ * @property {Number} calls - The number of compute calls since the app has been started.
73
+ * @property {Number} frameCalls - The number of compute calls of the current frame.
74
+ * @property {Number} timestamp - The timestamp of the frame when using `renderer.computeAsync()`.
75
+ */
22
76
  this.compute = {
23
77
  calls: 0,
24
78
  frameCalls: 0,
25
- timestamp: 0,
26
- previousFrameCalls: 0,
27
- timestampCalls: 0
79
+ timestamp: 0
28
80
  };
29
81
 
82
+ /**
83
+ * Memory related metrics.
84
+ *
85
+ * @type {Object}
86
+ * @readonly
87
+ * @property {Number} geometries - The number of active geometries.
88
+ * @property {Number} frameCalls - The number of active textures.
89
+ */
30
90
  this.memory = {
31
91
  geometries: 0,
32
92
  textures: 0
@@ -34,6 +94,13 @@ class Info {
34
94
 
35
95
  }
36
96
 
97
+ /**
98
+ * This method should be executed per draw call and updates the corresponding metrics.
99
+ *
100
+ * @param {Object3D} object - The 3D object that is going to be rendered.
101
+ * @param {Number} count - The vertex or index count.
102
+ * @param {Number} instanceCount - The instance count.
103
+ */
37
104
  update( object, count, instanceCount ) {
38
105
 
39
106
  this.render.drawCalls ++;
@@ -62,38 +129,11 @@ class Info {
62
129
 
63
130
  }
64
131
 
65
- updateTimestamp( type, time ) {
66
-
67
- if ( this[ type ].timestampCalls === 0 ) {
68
-
69
- this[ type ].timestamp = 0;
70
-
71
- }
72
-
73
-
74
- this[ type ].timestamp += time;
75
-
76
- this[ type ].timestampCalls ++;
77
-
78
-
79
- if ( this[ type ].timestampCalls >= this[ type ].previousFrameCalls ) {
80
-
81
- this[ type ].timestampCalls = 0;
82
-
83
- }
84
-
85
-
86
- }
87
-
132
+ /**
133
+ * Resets frame related metrics.
134
+ */
88
135
  reset() {
89
136
 
90
- const previousRenderFrameCalls = this.render.frameCalls;
91
- this.render.previousFrameCalls = previousRenderFrameCalls;
92
-
93
- const previousComputeFrameCalls = this.compute.frameCalls;
94
- this.compute.previousFrameCalls = previousComputeFrameCalls;
95
-
96
-
97
137
  this.render.drawCalls = 0;
98
138
  this.render.frameCalls = 0;
99
139
  this.compute.frameCalls = 0;
@@ -105,6 +145,9 @@ class Info {
105
145
 
106
146
  }
107
147
 
148
+ /**
149
+ * Performs a complete reset of the object.
150
+ */
108
151
  dispose() {
109
152
 
110
153
  this.reset();
@@ -2,40 +2,68 @@ import { LightsNode } from '../../nodes/Nodes.js';
2
2
  import ChainMap from './ChainMap.js';
3
3
 
4
4
  const _defaultLights = /*@__PURE__*/ new LightsNode();
5
-
5
+ const _chainKeys = [];
6
+
7
+ /**
8
+ * This renderer module manages the lights nodes which are unique
9
+ * per scene and camera combination.
10
+ *
11
+ * The lights node itself is later configured in the render list
12
+ * with the actual lights from the scene.
13
+ *
14
+ * @private
15
+ * @augments ChainMap
16
+ */
6
17
  class Lighting extends ChainMap {
7
18
 
19
+ /**
20
+ * Constructs a lighting management component.
21
+ */
8
22
  constructor() {
9
23
 
10
24
  super();
11
25
 
12
26
  }
13
27
 
28
+ /**
29
+ * Creates a new lights node for the given array of lights.
30
+ *
31
+ * @param {Array<Light>} lights - The render object.
32
+ * @return {LightsNode} The lights node.
33
+ */
14
34
  createNode( lights = [] ) {
15
35
 
16
36
  return new LightsNode().setLights( lights );
17
37
 
18
38
  }
19
39
 
40
+ /**
41
+ * Returns a lights node for the given scene and camera.
42
+ *
43
+ * @param {Scene} scene - The scene.
44
+ * @param {Camera} camera - The camera.
45
+ * @return {LightsNode} The lights node.
46
+ */
20
47
  getNode( scene, camera ) {
21
48
 
22
49
  // ignore post-processing
23
50
 
24
51
  if ( scene.isQuadMesh ) return _defaultLights;
25
52
 
26
- // tiled lighting
27
-
28
- const keys = [ scene, camera ];
53
+ _chainKeys[ 0 ] = scene;
54
+ _chainKeys[ 1 ] = camera;
29
55
 
30
- let node = this.get( keys );
56
+ let node = this.get( _chainKeys );
31
57
 
32
58
  if ( node === undefined ) {
33
59
 
34
60
  node = this.createNode();
35
- this.set( keys, node );
61
+ this.set( _chainKeys, node );
36
62
 
37
63
  }
38
64
 
65
+ _chainKeys.length = 0;
66
+
39
67
  return node;
40
68
 
41
69
  }
@@ -1,9 +1,31 @@
1
+ /**
2
+ * Abstract class for representing pipelines.
3
+ *
4
+ * @private
5
+ * @abstract
6
+ */
1
7
  class Pipeline {
2
8
 
9
+ /**
10
+ * Constructs a new pipeline.
11
+ *
12
+ * @param {String} cacheKey - The pipeline's cache key.
13
+ */
3
14
  constructor( cacheKey ) {
4
15
 
16
+ /**
17
+ * The pipeline's cache key.
18
+ *
19
+ * @type {String}
20
+ */
5
21
  this.cacheKey = cacheKey;
6
22
 
23
+ /**
24
+ * How often the pipeline is currently in use.
25
+ *
26
+ * @type {Number}
27
+ * @default 0
28
+ */
7
29
  this.usedTimes = 0;
8
30
 
9
31
  }
@@ -3,18 +3,63 @@ import RenderPipeline from './RenderPipeline.js';
3
3
  import ComputePipeline from './ComputePipeline.js';
4
4
  import ProgrammableStage from './ProgrammableStage.js';
5
5
 
6
+ /**
7
+ * This renderer module manages the pipelines of the renderer.
8
+ *
9
+ * @private
10
+ * @augments DataMap
11
+ */
6
12
  class Pipelines extends DataMap {
7
13
 
14
+ /**
15
+ * Constructs a new pipeline management component.
16
+ *
17
+ * @param {Backend} backend - The renderer's backend.
18
+ * @param {Nodes} nodes - Renderer component for managing nodes related logic.
19
+ */
8
20
  constructor( backend, nodes ) {
9
21
 
10
22
  super();
11
23
 
24
+ /**
25
+ * The renderer's backend.
26
+ *
27
+ * @type {Backend}
28
+ */
12
29
  this.backend = backend;
13
- this.nodes = nodes;
14
30
 
15
- this.bindings = null; // set by the bindings
31
+ /**
32
+ * Renderer component for managing nodes related logic.
33
+ *
34
+ * @type {Nodes}
35
+ */
36
+ this.nodes = nodes;
16
37
 
38
+ /**
39
+ * A references to the bindings management component.
40
+ * This reference will be set inside the `Bindings`
41
+ * constructor.
42
+ *
43
+ * @type {Bindings?}
44
+ * @default null
45
+ */
46
+ this.bindings = null;
47
+
48
+ /**
49
+ * Internal cache for maintaining pipelines.
50
+ * The key of the map is a cache key, the value the pipeline.
51
+ *
52
+ * @type {Map<String,Pipeline>}
53
+ */
17
54
  this.caches = new Map();
55
+
56
+ /**
57
+ * This dictionary maintains for each shader stage type (vertex,
58
+ * fragment and compute) the programmable stage objects which
59
+ * represent the actual shader code.
60
+ *
61
+ * @type {Object<String,Map>}
62
+ */
18
63
  this.programs = {
19
64
  vertex: new Map(),
20
65
  fragment: new Map(),
@@ -23,6 +68,13 @@ class Pipelines extends DataMap {
23
68
 
24
69
  }
25
70
 
71
+ /**
72
+ * Returns a compute pipeline for the given compute node.
73
+ *
74
+ * @param {Node} computeNode - The compute node.
75
+ * @param {Array<BindGroup>} bindings - The bindings.
76
+ * @return {ComputePipeline} The compute pipeline.
77
+ */
26
78
  getForCompute( computeNode, bindings ) {
27
79
 
28
80
  const { backend } = this;
@@ -52,7 +104,7 @@ class Pipelines extends DataMap {
52
104
 
53
105
  if ( previousPipeline && previousPipeline.computeProgram.usedTimes === 0 ) this._releaseProgram( previousPipeline.computeProgram );
54
106
 
55
- stageCompute = new ProgrammableStage( nodeBuilderState.computeShader, 'compute', nodeBuilderState.transforms, nodeBuilderState.nodeAttributes );
107
+ stageCompute = new ProgrammableStage( nodeBuilderState.computeShader, 'compute', computeNode.name, nodeBuilderState.transforms, nodeBuilderState.nodeAttributes );
56
108
  this.programs.compute.set( nodeBuilderState.computeShader, stageCompute );
57
109
 
58
110
  backend.createProgram( stageCompute );
@@ -89,6 +141,13 @@ class Pipelines extends DataMap {
89
141
 
90
142
  }
91
143
 
144
+ /**
145
+ * Returns a render pipeline for the given render object.
146
+ *
147
+ * @param {RenderObject} renderObject - The render object.
148
+ * @param {Array<Promise>?} [promises=null] - An array of compilation promises which is only relevant in context of `Renderer.compileAsync()`.
149
+ * @return {RenderPipeline} The render pipeline.
150
+ */
92
151
  getForRender( renderObject, promises = null ) {
93
152
 
94
153
  const { backend } = this;
@@ -111,6 +170,8 @@ class Pipelines extends DataMap {
111
170
 
112
171
  const nodeBuilderState = renderObject.getNodeBuilderState();
113
172
 
173
+ const name = renderObject.material ? renderObject.material.name : '';
174
+
114
175
  // programmable stages
115
176
 
116
177
  let stageVertex = this.programs.vertex.get( nodeBuilderState.vertexShader );
@@ -119,7 +180,7 @@ class Pipelines extends DataMap {
119
180
 
120
181
  if ( previousPipeline && previousPipeline.vertexProgram.usedTimes === 0 ) this._releaseProgram( previousPipeline.vertexProgram );
121
182
 
122
- stageVertex = new ProgrammableStage( nodeBuilderState.vertexShader, 'vertex' );
183
+ stageVertex = new ProgrammableStage( nodeBuilderState.vertexShader, 'vertex', name );
123
184
  this.programs.vertex.set( nodeBuilderState.vertexShader, stageVertex );
124
185
 
125
186
  backend.createProgram( stageVertex );
@@ -132,7 +193,7 @@ class Pipelines extends DataMap {
132
193
 
133
194
  if ( previousPipeline && previousPipeline.fragmentProgram.usedTimes === 0 ) this._releaseProgram( previousPipeline.fragmentProgram );
134
195
 
135
- stageFragment = new ProgrammableStage( nodeBuilderState.fragmentShader, 'fragment' );
196
+ stageFragment = new ProgrammableStage( nodeBuilderState.fragmentShader, 'fragment', name );
136
197
  this.programs.fragment.set( nodeBuilderState.fragmentShader, stageFragment );
137
198
 
138
199
  backend.createProgram( stageFragment );
@@ -173,6 +234,12 @@ class Pipelines extends DataMap {
173
234
 
174
235
  }
175
236
 
237
+ /**
238
+ * Deletes the pipeline for the given render object.
239
+ *
240
+ * @param {RenderObject} object - The render object.
241
+ * @return {Object?} The deleted dictionary.
242
+ */
176
243
  delete( object ) {
177
244
 
178
245
  const pipeline = this.get( object ).pipeline;
@@ -209,6 +276,9 @@ class Pipelines extends DataMap {
209
276
 
210
277
  }
211
278
 
279
+ /**
280
+ * Frees internal resources.
281
+ */
212
282
  dispose() {
213
283
 
214
284
  super.dispose();
@@ -222,12 +292,27 @@ class Pipelines extends DataMap {
222
292
 
223
293
  }
224
294
 
295
+ /**
296
+ * Updates the pipeline for the given render object.
297
+ *
298
+ * @param {RenderObject} renderObject - The render object.
299
+ */
225
300
  updateForRender( renderObject ) {
226
301
 
227
302
  this.getForRender( renderObject );
228
303
 
229
304
  }
230
305
 
306
+ /**
307
+ * Returns a compute pipeline for the given parameters.
308
+ *
309
+ * @private
310
+ * @param {Node} computeNode - The compute node.
311
+ * @param {ProgrammableStage} stageCompute - The programmable stage representing the compute shader.
312
+ * @param {String} cacheKey - The cache key.
313
+ * @param {Array<BindGroup>} bindings - The bindings.
314
+ * @return {ComputePipeline} The compute pipeline.
315
+ */
231
316
  _getComputePipeline( computeNode, stageCompute, cacheKey, bindings ) {
232
317
 
233
318
  // check for existing pipeline
@@ -250,6 +335,17 @@ class Pipelines extends DataMap {
250
335
 
251
336
  }
252
337
 
338
+ /**
339
+ * Returns a render pipeline for the given parameters.
340
+ *
341
+ * @private
342
+ * @param {RenderObject} renderObject - The render object.
343
+ * @param {ProgrammableStage} stageVertex - The programmable stage representing the vertex shader.
344
+ * @param {ProgrammableStage} stageFragment - The programmable stage representing the fragment shader.
345
+ * @param {String} cacheKey - The cache key.
346
+ * @param {Array<Promise>?} promises - An array of compilation promises which is only relevant in context of `Renderer.compileAsync()`.
347
+ * @return {ComputePipeline} The compute pipeline.
348
+ */
253
349
  _getRenderPipeline( renderObject, stageVertex, stageFragment, cacheKey, promises ) {
254
350
 
255
351
  // check for existing pipeline
@@ -266,6 +362,10 @@ class Pipelines extends DataMap {
266
362
 
267
363
  renderObject.pipeline = pipeline;
268
364
 
365
+ // The `promises` array is `null` by default and only set to an empty array when
366
+ // `Renderer.compileAsync()` is used. The next call actually fills the array with
367
+ // pending promises that resolve when the render pipelines are ready for rendering.
368
+
269
369
  this.backend.createRenderPipeline( renderObject, promises );
270
370
 
271
371
  }
@@ -274,24 +374,53 @@ class Pipelines extends DataMap {
274
374
 
275
375
  }
276
376
 
377
+ /**
378
+ * Computes a cache key representing a compute pipeline.
379
+ *
380
+ * @private
381
+ * @param {Node} computeNode - The compute node.
382
+ * @param {ProgrammableStage} stageCompute - The programmable stage representing the compute shader.
383
+ * @return {String} The cache key.
384
+ */
277
385
  _getComputeCacheKey( computeNode, stageCompute ) {
278
386
 
279
387
  return computeNode.id + ',' + stageCompute.id;
280
388
 
281
389
  }
282
390
 
391
+ /**
392
+ * Computes a cache key representing a render pipeline.
393
+ *
394
+ * @private
395
+ * @param {RenderObject} renderObject - The render object.
396
+ * @param {ProgrammableStage} stageVertex - The programmable stage representing the vertex shader.
397
+ * @param {ProgrammableStage} stageFragment - The programmable stage representing the fragment shader.
398
+ * @return {String} The cache key.
399
+ */
283
400
  _getRenderCacheKey( renderObject, stageVertex, stageFragment ) {
284
401
 
285
402
  return stageVertex.id + ',' + stageFragment.id + ',' + this.backend.getRenderCacheKey( renderObject );
286
403
 
287
404
  }
288
405
 
406
+ /**
407
+ * Releases the given pipeline.
408
+ *
409
+ * @private
410
+ * @param {Pipeline} pipeline - The pipeline to release.
411
+ */
289
412
  _releasePipeline( pipeline ) {
290
413
 
291
414
  this.caches.delete( pipeline.cacheKey );
292
415
 
293
416
  }
294
417
 
418
+ /**
419
+ * Releases the shader program.
420
+ *
421
+ * @private
422
+ * @param {Object} program - The shader program to release.
423
+ */
295
424
  _releaseProgram( program ) {
296
425
 
297
426
  const code = program.code;
@@ -301,6 +430,13 @@ class Pipelines extends DataMap {
301
430
 
302
431
  }
303
432
 
433
+ /**
434
+ * Returns `true` if the compute pipeline for the given compute node requires an update.
435
+ *
436
+ * @private
437
+ * @param {Node} computeNode - The compute node.
438
+ * @return {Boolean} Whether the compute pipeline for the given compute node requires an update or not.
439
+ */
304
440
  _needsComputeUpdate( computeNode ) {
305
441
 
306
442
  const data = this.get( computeNode );
@@ -309,6 +445,13 @@ class Pipelines extends DataMap {
309
445
 
310
446
  }
311
447
 
448
+ /**
449
+ * Returns `true` if the render pipeline for the given render object requires an update.
450
+ *
451
+ * @private
452
+ * @param {RenderObject} renderObject - The render object.
453
+ * @return {Boolean} Whether the render object for the given render object requires an update or not.
454
+ */
312
455
  _needsRenderUpdate( renderObject ) {
313
456
 
314
457
  const data = this.get( renderObject );