super-three 0.170.1 → 0.172.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (413) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +157 -49
  3. package/build/three.core.js +104 -42
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +53 -8
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +10 -5
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +21191 -1008
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +21189 -1008
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/jsm/Addons.js +0 -5
  14. package/examples/jsm/animation/CCDIKSolver.js +3 -2
  15. package/examples/jsm/controls/ArcballControls.js +28 -19
  16. package/examples/jsm/controls/OrbitControls.js +5 -4
  17. package/examples/jsm/csm/CSMShadowNode.js +16 -11
  18. package/examples/jsm/curves/NURBSCurve.js +1 -1
  19. package/examples/jsm/curves/NURBSUtils.js +3 -0
  20. package/examples/jsm/effects/OutlineEffect.js +1 -1
  21. package/examples/jsm/exporters/GLTFExporter.js +11 -7
  22. package/examples/jsm/exporters/KTX2Exporter.js +1 -1
  23. package/examples/jsm/exporters/PLYExporter.js +2 -2
  24. package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
  25. package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
  26. package/examples/jsm/lights/LightProbeGenerator.js +3 -3
  27. package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
  28. package/examples/jsm/loaders/3MFLoader.js +6 -3
  29. package/examples/jsm/loaders/BVHLoader.js +1 -1
  30. package/examples/jsm/loaders/ColladaLoader.js +5 -5
  31. package/examples/jsm/loaders/DDSLoader.js +42 -0
  32. package/examples/jsm/loaders/GCodeLoader.js +1 -1
  33. package/examples/jsm/loaders/GLTFLoader.js +22 -2
  34. package/examples/jsm/loaders/KTX2Loader.js +6 -1
  35. package/examples/jsm/loaders/KTXLoader.js +4 -4
  36. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  37. package/examples/jsm/loaders/LottieLoader.js +1 -1
  38. package/examples/jsm/loaders/MTLLoader.js +1 -0
  39. package/examples/jsm/loaders/NRRDLoader.js +1 -1
  40. package/examples/jsm/loaders/PLYLoader.js +7 -7
  41. package/examples/jsm/loaders/PVRLoader.js +1 -1
  42. package/examples/jsm/loaders/SVGLoader.js +2 -2
  43. package/examples/jsm/loaders/TDSLoader.js +1 -1
  44. package/examples/jsm/loaders/VRMLLoader.js +7 -7
  45. package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
  46. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
  47. package/examples/jsm/math/ConvexHull.js +1 -1
  48. package/examples/jsm/math/OBB.js +17 -0
  49. package/examples/jsm/misc/ProgressiveLightMapGPU.js +10 -10
  50. package/examples/jsm/misc/Volume.js +20 -12
  51. package/examples/jsm/misc/VolumeSlice.js +2 -2
  52. package/examples/jsm/modifiers/CurveModifier.js +10 -8
  53. package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
  54. package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
  55. package/examples/jsm/objects/GroundedSkybox.js +4 -4
  56. package/examples/jsm/objects/Sky.js +2 -2
  57. package/examples/jsm/objects/SkyMesh.js +3 -3
  58. package/examples/jsm/objects/Water2.js +1 -1
  59. package/examples/jsm/objects/Water2Mesh.js +2 -2
  60. package/examples/jsm/objects/WaterMesh.js +4 -4
  61. package/examples/jsm/postprocessing/BloomPass.js +2 -2
  62. package/examples/jsm/postprocessing/EffectComposer.js +1 -2
  63. package/examples/jsm/postprocessing/OutlinePass.js +4 -4
  64. package/examples/jsm/postprocessing/SAOPass.js +1 -2
  65. package/examples/jsm/postprocessing/SMAAPass.js +1 -3
  66. package/examples/jsm/postprocessing/SSAOPass.js +2 -4
  67. package/examples/jsm/postprocessing/SSRPass.js +2 -4
  68. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
  69. package/examples/jsm/renderers/SVGRenderer.js +6 -4
  70. package/examples/jsm/shaders/BokehShader2.js +1 -1
  71. package/examples/jsm/shaders/GodRaysShader.js +3 -3
  72. package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
  73. package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
  74. package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
  75. package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
  76. package/examples/jsm/tsl/display/BleachBypass.js +10 -0
  77. package/examples/jsm/tsl/display/BloomNode.js +233 -26
  78. package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
  79. package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
  80. package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
  81. package/examples/jsm/tsl/display/FXAANode.js +52 -3
  82. package/examples/jsm/tsl/display/FilmNode.js +47 -1
  83. package/examples/jsm/tsl/display/GTAONode.js +210 -14
  84. package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
  85. package/examples/jsm/tsl/display/LensflareNode.js +131 -13
  86. package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
  87. package/examples/jsm/tsl/display/MotionBlur.js +12 -2
  88. package/examples/jsm/tsl/display/OutlineNode.js +343 -26
  89. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
  90. package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
  91. package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
  92. package/examples/jsm/tsl/display/SMAANode.js +187 -46
  93. package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
  94. package/examples/jsm/tsl/display/SSRNode.js +194 -21
  95. package/examples/jsm/tsl/display/Sepia.js +9 -0
  96. package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
  97. package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
  98. package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
  99. package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
  100. package/examples/jsm/tsl/display/TransitionNode.js +71 -6
  101. package/examples/jsm/tsl/display/hashBlur.js +14 -3
  102. package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
  103. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  104. package/examples/jsm/utils/CameraUtils.js +4 -1
  105. package/examples/jsm/utils/GeometryUtils.js +22 -19
  106. package/examples/jsm/utils/SceneUtils.js +2 -2
  107. package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
  108. package/examples/jsm/webxr/XREstimatedLight.js +1 -1
  109. package/package.json +8 -3
  110. package/src/Three.Core.js +2 -0
  111. package/src/Three.Legacy.js +0 -21
  112. package/src/Three.TSL.js +9 -4
  113. package/src/Three.WebGPU.Nodes.js +2 -2
  114. package/src/Three.WebGPU.js +2 -2
  115. package/src/animation/PropertyBinding.js +2 -2
  116. package/src/cameras/PerspectiveCamera.js +18 -2
  117. package/src/constants.js +1 -1
  118. package/src/core/RenderTarget.js +18 -0
  119. package/src/core/RenderTarget3D.js +22 -0
  120. package/src/core/RenderTargetArray.js +22 -0
  121. package/src/extras/Earcut.js +1 -1
  122. package/src/extras/PMREMGenerator.js +20 -0
  123. package/src/extras/TextureUtils.js +6 -0
  124. package/src/helpers/CameraHelper.js +16 -13
  125. package/src/loaders/nodes/NodeLoader.js +59 -0
  126. package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
  127. package/src/loaders/nodes/NodeObjectLoader.js +61 -0
  128. package/src/materials/nodes/InstancedPointsNodeMaterial.js +72 -19
  129. package/src/materials/nodes/Line2NodeMaterial.js +128 -34
  130. package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
  131. package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
  132. package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
  133. package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
  134. package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
  135. package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
  136. package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
  137. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
  138. package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
  139. package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
  140. package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
  141. package/src/materials/nodes/NodeMaterial.js +474 -21
  142. package/src/materials/nodes/PointsNodeMaterial.js +22 -13
  143. package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
  144. package/src/materials/nodes/SpriteNodeMaterial.js +77 -19
  145. package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
  146. package/src/materials/nodes/manager/NodeMaterialObserver.js +87 -0
  147. package/src/nodes/Nodes.js +1 -6
  148. package/src/nodes/TSL.js +2 -3
  149. package/src/nodes/accessors/AccessorsUtils.js +27 -0
  150. package/src/nodes/accessors/Arrays.js +24 -5
  151. package/src/nodes/accessors/BatchNode.js +39 -3
  152. package/src/nodes/accessors/Bitangent.js +37 -0
  153. package/src/nodes/accessors/BufferAttributeNode.js +178 -5
  154. package/src/nodes/accessors/BufferNode.js +63 -0
  155. package/src/nodes/accessors/BuiltinNode.js +38 -0
  156. package/src/nodes/accessors/Camera.js +49 -0
  157. package/src/nodes/accessors/ClippingNode.js +71 -2
  158. package/src/nodes/accessors/CubeTextureNode.js +64 -0
  159. package/src/nodes/accessors/InstanceNode.js +85 -2
  160. package/src/nodes/accessors/InstancedMeshNode.js +28 -3
  161. package/src/nodes/accessors/InstancedPointsMaterialNode.js +13 -0
  162. package/src/nodes/accessors/Lights.js +50 -1
  163. package/src/nodes/accessors/MaterialNode.js +302 -8
  164. package/src/nodes/accessors/MaterialProperties.js +7 -0
  165. package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
  166. package/src/nodes/accessors/ModelNode.js +100 -5
  167. package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
  168. package/src/nodes/accessors/MorphNode.js +48 -4
  169. package/src/nodes/accessors/Normal.js +59 -3
  170. package/src/nodes/accessors/Object3DNode.js +102 -1
  171. package/src/nodes/accessors/PointUVNode.js +26 -0
  172. package/src/nodes/accessors/Position.js +53 -4
  173. package/src/nodes/accessors/ReferenceBaseNode.js +188 -0
  174. package/src/nodes/accessors/ReferenceNode.js +202 -2
  175. package/src/nodes/accessors/ReflectVector.js +24 -0
  176. package/src/nodes/accessors/RendererReferenceNode.js +46 -1
  177. package/src/nodes/accessors/SceneNode.js +54 -0
  178. package/src/nodes/accessors/SkinningNode.js +127 -1
  179. package/src/nodes/accessors/StorageBufferNode.js +168 -4
  180. package/src/nodes/accessors/StorageTextureNode.js +118 -0
  181. package/src/nodes/accessors/Tangent.js +36 -0
  182. package/src/nodes/accessors/Texture3DNode.js +89 -5
  183. package/src/nodes/accessors/TextureBicubic.js +12 -2
  184. package/src/nodes/accessors/TextureNode.js +309 -10
  185. package/src/nodes/accessors/TextureSizeNode.js +42 -0
  186. package/src/nodes/accessors/UV.js +10 -1
  187. package/src/nodes/accessors/UniformArrayNode.js +223 -23
  188. package/src/nodes/accessors/UserDataNode.js +46 -0
  189. package/src/nodes/accessors/VelocityNode.js +82 -0
  190. package/src/nodes/accessors/VertexColorNode.js +39 -2
  191. package/src/nodes/code/CodeNode.js +95 -1
  192. package/src/nodes/code/ExpressionNode.js +28 -0
  193. package/src/nodes/code/FunctionCallNode.js +37 -0
  194. package/src/nodes/code/FunctionNode.js +45 -0
  195. package/src/nodes/code/ScriptableNode.js +223 -1
  196. package/src/nodes/code/ScriptableValueNode.js +85 -1
  197. package/src/nodes/core/AssignNode.js +48 -2
  198. package/src/nodes/core/AttributeNode.js +43 -0
  199. package/src/nodes/core/BypassNode.js +47 -2
  200. package/src/nodes/core/CacheNode.js +53 -2
  201. package/src/nodes/core/ConstNode.js +24 -0
  202. package/src/nodes/core/ContextNode.js +65 -0
  203. package/src/nodes/core/IndexNode.js +68 -7
  204. package/src/nodes/core/InputNode.js +48 -0
  205. package/src/nodes/core/LightingModel.js +60 -0
  206. package/src/nodes/core/MRTNode.js +66 -0
  207. package/src/nodes/core/Node.js +337 -12
  208. package/src/nodes/core/NodeAttribute.js +38 -0
  209. package/src/nodes/core/NodeBuilder.js +945 -15
  210. package/src/nodes/core/NodeCache.js +41 -2
  211. package/src/nodes/core/NodeCode.js +31 -0
  212. package/src/nodes/core/NodeFrame.js +123 -2
  213. package/src/nodes/core/NodeFunction.js +46 -0
  214. package/src/nodes/core/NodeFunctionInput.js +44 -0
  215. package/src/nodes/core/NodeParser.js +11 -0
  216. package/src/nodes/core/NodeUniform.js +52 -0
  217. package/src/nodes/core/NodeUtils.js +141 -0
  218. package/src/nodes/core/NodeVar.js +30 -0
  219. package/src/nodes/core/NodeVarying.js +28 -0
  220. package/src/nodes/core/OutputStructNode.js +33 -2
  221. package/src/nodes/core/ParameterNode.js +28 -0
  222. package/src/nodes/core/PropertyNode.js +232 -0
  223. package/src/nodes/core/StackNode.js +78 -0
  224. package/src/nodes/core/StructTypeNode.js +39 -1
  225. package/src/nodes/core/TempNode.js +30 -4
  226. package/src/nodes/core/UniformGroupNode.js +82 -7
  227. package/src/nodes/core/UniformNode.js +66 -0
  228. package/src/nodes/core/VarNode.js +52 -0
  229. package/src/nodes/core/VaryingNode.js +83 -2
  230. package/src/nodes/core/constants.js +36 -0
  231. package/src/nodes/display/BumpMapNode.js +37 -0
  232. package/src/nodes/display/ColorAdjustment.js +53 -11
  233. package/src/nodes/display/ColorSpaceFunctions.js +16 -0
  234. package/src/nodes/display/ColorSpaceNode.js +82 -0
  235. package/src/nodes/display/FrontFacingNode.js +29 -0
  236. package/src/nodes/display/NormalMapNode.js +43 -0
  237. package/src/nodes/display/PassNode.js +298 -7
  238. package/src/nodes/display/PosterizeNode.js +33 -0
  239. package/src/nodes/display/RenderOutputNode.js +66 -1
  240. package/src/nodes/display/ScreenNode.js +87 -0
  241. package/src/nodes/display/ToneMappingFunctions.js +58 -10
  242. package/src/nodes/display/ToneMappingNode.js +55 -2
  243. package/src/nodes/display/ToonOutlinePassNode.js +73 -0
  244. package/src/nodes/display/ViewportDepthNode.js +122 -8
  245. package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
  246. package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
  247. package/src/nodes/display/ViewportTextureNode.js +57 -0
  248. package/src/nodes/fog/Fog.js +93 -0
  249. package/src/nodes/functions/BasicLightingModel.js +24 -0
  250. package/src/nodes/functions/PhongLightingModel.js +34 -2
  251. package/src/nodes/functions/PhysicalLightingModel.js +167 -8
  252. package/src/nodes/functions/ShadowMaskModel.js +23 -0
  253. package/src/nodes/functions/ToonLightingModel.js +20 -0
  254. package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
  255. package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
  256. package/src/nodes/geometry/RangeNode.js +54 -2
  257. package/src/nodes/gpgpu/AtomicFunctionNode.js +157 -1
  258. package/src/nodes/gpgpu/BarrierNode.js +47 -0
  259. package/src/nodes/gpgpu/ComputeBuiltinNode.js +126 -0
  260. package/src/nodes/gpgpu/ComputeNode.js +106 -2
  261. package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
  262. package/src/nodes/lighting/AONode.js +18 -0
  263. package/src/nodes/lighting/AmbientLightNode.js +10 -0
  264. package/src/nodes/lighting/AnalyticLightNode.js +97 -2
  265. package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
  266. package/src/nodes/lighting/BasicLightMapNode.js +17 -0
  267. package/src/nodes/lighting/DirectionalLightNode.js +10 -0
  268. package/src/nodes/lighting/EnvironmentNode.js +18 -0
  269. package/src/nodes/lighting/HemisphereLightNode.js +31 -0
  270. package/src/nodes/lighting/IESSpotLightNode.js +11 -0
  271. package/src/nodes/lighting/IrradianceNode.js +17 -0
  272. package/src/nodes/lighting/LightProbeNode.js +20 -0
  273. package/src/nodes/lighting/LightUtils.js +12 -0
  274. package/src/nodes/lighting/LightingContextNode.js +48 -0
  275. package/src/nodes/lighting/LightingNode.js +15 -6
  276. package/src/nodes/lighting/LightsNode.js +132 -1
  277. package/src/nodes/lighting/PointLightNode.js +32 -1
  278. package/src/nodes/lighting/PointShadowNode.js +54 -1
  279. package/src/nodes/lighting/RectAreaLightNode.js +44 -6
  280. package/src/nodes/lighting/ShadowBaseNode.js +93 -0
  281. package/src/nodes/lighting/ShadowNode.js +240 -34
  282. package/src/nodes/lighting/SpotLightNode.js +43 -0
  283. package/src/nodes/math/ConditionalNode.js +70 -3
  284. package/src/nodes/math/Hash.js +9 -0
  285. package/src/nodes/math/MathNode.js +614 -11
  286. package/src/nodes/math/MathUtils.js +45 -1
  287. package/src/nodes/math/OperatorNode.js +233 -0
  288. package/src/nodes/math/TriNoise3D.js +18 -7
  289. package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
  290. package/src/nodes/parsers/GLSLNodeParser.js +11 -0
  291. package/src/nodes/pmrem/PMREMNode.js +133 -0
  292. package/src/nodes/pmrem/PMREMUtils.js +1 -1
  293. package/src/nodes/procedural/Checker.js +9 -0
  294. package/src/nodes/tsl/TSLBase.js +2 -2
  295. package/src/nodes/utils/ArrayElementNode.js +38 -2
  296. package/src/nodes/utils/ConvertNode.js +31 -0
  297. package/src/nodes/utils/CubeMapNode.js +78 -0
  298. package/src/nodes/utils/Discard.js +16 -0
  299. package/src/nodes/utils/EquirectUVNode.js +31 -1
  300. package/src/nodes/utils/FlipNode.js +38 -0
  301. package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
  302. package/src/nodes/utils/JoinNode.js +25 -0
  303. package/src/nodes/utils/LoopNode.js +74 -1
  304. package/src/nodes/utils/MatcapUVNode.js +17 -0
  305. package/src/nodes/utils/MaxMipLevelNode.js +49 -0
  306. package/src/nodes/utils/Oscillators.js +33 -0
  307. package/src/nodes/utils/Packing.js +17 -0
  308. package/src/nodes/utils/PostProcessingUtils.js +28 -23
  309. package/src/nodes/utils/RTTNode.js +123 -2
  310. package/src/nodes/utils/ReflectorNode.js +174 -4
  311. package/src/nodes/utils/RemapNode.js +79 -0
  312. package/src/nodes/utils/RotateNode.js +41 -0
  313. package/src/nodes/utils/SetNode.js +44 -1
  314. package/src/nodes/utils/SplitNode.js +55 -3
  315. package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
  316. package/src/nodes/utils/SpriteUtils.js +17 -0
  317. package/src/nodes/utils/StorageArrayElementNode.js +40 -0
  318. package/src/nodes/utils/Timer.js +19 -0
  319. package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
  320. package/src/nodes/utils/UVUtils.js +20 -0
  321. package/src/nodes/utils/ViewportUtils.js +13 -0
  322. package/src/objects/BatchedMesh.js +1 -2
  323. package/src/objects/ClippingGroup.js +49 -0
  324. package/src/renderers/WebGLRenderer.js +23 -4
  325. package/src/renderers/common/Animation.js +63 -0
  326. package/src/renderers/common/Attributes.js +36 -0
  327. package/src/renderers/common/Backend.js +467 -52
  328. package/src/renderers/common/Background.js +34 -1
  329. package/src/renderers/common/BindGroup.js +43 -0
  330. package/src/renderers/common/Binding.js +35 -0
  331. package/src/renderers/common/Bindings.js +93 -1
  332. package/src/renderers/common/Buffer.js +49 -0
  333. package/src/renderers/common/BufferUtils.js +27 -0
  334. package/src/renderers/common/BundleGroup.js +57 -0
  335. package/src/renderers/common/ChainMap.js +38 -1
  336. package/src/renderers/common/ClippingContext.js +107 -14
  337. package/src/renderers/common/Color4.js +36 -0
  338. package/src/renderers/common/ComputePipeline.js +24 -0
  339. package/src/renderers/common/CubeRenderTarget.js +13 -0
  340. package/src/renderers/common/DataMap.js +37 -1
  341. package/src/renderers/common/Geometries.js +98 -0
  342. package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
  343. package/src/renderers/common/Info.js +87 -0
  344. package/src/renderers/common/Lighting.js +26 -0
  345. package/src/renderers/common/Pipeline.js +22 -0
  346. package/src/renderers/common/Pipelines.js +148 -5
  347. package/src/renderers/common/PostProcessing.js +75 -3
  348. package/src/renderers/common/ProgrammableStage.js +60 -2
  349. package/src/renderers/common/QuadMesh.js +54 -5
  350. package/src/renderers/common/RenderBundle.js +14 -8
  351. package/src/renderers/common/RenderBundles.js +33 -10
  352. package/src/renderers/common/RenderContext.js +169 -4
  353. package/src/renderers/common/RenderContexts.js +42 -2
  354. package/src/renderers/common/RenderList.js +178 -0
  355. package/src/renderers/common/RenderLists.js +31 -0
  356. package/src/renderers/common/RenderObject.js +328 -4
  357. package/src/renderers/common/RenderObjects.js +101 -7
  358. package/src/renderers/common/RenderPipeline.js +24 -0
  359. package/src/renderers/common/Renderer.js +1096 -31
  360. package/src/renderers/common/RendererUtils.js +193 -0
  361. package/src/renderers/common/SampledTexture.js +121 -0
  362. package/src/renderers/common/Sampler.js +30 -0
  363. package/src/renderers/common/StorageBuffer.js +24 -0
  364. package/src/renderers/common/StorageBufferAttribute.js +31 -2
  365. package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
  366. package/src/renderers/common/StorageTexture.js +38 -0
  367. package/src/renderers/common/Textures.js +83 -0
  368. package/src/renderers/common/Uniform.js +188 -2
  369. package/src/renderers/common/UniformBuffer.js +19 -0
  370. package/src/renderers/common/UniformsGroup.js +139 -2
  371. package/src/renderers/common/extras/PMREMGenerator.js +24 -3
  372. package/src/renderers/common/nodes/NodeBuilderState.js +95 -1
  373. package/src/renderers/common/nodes/NodeLibrary.js +89 -0
  374. package/src/renderers/common/nodes/NodeSampledTexture.js +91 -2
  375. package/src/renderers/common/nodes/NodeSampler.js +28 -0
  376. package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
  377. package/src/renderers/common/nodes/NodeUniform.js +189 -0
  378. package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
  379. package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
  380. package/src/renderers/common/nodes/Nodes.js +327 -60
  381. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
  382. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
  383. package/src/renderers/webgl-fallback/WebGLBackend.js +547 -29
  384. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +0 -1
  385. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +1 -1
  386. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +1 -1
  387. package/src/renderers/webgpu/WebGPUBackend.js +480 -49
  388. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +34 -0
  389. package/src/renderers/webgpu/WebGPURenderer.js +35 -0
  390. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
  391. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
  392. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +59 -11
  393. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
  394. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  395. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +10 -8
  396. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +9 -1
  397. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +5 -9
  398. package/src/renderers/webgpu/utils/WebGPUUtils.js +30 -0
  399. package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
  400. package/src/renderers/webxr/WebXRManager.js +7 -1
  401. package/src/textures/Data3DTexture.js +2 -2
  402. package/src/textures/Texture.js +4 -0
  403. package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
  404. package/examples/jsm/animation/MMDPhysics.js +0 -1408
  405. package/examples/jsm/exporters/MMDExporter.js +0 -223
  406. package/examples/jsm/libs/mmdparser.module.js +0 -11530
  407. package/examples/jsm/loaders/MMDLoader.js +0 -2298
  408. package/examples/jsm/shaders/MMDToonShader.js +0 -134
  409. package/src/nodes/core/UniformGroup.js +0 -13
  410. package/src/nodes/fog/FogExp2Node.js +0 -35
  411. package/src/nodes/fog/FogNode.js +0 -50
  412. package/src/nodes/fog/FogRangeNode.js +0 -36
  413. package/src/renderers/common/PostProcessingUtils.js +0 -86
