super-three 0.177.0 → 0.181.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (501) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +1994 -749
  3. package/build/three.core.js +1358 -506
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +631 -247
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +113 -33
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +9571 -3424
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +9397 -3426
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  14. package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  15. package/examples/jsm/Addons.js +2 -3
  16. package/examples/jsm/animation/CCDIKSolver.js +1 -1
  17. package/examples/jsm/capabilities/WebGL.js +0 -27
  18. package/examples/jsm/capabilities/WebGPU.js +1 -1
  19. package/examples/jsm/controls/ArcballControls.js +9 -9
  20. package/examples/jsm/controls/DragControls.js +7 -57
  21. package/examples/jsm/controls/FirstPersonControls.js +3 -3
  22. package/examples/jsm/controls/FlyControls.js +1 -1
  23. package/examples/jsm/controls/OrbitControls.js +2 -2
  24. package/examples/jsm/controls/PointerLockControls.js +2 -10
  25. package/examples/jsm/controls/TrackballControls.js +1 -1
  26. package/examples/jsm/controls/TransformControls.js +62 -15
  27. package/examples/jsm/csm/CSMShadowNode.js +4 -4
  28. package/examples/jsm/effects/AsciiEffect.js +8 -8
  29. package/examples/jsm/environments/RoomEnvironment.js +8 -3
  30. package/examples/jsm/exporters/DRACOExporter.js +2 -2
  31. package/examples/jsm/exporters/EXRExporter.js +1 -1
  32. package/examples/jsm/exporters/GLTFExporter.js +33 -25
  33. package/examples/jsm/exporters/KTX2Exporter.js +4 -2
  34. package/examples/jsm/exporters/PLYExporter.js +1 -1
  35. package/examples/jsm/exporters/USDZExporter.js +683 -299
  36. package/examples/jsm/geometries/DecalGeometry.js +2 -2
  37. package/examples/jsm/geometries/ParametricGeometry.js +1 -1
  38. package/examples/jsm/geometries/RoundedBoxGeometry.js +47 -8
  39. package/examples/jsm/geometries/TeapotGeometry.js +2 -2
  40. package/examples/jsm/geometries/TextGeometry.js +3 -2
  41. package/examples/jsm/gpgpu/BitonicSort.js +715 -0
  42. package/examples/jsm/helpers/ViewHelper.js +43 -5
  43. package/examples/jsm/inspector/Inspector.js +427 -0
  44. package/examples/jsm/inspector/RendererInspector.js +415 -0
  45. package/examples/jsm/inspector/tabs/Console.js +204 -0
  46. package/examples/jsm/inspector/tabs/Parameters.js +332 -0
  47. package/examples/jsm/inspector/tabs/Performance.js +268 -0
  48. package/examples/jsm/inspector/tabs/Viewer.js +166 -0
  49. package/examples/jsm/inspector/ui/Graph.js +95 -0
  50. package/examples/jsm/inspector/ui/Item.js +170 -0
  51. package/examples/jsm/inspector/ui/List.js +75 -0
  52. package/examples/jsm/inspector/ui/Profiler.js +170 -0
  53. package/examples/jsm/inspector/ui/Style.js +654 -0
  54. package/examples/jsm/inspector/ui/Tab.js +46 -0
  55. package/examples/jsm/inspector/ui/Values.js +423 -0
  56. package/examples/jsm/inspector/ui/utils.js +56 -0
  57. package/examples/jsm/interactive/HTMLMesh.js +11 -13
  58. package/examples/jsm/interactive/InteractiveGroup.js +1 -1
  59. package/examples/jsm/interactive/SelectionBox.js +30 -0
  60. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  61. package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
  62. package/examples/jsm/lights/LightProbeGenerator.js +14 -3
  63. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  64. package/examples/jsm/lines/Line2.js +3 -3
  65. package/examples/jsm/lines/LineGeometry.js +1 -1
  66. package/examples/jsm/lines/LineSegments2.js +2 -2
  67. package/examples/jsm/lines/Wireframe.js +2 -2
  68. package/examples/jsm/lines/WireframeGeometry2.js +1 -1
  69. package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
  70. package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
  71. package/examples/jsm/loaders/3MFLoader.js +1 -1
  72. package/examples/jsm/loaders/ColladaLoader.js +4 -4
  73. package/examples/jsm/loaders/DDSLoader.js +1 -1
  74. package/examples/jsm/loaders/DRACOLoader.js +73 -22
  75. package/examples/jsm/loaders/EXRLoader.js +210 -22
  76. package/examples/jsm/loaders/FBXLoader.js +4 -4
  77. package/examples/jsm/loaders/FontLoader.js +23 -5
  78. package/examples/jsm/loaders/GLTFLoader.js +14 -8
  79. package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
  80. package/examples/jsm/loaders/HDRLoader.js +486 -0
  81. package/examples/jsm/loaders/KTX2Loader.js +136 -49
  82. package/examples/jsm/loaders/KTXLoader.js +2 -2
  83. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  84. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  85. package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
  86. package/examples/jsm/loaders/LWOLoader.js +2 -2
  87. package/examples/jsm/loaders/MaterialXLoader.js +233 -34
  88. package/examples/jsm/loaders/OBJLoader.js +1 -1
  89. package/examples/jsm/loaders/PDBLoader.js +1 -1
  90. package/examples/jsm/loaders/RGBELoader.js +7 -473
  91. package/examples/jsm/loaders/SVGLoader.js +2 -2
  92. package/examples/jsm/loaders/TTFLoader.js +13 -1
  93. package/examples/jsm/loaders/USDLoader.js +219 -0
  94. package/examples/jsm/loaders/USDZLoader.js +4 -892
  95. package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
  96. package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
  97. package/examples/jsm/loaders/usd/USDAParser.js +741 -0
  98. package/examples/jsm/loaders/usd/USDCParser.js +17 -0
  99. package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  100. package/examples/jsm/math/ColorSpaces.js +19 -1
  101. package/examples/jsm/math/ConvexHull.js +3 -3
  102. package/examples/jsm/math/ImprovedNoise.js +1 -1
  103. package/examples/jsm/math/Lut.js +2 -2
  104. package/examples/jsm/math/SimplexNoise.js +1 -1
  105. package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
  106. package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
  107. package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
  108. package/examples/jsm/misc/TubePainter.js +383 -40
  109. package/examples/jsm/misc/Volume.js +1 -1
  110. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  111. package/examples/jsm/objects/LensflareMesh.js +3 -3
  112. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  113. package/examples/jsm/objects/Sky.js +1 -1
  114. package/examples/jsm/objects/SkyMesh.js +3 -3
  115. package/examples/jsm/objects/Water.js +3 -3
  116. package/examples/jsm/objects/WaterMesh.js +6 -6
  117. package/examples/jsm/physics/RapierPhysics.js +95 -16
  118. package/examples/jsm/postprocessing/GTAOPass.js +10 -9
  119. package/examples/jsm/postprocessing/GlitchPass.js +2 -2
  120. package/examples/jsm/postprocessing/OutlinePass.js +17 -17
  121. package/examples/jsm/postprocessing/SSAOPass.js +10 -9
  122. package/examples/jsm/postprocessing/SSRPass.js +37 -8
  123. package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
  124. package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
  125. package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
  126. package/examples/jsm/renderers/SVGRenderer.js +1 -1
  127. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
  128. package/examples/jsm/shaders/AfterimageShader.js +1 -1
  129. package/examples/jsm/shaders/BleachBypassShader.js +1 -1
  130. package/examples/jsm/shaders/BokehShader.js +1 -1
  131. package/examples/jsm/shaders/BokehShader2.js +1 -1
  132. package/examples/jsm/shaders/DotScreenShader.js +1 -1
  133. package/examples/jsm/shaders/FocusShader.js +1 -1
  134. package/examples/jsm/shaders/GTAOShader.js +2 -2
  135. package/examples/jsm/shaders/GodRaysShader.js +1 -1
  136. package/examples/jsm/shaders/KaleidoShader.js +1 -1
  137. package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
  138. package/examples/jsm/shaders/SSRShader.js +1 -1
  139. package/examples/jsm/shaders/SepiaShader.js +1 -1
  140. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
  141. package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
  142. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +11 -2
  143. package/examples/jsm/shaders/VignetteShader.js +1 -1
  144. package/examples/jsm/transpiler/AST.js +381 -30
  145. package/examples/jsm/transpiler/GLSLDecoder.js +247 -104
  146. package/examples/jsm/transpiler/Linker.js +327 -0
  147. package/examples/jsm/transpiler/TSLEncoder.js +196 -92
  148. package/examples/jsm/transpiler/Transpiler.js +17 -1
  149. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  150. package/examples/jsm/transpiler/WGSLEncoder.js +812 -0
  151. package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
  152. package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
  153. package/examples/jsm/tsl/display/BloomNode.js +11 -6
  154. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
  155. package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
  156. package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
  157. package/examples/jsm/tsl/display/GTAONode.js +53 -5
  158. package/examples/jsm/tsl/display/GaussianBlurNode.js +55 -43
  159. package/examples/jsm/tsl/display/OutlineNode.js +13 -2
  160. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  161. package/examples/jsm/tsl/display/SSGINode.js +654 -0
  162. package/examples/jsm/tsl/display/SSRNode.js +182 -65
  163. package/examples/jsm/tsl/display/SSSNode.js +488 -0
  164. package/examples/jsm/tsl/display/TRAANode.js +578 -0
  165. package/examples/jsm/tsl/display/boxBlur.js +65 -0
  166. package/examples/jsm/tsl/display/hashBlur.js +18 -20
  167. package/examples/jsm/tsl/lighting/TiledLightsNode.js +22 -2
  168. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  169. package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
  170. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  171. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  172. package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
  173. package/package.json +5 -10
  174. package/src/Three.Core.js +5 -2
  175. package/src/Three.TSL.js +112 -32
  176. package/src/Three.WebGPU.Nodes.js +2 -0
  177. package/src/Three.WebGPU.js +4 -0
  178. package/src/animation/AnimationClip.js +20 -4
  179. package/src/animation/AnimationMixer.js +3 -3
  180. package/src/animation/AnimationObjectGroup.js +2 -1
  181. package/src/animation/KeyframeTrack.js +8 -7
  182. package/src/animation/PropertyBinding.js +12 -11
  183. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  184. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  185. package/src/audio/Audio.js +10 -9
  186. package/src/audio/PositionalAudio.js +1 -1
  187. package/src/cameras/Camera.js +14 -0
  188. package/src/cameras/OrthographicCamera.js +2 -2
  189. package/src/cameras/PerspectiveCamera.js +2 -2
  190. package/src/cameras/StereoCamera.js +2 -2
  191. package/src/constants.js +13 -5
  192. package/src/core/BufferAttribute.js +3 -3
  193. package/src/core/BufferGeometry.js +10 -10
  194. package/src/core/Clock.js +2 -8
  195. package/src/core/EventDispatcher.js +1 -1
  196. package/src/core/GLBufferAttribute.js +13 -1
  197. package/src/core/InterleavedBuffer.js +1 -1
  198. package/src/core/InterleavedBufferAttribute.js +3 -2
  199. package/src/core/Object3D.js +4 -3
  200. package/src/core/Raycaster.js +2 -1
  201. package/src/core/RenderTarget.js +10 -1
  202. package/{examples/jsm/misc → src/core}/Timer.js +4 -42
  203. package/src/extras/Controls.js +5 -4
  204. package/src/extras/DataUtils.js +2 -1
  205. package/src/extras/Earcut.js +6 -0
  206. package/src/extras/ImageUtils.js +2 -2
  207. package/src/extras/PMREMGenerator.js +279 -55
  208. package/src/extras/TextureUtils.js +2 -1
  209. package/src/extras/core/Curve.js +2 -1
  210. package/src/extras/core/Interpolations.js +7 -1
  211. package/src/extras/core/Path.js +22 -22
  212. package/src/extras/core/ShapePath.js +4 -4
  213. package/src/extras/lib/earcut.js +8 -8
  214. package/src/geometries/BoxGeometry.js +1 -0
  215. package/src/geometries/CapsuleGeometry.js +1 -0
  216. package/src/geometries/CircleGeometry.js +1 -0
  217. package/src/geometries/ConeGeometry.js +1 -0
  218. package/src/geometries/CylinderGeometry.js +1 -0
  219. package/src/geometries/DodecahedronGeometry.js +1 -0
  220. package/src/geometries/ExtrudeGeometry.js +8 -6
  221. package/src/geometries/IcosahedronGeometry.js +1 -0
  222. package/src/geometries/LatheGeometry.js +1 -0
  223. package/src/geometries/OctahedronGeometry.js +1 -0
  224. package/src/geometries/PlaneGeometry.js +1 -0
  225. package/src/geometries/RingGeometry.js +1 -0
  226. package/src/geometries/ShapeGeometry.js +1 -0
  227. package/src/geometries/SphereGeometry.js +1 -0
  228. package/src/geometries/TetrahedronGeometry.js +1 -0
  229. package/src/geometries/TorusGeometry.js +1 -0
  230. package/src/geometries/TorusKnotGeometry.js +1 -0
  231. package/src/geometries/TubeGeometry.js +1 -0
  232. package/src/helpers/CameraHelper.js +42 -12
  233. package/src/helpers/SkeletonHelper.js +35 -6
  234. package/src/lights/LightShadow.js +21 -8
  235. package/src/lights/PointLightShadow.js +1 -1
  236. package/src/lights/webgpu/ProjectorLight.js +1 -1
  237. package/src/loaders/AnimationLoader.js +2 -1
  238. package/src/loaders/AudioLoader.js +2 -1
  239. package/src/loaders/BufferGeometryLoader.js +2 -2
  240. package/src/loaders/Cache.js +2 -2
  241. package/src/loaders/DataTextureLoader.js +1 -1
  242. package/src/loaders/FileLoader.js +29 -5
  243. package/src/loaders/ImageBitmapLoader.js +32 -8
  244. package/src/loaders/ImageLoader.js +56 -9
  245. package/src/loaders/Loader.js +17 -3
  246. package/src/loaders/LoadingManager.js +45 -0
  247. package/src/loaders/MaterialLoader.js +3 -2
  248. package/src/loaders/ObjectLoader.js +13 -13
  249. package/src/loaders/TextureLoader.js +1 -1
  250. package/src/loaders/nodes/NodeLoader.js +3 -2
  251. package/src/materials/Material.js +16 -3
  252. package/src/materials/MeshBasicMaterial.js +2 -1
  253. package/src/materials/MeshDepthMaterial.js +1 -0
  254. package/src/materials/MeshDistanceMaterial.js +1 -1
  255. package/src/materials/MeshLambertMaterial.js +2 -1
  256. package/src/materials/MeshMatcapMaterial.js +22 -0
  257. package/src/materials/MeshNormalMaterial.js +1 -0
  258. package/src/materials/MeshPhongMaterial.js +2 -1
  259. package/src/materials/MeshPhysicalMaterial.js +2 -1
  260. package/src/materials/MeshStandardMaterial.js +8 -7
  261. package/src/materials/MeshToonMaterial.js +1 -0
  262. package/src/materials/PointsMaterial.js +1 -1
  263. package/src/materials/ShaderMaterial.js +2 -2
  264. package/src/materials/nodes/Line2NodeMaterial.js +2 -10
  265. package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
  266. package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
  267. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  268. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
  269. package/src/materials/nodes/MeshSSSNodeMaterial.js +3 -3
  270. package/src/materials/nodes/NodeMaterial.js +90 -27
  271. package/src/materials/nodes/PointsNodeMaterial.js +86 -28
  272. package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
  273. package/src/materials/nodes/manager/NodeMaterialObserver.js +89 -3
  274. package/src/math/Color.js +6 -5
  275. package/src/math/ColorManagement.js +9 -3
  276. package/src/math/Cylindrical.js +1 -1
  277. package/src/math/Euler.js +2 -1
  278. package/src/math/Frustum.js +25 -9
  279. package/src/math/FrustumArray.js +10 -5
  280. package/src/math/Line3.js +129 -2
  281. package/src/math/MathUtils.js +13 -11
  282. package/src/math/Matrix2.js +1 -1
  283. package/src/math/Matrix3.js +2 -2
  284. package/src/math/Matrix4.js +55 -34
  285. package/src/math/Plane.js +1 -1
  286. package/src/math/Quaternion.js +69 -67
  287. package/src/math/Spherical.js +3 -3
  288. package/src/nodes/Nodes.js +6 -4
  289. package/src/nodes/TSL.js +9 -4
  290. package/src/nodes/accessors/AccessorsUtils.js +7 -8
  291. package/src/nodes/accessors/Bitangent.js +31 -25
  292. package/src/nodes/accessors/BufferNode.js +1 -1
  293. package/src/nodes/accessors/Camera.js +142 -16
  294. package/src/nodes/accessors/ClippingNode.js +6 -5
  295. package/src/nodes/accessors/CubeTextureNode.js +5 -4
  296. package/src/nodes/accessors/InstanceNode.js +25 -5
  297. package/src/nodes/accessors/Lights.js +10 -0
  298. package/src/nodes/accessors/Normal.js +97 -30
  299. package/src/nodes/accessors/Object3DNode.js +2 -2
  300. package/src/nodes/accessors/Position.js +25 -9
  301. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  302. package/src/nodes/accessors/ReferenceNode.js +20 -4
  303. package/src/nodes/accessors/ReflectVector.js +3 -3
  304. package/src/nodes/accessors/SceneNode.js +3 -2
  305. package/src/nodes/accessors/StorageBufferNode.js +2 -1
  306. package/src/nodes/accessors/StorageTextureNode.js +23 -1
  307. package/src/nodes/accessors/Tangent.js +25 -17
  308. package/src/nodes/accessors/TangentUtils.js +46 -0
  309. package/src/nodes/accessors/Texture3DNode.js +14 -1
  310. package/src/nodes/accessors/TextureBicubic.js +21 -3
  311. package/src/nodes/accessors/TextureNode.js +142 -44
  312. package/src/nodes/accessors/UniformArrayNode.js +0 -16
  313. package/src/nodes/code/FunctionCallNode.js +24 -4
  314. package/src/nodes/code/FunctionNode.js +23 -0
  315. package/src/nodes/core/ArrayNode.js +13 -0
  316. package/src/nodes/core/AssignNode.js +6 -2
  317. package/src/nodes/core/AttributeNode.js +2 -1
  318. package/src/nodes/core/ContextNode.js +48 -10
  319. package/src/nodes/core/IndexNode.js +2 -2
  320. package/src/nodes/core/InputNode.js +2 -1
  321. package/src/nodes/core/InspectorNode.js +128 -0
  322. package/src/nodes/core/{CacheNode.js → IsolateNode.js} +36 -17
  323. package/src/nodes/core/Node.js +167 -34
  324. package/src/nodes/core/NodeBuilder.js +404 -120
  325. package/src/nodes/core/NodeFrame.js +21 -21
  326. package/src/nodes/core/NodeFunction.js +2 -1
  327. package/src/nodes/core/NodeParser.js +2 -1
  328. package/src/nodes/core/NodeUniform.js +1 -1
  329. package/src/nodes/core/NodeUtils.js +17 -88
  330. package/src/nodes/core/ParameterNode.js +31 -0
  331. package/src/nodes/core/PropertyNode.js +7 -0
  332. package/src/nodes/core/StackNode.js +77 -30
  333. package/src/nodes/core/StructNode.js +5 -5
  334. package/src/nodes/core/StructTypeNode.js +1 -0
  335. package/src/nodes/core/SubBuildNode.js +89 -0
  336. package/src/nodes/core/UniformNode.js +80 -14
  337. package/src/nodes/core/VarNode.js +142 -16
  338. package/src/nodes/core/VaryingNode.js +9 -6
  339. package/src/nodes/display/BlendModes.js +7 -6
  340. package/src/nodes/display/BumpMapNode.js +1 -1
  341. package/src/nodes/display/ColorAdjustment.js +1 -1
  342. package/src/nodes/display/FrontFacingNode.js +35 -7
  343. package/src/nodes/display/NormalMapNode.js +20 -50
  344. package/src/nodes/display/PassNode.js +206 -17
  345. package/src/nodes/display/RenderOutputNode.js +28 -2
  346. package/src/nodes/display/ScreenNode.js +44 -40
  347. package/src/nodes/display/ToneMappingNode.js +31 -4
  348. package/src/nodes/display/ToonOutlinePassNode.js +8 -0
  349. package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
  350. package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
  351. package/src/nodes/display/ViewportTextureNode.js +94 -4
  352. package/src/nodes/fog/Fog.js +3 -2
  353. package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
  354. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  355. package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
  356. package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
  357. package/src/nodes/functions/BasicLightingModel.js +2 -1
  358. package/src/nodes/functions/PhongLightingModel.js +3 -3
  359. package/src/nodes/functions/PhysicalLightingModel.js +19 -18
  360. package/src/nodes/functions/VolumetricLightingModel.js +5 -5
  361. package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
  362. package/src/nodes/geometry/RangeNode.js +40 -4
  363. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  364. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
  365. package/src/nodes/gpgpu/ComputeNode.js +81 -25
  366. package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
  367. package/src/nodes/gpgpu/WorkgroupInfoNode.js +29 -3
  368. package/src/nodes/lighting/EnvironmentNode.js +11 -11
  369. package/src/nodes/lighting/LightsNode.js +7 -8
  370. package/src/nodes/lighting/PointShadowNode.js +6 -0
  371. package/src/nodes/lighting/ProjectorLightNode.js +19 -6
  372. package/src/nodes/lighting/ShadowFilterNode.js +3 -1
  373. package/src/nodes/lighting/ShadowNode.js +77 -10
  374. package/src/nodes/materialx/MaterialXNodes.js +131 -2
  375. package/src/nodes/materialx/lib/mx_noise.js +165 -1
  376. package/src/nodes/math/BitcastNode.js +156 -0
  377. package/src/nodes/math/ConditionalNode.js +25 -27
  378. package/src/nodes/math/MathNode.js +106 -65
  379. package/src/nodes/math/OperatorNode.js +28 -43
  380. package/src/nodes/pmrem/PMREMUtils.js +117 -2
  381. package/src/nodes/shapes/Shapes.js +1 -1
  382. package/src/nodes/tsl/TSLBase.js +6 -2
  383. package/src/nodes/tsl/TSLCore.js +546 -186
  384. package/src/nodes/utils/DebugNode.js +3 -2
  385. package/src/nodes/utils/EquirectUV.js +27 -0
  386. package/src/nodes/utils/EventNode.js +119 -0
  387. package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
  388. package/src/nodes/utils/JoinNode.js +6 -3
  389. package/src/nodes/utils/LoopNode.js +20 -41
  390. package/src/nodes/utils/MatcapUV.js +22 -0
  391. package/src/nodes/utils/MemberNode.js +59 -7
  392. package/src/nodes/utils/PostProcessingUtils.js +28 -1
  393. package/src/nodes/utils/RTTNode.js +33 -6
  394. package/src/nodes/utils/ReflectorNode.js +68 -10
  395. package/src/nodes/utils/SampleNode.js +91 -0
  396. package/src/nodes/utils/SplitNode.js +11 -0
  397. package/src/nodes/utils/Timer.js +0 -47
  398. package/src/nodes/utils/TriplanarTextures.js +65 -0
  399. package/src/objects/BatchedMesh.js +6 -4
  400. package/src/objects/LOD.js +1 -1
  401. package/src/objects/Line.js +2 -1
  402. package/src/objects/LineSegments.js +2 -1
  403. package/src/objects/Skeleton.js +3 -2
  404. package/src/objects/SkinnedMesh.js +3 -1
  405. package/src/objects/Sprite.js +4 -3
  406. package/src/renderers/WebGLRenderer.js +77 -66
  407. package/src/renderers/common/Animation.js +13 -1
  408. package/src/renderers/common/Attributes.js +1 -1
  409. package/src/renderers/common/Backend.js +108 -27
  410. package/src/renderers/common/Background.js +4 -3
  411. package/src/renderers/common/Bindings.js +76 -19
  412. package/src/renderers/common/CanvasTarget.js +341 -0
  413. package/src/renderers/common/ChainMap.js +1 -1
  414. package/src/renderers/common/Color4.js +2 -2
  415. package/src/renderers/common/CubeRenderTarget.js +1 -1
  416. package/src/renderers/common/DataMap.js +1 -1
  417. package/src/renderers/common/Geometries.js +26 -0
  418. package/src/renderers/common/Info.js +4 -2
  419. package/src/renderers/common/InspectorBase.js +146 -0
  420. package/src/renderers/common/Pipelines.js +1 -1
  421. package/src/renderers/common/PostProcessing.js +61 -25
  422. package/src/renderers/common/QuadMesh.js +7 -1
  423. package/src/renderers/common/RenderContext.js +2 -2
  424. package/src/renderers/common/RenderList.js +7 -3
  425. package/src/renderers/common/RenderObject.js +84 -5
  426. package/src/renderers/common/RenderObjects.js +1 -1
  427. package/src/renderers/common/Renderer.js +486 -255
  428. package/src/renderers/common/RendererUtils.js +9 -0
  429. package/src/renderers/common/SampledTexture.js +8 -68
  430. package/src/renderers/common/Sampler.js +117 -0
  431. package/src/renderers/common/Storage3DTexture.js +100 -0
  432. package/src/renderers/common/StorageArrayTexture.js +84 -0
  433. package/src/renderers/common/StorageTexture.js +27 -0
  434. package/src/renderers/common/Textures.js +138 -46
  435. package/src/renderers/common/TimestampQueryPool.js +65 -3
  436. package/src/renderers/common/UniformsGroup.js +2 -1
  437. package/src/renderers/common/XRManager.js +63 -24
  438. package/src/renderers/common/XRRenderTarget.js +21 -4
  439. package/src/renderers/common/extras/PMREMGenerator.js +161 -66
  440. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  441. package/src/renderers/common/nodes/NodeLibrary.js +9 -7
  442. package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
  443. package/src/renderers/common/nodes/NodeSampler.js +13 -1
  444. package/src/renderers/common/nodes/Nodes.js +38 -16
  445. package/src/renderers/shaders/DFGLUTData.js +64 -0
  446. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
  447. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
  448. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
  449. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
  450. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
  451. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  452. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
  453. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
  454. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +21 -11
  455. package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
  456. package/src/renderers/shaders/UniformsLib.js +1 -0
  457. package/src/renderers/shaders/UniformsUtils.js +25 -4
  458. package/src/renderers/webgl/WebGLAttributes.js +4 -0
  459. package/src/renderers/webgl/WebGLCapabilities.js +4 -3
  460. package/src/renderers/webgl/WebGLExtensions.js +2 -25
  461. package/src/renderers/webgl/WebGLInfo.js +3 -1
  462. package/src/renderers/webgl/WebGLProgram.js +25 -18
  463. package/src/renderers/webgl/WebGLPrograms.js +9 -6
  464. package/src/renderers/webgl/WebGLShadowMap.js +13 -2
  465. package/src/renderers/webgl/WebGLState.js +17 -16
  466. package/src/renderers/webgl/WebGLTextures.js +38 -21
  467. package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
  468. package/src/renderers/webgl/WebGLUtils.js +3 -2
  469. package/src/renderers/webgl-fallback/WebGLBackend.js +245 -182
  470. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +184 -30
  471. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
  472. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
  473. package/src/renderers/webgl-fallback/utils/WebGLState.js +9 -8
  474. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +171 -19
  475. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
  476. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
  477. package/src/renderers/webgpu/WebGPUBackend.js +205 -128
  478. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
  479. package/src/renderers/webgpu/WebGPURenderer.js +3 -2
  480. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +198 -121
  481. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +8 -1
  482. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +49 -33
  483. package/src/renderers/webgpu/utils/WebGPUConstants.js +14 -3
  484. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +56 -37
  485. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
  486. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +266 -158
  487. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
  488. package/src/renderers/webgpu/utils/WebGPUUtils.js +24 -19
  489. package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
  490. package/src/renderers/webxr/WebXRManager.js +89 -13
  491. package/src/textures/ExternalTexture.js +56 -0
  492. package/src/textures/FramebufferTexture.js +2 -2
  493. package/src/textures/Source.js +14 -3
  494. package/src/textures/Texture.js +3 -2
  495. package/src/textures/VideoTexture.js +29 -2
  496. package/src/utils.js +67 -3
  497. package/examples/jsm/loaders/RGBMLoader.js +0 -1148
  498. package/examples/jsm/tsl/display/TRAAPassNode.js +0 -452
  499. package/src/nodes/utils/EquirectUVNode.js +0 -65
  500. package/src/nodes/utils/MatcapUVNode.js +0 -49
  501. package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
