@plastic-software/three 0.174.0 → 0.175.1

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 (567) hide show
  1. package/build/three.cjs +10744 -1476
  2. package/build/three.core.js +9633 -1096
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +918 -189
  5. package/build/three.module.min.js +1 -1
  6. package/build/three.tsl.js +4 -2
  7. package/build/three.tsl.min.js +1 -1
  8. package/build/three.webgpu.js +2658 -1697
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +2654 -1709
  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 +93 -39
  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 +171 -48
  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 +71 -29
  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 +41 -3
  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 +35 -0
  94. package/examples/jsm/loaders/DDSLoader.js +24 -0
  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 +42 -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 +218 -5
  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 +86 -18
  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 +38 -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 +81 -61
  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 +79 -2
  160. package/examples/jsm/misc/TubePainter.js +53 -0
  161. package/examples/jsm/misc/Volume.js +108 -72
  162. package/examples/jsm/misc/VolumeSlice.js +88 -45
  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 +70 -0
  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 +131 -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 +266 -133
  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/Transpiler.js +31 -0
  273. package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
  274. package/examples/jsm/tsl/display/BloomNode.js +1 -1
  275. package/examples/jsm/tsl/display/PixelationPassNode.js +4 -4
  276. package/examples/jsm/tsl/display/SSRNode.js +1 -1
  277. package/examples/jsm/tsl/lighting/TiledLightsNode.js +29 -3
  278. package/examples/jsm/tsl/math/Bayer.js +14 -1
  279. package/examples/jsm/tsl/utils/Raymarching.js +4 -2
  280. package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
  281. package/examples/jsm/utils/CameraUtils.js +10 -7
  282. package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
  283. package/examples/jsm/utils/GeometryUtils.js +12 -13
  284. package/examples/jsm/utils/LDrawUtils.js +11 -4
  285. package/examples/jsm/utils/SceneOptimizer.js +66 -20
  286. package/examples/jsm/utils/SceneUtils.js +50 -3
  287. package/examples/jsm/utils/ShadowMapViewer.js +47 -24
  288. package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
  289. package/examples/jsm/utils/SkeletonUtils.js +45 -0
  290. package/examples/jsm/utils/SortUtils.js +14 -5
  291. package/examples/jsm/utils/UVsDebug.js +9 -4
  292. package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
  293. package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
  294. package/examples/jsm/utils/WorkerPool.js +65 -2
  295. package/examples/jsm/webxr/ARButton.js +18 -0
  296. package/examples/jsm/webxr/OculusHandModel.js +83 -0
  297. package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
  298. package/examples/jsm/webxr/Text2D.js +11 -0
  299. package/examples/jsm/webxr/VRButton.js +30 -0
  300. package/examples/jsm/webxr/XRButton.js +22 -0
  301. package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
  302. package/examples/jsm/webxr/XREstimatedLight.js +33 -3
  303. package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
  304. package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
  305. package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
  306. package/examples/jsm/webxr/XRPlanes.js +17 -0
  307. package/package.json +1 -1
  308. package/src/Three.TSL.js +3 -1
  309. package/src/animation/AnimationAction.js +262 -30
  310. package/src/animation/AnimationClip.js +141 -2
  311. package/src/animation/AnimationMixer.js +99 -15
  312. package/src/animation/AnimationObjectGroup.js +41 -18
  313. package/src/animation/AnimationUtils.js +168 -18
  314. package/src/animation/KeyframeTrack.js +144 -10
  315. package/src/animation/PropertyBinding.js +77 -3
  316. package/src/animation/PropertyMixer.js +72 -5
  317. package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
  318. package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
  319. package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
  320. package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
  321. package/src/animation/tracks/StringKeyframeTrack.js +33 -2
  322. package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
  323. package/src/audio/AudioAnalyser.js +1 -1
  324. package/src/audio/AudioListener.js +2 -2
  325. package/src/audio/PositionalAudio.js +5 -5
  326. package/src/constants.js +1432 -5
  327. package/src/core/BufferAttribute.js +413 -3
  328. package/src/core/BufferGeometry.js +337 -1
  329. package/src/core/Clock.js +60 -0
  330. package/src/core/GLBufferAttribute.js +99 -0
  331. package/src/core/InstancedBufferAttribute.js +29 -0
  332. package/src/core/InstancedBufferGeometry.js +20 -0
  333. package/src/core/InstancedInterleavedBuffer.js +26 -0
  334. package/src/core/InterleavedBuffer.js +137 -3
  335. package/src/core/InterleavedBufferAttribute.js +197 -0
  336. package/src/core/Layers.js +71 -10
  337. package/src/core/Object3D.js +23 -0
  338. package/src/core/Raycaster.js +134 -1
  339. package/src/core/RenderTarget.js +166 -7
  340. package/src/core/RenderTarget3D.js +25 -0
  341. package/src/core/RenderTargetArray.js +18 -0
  342. package/src/core/Uniform.js +29 -0
  343. package/src/core/UniformsGroup.js +84 -2
  344. package/src/extras/Controls.js +16 -1
  345. package/src/extras/Earcut.js +3 -781
  346. package/src/extras/ImageUtils.js +3 -2
  347. package/src/extras/PMREMGenerator.js +22 -17
  348. package/src/extras/core/Curve.js +1 -1
  349. package/src/extras/core/Path.js +1 -1
  350. package/src/extras/lib/earcut.js +685 -0
  351. package/src/geometries/ConeGeometry.js +2 -2
  352. package/src/geometries/CylinderGeometry.js +2 -2
  353. package/src/geometries/ExtrudeGeometry.js +71 -39
  354. package/src/geometries/LatheGeometry.js +1 -1
  355. package/src/lights/LightShadow.js +1 -1
  356. package/src/lights/webgpu/IESSpotLight.js +1 -1
  357. package/src/loaders/AnimationLoader.js +31 -0
  358. package/src/loaders/AudioLoader.js +31 -0
  359. package/src/loaders/BufferGeometryLoader.js +34 -0
  360. package/src/loaders/Cache.js +45 -0
  361. package/src/loaders/CompressedTextureLoader.js +36 -3
  362. package/src/loaders/CubeTextureLoader.js +45 -0
  363. package/src/loaders/DataTextureLoader.js +44 -3
  364. package/src/loaders/FileLoader.js +57 -1
  365. package/src/loaders/ImageBitmapLoader.js +57 -0
  366. package/src/loaders/ImageLoader.js +30 -0
  367. package/src/loaders/Loader.js +4 -6
  368. package/src/loaders/LoaderUtils.js +18 -36
  369. package/src/loaders/LoadingManager.js +142 -0
  370. package/src/loaders/MaterialLoader.js +57 -0
  371. package/src/loaders/ObjectLoader.js +58 -1
  372. package/src/loaders/TextureLoader.js +33 -0
  373. package/src/loaders/nodes/NodeLoader.js +6 -2
  374. package/src/loaders/nodes/NodeMaterialLoader.js +1 -1
  375. package/src/loaders/nodes/NodeObjectLoader.js +3 -3
  376. package/src/materials/LineBasicMaterial.js +74 -1
  377. package/src/materials/LineDashedMaterial.js +52 -0
  378. package/src/materials/Material.js +18 -3
  379. package/src/materials/MeshBasicMaterial.js +165 -0
  380. package/src/materials/MeshDepthMaterial.js +93 -0
  381. package/src/materials/MeshDistanceMaterial.js +76 -0
  382. package/src/materials/MeshLambertMaterial.js +273 -0
  383. package/src/materials/MeshMatcapMaterial.js +142 -0
  384. package/src/materials/MeshNormalMaterial.js +113 -0
  385. package/src/materials/MeshPhongMaterial.js +288 -0
  386. package/src/materials/MeshPhysicalMaterial.js +292 -1
  387. package/src/materials/MeshStandardMaterial.js +297 -0
  388. package/src/materials/MeshToonMaterial.js +218 -0
  389. package/src/materials/PointsMaterial.js +89 -0
  390. package/src/materials/RawShaderMaterial.js +25 -0
  391. package/src/materials/ShaderMaterial.js +215 -6
  392. package/src/materials/ShadowMaterial.js +54 -0
  393. package/src/materials/SpriteMaterial.js +82 -0
  394. package/src/materials/nodes/Line2NodeMaterial.js +1 -1
  395. package/src/materials/nodes/LineBasicNodeMaterial.js +2 -2
  396. package/src/materials/nodes/LineDashedNodeMaterial.js +2 -2
  397. package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
  398. package/src/materials/nodes/MeshLambertNodeMaterial.js +2 -2
  399. package/src/materials/nodes/MeshMatcapNodeMaterial.js +2 -2
  400. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  401. package/src/materials/nodes/MeshPhongNodeMaterial.js +2 -2
  402. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -2
  403. package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
  404. package/src/materials/nodes/MeshStandardNodeMaterial.js +2 -2
  405. package/src/materials/nodes/MeshToonNodeMaterial.js +2 -2
  406. package/src/materials/nodes/NodeMaterial.js +7 -3
  407. package/src/materials/nodes/PointsNodeMaterial.js +1 -1
  408. package/src/materials/nodes/ShadowNodeMaterial.js +11 -2
  409. package/src/materials/nodes/SpriteNodeMaterial.js +1 -1
  410. package/src/materials/nodes/VolumeNodeMaterial.js +10 -1
  411. package/src/math/Color.js +1 -1
  412. package/src/math/MathUtils.js +223 -0
  413. package/src/nodes/Nodes.js +1 -0
  414. package/src/nodes/accessors/BatchNode.js +8 -8
  415. package/src/nodes/accessors/BuiltinNode.js +1 -1
  416. package/src/nodes/accessors/CubeTextureNode.js +1 -1
  417. package/src/nodes/accessors/InstanceNode.js +5 -5
  418. package/src/nodes/accessors/InstancedMeshNode.js +1 -1
  419. package/src/nodes/accessors/MorphNode.js +27 -23
  420. package/src/nodes/accessors/Normal.js +1 -1
  421. package/src/nodes/accessors/Object3DNode.js +12 -12
  422. package/src/nodes/accessors/ReferenceBaseNode.js +2 -2
  423. package/src/nodes/accessors/ReferenceNode.js +1 -1
  424. package/src/nodes/accessors/SkinningNode.js +46 -37
  425. package/src/nodes/accessors/StorageBufferNode.js +1 -1
  426. package/src/nodes/accessors/StorageTextureNode.js +3 -3
  427. package/src/nodes/accessors/Texture3DNode.js +1 -1
  428. package/src/nodes/accessors/TextureNode.js +25 -5
  429. package/src/nodes/accessors/TextureSizeNode.js +1 -1
  430. package/src/nodes/accessors/UniformArrayNode.js +2 -2
  431. package/src/nodes/code/CodeNode.js +4 -4
  432. package/src/nodes/code/ExpressionNode.js +4 -4
  433. package/src/nodes/code/FunctionCallNode.js +23 -3
  434. package/src/nodes/code/ScriptableNode.js +4 -4
  435. package/src/nodes/code/ScriptableValueNode.js +2 -2
  436. package/src/nodes/core/AssignNode.js +1 -1
  437. package/src/nodes/core/AttributeNode.js +1 -1
  438. package/src/nodes/core/BypassNode.js +1 -1
  439. package/src/nodes/core/CacheNode.js +1 -1
  440. package/src/nodes/core/ContextNode.js +1 -1
  441. package/src/nodes/core/InputNode.js +2 -2
  442. package/src/nodes/core/Node.js +14 -2
  443. package/src/nodes/core/NodeBuilder.js +86 -14
  444. package/src/nodes/core/StackNode.js +5 -5
  445. package/src/nodes/core/StructNode.js +1 -1
  446. package/src/nodes/core/StructTypeNode.js +2 -2
  447. package/src/nodes/core/VarNode.js +2 -8
  448. package/src/nodes/core/VaryingNode.js +3 -3
  449. package/src/nodes/display/BlendModes.js +4 -4
  450. package/src/nodes/display/BumpMapNode.js +1 -1
  451. package/src/nodes/display/NormalMapNode.js +1 -1
  452. package/src/nodes/display/PosterizeNode.js +1 -1
  453. package/src/nodes/display/ScreenNode.js +3 -3
  454. package/src/nodes/display/ViewportDepthNode.js +2 -2
  455. package/src/nodes/display/ViewportDepthTextureNode.js +2 -2
  456. package/src/nodes/display/ViewportSharedTextureNode.js +2 -2
  457. package/src/nodes/display/ViewportTextureNode.js +4 -4
  458. package/src/nodes/functions/ShadowMaskModel.js +4 -4
  459. package/src/nodes/functions/material/getParallaxCorrectNormal.js +6 -6
  460. package/src/nodes/geometry/RangeNode.js +1 -1
  461. package/src/nodes/gpgpu/AtomicFunctionNode.js +16 -40
  462. package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
  463. package/src/nodes/gpgpu/ComputeNode.js +30 -2
  464. package/src/nodes/lighting/AnalyticLightNode.js +9 -1
  465. package/src/nodes/lighting/LightsNode.js +3 -3
  466. package/src/nodes/lighting/ShadowNode.js +1 -1
  467. package/src/nodes/math/ConditionalNode.js +20 -3
  468. package/src/nodes/math/MathNode.js +83 -78
  469. package/src/nodes/math/OperatorNode.js +171 -82
  470. package/src/nodes/pmrem/PMREMNode.js +4 -4
  471. package/src/nodes/pmrem/PMREMUtils.js +2 -2
  472. package/src/nodes/tsl/TSLBase.js +2 -1
  473. package/src/nodes/tsl/TSLCore.js +115 -12
  474. package/src/nodes/utils/ArrayElementNode.js +3 -1
  475. package/src/nodes/utils/CubeMapNode.js +3 -3
  476. package/src/nodes/utils/DebugNode.js +70 -0
  477. package/src/nodes/utils/EquirectUVNode.js +2 -2
  478. package/src/nodes/utils/JoinNode.js +27 -2
  479. package/src/nodes/utils/LoopNode.js +58 -28
  480. package/src/nodes/utils/MaxMipLevelNode.js +1 -1
  481. package/src/nodes/utils/ReflectorNode.js +2 -2
  482. package/src/nodes/utils/RemapNode.js +6 -6
  483. package/src/nodes/utils/RotateNode.js +1 -1
  484. package/src/nodes/utils/SpriteSheetUVNode.js +3 -3
  485. package/src/nodes/utils/StorageArrayElementNode.js +1 -1
  486. package/src/nodes/utils/TriplanarTexturesNode.js +3 -3
  487. package/src/objects/BatchedMesh.js +4 -4
  488. package/src/objects/InstancedMesh.js +2 -2
  489. package/src/objects/LOD.js +1 -1
  490. package/src/objects/Skeleton.js +1 -1
  491. package/src/renderers/WebGL3DRenderTarget.js +25 -0
  492. package/src/renderers/WebGLArrayRenderTarget.js +25 -0
  493. package/src/renderers/WebGLCubeRenderTarget.js +39 -1
  494. package/src/renderers/WebGLRenderTarget.js +19 -0
  495. package/src/renderers/WebGLRenderer.js +617 -79
  496. package/src/renderers/common/Animation.js +2 -2
  497. package/src/renderers/common/Attributes.js +2 -2
  498. package/src/renderers/common/Backend.js +12 -3
  499. package/src/renderers/common/Background.js +1 -0
  500. package/src/renderers/common/Color4.js +1 -1
  501. package/src/renderers/common/CubeRenderTarget.js +13 -0
  502. package/src/renderers/common/PostProcessing.js +2 -0
  503. package/src/renderers/common/QuadMesh.js +2 -0
  504. package/src/renderers/common/RenderList.js +2 -2
  505. package/src/renderers/common/RenderObject.js +1 -1
  506. package/src/renderers/common/RenderObjects.js +2 -2
  507. package/src/renderers/common/Renderer.js +52 -31
  508. package/src/renderers/common/XRManager.js +333 -10
  509. package/src/renderers/common/extras/PMREMGenerator.js +6 -0
  510. package/src/renderers/common/nodes/NodeBuilderState.js +3 -3
  511. package/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl.js +10 -1
  512. package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +8 -1
  513. package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +5 -1
  514. package/src/renderers/shaders/ShaderChunk/common.glsl.js +82 -0
  515. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +22 -2
  516. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +12 -1
  517. package/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js +8 -2
  518. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +31 -11
  519. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +5 -1
  520. package/src/renderers/shaders/ShaderChunk/normal_pars_fragment.glsl.js +1 -1
  521. package/src/renderers/shaders/ShaderChunk/normal_pars_vertex.glsl.js +1 -1
  522. package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +2 -1
  523. package/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js +12 -1
  524. package/src/renderers/shaders/ShaderChunk/triplanar_fragment.glsl.js +20 -0
  525. package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +52 -7
  526. package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +25 -6
  527. package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +19 -7
  528. package/src/renderers/shaders/ShaderChunk.js +2 -0
  529. package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +2 -0
  530. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +1 -0
  531. package/src/renderers/shaders/UniformsLib.js +6 -5
  532. package/src/renderers/shaders/UniformsUtils.js +1 -3
  533. package/src/renderers/webgl/WebGLBackground.js +4 -2
  534. package/src/renderers/webgl/WebGLMaterials.js +12 -0
  535. package/src/renderers/webgl/WebGLProgram.js +25 -5
  536. package/src/renderers/webgl/WebGLPrograms.js +21 -7
  537. package/src/renderers/webgl/WebGLState.js +9 -9
  538. package/src/renderers/webgl-fallback/WebGLBackend.js +25 -26
  539. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +3 -12
  540. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +67 -19
  541. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +1 -1
  542. package/src/renderers/webgpu/WebGPUBackend.js +128 -87
  543. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +1 -11
  544. package/src/renderers/webgpu/WebGPURenderer.js +17 -11
  545. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +4 -4
  546. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +5 -3
  547. package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
  548. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1 -1
  549. package/src/renderers/webxr/WebXRController.js +87 -2
  550. package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
  551. package/src/renderers/webxr/WebXRManager.js +173 -1
  552. package/src/scenes/Scene.js +2 -1
  553. package/src/textures/CanvasTexture.js +28 -0
  554. package/src/textures/CompressedArrayTexture.js +57 -0
  555. package/src/textures/CompressedCubeTexture.js +29 -0
  556. package/src/textures/CompressedTexture.js +64 -6
  557. package/src/textures/CubeTexture.js +52 -4
  558. package/src/textures/Data3DTexture.js +77 -0
  559. package/src/textures/DataArrayTexture.js +93 -0
  560. package/src/textures/DataTexture.js +65 -0
  561. package/src/textures/DepthTexture.js +59 -9
  562. package/src/textures/FramebufferTexture.js +62 -0
  563. package/src/textures/Source.js +69 -0
  564. package/src/textures/Texture.js +5 -5
  565. package/src/textures/VideoFrameTexture.js +43 -6
  566. package/src/textures/VideoTexture.js +49 -4
  567. package/examples/jsm/geometries/ParametricGeometries.js +0 -254
