super-three 0.173.5 → 0.176.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 (832) hide show
  1. package/build/three.cjs +21993 -1359
  2. package/build/three.core.js +21129 -1188
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +835 -142
  5. package/build/three.module.min.js +1 -1
  6. package/build/three.tsl.js +8 -2
  7. package/build/three.tsl.min.js +1 -1
  8. package/build/three.webgpu.js +19493 -17617
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +19477 -17617
  11. package/build/three.webgpu.nodes.min.js +1 -1
  12. package/examples/jsm/Addons.js +1 -1
  13. package/examples/jsm/animation/AnimationClipCreator.js +57 -6
  14. package/examples/jsm/animation/CCDIKSolver.js +144 -42
  15. package/examples/jsm/capabilities/WebGL.js +28 -3
  16. package/examples/jsm/capabilities/WebGPU.js +16 -6
  17. package/examples/jsm/controls/ArcballControls.js +424 -154
  18. package/examples/jsm/controls/DragControls.js +93 -2
  19. package/examples/jsm/controls/FirstPersonControls.js +113 -4
  20. package/examples/jsm/controls/FlyControls.js +49 -2
  21. package/examples/jsm/controls/MapControls.js +42 -9
  22. package/examples/jsm/controls/OrbitControls.js +345 -42
  23. package/examples/jsm/controls/PointerLockControls.js +111 -9
  24. package/examples/jsm/controls/TrackballControls.js +159 -8
  25. package/examples/jsm/controls/TransformControls.js +252 -6
  26. package/examples/jsm/csm/CSM.js +226 -15
  27. package/examples/jsm/csm/CSMFrustum.js +52 -0
  28. package/examples/jsm/csm/CSMHelper.js +47 -0
  29. package/examples/jsm/csm/CSMShader.js +10 -1
  30. package/examples/jsm/csm/CSMShadowNode.js +156 -13
  31. package/examples/jsm/curves/CurveExtras.js +289 -31
  32. package/examples/jsm/curves/NURBSCurve.js +57 -14
  33. package/examples/jsm/curves/NURBSSurface.js +50 -6
  34. package/examples/jsm/curves/NURBSUtils.js +96 -112
  35. package/examples/jsm/curves/NURBSVolume.js +22 -4
  36. package/examples/jsm/effects/AnaglyphEffect.js +30 -0
  37. package/examples/jsm/effects/AsciiEffect.js +60 -15
  38. package/examples/jsm/effects/OutlineEffect.js +59 -111
  39. package/examples/jsm/effects/ParallaxBarrierEffect.js +28 -0
  40. package/examples/jsm/effects/PeppersGhostEffect.js +21 -2
  41. package/examples/jsm/effects/StereoEffect.js +29 -0
  42. package/examples/jsm/environments/DebugEnvironment.js +49 -0
  43. package/examples/jsm/environments/RoomEnvironment.js +23 -4
  44. package/examples/jsm/exporters/DRACOExporter.js +53 -13
  45. package/examples/jsm/exporters/EXRExporter.js +37 -8
  46. package/examples/jsm/exporters/GLTFExporter.js +194 -71
  47. package/examples/jsm/exporters/KTX2Exporter.js +20 -0
  48. package/examples/jsm/exporters/OBJExporter.js +18 -0
  49. package/examples/jsm/exporters/PLYExporter.js +39 -9
  50. package/examples/jsm/exporters/STLExporter.js +25 -5
  51. package/examples/jsm/exporters/USDZExporter.js +70 -3
  52. package/examples/jsm/geometries/BoxLineGeometry.js +22 -0
  53. package/examples/jsm/geometries/ConvexGeometry.js +18 -0
  54. package/examples/jsm/geometries/DecalGeometry.js +20 -9
  55. package/examples/jsm/geometries/ParametricFunctions.js +97 -0
  56. package/examples/jsm/geometries/ParametricGeometry.js +37 -5
  57. package/examples/jsm/geometries/RoundedBoxGeometry.js +21 -0
  58. package/examples/jsm/geometries/TeapotGeometry.js +22 -38
  59. package/examples/jsm/geometries/TextGeometry.js +44 -16
  60. package/examples/jsm/helpers/LightProbeHelper.js +35 -0
  61. package/examples/jsm/helpers/LightProbeHelperGPU.js +36 -0
  62. package/examples/jsm/helpers/OctreeHelper.js +35 -0
  63. package/examples/jsm/helpers/PositionalAudioHelper.js +59 -0
  64. package/examples/jsm/helpers/RectAreaLightHelper.js +35 -3
  65. package/examples/jsm/helpers/TextureHelper.js +27 -0
  66. package/examples/jsm/helpers/TextureHelperGPU.js +28 -0
  67. package/examples/jsm/helpers/VertexNormalsHelper.js +58 -2
  68. package/examples/jsm/helpers/VertexTangentsHelper.js +46 -2
  69. package/examples/jsm/helpers/ViewHelper.js +75 -1
  70. package/examples/jsm/interactive/HTMLMesh.js +25 -0
  71. package/examples/jsm/interactive/InteractiveGroup.js +65 -5
  72. package/examples/jsm/interactive/SelectionBox.js +74 -9
  73. package/examples/jsm/interactive/SelectionHelper.js +74 -30
  74. package/examples/jsm/libs/motion-controllers.module.js +1 -1
  75. package/examples/jsm/lighting/TiledLighting.js +23 -0
  76. package/examples/jsm/lights/LightProbeGenerator.js +26 -1
  77. package/examples/jsm/lights/RectAreaLightTexturesLib.js +48 -13
  78. package/examples/jsm/lights/RectAreaLightUniformsLib.js +15 -0
  79. package/examples/jsm/lines/Line2.js +36 -0
  80. package/examples/jsm/lines/LineGeometry.js +52 -0
  81. package/examples/jsm/lines/LineMaterial.js +95 -0
  82. package/examples/jsm/lines/LineSegments2.js +51 -2
  83. package/examples/jsm/lines/LineSegmentsGeometry.js +62 -8
  84. package/examples/jsm/lines/Wireframe.js +38 -2
  85. package/examples/jsm/lines/WireframeGeometry2.js +24 -0
  86. package/examples/jsm/lines/webgpu/Line2.js +25 -1
  87. package/examples/jsm/lines/webgpu/LineSegments2.js +44 -6
  88. package/examples/jsm/lines/webgpu/Wireframe.js +30 -2
  89. package/examples/jsm/loaders/3DMLoader.js +71 -2
  90. package/examples/jsm/loaders/3MFLoader.js +51 -5
  91. package/examples/jsm/loaders/AMFLoader.js +31 -12
  92. package/examples/jsm/loaders/BVHLoader.js +57 -11
  93. package/examples/jsm/loaders/ColladaLoader.js +36 -1
  94. package/examples/jsm/loaders/DDSLoader.js +25 -1
  95. package/examples/jsm/loaders/DRACOLoader.js +73 -1
  96. package/examples/jsm/loaders/EXRLoader.js +40 -8
  97. package/examples/jsm/loaders/FBXLoader.js +71 -14
  98. package/examples/jsm/loaders/FontLoader.js +60 -2
  99. package/examples/jsm/loaders/GCodeLoader.js +33 -5
  100. package/examples/jsm/loaders/GLTFLoader.js +222 -9
  101. package/examples/jsm/loaders/HDRCubeTextureLoader.js +48 -0
  102. package/examples/jsm/loaders/IESLoader.js +41 -0
  103. package/examples/jsm/loaders/KMZLoader.js +32 -0
  104. package/examples/jsm/loaders/KTX2Loader.js +87 -19
  105. package/examples/jsm/loaders/KTXLoader.js +26 -6
  106. package/examples/jsm/loaders/LDrawLoader.js +115 -5
  107. package/examples/jsm/loaders/LUT3dlLoader.js +46 -10
  108. package/examples/jsm/loaders/LUTCubeLoader.js +45 -9
  109. package/examples/jsm/loaders/LUTImageLoader.js +78 -38
  110. package/examples/jsm/loaders/LWOLoader.js +46 -7
  111. package/examples/jsm/loaders/LottieLoader.js +37 -0
  112. package/examples/jsm/loaders/MD2Loader.js +36 -1
  113. package/examples/jsm/loaders/MDDLoader.js +56 -12
  114. package/examples/jsm/loaders/MTLLoader.js +56 -33
  115. package/examples/jsm/loaders/MaterialXLoader.js +33 -0
  116. package/examples/jsm/loaders/NRRDLoader.js +36 -5
  117. package/examples/jsm/loaders/OBJLoader.js +48 -1
  118. package/examples/jsm/loaders/PCDLoader.js +47 -0
  119. package/examples/jsm/loaders/PDBLoader.js +40 -2
  120. package/examples/jsm/loaders/PLYLoader.js +62 -32
  121. package/examples/jsm/loaders/PVRLoader.js +23 -5
  122. package/examples/jsm/loaders/RGBELoader.js +38 -5
  123. package/examples/jsm/loaders/RGBMLoader.js +67 -1
  124. package/examples/jsm/loaders/STLLoader.js +47 -38
  125. package/examples/jsm/loaders/SVGLoader.js +113 -20
  126. package/examples/jsm/loaders/TDSLoader.js +90 -70
  127. package/examples/jsm/loaders/TGALoader.js +22 -0
  128. package/examples/jsm/loaders/TIFFLoader.js +22 -0
  129. package/examples/jsm/loaders/TTFLoader.js +36 -2
  130. package/examples/jsm/loaders/USDZLoader.js +34 -1
  131. package/examples/jsm/loaders/UltraHDRLoader.js +58 -12
  132. package/examples/jsm/loaders/VOXLoader.js +57 -0
  133. package/examples/jsm/loaders/VRMLLoader.js +32 -1
  134. package/examples/jsm/loaders/VTKLoader.js +38 -0
  135. package/examples/jsm/loaders/XYZLoader.js +35 -0
  136. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +39 -0
  137. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +39 -0
  138. package/examples/jsm/materials/MeshPostProcessingMaterial.js +24 -2
  139. package/examples/jsm/math/Capsule.js +89 -14
  140. package/examples/jsm/math/ColorConverter.js +21 -0
  141. package/examples/jsm/math/ColorSpaces.js +53 -0
  142. package/examples/jsm/math/ConvexHull.js +514 -92
  143. package/examples/jsm/math/ImprovedNoise.js +14 -2
  144. package/examples/jsm/math/Lut.js +111 -0
  145. package/examples/jsm/math/MeshSurfaceSampler.js +76 -13
  146. package/examples/jsm/math/OBB.js +139 -46
  147. package/examples/jsm/math/Octree.js +132 -5
  148. package/examples/jsm/math/SimplexNoise.js +66 -42
  149. package/examples/jsm/misc/ConvexObjectBreaker.js +43 -25
  150. package/examples/jsm/misc/GPUComputationRenderer.js +92 -17
  151. package/examples/jsm/misc/Gyroscope.js +11 -0
  152. package/examples/jsm/misc/MD2Character.js +115 -2
  153. package/examples/jsm/misc/MD2CharacterComplex.js +170 -8
  154. package/examples/jsm/misc/MorphAnimMesh.js +43 -0
  155. package/examples/jsm/misc/MorphBlendMesh.js +102 -0
  156. package/examples/jsm/misc/ProgressiveLightMap.js +40 -15
  157. package/examples/jsm/misc/ProgressiveLightMapGPU.js +33 -13
  158. package/examples/jsm/misc/RollerCoaster.js +52 -0
  159. package/examples/jsm/misc/Timer.js +105 -13
  160. package/examples/jsm/misc/TubePainter.js +53 -0
  161. package/examples/jsm/misc/Volume.js +109 -73
  162. package/examples/jsm/misc/VolumeSlice.js +91 -48
  163. package/examples/jsm/modifiers/CurveModifier.js +57 -34
  164. package/examples/jsm/modifiers/CurveModifierGPU.js +36 -17
  165. package/examples/jsm/modifiers/EdgeSplitModifier.js +18 -0
  166. package/examples/jsm/modifiers/SimplifyModifier.js +20 -8
  167. package/examples/jsm/modifiers/TessellateModifier.js +33 -2
  168. package/examples/jsm/objects/GroundedSkybox.js +23 -5
  169. package/examples/jsm/objects/Lensflare.js +91 -2
  170. package/examples/jsm/objects/LensflareMesh.js +53 -2
  171. package/examples/jsm/objects/MarchingCubes.js +88 -5
  172. package/examples/jsm/objects/Reflector.js +75 -2
  173. package/examples/jsm/objects/ReflectorForSSRPass.js +39 -0
  174. package/examples/jsm/objects/Refractor.js +61 -0
  175. package/examples/jsm/objects/ShadowMesh.js +53 -4
  176. package/examples/jsm/objects/Sky.js +26 -9
  177. package/examples/jsm/objects/SkyMesh.js +60 -9
  178. package/examples/jsm/objects/Water.js +44 -5
  179. package/examples/jsm/objects/Water2.js +42 -3
  180. package/examples/jsm/objects/Water2Mesh.js +38 -3
  181. package/examples/jsm/objects/WaterMesh.js +94 -7
  182. package/examples/jsm/physics/AmmoPhysics.js +47 -0
  183. package/examples/jsm/physics/JoltPhysics.js +48 -0
  184. package/examples/jsm/physics/RapierPhysics.js +56 -0
  185. package/examples/jsm/postprocessing/AfterimagePass.js +90 -38
  186. package/examples/jsm/postprocessing/BloomPass.js +125 -24
  187. package/examples/jsm/postprocessing/BokehPass.js +98 -22
  188. package/examples/jsm/postprocessing/ClearPass.js +53 -3
  189. package/examples/jsm/postprocessing/CubeTexturePass.js +81 -21
  190. package/examples/jsm/postprocessing/DotScreenPass.js +58 -10
  191. package/examples/jsm/postprocessing/EffectComposer.js +134 -0
  192. package/examples/jsm/postprocessing/FilmPass.js +53 -5
  193. package/examples/jsm/postprocessing/GTAOPass.js +191 -48
  194. package/examples/jsm/postprocessing/GlitchPass.js +84 -33
  195. package/examples/jsm/postprocessing/HalftonePass.js +64 -10
  196. package/examples/jsm/postprocessing/LUTPass.js +37 -8
  197. package/examples/jsm/postprocessing/MaskPass.js +90 -0
  198. package/examples/jsm/postprocessing/OutlinePass.js +268 -134
  199. package/examples/jsm/postprocessing/OutputPass.js +53 -14
  200. package/examples/jsm/postprocessing/Pass.js +98 -4
  201. package/examples/jsm/postprocessing/RenderPass.js +83 -0
  202. package/examples/jsm/postprocessing/RenderPixelatedPass.js +123 -45
  203. package/examples/jsm/postprocessing/RenderTransitionPass.js +119 -21
  204. package/examples/jsm/postprocessing/SAOPass.js +126 -53
  205. package/examples/jsm/postprocessing/SMAAPass.js +103 -71
  206. package/examples/jsm/postprocessing/SSAARenderPass.js +117 -35
  207. package/examples/jsm/postprocessing/SSAOPass.js +160 -47
  208. package/examples/jsm/postprocessing/SSRPass.js +230 -49
  209. package/examples/jsm/postprocessing/SavePass.js +68 -16
  210. package/examples/jsm/postprocessing/ShaderPass.js +64 -7
  211. package/examples/jsm/postprocessing/TAARenderPass.js +78 -24
  212. package/examples/jsm/postprocessing/TexturePass.js +71 -8
  213. package/examples/jsm/postprocessing/UnrealBloomPass.js +113 -37
  214. package/examples/jsm/renderers/CSS2DRenderer.js +77 -1
  215. package/examples/jsm/renderers/CSS3DRenderer.js +99 -3
  216. package/examples/jsm/renderers/Projector.js +18 -2
  217. package/examples/jsm/renderers/SVGRenderer.js +124 -0
  218. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +9 -5
  219. package/examples/jsm/shaders/AfterimageShader.js +6 -4
  220. package/examples/jsm/shaders/BasicShader.js +6 -2
  221. package/examples/jsm/shaders/BleachBypassShader.js +8 -4
  222. package/examples/jsm/shaders/BlendShader.js +6 -2
  223. package/examples/jsm/shaders/BokehShader.js +7 -4
  224. package/examples/jsm/shaders/BokehShader2.js +7 -3
  225. package/examples/jsm/shaders/BrightnessContrastShader.js +8 -5
  226. package/examples/jsm/shaders/ColorCorrectionShader.js +6 -2
  227. package/examples/jsm/shaders/ColorifyShader.js +6 -2
  228. package/examples/jsm/shaders/ConvolutionShader.js +7 -39
  229. package/examples/jsm/shaders/CopyShader.js +6 -2
  230. package/examples/jsm/shaders/DOFMipMapShader.js +8 -4
  231. package/examples/jsm/shaders/DepthLimitedBlurShader.js +7 -1
  232. package/examples/jsm/shaders/DigitalGlitch.js +7 -7
  233. package/examples/jsm/shaders/DotScreenShader.js +6 -4
  234. package/examples/jsm/shaders/ExposureShader.js +6 -2
  235. package/examples/jsm/shaders/FXAAShader.js +15 -7
  236. package/examples/jsm/shaders/FilmShader.js +10 -0
  237. package/examples/jsm/shaders/FocusShader.js +6 -4
  238. package/examples/jsm/shaders/FreiChenShader.js +7 -3
  239. package/examples/jsm/shaders/GTAOShader.js +33 -39
  240. package/examples/jsm/shaders/GammaCorrectionShader.js +8 -2
  241. package/examples/jsm/shaders/GodRaysShader.js +14 -5
  242. package/examples/jsm/shaders/HalftoneShader.js +11 -5
  243. package/examples/jsm/shaders/HorizontalBlurShader.js +9 -3
  244. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +6 -2
  245. package/examples/jsm/shaders/HueSaturationShader.js +7 -3
  246. package/examples/jsm/shaders/KaleidoShader.js +8 -4
  247. package/examples/jsm/shaders/LuminosityHighPassShader.js +6 -5
  248. package/examples/jsm/shaders/LuminosityShader.js +6 -3
  249. package/examples/jsm/shaders/MirrorShader.js +7 -4
  250. package/examples/jsm/shaders/NormalMapShader.js +5 -3
  251. package/examples/jsm/shaders/OutputShader.js +11 -0
  252. package/examples/jsm/shaders/PoissonDenoiseShader.js +21 -15
  253. package/examples/jsm/shaders/RGBShiftShader.js +5 -1
  254. package/examples/jsm/shaders/SAOShader.js +8 -2
  255. package/examples/jsm/shaders/SMAAShader.js +23 -1
  256. package/examples/jsm/shaders/SSAOShader.js +23 -5
  257. package/examples/jsm/shaders/SSRShader.js +25 -1
  258. package/examples/jsm/shaders/SepiaShader.js +6 -4
  259. package/examples/jsm/shaders/SobelOperatorShader.js +5 -2
  260. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +10 -8
  261. package/examples/jsm/shaders/TechnicolorShader.js +7 -4
  262. package/examples/jsm/shaders/ToonShader.js +29 -7
  263. package/examples/jsm/shaders/TriangleBlurShader.js +6 -4
  264. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +6 -3
  265. package/examples/jsm/shaders/VelocityShader.js +6 -2
  266. package/examples/jsm/shaders/VerticalBlurShader.js +6 -2
  267. package/examples/jsm/shaders/VerticalTiltShiftShader.js +5 -1
  268. package/examples/jsm/shaders/VignetteShader.js +6 -4
  269. package/examples/jsm/shaders/VolumeShader.js +7 -1
  270. package/examples/jsm/shaders/WaterRefractionShader.js +8 -0
  271. package/examples/jsm/textures/FlakesTexture.js +12 -0
  272. package/examples/jsm/transpiler/AST.js +10 -0
  273. package/examples/jsm/transpiler/GLSLDecoder.js +17 -3
  274. package/examples/jsm/transpiler/TSLEncoder.js +83 -15
  275. package/examples/jsm/transpiler/Transpiler.js +31 -0
  276. package/examples/jsm/tsl/display/AfterImageNode.js +24 -25
  277. package/examples/jsm/tsl/display/AnaglyphPassNode.js +2 -3
  278. package/examples/jsm/tsl/display/AnamorphicNode.js +8 -9
  279. package/examples/jsm/tsl/display/BleachBypass.js +1 -2
  280. package/examples/jsm/tsl/display/BloomNode.js +15 -16
  281. package/examples/jsm/tsl/display/DenoiseNode.js +9 -10
  282. package/examples/jsm/tsl/display/DepthOfFieldNode.js +5 -6
  283. package/examples/jsm/tsl/display/DotScreenNode.js +5 -6
  284. package/examples/jsm/tsl/display/FXAANode.js +2 -3
  285. package/examples/jsm/tsl/display/FilmNode.js +9 -8
  286. package/examples/jsm/tsl/display/GTAONode.js +11 -12
  287. package/examples/jsm/tsl/display/GaussianBlurNode.js +14 -14
  288. package/examples/jsm/tsl/display/LensflareNode.js +15 -16
  289. package/examples/jsm/tsl/display/Lut3DNode.js +4 -5
  290. package/examples/jsm/tsl/display/MotionBlur.js +1 -2
  291. package/examples/jsm/tsl/display/OutlineNode.js +7 -8
  292. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -3
  293. package/examples/jsm/tsl/display/PixelationPassNode.js +14 -15
  294. package/examples/jsm/tsl/display/RGBShiftNode.js +5 -6
  295. package/examples/jsm/tsl/display/SMAANode.js +13 -7
  296. package/examples/jsm/tsl/display/SSAAPassNode.js +7 -7
  297. package/examples/jsm/tsl/display/SSRNode.js +6 -7
  298. package/examples/jsm/tsl/display/Sepia.js +1 -2
  299. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -3
  300. package/examples/jsm/tsl/display/StereoCompositePassNode.js +4 -4
  301. package/examples/jsm/tsl/display/StereoPassNode.js +2 -3
  302. package/examples/jsm/tsl/display/TRAAPassNode.js +11 -10
  303. package/examples/jsm/tsl/display/TransitionNode.js +4 -5
  304. package/examples/jsm/tsl/display/hashBlur.js +1 -2
  305. package/examples/jsm/tsl/lighting/TiledLightsNode.js +33 -7
  306. package/examples/jsm/tsl/math/Bayer.js +31 -0
  307. package/examples/jsm/tsl/utils/Raymarching.js +67 -0
  308. package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
  309. package/examples/jsm/utils/CameraUtils.js +10 -7
  310. package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
  311. package/examples/jsm/utils/GeometryUtils.js +12 -13
  312. package/examples/jsm/utils/LDrawUtils.js +11 -4
  313. package/examples/jsm/utils/SceneOptimizer.js +66 -20
  314. package/examples/jsm/utils/SceneUtils.js +50 -3
  315. package/examples/jsm/utils/ShadowMapViewer.js +47 -24
  316. package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
  317. package/examples/jsm/utils/SkeletonUtils.js +45 -0
  318. package/examples/jsm/utils/SortUtils.js +14 -5
  319. package/examples/jsm/utils/UVsDebug.js +9 -4
  320. package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
  321. package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
  322. package/examples/jsm/utils/WorkerPool.js +65 -2
  323. package/examples/jsm/webxr/ARButton.js +18 -0
  324. package/examples/jsm/webxr/OculusHandModel.js +83 -0
  325. package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
  326. package/examples/jsm/webxr/Text2D.js +11 -0
  327. package/examples/jsm/webxr/VRButton.js +30 -0
  328. package/examples/jsm/webxr/XRButton.js +22 -0
  329. package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
  330. package/examples/jsm/webxr/XREstimatedLight.js +33 -3
  331. package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
  332. package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
  333. package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
  334. package/examples/jsm/webxr/XRPlanes.js +17 -0
  335. package/package.json +3 -4
  336. package/src/Three.TSL.js +7 -1
  337. package/src/animation/AnimationAction.js +262 -30
  338. package/src/animation/AnimationClip.js +141 -2
  339. package/src/animation/AnimationMixer.js +99 -15
  340. package/src/animation/AnimationObjectGroup.js +41 -18
  341. package/src/animation/AnimationUtils.js +169 -19
  342. package/src/animation/KeyframeTrack.js +144 -10
  343. package/src/animation/PropertyBinding.js +77 -3
  344. package/src/animation/PropertyMixer.js +72 -5
  345. package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
  346. package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
  347. package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
  348. package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
  349. package/src/animation/tracks/StringKeyframeTrack.js +33 -2
  350. package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
  351. package/src/audio/Audio.js +339 -0
  352. package/src/audio/AudioAnalyser.js +58 -1
  353. package/src/audio/AudioContext.js +15 -0
  354. package/src/audio/AudioListener.js +76 -0
  355. package/src/audio/PositionalAudio.js +107 -0
  356. package/src/cameras/ArrayCamera.js +28 -0
  357. package/src/cameras/Camera.js +47 -0
  358. package/src/cameras/CubeCamera.js +66 -0
  359. package/src/cameras/OrthographicCamera.js +109 -0
  360. package/src/cameras/PerspectiveCamera.js +163 -40
  361. package/src/cameras/StereoCamera.js +46 -0
  362. package/src/constants.js +1429 -5
  363. package/src/core/BufferAttribute.js +413 -3
  364. package/src/core/BufferGeometry.js +337 -1
  365. package/src/core/Clock.js +60 -0
  366. package/src/core/EventDispatcher.js +44 -2
  367. package/src/core/GLBufferAttribute.js +99 -0
  368. package/src/core/InstancedBufferAttribute.js +29 -0
  369. package/src/core/InstancedBufferGeometry.js +20 -0
  370. package/src/core/InstancedInterleavedBuffer.js +26 -0
  371. package/src/core/InterleavedBuffer.js +137 -3
  372. package/src/core/InterleavedBufferAttribute.js +197 -0
  373. package/src/core/Layers.js +71 -10
  374. package/src/core/Object3D.js +593 -0
  375. package/src/core/Raycaster.js +134 -1
  376. package/src/core/RenderTarget.js +170 -11
  377. package/src/core/RenderTarget3D.js +25 -0
  378. package/src/core/RenderTargetArray.js +18 -0
  379. package/src/core/Uniform.js +29 -0
  380. package/src/core/UniformsGroup.js +84 -2
  381. package/src/extras/Controls.js +88 -1
  382. package/src/extras/DataUtils.js +48 -8
  383. package/src/extras/Earcut.js +13 -780
  384. package/src/extras/ImageUtils.js +20 -2
  385. package/src/extras/PMREMGenerator.js +41 -25
  386. package/src/extras/ShapeUtils.js +24 -2
  387. package/src/extras/TextureUtils.js +95 -15
  388. package/src/extras/core/Curve.js +150 -50
  389. package/src/extras/core/CurvePath.js +63 -22
  390. package/src/extras/core/Interpolations.js +29 -3
  391. package/src/extras/core/Path.js +134 -1
  392. package/src/extras/core/Shape.js +63 -0
  393. package/src/extras/core/ShapePath.js +76 -0
  394. package/src/extras/curves/ArcCurve.js +22 -0
  395. package/src/extras/curves/CatmullRomCurve3.js +89 -18
  396. package/src/extras/curves/CubicBezierCurve.js +67 -0
  397. package/src/extras/curves/CubicBezierCurve3.js +50 -0
  398. package/src/extras/curves/EllipseCurve.js +102 -0
  399. package/src/extras/curves/LineCurve.js +36 -0
  400. package/src/extras/curves/LineCurve3.js +36 -0
  401. package/src/extras/curves/QuadraticBezierCurve.js +59 -0
  402. package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
  403. package/src/extras/curves/SplineCurve.js +48 -0
  404. package/src/extras/lib/earcut.js +685 -0
  405. package/src/geometries/BoxGeometry.js +38 -0
  406. package/src/geometries/CapsuleGeometry.js +34 -0
  407. package/src/geometries/CircleGeometry.js +40 -0
  408. package/src/geometries/ConeGeometry.js +38 -0
  409. package/src/geometries/CylinderGeometry.js +39 -0
  410. package/src/geometries/DodecahedronGeometry.js +32 -0
  411. package/src/geometries/EdgesGeometry.js +28 -0
  412. package/src/geometries/ExtrudeGeometry.js +112 -28
  413. package/src/geometries/IcosahedronGeometry.js +32 -0
  414. package/src/geometries/LatheGeometry.js +40 -0
  415. package/src/geometries/OctahedronGeometry.js +32 -0
  416. package/src/geometries/PlaneGeometry.js +34 -0
  417. package/src/geometries/PolyhedronGeometry.js +29 -0
  418. package/src/geometries/RingGeometry.js +36 -0
  419. package/src/geometries/ShapeGeometry.js +37 -0
  420. package/src/geometries/SphereGeometry.js +37 -0
  421. package/src/geometries/TetrahedronGeometry.js +32 -0
  422. package/src/geometries/TorusGeometry.js +35 -0
  423. package/src/geometries/TorusKnotGeometry.js +38 -0
  424. package/src/geometries/TubeGeometry.js +49 -0
  425. package/src/geometries/WireframeGeometry.js +32 -0
  426. package/src/helpers/ArrowHelper.js +60 -3
  427. package/src/helpers/AxesHelper.js +28 -0
  428. package/src/helpers/Box3Helper.js +28 -0
  429. package/src/helpers/BoxHelper.js +43 -7
  430. package/src/helpers/CameraHelper.js +45 -5
  431. package/src/helpers/DirectionalLightHelper.js +52 -0
  432. package/src/helpers/GridHelper.js +26 -0
  433. package/src/helpers/HemisphereLightHelper.js +39 -0
  434. package/src/helpers/PlaneHelper.js +33 -0
  435. package/src/helpers/PointLightHelper.js +43 -0
  436. package/src/helpers/PolarGridHelper.js +30 -0
  437. package/src/helpers/SkeletonHelper.js +39 -2
  438. package/src/helpers/SpotLightHelper.js +40 -0
  439. package/src/lights/AmbientLight.js +25 -0
  440. package/src/lights/DirectionalLight.js +57 -0
  441. package/src/lights/DirectionalLightShadow.js +15 -0
  442. package/src/lights/HemisphereLight.js +32 -0
  443. package/src/lights/Light.js +36 -0
  444. package/src/lights/LightProbe.js +43 -0
  445. package/src/lights/LightShadow.js +159 -0
  446. package/src/lights/PointLight.js +59 -0
  447. package/src/lights/PointLightShadow.js +21 -0
  448. package/src/lights/RectAreaLight.js +59 -0
  449. package/src/lights/SpotLight.js +102 -0
  450. package/src/lights/SpotLightShadow.js +22 -0
  451. package/src/lights/webgpu/IESSpotLight.js +21 -0
  452. package/src/loaders/AnimationLoader.js +31 -0
  453. package/src/loaders/AudioLoader.js +31 -0
  454. package/src/loaders/BufferGeometryLoader.js +34 -0
  455. package/src/loaders/Cache.js +45 -0
  456. package/src/loaders/CompressedTextureLoader.js +36 -3
  457. package/src/loaders/CubeTextureLoader.js +45 -0
  458. package/src/loaders/DataTextureLoader.js +44 -3
  459. package/src/loaders/FileLoader.js +57 -1
  460. package/src/loaders/ImageBitmapLoader.js +57 -0
  461. package/src/loaders/ImageLoader.js +30 -0
  462. package/src/loaders/Loader.js +130 -0
  463. package/src/loaders/LoaderUtils.js +18 -36
  464. package/src/loaders/LoadingManager.js +142 -0
  465. package/src/loaders/MaterialLoader.js +57 -0
  466. package/src/loaders/ObjectLoader.js +53 -0
  467. package/src/loaders/TextureLoader.js +33 -0
  468. package/src/loaders/nodes/NodeLoader.js +13 -9
  469. package/src/loaders/nodes/NodeMaterialLoader.js +6 -6
  470. package/src/loaders/nodes/NodeObjectLoader.js +12 -12
  471. package/src/materials/LineBasicMaterial.js +74 -1
  472. package/src/materials/LineDashedMaterial.js +52 -0
  473. package/src/materials/Material.js +481 -4
  474. package/src/materials/MeshBasicMaterial.js +165 -0
  475. package/src/materials/MeshDepthMaterial.js +93 -0
  476. package/src/materials/MeshDistanceMaterial.js +76 -0
  477. package/src/materials/MeshLambertMaterial.js +273 -0
  478. package/src/materials/MeshMatcapMaterial.js +142 -0
  479. package/src/materials/MeshNormalMaterial.js +113 -0
  480. package/src/materials/MeshPhongMaterial.js +288 -0
  481. package/src/materials/MeshPhysicalMaterial.js +292 -1
  482. package/src/materials/MeshStandardMaterial.js +297 -0
  483. package/src/materials/MeshToonMaterial.js +218 -0
  484. package/src/materials/PointsMaterial.js +89 -0
  485. package/src/materials/RawShaderMaterial.js +25 -0
  486. package/src/materials/ShaderMaterial.js +215 -6
  487. package/src/materials/ShadowMaterial.js +54 -0
  488. package/src/materials/SpriteMaterial.js +82 -0
  489. package/src/materials/nodes/Line2NodeMaterial.js +14 -14
  490. package/src/materials/nodes/LineBasicNodeMaterial.js +3 -3
  491. package/src/materials/nodes/LineDashedNodeMaterial.js +12 -12
  492. package/src/materials/nodes/MeshBasicNodeMaterial.js +7 -7
  493. package/src/materials/nodes/MeshLambertNodeMaterial.js +5 -5
  494. package/src/materials/nodes/MeshMatcapNodeMaterial.js +3 -3
  495. package/src/materials/nodes/MeshNormalNodeMaterial.js +8 -4
  496. package/src/materials/nodes/MeshPhongNodeMaterial.js +9 -9
  497. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +43 -43
  498. package/src/materials/nodes/MeshSSSNodeMaterial.js +18 -21
  499. package/src/materials/nodes/MeshStandardNodeMaterial.js +11 -11
  500. package/src/materials/nodes/MeshToonNodeMaterial.js +4 -4
  501. package/src/materials/nodes/NodeMaterial.js +66 -47
  502. package/src/materials/nodes/PointsNodeMaterial.js +6 -6
  503. package/src/materials/nodes/ShadowNodeMaterial.js +13 -4
  504. package/src/materials/nodes/SpriteNodeMaterial.js +17 -9
  505. package/src/materials/nodes/VolumeNodeMaterial.js +25 -128
  506. package/src/materials/nodes/manager/NodeMaterialObserver.js +8 -8
  507. package/src/math/Box2.js +177 -0
  508. package/src/math/Box3.js +243 -0
  509. package/src/math/Color.js +343 -0
  510. package/src/math/Cylindrical.js +65 -6
  511. package/src/math/Euler.js +137 -4
  512. package/src/math/Frustum.js +83 -0
  513. package/src/math/Interpolant.js +87 -8
  514. package/src/math/Line3.js +94 -0
  515. package/src/math/MathUtils.js +405 -19
  516. package/src/math/Matrix2.js +70 -0
  517. package/src/math/Matrix3.js +229 -4
  518. package/src/math/Matrix4.js +368 -3
  519. package/src/math/Plane.js +164 -2
  520. package/src/math/Quaternion.js +262 -6
  521. package/src/math/Ray.js +160 -0
  522. package/src/math/Sphere.js +147 -0
  523. package/src/math/Spherical.js +70 -8
  524. package/src/math/SphericalHarmonics3.js +112 -14
  525. package/src/math/Triangle.js +206 -2
  526. package/src/math/Vector2.js +388 -2
  527. package/src/math/Vector3.js +541 -4
  528. package/src/math/Vector4.js +393 -0
  529. package/src/math/interpolants/CubicInterpolant.js +10 -1
  530. package/src/math/interpolants/DiscreteInterpolant.js +10 -2
  531. package/src/math/interpolants/LinearInterpolant.js +13 -0
  532. package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
  533. package/src/nodes/Nodes.js +1 -0
  534. package/src/nodes/TSL.js +1 -0
  535. package/src/nodes/accessors/AccessorsUtils.js +4 -2
  536. package/src/nodes/accessors/Arrays.js +6 -6
  537. package/src/nodes/accessors/BatchNode.js +10 -11
  538. package/src/nodes/accessors/Bitangent.js +6 -2
  539. package/src/nodes/accessors/BufferAttributeNode.js +33 -31
  540. package/src/nodes/accessors/BufferNode.js +12 -13
  541. package/src/nodes/accessors/BuiltinNode.js +7 -8
  542. package/src/nodes/accessors/Camera.js +9 -2
  543. package/src/nodes/accessors/ClippingNode.js +4 -4
  544. package/src/nodes/accessors/CubeTextureNode.js +17 -19
  545. package/src/nodes/accessors/InstanceNode.js +10 -11
  546. package/src/nodes/accessors/InstancedMeshNode.js +3 -4
  547. package/src/nodes/accessors/Lights.js +12 -15
  548. package/src/nodes/accessors/MaterialNode.js +45 -9
  549. package/src/nodes/accessors/MaterialProperties.js +51 -2
  550. package/src/nodes/accessors/MaterialReferenceNode.js +11 -12
  551. package/src/nodes/accessors/ModelNode.js +20 -3
  552. package/src/nodes/accessors/ModelViewProjectionNode.js +1 -2
  553. package/src/nodes/accessors/MorphNode.js +29 -26
  554. package/src/nodes/accessors/Normal.js +11 -3
  555. package/src/nodes/accessors/Object3DNode.js +51 -16
  556. package/src/nodes/accessors/PointUVNode.js +2 -3
  557. package/src/nodes/accessors/Position.js +8 -3
  558. package/src/nodes/accessors/ReferenceBaseNode.js +29 -29
  559. package/src/nodes/accessors/ReferenceNode.js +31 -31
  560. package/src/nodes/accessors/ReflectVector.js +4 -2
  561. package/src/nodes/accessors/RendererReferenceNode.js +9 -10
  562. package/src/nodes/accessors/SceneNode.js +5 -4
  563. package/src/nodes/accessors/SkinningNode.js +53 -44
  564. package/src/nodes/accessors/StorageBufferNode.js +24 -24
  565. package/src/nodes/accessors/StorageTextureNode.js +17 -17
  566. package/src/nodes/accessors/Tangent.js +6 -2
  567. package/src/nodes/accessors/Texture3DNode.js +11 -12
  568. package/src/nodes/accessors/TextureBicubic.js +2 -3
  569. package/src/nodes/accessors/TextureNode.js +68 -47
  570. package/src/nodes/accessors/TextureSizeNode.js +5 -6
  571. package/src/nodes/accessors/UV.js +2 -3
  572. package/src/nodes/accessors/UniformArrayNode.js +24 -24
  573. package/src/nodes/accessors/UserDataNode.js +11 -12
  574. package/src/nodes/accessors/VelocityNode.js +4 -5
  575. package/src/nodes/accessors/VertexColorNode.js +7 -8
  576. package/src/nodes/code/CodeNode.js +15 -13
  577. package/src/nodes/code/ExpressionNode.js +8 -9
  578. package/src/nodes/code/FunctionCallNode.js +29 -9
  579. package/src/nodes/code/FunctionNode.js +1 -1
  580. package/src/nodes/code/ScriptableNode.js +27 -28
  581. package/src/nodes/code/ScriptableValueNode.js +11 -12
  582. package/src/nodes/core/ArrayNode.js +29 -12
  583. package/src/nodes/core/AssignNode.js +4 -5
  584. package/src/nodes/core/AttributeNode.js +8 -9
  585. package/src/nodes/core/BypassNode.js +3 -4
  586. package/src/nodes/core/CacheNode.js +5 -6
  587. package/src/nodes/core/ConstNode.js +4 -4
  588. package/src/nodes/core/ContextNode.js +9 -9
  589. package/src/nodes/core/IndexNode.js +8 -4
  590. package/src/nodes/core/InputNode.js +7 -7
  591. package/src/nodes/core/LightingModel.js +17 -17
  592. package/src/nodes/core/MRTNode.js +9 -10
  593. package/src/nodes/core/Node.js +49 -37
  594. package/src/nodes/core/NodeAttribute.js +7 -7
  595. package/src/nodes/core/NodeBuilder.js +248 -175
  596. package/src/nodes/core/NodeCache.js +4 -4
  597. package/src/nodes/core/NodeCode.js +6 -6
  598. package/src/nodes/core/NodeFrame.js +10 -10
  599. package/src/nodes/core/NodeFunction.js +8 -8
  600. package/src/nodes/core/NodeFunctionInput.js +8 -8
  601. package/src/nodes/core/NodeParser.js +1 -1
  602. package/src/nodes/core/NodeUniform.js +7 -7
  603. package/src/nodes/core/NodeUtils.js +22 -24
  604. package/src/nodes/core/NodeVar.js +9 -9
  605. package/src/nodes/core/NodeVarying.js +4 -4
  606. package/src/nodes/core/OutputStructNode.js +2 -3
  607. package/src/nodes/core/ParameterNode.js +6 -7
  608. package/src/nodes/core/PropertyNode.js +41 -13
  609. package/src/nodes/core/StackNode.js +11 -12
  610. package/src/nodes/core/StructNode.js +2 -3
  611. package/src/nodes/core/StructTypeNode.js +10 -6
  612. package/src/nodes/core/TempNode.js +3 -3
  613. package/src/nodes/core/UniformGroupNode.js +15 -12
  614. package/src/nodes/core/UniformNode.js +9 -10
  615. package/src/nodes/core/VarNode.js +14 -18
  616. package/src/nodes/core/VaryingNode.js +10 -10
  617. package/src/nodes/core/constants.js +0 -2
  618. package/src/nodes/display/BlendModes.js +21 -14
  619. package/src/nodes/display/BumpMapNode.js +5 -6
  620. package/src/nodes/display/ColorAdjustment.js +13 -9
  621. package/src/nodes/display/ColorSpaceFunctions.js +4 -4
  622. package/src/nodes/display/ColorSpaceNode.js +15 -12
  623. package/src/nodes/display/FrontFacingNode.js +3 -3
  624. package/src/nodes/display/NormalMapNode.js +5 -6
  625. package/src/nodes/display/PassNode.js +122 -35
  626. package/src/nodes/display/PosterizeNode.js +2 -3
  627. package/src/nodes/display/RenderOutputNode.js +8 -9
  628. package/src/nodes/display/ScreenNode.js +16 -7
  629. package/src/nodes/display/ToneMappingFunctions.js +12 -8
  630. package/src/nodes/display/ToneMappingNode.js +8 -8
  631. package/src/nodes/display/ToonOutlinePassNode.js +3 -4
  632. package/src/nodes/display/ViewportDepthNode.js +15 -7
  633. package/src/nodes/display/ViewportDepthTextureNode.js +6 -7
  634. package/src/nodes/display/ViewportSharedTextureNode.js +6 -7
  635. package/src/nodes/display/ViewportTextureNode.js +16 -16
  636. package/src/nodes/fog/Fog.js +5 -2
  637. package/src/nodes/functions/BSDF/LTC.js +45 -1
  638. package/src/nodes/functions/BasicLightingModel.js +5 -8
  639. package/src/nodes/functions/PhongLightingModel.js +6 -8
  640. package/src/nodes/functions/PhysicalLightingModel.js +40 -42
  641. package/src/nodes/functions/ShadowMaskModel.js +4 -4
  642. package/src/nodes/functions/ToonLightingModel.js +5 -6
  643. package/src/nodes/functions/VolumetricLightingModel.js +183 -0
  644. package/src/nodes/functions/material/getParallaxCorrectNormal.js +8 -8
  645. package/src/nodes/geometry/RangeNode.js +4 -5
  646. package/src/nodes/gpgpu/AtomicFunctionNode.js +33 -48
  647. package/src/nodes/gpgpu/BarrierNode.js +6 -4
  648. package/src/nodes/gpgpu/ComputeBuiltinNode.js +26 -31
  649. package/src/nodes/gpgpu/ComputeNode.js +43 -16
  650. package/src/nodes/gpgpu/WorkgroupInfoNode.js +16 -17
  651. package/src/nodes/lighting/AONode.js +2 -2
  652. package/src/nodes/lighting/AmbientLightNode.js +1 -1
  653. package/src/nodes/lighting/AnalyticLightNode.js +50 -9
  654. package/src/nodes/lighting/BasicLightMapNode.js +2 -2
  655. package/src/nodes/lighting/DirectionalLightNode.js +3 -12
  656. package/src/nodes/lighting/EnvironmentNode.js +5 -8
  657. package/src/nodes/lighting/HemisphereLightNode.js +1 -1
  658. package/src/nodes/lighting/LightProbeNode.js +1 -1
  659. package/src/nodes/lighting/LightUtils.js +1 -5
  660. package/src/nodes/lighting/LightingContextNode.js +10 -10
  661. package/src/nodes/lighting/LightingNode.js +1 -1
  662. package/src/nodes/lighting/LightsNode.js +68 -25
  663. package/src/nodes/lighting/PointLightNode.js +12 -27
  664. package/src/nodes/lighting/PointShadowNode.js +5 -6
  665. package/src/nodes/lighting/RectAreaLightNode.js +5 -10
  666. package/src/nodes/lighting/ShadowBaseNode.js +8 -9
  667. package/src/nodes/lighting/ShadowNode.js +28 -15
  668. package/src/nodes/lighting/SpotLightNode.js +8 -19
  669. package/src/nodes/math/ConditionalNode.js +26 -9
  670. package/src/nodes/math/Hash.js +2 -3
  671. package/src/nodes/math/MathNode.js +217 -150
  672. package/src/nodes/math/MathUtils.js +8 -6
  673. package/src/nodes/math/OperatorNode.js +198 -89
  674. package/src/nodes/math/TriNoise3D.js +2 -3
  675. package/src/nodes/parsers/GLSLNodeFunction.js +3 -3
  676. package/src/nodes/parsers/GLSLNodeParser.js +1 -1
  677. package/src/nodes/pmrem/PMREMNode.js +61 -37
  678. package/src/nodes/pmrem/PMREMUtils.js +2 -2
  679. package/src/nodes/procedural/Checker.js +2 -3
  680. package/src/nodes/shapes/Shapes.js +2 -3
  681. package/src/nodes/tsl/TSLBase.js +2 -1
  682. package/src/nodes/tsl/TSLCore.js +117 -19
  683. package/src/nodes/utils/ArrayElementNode.js +5 -3
  684. package/src/nodes/utils/ConvertNode.js +3 -3
  685. package/src/nodes/utils/CubeMapNode.js +7 -8
  686. package/src/nodes/utils/DebugNode.js +70 -0
  687. package/src/nodes/utils/Discard.js +5 -5
  688. package/src/nodes/utils/EquirectUVNode.js +3 -4
  689. package/src/nodes/utils/FlipNode.js +3 -3
  690. package/src/nodes/utils/FunctionOverloadingNode.js +3 -4
  691. package/src/nodes/utils/JoinNode.js +29 -4
  692. package/src/nodes/utils/LoopNode.js +67 -35
  693. package/src/nodes/utils/MatcapUVNode.js +1 -2
  694. package/src/nodes/utils/MaxMipLevelNode.js +4 -5
  695. package/src/nodes/utils/MemberNode.js +2 -2
  696. package/src/nodes/utils/Oscillators.js +8 -6
  697. package/src/nodes/utils/Packing.js +4 -4
  698. package/src/nodes/utils/PostProcessingUtils.js +6 -5
  699. package/src/nodes/utils/RTTNode.js +19 -19
  700. package/src/nodes/utils/ReflectorNode.js +35 -25
  701. package/src/nodes/utils/RemapNode.js +9 -9
  702. package/src/nodes/utils/RotateNode.js +3 -4
  703. package/src/nodes/utils/SetNode.js +3 -3
  704. package/src/nodes/utils/SplitNode.js +5 -5
  705. package/src/nodes/utils/SpriteSheetUVNode.js +4 -5
  706. package/src/nodes/utils/SpriteUtils.js +5 -6
  707. package/src/nodes/utils/StorageArrayElementNode.js +3 -4
  708. package/src/nodes/utils/Timer.js +9 -5
  709. package/src/nodes/utils/TriplanarTexturesNode.js +20 -20
  710. package/src/nodes/utils/UVUtils.js +4 -4
  711. package/src/nodes/utils/ViewportUtils.js +3 -4
  712. package/src/objects/BatchedMesh.js +319 -32
  713. package/src/objects/Bone.js +24 -0
  714. package/src/objects/ClippingGroup.js +4 -4
  715. package/src/objects/Group.js +24 -0
  716. package/src/objects/InstancedMesh.js +120 -2
  717. package/src/objects/LOD.js +99 -5
  718. package/src/objects/Line.js +82 -0
  719. package/src/objects/LineLoop.js +20 -0
  720. package/src/objects/LineSegments.js +18 -0
  721. package/src/objects/Mesh.js +75 -0
  722. package/src/objects/Points.js +60 -0
  723. package/src/objects/Skeleton.js +105 -0
  724. package/src/objects/SkinnedMesh.js +99 -5
  725. package/src/objects/Sprite.js +54 -0
  726. package/src/renderers/WebGL3DRenderTarget.js +25 -0
  727. package/src/renderers/WebGLArrayRenderTarget.js +25 -0
  728. package/src/renderers/WebGLCubeRenderTarget.js +39 -1
  729. package/src/renderers/WebGLRenderTarget.js +19 -0
  730. package/src/renderers/WebGLRenderer.js +622 -83
  731. package/src/renderers/common/Animation.js +6 -6
  732. package/src/renderers/common/Attributes.js +3 -3
  733. package/src/renderers/common/Backend.js +40 -31
  734. package/src/renderers/common/Background.js +4 -3
  735. package/src/renderers/common/BindGroup.js +5 -5
  736. package/src/renderers/common/Binding.js +4 -4
  737. package/src/renderers/common/Bindings.js +10 -0
  738. package/src/renderers/common/Buffer.js +5 -5
  739. package/src/renderers/common/BufferUtils.js +7 -9
  740. package/src/renderers/common/BundleGroup.js +6 -6
  741. package/src/renderers/common/ChainMap.js +3 -3
  742. package/src/renderers/common/ClippingContext.js +8 -8
  743. package/src/renderers/common/Color4.js +8 -8
  744. package/src/renderers/common/ComputePipeline.js +2 -2
  745. package/src/renderers/common/CubeRenderTarget.js +13 -0
  746. package/src/renderers/common/DataMap.js +2 -2
  747. package/src/renderers/common/Geometries.js +6 -6
  748. package/src/renderers/common/IndirectStorageBufferAttribute.js +3 -3
  749. package/src/renderers/common/Info.js +17 -17
  750. package/src/renderers/common/Pipeline.js +3 -3
  751. package/src/renderers/common/Pipelines.js +12 -12
  752. package/src/renderers/common/PostProcessing.js +13 -1
  753. package/src/renderers/common/ProgrammableStage.js +11 -11
  754. package/src/renderers/common/QuadMesh.js +5 -3
  755. package/src/renderers/common/RenderContext.js +24 -24
  756. package/src/renderers/common/RenderContexts.js +4 -4
  757. package/src/renderers/common/RenderList.js +16 -16
  758. package/src/renderers/common/RenderObject.js +27 -27
  759. package/src/renderers/common/RenderObjects.js +4 -4
  760. package/src/renderers/common/RenderPipeline.js +1 -1
  761. package/src/renderers/common/Renderer.js +272 -200
  762. package/src/renderers/common/RendererUtils.js +0 -2
  763. package/src/renderers/common/SampledTexture.js +20 -20
  764. package/src/renderers/common/Sampler.js +5 -5
  765. package/src/renderers/common/StorageBuffer.js +2 -2
  766. package/src/renderers/common/StorageBufferAttribute.js +4 -4
  767. package/src/renderers/common/StorageInstancedBufferAttribute.js +4 -4
  768. package/src/renderers/common/StorageTexture.js +6 -6
  769. package/src/renderers/common/Textures.js +6 -6
  770. package/src/renderers/common/TimestampQueryPool.js +66 -7
  771. package/src/renderers/common/Uniform.js +26 -26
  772. package/src/renderers/common/UniformBuffer.js +2 -2
  773. package/src/renderers/common/UniformsGroup.js +18 -18
  774. package/src/renderers/common/XRManager.js +369 -54
  775. package/src/renderers/common/XRRenderTarget.js +5 -5
  776. package/src/renderers/common/extras/PMREMGenerator.js +62 -37
  777. package/src/renderers/common/nodes/NodeBuilderState.js +7 -7
  778. package/src/renderers/common/nodes/NodeLibrary.js +13 -13
  779. package/src/renderers/common/nodes/NodeSampledTexture.js +12 -12
  780. package/src/renderers/common/nodes/NodeSampler.js +1 -1
  781. package/src/renderers/common/nodes/NodeStorageBuffer.js +1 -1
  782. package/src/renderers/common/nodes/NodeUniform.js +9 -9
  783. package/src/renderers/common/nodes/NodeUniformsGroup.js +3 -3
  784. package/src/renderers/common/nodes/Nodes.js +13 -13
  785. package/src/renderers/shaders/UniformsLib.js +1 -4
  786. package/src/renderers/shaders/UniformsUtils.js +1 -3
  787. package/src/renderers/webgl/WebGLBackground.js +4 -2
  788. package/src/renderers/webgl/WebGLState.js +19 -19
  789. package/src/renderers/webgl-fallback/WebGLBackend.js +163 -146
  790. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +4 -4
  791. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +89 -99
  792. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +2 -2
  793. package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +5 -5
  794. package/src/renderers/webgl-fallback/utils/WebGLState.js +97 -47
  795. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +79 -31
  796. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +37 -29
  797. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -3
  798. package/src/renderers/webgpu/WebGPUBackend.js +200 -119
  799. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +3 -13
  800. package/src/renderers/webgpu/WebGPURenderer.js +19 -13
  801. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +171 -178
  802. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -3
  803. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +1 -1
  804. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +43 -9
  805. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +2 -2
  806. package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
  807. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +18 -10
  808. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +9 -9
  809. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +37 -37
  810. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +31 -18
  811. package/src/renderers/webgpu/utils/WebGPUUtils.js +9 -9
  812. package/src/renderers/webxr/WebXRController.js +87 -2
  813. package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
  814. package/src/renderers/webxr/WebXRManager.js +185 -9
  815. package/src/scenes/Fog.js +60 -0
  816. package/src/scenes/FogExp2.js +51 -0
  817. package/src/scenes/Scene.js +88 -0
  818. package/src/textures/CanvasTexture.js +28 -0
  819. package/src/textures/CompressedArrayTexture.js +57 -0
  820. package/src/textures/CompressedCubeTexture.js +29 -0
  821. package/src/textures/CompressedTexture.js +64 -6
  822. package/src/textures/CubeTexture.js +52 -4
  823. package/src/textures/Data3DTexture.js +77 -0
  824. package/src/textures/DataArrayTexture.js +93 -0
  825. package/src/textures/DataTexture.js +65 -0
  826. package/src/textures/DepthTexture.js +61 -9
  827. package/src/textures/FramebufferTexture.js +62 -0
  828. package/src/textures/Source.js +69 -0
  829. package/src/textures/Texture.js +362 -3
  830. package/src/textures/VideoFrameTexture.js +43 -6
  831. package/src/textures/VideoTexture.js +49 -4
  832. package/examples/jsm/geometries/ParametricGeometries.js +0 -254