@@ -1,6 +1,7 @@
1
1
  import { AudioContext } from '../audio/AudioContext.js';
2
2
  import { FileLoader } from './FileLoader.js';
3
3
  import { Loader } from './Loader.js';
4
+ import { error } from '../utils.js';
4
5
 
5
6
  /**
6
7
  * Class for loading audio buffers. Audios are internally
@@ -81,7 +82,7 @@ class AudioLoader extends Loader {
81
82
 
82
83
  } else {
83
84
 
84
- console.error( e );
85
+ error( e );
85
86
 
86
87
  }
87
88
 
@@ -7,7 +7,7 @@ import { InstancedBufferGeometry } from '../core/InstancedBufferGeometry.js';
7
7
  import { InstancedBufferAttribute } from '../core/InstancedBufferAttribute.js';
8
8
  import { InterleavedBufferAttribute } from '../core/InterleavedBufferAttribute.js';
9
9
  import { InterleavedBuffer } from '../core/InterleavedBuffer.js';
10
- import { getTypedArray } from '../utils.js';
10
+ import { getTypedArray, error } from '../utils.js';
11
11
 
12
12
  /**
13
13
  * Class for loading geometries. The files are internally
@@ -67,7 +67,7 @@ class BufferGeometryLoader extends Loader {
67
67
 
68
68
  } else {
69
69
 
70
- console.error( e );
70
+ error( e );
71
71
 
72
72
  }
73
73
 
@@ -35,7 +35,7 @@ const Cache = {
35
35
 
36
36
  if ( this.enabled === false ) return;
37
37
 
38
- // console.log( 'THREE.Cache', 'Adding key:', key );
38
+ // log( 'Cache', 'Adding key:', key );
39
39
 
40
40
  this.files[ key ] = file;
41
41
 
@@ -52,7 +52,7 @@ const Cache = {
52
52
 
53
53
  if ( this.enabled === false ) return;
54
54
 
55
- // console.log( 'THREE.Cache', 'Checking key:', key );
55
+ // log( 'Cache', 'Checking key:', key );
56
56
 
57
57
  return this.files[ key ];
58
58
 
@@ -65,7 +65,7 @@ class DataTextureLoader extends Loader {
65
65
 
66
66
  } else {
67
67
 
68
- console.error( error );
68
+ error( error );
69
69
  return;
70
70
 
71
71
  }
@@ -1,5 +1,6 @@
1
1
  import { Cache } from './Cache.js';
2
2
  import { Loader } from './Loader.js';
3
+ import { warn } from '../utils.js';
3
4
 
4
5
  const loading = {};
5
6
 
@@ -41,7 +42,8 @@ class FileLoader extends Loader {
41
42
  super( manager );
42
43
 
43
44
  /**
44
- * The expected mime type.
45
+ * The expected mime type. Valid values can be found
46
+ * [here](hhttps://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString#mimetype)
45
47
  *
46
48
  * @type {string}
47
49
  */
