super-three 0.177.0 → 0.181.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 (501) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +1994 -749
  3. package/build/three.core.js +1358 -506
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +631 -247
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +113 -33
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +9571 -3424
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +9397 -3426
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  14. package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  15. package/examples/jsm/Addons.js +2 -3
  16. package/examples/jsm/animation/CCDIKSolver.js +1 -1
  17. package/examples/jsm/capabilities/WebGL.js +0 -27
  18. package/examples/jsm/capabilities/WebGPU.js +1 -1
  19. package/examples/jsm/controls/ArcballControls.js +9 -9
  20. package/examples/jsm/controls/DragControls.js +7 -57
  21. package/examples/jsm/controls/FirstPersonControls.js +3 -3
  22. package/examples/jsm/controls/FlyControls.js +1 -1
  23. package/examples/jsm/controls/OrbitControls.js +2 -2
  24. package/examples/jsm/controls/PointerLockControls.js +2 -10
  25. package/examples/jsm/controls/TrackballControls.js +1 -1
  26. package/examples/jsm/controls/TransformControls.js +62 -15
  27. package/examples/jsm/csm/CSMShadowNode.js +4 -4
  28. package/examples/jsm/effects/AsciiEffect.js +8 -8
  29. package/examples/jsm/environments/RoomEnvironment.js +8 -3
  30. package/examples/jsm/exporters/DRACOExporter.js +2 -2
  31. package/examples/jsm/exporters/EXRExporter.js +1 -1
  32. package/examples/jsm/exporters/GLTFExporter.js +33 -25
  33. package/examples/jsm/exporters/KTX2Exporter.js +4 -2
  34. package/examples/jsm/exporters/PLYExporter.js +1 -1
  35. package/examples/jsm/exporters/USDZExporter.js +683 -299
  36. package/examples/jsm/geometries/DecalGeometry.js +2 -2
  37. package/examples/jsm/geometries/ParametricGeometry.js +1 -1
  38. package/examples/jsm/geometries/RoundedBoxGeometry.js +47 -8
  39. package/examples/jsm/geometries/TeapotGeometry.js +2 -2
  40. package/examples/jsm/geometries/TextGeometry.js +3 -2
  41. package/examples/jsm/gpgpu/BitonicSort.js +715 -0
  42. package/examples/jsm/helpers/ViewHelper.js +43 -5
  43. package/examples/jsm/inspector/Inspector.js +427 -0
  44. package/examples/jsm/inspector/RendererInspector.js +415 -0
  45. package/examples/jsm/inspector/tabs/Console.js +204 -0
  46. package/examples/jsm/inspector/tabs/Parameters.js +332 -0
  47. package/examples/jsm/inspector/tabs/Performance.js +268 -0
  48. package/examples/jsm/inspector/tabs/Viewer.js +166 -0
  49. package/examples/jsm/inspector/ui/Graph.js +95 -0
  50. package/examples/jsm/inspector/ui/Item.js +170 -0
  51. package/examples/jsm/inspector/ui/List.js +75 -0
  52. package/examples/jsm/inspector/ui/Profiler.js +170 -0
  53. package/examples/jsm/inspector/ui/Style.js +654 -0
  54. package/examples/jsm/inspector/ui/Tab.js +46 -0
  55. package/examples/jsm/inspector/ui/Values.js +423 -0
  56. package/examples/jsm/inspector/ui/utils.js +56 -0
  57. package/examples/jsm/interactive/HTMLMesh.js +11 -13
  58. package/examples/jsm/interactive/InteractiveGroup.js +1 -1
  59. package/examples/jsm/interactive/SelectionBox.js +30 -0
  60. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  61. package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
  62. package/examples/jsm/lights/LightProbeGenerator.js +14 -3
  63. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  64. package/examples/jsm/lines/Line2.js +3 -3
  65. package/examples/jsm/lines/LineGeometry.js +1 -1
  66. package/examples/jsm/lines/LineSegments2.js +2 -2
  67. package/examples/jsm/lines/Wireframe.js +2 -2
  68. package/examples/jsm/lines/WireframeGeometry2.js +1 -1
  69. package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
  70. package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
  71. package/examples/jsm/loaders/3MFLoader.js +1 -1
  72. package/examples/jsm/loaders/ColladaLoader.js +4 -4
  73. package/examples/jsm/loaders/DDSLoader.js +1 -1
  74. package/examples/jsm/loaders/DRACOLoader.js +73 -22
  75. package/examples/jsm/loaders/EXRLoader.js +210 -22
  76. package/examples/jsm/loaders/FBXLoader.js +4 -4
  77. package/examples/jsm/loaders/FontLoader.js +23 -5
  78. package/examples/jsm/loaders/GLTFLoader.js +14 -8
  79. package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
  80. package/examples/jsm/loaders/HDRLoader.js +486 -0
  81. package/examples/jsm/loaders/KTX2Loader.js +136 -49
  82. package/examples/jsm/loaders/KTXLoader.js +2 -2
  83. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  84. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  85. package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
  86. package/examples/jsm/loaders/LWOLoader.js +2 -2
  87. package/examples/jsm/loaders/MaterialXLoader.js +233 -34
  88. package/examples/jsm/loaders/OBJLoader.js +1 -1
  89. package/examples/jsm/loaders/PDBLoader.js +1 -1
  90. package/examples/jsm/loaders/RGBELoader.js +7 -473
  91. package/examples/jsm/loaders/SVGLoader.js +2 -2
  92. package/examples/jsm/loaders/TTFLoader.js +13 -1
  93. package/examples/jsm/loaders/USDLoader.js +219 -0
  94. package/examples/jsm/loaders/USDZLoader.js +4 -892
  95. package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
  96. package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
  97. package/examples/jsm/loaders/usd/USDAParser.js +741 -0
  98. package/examples/jsm/loaders/usd/USDCParser.js +17 -0
  99. package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  100. package/examples/jsm/math/ColorSpaces.js +19 -1
  101. package/examples/jsm/math/ConvexHull.js +3 -3
  102. package/examples/jsm/math/ImprovedNoise.js +1 -1
  103. package/examples/jsm/math/Lut.js +2 -2
  104. package/examples/jsm/math/SimplexNoise.js +1 -1
  105. package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
  106. package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
  107. package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
  108. package/examples/jsm/misc/TubePainter.js +383 -40
  109. package/examples/jsm/misc/Volume.js +1 -1
  110. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  111. package/examples/jsm/objects/LensflareMesh.js +3 -3
  112. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  113. package/examples/jsm/objects/Sky.js +1 -1
  114. package/examples/jsm/objects/SkyMesh.js +3 -3
  115. package/examples/jsm/objects/Water.js +3 -3
  116. package/examples/jsm/objects/WaterMesh.js +6 -6
  117. package/examples/jsm/physics/RapierPhysics.js +95 -16
  118. package/examples/jsm/postprocessing/GTAOPass.js +10 -9
  119. package/examples/jsm/postprocessing/GlitchPass.js +2 -2
  120. package/examples/jsm/postprocessing/OutlinePass.js +17 -17
  121. package/examples/jsm/postprocessing/SSAOPass.js +10 -9
  122. package/examples/jsm/postprocessing/SSRPass.js +37 -8
  123. package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
  124. package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
  125. package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
  126. package/examples/jsm/renderers/SVGRenderer.js +1 -1
  127. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
  128. package/examples/jsm/shaders/AfterimageShader.js +1 -1
  129. package/examples/jsm/shaders/BleachBypassShader.js +1 -1
  130. package/examples/jsm/shaders/BokehShader.js +1 -1
  131. package/examples/jsm/shaders/BokehShader2.js +1 -1
  132. package/examples/jsm/shaders/DotScreenShader.js +1 -1
  133. package/examples/jsm/shaders/FocusShader.js +1 -1
  134. package/examples/jsm/shaders/GTAOShader.js +2 -2
  135. package/examples/jsm/shaders/GodRaysShader.js +1 -1
  136. package/examples/jsm/shaders/KaleidoShader.js +1 -1
  137. package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
  138. package/examples/jsm/shaders/SSRShader.js +1 -1
  139. package/examples/jsm/shaders/SepiaShader.js +1 -1
  140. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
  141. package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
  142. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +11 -2
  143. package/examples/jsm/shaders/VignetteShader.js +1 -1
  144. package/examples/jsm/transpiler/AST.js +381 -30
  145. package/examples/jsm/transpiler/GLSLDecoder.js +247 -104
  146. package/examples/jsm/transpiler/Linker.js +327 -0
  147. package/examples/jsm/transpiler/TSLEncoder.js +196 -92
  148. package/examples/jsm/transpiler/Transpiler.js +17 -1
  149. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  150. package/examples/jsm/transpiler/WGSLEncoder.js +812 -0
  151. package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
  152. package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
  153. package/examples/jsm/tsl/display/BloomNode.js +11 -6
  154. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
  155. package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
  156. package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
  157. package/examples/jsm/tsl/display/GTAONode.js +53 -5
  158. package/examples/jsm/tsl/display/GaussianBlurNode.js +55 -43
  159. package/examples/jsm/tsl/display/OutlineNode.js +13 -2
  160. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  161. package/examples/jsm/tsl/display/SSGINode.js +654 -0
  162. package/examples/jsm/tsl/display/SSRNode.js +182 -65
  163. package/examples/jsm/tsl/display/SSSNode.js +488 -0
  164. package/examples/jsm/tsl/display/TRAANode.js +578 -0
  165. package/examples/jsm/tsl/display/boxBlur.js +65 -0
  166. package/examples/jsm/tsl/display/hashBlur.js +18 -20
  167. package/examples/jsm/tsl/lighting/TiledLightsNode.js +22 -2
  168. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  169. package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
  170. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  171. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  172. package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
  173. package/package.json +5 -10
  174. package/src/Three.Core.js +5 -2
  175. package/src/Three.TSL.js +112 -32
  176. package/src/Three.WebGPU.Nodes.js +2 -0
  177. package/src/Three.WebGPU.js +4 -0
  178. package/src/animation/AnimationClip.js +20 -4
  179. package/src/animation/AnimationMixer.js +3 -3
  180. package/src/animation/AnimationObjectGroup.js +2 -1
  181. package/src/animation/KeyframeTrack.js +8 -7
  182. package/src/animation/PropertyBinding.js +12 -11
  183. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  184. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  185. package/src/audio/Audio.js +10 -9
  186. package/src/audio/PositionalAudio.js +1 -1
  187. package/src/cameras/Camera.js +14 -0
  188. package/src/cameras/OrthographicCamera.js +2 -2
  189. package/src/cameras/PerspectiveCamera.js +2 -2
  190. package/src/cameras/StereoCamera.js +2 -2
  191. package/src/constants.js +13 -5
  192. package/src/core/BufferAttribute.js +3 -3
  193. package/src/core/BufferGeometry.js +10 -10
  194. package/src/core/Clock.js +2 -8
  195. package/src/core/EventDispatcher.js +1 -1
  196. package/src/core/GLBufferAttribute.js +13 -1
  197. package/src/core/InterleavedBuffer.js +1 -1
  198. package/src/core/InterleavedBufferAttribute.js +3 -2
  199. package/src/core/Object3D.js +4 -3
  200. package/src/core/Raycaster.js +2 -1
  201. package/src/core/RenderTarget.js +10 -1
  202. package/{examples/jsm/misc → src/core}/Timer.js +4 -42
  203. package/src/extras/Controls.js +5 -4
  204. package/src/extras/DataUtils.js +2 -1
  205. package/src/extras/Earcut.js +6 -0
  206. package/src/extras/ImageUtils.js +2 -2
  207. package/src/extras/PMREMGenerator.js +279 -55
  208. package/src/extras/TextureUtils.js +2 -1
  209. package/src/extras/core/Curve.js +2 -1
  210. package/src/extras/core/Interpolations.js +7 -1
  211. package/src/extras/core/Path.js +22 -22
  212. package/src/extras/core/ShapePath.js +4 -4
  213. package/src/extras/lib/earcut.js +8 -8
  214. package/src/geometries/BoxGeometry.js +1 -0
  215. package/src/geometries/CapsuleGeometry.js +1 -0
  216. package/src/geometries/CircleGeometry.js +1 -0
  217. package/src/geometries/ConeGeometry.js +1 -0
  218. package/src/geometries/CylinderGeometry.js +1 -0
  219. package/src/geometries/DodecahedronGeometry.js +1 -0
  220. package/src/geometries/ExtrudeGeometry.js +8 -6
  221. package/src/geometries/IcosahedronGeometry.js +1 -0
  222. package/src/geometries/LatheGeometry.js +1 -0
  223. package/src/geometries/OctahedronGeometry.js +1 -0
  224. package/src/geometries/PlaneGeometry.js +1 -0
  225. package/src/geometries/RingGeometry.js +1 -0
  226. package/src/geometries/ShapeGeometry.js +1 -0
  227. package/src/geometries/SphereGeometry.js +1 -0
  228. package/src/geometries/TetrahedronGeometry.js +1 -0
  229. package/src/geometries/TorusGeometry.js +1 -0
  230. package/src/geometries/TorusKnotGeometry.js +1 -0
  231. package/src/geometries/TubeGeometry.js +1 -0
  232. package/src/helpers/CameraHelper.js +42 -12
  233. package/src/helpers/SkeletonHelper.js +35 -6
  234. package/src/lights/LightShadow.js +21 -8
  235. package/src/lights/PointLightShadow.js +1 -1
  236. package/src/lights/webgpu/ProjectorLight.js +1 -1
  237. package/src/loaders/AnimationLoader.js +2 -1
  238. package/src/loaders/AudioLoader.js +2 -1
  239. package/src/loaders/BufferGeometryLoader.js +2 -2
  240. package/src/loaders/Cache.js +2 -2
  241. package/src/loaders/DataTextureLoader.js +1 -1
  242. package/src/loaders/FileLoader.js +29 -5
  243. package/src/loaders/ImageBitmapLoader.js +32 -8
  244. package/src/loaders/ImageLoader.js +56 -9
  245. package/src/loaders/Loader.js +17 -3
  246. package/src/loaders/LoadingManager.js +45 -0
  247. package/src/loaders/MaterialLoader.js +3 -2
  248. package/src/loaders/ObjectLoader.js +13 -13
  249. package/src/loaders/TextureLoader.js +1 -1
  250. package/src/loaders/nodes/NodeLoader.js +3 -2
  251. package/src/materials/Material.js +16 -3
  252. package/src/materials/MeshBasicMaterial.js +2 -1
  253. package/src/materials/MeshDepthMaterial.js +1 -0
  254. package/src/materials/MeshDistanceMaterial.js +1 -1
  255. package/src/materials/MeshLambertMaterial.js +2 -1
  256. package/src/materials/MeshMatcapMaterial.js +22 -0
  257. package/src/materials/MeshNormalMaterial.js +1 -0
  258. package/src/materials/MeshPhongMaterial.js +2 -1
  259. package/src/materials/MeshPhysicalMaterial.js +2 -1
  260. package/src/materials/MeshStandardMaterial.js +8 -7
  261. package/src/materials/MeshToonMaterial.js +1 -0
  262. package/src/materials/PointsMaterial.js +1 -1
  263. package/src/materials/ShaderMaterial.js +2 -2
  264. package/src/materials/nodes/Line2NodeMaterial.js +2 -10
  265. package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
  266. package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
  267. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  268. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
  269. package/src/materials/nodes/MeshSSSNodeMaterial.js +3 -3
  270. package/src/materials/nodes/NodeMaterial.js +90 -27
  271. package/src/materials/nodes/PointsNodeMaterial.js +86 -28
  272. package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
  273. package/src/materials/nodes/manager/NodeMaterialObserver.js +89 -3
  274. package/src/math/Color.js +6 -5
  275. package/src/math/ColorManagement.js +9 -3
  276. package/src/math/Cylindrical.js +1 -1
  277. package/src/math/Euler.js +2 -1
  278. package/src/math/Frustum.js +25 -9
  279. package/src/math/FrustumArray.js +10 -5
  280. package/src/math/Line3.js +129 -2
  281. package/src/math/MathUtils.js +13 -11
  282. package/src/math/Matrix2.js +1 -1
  283. package/src/math/Matrix3.js +2 -2
  284. package/src/math/Matrix4.js +55 -34
  285. package/src/math/Plane.js +1 -1
  286. package/src/math/Quaternion.js +69 -67
  287. package/src/math/Spherical.js +3 -3
  288. package/src/nodes/Nodes.js +6 -4
  289. package/src/nodes/TSL.js +9 -4
  290. package/src/nodes/accessors/AccessorsUtils.js +7 -8
  291. package/src/nodes/accessors/Bitangent.js +31 -25
  292. package/src/nodes/accessors/BufferNode.js +1 -1
  293. package/src/nodes/accessors/Camera.js +142 -16
  294. package/src/nodes/accessors/ClippingNode.js +6 -5
  295. package/src/nodes/accessors/CubeTextureNode.js +5 -4
  296. package/src/nodes/accessors/InstanceNode.js +25 -5
  297. package/src/nodes/accessors/Lights.js +10 -0
  298. package/src/nodes/accessors/Normal.js +97 -30
  299. package/src/nodes/accessors/Object3DNode.js +2 -2
  300. package/src/nodes/accessors/Position.js +25 -9
  301. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  302. package/src/nodes/accessors/ReferenceNode.js +20 -4
  303. package/src/nodes/accessors/ReflectVector.js +3 -3
  304. package/src/nodes/accessors/SceneNode.js +3 -2
  305. package/src/nodes/accessors/StorageBufferNode.js +2 -1
  306. package/src/nodes/accessors/StorageTextureNode.js +23 -1
  307. package/src/nodes/accessors/Tangent.js +25 -17
  308. package/src/nodes/accessors/TangentUtils.js +46 -0
  309. package/src/nodes/accessors/Texture3DNode.js +14 -1
  310. package/src/nodes/accessors/TextureBicubic.js +21 -3
  311. package/src/nodes/accessors/TextureNode.js +142 -44
  312. package/src/nodes/accessors/UniformArrayNode.js +0 -16
  313. package/src/nodes/code/FunctionCallNode.js +24 -4
  314. package/src/nodes/code/FunctionNode.js +23 -0
  315. package/src/nodes/core/ArrayNode.js +13 -0
  316. package/src/nodes/core/AssignNode.js +6 -2
  317. package/src/nodes/core/AttributeNode.js +2 -1
  318. package/src/nodes/core/ContextNode.js +48 -10
  319. package/src/nodes/core/IndexNode.js +2 -2
  320. package/src/nodes/core/InputNode.js +2 -1
  321. package/src/nodes/core/InspectorNode.js +128 -0
  322. package/src/nodes/core/{CacheNode.js → IsolateNode.js} +36 -17
  323. package/src/nodes/core/Node.js +167 -34
  324. package/src/nodes/core/NodeBuilder.js +404 -120
  325. package/src/nodes/core/NodeFrame.js +21 -21
  326. package/src/nodes/core/NodeFunction.js +2 -1
  327. package/src/nodes/core/NodeParser.js +2 -1
  328. package/src/nodes/core/NodeUniform.js +1 -1
  329. package/src/nodes/core/NodeUtils.js +17 -88
  330. package/src/nodes/core/ParameterNode.js +31 -0
  331. package/src/nodes/core/PropertyNode.js +7 -0
  332. package/src/nodes/core/StackNode.js +77 -30
  333. package/src/nodes/core/StructNode.js +5 -5
  334. package/src/nodes/core/StructTypeNode.js +1 -0
  335. package/src/nodes/core/SubBuildNode.js +89 -0
  336. package/src/nodes/core/UniformNode.js +80 -14
  337. package/src/nodes/core/VarNode.js +142 -16
  338. package/src/nodes/core/VaryingNode.js +9 -6
  339. package/src/nodes/display/BlendModes.js +7 -6
  340. package/src/nodes/display/BumpMapNode.js +1 -1
  341. package/src/nodes/display/ColorAdjustment.js +1 -1
  342. package/src/nodes/display/FrontFacingNode.js +35 -7
  343. package/src/nodes/display/NormalMapNode.js +20 -50
  344. package/src/nodes/display/PassNode.js +206 -17
  345. package/src/nodes/display/RenderOutputNode.js +28 -2
  346. package/src/nodes/display/ScreenNode.js +44 -40
  347. package/src/nodes/display/ToneMappingNode.js +31 -4
  348. package/src/nodes/display/ToonOutlinePassNode.js +8 -0
  349. package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
  350. package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
  351. package/src/nodes/display/ViewportTextureNode.js +94 -4
  352. package/src/nodes/fog/Fog.js +3 -2
  353. package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
  354. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  355. package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
  356. package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
  357. package/src/nodes/functions/BasicLightingModel.js +2 -1
  358. package/src/nodes/functions/PhongLightingModel.js +3 -3
  359. package/src/nodes/functions/PhysicalLightingModel.js +19 -18
  360. package/src/nodes/functions/VolumetricLightingModel.js +5 -5
  361. package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
  362. package/src/nodes/geometry/RangeNode.js +40 -4
  363. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  364. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
  365. package/src/nodes/gpgpu/ComputeNode.js +81 -25
  366. package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
  367. package/src/nodes/gpgpu/WorkgroupInfoNode.js +29 -3
  368. package/src/nodes/lighting/EnvironmentNode.js +11 -11
  369. package/src/nodes/lighting/LightsNode.js +7 -8
  370. package/src/nodes/lighting/PointShadowNode.js +6 -0
  371. package/src/nodes/lighting/ProjectorLightNode.js +19 -6
  372. package/src/nodes/lighting/ShadowFilterNode.js +3 -1
  373. package/src/nodes/lighting/ShadowNode.js +77 -10
  374. package/src/nodes/materialx/MaterialXNodes.js +131 -2
  375. package/src/nodes/materialx/lib/mx_noise.js +165 -1
  376. package/src/nodes/math/BitcastNode.js +156 -0
  377. package/src/nodes/math/ConditionalNode.js +25 -27
  378. package/src/nodes/math/MathNode.js +106 -65
  379. package/src/nodes/math/OperatorNode.js +28 -43
  380. package/src/nodes/pmrem/PMREMUtils.js +117 -2
  381. package/src/nodes/shapes/Shapes.js +1 -1
  382. package/src/nodes/tsl/TSLBase.js +6 -2
  383. package/src/nodes/tsl/TSLCore.js +546 -186
  384. package/src/nodes/utils/DebugNode.js +3 -2
  385. package/src/nodes/utils/EquirectUV.js +27 -0
  386. package/src/nodes/utils/EventNode.js +119 -0
  387. package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
  388. package/src/nodes/utils/JoinNode.js +6 -3
  389. package/src/nodes/utils/LoopNode.js +20 -41
  390. package/src/nodes/utils/MatcapUV.js +22 -0
  391. package/src/nodes/utils/MemberNode.js +59 -7
  392. package/src/nodes/utils/PostProcessingUtils.js +28 -1
  393. package/src/nodes/utils/RTTNode.js +33 -6
  394. package/src/nodes/utils/ReflectorNode.js +68 -10
  395. package/src/nodes/utils/SampleNode.js +91 -0
  396. package/src/nodes/utils/SplitNode.js +11 -0
  397. package/src/nodes/utils/Timer.js +0 -47
  398. package/src/nodes/utils/TriplanarTextures.js +65 -0
  399. package/src/objects/BatchedMesh.js +6 -4
  400. package/src/objects/LOD.js +1 -1
  401. package/src/objects/Line.js +2 -1
  402. package/src/objects/LineSegments.js +2 -1
  403. package/src/objects/Skeleton.js +3 -2
  404. package/src/objects/SkinnedMesh.js +3 -1
  405. package/src/objects/Sprite.js +4 -3
  406. package/src/renderers/WebGLRenderer.js +77 -66
  407. package/src/renderers/common/Animation.js +13 -1
  408. package/src/renderers/common/Attributes.js +1 -1
  409. package/src/renderers/common/Backend.js +108 -27
  410. package/src/renderers/common/Background.js +4 -3
  411. package/src/renderers/common/Bindings.js +76 -19
  412. package/src/renderers/common/CanvasTarget.js +341 -0
  413. package/src/renderers/common/ChainMap.js +1 -1
  414. package/src/renderers/common/Color4.js +2 -2
  415. package/src/renderers/common/CubeRenderTarget.js +1 -1
  416. package/src/renderers/common/DataMap.js +1 -1
  417. package/src/renderers/common/Geometries.js +26 -0
  418. package/src/renderers/common/Info.js +4 -2
  419. package/src/renderers/common/InspectorBase.js +146 -0
  420. package/src/renderers/common/Pipelines.js +1 -1
  421. package/src/renderers/common/PostProcessing.js +61 -25
  422. package/src/renderers/common/QuadMesh.js +7 -1
  423. package/src/renderers/common/RenderContext.js +2 -2
  424. package/src/renderers/common/RenderList.js +7 -3
  425. package/src/renderers/common/RenderObject.js +84 -5
  426. package/src/renderers/common/RenderObjects.js +1 -1
  427. package/src/renderers/common/Renderer.js +486 -255
  428. package/src/renderers/common/RendererUtils.js +9 -0
  429. package/src/renderers/common/SampledTexture.js +8 -68
  430. package/src/renderers/common/Sampler.js +117 -0
  431. package/src/renderers/common/Storage3DTexture.js +100 -0
  432. package/src/renderers/common/StorageArrayTexture.js +84 -0
  433. package/src/renderers/common/StorageTexture.js +27 -0
  434. package/src/renderers/common/Textures.js +138 -46
  435. package/src/renderers/common/TimestampQueryPool.js +65 -3
  436. package/src/renderers/common/UniformsGroup.js +2 -1
  437. package/src/renderers/common/XRManager.js +63 -24
  438. package/src/renderers/common/XRRenderTarget.js +21 -4
  439. package/src/renderers/common/extras/PMREMGenerator.js +161 -66
  440. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  441. package/src/renderers/common/nodes/NodeLibrary.js +9 -7
  442. package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
  443. package/src/renderers/common/nodes/NodeSampler.js +13 -1
  444. package/src/renderers/common/nodes/Nodes.js +38 -16
  445. package/src/renderers/shaders/DFGLUTData.js +64 -0
  446. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
  447. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
  448. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
  449. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
  450. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
  451. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  452. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
  453. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
  454. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +21 -11
  455. package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
  456. package/src/renderers/shaders/UniformsLib.js +1 -0
  457. package/src/renderers/shaders/UniformsUtils.js +25 -4
  458. package/src/renderers/webgl/WebGLAttributes.js +4 -0
  459. package/src/renderers/webgl/WebGLCapabilities.js +4 -3
  460. package/src/renderers/webgl/WebGLExtensions.js +2 -25
  461. package/src/renderers/webgl/WebGLInfo.js +3 -1
  462. package/src/renderers/webgl/WebGLProgram.js +25 -18
  463. package/src/renderers/webgl/WebGLPrograms.js +9 -6
  464. package/src/renderers/webgl/WebGLShadowMap.js +13 -2
  465. package/src/renderers/webgl/WebGLState.js +17 -16
  466. package/src/renderers/webgl/WebGLTextures.js +38 -21
  467. package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
  468. package/src/renderers/webgl/WebGLUtils.js +3 -2
  469. package/src/renderers/webgl-fallback/WebGLBackend.js +245 -182
  470. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +184 -30
  471. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
  472. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
  473. package/src/renderers/webgl-fallback/utils/WebGLState.js +9 -8
  474. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +171 -19
  475. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
  476. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
  477. package/src/renderers/webgpu/WebGPUBackend.js +205 -128
  478. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
  479. package/src/renderers/webgpu/WebGPURenderer.js +3 -2
  480. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +198 -121
  481. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +8 -1
  482. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +49 -33
  483. package/src/renderers/webgpu/utils/WebGPUConstants.js +14 -3
  484. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +56 -37
  485. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
  486. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +266 -158
  487. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
  488. package/src/renderers/webgpu/utils/WebGPUUtils.js +24 -19
  489. package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
  490. package/src/renderers/webxr/WebXRManager.js +89 -13
  491. package/src/textures/ExternalTexture.js +56 -0
  492. package/src/textures/FramebufferTexture.js +2 -2
  493. package/src/textures/Source.js +14 -3
  494. package/src/textures/Texture.js +3 -2
  495. package/src/textures/VideoTexture.js +29 -2
  496. package/src/utils.js +67 -3
  497. package/examples/jsm/loaders/RGBMLoader.js +0 -1148
  498. package/examples/jsm/tsl/display/TRAAPassNode.js +0 -452
  499. package/src/nodes/utils/EquirectUVNode.js +0 -65
  500. package/src/nodes/utils/MatcapUVNode.js +0 -49
  501. package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
