super-three 0.173.4 → 0.175.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 +22198 -1564
  2. package/build/three.core.js +21287 -1346
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +882 -189
  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 +19358 -17482
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +19342 -17482
  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 +187 -11
  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
@@ -56,8 +56,18 @@ import { WebGLUniformsGroups } from './webgl/WebGLUniformsGroups.js';
56
56
  import { createCanvasElement, probeAsync, toNormalizedProjectionMatrix, toReversedProjectionMatrix, warnOnce } from '../utils.js';
57
57
  import { ColorManagement } from '../math/ColorManagement.js';
58
58
 
59
+ /**
60
+ * This renderer uses WebGL 2 to display scenes.
61
+ *
62
+ * WebGL 1 is not supported since `r163`.
63
+ */
59
64
  class WebGLRenderer {
60
65
 
66
+ /**
67
+ * Constructs a new WebGL renderer.
68
+ *
69
+ * @param {WebGLRenderer~Options} [parameters] - The configuration parameter.
70
+ */
61
71
  constructor( parameters = {} ) {
62
72
 
63
73
  const {
@@ -75,6 +85,13 @@ class WebGLRenderer {
75
85
  multiviewStereo = false,
76
86
  } = parameters;
77
87
 
88
+ /**
89
+ * This flag can be used for type testing.
90
+ *
91
+ * @type {boolean}
92
+ * @readonly
93
+ * @default true
94
+ */
78
95
  this.isWebGLRenderer = true;
79
96
 
80
97
  let _alpha;
@@ -109,13 +126,36 @@ class WebGLRenderer {
109
126
 
110
127
  // public properties
111
128
 
129
+ /**
130
+ * A canvas where the renderer draws its output.This is automatically created by the renderer
131
+ * in the constructor (if not provided already); you just need to add it to your page like so:
132
+ * ```js
133
+ * document.body.appendChild( renderer.domElement );
134
+ * ```
135
+ *
136
+ * @type {DOMElement}
137
+ */
112
138
  this.domElement = canvas;
113
139
 
114
- // Debug configuration container
140
+ /**
141
+ * A object with debug configuration settings.
142
+ *
143
+ * - `checkShaderErrors`: If it is `true`, defines whether material shader programs are
144
+ * checked for errors during compilation and linkage process. It may be useful to disable
145
+ * this check in production for performance gain. It is strongly recommended to keep these
146
+ * checks enabled during development. If the shader does not compile and link - it will not
147
+ * work and associated material will not render.
148
+ * - `onShaderError(gl, program, glVertexShader,glFragmentShader)`: A callback function that
149
+ * can be used for custom error reporting. The callback receives the WebGL context, an instance
150
+ * of WebGLProgram as well two instances of WebGLShader representing the vertex and fragment shader.
151
+ * Assigning a custom function disables the default error reporting.
152
+ *
153
+ * @type {Object}
154
+ */
115
155
  this.debug = {
116
156
 
117
157
  /**
118
- * Enables error checking and reporting when shader programs are being compiled
158
+ * Enables error checking and reporting when shader programs are being compiled.
119
159
  * @type {boolean}
120
160
  */
121
161
  checkShaderErrors: true,
@@ -128,29 +168,105 @@ class WebGLRenderer {
128
168
 
129
169
  // clearing
130
170
 
171
+ /**
172
+ * Whether the renderer should automatically clear its output before rendering a frame or not.
173
+ *
174
+ * @type {boolean}
175
+ * @default true
176
+ */
131
177
  this.autoClear = true;
178
+
179
+ /**
180
+ * If {@link WebGLRenderer#autoClear} set to `true`, whether the renderer should clear
181
+ * the color buffer or not.
182
+ *
183
+ * @type {boolean}
184
+ * @default true
185
+ */
132
186
  this.autoClearColor = true;
187
+
188
+ /**
189
+ * If {@link WebGLRenderer#autoClear} set to `true`, whether the renderer should clear
190
+ * the depth buffer or not.
191
+ *
192
+ * @type {boolean}
193
+ * @default true
194
+ */
133
195
  this.autoClearDepth = true;
196
+
197
+ /**
198
+ * If {@link WebGLRenderer#autoClear} set to `true`, whether the renderer should clear
199
+ * the stencil buffer or not.
200
+ *
201
+ * @type {boolean}
202
+ * @default true
203
+ */
134
204
  this.autoClearStencil = true;
135
205
 
136
206
  // scene graph
137
207
 
208
+ /**
209
+ * Whether the renderer should sort objects or not.
210
+ *
211
+ * Note: Sorting is used to attempt to properly render objects that have some
212
+ * degree of transparency. By definition, sorting objects may not work in all
213
+ * cases. Depending on the needs of application, it may be necessary to turn
214
+ * off sorting and use other methods to deal with transparency rendering e.g.
215
+ * manually determining each object's rendering order.
216
+ *
217
+ * @type {boolean}
218
+ * @default true
219
+ */
138
220
  this.sortObjects = true;
139
221
 
140
222
  // user-defined clipping
141
223
 
224
+ /**
225
+ * User-defined clipping planes specified in world space. These planes apply globally.
226
+ * Points in space whose dot product with the plane is negative are cut away.
227
+ *
228
+ * @type {Array<Plane>}
229
+ */
142
230
  this.clippingPlanes = [];
143
- this.localClippingEnabled = false;
144
-
145
- // physically based shading
146
231
 
147
- this._outputColorSpace = SRGBColorSpace;
232
+ /**
233
+ * Whether the renderer respects object-level clipping planes or not.
234
+ *
235
+ * @type {boolean}
236
+ * @default false
237
+ */
238
+ this.localClippingEnabled = false;
148
239
 
149
240
  // tone mapping
150
241
 
242
+ /**
243
+ * The tone mapping technique of the renderer.
244
+ *
245
+ * @type {(NoToneMapping|LinearToneMapping|ReinhardToneMapping|CineonToneMapping|ACESFilmicToneMapping|CustomToneMapping|AgXToneMapping|NeutralToneMapping)}
246
+ * @default NoToneMapping
247
+ */
151
248
  this.toneMapping = NoToneMapping;
249
+
250
+ /**
251
+ * Exposure level of tone mapping.
252
+ *
253
+ * @type {number}
254
+ * @default 1
255
+ */
152
256
  this.toneMappingExposure = 1.0;
153
257
 
258
+ // transmission
259
+
260
+ /**
261
+ * The normalized resolution scale for the transmission render target, measured in percentage
262
+ * of viewport dimensions. Lowering this value can result in significant performance improvements
263
+ * when using {@link MeshPhysicalMaterial#transmission}.
264
+ *
265
+ * @type {number}
266
+ * @default 1
267
+ */
268
+ this.transmissionResolutionScale = 1.0;
269
+
154
270
  // internal properties
155
271
 
156
272
  const _this = this;
@@ -159,6 +275,8 @@ class WebGLRenderer {
159
275
 
160
276
  // internal state cache
161
277
 
278
+ this._outputColorSpace = SRGBColorSpace;
279
+
162
280
  let _currentActiveCubeFace = 0;
163
281
  let _currentActiveMipmapLevel = 0;
164
282
  let _currentRenderTarget = null;
@@ -195,9 +313,6 @@ class WebGLRenderer {
195
313
  let _clippingEnabled = false;
196
314
  let _localClippingEnabled = false;
197
315
 
198
- // transmission render target scale
199
- this.transmissionResolutionScale = 1.0;
200
-
201
316
  // camera matrices cache
202
317
 
203
318
  const _currentProjectionMatrix = new Matrix4();
@@ -328,12 +443,79 @@ class WebGLRenderer {
328
443
 
329
444
  info.programs = programCache.programs;
330
445
 
446
+ /**
447
+ * Holds details about the capabilities of the current rendering context.
448
+ *
449
+ * @name WebGLRenderer#capabilities
450
+ * @type {WebGLRenderer~Capabilities}
451
+ */
331
452
  _this.capabilities = capabilities;
453
+
454
+ /**
455
+ * Provides methods for retrieving and testing WebGL extensions.
456
+ *
457
+ * - `get(extensionName:string)`: Used to check whether a WebGL extension is supported
458
+ * and return the extension object if available.
459
+ * - `has(extensionName:string)`: returns `true` if the extension is supported.
460
+ *
461
+ * @name WebGLRenderer#extensions
462
+ * @type {Object}
463
+ */
332
464
  _this.extensions = extensions;
465
+
466
+ /**
467
+ * Used to track properties of other objects like native WebGL objects.
468
+ *
469
+ * @name WebGLRenderer#properties
470
+ * @type {Object}
471
+ */
333
472
  _this.properties = properties;
473
+
474
+ /**
475
+ * Manages the render lists of the renderer.
476
+ *
477
+ * @name WebGLRenderer#renderLists
478
+ * @type {Object}
479
+ */
334
480
  _this.renderLists = renderLists;
481
+
482
+
483
+
484
+ /**
485
+ * Interface for managing shadows.
486
+ *
487
+ * @name WebGLRenderer#shadowMap
488
+ * @type {WebGLRenderer~ShadowMap}
489
+ */
335
490
  _this.shadowMap = shadowMap;
491
+
492
+ /**
493
+ * Interface for managing the WebGL state.
494
+ *
495
+ * @name WebGLRenderer#state
496
+ * @type {Object}
497
+ */
336
498
  _this.state = state;
499
+
500
+ /**
501
+ * Holds a series of statistical information about the GPU memory
502
+ * and the rendering process. Useful for debugging and monitoring.
503
+ *
504
+ * By default these data are reset at each render call but when having
505
+ * multiple render passes per frame (e.g. when using post processing) it can
506
+ * be preferred to reset with a custom pattern. First, set `autoReset` to
507
+ * `false`.
508
+ * ```js
509
+ * renderer.info.autoReset = false;
510
+ * ```
511
+ * Call `reset()` whenever you have finished to render a single frame.
512
+ * ```js
513
+ * renderer.info.reset();
514
+ * ```
515
+ *
516
+ * @name WebGLRenderer#info
517
+ * @type {WebGLRenderer~Info}
518
+ */
337
519
  _this.info = info;
338
520
 
339
521
  }
@@ -344,22 +526,38 @@ class WebGLRenderer {
344
526
 
345
527
  const xr = new WebXRManager( _this, _gl );
346
528
 
529
+ /**
530
+ * A reference to the XR manager.
531
+ *
532
+ * @type {WebXRManager}
533
+ */
347
534
  this.xr = xr;
348
535
 
349
- // API
350
-
536
+ /**
537
+ * Returns the rendering context.
538
+ *
539
+ * @return {WebGL2RenderingContext} The rendering context.
540
+ */
351
541
  this.getContext = function () {
352
542
 
353
543
  return _gl;
354
544
 
355
545
  };
356
546
 
547
+ /**
548
+ * Returns the rendering context attributes.
549
+ *
550
+ * @return {WebGLContextAttributes} The rendering context attributes.
551
+ */
357
552
  this.getContextAttributes = function () {
358
553
 
359
554
  return _gl.getContextAttributes();
360
555
 
361
556
  };
362
557
 
558
+ /**
559
+ * Simulates a loss of the WebGL context. This requires support for the `WEBGL_lose_context` extension.
560
+ */
363
561
  this.forceContextLoss = function () {
364
562
 
365
563
  const extension = extensions.get( 'WEBGL_lose_context' );
@@ -367,6 +565,9 @@ class WebGLRenderer {
367
565
 
368
566
  };
369
567
 
568
+ /**
569
+ * Simulates a restore of the WebGL context. This requires support for the `WEBGL_lose_context` extension.
570
+ */
370
571
  this.forceContextRestore = function () {
371
572
 
372
573
  const extension = extensions.get( 'WEBGL_lose_context' );
@@ -374,12 +575,22 @@ class WebGLRenderer {
374
575
 
375
576
  };
376
577
 
578
+ /**
579
+ * Returns the pixel ratio.
580
+ *
581
+ * @return {number} The pixel ratio.
582
+ */
377
583
  this.getPixelRatio = function () {
378
584
 
379
585
  return _pixelRatio;
380
586
 
381
587
  };
382
588
 
589
+ /**
590
+ * Sets the given pixel ratio and resizes the canvas if necessary.
591
+ *
592
+ * @param {number} value - The pixel ratio.
593
+ */
383
594
  this.setPixelRatio = function ( value ) {
384
595
 
385
596
  if ( value === undefined ) return;
@@ -390,12 +601,27 @@ class WebGLRenderer {
390
601
 
391
602
  };
392
603
 
604
+ /**
605
+ * Returns the renderer's size in logical pixels. This method does not honor the pixel ratio.
606
+ *
607
+ * @param {Vector2} target - The method writes the result in this target object.
608
+ * @return {Vector2} The renderer's size in logical pixels.
609
+ */
393
610
  this.getSize = function ( target ) {
394
611
 
395
612
  return target.set( _width, _height );
396
613
 
397
614
  };
398
615
 
616
+ /**
617
+ * Resizes the output canvas to (width, height) with device pixel ratio taken
618
+ * into account, and also sets the viewport to fit that size, starting in (0,
619
+ * 0). Setting `updateStyle` to false prevents any style changes to the output canvas.
620
+ *
621
+ * @param {number} width - The width in logical pixels.
622
+ * @param {number} height - The height in logical pixels.
623
+ * @param {boolean} [updateStyle=true] - Whether to update the `style` attribute of the canvas or not.
624
+ */
399
625
  this.setSize = function ( width, height, updateStyle = true ) {
400
626
 
401
627
  if ( xr.isPresenting ) {
@@ -422,12 +648,31 @@ class WebGLRenderer {
422
648
 
423
649
  };
424
650
 
651
+ /**
652
+ * Returns the drawing buffer size in physical pixels. This method honors the pixel ratio.
653
+ *
654
+ * @param {Vector2} target - The method writes the result in this target object.
655
+ * @return {Vector2} The drawing buffer size.
656
+ */
425
657
  this.getDrawingBufferSize = function ( target ) {
426
658
 
427
659
  return target.set( _width * _pixelRatio, _height * _pixelRatio ).floor();
428
660
 
429
661
  };
430
662
 
663
+ /**
664
+ * This method allows to define the drawing buffer size by specifying
665
+ * width, height and pixel ratio all at once. The size of the drawing
666
+ * buffer is computed with this formula:
667
+ * ```js
668
+ * size.x = width * pixelRatio;
669
+ * size.y = height * pixelRatio;
670
+ * ```
671
+ *
672
+ * @param {number} width - The width in logical pixels.
673
+ * @param {number} height - The height in logical pixels.
674
+ * @param {number} pixelRatio - The pixel ratio.
675
+ */
431
676
  this.setDrawingBufferSize = function ( width, height, pixelRatio ) {
432
677
 
433
678
  _width = width;
@@ -442,18 +687,39 @@ class WebGLRenderer {
442
687
 
443
688
  };
444
689
 
690
+ /**
691
+ * Returns the current viewport definition.
692
+ *
693
+ * @param {Vector2} target - The method writes the result in this target object.
694
+ * @return {Vector2} The current viewport definition.
695
+ */
445
696
  this.getCurrentViewport = function ( target ) {
446
697
 
447
698
  return target.copy( _currentViewport );
448
699
 
449
700
  };
450
701
 
702
+ /**
703
+ * Returns the viewport definition.
704
+ *
705
+ * @param {Vector4} target - The method writes the result in this target object.
706
+ * @return {Vector4} The viewport definition.
707
+ */
451
708
  this.getViewport = function ( target ) {
452
709
 
453
710
  return target.copy( _viewport );
454
711
 
455
712
  };
456
713
 
714
+ /**
715
+ * Sets the viewport to render from `(x, y)` to `(x + width, y + height)`.
716
+ *
717
+ * @param {number | Vector4} x - The horizontal coordinate for the lower left corner of the viewport origin in logical pixel unit.
718
+ * Or alternatively a four-component vector specifying all the parameters of the viewport.
719
+ * @param {number} y - The vertical coordinate for the lower left corner of the viewport origin in logical pixel unit.
720
+ * @param {number} width - The width of the viewport in logical pixel unit.
721
+ * @param {number} height - The height of the viewport in logical pixel unit.
722
+ */
457
723
  this.setViewport = function ( x, y, width, height ) {
458
724
 
459
725
  if ( x.isVector4 ) {
@@ -470,12 +736,27 @@ class WebGLRenderer {
470
736
 
471
737
  };
472
738
 
739
+ /**
740
+ * Returns the scissor region.
741
+ *
742
+ * @param {Vector4} target - The method writes the result in this target object.
743
+ * @return {Vector4} The scissor region.
744
+ */
473
745
  this.getScissor = function ( target ) {
474
746
 
475
747
  return target.copy( _scissor );
476
748
 
477
749
  };
478
750
 
751
+ /**
752
+ * Sets the scissor region to render from `(x, y)` to `(x + width, y + height)`.
753
+ *
754
+ * @param {number | Vector4} x - The horizontal coordinate for the lower left corner of the scissor region origin in logical pixel unit.
755
+ * Or alternatively a four-component vector specifying all the parameters of the scissor region.
756
+ * @param {number} y - The vertical coordinate for the lower left corner of the scissor region origin in logical pixel unit.
757
+ * @param {number} width - The width of the scissor region in logical pixel unit.
758
+ * @param {number} height - The height of the scissor region in logical pixel unit.
759
+ */
479
760
  this.setScissor = function ( x, y, width, height ) {
480
761
 
481
762
  if ( x.isVector4 ) {
@@ -492,24 +773,48 @@ class WebGLRenderer {
492
773
 
493
774
  };
494
775
 
776
+ /**
777
+ * Returns `true` if the scissor test is enabled.
778
+ *
779
+ * @return {boolean} Whether the scissor test is enabled or not.
780
+ */
495
781
  this.getScissorTest = function () {
496
782
 
497
783
  return _scissorTest;
498
784
 
499
785
  };
500
786
 
787
+ /**
788
+ * Enable or disable the scissor test. When this is enabled, only the pixels
789
+ * within the defined scissor area will be affected by further renderer
790
+ * actions.
791
+ *
792
+ * @param {boolean} boolean - Whether the scissor test is enabled or not.
793
+ */
501
794
  this.setScissorTest = function ( boolean ) {
502
795
 
503
796
  state.setScissorTest( _scissorTest = boolean );
504
797
 
505
798
  };
506
799
 
800
+ /**
801
+ * Sets a custom opaque sort function for the render lists. Pass `null`
802
+ * to use the default `painterSortStable` function.
803
+ *
804
+ * @param {?Function} method - The opaque sort function.
805
+ */
507
806
  this.setOpaqueSort = function ( method ) {
508
807
 
509
808
  _opaqueSort = method;
510
809
 
511
810
  };
512
811
 
812
+ /**
813
+ * Sets a custom transparent sort function for the render lists. Pass `null`
814
+ * to use the default `reversePainterSortStable` function.
815
+ *
816
+ * @param {?Function} method - The opaque sort function.
817
+ */
513
818
  this.setTransparentSort = function ( method ) {
514
819
 
515
820
  _transparentSort = method;
@@ -518,30 +823,60 @@ class WebGLRenderer {
518
823
 
519
824
  // Clearing
520
825
 
826
+ /**
827
+ * Returns the clear color.
828
+ *
829
+ * @param {Color} target - The method writes the result in this target object.
830
+ * @return {Color} The clear color.
831
+ */
521
832
  this.getClearColor = function ( target ) {
522
833
 
523
834
  return target.copy( background.getClearColor() );
524
835
 
525
836
  };
526
837
 
838
+ /**
839
+ * Sets the clear color and alpha.
840
+ *
841
+ * @param {Color} color - The clear color.
842
+ * @param {number} [alpha=1] - The clear alpha.
843
+ */
527
844
  this.setClearColor = function () {
528
845
 
529
- background.setClearColor.apply( background, arguments );
846
+ background.setClearColor( ...arguments );
530
847
 
531
848
  };
532
849
 
850
+ /**
851
+ * Returns the clear alpha. Ranges within `[0,1]`.
852
+ *
853
+ * @return {number} The clear alpha.
854
+ */
533
855
  this.getClearAlpha = function () {
534
856
 
535
857
  return background.getClearAlpha();
536
858
 
537
859
  };
538
860
 
861
+ /**
862
+ * Sets the clear alpha.
863
+ *
864
+ * @param {number} alpha - The clear alpha.
865
+ */
539
866
  this.setClearAlpha = function () {
540
867
 
541
- background.setClearAlpha.apply( background, arguments );
868
+ background.setClearAlpha( ...arguments );
542
869
 
543
870
  };
544
871
 
872
+ /**
873
+ * Tells the renderer to clear its color, depth or stencil drawing buffer(s).
874
+ * This method initializes the buffers to the current clear color values.
875
+ *
876
+ * @param {boolean} [color=true] - Whether the color buffer should be cleared or not.
877
+ * @param {boolean} [depth=true] - Whether the depth buffer should be cleared or not.
878
+ * @param {boolean} [stencil=true] - Whether the stencil buffer should be cleared or not.
879
+ */
545
880
  this.clear = function ( color = true, depth = true, stencil = true ) {
546
881
 
547
882
  let bits = 0;
@@ -620,26 +955,37 @@ class WebGLRenderer {
620
955
 
621
956
  };
622
957
 
958
+ /**
959
+ * Clears the color buffer. Equivalent to calling `renderer.clear( true, false, false )`.
960
+ */
623
961
  this.clearColor = function () {
624
962
 
625
963
  this.clear( true, false, false );
626
964
 
627
965
  };
628
966
 
967
+ /**
968
+ * Clears the depth buffer. Equivalent to calling `renderer.clear( false, true, false )`.
969
+ */
629
970
  this.clearDepth = function () {
630
971
 
631
972
  this.clear( false, true, false );
632
973
 
633
974
  };
634
975
 
976
+ /**
977
+ * Clears the stencil buffer. Equivalent to calling `renderer.clear( false, false, true )`.
978
+ */
635
979
  this.clearStencil = function () {
636
980
 
637
981
  this.clear( false, false, true );
638
982
 
639
983
  };
640
984
 
641
- //
642
-
985
+ /**
986
+ * Frees the GPU-related resources allocated by this instance. Call this
987
+ * method whenever this instance is no longer used in your app.
988
+ */
643
989
  this.dispose = function () {
644
990
 
645
991
  canvas.removeEventListener( 'webglcontextlost', onContextLost, false );
@@ -874,6 +1220,8 @@ class WebGLRenderer {
874
1220
 
875
1221
  if ( object._multiDrawInstances !== null ) {
876
1222
 
1223
+ // @deprecated, r174
1224
+ warnOnce( 'THREE.WebGLRenderer: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection.' );
877
1225
  renderer.renderMultiDrawInstances( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount, object._multiDrawInstances );
878
1226
 
879
1227
  } else {
@@ -943,6 +1291,18 @@ class WebGLRenderer {
943
1291
 
944
1292
  }
945
1293
 
1294
+ /**
1295
+ * Compiles all materials in the scene with the camera. This is useful to precompile shaders
1296
+ * before the first rendering. If you want to add a 3D object to an existing scene, use the third
1297
+ * optional parameter for applying the target scene.
1298
+ *
1299
+ * Note that the (target) scene's lighting and environment must be configured before calling this method.
1300
+ *
1301
+ * @param {Object3D} scene - The scene or another type of 3D object to precompile.
1302
+ * @param {Camera} camera - The camera.
1303
+ * @param {?Scene} [targetScene=null] - The target scene.
1304
+ * @return {?Set} The precompiled materials.
1305
+ */
946
1306
  this.compile = function ( scene, camera, targetScene = null ) {
947
1307
 
948
1308
  if ( targetScene === null ) targetScene = scene;
@@ -1030,8 +1390,7 @@ class WebGLRenderer {
1030
1390
 
1031
1391
  } );
1032
1392
 
1033
- renderStateStack.pop();
1034
- currentRenderState = null;
1393
+ currentRenderState = renderStateStack.pop();
1035
1394
 
1036
1395
  return materials;
1037
1396
 
@@ -1039,6 +1398,18 @@ class WebGLRenderer {
1039
1398
 
1040
1399
  // compileAsync
1041
1400
 
1401
+ /**
1402
+ * Asynchronous version of {@link WebGLRenderer#compile}.
1403
+ *
1404
+ * This method makes use of the `KHR_parallel_shader_compile` WebGL extension. Hence,
1405
+ * it is recommended to use this version of `compile()` whenever possible.
1406
+ *
1407
+ * @async
1408
+ * @param {Object3D} scene - The scene or another type of 3D object to precompile.
1409
+ * @param {Camera} camera - The camera.
1410
+ * @param {?Scene} [targetScene=null] - The target scene.
1411
+ * @return {Promise} A Promise that resolves when the given scene can be rendered without unnecessary stalling due to shader compilation.
1412
+ */
1042
1413
  this.compileAsync = function ( scene, camera, targetScene = null ) {
1043
1414
 
1044
1415
  const materials = this.compile( scene, camera, targetScene );
@@ -1140,6 +1511,20 @@ class WebGLRenderer {
1140
1511
 
1141
1512
  // Rendering
1142
1513
 
1514
+ /**
1515
+ * Renders the given scene (or other type of 3D object) using the given camera.
1516
+ *
1517
+ * The render is done to a previously specified render target set by calling {@link WebGLRenderer#setRenderTarget}
1518
+ * or to the canvas as usual.
1519
+ *
1520
+ * By default render buffers are cleared before rendering but you can prevent
1521
+ * this by setting the property `autoClear` to `false`. If you want to prevent
1522
+ * only certain buffers being cleared you can `autoClearColor`, `autoClearDepth`
1523
+ * or `autoClearStencil` to `false`. To force a clear, use {@link WebGLRenderer#clear}.
1524
+ *
1525
+ * @param {Object3D} scene - The scene to render.
1526
+ * @param {Camera} camera - The camera.
1527
+ */
1143
1528
  this.render = function ( scene, camera ) {
1144
1529
 
1145
1530
  if ( camera !== undefined && camera.isCamera !== true ) {
@@ -1608,8 +1993,14 @@ class WebGLRenderer {
1608
1993
 
1609
1994
  const object = renderItem.object;
1610
1995
  const geometry = renderItem.geometry;
1611
- const material = overrideMaterial === null ? renderItem.material : overrideMaterial;
1612
1996
  const group = renderItem.group;
1997
+ let material = renderItem.material;
1998
+
1999
+ if ( material.allowOverride === true && overrideMaterial !== null ) {
2000
+
2001
+ material = overrideMaterial;
2002
+
2003
+ }
1613
2004
 
1614
2005
  if ( object.layers.test( camera.layers ) ) {
1615
2006
 
@@ -2281,18 +2672,34 @@ class WebGLRenderer {
2281
2672
 
2282
2673
  }() );
2283
2674
 
2675
+ /**
2676
+ * Returns the active cube face.
2677
+ *
2678
+ * @return {number} The active cube face.
2679
+ */
2284
2680
  this.getActiveCubeFace = function () {
2285
2681
 
2286
2682
  return _currentActiveCubeFace;
2287
2683
 
2288
2684
  };
2289
2685
 
2686
+ /**
2687
+ * Returns the active mipmap level.
2688
+ *
2689
+ * @return {number} The active mipmap level.
2690
+ */
2290
2691
  this.getActiveMipmapLevel = function () {
2291
2692
 
2292
2693
  return _currentActiveMipmapLevel;
2293
2694
 
2294
2695
  };
2295
2696
 
2697
+ /**
2698
+ * Returns the active render target.
2699
+ *
2700
+ * @return {?WebGLRenderTarget} The active render target. Returns `null` if no render target
2701
+ * is currently set.
2702
+ */
2296
2703
  this.getRenderTarget = function () {
2297
2704
 
2298
2705
  return _currentRenderTarget;
@@ -2301,26 +2708,21 @@ class WebGLRenderer {
2301
2708
 
2302
2709
  this.setRenderTargetTextures = function ( renderTarget, colorTexture, depthTexture ) {
2303
2710
 
2304
- properties.get( renderTarget.texture ).__webglTexture = colorTexture;
2305
- properties.get( renderTarget.depthTexture ).__webglTexture = depthTexture;
2306
-
2307
2711
  const renderTargetProperties = properties.get( renderTarget );
2308
- renderTargetProperties.__hasExternalTextures = true;
2309
2712
 
2310
- renderTargetProperties.__autoAllocateDepthBuffer = depthTexture === undefined;
2311
-
2312
- if ( ! renderTargetProperties.__autoAllocateDepthBuffer && ( ! _currentRenderTarget || ! _currentRenderTarget.isWebGLMultiviewRenderTarget ) ) {
2713
+ renderTargetProperties.__autoAllocateDepthBuffer = renderTarget.resolveDepthBuffer === false;
2714
+ if ( ! renderTargetProperties.__autoAllocateDepthBuffer === false && ( ! _currentRenderTarget || ! _currentRenderTarget.isWebGLMultiviewRenderTarget ) ) {
2313
2715
 
2314
2716
  // The multisample_render_to_texture extension doesn't work properly if there
2315
2717
  // are midframe flushes and an external depth buffer. Disable use of the extension.
2316
- if ( extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true ) {
2718
+ renderTargetProperties.__useRenderToTexture = false;
2317
2719
 
2318
- console.warn( 'THREE.WebGLRenderer: Render-to-texture extension was disabled because an external texture was provided' );
2319
- renderTargetProperties.__useRenderToTexture = false;
2720
+ }
2320
2721
 
2321
- }
2722
+ properties.get( renderTarget.texture ).__webglTexture = colorTexture;
2723
+ properties.get( renderTarget.depthTexture ).__webglTexture = renderTargetProperties.__autoAllocateDepthBuffer ? undefined : depthTexture;
2322
2724
 
2323
- }
2725
+ renderTargetProperties.__hasExternalTextures = true;
2324
2726
 
2325
2727
  };
2326
2728
 
@@ -2333,6 +2735,16 @@ class WebGLRenderer {
2333
2735
  };
2334
2736
 
2335
2737
  const _scratchFrameBuffer = _gl.createFramebuffer();
2738
+
2739
+ /**
2740
+ * Sets the active rendertarget.
2741
+ *
2742
+ * @param {?WebGLRenderTarget} renderTarget - The render target to set. When `null` is given,
2743
+ * the canvas is set as the active render target instead.
2744
+ * @param {number} [activeCubeFace=0] - The active cube face when using a cube render target.
2745
+ * Indicates the z layer to render in to when using 3D or array render targets.
2746
+ * @param {number} [activeMipmapLevel=0] - The active mipmap level.
2747
+ */
2336
2748
  this.setRenderTarget = function ( renderTarget, activeCubeFace = 0, activeMipmapLevel = 0 ) {
2337
2749
 
2338
2750
  // Render to base layer instead of canvas in WebXR
@@ -2492,6 +2904,17 @@ class WebGLRenderer {
2492
2904
 
2493
2905
  };
2494
2906
 
2907
+ /**
2908
+ * Reads the pixel data from the given render target into the given buffer.
2909
+ *
2910
+ * @param {WebGLRenderTarget} renderTarget - The render target to read from.
2911
+ * @param {number} x - The `x` coordinate of the copy region's origin.
2912
+ * @param {number} y - The `y` coordinate of the copy region's origin.
2913
+ * @param {number} width - The width of the copy region.
2914
+ * @param {number} height - The height of the copy region.
2915
+ * @param {TypedArray} buffer - The result buffer.
2916
+ * @param {number} [activeCubeFaceIndex] - The active cube face index.
2917
+ */
2495
2918
  this.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) {
2496
2919
 
2497
2920
  if ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {
@@ -2554,6 +2977,21 @@ class WebGLRenderer {
2554
2977
 
2555
2978
  };
2556
2979
 
2980
+ /**
2981
+ * Asynchronous, non-blocking version of {@link WebGLRenderer#readRenderTargetPixels}.
2982
+ *
2983
+ * It is recommended to use this version of `readRenderTargetPixels()` whenever possible.
2984
+ *
2985
+ * @async
2986
+ * @param {WebGLRenderTarget} renderTarget - The render target to read from.
2987
+ * @param {number} x - The `x` coordinate of the copy region's origin.
2988
+ * @param {number} y - The `y` coordinate of the copy region's origin.
2989
+ * @param {number} width - The width of the copy region.
2990
+ * @param {number} height - The height of the copy region.
2991
+ * @param {TypedArray} buffer - The result buffer.
2992
+ * @param {number} [activeCubeFaceIndex] - The active cube face index.
2993
+ * @return {Promise<TypedArray>} A Promise that resolves when the read has been finished. The resolve provides the read data as a typed array.
2994
+ */
2557
2995
  this.readRenderTargetPixelsAsync = async function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) {
2558
2996
 
2559
2997
  if ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {
@@ -2571,27 +3009,27 @@ class WebGLRenderer {
2571
3009
 
2572
3010
  if ( framebuffer ) {
2573
3011
 
2574
- const texture = renderTarget.texture;
2575
- const textureFormat = texture.format;
2576
- const textureType = texture.type;
3012
+ // the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604)
3013
+ if ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {
2577
3014
 
2578
- if ( ! capabilities.textureFormatReadable( textureFormat ) ) {
3015
+ // set the active frame buffer to the one we want to read
3016
+ state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
2579
3017
 
2580
- throw new Error( 'THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.' );
3018
+ const texture = renderTarget.texture;
3019
+ const textureFormat = texture.format;
3020
+ const textureType = texture.type;
2581
3021
 
2582
- }
3022
+ if ( ! capabilities.textureFormatReadable( textureFormat ) ) {
2583
3023
 
2584
- if ( ! capabilities.textureTypeReadable( textureType ) ) {
3024
+ throw new Error( 'THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.' );
2585
3025
 
2586
- throw new Error( 'THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.' );
3026
+ }
2587
3027
 
2588
- }
3028
+ if ( ! capabilities.textureTypeReadable( textureType ) ) {
2589
3029
 
2590
- // the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604)
2591
- if ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {
3030
+ throw new Error( 'THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.' );
2592
3031
 
2593
- // set the active frame buffer to the one we want to read
2594
- state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
3032
+ }
2595
3033
 
2596
3034
  const glBuffer = _gl.createBuffer();
2597
3035
  _gl.bindBuffer( _gl.PIXEL_PACK_BUFFER, glBuffer );
@@ -2627,19 +3065,15 @@ class WebGLRenderer {
2627
3065
 
2628
3066
  };
2629
3067
 
3068
+ /**
3069
+ * Copies pixels from the current bound framebuffer into the given texture.
3070
+ *
3071
+ * @param {FramebufferTexture} texture - The texture.
3072
+ * @param {Vector2} position - The start position of the copy operation.
3073
+ * @param {number} [level=0] - The mip level. The default represents the base mip.
3074
+ */
2630
3075
  this.copyFramebufferToTexture = function ( texture, position = null, level = 0 ) {
2631
3076
 
2632
- // support previous signature with position first
2633
- if ( texture.isTexture !== true ) {
2634
-
2635
- // @deprecated, r165
2636
- warnOnce( 'WebGLRenderer: copyFramebufferToTexture function signature has changed.' );
2637
-
2638
- position = arguments[ 0 ] || null;
2639
- texture = arguments[ 1 ];
2640
-
2641
- }
2642
-
2643
3077
  const levelScale = Math.pow( 2, - level );
2644
3078
  const width = Math.floor( texture.image.width * levelScale );
2645
3079
  const height = Math.floor( texture.image.height * levelScale );
@@ -2657,21 +3091,21 @@ class WebGLRenderer {
2657
3091
 
2658
3092
  const _srcFramebuffer = _gl.createFramebuffer();
2659
3093
  const _dstFramebuffer = _gl.createFramebuffer();
2660
- this.copyTextureToTexture = function ( srcTexture, dstTexture, srcRegion = null, dstPosition = null, srcLevel = 0, dstLevel = null ) {
2661
-
2662
- // support previous signature with dstPosition first
2663
- if ( srcTexture.isTexture !== true ) {
2664
-
2665
- // @deprecated, r165
2666
- warnOnce( 'WebGLRenderer: copyTextureToTexture function signature has changed.' );
2667
3094
 
2668
- dstPosition = arguments[ 0 ] || null;
2669
- srcTexture = arguments[ 1 ];
2670
- dstTexture = arguments[ 2 ];
2671
- dstLevel = arguments[ 3 ] || 0;
2672
- srcRegion = null;
2673
-
2674
- }
3095
+ /**
3096
+ * Copies data of the given source texture into a destination texture.
3097
+ *
3098
+ * When using render target textures as `srcTexture` and `dstTexture`, you must make sure both render targets are initialized
3099
+ * {@link WebGLRenderer#initRenderTarget}.
3100
+ *
3101
+ * @param {Texture} srcTexture - The source texture.
3102
+ * @param {Texture} dstTexture - The destination texture.
3103
+ * @param {Box2|Box3} [srcRegion=null] - A bounding box which describes the source region. Can be two or three-dimensional.
3104
+ * @param {Vector2|Vector3} [dstPosition=null] - A vector that represents the origin of the destination region. Can be two or three-dimensional.
3105
+ * @param {number} srcLevel - The source mipmap level to copy.
3106
+ * @param {number} dstLevel - The destination mipmap level.
3107
+ */
3108
+ this.copyTextureToTexture = function ( srcTexture, dstTexture, srcRegion = null, dstPosition = null, srcLevel = 0, dstLevel = null ) {
2675
3109
 
2676
3110
  // support the previous signature with just a single dst mipmap level
2677
3111
  if ( dstLevel === null ) {
@@ -2925,20 +3359,6 @@ class WebGLRenderer {
2925
3359
 
2926
3360
  this.copyTextureToTexture3D = function ( srcTexture, dstTexture, srcRegion = null, dstPosition = null, level = 0 ) {
2927
3361
 
2928
- // support previous signature with source box first
2929
- if ( srcTexture.isTexture !== true ) {
2930
-
2931
- // @deprecated, r165
2932
- warnOnce( 'WebGLRenderer: copyTextureToTexture3D function signature has changed.' );
2933
-
2934
- srcRegion = arguments[ 0 ] || null;
2935
- dstPosition = arguments[ 1 ] || null;
2936
- srcTexture = arguments[ 2 ];
2937
- dstTexture = arguments[ 3 ];
2938
- level = arguments[ 4 ] || 0;
2939
-
2940
- }
2941
-
2942
3362
  // @deprecated, r170
2943
3363
  warnOnce( 'WebGLRenderer: copyTextureToTexture3D function has been deprecated. Use "copyTextureToTexture" instead.' );
2944
3364
 
@@ -2946,6 +3366,13 @@ class WebGLRenderer {
2946
3366
 
2947
3367
  };
2948
3368
 
3369
+ /**
3370
+ * Initializes the given WebGLRenderTarget memory. Useful for initializing a render target so data
3371
+ * can be copied into it using {@link WebGLRenderer#copyTextureToTexture} before it has been
3372
+ * rendered to.
3373
+ *
3374
+ * @param {WebGLRenderTarget} target - The render target.
3375
+ */
2949
3376
  this.initRenderTarget = function ( target ) {
2950
3377
 
2951
3378
  if ( properties.get( target ).__webglFramebuffer === undefined ) {
@@ -2956,6 +3383,12 @@ class WebGLRenderer {
2956
3383
 
2957
3384
  };
2958
3385
 
3386
+ /**
3387
+ * Initializes the given texture. Useful for preloading a texture rather than waiting until first
3388
+ * render (which can cause noticeable lags due to decode and GPU upload overhead).
3389
+ *
3390
+ * @param {Texture} texture - The texture.
3391
+ */
2959
3392
  this.initTexture = function ( texture ) {
2960
3393
 
2961
3394
  if ( texture.isCubeTexture ) {
@@ -2980,6 +3413,11 @@ class WebGLRenderer {
2980
3413
 
2981
3414
  };
2982
3415
 
3416
+ /**
3417
+ * Can be used to reset the internal WebGL state. This method is mostly
3418
+ * relevant for applications which share a single WebGL context across
3419
+ * multiple WebGL libraries.
3420
+ */
2983
3421
  this.resetState = function () {
2984
3422
 
2985
3423
  _currentActiveCubeFace = 0;
@@ -2999,12 +3437,27 @@ class WebGLRenderer {
2999
3437
 
3000
3438
  }
3001
3439
 
3440
+ /**
3441
+ * Defines the coordinate system of the renderer.
3442
+ *
3443
+ * In `WebGLRenderer`, the value is always `WebGLCoordinateSystem`.
3444
+ *
3445
+ * @type {WebGLCoordinateSystem|WebGPUCoordinateSystem}
3446
+ * @default WebGLCoordinateSystem
3447
+ * @readonly
3448
+ */
3002
3449
  get coordinateSystem() {
3003
3450
 
3004
3451
  return WebGLCoordinateSystem;
3005
3452
 
3006
3453
  }
3007
3454
 
3455
+ /**
3456
+ * Defines the output color space of the renderer.
3457
+ *
3458
+ * @type {SRGBColorSpace|LinearSRGBColorSpace}
3459
+ * @default SRGBColorSpace
3460
+ */
3008
3461
  get outputColorSpace() {
3009
3462
 
3010
3463
  return this._outputColorSpace;
@@ -3016,12 +3469,98 @@ class WebGLRenderer {
3016
3469
  this._outputColorSpace = colorSpace;
3017
3470
 
3018
3471
  const gl = this.getContext();
3019
- gl.drawingBufferColorspace = ColorManagement._getDrawingBufferColorSpace( colorSpace );
3472
+ gl.drawingBufferColorSpace = ColorManagement._getDrawingBufferColorSpace( colorSpace );
3020
3473
  gl.unpackColorSpace = ColorManagement._getUnpackColorSpace();
3021
3474
 
3022
3475
  }
3023
3476
 
3024
3477
  }
3025
3478
 
3479
+ // JSDoc
3480
+
3481
+ /**
3482
+ * WebGLRenderer options.
3483
+ *
3484
+ * @typedef {Object} WebGLRenderer~Options
3485
+ * @property {DOMElement} [canvas=null] - A canvas element where the renderer draws its output. If not passed in here, a new canvas element will be created by the renderer.
3486
+ * @property {WebGL2RenderingContext} [context=null] - Can be used to attach an existing rendering context to this renderer.
3487
+ * @property {('highp'|'mediump'|'lowp')} [precision='highp'] - The default shader precision. Uses `highp` if supported by the device.
3488
+ * @property {boolean} [alpha=false] - Controls the default clear alpha value. When set to`true`, the value is `0`. Otherwise it's `1`.
3489
+ * @property {boolean} [premultipliedAlpha=true] Whether the renderer will assume colors have premultiplied alpha or not.
3490
+ * @property {boolean} [antialias=false] Whether to use the default MSAA or not.
3491
+ * @property {boolean} [stencil=false] Whether the drawing buffer has a stencil buffer of at least 8 bits or not.
3492
+ * @property {boolean} [preserveDrawingBuffer=false] Whether to preserve the buffer until manually cleared or overwritten.
3493
+ * @property {('default'|'low-power'|'high-performance')} [powerPreference='default'] Provides a hint to the user agent indicating what configuration of GPU is suitable for this WebGL context.
3494
+ * @property {boolean} [failIfMajorPerformanceCaveat=false] Whether the renderer creation will fail upon low performance is detected.
3495
+ * @property {boolean} [depth=true] Whether the drawing buffer has a depth buffer of at least 16 bits.
3496
+ * @property {boolean} [logarithmicDepthBuffer=false] Whether to use a logarithmic depth buffer. It may be necessary to use this if dealing with huge differences in scale in a single scene.
3497
+ * Note that this setting uses `gl_FragDepth` if available which disables the Early Fragment Test optimization and can cause a decrease in performance.
3498
+ * @property {boolean} [reverseDepthBuffer=false] Whether to use a reverse depth buffer. Requires the `EXT_clip_control` extension.
3499
+ * This is a more faster and accurate version than logarithmic depth buffer.
3500
+ **/
3501
+
3502
+ /**
3503
+ * WebGLRenderer Capabilities.
3504
+ *
3505
+ * @typedef {Object} WebGLRenderer~Capabilities
3506
+ * @property {Function} getMaxAnisotropy - Returns the maximum available anisotropy.
3507
+ * @property {Function} getMaxPrecision - Returns the maximum available precision for vertex and fragment shaders.
3508
+ * @property {boolean} logarithmicDepthBuffer - `true` if `logarithmicDepthBuffer` was set to `true` in the constructor.
3509
+ * @property {number} maxAttributes - The number of shader attributes that can be used by the vertex shader.
3510
+ * @property {number} maxCubemapSize - Maximum height * width of cube map textures that a shader can use.
3511
+ * @property {number} maxFragmentUniforms - The number of uniforms that can be used by a fragment shader.
3512
+ * @property {number} maxSamples - Maximum number of samples in context of Multisample anti-aliasing (MSAA).
3513
+ * @property {number} maxTextures - The maximum number of textures that can be used by a shader.
3514
+ * @property {number} maxTextureSize - Maximum height * width of a texture that a shader use.
3515
+ * @property {number} maxVaryings - The number of varying vectors that can used by shaders.
3516
+ * @property {number} maxVertexTextures - The number of textures that can be used in a vertex shader.
3517
+ * @property {number} maxVertexUniforms - The maximum number of uniforms that can be used in a vertex shader.
3518
+ * @property {string} precision - The shader precision currently being used by the renderer.
3519
+ * @property {boolean} reverseDepthBuffer - `true` if `reverseDepthBuffer` was set to `true` in the constructor
3520
+ * and the rendering context supports `EXT_clip_control`.
3521
+ * @property {boolean} vertexTextures - `true` if vertex textures can be used.
3522
+ **/
3523
+
3524
+ /**
3525
+ * WebGLRenderer Info Memory
3526
+ *
3527
+ * @typedef {Object} WebGLRenderer~InfoMemory
3528
+ * @property {number} geometries - The number of active geometries.
3529
+ * @property {number} textures - The number of active textures.
3530
+ **/
3531
+
3532
+ /**
3533
+ * WebGLRenderer Info Render
3534
+ *
3535
+ * @typedef {Object} WebGLRenderer~InfoRender
3536
+ * @property {number} frame - The frame ID.
3537
+ * @property {number} calls - The number of draw calls per frame.
3538
+ * @property {number} triangles - The number of rendered triangles primitives per frame.
3539
+ * @property {number} points - The number of rendered points primitives per frame.
3540
+ * @property {number} lines - The number of rendered lines primitives per frame.
3541
+ **/
3542
+
3543
+ /**
3544
+ * WebGLRenderer Info
3545
+ *
3546
+ * @typedef {Object} WebGLRenderer~Info
3547
+ * @property {boolean} [autoReset=true] - Whether to automatically reset the info by the renderer or not.
3548
+ * @property {WebGLRenderer~InfoMemory} memory - Information about allocated objects.
3549
+ * @property {WebGLRenderer~InfoRender} render - Information about rendered objects.
3550
+ * @property {?Array<WebGLProgram>} programs - An array `WebGLProgram`s used for rendering.
3551
+ * @property {Function} reset - Resets the info object for the next frame.
3552
+ **/
3553
+
3554
+ /**
3555
+ * WebGLRenderer Shadow Map.
3556
+ *
3557
+ * @typedef {Object} WebGLRenderer~ShadowMap
3558
+ * @property {boolean} [enabled=false] - If set to `true`, use shadow maps in the scene.
3559
+ * @property {boolean} [autoUpdate=true] - Enables automatic updates to the shadows in the scene.
3560
+ * If you do not require dynamic lighting / shadows, you may set this to `false`.
3561
+ * @property {boolean} [needsUpdate=false] - When set to `true`, shadow maps in the scene
3562
+ * will be updated in the next `render` call.
3563
+ * @property {(BasicShadowMap|PCFShadowMap|PCFSoftShadowMap|VSMShadowMap)} [type=PCFShadowMap] - Defines the shadow map type.
3564
+ **/
3026
3565
 
3027
3566
  export { WebGLRenderer };