@@ -55,6 +57,14 @@ class FileLoader extends Loader {
55
57
  */
56
58
  this.responseType = '';
57
59
 
60
+ /**
61
+ * Used for aborting requests.
62
+ *
63
+ * @private
64
+ * @type {AbortController}
65
+ */
66
+ this._abortController = new AbortController();
67
+
58
68
  }
59
69
 
60
70
  /**
@@ -74,7 +84,7 @@ class FileLoader extends Loader {
74
84
 
75
85
  url = this.manager.resolveURL( url );
76
86
 
77
- const cached = Cache.get( url );
87
+ const cached = Cache.get( `file:${url}` );
78
88
 
79
89
  if ( cached !== undefined ) {
80
90
 
@@ -121,7 +131,7 @@ class FileLoader extends Loader {
121
131
  const req = new Request( url, {
122
132
  headers: new Headers( this.requestHeader ),
123
133
  credentials: this.withCredentials ? 'include' : 'same-origin',
124
- // An abort controller could be added within a future PR
134
+ signal: ( typeof AbortSignal.any === 'function' ) ? AbortSignal.any( [ this._abortController.signal, this.manager.abortController.signal ] ) : this._abortController.signal
125
135
  } );
126
136
 
127
137
  // record states ( avoid data race )
@@ -139,7 +149,7 @@ class FileLoader extends Loader {
139
149
 
140
150
  if ( response.status === 0 ) {
141
151
 
142
- console.warn( 'THREE.FileLoader: HTTP Status 0 received.' );
152
+ warn( 'FileLoader: HTTP Status 0 received.' );
143
153
 
144
154
  }
145
155
 
@@ -263,7 +273,7 @@ class FileLoader extends Loader {
263
273
 
264
274
  // Add to cache only on HTTP success, so that we do not cache
265
275
  // error response bodies as proper responses to requests.
266
- Cache.add( url, data );
276
+ Cache.add( `file:${url}`, data );
267
277
 
268
278
  const callbacks = loading[ url ];
269
279
  delete loading[ url ];
@@ -338,6 +348,20 @@ class FileLoader extends Loader {
338
348
 
339
349
  }
340
350
 
351
+ /**
352
+ * Aborts ongoing fetch requests.
353
+ *
354
+ * @return {FileLoader} A reference to this instance.
355
+ */
356
+ abort() {
357
+
358
+ this._abortController.abort();
359
+ this._abortController = new AbortController();
360
+
361
+ return this;
362
+
363
+ }
364
+
341
365
  }