@@ -1,16 +1,49 @@
1
- let id = 0;
1
+ let _id = 0;
2
2
 
3
+ /**
4
+ * This utility class is used in {@link NodeBuilder} as an internal
5
+ * cache data structure for node data.
6
+ */
3
7
  class NodeCache {
4
8
 
9
+ /**
10
+ * Constructs a new node cache.
11
+ *
12
+ * @param {NodeCache?} parent - A reference to a parent cache.
13
+ */
5
14
  constructor( parent = null ) {
6
15
 
7
- this.id = id ++;
16
+ /**
17
+ * The id of the cache.
18
+ *
19
+ * @type {Number}
20
+ * @readonly
21
+ */
22
+ this.id = _id ++;
23
+
24
+ /**
25
+ * A weak map for managing node data.
26
+ *
27
+ * @type {WeakMap<Node, Object>}
28
+ */
8
29
  this.nodesData = new WeakMap();
9
30
 
31
+ /**
32
+ * Reference to a parent node cache.
33
+ *
34
+ * @type {NodeCache?}
35
+ * @default null
36
+ */
10
37
  this.parent = parent;
11
38
 
12
39
  }
13
40
 
41
+ /**
42
+ * Returns the data for the given node.
43
+ *
44
+ * @param {Node} node - The node.
45
+ * @return {Object?} The data for the node.
46
+ */
14
47
  getData( node ) {
15
48
 
16
49
  let data = this.nodesData.get( node );
@@ -25,6 +58,12 @@ class NodeCache {
25
58
 
26
59
  }
27
60
 
61
+ /**
62
+ * Sets the data for a given node.
63
+ *
64
+ * @param {Node} node - The node.
65
+ * @param {Object} data - The data that should be cached.
66
+ */
28
67
  setData( node, data ) {
29
68
 
30
69
  this.nodesData.set( node, data );
@@ -1,9 +1,40 @@
1
+ /**
2
+ * {@link NodeBuilder} is going to create instances of this class during the build process
3
+ * of nodes. They represent user-defined, native shader code portions that are going to be
4
+ * injected by the builder. A dictionary of node codes is maintained in {@link NodeBuilder#codes}
5
+ * for this purpose.
6
+ */
1
7
  class NodeCode {
2
8
 
9
+ /**
10
+ * Constructs a new code node.
11
+ *
12
+ * @param {String} name - The name of the code.
13
+ * @param {String} type - The node type.
14
+ * @param {String} [code=''] - The native shader code.
15
+ */
3
16
  constructor( name, type, code = '' ) {
4
17
 
18
+ /**
19
+ * The name of the code.
20
+ *
21
+ * @type {String}
22
+ */
5
23
  this.name = name;
24
+
25
+ /**
26
+ * The node type.
27
+ *
28
+ * @type {String}
29
+ */
6
30
  this.type = type;
31
+
32
+ /**
33
+ * The native shader code.
34
+ *
35
+ * @type {String}
36
+ * @default ''
37
+ */
7
38
  this.code = code;
8
39
 
9
40
  Object.defineProperty( this, 'isNodeCode', { value: true } );
@@ -1,29 +1,122 @@
1
1
  import { NodeUpdateType } from './constants.js';
2
2
 
3
+ /**
4
+ * Management class for updating nodes. The module tracks metrics like
5
+ * the elapsed time, delta time, the render and frame ID to correctly
6
+ * call the node update methods {@link Node#updateBefore}, {@link Node#update}
7
+ * and {@link Node#updateAfter} depending on the node's configuration.
8
+ */
3
9
  class NodeFrame {
4
10
 
11
+ /**
12
+ * Constructs a new node fame.
13
+ */
5
14
  constructor() {
6
15
 
16
+ /**
17
+ * The elapsed time in seconds.
18
+ *
19
+ * @type {Number}
20
+ * @default 0
21
+ */
7
22
  this.time = 0;
23
+
24
+ /**
25
+ * The delta time in seconds.
26
+ *
27
+ * @type {Number}
28
+ * @default 0
29
+ */
8
30
  this.deltaTime = 0;
9
31
 
32
+ /**
33
+ * The frame ID.
34
+ *
35
+ * @type {Number}
36
+ * @default 0
37
+ */
10
38
  this.frameId = 0;
11
- this.renderId = 0;
12
39
 
13
- this.startTime = null;
40
+ /**
41
+ * The render ID.
42
+ *
43
+ * @type {Number}
44
+ * @default 0
45
+ */
46
+ this.renderId = 0;
14
47
 
48
+ /**
49
+ * Used to control the {@link Node#update} call.
50
+ *
51
+ * @type {WeakMap<Node, Object>}
52
+ */
15
53
  this.updateMap = new WeakMap();
54
+
55
+ /**
56
+ * Used to control the {@link Node#updateBefore} call.
57
+ *
58
+ * @type {WeakMap<Node, Object>}
59
+ */
16
60
  this.updateBeforeMap = new WeakMap();
61
+
62
+ /**
63
+ * Used to control the {@link Node#updateAfter} call.
64
+ *
65
+ * @type {WeakMap<Node, Object>}
66
+ */
17
67
  this.updateAfterMap = new WeakMap();
18
68
 
69
+ /**
70
+ * A reference to the current renderer.
71
+ *
72
+ * @type {Renderer?}
73
+ * @default null
74
+ */
19
75
  this.renderer = null;
76
+
77
+ /**
78
+ * A reference to the current material.
79
+ *
80
+ * @type {Material?}
81
+ * @default null
82
+ */
20
83
  this.material = null;
84
+
85
+ /**
86
+ * A reference to the current camera.
87
+ *
88
+ * @type {Camera?}
89
+ * @default null
90
+ */
21
91
  this.camera = null;
92
+
93
+ /**
94
+ * A reference to the current 3D object.
95
+ *
96
+ * @type {Object3D?}
97
+ * @default null
98
+ */
22
99
  this.object = null;
100
+
101
+ /**
102
+ * A reference to the current scene.
103
+ *
104
+ * @type {Scene?}
105
+ * @default null
106
+ */
23
107
  this.scene = null;
24
108
 
25
109
  }
26
110
 
111
+ /**
112
+ * Returns a dictionary for a given node and update map which
113
+ * is used to correctly call node update methods per frame or render.
114
+ *
115
+ * @private
116
+ * @param {WeakMap<Node, Object>} referenceMap - The reference weak map.
117
+ * @param {Node} nodeRef - The reference to the current node.
118
+ * @return {Object<String,WeakMap>} The dictionary.
119
+ */
27
120
  _getMaps( referenceMap, nodeRef ) {
28
121
 
29
122
  let maps = referenceMap.get( nodeRef );
@@ -43,6 +136,14 @@ class NodeFrame {
43
136
 
44
137
  }
45
138
 
139
+ /**
140
+ * This method executes the {@link Node#updateBefore} for the given node.
141
+ * It makes sure {@link Node#updateBeforeType} is honored meaning the update
142
+ * is only executed once per frame, render or object depending on the update
143
+ * type.
144
+ *
145
+ * @param {Node} node - The node that should be updated.
146
+ */
46
147
  updateBeforeNode( node ) {
47
148
 
48
149
  const updateType = node.getUpdateBeforeType();
@@ -84,6 +185,14 @@ class NodeFrame {
84
185
 
85
186
  }
86
187
 
188
+ /**
189
+ * This method executes the {@link Node#updateAfter} for the given node.
190
+ * It makes sure {@link Node#updateAfterType} is honored meaning the update
191
+ * is only executed once per frame, render or object depending on the update
192
+ * type.
193
+ *
194
+ * @param {Node} node - The node that should be updated.
195
+ */
87
196
  updateAfterNode( node ) {
88
197
 
89
198
  const updateType = node.getUpdateAfterType();
@@ -125,6 +234,14 @@ class NodeFrame {
125
234
 
126
235
  }
127
236
 
237
+ /**
238
+ * This method executes the {@link Node#update} for the given node.
239
+ * It makes sure {@link Node#updateType} is honored meaning the update
240
+ * is only executed once per frame, render or object depending on the update
241
+ * type.
242
+ *
243
+ * @param {Node} node - The node that should be updated.
244
+ */
128
245
  updateNode( node ) {
129
246
 
130
247
  const updateType = node.getUpdateType();
@@ -166,6 +283,10 @@ class NodeFrame {
166
283
 
167
284
  }
168
285
 
286
+ /**
287
+ * Updates the internal state of the node frame. This method is
288
+ * called by the renderer in its internal animation loop.
289
+ */
169
290
  update() {
170
291
 
171
292
  this.frameId ++;
@@ -1,14 +1,60 @@
1
+ /**
2
+ * Base class for node functions. A derived module must be implemented
3
+ * for each supported native shader language. Similar to other `Node*` modules,
4
+ * this class is only relevant during the building process and not used
5
+ * in user-level code.
6
+ */
1
7
  class NodeFunction {
2
8
 
9
+ /**
10
+ * Constructs a new node function.
11
+ *
12
+ * @param {String} type - The node type. This type is the return type of the node function.
13
+ * @param {Array<NodeFunctionInput>} inputs - The function's inputs.
14
+ * @param {String} [name=''] - The function's name.
15
+ * @param {String} [precision=''] - The precision qualifier.
16
+ */
3
17
  constructor( type, inputs, name = '', precision = '' ) {
4
18
 
19
+ /**
20
+ * The node type. This type is the return type of the node function.
21
+ *
22
+ * @type {String}
23
+ */
5
24
  this.type = type;
25
+
26
+ /**
27
+ * The function's inputs.
28
+ *
29
+ * @type {Array<NodeFunctionInput>}
30
+ */
6
31
  this.inputs = inputs;
32
+
33
+ /**
34
+ * The name of the uniform.
35
+ *
36
+ * @type {String}
37
+ * @default ''
38
+ */
7
39
  this.name = name;
40
+
41
+ /**
42
+ * The precision qualifier.
43
+ *
44
+ * @type {String}
45
+ * @default ''
46
+ */
8
47
  this.precision = precision;
9
48
 
10
49
  }
11
50
 
51
+ /**
52
+ * This method returns the native code of the node function.
53
+ *
54
+ * @abstract
55
+ * @param {String} name - The function's name.
56
+ * @return {String} A shader code.
57
+ */
12
58
  getCode( /*name = this.name*/ ) {
13
59
 
14
60
  console.warn( 'Abstract function.' );
@@ -1,11 +1,55 @@
1
+ /**
2
+ * Describes the input of a {@link NodeFunction}.
3
+ */
1
4
  class NodeFunctionInput {
2
5
 
6
+ /**
7
+ * Constructs a new node function input.
8
+ *
9
+ * @param {String} type - The input type.
10
+ * @param {String} name - The input name.
11
+ * @param {Number?} [count=null] - If the input is an Array, count will be the length.
12
+ * @param {('in'|'out'|'inout')} [qualifier=''] - The parameter qualifier (only relevant for GLSL).
13
+ * @param {Boolean} [isConst=false] - Whether the input uses a const qualifier or not (only relevant for GLSL).
14
+ */
3
15
  constructor( type, name, count = null, qualifier = '', isConst = false ) {
4
16
 
17
+ /**
18
+ * The input type.
19
+ *
20
+ * @type {String}
21
+ */
5
22
  this.type = type;
23
+
24
+ /**
25
+ * The input name.
26
+ *
27
+ * @type {String}
28
+ */
6
29
  this.name = name;
30
+
31
+ /**
32
+ * If the input is an Array, count will be the length.
33
+ *
34
+ * @type {Number?}
35
+ * @default null
36
+ */
7
37
  this.count = count;
38
+
39
+ /**
40
+ *The parameter qualifier (only relevant for GLSL).
41
+ *
42
+ * @type {('in'|'out'|'inout')}
43
+ * @default ''
44
+ */
8
45
  this.qualifier = qualifier;
46
+
47
+ /**
48
+ * Whether the input uses a const qualifier or not (only relevant for GLSL).
49
+ *
50
+ * @type {Boolean}
51
+ * @default false
52
+ */
9
53
  this.isConst = isConst;
10
54
 
11
55
  }
@@ -1,5 +1,16 @@
1
+ /**
2
+ * Base class for node parsers. A derived parser must be implemented
3
+ * for each supported native shader language.
4
+ */
1
5
  class NodeParser {
2
6
 
7
+ /**
8
+ * The method parses the given native code an returns a node function.
9
+ *
10
+ * @abstract
11
+ * @param {String} source - The native shader code.
12
+ * @return {NodeFunction} A node function.
13
+ */
3
14
  parseFunction( /*source*/ ) {
4
15
 
5
16
  console.warn( 'Abstract function.' );
@@ -1,15 +1,57 @@
1
+ /**
2
+ * {@link NodeBuilder} is going to create instances of this class during the build process
3
+ * of nodes. They represent the final shader uniforms that are going to be generated
4
+ * by the builder. A dictionary of node uniforms is maintained in {@link NodeBuilder#uniforms}
5
+ * for this purpose.
6
+ */
1
7
  class NodeUniform {
2
8
 
9
+ /**
10
+ * Constructs a new node uniform.
11
+ *
12
+ * @param {String} name - The name of the uniform.
13
+ * @param {String} type - The type of the uniform.
14
+ * @param {UniformNode} node - An reference to the node.
15
+ */
3
16
  constructor( name, type, node ) {
4
17
 
18
+ /**
19
+ * This flag can be used for type testing.
20
+ *
21
+ * @type {Boolean}
22
+ * @readonly
23
+ * @default true
24
+ */
5
25
  this.isNodeUniform = true;
6
26
 
27
+ /**
28
+ * The name of the uniform.
29
+ *
30
+ * @type {String}
31
+ */
7
32
  this.name = name;
33
+
34
+ /**
35
+ * The type of the uniform.
36
+ *
37
+ * @type {String}
38
+ */
8
39
  this.type = type;
40
+
41
+ /**
42
+ * An reference to the node.
43
+ *
44
+ * @type {UniformNode}
45
+ */
9
46
  this.node = node.getSelf();
10
47
 
11
48
  }
12
49
 
50
+ /**
51
+ * The value of the uniform node.
52
+ *
53
+ * @type {Any}
54
+ */
13
55
  get value() {
14
56
 
15
57
  return this.node.value;
@@ -22,12 +64,22 @@ class NodeUniform {
22
64
 
23
65
  }
24
66
 
67
+ /**
68
+ * The id of the uniform node.
69
+ *
70
+ * @type {Number}
71
+ */
25
72
  get id() {
26
73
 
27
74
  return this.node.id;
28
75
 
29
76
  }
30
77
 
78
+ /**
79
+ * The uniform node's group.
80
+ *
81
+ * @type {UniformGroupNode}
82
+ */
31
83
  get groupNode() {
32
84
 
33
85
  return this.node.groupNode;
@@ -5,6 +5,8 @@ import { Vector2 } from '../../math/Vector2.js';
5
5
  import { Vector3 } from '../../math/Vector3.js';
6
6
  import { Vector4 } from '../../math/Vector4.js';
7
7
 
8
+ /** @module NodeUtils **/
9
+
8
10
  // cyrb53 (c) 2018 bryc (github.com/bryc). License: Public domain. Attribution appreciated.
9
11
  // A fast and simple 64-bit (or 53-bit) string hash function with decent collision resistance.
10
12
  // Largely inspired by MurmurHash2/3, but with a focus on speed/simplicity.
@@ -45,10 +47,41 @@ function cyrb53( value, seed = 0 ) {
45
47
 
46
48
  }
47
49
 
50
+ /**
51
+ * Computes a hash for the given string.
52
+ *
53
+ * @method
54
+ * @param {String} str - The string to be hashed.
55
+ * @return {Number} The hash.
56
+ */
48
57
  export const hashString = ( str ) => cyrb53( str );
58
+
59
+ /**
60
+ * Computes a hash for the given array.
61
+ *
62
+ * @method
63
+ * @param {Array<Number>} array - The array to be hashed.
64
+ * @return {Number} The hash.
65
+ */
49
66
  export const hashArray = ( array ) => cyrb53( array );
67
+
68
+ /**
69
+ * Computes a hash for the given list of parameters.
70
+ *
71
+ * @method
72
+ * @param {...Number} params - A list of parameters.
73
+ * @return {Number} The hash.
74
+ */
50
75
  export const hash = ( ...params ) => cyrb53( params );
51
76
 
77
+ /**
78
+ * Computes a cache key for the given node.
79
+ *
80
+ * @method
81
+ * @param {Object} object - The object to be hashed.
82
+ * @param {Boolean} [force=false] - Whether to force a cache key computation or not.
83
+ * @return {Number} The hash.
84
+ */
52
85
  export function getCacheKey( object, force = false ) {
53
86
 
54
87
  const values = [];
@@ -70,6 +103,15 @@ export function getCacheKey( object, force = false ) {
70
103
 
71
104
  }
72
105
 
106
+ /**
107
+ * This generator function can be used to iterate over the node children
108
+ * of the given object.
109
+ *
110
+ * @generator
111
+ * @param {Object} node - The object to be hashed.
112
+ * @param {Boolean} [toJSON=false] - Whether to return JSON or not.
113
+ * @yields {Object} A result node holding the property, index (if available) and the child node.
114
+ */
73
115
  export function* getNodeChildren( node, toJSON = false ) {
74
116
 
75
117
  for ( const property in node ) {
@@ -126,12 +168,61 @@ const typeFromLength = /*@__PURE__*/ new Map( [
126
168
  [ 16, 'mat4' ]
127
169
  ] );
128
170
 
171
+ const dataFromObject = /*@__PURE__*/ new WeakMap();
172
+
173
+ /**
174
+ * Returns the data type for the given the length.
175
+ *
176
+ * @method
177
+ * @param {Number} length - The length.
178
+ * @return {String} The data type.
179
+ */
129
180
  export function getTypeFromLength( length ) {
130
181
 
131
182
  return typeFromLength.get( length );
132
183
 
133
184
  }
134
185
 
186
+ /**
187
+ * Returns the typed array for the given data type.
188
+ *
189
+ * @method
190
+ * @param {String} type - The data type.
191
+ * @return {TypedArray} The typed array.
192
+ */
193
+ export function getTypedArrayFromType( type ) {
194
+
195
+ // Handle component type for vectors and matrices
196
+ if ( /[iu]?vec\d/.test( type ) ) {
197
+
198
+ // Handle int vectors
199
+ if ( type.startsWith( 'ivec' ) ) return Int32Array;
200
+ // Handle uint vectors
201
+ if ( type.startsWith( 'uvec' ) ) return Uint32Array;
202
+ // Default to float vectors
203
+ return Float32Array;
204
+
205
+ }
206
+
207
+ // Handle matrices (always float)
208
+ if ( /mat\d/.test( type ) ) return Float32Array;
209
+
210
+ // Basic types
211
+ if ( /float/.test( type ) ) return Float32Array;
212
+ if ( /uint/.test( type ) ) return Uint32Array;
213
+ if ( /int/.test( type ) ) return Int32Array;
214
+
215
+ throw new Error( `THREE.NodeUtils: Unsupported type: ${type}` );
216
+
217
+ }
218
+
219
+ /**
220
+ * Returns the length for the given data type.
221
+ *
222
+ * @method
223
+ * @param {String} type - The data type.
224
+ * @return {Number} The length.
225
+ */
135
226
  export function getLengthFromType( type ) {
136
227
 
137
228
  if ( /float|int|uint/.test( type ) ) return 1;
@@ -145,6 +236,13 @@ export function getLengthFromType( type ) {
145
236
 
146
237
  }
147
238
 
239
+ /**
240
+ * Returns the data type for the given value.
241
+ *
242
+ * @method
243
+ * @param {Any} value - The value.
244
+ * @return {String?} The data type.
245
+ */
148
246
  export function getValueType( value ) {
149
247
 
150
248
  if ( value === undefined || value === null ) return null;
@@ -205,6 +303,14 @@ export function getValueType( value ) {
205
303
 
206
304
  }
207
305
 
306
+ /**
307
+ * Returns the value/object for the given data type and parameters.
308
+ *
309
+ * @method
310
+ * @param {String} type - The given type.
311
+ * @param {...Any} params - A parameter list.
312
+ * @return {Any} The value/object.
313
+ */
208
314
  export function getValueFromType( type, ...params ) {
209
315
 
210
316
  const last4 = type ? type.slice( - 4 ) : undefined;
@@ -263,6 +369,34 @@ export function getValueFromType( type, ...params ) {
263
369
 
264
370
  }
265
371
 
372
+ /**
373
+ * Gets the object data that can be shared between different rendering steps.
374
+ *
375
+ * @param {Object} object - The object to get the data for.
376
+ * @return {Object} The object data.
377
+ */
378
+ export function getDataFromObject( object ) {
379
+
380
+ let data = dataFromObject.get( object );
381
+
382
+ if ( data === undefined ) {
383
+
384
+ data = {};
385
+ dataFromObject.set( object, data );
386
+
387
+ }
388
+
389
+ return data;
390
+
391
+ }
392
+
393
+ /**
394
+ * Converts the given array buffer to a Base64 string.
395
+ *
396
+ * @method
397
+ * @param {ArrayBuffer} arrayBuffer - The array buffer.
398
+ * @return {String} The Base64 string.
399
+ */
266
400
  export function arrayBufferToBase64( arrayBuffer ) {
267
401
 
268
402
  let chars = '';
@@ -279,6 +413,13 @@ export function arrayBufferToBase64( arrayBuffer ) {
279
413
 
280
414
  }
281
415
 
416
+ /**
417
+ * Converts the given Base64 string to an array buffer.
418
+ *
419
+ * @method
420
+ * @param {String} base64 - The Base64 string.
421
+ * @return {ArrayBuffer} The array buffer.
422
+ */
282
423
  export function base64ToArrayBuffer( base64 ) {
283
424
 
284
425
  return Uint8Array.from( atob( base64 ), c => c.charCodeAt( 0 ) ).buffer;