@@ -73,6 +73,9 @@ class WebGLState {
73
73
  this.currentLineWidth = null;
74
74
  this.currentClippingPlanes = 0;
75
75
 
76
+ this.currentVAO = null;
77
+ this.currentIndex = null;
78
+
76
79
  this.currentBoundFramebuffers = {};
77
80
  this.currentDrawbuffers = new WeakMap();
78
81
 
@@ -176,7 +179,7 @@ class WebGLState {
176
179
  * This method caches the state so `gl.frontFace()` is only
177
180
  * called when necessary.
178
181
  *
179
- * @param {Boolean} flipSided - Whether triangles flipped their sides or not.
182
+ * @param {boolean} flipSided - Whether triangles flipped their sides or not.
180
183
  */
181
184
  setFlipSided( flipSided ) {
182
185
 
@@ -207,7 +210,7 @@ class WebGLState {
207
210
  * This method caches the state so `gl.cullFace()` is only
208
211
  * called when necessary.
209
212
  *
210
- * @param {Number} cullFace - Defines which polygons are candidates for culling.
213
+ * @param {number} cullFace - Defines which polygons are candidates for culling.
211
214
  */
212
215
  setCullFace( cullFace ) {
213
216
 
@@ -251,7 +254,7 @@ class WebGLState {
251
254
  * This method caches the state so `gl.lineWidth()` is only
252
255
  * called when necessary.
253
256
  *
254
- * @param {Number} width - The line width.
257
+ * @param {number} width - The line width.
255
258
  */
256
259
  setLineWidth( width ) {
257
260
 
@@ -273,14 +276,14 @@ class WebGLState {
273
276
  * This method caches the state so `gl.blendEquation()`, `gl.blendEquationSeparate()`,
274
277
  * `gl.blendFunc()` and `gl.blendFuncSeparate()` are only called when necessary.
275
278
  *
276
- * @param {Number} blending - The blending type.
277
- * @param {Number} blendEquation - The blending equation.
278
- * @param {Number} blendSrc - Only relevant for custom blending. The RGB source blending factor.
279
- * @param {Number} blendDst - Only relevant for custom blending. The RGB destination blending factor.
280
- * @param {Number} blendEquationAlpha - Only relevant for custom blending. The blending equation for alpha.
281
- * @param {Number} blendSrcAlpha - Only relevant for custom blending. The alpha source blending factor.
282
- * @param {Number} blendDstAlpha - Only relevant for custom blending. The alpha destination blending factor.
283
- * @param {Boolean} premultipliedAlpha - Whether premultiplied alpha is enabled or not.
279
+ * @param {number} blending - The blending type.
280
+ * @param {number} blendEquation - The blending equation.
281
+ * @param {number} blendSrc - Only relevant for custom blending. The RGB source blending factor.
282
+ * @param {number} blendDst - Only relevant for custom blending. The RGB destination blending factor.
283
+ * @param {number} blendEquationAlpha - Only relevant for custom blending. The blending equation for alpha.
284
+ * @param {number} blendSrcAlpha - Only relevant for custom blending. The alpha source blending factor.
285
+ * @param {number} blendDstAlpha - Only relevant for custom blending. The alpha destination blending factor.
286
+ * @param {boolean} premultipliedAlpha - Whether premultiplied alpha is enabled or not.
284
287
  */
285
288
  setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) {
286
289
 
@@ -425,7 +428,7 @@ class WebGLState {
425
428
  * This method caches the state so `gl.colorMask()` is only
426
429
  * called when necessary.
427
430
  *
428
- * @param {Boolean} colorMask - The color mask.
431
+ * @param {boolean} colorMask - The color mask.
429
432
  */
430
433
  setColorMask( colorMask ) {
431
434
 
@@ -441,7 +444,7 @@ class WebGLState {
441
444
  /**
442
445
  * Specifies whether the depth test is enabled or not.
443
446
  *
444
- * @param {Boolean} depthTest - Whether the depth test is enabled or not.
447
+ * @param {boolean} depthTest - Whether the depth test is enabled or not.
445
448
  */
446
449
  setDepthTest( depthTest ) {
447
450
 
@@ -466,7 +469,7 @@ class WebGLState {
466
469
  * This method caches the state so `gl.depthMask()` is only
467
470
  * called when necessary.
468
471
  *
469
- * @param {Boolean} depthMask - The depth mask.
472
+ * @param {boolean} depthMask - The depth mask.
470
473
  */
471
474
  setDepthMask( depthMask ) {
472
475
 
@@ -485,7 +488,7 @@ class WebGLState {
485
488
  * This method caches the state so `gl.depthFunc()` is only
486
489
  * called when necessary.
487
490
  *
488
- * @param {Number} depthFunc - The depth compare function.
491
+ * @param {number} depthFunc - The depth compare function.
489
492
  */
490
493
  setDepthFunc( depthFunc ) {
491
494
 
@@ -548,12 +551,12 @@ class WebGLState {
548
551
  }
549
552
 
550
553
  /**
551
- * Specifies the viewport.
554
+ * Specifies the scissor box.
552
555
  *
553
- * @param {Number} x - The x-coordinate of the lower left corner of the viewport.
554
- * @param {Number} y - The y-coordinate of the lower left corner of the viewport.
555
- * @param {Number} width - The width of the viewport.
556
- * @param {Number} height - The height of the viewport.
556
+ * @param {number} x - The x-coordinate of the lower left corner of the viewport.
557
+ * @param {number} y - The y-coordinate of the lower left corner of the viewport.
558
+ * @param {number} width - The width of the viewport.
559
+ * @param {number} height - The height of the viewport.
557
560
  *
558
561
  */
559
562
  scissor( x, y, width, height ) {
@@ -574,10 +577,10 @@ class WebGLState {
574
577
  /**
575
578
  * Specifies the viewport.
576
579
  *
577
- * @param {Number} x - The x-coordinate of the lower left corner of the viewport.
578
- * @param {Number} y - The y-coordinate of the lower left corner of the viewport.
579
- * @param {Number} width - The width of the viewport.
580
- * @param {Number} height - The height of the viewport.
580
+ * @param {number} x - The x-coordinate of the lower left corner of the viewport.
581
+ * @param {number} y - The y-coordinate of the lower left corner of the viewport.
582
+ * @param {number} width - The width of the viewport.
583
+ * @param {number} height - The height of the viewport.
581
584
  *
582
585
  */
583
586
  viewport( x, y, width, height ) {
@@ -598,7 +601,7 @@ class WebGLState {
598
601
  /**
599
602
  * Defines the scissor test.
600
603
  *
601
- * @param {Boolean} boolean - Whether the scissor test should be enabled or not.
604
+ * @param {boolean} boolean - Whether the scissor test should be enabled or not.
602
605
  */
603
606
  setScissorTest( boolean ) {
604
607
 
@@ -619,7 +622,7 @@ class WebGLState {
619
622
  /**
620
623
  * Specifies whether the stencil test is enabled or not.
621
624
  *
622
- * @param {Boolean} stencilTest - Whether the stencil test is enabled or not.
625
+ * @param {boolean} stencilTest - Whether the stencil test is enabled or not.
623
626
  */
624
627
  setStencilTest( stencilTest ) {
625
628
 
@@ -644,7 +647,7 @@ class WebGLState {
644
647
  * This method caches the state so `gl.stencilMask()` is only
645
648
  * called when necessary.
646
649
  *
647
- * @param {Boolean} stencilMask - The stencil mask.
650
+ * @param {boolean} stencilMask - The stencil mask.
648
651
  */
649
652
  setStencilMask( stencilMask ) {
650
653
 
@@ -663,9 +666,9 @@ class WebGLState {
663
666
  * This method caches the state so `gl.stencilFunc()` is only
664
667
  * called when necessary.
665
668
  *
666
- * @param {Number} stencilFunc - The stencil compare function.
667
- * @param {Number} stencilRef - The reference value for the stencil test.
668
- * @param {Number} stencilMask - A bit-wise mask that is used to AND the reference value and the stored stencil value when the test is done.
669
+ * @param {number} stencilFunc - The stencil compare function.
670
+ * @param {number} stencilRef - The reference value for the stencil test.
671
+ * @param {number} stencilMask - A bit-wise mask that is used to AND the reference value and the stored stencil value when the test is done.
669
672
  */
670
673
  setStencilFunc( stencilFunc, stencilRef, stencilMask ) {
671
674
 
@@ -689,9 +692,9 @@ class WebGLState {
689
692
  * This method caches the state so `gl.stencilOp()` is only
690
693
  * called when necessary.
691
694
  *
692
- * @param {Number} stencilFail - The function to use when the stencil test fails.
693
- * @param {Number} stencilZFail - The function to use when the stencil test passes, but the depth test fail.
694
- * @param {Number} stencilZPass - The function to use when both the stencil test and the depth test pass,
695
+ * @param {number} stencilFail - The function to use when the stencil test fails.
696
+ * @param {number} stencilZFail - The function to use when the stencil test passes, but the depth test fail.
697
+ * @param {number} stencilZPass - The function to use when both the stencil test and the depth test pass,
695
698
  * or when the stencil test passes and there is no depth buffer or depth testing is disabled.
696
699
  */
697
700
  setStencilOp( stencilFail, stencilZFail, stencilZPass ) {
@@ -714,8 +717,8 @@ class WebGLState {
714
717
  * Configures the WebGL state for the given material.
715
718
  *
716
719
  * @param {Material} material - The material to configure the state for.
717
- * @param {Number} frontFaceCW - Whether the front faces are counter-clockwise or not.
718
- * @param {Number} hardwareClippingPlanes - The number of hardware clipping planes.
720
+ * @param {number} frontFaceCW - Whether the front faces are counter-clockwise or not.
721
+ * @param {number} hardwareClippingPlanes - The number of hardware clipping planes.
719
722
  */
720
723
  setMaterial( material, frontFaceCW, hardwareClippingPlanes ) {
721
724
 
@@ -787,9 +790,9 @@ class WebGLState {
787
790
  * This method caches the state so `gl.polygonOffset()` is only
788
791
  * called when necessary.
789
792
  *
790
- * @param {Boolean} polygonOffset - Whether polygon offset is enabled or not.
791
- * @param {Number} factor - The scale factor for the variable depth offset for each polygon.
792
- * @param {Number} units - The multiplier by which an implementation-specific value is multiplied with to create a constant depth offset.
793
+ * @param {boolean} polygonOffset - Whether polygon offset is enabled or not.
794
+ * @param {number} factor - The scale factor for the variable depth offset for each polygon.
795
+ * @param {number} units - The multiplier by which an implementation-specific value is multiplied with to create a constant depth offset.
793
796
  */
794
797
  setPolygonOffset( polygonOffset, factor, units ) {
795
798
 
@@ -823,7 +826,7 @@ class WebGLState {
823
826
  * called when necessary.
824
827
  *
825
828
  * @param {WebGLProgram} program - The WebGL program to use.
826
- * @return {Boolean} Whether a program change has been executed or not.
829
+ * @return {boolean} Whether a program change has been executed or not.
827
830
  */
828
831
  useProgram( program ) {
829
832
 
@@ -841,6 +844,53 @@ class WebGLState {
841
844
 
842
845
  }
843
846
 
847
+ /**
848
+ * Sets the vertex state by binding the given VAO and element buffer.
849
+ *
850
+ * @param {WebGLVertexArrayObject} vao - The VAO.
851
+ * @param {WebGLBuffer} indexBuffer - The index buffer.
852
+ * @return {boolean} Whether a vertex state has been changed or not.
853
+ */
854
+ setVertexState( vao, indexBuffer = null ) {
855
+
856
+ const gl = this.gl;
857
+
858
+ if ( this.currentVAO !== vao || this.currentIndex !== indexBuffer ) {
859
+
860
+ gl.bindVertexArray( vao );
861
+
862
+ if ( indexBuffer !== null ) {
863
+
864
+ gl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, indexBuffer );
865
+
866
+ }
867
+
868
+ this.currentVAO = vao;
869
+ this.currentIndex = indexBuffer;
870
+
871
+ return true;
872
+
873
+ }
874
+
875
+ return false;
876
+
877
+ }
878
+
879
+ /**
880
+ * Resets the vertex array state by resetting the VAO and element buffer.
881
+ */
882
+ resetVertexState() {
883
+
884
+ const gl = this.gl;
885
+
886
+ gl.bindVertexArray( null );
887
+ gl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, null );
888
+
889
+ this.currentVAO = null;
890
+ this.currentIndex = null;
891
+
892
+ }
893
+
844
894
  // framebuffer
845
895
 
846
896
 
@@ -850,9 +900,9 @@ class WebGLState {
850
900
  * This method caches the state so `gl.bindFramebuffer()` is only
851
901
  * called when necessary.
852
902
  *
853
- * @param {Number} target - The binding point (target).
903
+ * @param {number} target - The binding point (target).
854
904
  * @param {WebGLFramebuffer} framebuffer - The WebGL framebuffer to bind.
855
- * @return {Boolean} Whether a bind has been executed or not.
905
+ * @return {boolean} Whether a bind has been executed or not.
856
906
  */
857
907
  bindFramebuffer( target, framebuffer ) {
858
908
 
@@ -962,7 +1012,7 @@ class WebGLState {
962
1012
  * This method caches the state so `gl.activeTexture()` is only
963
1013
  * called when necessary.
964
1014
  *
965
- * @param {Number} webglSlot - The texture unit to make active.
1015
+ * @param {number} webglSlot - The texture unit to make active.
966
1016
  */
967
1017
  activeTexture( webglSlot ) {
968
1018
 
@@ -985,9 +1035,9 @@ class WebGLState {
985
1035
  * This method caches the state so `gl.bindTexture()` is only
986
1036
  * called when necessary.
987
1037
  *
988
- * @param {Number} webglType - The binding point (target).
1038
+ * @param {number} webglType - The binding point (target).
989
1039
  * @param {WebGLTexture} webglTexture - The WebGL texture to bind.
990
- * @param {Number} webglSlot - The texture.
1040
+ * @param {number} webglSlot - The texture.
991
1041
  */
992
1042
  bindTexture( webglType, webglTexture, webglSlot ) {
993
1043
 
@@ -1040,10 +1090,10 @@ class WebGLState {
1040
1090
  * This method caches the state so `gl.bindBufferBase()` is only
1041
1091
  * called when necessary.
1042
1092
  *
1043
- * @param {Number} target - The target for the bind operation.
1044
- * @param {Number} index - The index of the target.
1093
+ * @param {number} target - The target for the bind operation.
1094
+ * @param {number} index - The index of the target.
1045
1095
  * @param {WebGLBuffer} buffer - The WebGL buffer.
1046
- * @return {Boolean} Whether a bind has been executed or not.
1096
+ * @return {boolean} Whether a bind has been executed or not.
1047
1097
  */
1048
1098
  bindBufferBase( target, index, buffer ) {
1049
1099
 
@@ -134,11 +134,11 @@ class WebGLTextureUtils {
134
134
  /**
135
135
  * Returns the native texture type for the given texture.
136
136
  *
137
- * @param {String?} internalFormatName - The internal format name. When `null`, the internal format is derived from the subsequent parameters.
137
+ * @param {?string} internalFormatName - The internal format name. When `null`, the internal format is derived from the subsequent parameters.
138
138
  * @param {GLenum} glFormat - The WebGL format.
139
139
  * @param {GLenum} glType - The WebGL type.
140
- * @param {String} colorSpace - The texture's color space.
141
- * @param {Boolean} [forceLinearTransfer=false] - Whether to force a linear transfer or not.
140
+ * @param {string} colorSpace - The texture's color space.
141
+ * @param {boolean} [forceLinearTransfer=false] - Whether to force a linear transfer or not.
142
142
  * @return {GLenum} The internal format.
143
143
  */
144
144
  getInternalFormat( internalFormatName, glFormat, glType, colorSpace, forceLinearTransfer = false ) {
@@ -697,33 +697,57 @@ class WebGLTextureUtils {
697
697
  *
698
698
  * @param {Texture} srcTexture - The source texture.
699
699
  * @param {Texture} dstTexture - The destination texture.
700
- * @param {Vector4?} [srcRegion=null] - The region of the source texture to copy.
701
- * @param {(Vector2|Vector3)?} [dstPosition=null] - The destination position of the copy.
702
- * @param {Number} [level=0] - The mip level to copy.
700
+ * @param {?(Box3|Box2)} [srcRegion=null] - The region of the source texture to copy.
701
+ * @param {?(Vector2|Vector3)} [dstPosition=null] - The destination position of the copy.
702
+ * @param {number} [srcLevel=0] - The source mip level to copy from.
703
+ * @param {number} [dstLevel=0] - The destination mip level to copy to.
703
704
  */
704
- copyTextureToTexture( srcTexture, dstTexture, srcRegion = null, dstPosition = null, level = 0 ) {
705
+ copyTextureToTexture( srcTexture, dstTexture, srcRegion = null, dstPosition = null, srcLevel = 0, dstLevel = 0 ) {
705
706
 
706
707
  const { gl, backend } = this;
707
708
  const { state } = this.backend;
708
709
 
709
710
  const { textureGPU: dstTextureGPU, glTextureType, glType, glFormat } = backend.get( dstTexture );
710
711
 
711
- let width, height, minX, minY;
712
- let dstX, dstY;
712
+ state.bindTexture( glTextureType, dstTextureGPU );
713
+
714
+ // gather the necessary dimensions to copy
715
+ let width, height, depth, minX, minY, minZ;
716
+ let dstX, dstY, dstZ;
717
+ const image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[ dstLevel ] : srcTexture.image;
713
718
 
714
719
  if ( srcRegion !== null ) {
715
720
 
716
721
  width = srcRegion.max.x - srcRegion.min.x;
717
722
  height = srcRegion.max.y - srcRegion.min.y;
723
+ depth = srcRegion.isBox3 ? srcRegion.max.z - srcRegion.min.z : 1;
718
724
  minX = srcRegion.min.x;
719
725
  minY = srcRegion.min.y;
726
+ minZ = srcRegion.isBox3 ? srcRegion.min.z : 0;
720
727
 
721
728
  } else {
722
729
 
723
- width = srcTexture.image.width;
724
- height = srcTexture.image.height;
730
+ const levelScale = Math.pow( 2, - srcLevel );
731
+ width = Math.floor( image.width * levelScale );
732
+ height = Math.floor( image.height * levelScale );
733
+
734
+ if ( srcTexture.isDataArrayTexture ) {
735
+
736
+ depth = image.depth;
737
+
738
+ } else if ( srcTexture.isData3DTexture ) {
739
+
740
+ depth = Math.floor( image.depth * levelScale );
741
+
742
+ } else {
743
+
744
+ depth = 1;
745
+
746
+ }
747
+
725
748
  minX = 0;
726
749
  minY = 0;
750
+ minZ = 0;
727
751
 
728
752
  }
729
753
 
@@ -731,36 +755,36 @@ class WebGLTextureUtils {
731
755
 
732
756
  dstX = dstPosition.x;
733
757
  dstY = dstPosition.y;
758
+ dstZ = dstPosition.z;
734
759
 
735
760
  } else {
736
761
 
737
762
  dstX = 0;
738
763
  dstY = 0;
764
+ dstZ = 0;
739
765
 
740
766
  }
741
767
 
742
- state.bindTexture( glTextureType, dstTextureGPU );
743
768
 
744
- // As another texture upload may have changed pixelStorei
745
- // parameters, make sure they are correct for the dstTexture
746
- gl.pixelStorei( gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment );
747
769
  gl.pixelStorei( gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY );
748
770
  gl.pixelStorei( gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha );
749
771
  gl.pixelStorei( gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment );
750
772
 
773
+ // used for copying data from cpu
751
774
  const currentUnpackRowLen = gl.getParameter( gl.UNPACK_ROW_LENGTH );
752
775
  const currentUnpackImageHeight = gl.getParameter( gl.UNPACK_IMAGE_HEIGHT );
753
776
  const currentUnpackSkipPixels = gl.getParameter( gl.UNPACK_SKIP_PIXELS );
754
777
  const currentUnpackSkipRows = gl.getParameter( gl.UNPACK_SKIP_ROWS );
755
778
  const currentUnpackSkipImages = gl.getParameter( gl.UNPACK_SKIP_IMAGES );
756
779
 
757
- const image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[ level ] : srcTexture.image;
758
-
759
780
  gl.pixelStorei( gl.UNPACK_ROW_LENGTH, image.width );
760
781
  gl.pixelStorei( gl.UNPACK_IMAGE_HEIGHT, image.height );
761
782
  gl.pixelStorei( gl.UNPACK_SKIP_PIXELS, minX );
762
783
  gl.pixelStorei( gl.UNPACK_SKIP_ROWS, minY );
784
+ gl.pixelStorei( gl.UNPACK_SKIP_IMAGES, minZ );
763
785
 
786
+ // set up the src texture
787
+ const isDst3D = dstTexture.isDataArrayTexture || dstTexture.isData3DTexture;
764
788
  if ( srcTexture.isRenderTargetTexture || srcTexture.isDepthTexture ) {
765
789
 
766
790
  const srcTextureData = backend.get( srcTexture );
@@ -786,19 +810,37 @@ class WebGLTextureUtils {
786
810
 
787
811
  } else {
788
812
 
789
- if ( srcTexture.isDataTexture ) {
813
+ if ( isDst3D ) {
790
814
 
791
- gl.texSubImage2D( gl.TEXTURE_2D, level, dstX, dstY, width, height, glFormat, glType, image.data );
815
+ // copy data into the 3d texture
816
+ if ( srcTexture.isDataTexture || srcTexture.isData3DTexture ) {
817
+
818
+ gl.texSubImage3D( glTextureType, dstLevel, dstX, dstY, dstZ, width, height, depth, glFormat, glType, image.data );
819
+
820
+ } else if ( dstTexture.isCompressedArrayTexture ) {
821
+
822
+ gl.compressedTexSubImage3D( glTextureType, dstLevel, dstX, dstY, dstZ, width, height, depth, glFormat, image.data );
823
+
824
+ } else {
825
+
826
+ gl.texSubImage3D( glTextureType, dstLevel, dstX, dstY, dstZ, width, height, depth, glFormat, glType, image );
827
+
828
+ }
792
829
 
793
830
  } else {
794
831
 
795
- if ( srcTexture.isCompressedTexture ) {
832
+ // copy data into the 2d texture
833
+ if ( srcTexture.isDataTexture ) {
834
+
835
+ gl.texSubImage2D( glTextureType, dstLevel, dstX, dstY, width, height, glFormat, glType, image.data );
796
836
 
797
- gl.compressedTexSubImage2D( gl.TEXTURE_2D, level, dstX, dstY, image.width, image.height, glFormat, image.data );
837
+ } else if ( srcTexture.isCompressedTexture ) {
838
+
839
+ gl.compressedTexSubImage2D( glTextureType, dstLevel, dstX, dstY, image.width, image.height, glFormat, image.data );
798
840
 
799
841
  } else {
800
842
 
801
- gl.texSubImage2D( gl.TEXTURE_2D, level, dstX, dstY, width, height, glFormat, glType, image );
843
+ gl.texSubImage2D( glTextureType, dstLevel, dstX, dstY, width, height, glFormat, glType, image );
802
844
 
803
845
  }
804
846
 
@@ -806,6 +848,7 @@ class WebGLTextureUtils {
806
848
 
807
849
  }
808
850
 
851
+ // reset values
809
852
  gl.pixelStorei( gl.UNPACK_ROW_LENGTH, currentUnpackRowLen );
810
853
  gl.pixelStorei( gl.UNPACK_IMAGE_HEIGHT, currentUnpackImageHeight );
811
854
  gl.pixelStorei( gl.UNPACK_SKIP_PIXELS, currentUnpackSkipPixels );
@@ -813,12 +856,17 @@ class WebGLTextureUtils {
813
856
  gl.pixelStorei( gl.UNPACK_SKIP_IMAGES, currentUnpackSkipImages );
814
857
 
815
858
  // Generate mipmaps only when copying level 0
816
- if ( level === 0 && dstTexture.generateMipmaps ) gl.generateMipmap( gl.TEXTURE_2D );
859
+ if ( dstLevel === 0 && dstTexture.generateMipmaps ) {
860
+
861
+ gl.generateMipmap( glTextureType );
862
+
863
+ }
817
864
 
818
865
  state.unbindTexture();
819
866
 
820
867
  }
821
868
 
869
+
822
870
  /**
823
871
  * Copies the current bound framebuffer to the given texture.
824
872
  *
@@ -918,8 +966,8 @@ class WebGLTextureUtils {
918
966
  *
919
967
  * @param {WebGLRenderbuffer} renderbuffer - The render buffer.
920
968
  * @param {RenderContext} renderContext - The render context.
921
- * @param {Number} samples - The MSAA sample count.
922
- * @param {Boolean} [useMultisampledRTT=false] - Whether to use WEBGL_multisampled_render_to_texture or not.
969
+ * @param {number} samples - The MSAA sample count.
970
+ * @param {boolean} [useMultisampledRTT=false] - Whether to use WEBGL_multisampled_render_to_texture or not.
923
971
  */
924
972
  setupRenderBufferStorage( renderbuffer, renderContext, samples, useMultisampledRTT = false ) {
925
973
 
@@ -986,11 +1034,11 @@ class WebGLTextureUtils {
986
1034
  *
987
1035
  * @async
988
1036
  * @param {Texture} texture - The texture to copy.
989
- * @param {Number} x - The x coordinate of the copy origin.
990
- * @param {Number} y - The y coordinate of the copy origin.
991
- * @param {Number} width - The width of the copy.
992
- * @param {Number} height - The height of the copy.
993
- * @param {Number} faceIndex - The face index.
1037
+ * @param {number} x - The x coordinate of the copy origin.
1038
+ * @param {number} y - The y coordinate of the copy origin.
1039
+ * @param {number} width - The width of the copy.
1040
+ * @param {number} height - The height of the copy.
1041
+ * @param {number} faceIndex - The face index.
994
1042
  * @return {Promise<TypedArray>} A Promise that resolves with a typed array when the copy operation has finished.
995
1043
  */
996
1044
  async copyTextureToBuffer( texture, x, y, width, height, faceIndex ) {
@@ -1066,7 +1114,7 @@ class WebGLTextureUtils {
1066
1114
  * @private
1067
1115
  * @param {GLenum} glType - The WebGL data type.
1068
1116
  * @param {GLenum} glFormat - The WebGL texture format.
1069
- * @return {Number} The bytes-per-texel.
1117
+ * @return {number} The bytes-per-texel.
1070
1118
  */
1071
1119
  _getBytesPerTexel( glType, glFormat ) {
1072
1120
 
@@ -4,16 +4,18 @@ import TimestampQueryPool from '../../common/TimestampQueryPool.js';
4
4
  /**
5
5
  * Manages a pool of WebGL timestamp queries for performance measurement.
6
6
  * Handles creation, execution, and resolution of timer queries using WebGL extensions.
7
- * @extends TimestampQueryPool
7
+ *
8
+ * @augments TimestampQueryPool
8
9
  */
9
10
  class WebGLTimestampQueryPool extends TimestampQueryPool {
10
11
 
11
12
  /**
12
- * Creates a new WebGL timestamp query pool.
13
- * @param {WebGLRenderingContext|WebGL2RenderingContext} gl - The WebGL context.
14
- * @param {string} type - The type identifier for this query pool.
15
- * @param {number} [maxQueries=2048] - Maximum number of queries this pool can hold.
16
- */
13
+ * Creates a new WebGL timestamp query pool.
14
+ *
15
+ * @param {WebGLRenderingContext|WebGL2RenderingContext} gl - The WebGL context.
16
+ * @param {string} type - The type identifier for this query pool.
17
+ * @param {number} [maxQueries=2048] - Maximum number of queries this pool can hold.
18
+ */
17
19
  constructor( gl, type, maxQueries = 2048 ) {
18
20
 
19
21
  super( maxQueries );
@@ -23,7 +25,7 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
23
25
 
24
26
  // Check for timer query extensions
25
27
  this.ext = gl.getExtension( 'EXT_disjoint_timer_query_webgl2' ) ||
26
- gl.getExtension( 'EXT_disjoint_timer_query' );
28
+ gl.getExtension( 'EXT_disjoint_timer_query' );
27
29
 
28
30
  if ( ! this.ext ) {
29
31
 
@@ -47,10 +49,11 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
47
49
  }
48
50
 
49
51
  /**
50
- * Allocates a pair of queries for a given render context.
51
- * @param {Object} renderContext - The render context to allocate queries for.
52
- * @returns {?number} The base offset for the allocated queries, or null if allocation failed.
53
- */
52
+ * Allocates a pair of queries for a given render context.
53
+ *
54
+ * @param {Object} renderContext - The render context to allocate queries for.
55
+ * @returns {?number} The base offset for the allocated queries, or null if allocation failed.
56
+ */
54
57
  allocateQueriesForContext( renderContext ) {
55
58
 
56
59
  if ( ! this.trackTimestamp ) return null;
@@ -75,9 +78,10 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
75
78
  }
76
79
 
77
80
  /**
78
- * Begins a timestamp query for the specified render context.
79
- * @param {Object} renderContext - The render context to begin timing for.
80
- */
81
+ * Begins a timestamp query for the specified render context.
82
+ *
83
+ * @param {Object} renderContext - The render context to begin timing for.
84
+ */
81
85
  beginQuery( renderContext ) {
82
86
 
83
87
  if ( ! this.trackTimestamp || this.isDisposed ) {
@@ -129,10 +133,11 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
129
133
  }
130
134
 
131
135
  /**
132
- * Ends the active timestamp query for the specified render context.
133
- * @param {Object} renderContext - The render context to end timing for.
134
- * @param {string} renderContext.id - Unique identifier for the render context.
135
- */
136
+ * Ends the active timestamp query for the specified render context.
137
+ *
138
+ * @param {Object} renderContext - The render context to end timing for.
139
+ * @param {string} renderContext.id - Unique identifier for the render context.
140
+ */
136
141
  endQuery( renderContext ) {
137
142
 
138
143
  if ( ! this.trackTimestamp || this.isDisposed ) {
@@ -173,9 +178,11 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
173
178
  }
174
179
 
175
180
  /**
176
- * Asynchronously resolves all completed queries and returns the total duration.
177
- * @returns {Promise<number>} The total duration in milliseconds, or the last valid value if resolution fails.
178
- */
181
+ * Asynchronously resolves all completed queries and returns the total duration.
182
+ *
183
+ * @async
184
+ * @returns {Promise<number>} The total duration in milliseconds, or the last valid value if resolution fails.
185
+ */
179
186
  async resolveQueriesAsync() {
180
187
 
181
188
  if ( ! this.trackTimestamp || this.pendingResolve ) {
@@ -236,11 +243,12 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
236
243
  }
237
244
 
238
245
  /**
239
- * Resolves a single query, checking for completion and disjoint operation.
240
- * @private
241
- * @param {WebGLQuery} query - The query object to resolve.
242
- * @returns {Promise<number>} The elapsed time in milliseconds.
243
- */
246
+ * Resolves a single query, checking for completion and disjoint operation.
247
+ *
248
+ * @async
249
+ * @param {WebGLQuery} query - The query object to resolve.
250
+ * @returns {Promise<number>} The elapsed time in milliseconds.
251
+ */
244
252
  async resolveQuery( query ) {
245
253
 
246
254
  return new Promise( ( resolve ) => {
@@ -325,9 +333,9 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
325
333
  }
326
334
 
327
335
  /**
328
- * Releases all resources held by this query pool.
329
- * This includes deleting all query objects and clearing internal state.
330
- */
336
+ * Releases all resources held by this query pool.
337
+ * This includes deleting all query objects and clearing internal state.
338
+ */
331
339
  dispose() {
332
340
 
333
341
  if ( this.isDisposed ) {
@@ -43,9 +43,9 @@ class WebGLUtils {
43
43
  * The method currently supports the conversion of texture formats
44
44
  * and types.
45
45
  *
46
- * @param {Number} p - The three.js constant.
47
- * @param {String} [colorSpace=NoColorSpace] - The color space.
48
- * @return {Number} The corresponding WebGL constant.
46
+ * @param {number} p - The three.js constant.
47
+ * @param {string} [colorSpace=NoColorSpace] - The color space.
48
+ * @return {?number} The corresponding WebGL constant.
49
49
  */
50
50
  convert( p, colorSpace = NoColorSpace ) {
51
51