342
366
 
343
367
 
@@ -1,10 +1,11 @@
1
1
  import { Cache } from './Cache.js';
2
2
  import { Loader } from './Loader.js';
3
+ import { warn } from '../utils.js';
3
4
 
4
5
  const _errorMap = new WeakMap();
5
6
 
6
7
  /**
7
- * A loader for loading images as an [ImageBitmap]{@link https://developer.mozilla.org/en-US/docs/Web/API/ImageBitmap}.
8
+ * A loader for loading images as an [ImageBitmap](https://developer.mozilla.org/en-US/docs/Web/API/ImageBitmap).
8
9
  * An `ImageBitmap` provides an asynchronous and resource efficient pathway to prepare
9
10
  * textures for rendering.
10
11
  *
@@ -48,13 +49,13 @@ class ImageBitmapLoader extends Loader {
48
49
 
49
50
  if ( typeof createImageBitmap === 'undefined' ) {
50
51
 
51
- console.warn( 'THREE.ImageBitmapLoader: createImageBitmap() not supported.' );
52
+ warn( 'ImageBitmapLoader: createImageBitmap() not supported.' );
52
53
 
53
54
  }
54
55
 
55
56
  if ( typeof fetch === 'undefined' ) {
56
57
 
57
- console.warn( 'THREE.ImageBitmapLoader: fetch() not supported.' );
58
+ warn( 'ImageBitmapLoader: fetch() not supported.' );
58
59
 
59
60
  }
60
61
 
@@ -66,11 +67,19 @@ class ImageBitmapLoader extends Loader {
66
67
  */