@@ -153,6 +153,40 @@ class Bindings extends DataMap {
153
153
 
154
154
  }
155
155
 
156
+ /**
157
+ * Deletes the bindings for the given compute node.
158
+ *
159
+ * @param {Node} computeNode - The compute node.
160
+ */
161
+ deleteForCompute( computeNode ) {
162
+
163
+ const bindings = this.nodes.getForCompute( computeNode ).bindings;
164
+
165
+ for ( const bindGroup of bindings ) {
166
+
167
+ this.delete( bindGroup );
168
+
169
+ }
170
+
171
+ }
172
+
173
+ /**
174
+ * Deletes the bindings for the given renderObject node.
175
+ *
176
+ * @param {RenderObject} renderObject - The renderObject.
177
+ */
178
+ deleteForRender( renderObject ) {
179
+
180
+ const bindings = renderObject.getBindings();
181
+
182
+ for ( const bindGroup of bindings ) {
183
+
184
+ this.delete( bindGroup );
185
+
186
+ }
187
+
188
+ }
189
+
156
190
  /**
157
191
  * Updates the given array of bindings.
158
192
  *
@@ -181,6 +215,10 @@ class Bindings extends DataMap {
181
215
 
182
216
  this.textures.updateTexture( binding.texture );
183
217
 
218
+ } else if ( binding.isSampler ) {
219
+
220
+ this.textures.updateSampler( binding.texture );
221
+
184
222
  } else if ( binding.isStorageBuffer ) {
185
223
 
186
224
  const attribute = binding.attribute;
@@ -244,24 +282,33 @@ class Bindings extends DataMap {
244
282
 
245
283
  }
246
284
 
247
- } else if ( binding.isSampler ) {
248
-
249
- binding.update();
250
-
251
285
  } else if ( binding.isSampledTexture ) {
252
286
 
253
- const texturesTextureData = this.textures.get( binding.texture );
254
-
255
- if ( binding.needsBindingsUpdate( texturesTextureData.generation ) ) needsBindingsUpdate = true;
256
-
257
287
  const updated = binding.update();
258
288
 
289
+ // get the texture data after the update, to sync the texture reference from node
290
+
259
291
  const texture = binding.texture;
292
+ const texturesTextureData = this.textures.get( texture );
260
293
 
261
294
  if ( updated ) {
262
295
 
296
+ // version: update the texture data or create a new one
297
+
263
298
  this.textures.updateTexture( texture );
264
299
 
300
+ // generation: update the bindings if a new texture has been created
301
+
302
+ if ( binding.generation !== texturesTextureData.generation ) {
303
+
304
+ binding.generation = texturesTextureData.generation;
305
+
306
+ needsBindingsUpdate = true;
307
+
308
+ cacheBindings = false;
309
+
310
+ }
311
+
265
312
  }
266
313
 
267
314
  const textureData = backend.get( texture );
@@ -277,17 +324,7 @@ class Bindings extends DataMap {
277
324
 
278
325
  }
279
326
 
280
- if ( backend.isWebGPUBackend === true && textureData.texture === undefined && textureData.externalTexture === undefined ) {
281
-
282
- // TODO: Remove this once we found why updated === false isn't bound to a texture in the WebGPU backend
283
- console.error( 'Bindings._update: binding should be available:', binding, updated, texture, binding.textureNode.value, needsBindingsUpdate );
284
-
285
- this.textures.updateTexture( texture );
286
- needsBindingsUpdate = true;
287
-
288
- }
289
-
290
- if ( texture.isStorageTexture === true ) {
327
+ if ( texture.isStorageTexture === true && texture.mipmapsAutoUpdate === true ) {
291
328
 
292
329
  const textureData = this.get( texture );
293
330
 
@@ -305,6 +342,26 @@ class Bindings extends DataMap {
305
342
 
306
343
  }
307
344
 
345
+ } else if ( binding.isSampler ) {
346
+
347
+ const updated = binding.update();
348
+
349
+ if ( updated ) {
350
+
351
+ const samplerKey = this.textures.updateSampler( binding.texture );
352
+
353
+ if ( binding.samplerKey !== samplerKey ) {
354
+
355
+ binding.samplerKey = samplerKey;
356
+
357
+ needsBindingsUpdate = true;
358
+
359
+ cacheBindings = false;
360
+
361
+ }
362
+
363
+ }
364
+
308
365
  }
309
366
 
310
367
  }
@@ -0,0 +1,341 @@
1
+ import { EventDispatcher } from '../../core/EventDispatcher.js';
2
+ import { Vector4 } from '../../math/Vector4.js';
3
+ import { FramebufferTexture } from '../../textures/FramebufferTexture.js';
4
+ import { DepthTexture } from '../../textures/DepthTexture.js';
5
+
6
+ /**
7
+ * CanvasTarget is a class that represents the final output destination of the renderer.
8
+ *
9
+ * @augments EventDispatcher
10
+ */
11
+ class CanvasTarget extends EventDispatcher {
12
+
13
+ /**
14
+ * Constructs a new CanvasTarget.
15
+ *
16
+ * @param {HTMLCanvasElement|OffscreenCanvas} domElement - The canvas element to render to.
17
+ */
18
+ constructor( domElement ) {
19
+
20
+ super();
21
+
22
+ /**
23
+ * A reference to the canvas element the renderer is drawing to.
24
+ * This value of this property will automatically be created by
25
+ * the renderer.
26
+ *
27
+ * @type {HTMLCanvasElement|OffscreenCanvas}
28
+ */
29
+ this.domElement = domElement;
30
+
31
+ /**
32
+ * The renderer's pixel ratio.
33
+ *
34
+ * @private
35
+ * @type {number}
36
+ * @default 1
37
+ */
38
+ this._pixelRatio = 1;
39
+
40
+ /**
41
+ * The width of the renderer's default framebuffer in logical pixel unit.
42
+ *
43
+ * @private
44
+ * @type {number}
45
+ */
46
+ this._width = this.domElement.width;
47
+
48
+ /**
49
+ * The height of the renderer's default framebuffer in logical pixel unit.
50
+ *
51
+ * @private
52
+ * @type {number}
53
+ */
54
+ this._height = this.domElement.height;
55
+
56
+ /**
57
+ * The viewport of the renderer in logical pixel unit.
58
+ *
59
+ * @private
60
+ * @type {Vector4}
61
+ */
62
+ this._viewport = new Vector4( 0, 0, this._width, this._height );
63
+
64
+ /**
65
+ * The scissor rectangle of the renderer in logical pixel unit.
66
+ *
67
+ * @private
68
+ * @type {Vector4}
69
+ */
70
+ this._scissor = new Vector4( 0, 0, this._width, this._height );
71
+
72
+ /**
73
+ * Whether the scissor test should be enabled or not.
74
+ *
75
+ * @private
76
+ * @type {boolean}
77
+ */
78
+ this._scissorTest = false;
79
+
80
+ /**
81
+ * The color texture of the default framebuffer.
82
+ *
83
+ * @type {FramebufferTexture}
84
+ */
85
+ this.colorTexture = new FramebufferTexture();
86
+
87
+ /**
88
+ * The depth texture of the default framebuffer.
89
+ *
90
+ * @type {DepthTexture}
91
+ */
92
+ this.depthTexture = new DepthTexture();
93
+
94
+ }
95
+
96
+ /**
97
+ * Returns the pixel ratio.
98
+ *
99
+ * @return {number} The pixel ratio.
100
+ */
101
+ getPixelRatio() {
102
+
103
+ return this._pixelRatio;
104
+
105
+ }
106
+
107
+ /**
108
+ * Returns the drawing buffer size in physical pixels. This method honors the pixel ratio.
109
+ *
110
+ * @param {Vector2} target - The method writes the result in this target object.
111
+ * @return {Vector2} The drawing buffer size.
112
+ */
113
+ getDrawingBufferSize( target ) {
114
+
115
+ return target.set( this._width * this._pixelRatio, this._height * this._pixelRatio ).floor();
116
+
117
+ }
118
+
119
+ /**
120
+ * Returns the renderer's size in logical pixels. This method does not honor the pixel ratio.
121
+ *
122
+ * @param {Vector2} target - The method writes the result in this target object.
123
+ * @return {Vector2} The renderer's size in logical pixels.
124
+ */
125
+ getSize( target ) {
126
+
127
+ return target.set( this._width, this._height );
128
+
129
+ }
130
+
131
+ /**
132
+ * Sets the given pixel ratio and resizes the canvas if necessary.
133
+ *
134
+ * @param {number} [value=1] - The pixel ratio.
135
+ */
136
+ setPixelRatio( value = 1 ) {
137
+
138
+ if ( this._pixelRatio === value ) return;
139
+
140
+ this._pixelRatio = value;
141
+
142
+ this.setSize( this._width, this._height, false );
143
+
144
+ }
145
+
146
+ /**
147
+ * This method allows to define the drawing buffer size by specifying
148
+ * width, height and pixel ratio all at once. The size of the drawing
149
+ * buffer is computed with this formula:
150
+ * ```js
151
+ * size.x = width * pixelRatio;
152
+ * size.y = height * pixelRatio;
153
+ * ```
154
+ *
155
+ * @param {number} width - The width in logical pixels.
156
+ * @param {number} height - The height in logical pixels.
157
+ * @param {number} pixelRatio - The pixel ratio.
158
+ */
159
+ setDrawingBufferSize( width, height, pixelRatio ) {
160
+
161
+ // Renderer can't be resized while presenting in XR.
162
+ if ( this.xr && this.xr.isPresenting ) return;
163
+
164
+ this._width = width;
165
+ this._height = height;
166
+
167
+ this._pixelRatio = pixelRatio;
168
+
169
+ this.domElement.width = Math.floor( width * pixelRatio );
170
+ this.domElement.height = Math.floor( height * pixelRatio );
171
+
172
+ this.setViewport( 0, 0, width, height );
173
+
174
+ this._dispatchResize();
175
+
176
+ }
177
+
178
+ /**
179
+ * Sets the size of the renderer.
180
+ *
181
+ * @param {number} width - The width in logical pixels.
182
+ * @param {number} height - The height in logical pixels.
183
+ * @param {boolean} [updateStyle=true] - Whether to update the `style` attribute of the canvas or not.
184
+ */
185
+ setSize( width, height, updateStyle = true ) {
186
+
187
+ // Renderer can't be resized while presenting in XR.
188
+ if ( this.xr && this.xr.isPresenting ) return;
189
+
190
+ this._width = width;
191
+ this._height = height;
192
+
193
+ this.domElement.width = Math.floor( width * this._pixelRatio );
194
+ this.domElement.height = Math.floor( height * this._pixelRatio );
195
+
196
+ if ( updateStyle === true ) {
197
+
198
+ this.domElement.style.width = width + 'px';
199
+ this.domElement.style.height = height + 'px';
200
+
201
+ }
202
+
203
+ this.setViewport( 0, 0, width, height );
204
+
205
+ this._dispatchResize();
206
+
207
+ }
208
+
209
+ /**
210
+ * Returns the scissor rectangle.
211
+ *
212
+ * @param {Vector4} target - The method writes the result in this target object.
213
+ * @return {Vector4} The scissor rectangle.
214
+ */
215
+ getScissor( target ) {
216
+
217
+ const scissor = this._scissor;
218
+
219
+ target.x = scissor.x;
220
+ target.y = scissor.y;
221
+ target.width = scissor.width;
222
+ target.height = scissor.height;
223
+
224
+ return target;
225
+
226
+ }
227
+
228
+ /**
229
+ * Defines the scissor rectangle.
230
+ *
231
+ * @param {number | Vector4} x - The horizontal coordinate for the lower left corner of the box in logical pixel unit.
232
+ * Instead of passing four arguments, the method also works with a single four-dimensional vector.
233
+ * @param {number} y - The vertical coordinate for the lower left corner of the box in logical pixel unit.
234
+ * @param {number} width - The width of the scissor box in logical pixel unit.
235
+ * @param {number} height - The height of the scissor box in logical pixel unit.
236
+ */
237
+ setScissor( x, y, width, height ) {
238
+
239
+ const scissor = this._scissor;
240
+
241
+ if ( x.isVector4 ) {
242
+
243
+ scissor.copy( x );
244
+
245
+ } else {
246
+
247
+ scissor.set( x, y, width, height );
248
+
249
+ }
250
+
251
+ }
252
+
253
+ /**
254
+ * Returns the scissor test value.
255
+ *
256
+ * @return {boolean} Whether the scissor test should be enabled or not.
257
+ */
258
+ getScissorTest() {
259
+
260
+ return this._scissorTest;
261
+
262
+ }
263
+
264
+ /**
265
+ * Defines the scissor test.
266
+ *
267
+ * @param {boolean} boolean - Whether the scissor test should be enabled or not.
268
+ */
269
+ setScissorTest( boolean ) {
270
+
271
+ this._scissorTest = boolean;
272
+
273
+ }
274
+
275
+ /**
276
+ * Returns the viewport definition.
277
+ *
278
+ * @param {Vector4} target - The method writes the result in this target object.
279
+ * @return {Vector4} The viewport definition.
280
+ */
281
+ getViewport( target ) {
282
+
283
+ return target.copy( this._viewport );
284
+
285
+ }
286
+
287
+ /**
288
+ * Defines the viewport.
289
+ *
290
+ * @param {number | Vector4} x - The horizontal coordinate for the lower left corner of the viewport origin in logical pixel unit.
291
+ * @param {number} y - The vertical coordinate for the lower left corner of the viewport origin in logical pixel unit.
292
+ * @param {number} width - The width of the viewport in logical pixel unit.
293
+ * @param {number} height - The height of the viewport in logical pixel unit.
294
+ * @param {number} minDepth - The minimum depth value of the viewport. WebGPU only.
295
+ * @param {number} maxDepth - The maximum depth value of the viewport. WebGPU only.
296
+ */
297
+ setViewport( x, y, width, height, minDepth = 0, maxDepth = 1 ) {
298
+
299
+ const viewport = this._viewport;
300
+
301
+ if ( x.isVector4 ) {
302
+
303
+ viewport.copy( x );
304
+
305
+ } else {
306
+
307
+ viewport.set( x, y, width, height );
308
+
309
+ }
310
+
311
+ viewport.minDepth = minDepth;
312
+ viewport.maxDepth = maxDepth;
313
+
314
+ }
315
+
316
+ /**
317
+ * Dispatches the resize event.
318
+ *
319
+ * @private
320
+ */
321
+ _dispatchResize() {
322
+
323
+ this.dispatchEvent( { type: 'resize' } );
324
+
325
+ }
326
+
327
+ /**
328
+ * Frees the GPU-related resources allocated by this instance. Call this
329
+ * method whenever this instance is no longer used in your app.
330
+ *
331
+ * @fires RenderTarget#dispose
332
+ */
333
+ dispose() {
334
+
335
+ this.dispatchEvent( { type: 'dispose' } );
336
+
337
+ }
338
+
339
+ }
340
+
341
+ export default CanvasTarget;
@@ -16,7 +16,7 @@ class ChainMap {
16
16
  /**
17
17
  * The root Weak Map.
18
18
  *
19
- * @type {WeakMap}
19
+ * @type {WeakMap<Object, WeakMap>}
20
20
  */
21
21
  this.weakMap = new WeakMap();
22
22
 
@@ -34,8 +34,8 @@ class Color4 extends Color {
34
34
  * string argument to this method.
35
35
  *
36
36
  * @param {number|string|Color} r - The red value.
37
- * @param {number} g - The green value.
38
- * @param {number} b - The blue value.
37
+ * @param {number} [g] - The green value.
38
+ * @param {number} [b] - The blue value.
39
39
  * @param {number} [a=1] - The alpha value.
40
40
  * @return {Color4} A reference to this object.
41
41
  */
@@ -1,4 +1,4 @@
1
- import { equirectUV } from '../../nodes/utils/EquirectUVNode.js';
1
+ import { equirectUV } from '../../nodes/utils/EquirectUV.js';
2
2
  import { texture as TSL_Texture } from '../../nodes/accessors/TextureNode.js';
3
3
  import { positionWorldDirection } from '../../nodes/accessors/Position.js';
4
4
  import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
@@ -15,7 +15,7 @@ class DataMap {
15
15
  * `DataMap` internally uses a weak map
16
16
  * to manage its data.
17
17
  *
18
- * @type {WeakMap}
18
+ * @type {WeakMap<Object, Object>}
19
19
  */
20
20
  this.data = new WeakMap();
21
21
 
@@ -117,6 +117,14 @@ class Geometries extends DataMap {
117
117
  */
118
118
  this.attributeCall = new WeakMap();
119
119
 
120
+ /**
121
+ * Stores the event listeners attached to geometries.
122
+ *
123
+ * @private
124
+ * @type {Map<BufferGeometry,Function>}
125
+ */
126
+ this._geometryDisposeListeners = new Map();
127
+
120
128
  }
121
129
 
122
130
  /**
@@ -189,10 +197,16 @@ class Geometries extends DataMap {
189
197
 
190
198
  geometry.removeEventListener( 'dispose', onDispose );
191
199
 
200
+ this._geometryDisposeListeners.delete( geometry );
201
+
192
202
  };
193
203
 
194
204
  geometry.addEventListener( 'dispose', onDispose );
195
205
 
206
+ // see #31798 why tracking separate remove listeners is required right now
207
+ // TODO: Re-evaluate how onDispose() is managed in this component
208
+ this._geometryDisposeListeners.set( geometry, onDispose );
209
+
196
210
  }
197
211
 
198
212
  /**
@@ -339,6 +353,18 @@ class Geometries extends DataMap {
339
353
 
340
354
  }
341
355
 
356
+ dispose() {
357
+
358
+ for ( const [ geometry, onDispose ] of this._geometryDisposeListeners.entries() ) {
359
+
360
+ geometry.removeEventListener( 'dispose', onDispose );
361
+
362
+ }
363
+
364
+ this._geometryDisposeListeners.clear();
365
+
366
+ }
367
+
342
368
  }
343
369
 
344
370
  export default Geometries;
@@ -1,3 +1,5 @@
1
+ import { error } from '../../utils.js';
2
+
1
3
  /**
2
4
  * This renderer module provides a series of statistical information
3
5
  * about the GPU memory and the rendering process. Useful for debugging
@@ -52,7 +54,7 @@ class Info {
52
54
  * @property {number} triangles - The number of rendered triangle primitives of the current frame.
53
55
  * @property {number} points - The number of rendered point primitives of the current frame.
54
56
  * @property {number} lines - The number of rendered line primitives of the current frame.
55
- * @property {number} timestamp - The timestamp of the frame when using `renderer.renderAsync()`.
57
+ * @property {number} timestamp - The timestamp of the frame.
56
58
  */
57
59
  this.render = {
58
60
  calls: 0,
@@ -123,7 +125,7 @@ class Info {
123
125
 
124
126
  } else {
125
127
 
126
- console.error( 'THREE.WebGPUInfo: Unknown object type.' );
128
+ error( 'WebGPUInfo: Unknown object type.' );
127
129
 
128
130
  }
129
131