super-three 0.181.0 → 0.184.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 (539) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +13152 -11354
  4. package/build/three.core.js +12319 -11539
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +1808 -781
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +27 -13
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +10523 -6263
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +10484 -6262
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +11 -3
  15. package/examples/jsm/animation/CCDIKSolver.js +7 -3
  16. package/examples/jsm/controls/ArcballControls.js +7 -4
  17. package/examples/jsm/controls/DragControls.js +2 -2
  18. package/examples/jsm/controls/FirstPersonControls.js +58 -54
  19. package/examples/jsm/controls/FlyControls.js +4 -0
  20. package/examples/jsm/controls/MapControls.js +55 -1
  21. package/examples/jsm/controls/OrbitControls.js +111 -8
  22. package/examples/jsm/controls/TrackballControls.js +8 -8
  23. package/examples/jsm/controls/TransformControls.js +34 -2
  24. package/examples/jsm/csm/CSM.js +2 -1
  25. package/examples/jsm/csm/CSMShadowNode.js +6 -2
  26. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  27. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  28. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  29. package/examples/jsm/exporters/EXRExporter.js +1 -1
  30. package/examples/jsm/exporters/GLTFExporter.js +152 -9
  31. package/examples/jsm/exporters/USDZExporter.js +22 -3
  32. package/examples/jsm/geometries/DecalGeometry.js +1 -1
  33. package/examples/jsm/geometries/TextGeometry.js +18 -0
  34. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  35. package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
  36. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  37. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  38. package/examples/jsm/helpers/ViewHelper.js +67 -8
  39. package/examples/jsm/inspector/Extension.js +13 -0
  40. package/examples/jsm/inspector/Inspector.js +203 -88
  41. package/examples/jsm/inspector/RendererInspector.js +14 -4
  42. package/examples/jsm/inspector/extensions/extensions.json +6 -0
  43. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
  44. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
  45. package/examples/jsm/inspector/tabs/Console.js +41 -7
  46. package/examples/jsm/inspector/tabs/Memory.js +128 -0
  47. package/examples/jsm/inspector/tabs/Parameters.js +51 -3
  48. package/examples/jsm/inspector/tabs/Performance.js +4 -4
  49. package/examples/jsm/inspector/tabs/Settings.js +264 -0
  50. package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
  51. package/examples/jsm/inspector/tabs/Viewer.js +107 -5
  52. package/examples/jsm/inspector/ui/Graph.js +2 -2
  53. package/examples/jsm/inspector/ui/List.js +1 -1
  54. package/examples/jsm/inspector/ui/Profiler.js +1936 -34
  55. package/examples/jsm/inspector/ui/Style.js +1044 -31
  56. package/examples/jsm/inspector/ui/Tab.js +222 -3
  57. package/examples/jsm/inspector/ui/Values.js +55 -2
  58. package/examples/jsm/inspector/ui/utils.js +13 -0
  59. package/examples/jsm/interaction/InteractionManager.js +226 -0
  60. package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
  61. package/examples/jsm/lighting/DynamicLighting.js +82 -0
  62. package/examples/jsm/lighting/LightProbeGrid.js +651 -0
  63. package/examples/jsm/lines/LineMaterial.js +7 -1
  64. package/examples/jsm/loaders/3DMLoader.js +5 -4
  65. package/examples/jsm/loaders/3MFLoader.js +2 -2
  66. package/examples/jsm/loaders/AMFLoader.js +2 -2
  67. package/examples/jsm/loaders/ColladaLoader.js +24 -4026
  68. package/examples/jsm/loaders/DRACOLoader.js +5 -5
  69. package/examples/jsm/loaders/EXRLoader.js +687 -48
  70. package/examples/jsm/loaders/FBXLoader.js +235 -37
  71. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  72. package/examples/jsm/loaders/GLTFLoader.js +146 -178
  73. package/examples/jsm/loaders/HDRLoader.js +1 -2
  74. package/examples/jsm/loaders/KMZLoader.js +5 -5
  75. package/examples/jsm/loaders/KTX2Loader.js +27 -5
  76. package/examples/jsm/loaders/LDrawLoader.js +41 -50
  77. package/examples/jsm/loaders/LWOLoader.js +7 -39
  78. package/examples/jsm/loaders/NRRDLoader.js +2 -2
  79. package/examples/jsm/loaders/PCDLoader.js +4 -2
  80. package/examples/jsm/loaders/SVGLoader.js +2 -2
  81. package/examples/jsm/loaders/TDSLoader.js +0 -2
  82. package/examples/jsm/loaders/TGALoader.js +0 -2
  83. package/examples/jsm/loaders/USDLoader.js +100 -40
  84. package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
  85. package/examples/jsm/loaders/VOXLoader.js +660 -117
  86. package/examples/jsm/loaders/VRMLLoader.js +79 -2
  87. package/examples/jsm/loaders/VTKLoader.js +42 -25
  88. package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
  89. package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
  90. package/examples/jsm/loaders/usd/USDAParser.js +450 -363
  91. package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
  92. package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
  93. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  94. package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
  95. package/examples/jsm/math/Octree.js +131 -1
  96. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  97. package/examples/jsm/misc/RollerCoaster.js +42 -4
  98. package/examples/jsm/misc/Volume.js +0 -1
  99. package/examples/jsm/misc/VolumeSlice.js +0 -1
  100. package/examples/jsm/modifiers/TessellateModifier.js +1 -1
  101. package/examples/jsm/objects/LensflareMesh.js +1 -1
  102. package/examples/jsm/objects/Reflector.js +73 -25
  103. package/examples/jsm/objects/Sky.js +90 -6
  104. package/examples/jsm/objects/SkyMesh.js +150 -16
  105. package/examples/jsm/objects/Water.js +4 -3
  106. package/examples/jsm/objects/Water2.js +5 -3
  107. package/examples/jsm/objects/WaterMesh.js +5 -7
  108. package/examples/jsm/physics/AmmoPhysics.js +12 -7
  109. package/examples/jsm/physics/JoltPhysics.js +10 -6
  110. package/examples/jsm/physics/RapierPhysics.js +9 -5
  111. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  112. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  113. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  114. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  115. package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
  116. package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
  117. package/examples/jsm/renderers/Projector.js +246 -28
  118. package/examples/jsm/renderers/SVGRenderer.js +174 -60
  119. package/examples/jsm/shaders/GTAOShader.js +19 -6
  120. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  121. package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
  122. package/examples/jsm/shaders/SAOShader.js +17 -4
  123. package/examples/jsm/shaders/SSAOShader.js +11 -1
  124. package/examples/jsm/shaders/SSRShader.js +6 -5
  125. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
  126. package/examples/jsm/shaders/VignetteShader.js +1 -1
  127. package/examples/jsm/transpiler/AST.js +44 -0
  128. package/examples/jsm/transpiler/GLSLDecoder.js +63 -6
  129. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  130. package/examples/jsm/transpiler/TSLEncoder.js +46 -3
  131. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  132. package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
  133. package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
  134. package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
  135. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  136. package/examples/jsm/tsl/display/AnamorphicNode.js +12 -1
  137. package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
  138. package/examples/jsm/tsl/display/BloomNode.js +16 -6
  139. package/examples/jsm/tsl/display/CRT.js +150 -0
  140. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
  141. package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
  142. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
  143. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  144. package/examples/jsm/tsl/display/FSR1Node.js +477 -0
  145. package/examples/jsm/tsl/display/FXAANode.js +2 -2
  146. package/examples/jsm/tsl/display/GTAONode.js +6 -4
  147. package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
  148. package/examples/jsm/tsl/display/GodraysNode.js +615 -0
  149. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  150. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  151. package/examples/jsm/tsl/display/OutlineNode.js +69 -19
  152. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  153. package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
  154. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  155. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  156. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  157. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  158. package/examples/jsm/tsl/display/SSGINode.js +8 -24
  159. package/examples/jsm/tsl/display/SSRNode.js +8 -8
  160. package/examples/jsm/tsl/display/SSSNode.js +6 -4
  161. package/examples/jsm/tsl/display/Shape.js +29 -0
  162. package/examples/jsm/tsl/display/SharpenNode.js +283 -0
  163. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  164. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  165. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  166. package/examples/jsm/tsl/display/TAAUNode.js +835 -0
  167. package/examples/jsm/tsl/display/TRAANode.js +315 -126
  168. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  169. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  170. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  171. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
  172. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
  173. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
  174. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
  175. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
  176. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
  177. package/examples/jsm/tsl/math/Bayer.js +53 -3
  178. package/examples/jsm/utils/BufferGeometryUtils.js +2 -3
  179. package/examples/jsm/utils/ColorUtils.js +76 -0
  180. package/examples/jsm/utils/LDrawUtils.js +1 -1
  181. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  182. package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
  183. package/examples/jsm/utils/SkeletonUtils.js +14 -8
  184. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  185. package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
  186. package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
  187. package/package.json +24 -30
  188. package/src/Three.Core.js +3 -1
  189. package/src/Three.TSL.js +25 -11
  190. package/src/Three.WebGPU.Nodes.js +5 -0
  191. package/src/Three.WebGPU.js +9 -0
  192. package/src/Three.js +1 -0
  193. package/src/animation/AnimationAction.js +12 -2
  194. package/src/animation/AnimationClip.js +1 -1
  195. package/src/animation/AnimationMixer.js +6 -0
  196. package/src/animation/AnimationUtils.js +1 -12
  197. package/src/animation/KeyframeTrack.js +47 -8
  198. package/src/animation/PropertyMixer.js +4 -4
  199. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  200. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  201. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  202. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  203. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  204. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  205. package/src/audio/Audio.js +1 -1
  206. package/src/audio/AudioContext.js +2 -2
  207. package/src/audio/AudioListener.js +5 -3
  208. package/src/cameras/Camera.js +32 -2
  209. package/src/cameras/CubeCamera.js +20 -0
  210. package/src/constants.js +90 -5
  211. package/src/core/BufferAttribute.js +13 -1
  212. package/src/core/BufferGeometry.js +14 -2
  213. package/src/core/Clock.js +7 -0
  214. package/src/core/Object3D.js +52 -4
  215. package/src/core/Raycaster.js +2 -2
  216. package/src/core/RenderTarget.js +4 -4
  217. package/src/extras/PMREMGenerator.js +7 -18
  218. package/src/extras/TextureUtils.js +5 -1
  219. package/src/extras/curves/CatmullRomCurve3.js +3 -2
  220. package/src/geometries/ExtrudeGeometry.js +2 -2
  221. package/src/geometries/PolyhedronGeometry.js +1 -1
  222. package/src/geometries/TorusGeometry.js +8 -3
  223. package/src/helpers/CameraHelper.js +3 -0
  224. package/src/helpers/DirectionalLightHelper.js +4 -1
  225. package/src/helpers/HemisphereLightHelper.js +3 -0
  226. package/src/helpers/PointLightHelper.js +1 -25
  227. package/src/helpers/SpotLightHelper.js +3 -0
  228. package/src/lights/DirectionalLight.js +13 -0
  229. package/src/lights/HemisphereLight.js +10 -0
  230. package/src/lights/Light.js +1 -11
  231. package/src/lights/LightProbe.js +0 -15
  232. package/src/lights/LightShadow.js +15 -6
  233. package/src/lights/PointLight.js +15 -0
  234. package/src/lights/PointLightShadow.js +0 -86
  235. package/src/lights/SpotLight.js +22 -1
  236. package/src/lights/webgpu/IESSpotLight.js +2 -1
  237. package/src/loaders/AudioLoader.js +11 -1
  238. package/src/loaders/Cache.js +28 -0
  239. package/src/loaders/DataTextureLoader.js +6 -4
  240. package/src/loaders/FileLoader.js +2 -3
  241. package/src/loaders/ImageBitmapLoader.js +12 -9
  242. package/src/loaders/Loader.js +6 -0
  243. package/src/loaders/MaterialLoader.js +3 -2
  244. package/src/loaders/ObjectLoader.js +46 -6
  245. package/src/loaders/nodes/NodeLoader.js +2 -2
  246. package/src/loaders/nodes/NodeObjectLoader.js +18 -0
  247. package/src/materials/Material.js +2 -0
  248. package/src/materials/MeshLambertMaterial.js +9 -0
  249. package/src/materials/MeshPhongMaterial.js +9 -0
  250. package/src/materials/MeshToonMaterial.js +1 -1
  251. package/src/materials/ShaderMaterial.js +20 -1
  252. package/src/materials/nodes/Line2NodeMaterial.js +34 -7
  253. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
  254. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
  255. package/src/materials/nodes/NodeMaterial.js +45 -25
  256. package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -86
  257. package/src/math/Line3.js +6 -5
  258. package/src/math/MathUtils.js +10 -10
  259. package/src/math/Matrix2.js +13 -9
  260. package/src/math/Matrix3.js +13 -9
  261. package/src/math/Matrix4.js +87 -74
  262. package/src/math/Plane.js +4 -3
  263. package/src/math/Quaternion.js +3 -29
  264. package/src/math/Sphere.js +1 -1
  265. package/src/math/Triangle.js +1 -1
  266. package/src/math/Vector2.js +11 -7
  267. package/src/math/Vector3.js +15 -13
  268. package/src/math/Vector4.js +13 -9
  269. package/src/math/interpolants/BezierInterpolant.js +108 -0
  270. package/src/nodes/Nodes.js +86 -68
  271. package/src/nodes/TSL.js +7 -7
  272. package/src/nodes/accessors/Arrays.js +1 -1
  273. package/src/nodes/accessors/BatchNode.js +10 -10
  274. package/src/nodes/accessors/Bitangent.js +5 -5
  275. package/src/nodes/accessors/BufferAttributeNode.js +107 -15
  276. package/src/nodes/accessors/BufferNode.js +29 -2
  277. package/src/nodes/accessors/Camera.js +149 -28
  278. package/src/nodes/accessors/ClippingNode.js +4 -4
  279. package/src/nodes/accessors/CubeTextureNode.js +27 -2
  280. package/src/nodes/accessors/InstanceNode.js +148 -43
  281. package/src/nodes/accessors/MaterialNode.js +9 -1
  282. package/src/nodes/accessors/MaterialProperties.js +2 -5
  283. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  284. package/src/nodes/accessors/ModelNode.js +1 -1
  285. package/src/nodes/accessors/Normal.js +11 -11
  286. package/src/nodes/accessors/Object3DNode.js +1 -1
  287. package/src/nodes/accessors/Position.js +34 -2
  288. package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
  289. package/src/nodes/accessors/ReferenceNode.js +8 -8
  290. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  291. package/src/nodes/accessors/SceneProperties.js +47 -0
  292. package/src/nodes/accessors/SkinningNode.js +27 -26
  293. package/src/nodes/accessors/StorageBufferNode.js +14 -25
  294. package/src/nodes/accessors/StorageTextureNode.js +40 -9
  295. package/src/nodes/accessors/Tangent.js +4 -14
  296. package/src/nodes/accessors/Texture3DNode.js +32 -35
  297. package/src/nodes/accessors/TextureNode.js +67 -23
  298. package/src/nodes/accessors/UniformArrayNode.js +6 -4
  299. package/src/nodes/accessors/UserDataNode.js +1 -2
  300. package/src/nodes/accessors/VertexColorNode.js +1 -2
  301. package/src/nodes/code/FunctionCallNode.js +1 -1
  302. package/src/nodes/code/FunctionNode.js +2 -3
  303. package/src/nodes/core/ArrayNode.js +21 -2
  304. package/src/nodes/core/AssignNode.js +3 -3
  305. package/src/nodes/core/AttributeNode.js +3 -3
  306. package/src/nodes/core/BypassNode.js +1 -1
  307. package/src/nodes/core/ContextNode.js +104 -5
  308. package/src/nodes/core/IndexNode.js +2 -1
  309. package/src/nodes/core/InputNode.js +1 -1
  310. package/src/nodes/core/InspectorNode.js +1 -1
  311. package/src/nodes/core/IsolateNode.js +1 -1
  312. package/src/nodes/core/MRTNode.js +48 -2
  313. package/src/nodes/core/Node.js +112 -15
  314. package/src/nodes/core/NodeBuilder.js +284 -66
  315. package/src/nodes/core/NodeError.js +28 -0
  316. package/src/nodes/core/NodeFrame.js +12 -4
  317. package/src/nodes/core/NodeUtils.js +11 -9
  318. package/src/nodes/core/OutputStructNode.js +12 -10
  319. package/src/nodes/core/ParameterNode.js +4 -4
  320. package/src/nodes/core/PropertyNode.js +19 -3
  321. package/src/nodes/core/StackNode.js +66 -17
  322. package/src/nodes/core/StackTrace.js +139 -0
  323. package/src/nodes/core/StructNode.js +17 -3
  324. package/src/nodes/core/StructTypeNode.js +12 -18
  325. package/src/nodes/core/SubBuildNode.js +2 -2
  326. package/src/nodes/core/UniformGroupNode.js +36 -6
  327. package/src/nodes/core/UniformNode.js +21 -5
  328. package/src/nodes/core/VarNode.js +48 -23
  329. package/src/nodes/core/VaryingNode.js +2 -19
  330. package/src/nodes/display/BlendModes.js +0 -64
  331. package/src/nodes/display/ColorAdjustment.js +17 -0
  332. package/src/nodes/display/ColorSpaceNode.js +3 -3
  333. package/src/nodes/display/NormalMapNode.js +39 -4
  334. package/src/nodes/display/PassNode.js +125 -16
  335. package/src/nodes/display/RenderOutputNode.js +7 -7
  336. package/src/nodes/display/ScreenNode.js +4 -2
  337. package/src/nodes/display/ToneMappingNode.js +1 -1
  338. package/src/nodes/display/ToonOutlinePassNode.js +2 -2
  339. package/src/nodes/display/ViewportDepthNode.js +52 -4
  340. package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
  341. package/src/nodes/display/ViewportTextureNode.js +39 -11
  342. package/src/nodes/fog/Fog.js +18 -35
  343. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
  344. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  345. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  346. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  347. package/src/nodes/functions/PhysicalLightingModel.js +126 -45
  348. package/src/nodes/geometry/RangeNode.js +5 -3
  349. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  350. package/src/nodes/gpgpu/BarrierNode.js +9 -0
  351. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
  352. package/src/nodes/gpgpu/ComputeNode.js +74 -48
  353. package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
  354. package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
  355. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  356. package/src/nodes/lighting/EnvironmentNode.js +28 -3
  357. package/src/nodes/lighting/LightsNode.js +7 -28
  358. package/src/nodes/lighting/PointShadowNode.js +162 -149
  359. package/src/nodes/lighting/ShadowFilterNode.js +53 -65
  360. package/src/nodes/lighting/ShadowNode.js +120 -42
  361. package/src/nodes/math/BitcastNode.js +1 -1
  362. package/src/nodes/math/BitcountNode.js +433 -0
  363. package/src/nodes/math/ConditionalNode.js +3 -3
  364. package/src/nodes/math/MathNode.js +76 -41
  365. package/src/nodes/math/OperatorNode.js +3 -2
  366. package/src/nodes/math/PackFloatNode.js +98 -0
  367. package/src/nodes/math/UnpackFloatNode.js +96 -0
  368. package/src/nodes/pmrem/PMREMNode.js +1 -1
  369. package/src/nodes/pmrem/PMREMUtils.js +9 -15
  370. package/src/nodes/tsl/TSLBase.js +1 -1
  371. package/src/nodes/tsl/TSLCore.js +38 -17
  372. package/src/nodes/utils/ArrayElementNode.js +14 -1
  373. package/src/nodes/utils/ConvertNode.js +1 -1
  374. package/src/nodes/utils/DebugNode.js +12 -12
  375. package/src/nodes/utils/EventNode.js +31 -2
  376. package/src/nodes/utils/FlipNode.js +1 -1
  377. package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
  378. package/src/nodes/utils/JoinNode.js +3 -3
  379. package/src/nodes/utils/LoopNode.js +1 -1
  380. package/src/nodes/utils/MemberNode.js +2 -2
  381. package/src/nodes/utils/Packing.js +13 -1
  382. package/src/nodes/utils/PostProcessingUtils.js +33 -1
  383. package/src/nodes/utils/RTTNode.js +1 -1
  384. package/src/nodes/utils/ReflectorNode.js +3 -4
  385. package/src/nodes/utils/Remap.js +48 -0
  386. package/src/nodes/utils/RotateNode.js +1 -1
  387. package/src/nodes/utils/SampleNode.js +1 -1
  388. package/src/nodes/utils/SetNode.js +1 -1
  389. package/src/nodes/utils/SplitNode.js +1 -1
  390. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  391. package/src/nodes/utils/UVUtils.js +28 -0
  392. package/src/objects/BatchedMesh.js +44 -16
  393. package/src/objects/InstancedMesh.js +30 -3
  394. package/src/objects/Line.js +1 -1
  395. package/src/objects/Mesh.js +1 -1
  396. package/src/objects/Points.js +1 -1
  397. package/src/objects/Skeleton.js +9 -0
  398. package/src/objects/SkinnedMesh.js +26 -9
  399. package/src/renderers/WebGLRenderer.js +329 -145
  400. package/src/renderers/common/Animation.js +3 -3
  401. package/src/renderers/common/Attributes.js +15 -1
  402. package/src/renderers/common/Backend.js +29 -8
  403. package/src/renderers/common/Background.js +26 -13
  404. package/src/renderers/common/BindGroup.js +1 -16
  405. package/src/renderers/common/Binding.js +11 -0
  406. package/src/renderers/common/Bindings.js +29 -14
  407. package/src/renderers/common/BlendMode.js +143 -0
  408. package/src/renderers/common/Buffer.js +40 -0
  409. package/src/renderers/common/BundleGroup.js +1 -1
  410. package/src/renderers/common/ChainMap.js +30 -6
  411. package/src/renderers/common/ComputePipeline.js +1 -1
  412. package/src/renderers/common/CubeRenderTarget.js +51 -7
  413. package/src/renderers/common/Geometries.js +29 -3
  414. package/src/renderers/common/Info.js +333 -4
  415. package/src/renderers/common/InspectorBase.js +6 -1
  416. package/src/renderers/common/Lighting.js +5 -21
  417. package/src/renderers/common/Pipelines.js +40 -7
  418. package/src/renderers/common/PostProcessing.js +8 -206
  419. package/src/renderers/common/ReadbackBuffer.js +78 -0
  420. package/src/renderers/common/RenderBundle.js +3 -1
  421. package/src/renderers/common/RenderBundles.js +7 -3
  422. package/src/renderers/common/RenderContext.js +16 -0
  423. package/src/renderers/common/RenderContexts.js +33 -49
  424. package/src/renderers/common/RenderLists.js +2 -1
  425. package/src/renderers/common/RenderObject.js +17 -5
  426. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  427. package/src/renderers/common/RenderObjects.js +21 -5
  428. package/src/renderers/common/RenderPipeline.js +232 -17
  429. package/src/renderers/common/Renderer.js +481 -117
  430. package/src/renderers/common/Sampler.js +4 -4
  431. package/src/renderers/common/StorageBuffer.js +13 -1
  432. package/src/renderers/common/Textures.js +89 -4
  433. package/src/renderers/common/TimestampQueryPool.js +5 -3
  434. package/src/renderers/common/Uniform.js +8 -0
  435. package/src/renderers/common/UniformsGroup.js +62 -1
  436. package/src/renderers/common/XRManager.js +37 -29
  437. package/src/renderers/common/extras/PMREMGenerator.js +25 -23
  438. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  439. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +242 -99
  440. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  441. package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
  442. package/src/renderers/shaders/DFGLUTData.js +19 -34
  443. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  444. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  445. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  446. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  447. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  448. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  449. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
  450. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
  451. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
  452. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  453. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  454. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
  455. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  456. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
  457. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
  458. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  459. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
  460. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
  461. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
  462. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  463. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  464. package/src/renderers/shaders/ShaderChunk.js +5 -3
  465. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
  466. package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
  467. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
  468. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  469. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  470. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  471. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  472. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  473. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  474. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  475. package/src/renderers/shaders/ShaderLib.js +7 -6
  476. package/src/renderers/shaders/UniformsLib.js +7 -5
  477. package/src/renderers/shaders/UniformsUtils.js +27 -5
  478. package/src/renderers/webgl/WebGLAnimation.js +2 -1
  479. package/src/renderers/webgl/WebGLBackground.js +15 -15
  480. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  481. package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
  482. package/src/renderers/webgl/WebGLCapabilities.js +9 -4
  483. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  484. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  485. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
  486. package/src/renderers/webgl/WebGLLights.js +18 -1
  487. package/src/renderers/webgl/WebGLMaterials.js +24 -13
  488. package/src/renderers/webgl/WebGLObjects.js +3 -1
  489. package/src/renderers/webgl/WebGLOutput.js +270 -0
  490. package/src/renderers/webgl/WebGLProgram.js +49 -109
  491. package/src/renderers/webgl/WebGLPrograms.js +63 -51
  492. package/src/renderers/webgl/WebGLRenderLists.js +15 -0
  493. package/src/renderers/webgl/WebGLRenderStates.js +13 -2
  494. package/src/renderers/webgl/WebGLShadowMap.js +188 -24
  495. package/src/renderers/webgl/WebGLState.js +75 -37
  496. package/src/renderers/webgl/WebGLTextures.js +215 -54
  497. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  498. package/src/renderers/webgl/WebGLUniformsGroups.js +19 -0
  499. package/src/renderers/webgl/WebGLUtils.js +6 -2
  500. package/src/renderers/webgl-fallback/WebGLBackend.js +253 -82
  501. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
  502. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +173 -74
  503. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
  504. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
  505. package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
  506. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +68 -53
  507. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
  508. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
  509. package/src/renderers/webgpu/WebGPUBackend.js +260 -140
  510. package/src/renderers/webgpu/WebGPURenderer.js +2 -1
  511. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +366 -90
  512. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +107 -34
  513. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
  514. package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
  515. package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
  516. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
  517. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
  518. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +156 -59
  519. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
  520. package/src/renderers/webgpu/utils/WebGPUUtils.js +33 -11
  521. package/src/renderers/webxr/WebXRController.js +12 -0
  522. package/src/renderers/webxr/WebXRManager.js +4 -2
  523. package/src/textures/CubeDepthTexture.js +76 -0
  524. package/src/textures/HTMLTexture.js +74 -0
  525. package/src/textures/Source.js +2 -2
  526. package/src/textures/Texture.js +16 -5
  527. package/src/utils.js +280 -3
  528. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  529. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  530. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  531. package/src/nodes/accessors/SceneNode.js +0 -145
  532. package/src/nodes/code/ScriptableNode.js +0 -726
  533. package/src/nodes/code/ScriptableValueNode.js +0 -253
  534. package/src/nodes/display/PosterizeNode.js +0 -65
  535. package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
  536. package/src/nodes/utils/RemapNode.js +0 -125
  537. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  538. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  539. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -10,7 +10,7 @@ class Animation {
10
10
  * Constructs a new animation loop management component.
11
11
  *
12
12
  * @param {Renderer} renderer - A reference to the main renderer.
13
- * @param {Nodes} nodes - Renderer component for managing nodes related logic.
13
+ * @param {NodeManager} nodes - Renderer component for managing nodes related logic.
14
14
  * @param {Info} info - Renderer component for managing metrics and monitoring data.
15
15
  */
16
16
  constructor( renderer, nodes, info ) {
@@ -25,7 +25,7 @@ class Animation {
25
25
  /**
26
26
  * Renderer component for managing nodes related logic.
27
27
  *
28
- * @type {Nodes}
28
+ * @type {NodeManager}
29
29
  */
30
30
  this.nodes = nodes;
31
31
 
@@ -95,7 +95,7 @@ class Animation {
95
95
  */
96
96
  stop() {
97
97
 
98
- this._context.cancelAnimationFrame( this._requestId );
98
+ if ( this._context !== null ) this._context.cancelAnimationFrame( this._requestId );
99
99
 
100
100
  this._requestId = null;
101
101
 
@@ -15,8 +15,9 @@ class Attributes extends DataMap {
15
15
  * Constructs a new attribute management component.
16
16
  *
17
17
  * @param {Backend} backend - The renderer's backend.
18
+ * @param {Info} info - Renderer component for managing metrics and monitoring data.
18
19
  */
19
- constructor( backend ) {
20
+ constructor( backend, info ) {
20
21
 
21
22
  super();
22
23
 
@@ -27,6 +28,13 @@ class Attributes extends DataMap {
27
28
  */
28
29
  this.backend = backend;
29
30
 
31
+ /**
32
+ * Renderer component for managing metrics and monitoring data.
33
+ *
34
+ * @type {Info}
35
+ */
36
+ this.info = info;
37
+
30
38
  }
31
39
 
32
40
  /**
@@ -43,6 +51,8 @@ class Attributes extends DataMap {
43
51
 
44
52
  this.backend.destroyAttribute( attribute );
45
53
 
54
+ this.info.destroyAttribute( attribute );
55
+
46
56
  }
47
57
 
48
58
  return attributeData;
@@ -65,18 +75,22 @@ class Attributes extends DataMap {
65
75
  if ( type === AttributeType.VERTEX ) {
66
76
 
67
77
  this.backend.createAttribute( attribute );
78
+ this.info.createAttribute( attribute );
68
79
 
69
80
  } else if ( type === AttributeType.INDEX ) {
70
81
 
71
82
  this.backend.createIndexAttribute( attribute );
83
+ this.info.createIndexAttribute( attribute );
72
84
 
73
85
  } else if ( type === AttributeType.STORAGE ) {
74
86
 
75
87
  this.backend.createStorageAttribute( attribute );
88
+ this.info.createStorageAttribute( attribute );
76
89
 
77
90
  } else if ( type === AttributeType.INDIRECT ) {
78
91
 
79
92
  this.backend.createIndirectStorageAttribute( attribute );
93
+ this.info.createIndirectStorageAttribute( attribute );
80
94
 
81
95
  }
82
96
 
@@ -604,14 +604,6 @@ class Backend {
604
604
  */
605
605
  hasFeature( /*name*/ ) {}
606
606
 
607
- /**
608
- * Returns the maximum anisotropy texture filtering value.
609
- *
610
- * @abstract
611
- * @return {number} The maximum anisotropy texture filtering value.
612
- */
613
- getMaxAnisotropy() {}
614
-
615
607
  /**
616
608
  * Returns the drawing buffer size.
617
609
  *
@@ -678,6 +670,27 @@ class Backend {
678
670
 
679
671
  }
680
672
 
673
+ /**
674
+ * Checks if the backend has the given compatibility.
675
+ *
676
+ * @abstract
677
+ * @param {string} name - The compatibility.
678
+ * @return {boolean} Whether the backend has the given compatibility or not.
679
+ */
680
+ hasCompatibility( /*name*/ ) {
681
+
682
+ return false;
683
+
684
+ }
685
+
686
+ /**
687
+ * Initializes the render target defined in the given render context.
688
+ *
689
+ * @abstract
690
+ * @param {RenderContext} renderContext - The render context.
691
+ */
692
+ initRenderTarget( /*renderContext*/ ) {}
693
+
681
694
  /**
682
695
  * Sets a dictionary for the given object into the
683
696
  * internal data structure.
@@ -736,6 +749,14 @@ class Backend {
736
749
 
737
750
  }
738
751
 
752
+ /**
753
+ * Delete GPU data associated with a bind group.
754
+ *
755
+ * @abstract
756
+ * @param {BindGroup} bindGroup - The bind group.
757
+ */
758
+ deleteBindGroupData( /*bindGroup*/ ) { }
759
+
739
760
  /**
740
761
  * Frees internal resources.
741
762
  *
@@ -1,6 +1,6 @@
1
1
  import DataMap from './DataMap.js';
2
2
  import Color4 from './Color4.js';
3
- import { vec4, context, normalWorldGeometry, backgroundBlurriness, backgroundIntensity, backgroundRotation, modelViewProjection } from '../../nodes/TSL.js';
3
+ import { vec4, normalWorldGeometry, backgroundBlurriness, backgroundIntensity, backgroundRotation, positionLocal, cameraProjectionMatrix, modelViewMatrix, div } from '../../nodes/TSL.js';
4
4
  import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
5
5
 
6
6
  import { Mesh } from '../../objects/Mesh.js';
@@ -22,7 +22,7 @@ class Background extends DataMap {
22
22
  * Constructs a new background management component.
23
23
  *
24
24
  * @param {Renderer} renderer - The renderer.
25
- * @param {Nodes} nodes - Renderer component for managing nodes related logic.
25
+ * @param {NodeManager} nodes - Renderer component for managing nodes related logic.
26
26
  */
27
27
  constructor( renderer, nodes ) {
28
28
 
@@ -38,7 +38,7 @@ class Background extends DataMap {
38
38
  /**
39
39
  * Renderer component for managing nodes related logic.
40
40
  *
41
- * @type {Nodes}
41
+ * @type {NodeManager}
42
42
  */
43
43
  this.nodes = nodes;
44
44
 
@@ -88,13 +88,32 @@ class Background extends DataMap {
88
88
 
89
89
  if ( backgroundMesh === undefined ) {
90
90
 
91
- const backgroundMeshNode = context( vec4( backgroundNode ).mul( backgroundIntensity ), {
91
+ const backgroundMeshNode = vec4( backgroundNode ).mul( backgroundIntensity ).context( {
92
92
  // @TODO: Add Texture2D support using node context
93
93
  getUV: () => backgroundRotation.mul( normalWorldGeometry ),
94
94
  getTextureLevel: () => backgroundBlurriness
95
95
  } );
96
96
 
97
- let viewProj = modelViewProjection;
97
+ // when using orthographic cameras, we must scale the skybox sphere
98
+ // up to exceed the dimensions of the camera's viewing box.
99
+ const isOrtho = cameraProjectionMatrix.element( 3 ).element( 3 ).equal( 1.0 );
100
+
101
+ // calculate the orthographic scale
102
+ // projectionMatrix[1][1] is (1 / top). Invert it to get the height and multiply by 3.0
103
+ // (an arbitrary safety factor) to ensure the skybox is large enough to cover the corners
104
+ // of the rectangular screen
105
+ const orthoScale = div( 1.0, cameraProjectionMatrix.element( 1 ).element( 1 ) ).mul( 3.0 );
106
+
107
+ // compute vertex position
108
+ const modifiedPosition = isOrtho.select( positionLocal.mul( orthoScale ), positionLocal );
109
+
110
+ // by using a w component of 0, the skybox will not translate when the camera moves through the scene
111
+ const viewPosition = modelViewMatrix.mul( vec4( modifiedPosition, 0.0 ) );
112
+
113
+ // we force w=1.0 here to prevent the w_clip=0 divide-by-zero error for ortho cameras.
114
+ let viewProj = cameraProjectionMatrix.mul( vec4( viewPosition.xyz, 1.0 ) );
115
+
116
+ // force background to far plane so it does not occlude objects
98
117
  viewProj = viewProj.setZ( viewProj.w );
99
118
 
100
119
  const nodeMaterial = new NodeMaterial();
@@ -113,12 +132,6 @@ class Background extends DataMap {
113
132
  backgroundMesh.frustumCulled = false;
114
133
  backgroundMesh.name = 'Background.mesh';
115
134
 
116
- backgroundMesh.onBeforeRender = function ( renderer, scene, camera ) {
117
-
118
- this.matrixWorld.copyPosition( camera.matrixWorld );
119
-
120
- };
121
-
122
135
  function onBackgroundDispose() {
123
136
 
124
137
  background.removeEventListener( 'dispose', onBackgroundDispose );
@@ -190,8 +203,8 @@ class Background extends DataMap {
190
203
 
191
204
  //
192
205
 
193
- renderContext.depthClearValue = renderer._clearDepth;
194
- renderContext.stencilClearValue = renderer._clearStencil;
206
+ renderContext.depthClearValue = renderer.getClearDepth();
207
+ renderContext.stencilClearValue = renderer.getClearStencil();
195
208
 
196
209
  renderContext.clearColor = renderer.autoClearColor === true;
197
210
  renderContext.clearDepth = renderer.autoClearDepth === true;
@@ -15,9 +15,8 @@ class BindGroup {
15
15
  * @param {string} name - The bind group's name.
16
16
  * @param {Array<Binding>} bindings - An array of bindings.
17
17
  * @param {number} index - The group index.
18
- * @param {Array<Binding>} bindingsReference - An array of reference bindings.
19
18
  */
20
- constructor( name = '', bindings = [], index = 0, bindingsReference = [] ) {
19
+ constructor( name = '', bindings = [] ) {
21
20
 
22
21
  /**
23
22
  * The bind group's name.
@@ -33,20 +32,6 @@ class BindGroup {
33
32
  */
34
33
  this.bindings = bindings;
35
34
 
36
- /**
37
- * The group index.
38
- *
39
- * @type {number}
40
- */
41
- this.index = index;
42
-
43
- /**
44
- * An array of reference bindings.
45
- *
46
- * @type {Array<Binding>}
47
- */
48
- this.bindingsReference = bindingsReference;
49
-
50
35
  /**
51
36
  * The group's ID.
52
37
  *
@@ -44,6 +44,17 @@ class Binding {
44
44
 
45
45
  }
46
46
 
47
+ /**
48
+ * The shader stages in which the binding's resource is visible.
49
+ *
50
+ * @return {number} The visibility bitmask.
51
+ */
52
+ getVisibility() {
53
+
54
+ return this.visibility;
55
+
56
+ }
57
+
47
58
  /**
48
59
  * Clones the binding.
49
60
  *
@@ -13,7 +13,7 @@ class Bindings extends DataMap {
13
13
  * Constructs a new bindings management component.
14
14
  *
15
15
  * @param {Backend} backend - The renderer's backend.
16
- * @param {Nodes} nodes - Renderer component for managing nodes related logic.
16
+ * @param {NodeManager} nodes - Renderer component for managing nodes related logic.
17
17
  * @param {Textures} textures - Renderer component for managing textures.
18
18
  * @param {Attributes} attributes - Renderer component for managing attributes.
19
19
  * @param {Pipelines} pipelines - Renderer component for managing pipelines.
@@ -54,7 +54,7 @@ class Bindings extends DataMap {
54
54
  /**
55
55
  * Renderer component for managing nodes related logic.
56
56
  *
57
- * @type {Nodes}
57
+ * @type {NodeManager}
58
58
  */
59
59
  this.nodes = nodes;
60
60
 
@@ -164,6 +164,7 @@ class Bindings extends DataMap {
164
164
 
165
165
  for ( const bindGroup of bindings ) {
166
166
 
167
+ this.backend.deleteBindGroupData( bindGroup );
167
168
  this.delete( bindGroup );
168
169
 
169
170
  }
@@ -181,6 +182,7 @@ class Bindings extends DataMap {
181
182
 
182
183
  for ( const bindGroup of bindings ) {
183
184
 
185
+ this.backend.deleteBindGroupData( bindGroup );
184
186
  this.delete( bindGroup );
185
187
 
186
188
  }
@@ -251,24 +253,31 @@ class Bindings extends DataMap {
251
253
 
252
254
  for ( const binding of bindGroup.bindings ) {
253
255
 
254
- if ( binding.isNodeUniformsGroup ) {
256
+ const updatedGroup = this.nodes.updateGroup( binding );
255
257
 
256
- const updated = this.nodes.updateGroup( binding );
258
+ // every uniforms group is a uniform buffer. So if no update is required,
259
+ // we move one with the next binding. Otherwise the next if block will update the group.
257
260
 
258
- // every uniforms group is a uniform buffer. So if no update is required,
259
- // we move one with the next binding. Otherwise the next if block will update the group.
261
+ if ( updatedGroup === false ) continue;
260
262
 
261
- if ( updated === false ) continue;
262
-
263
- }
263
+ //
264
264
 
265
265
  if ( binding.isStorageBuffer ) {
266
266
 
267
267
  const attribute = binding.attribute;
268
268
  const attributeType = attribute.isIndirectStorageBufferAttribute ? AttributeType.INDIRECT : AttributeType.STORAGE;
269
269
 
270
+ const bindingData = backend.get( binding );
271
+
270
272
  this.attributes.update( attribute, attributeType );
271
273
 
274
+ if ( bindingData.attribute !== attribute ) {
275
+
276
+ bindingData.attribute = attribute;
277
+
278
+ needsBindingsUpdate = true;
279
+
280
+ }
272
281
 
273
282
  }
274
283
 
@@ -297,7 +306,7 @@ class Bindings extends DataMap {
297
306
 
298
307
  this.textures.updateTexture( texture );
299
308
 
300
- // generation: update the bindings if a new texture has been created
309
+ // generation: update the bindings if the binding refers to a different texture object
301
310
 
302
311
  if ( binding.generation !== texturesTextureData.generation ) {
303
312
 
@@ -305,10 +314,12 @@ class Bindings extends DataMap {
305
314
 
306
315
  needsBindingsUpdate = true;
307
316
 
308
- cacheBindings = false;
309
-
310
317
  }
311
318
 
319
+ // keep track which bind groups refer to the current texture (this is needed for dispose)
320
+
321
+ texturesTextureData.bindGroups.add( bindGroup );
322
+
312
323
  }
313
324
 
314
325
  const textureData = backend.get( texture );
@@ -356,14 +367,18 @@ class Bindings extends DataMap {
356
367
 
357
368
  needsBindingsUpdate = true;
358
369
 
359
- cacheBindings = false;
360
-
361
370
  }
362
371
 
363
372
  }
364
373
 
365
374
  }
366
375
 
376
+ if ( binding.isBuffer && binding.updateRanges.length > 0 ) {
377
+
378
+ binding.clearUpdateRanges();
379
+
380
+ }
381
+
367
382
  }
368
383
 
369
384
  if ( needsBindingsUpdate === true ) {
@@ -0,0 +1,143 @@
1
+ import { NormalBlending, AddEquation, SrcAlphaFactor, OneMinusSrcAlphaFactor } from '../../constants.js';
2
+
3
+ /**
4
+ * Represents blending configuration.
5
+ *
6
+ * This class encapsulates all blending-related properties that control how
7
+ * a material's colors are combined with the colors already in the frame buffer.
8
+ */
9
+ class BlendMode {
10
+
11
+ /**
12
+ * Constructs a new blending configuration.
13
+ *
14
+ * @param {(NoBlending|NormalBlending|AdditiveBlending|SubtractiveBlending|MultiplyBlending|CustomBlending|MaterialBlending)} [blending=NormalBlending] - The blending mode.
15
+ */
16
+ constructor( blending = NormalBlending ) {
17
+
18
+ /**
19
+ * Defines the blending type.
20
+ *
21
+ * It must be set to `CustomBlending` if custom blending properties like
22
+ * {@link BlendMode#blendSrc}, {@link BlendMode#blendDst} or {@link BlendMode#blendEquation}
23
+ * should have any effect.
24
+ *
25
+ * @type {(NoBlending|NormalBlending|AdditiveBlending|SubtractiveBlending|MultiplyBlending|CustomBlending|MaterialBlending)}
26
+ * @default NormalBlending
27
+ */
28
+ this.blending = blending;
29
+
30
+ /**
31
+ * Defines the blending source factor.
32
+ *
33
+ * This determines how the source (incoming) fragment color is factored before being added
34
+ * to the destination (existing) fragment color in the frame buffer.
35
+ *
36
+ * @type {(ZeroFactor|OneFactor|SrcColorFactor|OneMinusSrcColorFactor|SrcAlphaFactor|OneMinusSrcAlphaFactor|DstAlphaFactor|OneMinusDstAlphaFactor|DstColorFactor|OneMinusDstColorFactor|SrcAlphaSaturateFactor|ConstantColorFactor|OneMinusConstantColorFactor|ConstantAlphaFactor|OneMinusConstantAlphaFactor)}
37
+ * @default SrcAlphaFactor
38
+ */
39
+ this.blendSrc = SrcAlphaFactor;
40
+
41
+ /**
42
+ * Defines the blending destination factor.
43
+ *
44
+ * This determines how the destination (existing) fragment color in the frame buffer
45
+ * is factored before being combined with the source (incoming) fragment color.
46
+ *
47
+ * @type {(ZeroFactor|OneFactor|SrcColorFactor|OneMinusSrcColorFactor|SrcAlphaFactor|OneMinusSrcAlphaFactor|DstAlphaFactor|OneMinusDstAlphaFactor|DstColorFactor|OneMinusDstColorFactor|SrcAlphaSaturateFactor|ConstantColorFactor|OneMinusConstantColorFactor|ConstantAlphaFactor|OneMinusConstantAlphaFactor)}
48
+ * @default OneMinusSrcAlphaFactor
49
+ */
50
+ this.blendDst = OneMinusSrcAlphaFactor;
51
+
52
+ /**
53
+ * Defines the blending equation.
54
+ *
55
+ * This determines how the source and destination colors are combined.
56
+ *
57
+ * @type {(AddEquation|SubtractEquation|ReverseSubtractEquation|MinEquation|MaxEquation)}
58
+ * @default AddEquation
59
+ */
60
+ this.blendEquation = AddEquation;
61
+
62
+ /**
63
+ * Defines the blending source alpha factor.
64
+ *
65
+ * When set, this allows separate control of the alpha channel's source blending factor.
66
+ * If `null`, {@link BlendMode#blendSrc} is used for the alpha channel as well.
67
+ *
68
+ * @type {?(ZeroFactor|OneFactor|SrcColorFactor|OneMinusSrcColorFactor|SrcAlphaFactor|OneMinusSrcAlphaFactor|DstAlphaFactor|OneMinusDstAlphaFactor|DstColorFactor|OneMinusDstColorFactor|SrcAlphaSaturateFactor|ConstantColorFactor|OneMinusConstantColorFactor|ConstantAlphaFactor|OneMinusConstantAlphaFactor)}
69
+ * @default null
70
+ */
71
+ this.blendSrcAlpha = null;
72
+
73
+ /**
74
+ * Defines the blending destination alpha factor.
75
+ *
76
+ * When set, this allows separate control of the alpha channel's destination blending factor.
77
+ * If `null`, {@link BlendMode#blendDst} is used for the alpha channel as well.
78
+ *
79
+ * @type {?(ZeroFactor|OneFactor|SrcColorFactor|OneMinusSrcColorFactor|SrcAlphaFactor|OneMinusSrcAlphaFactor|DstAlphaFactor|OneMinusDstAlphaFactor|DstColorFactor|OneMinusDstColorFactor|SrcAlphaSaturateFactor|ConstantColorFactor|OneMinusConstantColorFactor|ConstantAlphaFactor|OneMinusConstantAlphaFactor)}
80
+ * @default null
81
+ */
82
+ this.blendDstAlpha = null;
83
+
84
+ /**
85
+ * Defines the blending equation of the alpha channel.
86
+ *
87
+ * When set, this allows separate control of the alpha channel's blending equation.
88
+ * If `null`, {@link BlendMode#blendEquation} is used for the alpha channel as well.
89
+ *
90
+ * @type {?(AddEquation|SubtractEquation|ReverseSubtractEquation|MinEquation|MaxEquation)}
91
+ * @default null
92
+ */
93
+ this.blendEquationAlpha = null;
94
+
95
+ /**
96
+ * Defines whether to premultiply the alpha (transparency) value.
97
+ *
98
+ * If `true`, the RGB color of the texture or material is multiplied by its alpha value.
99
+ * This is useful for transparent textures/materials where the color data
100
+ * should already include the transparency information.
101
+ *
102
+ * @type {boolean}
103
+ * @default false
104
+ */
105
+ this.premultiplyAlpha = false;
106
+
107
+ }
108
+
109
+ /**
110
+ * Copies the blending properties from the given source to this instance.
111
+ *
112
+ * @param {BlendMode} source - The blending configuration to copy from.
113
+ * @return {BlendMode} A reference to this instance.
114
+ */
115
+ copy( source ) {
116
+
117
+ this.blending = source.blending;
118
+ this.blendSrc = source.blendSrc;
119
+ this.blendDst = source.blendDst;
120
+ this.blendEquation = source.blendEquation;
121
+ this.blendSrcAlpha = source.blendSrcAlpha;
122
+ this.blendDstAlpha = source.blendDstAlpha;
123
+ this.blendEquationAlpha = source.blendEquationAlpha;
124
+ this.premultiplyAlpha = source.premultiplyAlpha;
125
+
126
+ return this;
127
+
128
+ }
129
+
130
+ /**
131
+ * Returns a clone of this blending configuration.
132
+ *
133
+ * @return {BlendMode} A new Blending instance with the same properties.
134
+ */
135
+ clone() {
136
+
137
+ return new this.constructor().copy( this );
138
+
139
+ }
140
+
141
+ }
142
+
143
+ export default BlendMode;
@@ -44,6 +44,46 @@ class Buffer extends Binding {
44
44
  */
45
45
  this._buffer = buffer;
46
46
 
47
+ /**
48
+ * An array of update ranges.
49
+ *
50
+ * @private
51
+ * @type {Array<{start: number, count: number}>}
52
+ */
53
+ this._updateRanges = [];
54
+
55
+ }
56
+
57
+ /**
58
+ * The array of update ranges.
59
+ *
60
+ * @type {Array<{start: number, count: number}>}
61
+ */
62
+ get updateRanges() {
63
+
64
+ return this._updateRanges;
65
+
66
+ }
67
+
68
+ /**
69
+ * Adds an update range.
70
+ *
71
+ * @param {number} start - The start index.
72
+ * @param {number} count - The number of elements.
73
+ */
74
+ addUpdateRange( start, count ) {
75
+
76
+ this.updateRanges.push( { start, count } );
77
+
78
+ }
79
+
80
+ /**
81
+ * Clears all update ranges.
82
+ */
83
+ clearUpdateRanges() {
84
+
85
+ this.updateRanges.length = 0;
86
+
47
87
  }
48
88
 
49
89
  /**
@@ -44,7 +44,7 @@ class BundleGroup extends Group {
44
44
  /**
45
45
  * Whether the bundle is static or not. When set to `true`, the structure
46
46
  * is assumed to be static and does not change. E.g. no new objects are
47
- * added to the group
47
+ * added to the group.
48
48
  *
49
49
  * If a change is required, an update can still be forced by setting the
50
50
  * `needsUpdate` flag to `true`.
@@ -14,11 +14,35 @@ class ChainMap {
14
14
  constructor() {
15
15
 
16
16
  /**
17
- * The root Weak Map.
17
+ * A map of Weak Maps by their key length.
18
18
  *
19
- * @type {WeakMap<Object, WeakMap>}
19
+ * @type {Object<number, WeakMap>}
20
20
  */
21
- this.weakMap = new WeakMap();
21
+ this.weakMaps = {};
22
+
23
+
24
+ }
25
+
26
+ /**
27
+ * Returns the Weak Map for the given keys.
28
+ *
29
+ * @param {Array<Object>} keys - List of keys.
30
+ * @return {WeakMap} The weak map.
31
+ */
32
+ _getWeakMap( keys ) {
33
+
34
+ const length = keys.length;
35
+
36
+ let weakMap = this.weakMaps[ length ];
37
+
38
+ if ( weakMap === undefined ) {
39
+
40
+ weakMap = new WeakMap();
41
+ this.weakMaps[ length ] = weakMap;
42
+
43
+ }
44
+
45
+ return weakMap;
22
46
 
23
47
  }
24
48
 
@@ -30,7 +54,7 @@ class ChainMap {
30
54
  */
31
55
  get( keys ) {
32
56
 
33
- let map = this.weakMap;
57
+ let map = this._getWeakMap( keys );
34
58
 
35
59
  for ( let i = 0; i < keys.length - 1; i ++ ) {
36
60
 
@@ -53,7 +77,7 @@ class ChainMap {
53
77
  */
54
78
  set( keys, value ) {
55
79
 
56
- let map = this.weakMap;
80
+ let map = this._getWeakMap( keys );
57
81
 
58
82
  for ( let i = 0; i < keys.length - 1; i ++ ) {
59
83
 
@@ -79,7 +103,7 @@ class ChainMap {
79
103
  */
80
104
  delete( keys ) {
81
105
 
82
- let map = this.weakMap;
106
+ let map = this._getWeakMap( keys );
83
107
 
84
108
  for ( let i = 0; i < keys.length - 1; i ++ ) {
85
109
 
@@ -9,7 +9,7 @@ import Pipeline from './Pipeline.js';
9
9
  class ComputePipeline extends Pipeline {
10
10
 
11
11
  /**
12
- * Constructs a new render pipeline.
12
+ * Constructs a new compute pipeline.
13
13
  *
14
14
  * @param {string} cacheKey - The pipeline's cache key.
15
15
  * @param {ProgrammableStage} computeProgram - The pipeline's compute shader.