67
68
  this.options = { premultiplyAlpha: 'none' };
68
69
 
70
+ /**
71
+ * Used for aborting requests.
72
+ *
73
+ * @private
74
+ * @type {AbortController}
75
+ */
76
+ this._abortController = new AbortController();
77
+
69
78
  }
70
79
 
71
80
  /**
72
81
  * Sets the given loader options. The structure of the object must match the `options` parameter of
73
- * [createImageBitmap]{@link https://developer.mozilla.org/en-US/docs/Web/API/Window/createImageBitmap}.
82
+ * [createImageBitmap](https://developer.mozilla.org/en-US/docs/Web/API/Window/createImageBitmap).
74
83
  *
75
84
  * @param {Object} options - The loader options to set.
76
85
  * @return {ImageBitmapLoader} A reference to this image bitmap loader.
@@ -102,7 +111,7 @@ class ImageBitmapLoader extends Loader {
102
111
 
103
112
  const scope = this;
104
113
 
105
- const cached = Cache.get( url );
114
+ const cached = Cache.get( `image-bitmap:${url}` );
106
115
 
107
116
  if ( cached !== undefined ) {
108
117
 
@@ -154,6 +163,7 @@ class ImageBitmapLoader extends Loader {
154
163
  const fetchOptions = {};
155
164
  fetchOptions.credentials = ( this.crossOrigin === 'anonymous' ) ? 'same-origin' : 'include';
156
165
  fetchOptions.headers = this.requestHeader;
166
+ fetchOptions.signal = ( typeof AbortSignal.any === 'function' ) ? AbortSignal.any( [ this._abortController.signal, this.manager.abortController.signal ] ) : this._abortController.signal;
157
167
 
158
168
  const promise = fetch( url, fetchOptions ).then( function ( res ) {
159
169
 
@@ -165,7 +175,7 @@ class ImageBitmapLoader extends Loader {
165
175
 
166
176
  } ).then( function ( imageBitmap ) {
167
177
 
168
- Cache.add( url, imageBitmap );
178
+ Cache.add( `image-bitmap:${url}`, imageBitmap );
169
179
 
170
180
  if ( onLoad ) onLoad( imageBitmap );
171
181
 
@@ -179,18 +189,32 @@ class ImageBitmapLoader extends Loader {
179
189
 
180
190
  _errorMap.set( promise, e );
181
191
 
182
- Cache.remove( url );
192
+ Cache.remove( `image-bitmap:${url}` );
183
193
 
184
194
  scope.manager.itemError( url );
185
195
  scope.manager.itemEnd( url );
186
196
 
187
197
  } );
188
198
 
189
- Cache.add( url, promise );
199
+ Cache.add( `image-bitmap:${url}`, promise );
190
200
  scope.manager.itemStart( url );
191
201
 
192
202
  }
193
203
 
204
+ /**
205
+ * Aborts ongoing fetch requests.
206
+ *
207
+ * @return {ImageBitmapLoader} A reference to this instance.
208
+ */
209
+ abort() {
210
+
211
+ this._abortController.abort();
212
+ this._abortController = new AbortController();
213
+
214
+ return this;
215
+
216
+ }
217
+
194
218
  }