@@ -1,21 +1,69 @@
1
1
  import { Texture } from './Texture.js';
2
2
  import { CubeReflectionMapping } from '../constants.js';
3
3
 
4
+ /**
5
+ * Creates a cube texture made up of six images.
6
+ *
7
+ * ```js
8
+ * const loader = new THREE.CubeTextureLoader();
9
+ * loader.setPath( 'textures/cube/pisa/' );
10
+ *
11
+ * const textureCube = loader.load( [
12
+ * 'px.png', 'nx.png', 'py.png', 'ny.png', 'pz.png', 'nz.png'
13
+ * ] );
14
+ *
15
+ * const material = new THREE.MeshBasicMaterial( { color: 0xffffff, envMap: textureCube } );
16
+ * ```
17
+ *
18
+ * @augments Texture
19
+ */
4
20
  class CubeTexture extends Texture {
5
21
 
6
- constructor( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace ) {
7
-
8
- images = images !== undefined ? images : [];
9
- mapping = mapping !== undefined ? mapping : CubeReflectionMapping;
22
+ /**
23
+ * Constructs a new cube texture.
24
+ *
25
+ * @param {Array<Image>} [images=[]] - An array holding a image for each side of a cube.
26
+ * @param {number} [mapping=CubeReflectionMapping] - The texture mapping.
27
+ * @param {number} [wrapS=ClampToEdgeWrapping] - The wrapS value.
28
+ * @param {number} [wrapT=ClampToEdgeWrapping] - The wrapT value.
29
+ * @param {number} [magFilter=LinearFilter] - The mag filter value.
30
+ * @param {number} [minFilter=LinearMipmapLinearFilter] - The min filter value.
31
+ * @param {number} [format=RGBAFormat] - The texture format.
32
+ * @param {number} [type=UnsignedByteType] - The texture type.
33
+ * @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The anisotropy value.
34
+ * @param {string} [colorSpace=NoColorSpace] - The color space value.
35
+ */
36
+ constructor( images = [], mapping = CubeReflectionMapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace ) {
10
37
 
11
38
  super( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace );
12
39
 
40
+ /**
41
+ * This flag can be used for type testing.
42
+ *
43
+ * @type {boolean}
44
+ * @readonly
45
+ * @default true
46
+ */
13
47
  this.isCubeTexture = true;
14
48
 
49
+ /**
50
+ * If set to `true`, the texture is flipped along the vertical axis when
51
+ * uploaded to the GPU.
52
+ *
53
+ * Overwritten and set to `false` by default.
54
+ *
55
+ * @type {boolean}
56
+ * @default false
57
+ */
15
58
  this.flipY = false;
16
59
 
17
60
  }
18
61
 
62
+ /**
63
+ * Alias for {@link CubeTexture#image}.
64
+ *
65
+ * @type {Array<Image>}
66
+ */
19
67
  get images() {
20
68
 
21
69
  return this.image;
@@ -1,8 +1,22 @@
1
1
  import { Texture } from './Texture.js';
2
2
  import { ClampToEdgeWrapping, NearestFilter } from '../constants.js';
3
3
 
4
+ /**
5
+ * Creates a three-dimensional texture from raw data, with parameters to
6
+ * divide it into width, height, and depth.
7
+ *
8
+ * @augments Texture
9
+ */
4
10
  class Data3DTexture extends Texture {
5
11
 
12
+ /**
13
+ * Constructs a new data array texture.
14
+ *
15
+ * @param {?TypedArray} [data=null] - The buffer data.
16
+ * @param {number} [width=1] - The width of the texture.
17
+ * @param {number} [height=1] - The height of the texture.
18
+ * @param {number} [depth=1] - The depth of the texture.
19
+ */
6
20
  constructor( data = null, width = 1, height = 1, depth = 1 ) {
7
21
 
8
22
  // We're going to add .setXXX() methods for setting properties later.
@@ -15,17 +29,80 @@ class Data3DTexture extends Texture {
15
29
 
16
30
  super( null );
17
31
 
32
+ /**
33
+ * This flag can be used for type testing.
34
+ *
35
+ * @type {boolean}
36
+ * @readonly
37
+ * @default true
38
+ */
18
39
  this.isData3DTexture = true;
19
40
 
41
+ /**
42
+ * The image definition of a data texture.
43
+ *
44
+ * @type {{data:TypedArray,width:number,height:number,depth:number}}
45
+ */
20
46
  this.image = { data, width, height, depth };
21
47
 
48
+ /**
49
+ * How the texture is sampled when a texel covers more than one pixel.
50
+ *
51
+ * Overwritten and set to `NearestFilter` by default.
52
+ *
53
+ * @type {(NearestFilter|NearestMipmapNearestFilter|NearestMipmapLinearFilter|LinearFilter|LinearMipmapNearestFilter|LinearMipmapLinearFilter)}
54
+ * @default NearestFilter
55
+ */
22
56
  this.magFilter = NearestFilter;
57
+
58
+ /**
59
+ * How the texture is sampled when a texel covers less than one pixel.
60
+ *
61
+ * Overwritten and set to `NearestFilter` by default.
62
+ *
63
+ * @type {(NearestFilter|NearestMipmapNearestFilter|NearestMipmapLinearFilter|LinearFilter|LinearMipmapNearestFilter|LinearMipmapLinearFilter)}
64
+ * @default NearestFilter
65
+ */
23
66
  this.minFilter = NearestFilter;
24
67
 
68
+ /**
69
+ * This defines how the texture is wrapped in the depth and corresponds to
70
+ * *W* in UVW mapping.
71
+ *
72
+ * @type {(RepeatWrapping|ClampToEdgeWrapping|MirroredRepeatWrapping)}
73
+ * @default ClampToEdgeWrapping
74
+ */
25
75
  this.wrapR = ClampToEdgeWrapping;
26
76
 
77
+ /**
78
+ * Whether to generate mipmaps (if possible) for a texture.
79
+ *
80
+ * Overwritten and set to `false` by default.
81
+ *
82
+ * @type {boolean}
83
+ * @default false
84
+ */
27
85
  this.generateMipmaps = false;
86
+
87
+ /**
88
+ * If set to `true`, the texture is flipped along the vertical axis when
89
+ * uploaded to the GPU.
90
+ *
91
+ * Overwritten and set to `false` by default.
92
+ *
93
+ * @type {boolean}
94
+ * @default false
95
+ */
28
96
  this.flipY = false;
97
+
98
+ /**
99
+ * Specifies the alignment requirements for the start of each pixel row in memory.
100
+ *
101
+ * Overwritten and set to `1` by default.
102
+ *
103
+ * @type {boolean}
104
+ * @default 1
105
+ */
29
106
  this.unpackAlignment = 1;
30
107
 
31
108
  }
@@ -1,35 +1,128 @@
1
1
  import { Texture } from './Texture.js';
2
2
  import { ClampToEdgeWrapping, NearestFilter } from '../constants.js';
3
3
 
4
+ /**
5
+ * Creates an array of textures directly from raw buffer data.
6
+ *
7
+ * @augments Texture
8
+ */
4
9
  class DataArrayTexture extends Texture {
5
10
 
11
+ /**
12
+ * Constructs a new data array texture.
13
+ *
14
+ * @param {?TypedArray} [data=null] - The buffer data.
15
+ * @param {number} [width=1] - The width of the texture.
16
+ * @param {number} [height=1] - The height of the texture.
17
+ * @param {number} [depth=1] - The depth of the texture.
18
+ */
6
19
  constructor( data = null, width = 1, height = 1, depth = 1 ) {
7
20
 
8
21
  super( null );
9
22
 
23
+ /**
24
+ * This flag can be used for type testing.
25
+ *
26
+ * @type {boolean}
27
+ * @readonly
28
+ * @default true
29
+ */
10
30
  this.isDataArrayTexture = true;
11
31
 
32
+ /**
33
+ * The image definition of a data texture.
34
+ *
35
+ * @type {{data:TypedArray,width:number,height:number,depth:number}}
36
+ */
12
37
  this.image = { data, width, height, depth };
13
38
 
39
+ /**
40
+ * How the texture is sampled when a texel covers more than one pixel.
41
+ *
42
+ * Overwritten and set to `NearestFilter` by default.
43
+ *
44
+ * @type {(NearestFilter|NearestMipmapNearestFilter|NearestMipmapLinearFilter|LinearFilter|LinearMipmapNearestFilter|LinearMipmapLinearFilter)}
45
+ * @default NearestFilter
46
+ */
14
47
  this.magFilter = NearestFilter;
48
+
49
+ /**
50
+ * How the texture is sampled when a texel covers less than one pixel.
51
+ *
52
+ * Overwritten and set to `NearestFilter` by default.
53
+ *
54
+ * @type {(NearestFilter|NearestMipmapNearestFilter|NearestMipmapLinearFilter|LinearFilter|LinearMipmapNearestFilter|LinearMipmapLinearFilter)}
55
+ * @default NearestFilter
56
+ */
15
57
  this.minFilter = NearestFilter;
16
58
 
59
+ /**
60
+ * This defines how the texture is wrapped in the depth and corresponds to
61
+ * *W* in UVW mapping.
62
+ *
63
+ * @type {(RepeatWrapping|ClampToEdgeWrapping|MirroredRepeatWrapping)}
64
+ * @default ClampToEdgeWrapping
65
+ */
17
66
  this.wrapR = ClampToEdgeWrapping;
18
67
 
68
+ /**
69
+ * Whether to generate mipmaps (if possible) for a texture.
70
+ *
71
+ * Overwritten and set to `false` by default.
72
+ *
73
+ * @type {boolean}
74
+ * @default false
75
+ */
19
76
  this.generateMipmaps = false;
77
+
78
+ /**
79
+ * If set to `true`, the texture is flipped along the vertical axis when
80
+ * uploaded to the GPU.
81
+ *
82
+ * Overwritten and set to `false` by default.
83
+ *
84
+ * @type {boolean}
85
+ * @default false
86
+ */
20
87
  this.flipY = false;
88
+
89
+ /**
90
+ * Specifies the alignment requirements for the start of each pixel row in memory.
91
+ *
92
+ * Overwritten and set to `1` by default.
93
+ *
94
+ * @type {boolean}
95
+ * @default 1
96
+ */
21
97
  this.unpackAlignment = 1;
22
98
 
99
+ /**
100
+ * A set of all layers which need to be updated in the texture.
101
+ *
102
+ * @type {Set<number>}
103
+ */
23
104
  this.layerUpdates = new Set();
24
105
 
25
106
  }
26
107
 
108
+ /**
109
+ * Describes that a specific layer of the texture needs to be updated.
110
+ * Normally when {@link Texture#needsUpdate} is set to `true`, the
111
+ * entire data texture array is sent to the GPU. Marking specific
112
+ * layers will only transmit subsets of all mipmaps associated with a
113
+ * specific depth in the array which is often much more performant.
114
+ *
115
+ * @param {number} layerIndex - The layer index that should be updated.
116
+ */
27
117
  addLayerUpdate( layerIndex ) {
28
118
 
29
119
  this.layerUpdates.add( layerIndex );
30
120
 
31
121
  }
32
122
 
123
+ /**
124
+ * Resets the layer updates registry.
125
+ */
33
126
  clearLayerUpdates() {
34
127
 
35
128
  this.layerUpdates.clear();
@@ -1,18 +1,83 @@
1
1
  import { Texture } from './Texture.js';
2
2
  import { NearestFilter } from '../constants.js';
3
3
 
4
+ /**
5
+ * Creates a texture directly from raw buffer data.
6
+ *
7
+ * The interpretation of the data depends on type and format: If the type is
8
+ * `UnsignedByteType`, a `Uint8Array` will be useful for addressing the
9
+ * texel data. If the format is `RGBAFormat`, data needs four values for
10
+ * one texel; Red, Green, Blue and Alpha (typically the opacity).
11
+ *
12
+ * @augments Texture
13
+ */
4
14
  class DataTexture extends Texture {
5
15
 
16
+ /**
17
+ * Constructs a new data texture.
18
+ *
19
+ * @param {?TypedArray} [data=null] - The buffer data.
20
+ * @param {number} [width=1] - The width of the texture.
21
+ * @param {number} [height=1] - The height of the texture.
22
+ * @param {number} [format=RGBAFormat] - The texture format.
23
+ * @param {number} [type=UnsignedByteType] - The texture type.
24
+ * @param {number} [mapping=Texture.DEFAULT_MAPPING] - The texture mapping.
25
+ * @param {number} [wrapS=ClampToEdgeWrapping] - The wrapS value.
26
+ * @param {number} [wrapT=ClampToEdgeWrapping] - The wrapT value.
27
+ * @param {number} [magFilter=NearestFilter] - The mag filter value.
28
+ * @param {number} [minFilter=NearestFilter] - The min filter value.
29
+ * @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The anisotropy value.
30
+ * @param {string} [colorSpace=NoColorSpace] - The color space.
31
+ */
6
32
  constructor( data = null, width = 1, height = 1, format, type, mapping, wrapS, wrapT, magFilter = NearestFilter, minFilter = NearestFilter, anisotropy, colorSpace ) {
7
33
 
8
34
  super( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace );
9
35
 
36
+ /**
37
+ * This flag can be used for type testing.
38
+ *
39
+ * @type {boolean}
40
+ * @readonly
41
+ * @default true
42
+ */
10
43
  this.isDataTexture = true;
11
44
 
45
+ /**
46
+ * The image definition of a data texture.
47
+ *
48
+ * @type {{data:TypedArray,width:number,height:number}}
49
+ */
12
50
  this.image = { data: data, width: width, height: height };
13
51
 
52
+ /**
53
+ * Whether to generate mipmaps (if possible) for a texture.
54
+ *
55
+ * Overwritten and set to `false` by default.
56
+ *
57
+ * @type {boolean}
58
+ * @default false
59
+ */
14
60
  this.generateMipmaps = false;
61
+
62
+ /**
63
+ * If set to `true`, the texture is flipped along the vertical axis when
64
+ * uploaded to the GPU.
65
+ *
66
+ * Overwritten and set to `false` by default.
67
+ *
68
+ * @type {boolean}
69
+ * @default false
70
+ */
15
71
  this.flipY = false;
72
+
73
+ /**
74
+ * Specifies the alignment requirements for the start of each pixel row in memory.
75
+ *
76
+ * Overwritten and set to `1` by default.
77
+ *
78
+ * @type {boolean}
79
+ * @default 1
80
+ */
16
81
  this.unpackAlignment = 1;
17
82
 
18
83
  }
@@ -1,10 +1,30 @@
1
1
  import { Source } from './Source.js';
2
2
  import { Texture } from './Texture.js';
3
- import { NearestFilter, UnsignedIntType, UnsignedInt248Type, DepthFormat, DepthStencilFormat } from '../constants.js';
4
-
3
+ import { NearestFilter, UnsignedIntType, DepthFormat, DepthStencilFormat } from '../constants.js';
4
+
5
+ /**
6
+ * This class can be used to automatically save the depth information of a
7
+ * rendering into a texture.
8
+ *
9
+ * @augments Texture
10
+ */
5
11
  class DepthTexture extends Texture {
6
12
 
7
- constructor( width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format = DepthFormat ) {
13
+ /**
14
+ * Constructs a new depth texture.
15
+ *
16
+ * @param {number} width - The width of the texture.
17
+ * @param {number} height - The height of the texture.
18
+ * @param {number} [type=UnsignedIntType] - The texture type.
19
+ * @param {number} [mapping=Texture.DEFAULT_MAPPING] - The texture mapping.
20
+ * @param {number} [wrapS=ClampToEdgeWrapping] - The wrapS value.
21
+ * @param {number} [wrapT=ClampToEdgeWrapping] - The wrapT value.
22
+ * @param {number} [magFilter=LinearFilter] - The mag filter value.
23
+ * @param {number} [minFilter=LinearFilter] - The min filter value.
24
+ * @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The anisotropy value.
25
+ * @param {number} [format=DepthFormat] - The texture format.
26
+ */
27
+ constructor( width, height, type = UnsignedIntType, mapping, wrapS, wrapT, magFilter = NearestFilter, minFilter = NearestFilter, anisotropy, format = DepthFormat ) {
8
28
 
9
29
  if ( format !== DepthFormat && format !== DepthStencilFormat ) {
10
30
 
@@ -12,21 +32,51 @@ class DepthTexture extends Texture {
12
32
 
13
33
  }
14
34
 
15
- if ( type === undefined && format === DepthFormat ) type = UnsignedIntType;
16
- if ( type === undefined && format === DepthStencilFormat ) type = UnsignedInt248Type;
17
-
18
35
  super( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );
19
36
 
37
+ /**
38
+ * This flag can be used for type testing.
39
+ *
40
+ * @type {boolean}
41
+ * @readonly
42
+ * @default true
43
+ */
20
44
  this.isDepthTexture = true;
21
45
 
46
+ /**
47
+ * The image property of a depth texture just defines its dimensions.
48
+ *
49
+ * @type {{width:number,height:number}}
50
+ */
22
51
  this.image = { width: width, height: height };
23
52
 
24
- this.magFilter = magFilter !== undefined ? magFilter : NearestFilter;
25
- this.minFilter = minFilter !== undefined ? minFilter : NearestFilter;
26
-
53
+ /**
54
+ * If set to `true`, the texture is flipped along the vertical axis when
55
+ * uploaded to the GPU.
56
+ *
57
+ * Overwritten and set to `false` by default.
58
+ *
59
+ * @type {boolean}
60
+ * @default false
61
+ */
27
62
  this.flipY = false;
63
+
64
+ /**
65
+ * Whether to generate mipmaps (if possible) for a texture.
66
+ *
67
+ * Overwritten and set to `false` by default.
68
+ *
69
+ * @type {boolean}
70
+ * @default false
71
+ */
28
72
  this.generateMipmaps = false;
29
73
 
74
+ /**
75
+ * The depth compare function.
76
+ *
77
+ * @type {?(NeverCompare|LessCompare|EqualCompare|LessEqualCompare|GreaterCompare|NotEqualCompare|GreaterEqualCompare|AlwaysCompare)}
78
+ * @default null
79
+ */
30
80
  this.compareFunction = null;
31
81
 
32
82
  }
@@ -1,17 +1,79 @@
1
1
  import { Texture } from './Texture.js';
2
2
  import { NearestFilter } from '../constants.js';
3
3
 
4
+ /**
5
+ * This class can only be used in combination with `copyFramebufferToTexture()` methods
6
+ * of renderers. It extracts the contents of the current bound framebuffer and provides it
7
+ * as a texture for further usage.
8
+ *
9
+ * ```js
10
+ * const pixelRatio = window.devicePixelRatio;
11
+ * const textureSize = 128 * pixelRatio;
12
+ *
13
+ * const frameTexture = new FramebufferTexture( textureSize, textureSize );
14
+ *
15
+ * // calculate start position for copying part of the frame data
16
+ * const vector = new Vector2();
17
+ * vector.x = ( window.innerWidth * pixelRatio / 2 ) - ( textureSize / 2 );
18
+ * vector.y = ( window.innerHeight * pixelRatio / 2 ) - ( textureSize / 2 );
19
+ *
20
+ * renderer.render( scene, camera );
21
+ *
22
+ * // copy part of the rendered frame into the framebuffer texture
23
+ * renderer.copyFramebufferToTexture( frameTexture, vector );
24
+ * ```
25
+ *
26
+ * @augments Texture
27
+ */
4
28
  class FramebufferTexture extends Texture {
5
29
 
30
+ /**
31
+ * Constructs a new framebuffer texture.
32
+ *
33
+ * @param {number} width - The width of the texture.
34
+ * @param {number} height - The height of the texture.
35
+ */
6
36
  constructor( width, height ) {
7
37
 
8
38
  super( { width, height } );
9
39
 
40
+ /**
41
+ * This flag can be used for type testing.
42
+ *
43
+ * @type {boolean}
44
+ * @readonly
45
+ * @default true
46
+ */
10
47
  this.isFramebufferTexture = true;
11
48
 
49
+ /**
50
+ * How the texture is sampled when a texel covers more than one pixel.
51
+ *
52
+ * Overwritten and set to `NearestFilter` by default to disable filtering.
53
+ *
54
+ * @type {(NearestFilter|NearestMipmapNearestFilter|NearestMipmapLinearFilter|LinearFilter|LinearMipmapNearestFilter|LinearMipmapLinearFilter)}
55
+ * @default NearestFilter
56
+ */
12
57
  this.magFilter = NearestFilter;
58
+
59
+ /**
60
+ * How the texture is sampled when a texel covers less than one pixel.
61
+ *
62
+ * Overwritten and set to `NearestFilter` by default to disable filtering.
63
+ *
64
+ * @type {(NearestFilter|NearestMipmapNearestFilter|NearestMipmapLinearFilter|LinearFilter|LinearMipmapNearestFilter|LinearMipmapLinearFilter)}
65
+ * @default NearestFilter
66
+ */
13
67
  this.minFilter = NearestFilter;
14
68
 
69
+ /**
70
+ * Whether to generate mipmaps (if possible) for a texture.
71
+ *
72
+ * Overwritten and set to `false` by default.
73
+ *
74
+ * @type {boolean}
75
+ * @default false
76
+ */
15
77
  this.generateMipmaps = false;
16
78
 
17
79
  this.needsUpdate = true;
@@ -3,29 +3,98 @@ import { generateUUID } from '../math/MathUtils.js';
3
3
 
4
4
  let _sourceId = 0;
5
5
 
6
+ /**
7
+ * Represents the data source of a texture.
8
+ *
9
+ * The main purpose of this class is to decouple the data definition from the texture
10
+ * definition so the same data can be used with multiple texture instances.
11
+ */
6
12
  class Source {
7
13
 
14
+ /**
15
+ * Constructs a new video texture.
16
+ *
17
+ * @param {any} [data=null] - The data definition of a texture.
18
+ */
8
19
  constructor( data = null ) {
9
20
 
21
+ /**
22
+ * This flag can be used for type testing.
23
+ *
24
+ * @type {boolean}
25
+ * @readonly
26
+ * @default true
27
+ */
10
28
  this.isSource = true;
11
29
 
30
+ /**
31
+ * The ID of the source.
32
+ *
33
+ * @name Source#id
34
+ * @type {number}
35
+ * @readonly
36
+ */
12
37
  Object.defineProperty( this, 'id', { value: _sourceId ++ } );
13
38
 
39
+ /**
40
+ * The UUID of the source.
41
+ *
42
+ * @type {string}
43
+ * @readonly
44
+ */
14
45
  this.uuid = generateUUID();
15
46
 
47
+ /**
48
+ * The data definition of a texture.
49
+ *
50
+ * @type {any}
51
+ */
16
52
  this.data = data;
53
+
54
+ /**
55
+ * This property is only relevant when {@link Source#needsUpdate} is set to `true` and
56
+ * provides more control on how texture data should be processed. When `dataReady` is set
57
+ * to `false`, the engine performs the memory allocation (if necessary) but does not transfer
58
+ * the data into the GPU memory.
59
+ *
60
+ * @type {boolean}
61
+ * @default true
62
+ */
17
63
  this.dataReady = true;
18
64
 
65
+ /**
66
+ * This starts at `0` and counts how many times {@link Source#needsUpdate} is set to `true`.
67
+ *
68
+ * @type {number}
69
+ * @readonly
70
+ * @default 0
71
+ */
19
72
  this.version = 0;
20
73
 
21
74
  }
22
75
 
76
+ /**
77
+ * When the property is set to `true`, the engine allocates the memory
78
+ * for the texture (if necessary) and triggers the actual texture upload
79
+ * to the GPU next time the source is used.
80
+ *
81
+ * @type {boolean}
82
+ * @default false
83
+ * @param {boolean} value
84
+ */
23
85
  set needsUpdate( value ) {
24
86
 
25
87
  if ( value === true ) this.version ++;
26
88
 
27
89
  }
28
90
 
91
+ /**
92
+ * Serializes the source into JSON.
93
+ *
94
+ * @param {?(Object|string)} meta - An optional value holding meta information about the serialization.
95
+ * @return {Object} A JSON object representing the serialized source.
96
+ * @see {@link ObjectLoader#parse}
97
+ */
29
98
  toJSON( meta ) {
30
99
 
31
100
  const isRootObject = ( meta === undefined || typeof meta === 'string' );
@@ -35,11 +35,11 @@ class Texture extends EventDispatcher {
35
35
  * @param {number} [wrapS=ClampToEdgeWrapping] - The wrapS value.
36
36
  * @param {number} [wrapT=ClampToEdgeWrapping] - The wrapT value.
37
37
  * @param {number} [magFilter=LinearFilter] - The mag filter value.
38
- * @param {number} [minFilter=LinearFilter] - The min filter value.
39
- * @param {number} [format=RGBAFormat] - The min filter value.
40
- * @param {number} [type=UnsignedByteType] - The min filter value.
41
- * @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The min filter value.
42
- * @param {string} [colorSpace=NoColorSpace] - The min filter value.
38
+ * @param {number} [minFilter=LinearMipmapLinearFilter] - The min filter value.
39
+ * @param {number} [format=RGBAFormat] - The texture format.
40
+ * @param {number} [type=UnsignedByteType] - The texture type.
41
+ * @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The anisotropy value.
42
+ * @param {string} [colorSpace=NoColorSpace] - The color space.
43
43
  */
44
44
  constructor( image = Texture.DEFAULT_IMAGE, mapping = Texture.DEFAULT_MAPPING, wrapS = ClampToEdgeWrapping, wrapT = ClampToEdgeWrapping, magFilter = LinearFilter, minFilter = LinearMipmapLinearFilter, format = RGBAFormat, type = UnsignedByteType, anisotropy = Texture.DEFAULT_ANISOTROPY, colorSpace = NoColorSpace ) {
45
45