195
219
 
196
220
  export { ImageBitmapLoader };
@@ -2,6 +2,8 @@ import { Cache } from './Cache.js';
2
2
  import { Loader } from './Loader.js';
3
3
  import { createElementNS } from '../utils.js';
4
4
 
5
+ const _loading = new WeakMap();
6
+
5
7
  /**
6
8
  * A loader for loading images. The class loads images with the HTML `Image` API.
7
9
  *
@@ -11,7 +13,7 @@ import { createElementNS } from '../utils.js';
11
13
  * ```
12
14
  * Please note that `ImageLoader` has dropped support for progress
13
15
  * events in `r84`. For an `ImageLoader` that supports progress events, see
14
- * [this thread]{@link https://github.com/mrdoob/three.js/issues/10439#issuecomment-275785639}.
16
+ * [this thread](https://github.com/mrdoob/three.js/issues/10439#issuecomment-275785639).
15
17
  *
16
18
  * @augments Loader
17
19
  */
@@ -48,19 +50,36 @@ class ImageLoader extends Loader {
48
50
 
49
51
  const scope = this;
50
52
 
51
- const cached = Cache.get( url );
53
+ const cached = Cache.get( `image:${url}` );
52
54
 
53
55
  if ( cached !== undefined ) {
54
56
 
55
- scope.manager.itemStart( url );
57
+ if ( cached.complete === true ) {
58
+
59
+ scope.manager.itemStart( url );
60
+
61
+ setTimeout( function () {
62
+
63
+ if ( onLoad ) onLoad( cached );
64
+
65
+ scope.manager.itemEnd( url );
66
+
67
+ }, 0 );
56
68
 
57
- setTimeout( function () {
69
+ } else {
58
70
 
59
- if ( onLoad ) onLoad( cached );
71
+ let arr = _loading.get( cached );
60
72
 
61
- scope.manager.itemEnd( url );
73
+ if ( arr === undefined ) {
62
74
 
63
- }, 0 );
75
+ arr = [];
76
+ _loading.set( cached, arr );
77
+
78
+ }
79
+
80
+ arr.push( { onLoad, onError } );
81
+
82
+ }
64
83
 
65
84
  return cached;
66
85
 
@@ -72,10 +91,21 @@ class ImageLoader extends Loader {
72
91
 
73
92
  removeEventListeners();
74
93
 
75
- Cache.add( url, this );
76
-
77
94
  if ( onLoad ) onLoad( this );
78
95
 
96
+ //
97
+
98
+ const callbacks = _loading.get( this ) || [];
99
+
100
+ for ( let i = 0; i < callbacks.length; i ++ ) {
101
+
102
+ const callback = callbacks[ i ];
103
+ if ( callback.onLoad ) callback.onLoad( this );
104
+
105
+ }
106
+
107
+ _loading.delete( this );
108
+
79
109
  scope.manager.itemEnd( url );
80
110
 
81
111
  }
@@ -86,6 +116,22 @@ class ImageLoader extends Loader {
86
116
 
87
117
  if ( onError ) onError( event );
88
118
 
119
+ Cache.remove( `image:${url}` );
120
+
121
+ //
122
+
123
+ const callbacks = _loading.get( this ) || [];
124
+
125
+ for ( let i = 0; i < callbacks.length; i ++ ) {
126
+
127
+ const callback = callbacks[ i ];
128
+ if ( callback.onError ) callback.onError( event );
129
+
130
+ }
131
+
132
+ _loading.delete( this );
133
+
134
+
89
135
  scope.manager.itemError( url );
90
136
  scope.manager.itemEnd( url );
91
137
 
@@ -107,6 +153,7 @@ class ImageLoader extends Loader {
107
153
 
108
154
  }
109
155
 
156
+ Cache.add( `image:${url}`, image );
110
157
  scope.manager.itemStart( url );
111
158
 
112
159
  image.src = url;
@@ -54,7 +54,7 @@ class Loader {
54
54
  this.resourcePath = '';
55
55
 
56
56
  /**
57
- * The [request header]{@link https://developer.mozilla.org/en-US/docs/Glossary/Request_header}
57
+ * The [request header](https://developer.mozilla.org/en-US/docs/Glossary/Request_header)
58
58
  * used in HTTP request.
59
59
  *
60
60
  * @type {Object<string, any>}
@@ -67,6 +67,7 @@ class Loader {
67
67
  * This method needs to be implemented by all concrete loaders. It holds the
68
68
  * logic for loading assets from the backend.
69
69
  *
70
+ * @abstract
70
71
  * @param {string} url - The path/URL of the file to be loaded.
71
72
  * @param {Function} onLoad - Executed when the loading process has been finished.
72
73
  * @param {onProgressCallback} [onProgress] - Executed while the loading is in progress.
@@ -97,6 +98,7 @@ class Loader {
97
98
  * This method needs to be implemented by all concrete loaders. It holds the
98
99
  * logic for parsing the asset into three.js entities.
99
100
  *
101
+ * @abstract
100
102
  * @param {any} data - The data to parse.
101
103
  */
102
104
  parse( /* data */ ) {}
@@ -117,7 +119,7 @@ class Loader {
117
119
 
118
120
  /**
119
121
  * Whether the XMLHttpRequest uses credentials such as cookies, authorization
120
- * headers or TLS client certificates, see [XMLHttpRequest.withCredentials]{@link https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials}.
122
+ * headers or TLS client certificates, see [XMLHttpRequest.withCredentials](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials).
121
123
  *
122
124
  * Note: This setting has no effect if you are loading files locally or from the same domain.
123
125
  *
@@ -160,7 +162,7 @@ class Loader {
160
162
  /**
161
163
  * Sets the given request header.
162
164
  *
163
- * @param {Object} requestHeader - A [request header]{@link https://developer.mozilla.org/en-US/docs/Glossary/Request_header}
165
+ * @param {Object} requestHeader - A [request header](https://developer.mozilla.org/en-US/docs/Glossary/Request_header)
164
166
  * for configuring the HTTP request.
165
167
  * @return {Loader} A reference to this instance.
166
168
  */
@@ -171,6 +173,18 @@ class Loader {
171
173
 
172
174
  }
173
175
 
176
+ /**
177
+ * This method can be implemented in loaders for aborting ongoing requests.
178
+ *
179
+ * @abstract
180
+ * @return {Loader} A reference to this instance.
181
+ */
182
+ abort() {
183
+
184
+ return this;
185
+
186
+ }
187
+
174
188
  }
175
189
 
176
190
  /**
@@ -69,6 +69,14 @@ class LoadingManager {
69
69
  */
70
70
  this.onError = onError;
71
71
 
72
+ /**
73
+ * Used for aborting ongoing requests in loaders using this manager.
74
+ *
75
+ * @private
76
+ * @type {AbortController | null}
77
+ */
78
+ this._abortController = null;
79
+
72
80
  /**
73
81
  * This should be called by any loader using the manager when the loader
74
82
  * starts loading an item.
@@ -269,6 +277,43 @@ class LoadingManager {
269
277
 
270
278
  };
271
279
 
280
+ /**
281
+ * Can be used to abort ongoing loading requests in loaders using this manager.
282
+ * The abort only works if the loaders implement {@link Loader#abort} and `AbortSignal.any()`
283
+ * is supported in the browser.
284
+ *
285
+ * @return {LoadingManager} A reference to this loading manager.
286
+ */
287
+ this.abort = function () {
288
+
289
+
290
+ this.abortController.abort();
291
+ this._abortController = null;
292
+
293
+ return this;
294
+
295
+ };
296
+
297
+ }
298
+
299
+ // TODO: Revert this back to a single member variable once this issue has been fixed
300
+ // https://github.com/cloudflare/workerd/issues/3657
301
+
302
+ /**
303
+ * Used for aborting ongoing requests in loaders using this manager.
304
+ *
305
+ * @type {AbortController}
306
+ */
307
+ get abortController() {
308
+
309
+ if ( ! this._abortController ) {
310
+
311
+ this._abortController = new AbortController();
312
+
313
+ }
314
+
315
+ return this._abortController;
316
+
272
317
  }
273
318
 
274
319
  }
@@ -26,6 +26,7 @@ import {
26
26
  LineBasicMaterial,
27
27
  Material,
28
28
  } from '../materials/Materials.js';
29
+ import { error, warn } from '../utils.js';
29
30
 
30
31
  /**
31
32
  * Class for loading geometries. The files are internally
@@ -89,7 +90,7 @@ class MaterialLoader extends Loader {
89
90
 
90
91
  } else {
91
92
 
92
- console.error( e );
93
+ error( e );
93
94
 
94
95
  }
95
96
 
@@ -115,7 +116,7 @@ class MaterialLoader extends Loader {
115
116
 
116
117
  if ( textures[ name ] === undefined ) {
117
118
 
118
- console.warn( 'THREE.MaterialLoader: Undefined texture', name );
119
+ warn( 'MaterialLoader: Undefined texture', name );
119
120
 
120
121
  }
121
122
 
@@ -59,12 +59,12 @@ import { BufferGeometryLoader } from './BufferGeometryLoader.js';
59
59
  import { Loader } from './Loader.js';
60
60
  import { FileLoader } from './FileLoader.js';
61
61
  import * as Geometries from '../geometries/Geometries.js';
62
- import { getTypedArray } from '../utils.js';
62
+ import { getTypedArray, error, warn } from '../utils.js';
63
63
  import { Box3 } from '../math/Box3.js';
64
64
  import { Sphere } from '../math/Sphere.js';
65
65
 
66
66
  /**
67
- * A loader for loading a JSON resource in the [JSON Object/Scene format]{@link https://github.com/mrdoob/three.js/wiki/JSON-Object-Scene-format-4}.
67
+ * A loader for loading a JSON resource in the [JSON Object/Scene format](https://github.com/mrdoob/three.js/wiki/JSON-Object-Scene-format-4).
68
68
  * The files are internally loaded via {@link FileLoader}.
69
69
  *
70
70
  * ```js
@@ -123,7 +123,7 @@ class ObjectLoader extends Loader {
123
123
 
124
124
  if ( onError !== undefined ) onError( error );
125
125
 
126
- console.error( 'THREE:ObjectLoader: Can\'t parse ' + url + '.', error.message );
126
+ error( 'ObjectLoader: Can\'t parse ' + url + '.', error.message );
127
127
 
128
128
  return;
129
129
 
@@ -135,7 +135,7 @@ class ObjectLoader extends Loader {
135
135
 
136
136
  if ( onError !== undefined ) onError( new Error( 'THREE.ObjectLoader: Can\'t load ' + url ) );
137
137
 
138
- console.error( 'THREE.ObjectLoader: Can\'t load ' + url );
138
+ error( 'ObjectLoader: Can\'t load ' + url );
139
139
  return;
140
140
 
141
141
  }
@@ -360,7 +360,7 @@ class ObjectLoader extends Loader {
360
360
 
361
361
  } else {
362
362
 
363
- console.warn( `THREE.ObjectLoader: Unsupported geometry type "${ data.type }"` );
363
+ warn( `ObjectLoader: Unsupported geometry type "${ data.type }"` );
364
364
 
365
365
  }
366
366
 
@@ -651,7 +651,7 @@ class ObjectLoader extends Loader {
651
651
 
652
652
  if ( typeof value === 'number' ) return value;
653
653
 
654
- console.warn( 'THREE.ObjectLoader.parseTexture: Constant should be in numeric form.', value );
654
+ warn( 'ObjectLoader.parseTexture: Constant should be in numeric form.', value );
655
655
 
656
656
  return type[ value ];
657
657
 
@@ -667,13 +667,13 @@ class ObjectLoader extends Loader {
667
667
 
668
668
  if ( data.image === undefined ) {
669
669
 
670
- console.warn( 'THREE.ObjectLoader: No "image" specified for', data.uuid );
670
+ warn( 'ObjectLoader: No "image" specified for', data.uuid );
671
671
 
672
672
  }
673
673
 
674
674
  if ( images[ data.image ] === undefined ) {
675
675
 
676
- console.warn( 'THREE.ObjectLoader: Undefined image', data.image );
676
+ warn( 'ObjectLoader: Undefined image', data.image );
677
677
 
678
678
  }
679
679
 
@@ -761,7 +761,7 @@ class ObjectLoader extends Loader {
761
761
 
762
762
  if ( geometries[ name ] === undefined ) {
763
763
 
764
- console.warn( 'THREE.ObjectLoader: Undefined geometry', name );
764
+ warn( 'ObjectLoader: Undefined geometry', name );
765
765
 
766
766
  }
767
767
 
@@ -783,7 +783,7 @@ class ObjectLoader extends Loader {
783
783
 
784
784
  if ( materials[ uuid ] === undefined ) {
785
785
 
786
- console.warn( 'THREE.ObjectLoader: Undefined material', uuid );
786
+ warn( 'ObjectLoader: Undefined material', uuid );
787
787
 
788
788
  }
789
789
 
@@ -797,7 +797,7 @@ class ObjectLoader extends Loader {
797
797
 
798
798
  if ( materials[ name ] === undefined ) {
799
799
 
800
- console.warn( 'THREE.ObjectLoader: Undefined material', name );
800
+ warn( 'ObjectLoader: Undefined material', name );
801
801
 
802
802
  }
803
803
 
@@ -809,7 +809,7 @@ class ObjectLoader extends Loader {
809
809
 
810
810
  if ( textures[ uuid ] === undefined ) {
811
811
 
812
- console.warn( 'THREE.ObjectLoader: Undefined texture', uuid );
812
+ warn( 'ObjectLoader: Undefined texture', uuid );
813
813
 
814
814
  }
815
815
 
@@ -1210,7 +1210,7 @@ class ObjectLoader extends Loader {
1210
1210
 
1211
1211
  if ( skeleton === undefined ) {
1212
1212
 
1213
- console.warn( 'THREE.ObjectLoader: No skeleton found with UUID:', child.skeleton );
1213
+ warn( 'ObjectLoader: No skeleton found with UUID:', child.skeleton );
1214
1214
 
1215
1215
  } else {
1216
1216
 
@@ -14,7 +14,7 @@ import { Loader } from './Loader.js';
14
14
  * ```
15
15
  * Please note that `TextureLoader` has dropped support for progress
16
16
  * events in `r84`. For a `TextureLoader` that supports progress events, see
17
- * [this thread]{@link https://github.com/mrdoob/three.js/issues/10439#issuecomment-293260145}.
17
+ * [this thread](https://github.com/mrdoob/three.js/issues/10439#issuecomment-293260145).
18
18
  *
19
19
  * @augments Loader
20
20
  */
@@ -2,6 +2,7 @@ import { nodeObject, float } from '../../nodes/tsl/TSLBase.js';
2
2
 
3
3
  import { Loader } from '../Loader.js';
4
4
  import { FileLoader } from '../../loaders/FileLoader.js';
5
+ import { error } from '../../utils.js';
5
6
 
6
7
  /**
7
8
  * A loader for loading node objects in the three.js JSON Object/Scene format.
@@ -63,7 +64,7 @@ class NodeLoader extends Loader {
63
64
 
64
65
  } else {
65
66
 
66
- console.error( e );
67
+ error( e );
67
68
 
68
69
  }
69
70
 
@@ -179,7 +180,7 @@ class NodeLoader extends Loader {
179
180
 
180
181
  if ( this.nodes[ type ] === undefined ) {
181
182
 
182
- console.error( 'THREE.NodeLoader: Node type not found:', type );
183
+ error( 'NodeLoader: Node type not found:', type );
183
184
  return float();
184
185
 
185
186
  }