super-three 0.179.0 → 0.184.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 (696) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +14522 -12207
  4. package/build/three.core.js +12005 -10954
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +2270 -1005
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +63 -18
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +16573 -7890
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +16533 -7888
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  15. package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  16. package/examples/jsm/Addons.js +12 -4
  17. package/examples/jsm/animation/CCDIKSolver.js +8 -4
  18. package/examples/jsm/controls/ArcballControls.js +15 -12
  19. package/examples/jsm/controls/DragControls.js +9 -59
  20. package/examples/jsm/controls/FirstPersonControls.js +61 -57
  21. package/examples/jsm/controls/FlyControls.js +5 -1
  22. package/examples/jsm/controls/MapControls.js +55 -1
  23. package/examples/jsm/controls/OrbitControls.js +113 -10
  24. package/examples/jsm/controls/PointerLockControls.js +2 -10
  25. package/examples/jsm/controls/TrackballControls.js +9 -9
  26. package/examples/jsm/controls/TransformControls.js +35 -3
  27. package/examples/jsm/csm/CSM.js +2 -1
  28. package/examples/jsm/csm/CSMShadowNode.js +6 -2
  29. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  30. package/examples/jsm/effects/AsciiEffect.js +8 -8
  31. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  32. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  33. package/examples/jsm/exporters/DRACOExporter.js +2 -2
  34. package/examples/jsm/exporters/EXRExporter.js +2 -2
  35. package/examples/jsm/exporters/GLTFExporter.js +185 -34
  36. package/examples/jsm/exporters/KTX2Exporter.js +4 -2
  37. package/examples/jsm/exporters/PLYExporter.js +1 -1
  38. package/examples/jsm/exporters/USDZExporter.js +31 -5
  39. package/examples/jsm/geometries/DecalGeometry.js +3 -3
  40. package/examples/jsm/geometries/ParametricGeometry.js +1 -1
  41. package/examples/jsm/geometries/TeapotGeometry.js +2 -2
  42. package/examples/jsm/geometries/TextGeometry.js +21 -2
  43. package/examples/jsm/gpgpu/BitonicSort.js +715 -0
  44. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  45. package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
  46. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  47. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  48. package/examples/jsm/helpers/ViewHelper.js +110 -13
  49. package/examples/jsm/inspector/Extension.js +13 -0
  50. package/examples/jsm/inspector/Inspector.js +542 -0
  51. package/examples/jsm/inspector/RendererInspector.js +425 -0
  52. package/examples/jsm/inspector/extensions/extensions.json +6 -0
  53. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
  54. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
  55. package/examples/jsm/inspector/tabs/Console.js +238 -0
  56. package/examples/jsm/inspector/tabs/Memory.js +128 -0
  57. package/examples/jsm/inspector/tabs/Parameters.js +380 -0
  58. package/examples/jsm/inspector/tabs/Performance.js +268 -0
  59. package/examples/jsm/inspector/tabs/Settings.js +264 -0
  60. package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
  61. package/examples/jsm/inspector/tabs/Viewer.js +268 -0
  62. package/examples/jsm/inspector/ui/Graph.js +95 -0
  63. package/examples/jsm/inspector/ui/Item.js +170 -0
  64. package/examples/jsm/inspector/ui/List.js +75 -0
  65. package/examples/jsm/inspector/ui/Profiler.js +2072 -0
  66. package/examples/jsm/inspector/ui/Style.js +1667 -0
  67. package/examples/jsm/inspector/ui/Tab.js +265 -0
  68. package/examples/jsm/inspector/ui/Values.js +476 -0
  69. package/examples/jsm/inspector/ui/utils.js +69 -0
  70. package/examples/jsm/interaction/InteractionManager.js +226 -0
  71. package/examples/jsm/interactive/HTMLMesh.js +6 -10
  72. package/examples/jsm/interactive/InteractiveGroup.js +1 -1
  73. package/examples/jsm/interactive/SelectionBox.js +30 -0
  74. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  75. package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
  76. package/examples/jsm/lighting/DynamicLighting.js +82 -0
  77. package/examples/jsm/lighting/LightProbeGrid.js +651 -0
  78. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  79. package/examples/jsm/lines/Line2.js +3 -3
  80. package/examples/jsm/lines/LineGeometry.js +1 -1
  81. package/examples/jsm/lines/LineMaterial.js +7 -1
  82. package/examples/jsm/lines/LineSegments2.js +2 -2
  83. package/examples/jsm/lines/Wireframe.js +2 -2
  84. package/examples/jsm/lines/WireframeGeometry2.js +1 -1
  85. package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
  86. package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
  87. package/examples/jsm/loaders/3DMLoader.js +5 -4
  88. package/examples/jsm/loaders/3MFLoader.js +3 -3
  89. package/examples/jsm/loaders/AMFLoader.js +2 -2
  90. package/examples/jsm/loaders/ColladaLoader.js +27 -4029
  91. package/examples/jsm/loaders/DDSLoader.js +1 -1
  92. package/examples/jsm/loaders/DRACOLoader.js +73 -22
  93. package/examples/jsm/loaders/EXRLoader.js +692 -53
  94. package/examples/jsm/loaders/FBXLoader.js +237 -39
  95. package/examples/jsm/loaders/FontLoader.js +23 -5
  96. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  97. package/examples/jsm/loaders/GLTFLoader.js +159 -185
  98. package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
  99. package/examples/jsm/loaders/HDRLoader.js +485 -0
  100. package/examples/jsm/loaders/KMZLoader.js +5 -5
  101. package/examples/jsm/loaders/KTX2Loader.js +162 -53
  102. package/examples/jsm/loaders/KTXLoader.js +2 -2
  103. package/examples/jsm/loaders/LDrawLoader.js +41 -50
  104. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  105. package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
  106. package/examples/jsm/loaders/LWOLoader.js +9 -41
  107. package/examples/jsm/loaders/MaterialXLoader.js +22 -5
  108. package/examples/jsm/loaders/NRRDLoader.js +2 -2
  109. package/examples/jsm/loaders/OBJLoader.js +1 -1
  110. package/examples/jsm/loaders/PCDLoader.js +4 -2
  111. package/examples/jsm/loaders/PDBLoader.js +1 -1
  112. package/examples/jsm/loaders/RGBELoader.js +7 -473
  113. package/examples/jsm/loaders/SVGLoader.js +4 -4
  114. package/examples/jsm/loaders/TDSLoader.js +0 -2
  115. package/examples/jsm/loaders/TGALoader.js +0 -2
  116. package/examples/jsm/loaders/TTFLoader.js +4 -4
  117. package/examples/jsm/loaders/USDLoader.js +100 -40
  118. package/examples/jsm/loaders/UltraHDRLoader.js +287 -162
  119. package/examples/jsm/loaders/VOXLoader.js +660 -117
  120. package/examples/jsm/loaders/VRMLLoader.js +79 -2
  121. package/examples/jsm/loaders/VTKLoader.js +42 -25
  122. package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
  123. package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
  124. package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
  125. package/examples/jsm/loaders/usd/USDAParser.js +450 -363
  126. package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
  127. package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
  128. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  129. package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  130. package/examples/jsm/math/ColorSpaces.js +19 -1
  131. package/examples/jsm/math/ConvexHull.js +3 -3
  132. package/examples/jsm/math/ImprovedNoise.js +1 -1
  133. package/examples/jsm/math/Lut.js +2 -2
  134. package/examples/jsm/math/Octree.js +131 -1
  135. package/examples/jsm/math/SimplexNoise.js +1 -1
  136. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  137. package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
  138. package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
  139. package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
  140. package/examples/jsm/misc/RollerCoaster.js +42 -4
  141. package/examples/jsm/misc/TubePainter.js +383 -40
  142. package/examples/jsm/misc/Volume.js +1 -2
  143. package/examples/jsm/misc/VolumeSlice.js +0 -1
  144. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  145. package/examples/jsm/modifiers/TessellateModifier.js +1 -1
  146. package/examples/jsm/objects/LensflareMesh.js +1 -1
  147. package/examples/jsm/objects/Reflector.js +73 -25
  148. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  149. package/examples/jsm/objects/Sky.js +91 -7
  150. package/examples/jsm/objects/SkyMesh.js +151 -17
  151. package/examples/jsm/objects/Water.js +7 -6
  152. package/examples/jsm/objects/Water2.js +5 -3
  153. package/examples/jsm/objects/WaterMesh.js +11 -13
  154. package/examples/jsm/physics/AmmoPhysics.js +12 -7
  155. package/examples/jsm/physics/JoltPhysics.js +10 -6
  156. package/examples/jsm/physics/RapierPhysics.js +9 -5
  157. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  158. package/examples/jsm/postprocessing/GlitchPass.js +2 -2
  159. package/examples/jsm/postprocessing/OutlinePass.js +1 -1
  160. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  161. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  162. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  163. package/examples/jsm/postprocessing/SSRPass.js +37 -8
  164. package/examples/jsm/postprocessing/UnrealBloomPass.js +56 -24
  165. package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
  166. package/examples/jsm/renderers/CSS3DRenderer.js +8 -7
  167. package/examples/jsm/renderers/Projector.js +246 -28
  168. package/examples/jsm/renderers/SVGRenderer.js +175 -61
  169. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
  170. package/examples/jsm/shaders/AfterimageShader.js +1 -1
  171. package/examples/jsm/shaders/BleachBypassShader.js +1 -1
  172. package/examples/jsm/shaders/BokehShader.js +1 -1
  173. package/examples/jsm/shaders/BokehShader2.js +1 -1
  174. package/examples/jsm/shaders/DotScreenShader.js +1 -1
  175. package/examples/jsm/shaders/FocusShader.js +1 -1
  176. package/examples/jsm/shaders/GTAOShader.js +21 -8
  177. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  178. package/examples/jsm/shaders/KaleidoShader.js +1 -1
  179. package/examples/jsm/shaders/PoissonDenoiseShader.js +8 -4
  180. package/examples/jsm/shaders/SAOShader.js +17 -4
  181. package/examples/jsm/shaders/SSAOShader.js +11 -1
  182. package/examples/jsm/shaders/SSRShader.js +7 -6
  183. package/examples/jsm/shaders/SepiaShader.js +1 -1
  184. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
  185. package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
  186. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +3 -5
  187. package/examples/jsm/shaders/VignetteShader.js +1 -1
  188. package/examples/jsm/transpiler/AST.js +44 -0
  189. package/examples/jsm/transpiler/GLSLDecoder.js +85 -25
  190. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  191. package/examples/jsm/transpiler/TSLEncoder.js +52 -10
  192. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  193. package/examples/jsm/transpiler/WGSLEncoder.js +51 -0
  194. package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
  195. package/examples/jsm/tsl/display/AfterImageNode.js +36 -24
  196. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  197. package/examples/jsm/tsl/display/AnamorphicNode.js +40 -5
  198. package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
  199. package/examples/jsm/tsl/display/BloomNode.js +23 -9
  200. package/examples/jsm/tsl/display/CRT.js +150 -0
  201. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +5 -37
  202. package/examples/jsm/tsl/display/DenoiseNode.js +3 -1
  203. package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
  204. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  205. package/examples/jsm/tsl/display/FSR1Node.js +477 -0
  206. package/examples/jsm/tsl/display/FXAANode.js +2 -2
  207. package/examples/jsm/tsl/display/GTAONode.js +59 -9
  208. package/examples/jsm/tsl/display/GaussianBlurNode.js +68 -35
  209. package/examples/jsm/tsl/display/GodraysNode.js +615 -0
  210. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  211. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  212. package/examples/jsm/tsl/display/OutlineNode.js +81 -20
  213. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  214. package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
  215. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  216. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  217. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  218. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  219. package/examples/jsm/tsl/display/SSGINode.js +638 -0
  220. package/examples/jsm/tsl/display/SSRNode.js +186 -69
  221. package/examples/jsm/tsl/display/SSSNode.js +490 -0
  222. package/examples/jsm/tsl/display/Shape.js +29 -0
  223. package/examples/jsm/tsl/display/SharpenNode.js +283 -0
  224. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  225. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  226. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  227. package/examples/jsm/tsl/display/TAAUNode.js +835 -0
  228. package/examples/jsm/tsl/display/TRAANode.js +381 -75
  229. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  230. package/examples/jsm/tsl/display/boxBlur.js +65 -0
  231. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  232. package/examples/jsm/tsl/display/hashBlur.js +16 -18
  233. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  234. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
  235. package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
  236. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
  237. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
  238. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
  239. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
  240. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
  241. package/examples/jsm/tsl/math/Bayer.js +53 -3
  242. package/examples/jsm/utils/BufferGeometryUtils.js +3 -4
  243. package/examples/jsm/utils/ColorUtils.js +76 -0
  244. package/examples/jsm/utils/LDrawUtils.js +1 -1
  245. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  246. package/examples/jsm/utils/ShadowMapViewerGPU.js +13 -6
  247. package/examples/jsm/utils/SkeletonUtils.js +14 -8
  248. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  249. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  250. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  251. package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
  252. package/examples/jsm/webxr/XRHandModelFactory.js +4 -7
  253. package/package.json +27 -38
  254. package/src/Three.Core.js +7 -3
  255. package/src/Three.TSL.js +61 -16
  256. package/src/Three.WebGPU.Nodes.js +7 -0
  257. package/src/Three.WebGPU.js +11 -0
  258. package/src/Three.js +1 -0
  259. package/src/animation/AnimationAction.js +12 -2
  260. package/src/animation/AnimationClip.js +21 -5
  261. package/src/animation/AnimationMixer.js +9 -3
  262. package/src/animation/AnimationObjectGroup.js +2 -1
  263. package/src/animation/AnimationUtils.js +1 -12
  264. package/src/animation/KeyframeTrack.js +54 -14
  265. package/src/animation/PropertyBinding.js +12 -11
  266. package/src/animation/PropertyMixer.js +4 -4
  267. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  268. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  269. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  270. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  271. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  272. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  273. package/src/audio/Audio.js +11 -10
  274. package/src/audio/AudioContext.js +2 -2
  275. package/src/audio/AudioListener.js +5 -3
  276. package/src/audio/PositionalAudio.js +1 -1
  277. package/src/cameras/Camera.js +32 -2
  278. package/src/cameras/CubeCamera.js +20 -0
  279. package/src/cameras/OrthographicCamera.js +1 -1
  280. package/src/cameras/PerspectiveCamera.js +1 -1
  281. package/src/cameras/StereoCamera.js +2 -2
  282. package/src/constants.js +100 -7
  283. package/src/core/BufferAttribute.js +13 -1
  284. package/src/core/BufferGeometry.js +24 -12
  285. package/src/core/Clock.js +7 -0
  286. package/src/core/EventDispatcher.js +1 -1
  287. package/src/core/InterleavedBuffer.js +1 -1
  288. package/src/core/InterleavedBufferAttribute.js +3 -2
  289. package/src/core/Object3D.js +55 -6
  290. package/src/core/Raycaster.js +4 -3
  291. package/src/core/RenderTarget.js +14 -5
  292. package/src/extras/Controls.js +5 -4
  293. package/src/extras/DataUtils.js +2 -1
  294. package/src/extras/Earcut.js +6 -0
  295. package/src/extras/ImageUtils.js +2 -2
  296. package/src/extras/PMREMGenerator.js +259 -57
  297. package/src/extras/TextureUtils.js +6 -1
  298. package/src/extras/core/Curve.js +2 -1
  299. package/src/extras/core/Interpolations.js +7 -1
  300. package/src/extras/core/ShapePath.js +4 -4
  301. package/src/extras/curves/CatmullRomCurve3.js +3 -2
  302. package/src/extras/lib/earcut.js +8 -8
  303. package/src/geometries/BoxGeometry.js +1 -0
  304. package/src/geometries/CapsuleGeometry.js +1 -0
  305. package/src/geometries/CircleGeometry.js +1 -0
  306. package/src/geometries/ConeGeometry.js +1 -0
  307. package/src/geometries/CylinderGeometry.js +1 -0
  308. package/src/geometries/DodecahedronGeometry.js +1 -0
  309. package/src/geometries/ExtrudeGeometry.js +10 -8
  310. package/src/geometries/IcosahedronGeometry.js +1 -0
  311. package/src/geometries/LatheGeometry.js +1 -0
  312. package/src/geometries/OctahedronGeometry.js +1 -0
  313. package/src/geometries/PlaneGeometry.js +1 -0
  314. package/src/geometries/PolyhedronGeometry.js +1 -1
  315. package/src/geometries/RingGeometry.js +1 -0
  316. package/src/geometries/ShapeGeometry.js +1 -0
  317. package/src/geometries/SphereGeometry.js +1 -0
  318. package/src/geometries/TetrahedronGeometry.js +1 -0
  319. package/src/geometries/TorusGeometry.js +9 -3
  320. package/src/geometries/TorusKnotGeometry.js +1 -0
  321. package/src/geometries/TubeGeometry.js +1 -0
  322. package/src/helpers/CameraHelper.js +4 -1
  323. package/src/helpers/DirectionalLightHelper.js +4 -1
  324. package/src/helpers/HemisphereLightHelper.js +3 -0
  325. package/src/helpers/PointLightHelper.js +1 -25
  326. package/src/helpers/SpotLightHelper.js +3 -0
  327. package/src/lights/DirectionalLight.js +13 -0
  328. package/src/lights/HemisphereLight.js +10 -0
  329. package/src/lights/Light.js +1 -11
  330. package/src/lights/LightProbe.js +0 -15
  331. package/src/lights/LightShadow.js +15 -6
  332. package/src/lights/PointLight.js +15 -0
  333. package/src/lights/PointLightShadow.js +0 -86
  334. package/src/lights/SpotLight.js +22 -1
  335. package/src/lights/webgpu/IESSpotLight.js +2 -1
  336. package/src/lights/webgpu/ProjectorLight.js +1 -1
  337. package/src/loaders/AnimationLoader.js +2 -1
  338. package/src/loaders/AudioLoader.js +13 -2
  339. package/src/loaders/BufferGeometryLoader.js +2 -2
  340. package/src/loaders/Cache.js +30 -2
  341. package/src/loaders/DataTextureLoader.js +6 -4
  342. package/src/loaders/FileLoader.js +4 -4
  343. package/src/loaders/ImageBitmapLoader.js +17 -13
  344. package/src/loaders/ImageLoader.js +1 -1
  345. package/src/loaders/Loader.js +9 -3
  346. package/src/loaders/LoadingManager.js +25 -3
  347. package/src/loaders/MaterialLoader.js +6 -4
  348. package/src/loaders/ObjectLoader.js +57 -17
  349. package/src/loaders/TextureLoader.js +1 -1
  350. package/src/loaders/nodes/NodeLoader.js +5 -4
  351. package/src/loaders/nodes/NodeObjectLoader.js +18 -0
  352. package/src/materials/Material.js +18 -3
  353. package/src/materials/MeshBasicMaterial.js +1 -0
  354. package/src/materials/MeshDepthMaterial.js +1 -0
  355. package/src/materials/MeshDistanceMaterial.js +1 -1
  356. package/src/materials/MeshLambertMaterial.js +11 -1
  357. package/src/materials/MeshMatcapMaterial.js +22 -0
  358. package/src/materials/MeshNormalMaterial.js +1 -0
  359. package/src/materials/MeshPhongMaterial.js +11 -1
  360. package/src/materials/MeshPhysicalMaterial.js +2 -1
  361. package/src/materials/MeshStandardMaterial.js +8 -7
  362. package/src/materials/MeshToonMaterial.js +2 -1
  363. package/src/materials/PointsMaterial.js +1 -1
  364. package/src/materials/ShaderMaterial.js +22 -3
  365. package/src/materials/nodes/Line2NodeMaterial.js +36 -9
  366. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
  367. package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
  368. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
  369. package/src/materials/nodes/NodeMaterial.js +95 -35
  370. package/src/materials/nodes/PointsNodeMaterial.js +81 -28
  371. package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
  372. package/src/materials/nodes/manager/NodeMaterialObserver.js +194 -88
  373. package/src/math/Color.js +6 -5
  374. package/src/math/ColorManagement.js +9 -3
  375. package/src/math/Cylindrical.js +1 -1
  376. package/src/math/Euler.js +2 -1
  377. package/src/math/Line3.js +6 -5
  378. package/src/math/MathUtils.js +23 -21
  379. package/src/math/Matrix2.js +14 -10
  380. package/src/math/Matrix3.js +15 -11
  381. package/src/math/Matrix4.js +94 -81
  382. package/src/math/Plane.js +5 -4
  383. package/src/math/Quaternion.js +60 -84
  384. package/src/math/Sphere.js +1 -1
  385. package/src/math/Spherical.js +1 -1
  386. package/src/math/Triangle.js +1 -1
  387. package/src/math/Vector2.js +11 -7
  388. package/src/math/Vector3.js +15 -13
  389. package/src/math/Vector4.js +13 -9
  390. package/src/math/interpolants/BezierInterpolant.js +108 -0
  391. package/src/nodes/Nodes.js +86 -65
  392. package/src/nodes/TSL.js +11 -8
  393. package/src/nodes/accessors/Arrays.js +1 -1
  394. package/src/nodes/accessors/BatchNode.js +10 -10
  395. package/src/nodes/accessors/Bitangent.js +5 -5
  396. package/src/nodes/accessors/BufferAttributeNode.js +107 -15
  397. package/src/nodes/accessors/BufferNode.js +30 -3
  398. package/src/nodes/accessors/Camera.js +260 -13
  399. package/src/nodes/accessors/ClippingNode.js +10 -9
  400. package/src/nodes/accessors/CubeTextureNode.js +32 -6
  401. package/src/nodes/accessors/InstanceNode.js +164 -39
  402. package/src/nodes/accessors/Lights.js +10 -0
  403. package/src/nodes/accessors/MaterialNode.js +9 -1
  404. package/src/nodes/accessors/MaterialProperties.js +2 -5
  405. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  406. package/src/nodes/accessors/ModelNode.js +1 -1
  407. package/src/nodes/accessors/Normal.js +16 -15
  408. package/src/nodes/accessors/Object3DNode.js +2 -2
  409. package/src/nodes/accessors/Position.js +51 -3
  410. package/src/nodes/accessors/ReferenceBaseNode.js +7 -7
  411. package/src/nodes/accessors/ReferenceNode.js +11 -10
  412. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  413. package/src/nodes/accessors/SceneProperties.js +47 -0
  414. package/src/nodes/accessors/SkinningNode.js +27 -26
  415. package/src/nodes/accessors/StorageBufferNode.js +14 -24
  416. package/src/nodes/accessors/StorageTextureNode.js +62 -9
  417. package/src/nodes/accessors/Tangent.js +4 -14
  418. package/src/nodes/accessors/Texture3DNode.js +41 -31
  419. package/src/nodes/accessors/TextureNode.js +193 -63
  420. package/src/nodes/accessors/UniformArrayNode.js +6 -4
  421. package/src/nodes/accessors/UserDataNode.js +1 -2
  422. package/src/nodes/accessors/VertexColorNode.js +1 -2
  423. package/src/nodes/code/FunctionCallNode.js +25 -5
  424. package/src/nodes/code/FunctionNode.js +25 -3
  425. package/src/nodes/core/ArrayNode.js +22 -2
  426. package/src/nodes/core/AssignNode.js +6 -5
  427. package/src/nodes/core/AttributeNode.js +5 -4
  428. package/src/nodes/core/BypassNode.js +1 -1
  429. package/src/nodes/core/ContextNode.js +133 -15
  430. package/src/nodes/core/IndexNode.js +4 -3
  431. package/src/nodes/core/InputNode.js +3 -2
  432. package/src/nodes/core/InspectorNode.js +128 -0
  433. package/src/nodes/core/{CacheNode.js → IsolateNode.js} +41 -8
  434. package/src/nodes/core/MRTNode.js +48 -2
  435. package/src/nodes/core/Node.js +264 -46
  436. package/src/nodes/core/NodeBuilder.js +453 -87
  437. package/src/nodes/core/NodeError.js +28 -0
  438. package/src/nodes/core/NodeFrame.js +31 -23
  439. package/src/nodes/core/NodeFunction.js +2 -1
  440. package/src/nodes/core/NodeParser.js +2 -1
  441. package/src/nodes/core/NodeUniform.js +1 -1
  442. package/src/nodes/core/NodeUtils.js +25 -97
  443. package/src/nodes/core/OutputStructNode.js +12 -10
  444. package/src/nodes/core/ParameterNode.js +34 -3
  445. package/src/nodes/core/PropertyNode.js +26 -3
  446. package/src/nodes/core/StackNode.js +99 -23
  447. package/src/nodes/core/StackTrace.js +139 -0
  448. package/src/nodes/core/StructNode.js +22 -8
  449. package/src/nodes/core/StructTypeNode.js +13 -18
  450. package/src/nodes/core/SubBuildNode.js +4 -4
  451. package/src/nodes/core/UniformGroupNode.js +36 -6
  452. package/src/nodes/core/UniformNode.js +37 -13
  453. package/src/nodes/core/VarNode.js +96 -34
  454. package/src/nodes/core/VaryingNode.js +2 -18
  455. package/src/nodes/display/BlendModes.js +0 -63
  456. package/src/nodes/display/BumpMapNode.js +1 -1
  457. package/src/nodes/display/ColorAdjustment.js +18 -1
  458. package/src/nodes/display/ColorSpaceNode.js +3 -3
  459. package/src/nodes/display/FrontFacingNode.js +4 -8
  460. package/src/nodes/display/NormalMapNode.js +41 -5
  461. package/src/nodes/display/PassNode.js +175 -25
  462. package/src/nodes/display/RenderOutputNode.js +35 -9
  463. package/src/nodes/display/ScreenNode.js +47 -15
  464. package/src/nodes/display/ToneMappingNode.js +32 -5
  465. package/src/nodes/display/ToonOutlinePassNode.js +10 -2
  466. package/src/nodes/display/ViewportDepthNode.js +52 -4
  467. package/src/nodes/display/ViewportDepthTextureNode.js +14 -6
  468. package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
  469. package/src/nodes/display/ViewportTextureNode.js +72 -14
  470. package/src/nodes/fog/Fog.js +18 -34
  471. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  472. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  473. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  474. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  475. package/src/nodes/functions/BasicLightingModel.js +2 -1
  476. package/src/nodes/functions/PhysicalLightingModel.js +128 -46
  477. package/src/nodes/functions/VolumetricLightingModel.js +5 -5
  478. package/src/nodes/geometry/RangeNode.js +44 -6
  479. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  480. package/src/nodes/gpgpu/BarrierNode.js +9 -0
  481. package/src/nodes/gpgpu/ComputeBuiltinNode.js +4 -4
  482. package/src/nodes/gpgpu/ComputeNode.js +76 -38
  483. package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
  484. package/src/nodes/gpgpu/WorkgroupInfoNode.js +5 -4
  485. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  486. package/src/nodes/lighting/EnvironmentNode.js +34 -9
  487. package/src/nodes/lighting/LightsNode.js +10 -32
  488. package/src/nodes/lighting/PointShadowNode.js +167 -148
  489. package/src/nodes/lighting/ShadowFilterNode.js +55 -65
  490. package/src/nodes/lighting/ShadowNode.js +189 -44
  491. package/src/nodes/math/BitcastNode.js +156 -0
  492. package/src/nodes/math/BitcountNode.js +433 -0
  493. package/src/nodes/math/ConditionalNode.js +25 -8
  494. package/src/nodes/math/MathNode.js +98 -57
  495. package/src/nodes/math/OperatorNode.js +8 -5
  496. package/src/nodes/math/PackFloatNode.js +98 -0
  497. package/src/nodes/math/UnpackFloatNode.js +96 -0
  498. package/src/nodes/pmrem/PMREMNode.js +1 -1
  499. package/src/nodes/pmrem/PMREMUtils.js +111 -2
  500. package/src/nodes/shapes/Shapes.js +1 -1
  501. package/src/nodes/tsl/TSLBase.js +6 -3
  502. package/src/nodes/tsl/TSLCore.js +488 -166
  503. package/src/nodes/utils/ArrayElementNode.js +14 -1
  504. package/src/nodes/utils/ConvertNode.js +1 -1
  505. package/src/nodes/utils/DebugNode.js +14 -13
  506. package/src/nodes/utils/EventNode.js +67 -2
  507. package/src/nodes/utils/FlipNode.js +1 -1
  508. package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
  509. package/src/nodes/utils/JoinNode.js +7 -4
  510. package/src/nodes/utils/LoopNode.js +20 -24
  511. package/src/nodes/utils/MemberNode.js +60 -8
  512. package/src/nodes/utils/Packing.js +13 -1
  513. package/src/nodes/utils/PostProcessingUtils.js +60 -1
  514. package/src/nodes/utils/RTTNode.js +14 -4
  515. package/src/nodes/utils/ReflectorNode.js +61 -11
  516. package/src/nodes/utils/Remap.js +48 -0
  517. package/src/nodes/utils/RotateNode.js +1 -1
  518. package/src/nodes/utils/SampleNode.js +12 -2
  519. package/src/nodes/utils/SetNode.js +1 -1
  520. package/src/nodes/utils/SplitNode.js +12 -1
  521. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  522. package/src/nodes/utils/Timer.js +0 -47
  523. package/src/nodes/utils/UVUtils.js +28 -0
  524. package/src/objects/BatchedMesh.js +46 -18
  525. package/src/objects/InstancedMesh.js +30 -3
  526. package/src/objects/LOD.js +1 -1
  527. package/src/objects/Line.js +3 -2
  528. package/src/objects/LineSegments.js +2 -1
  529. package/src/objects/Mesh.js +1 -1
  530. package/src/objects/Points.js +1 -1
  531. package/src/objects/Skeleton.js +12 -2
  532. package/src/objects/SkinnedMesh.js +29 -10
  533. package/src/objects/Sprite.js +4 -3
  534. package/src/renderers/WebGLRenderer.js +372 -179
  535. package/src/renderers/common/Animation.js +16 -4
  536. package/src/renderers/common/Attributes.js +16 -2
  537. package/src/renderers/common/Backend.js +137 -35
  538. package/src/renderers/common/Background.js +28 -14
  539. package/src/renderers/common/BindGroup.js +1 -16
  540. package/src/renderers/common/Binding.js +11 -0
  541. package/src/renderers/common/Bindings.js +83 -12
  542. package/src/renderers/common/BlendMode.js +143 -0
  543. package/src/renderers/common/Buffer.js +40 -0
  544. package/src/renderers/common/BundleGroup.js +1 -1
  545. package/src/renderers/common/CanvasTarget.js +341 -0
  546. package/src/renderers/common/ChainMap.js +30 -6
  547. package/src/renderers/common/ComputePipeline.js +1 -1
  548. package/src/renderers/common/CubeRenderTarget.js +51 -7
  549. package/src/renderers/common/DataMap.js +1 -1
  550. package/src/renderers/common/Geometries.js +55 -3
  551. package/src/renderers/common/Info.js +337 -6
  552. package/src/renderers/common/InspectorBase.js +151 -0
  553. package/src/renderers/common/Lighting.js +5 -21
  554. package/src/renderers/common/Pipelines.js +41 -8
  555. package/src/renderers/common/PostProcessing.js +9 -226
  556. package/src/renderers/common/QuadMesh.js +7 -1
  557. package/src/renderers/common/ReadbackBuffer.js +78 -0
  558. package/src/renderers/common/RenderBundle.js +3 -1
  559. package/src/renderers/common/RenderBundles.js +7 -3
  560. package/src/renderers/common/RenderContext.js +18 -2
  561. package/src/renderers/common/RenderContexts.js +33 -49
  562. package/src/renderers/common/RenderList.js +7 -3
  563. package/src/renderers/common/RenderLists.js +2 -1
  564. package/src/renderers/common/RenderObject.js +32 -6
  565. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  566. package/src/renderers/common/RenderObjects.js +22 -6
  567. package/src/renderers/common/RenderPipeline.js +232 -17
  568. package/src/renderers/common/Renderer.js +927 -335
  569. package/src/renderers/common/RendererUtils.js +9 -0
  570. package/src/renderers/common/SampledTexture.js +9 -1
  571. package/src/renderers/common/Sampler.js +52 -14
  572. package/src/renderers/common/StorageBuffer.js +13 -1
  573. package/src/renderers/common/StorageTexture.js +9 -1
  574. package/src/renderers/common/Textures.js +208 -47
  575. package/src/renderers/common/TimestampQueryPool.js +70 -6
  576. package/src/renderers/common/Uniform.js +8 -0
  577. package/src/renderers/common/UniformsGroup.js +64 -2
  578. package/src/renderers/common/XRManager.js +79 -51
  579. package/src/renderers/common/extras/PMREMGenerator.js +176 -79
  580. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  581. package/src/renderers/common/nodes/NodeLibrary.js +9 -7
  582. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +260 -95
  583. package/src/renderers/common/nodes/NodeSampler.js +13 -1
  584. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  585. package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
  586. package/src/renderers/shaders/DFGLUTData.js +49 -0
  587. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  588. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  589. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  590. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  591. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  592. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
  593. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -2
  594. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
  595. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
  596. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
  597. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
  598. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  599. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  600. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
  601. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  602. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +152 -59
  603. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
  604. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  605. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
  606. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
  607. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
  608. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  609. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
  610. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +221 -190
  611. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
  612. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  613. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  614. package/src/renderers/shaders/ShaderChunk.js +5 -3
  615. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
  616. package/src/renderers/shaders/ShaderLib/depth.glsl.js +4 -1
  617. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
  618. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  619. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  620. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  621. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  622. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  623. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  624. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  625. package/src/renderers/shaders/ShaderLib.js +7 -6
  626. package/src/renderers/shaders/UniformsLib.js +8 -5
  627. package/src/renderers/shaders/UniformsUtils.js +52 -9
  628. package/src/renderers/webgl/WebGLAnimation.js +2 -1
  629. package/src/renderers/webgl/WebGLBackground.js +15 -15
  630. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  631. package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
  632. package/src/renderers/webgl/WebGLCapabilities.js +11 -5
  633. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  634. package/src/renderers/webgl/WebGLExtensions.js +2 -25
  635. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  636. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
  637. package/src/renderers/webgl/WebGLInfo.js +3 -1
  638. package/src/renderers/webgl/WebGLLights.js +18 -1
  639. package/src/renderers/webgl/WebGLMaterials.js +24 -13
  640. package/src/renderers/webgl/WebGLObjects.js +3 -1
  641. package/src/renderers/webgl/WebGLOutput.js +270 -0
  642. package/src/renderers/webgl/WebGLProgram.js +63 -122
  643. package/src/renderers/webgl/WebGLPrograms.js +65 -52
  644. package/src/renderers/webgl/WebGLRenderLists.js +15 -0
  645. package/src/renderers/webgl/WebGLRenderStates.js +13 -2
  646. package/src/renderers/webgl/WebGLShadowMap.js +191 -26
  647. package/src/renderers/webgl/WebGLState.js +79 -40
  648. package/src/renderers/webgl/WebGLTextures.js +234 -68
  649. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  650. package/src/renderers/webgl/WebGLUniformsGroups.js +24 -3
  651. package/src/renderers/webgl/WebGLUtils.js +8 -3
  652. package/src/renderers/webgl-fallback/WebGLBackend.js +438 -235
  653. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
  654. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +339 -84
  655. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
  656. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
  657. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
  658. package/src/renderers/webgl-fallback/utils/WebGLState.js +229 -11
  659. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +237 -72
  660. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +56 -27
  661. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +8 -3
  662. package/src/renderers/webgpu/WebGPUBackend.js +403 -253
  663. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
  664. package/src/renderers/webgpu/WebGPURenderer.js +5 -3
  665. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +491 -123
  666. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +108 -34
  667. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +360 -201
  668. package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
  669. package/src/renderers/webgpu/utils/WebGPUConstants.js +17 -2
  670. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +111 -54
  671. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +155 -205
  672. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +407 -149
  673. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +36 -13
  674. package/src/renderers/webgpu/utils/WebGPUUtils.js +55 -13
  675. package/src/renderers/webxr/WebXRController.js +12 -0
  676. package/src/renderers/webxr/WebXRManager.js +45 -29
  677. package/src/textures/CubeDepthTexture.js +76 -0
  678. package/src/textures/ExternalTexture.js +15 -4
  679. package/src/textures/HTMLTexture.js +74 -0
  680. package/src/textures/Source.js +5 -4
  681. package/src/textures/Texture.js +19 -7
  682. package/src/textures/VideoTexture.js +2 -3
  683. package/src/utils.js +344 -3
  684. package/examples/jsm/loaders/RGBMLoader.js +0 -1148
  685. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  686. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  687. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  688. package/src/nodes/accessors/SceneNode.js +0 -144
  689. package/src/nodes/code/ScriptableNode.js +0 -726
  690. package/src/nodes/code/ScriptableValueNode.js +0 -253
  691. package/src/nodes/display/PosterizeNode.js +0 -65
  692. package/src/nodes/functions/BSDF/DFGApprox.js +0 -30
  693. package/src/nodes/utils/RemapNode.js +0 -125
  694. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  695. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  696. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -13,11 +13,14 @@ import {
13
13
  RGBAFormat, RGBFormat, RedFormat, RGFormat, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, UnsignedByteType, FloatType, HalfFloatType, SRGBTransfer, DepthFormat, DepthStencilFormat,
14
14
  RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format,
15
15
  RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, UnsignedIntType, UnsignedShortType, UnsignedInt248Type, UnsignedInt5999Type,
16
- NeverCompare, AlwaysCompare, LessCompare, LessEqualCompare, EqualCompare, GreaterEqualCompare, GreaterCompare, NotEqualCompare, IntType, RedIntegerFormat, RGIntegerFormat, RGBAIntegerFormat
16
+ NeverCompare, AlwaysCompare, LessCompare, LessEqualCompare, EqualCompare, GreaterEqualCompare, GreaterCompare, NotEqualCompare, IntType, RedIntegerFormat, RGIntegerFormat, RGBAIntegerFormat,
17
+ UnsignedInt101111Type, RGBA_BPTC_Format, RGB_ETC1_Format, RGB_S3TC_DXT1_Format, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, RED_GREEN_RGTC2_Format, SIGNED_RED_GREEN_RGTC2_Format,
18
+ R11_EAC_Format, SIGNED_R11_EAC_Format, RG11_EAC_Format, SIGNED_RG11_EAC_Format,
19
+ Compatibility
17
20
  } from '../../../constants.js';
18
21
  import { CubeTexture } from '../../../textures/CubeTexture.js';
19
- import { DepthTexture } from '../../../textures/DepthTexture.js';
20
22
  import { Texture } from '../../../textures/Texture.js';
23
+ import { warn, error } from '../../../utils.js';
21
24
 
22
25
  const _compareToWebGPU = {
23
26
  [ NeverCompare ]: 'never',
@@ -86,20 +89,11 @@ class WebGPUTextureUtils {
86
89
  this.defaultVideoFrame = null;
87
90
 
88
91
  /**
89
- * Represents the color attachment of the default framebuffer.
92
+ * A cache of shared texture samplers.
90
93
  *
91
- * @type {?GPUTexture}
92
- * @default null
94
+ * @type {Map<string, Object>}
93
95
  */
94
- this.colorBuffer = null;
95
-
96
- /**
97
- * Represents the depth attachment of the default framebuffer.
98
- *
99
- * @type {DepthTexture}
100
- */
101
- this.depthTexture = new DepthTexture();
102
- this.depthTexture.name = 'depthBuffer';
96
+ this._samplerCache = new Map();
103
97
 
104
98
  }
105
99
 
@@ -107,39 +101,90 @@ class WebGPUTextureUtils {
107
101
  * Creates a GPU sampler for the given texture.
108
102
  *
109
103
  * @param {Texture} texture - The texture to create the sampler for.
104
+ * @return {string} The current sampler key.
110
105
  */
111
- createSampler( texture ) {
106
+ updateSampler( texture ) {
112
107
 
113
108
  const backend = this.backend;
114
- const device = backend.device;
115
-
116
- const textureGPU = backend.get( texture );
117
-
118
- const samplerDescriptorGPU = {
119
- addressModeU: this._convertAddressMode( texture.wrapS ),
120
- addressModeV: this._convertAddressMode( texture.wrapT ),
121
- addressModeW: this._convertAddressMode( texture.wrapR ),
122
- magFilter: this._convertFilterMode( texture.magFilter ),
123
- minFilter: this._convertFilterMode( texture.minFilter ),
124
- mipmapFilter: this._convertFilterMode( texture.minFilter ),
125
- maxAnisotropy: 1
126
- };
127
109
 
128
- // anisotropy can only be used when all filter modes are set to linear.
110
+ const samplerKey = texture.minFilter + '-' + texture.magFilter + '-' +
111
+ texture.wrapS + '-' + texture.wrapT + '-' + ( texture.wrapR || '0' ) + '-' +
112
+ texture.anisotropy + '-' + ( texture.compareFunction || 0 );
113
+
114
+ let samplerData = this._samplerCache.get( samplerKey );
115
+
116
+ if ( samplerData === undefined ) {
117
+
118
+ const samplerDescriptorGPU = {
119
+ addressModeU: this._convertAddressMode( texture.wrapS ),
120
+ addressModeV: this._convertAddressMode( texture.wrapT ),
121
+ addressModeW: this._convertAddressMode( texture.wrapR ),
122
+ magFilter: this._convertFilterMode( texture.magFilter ),
123
+ minFilter: this._convertFilterMode( texture.minFilter ),
124
+ mipmapFilter: this._convertFilterMode( texture.minFilter ),
125
+ maxAnisotropy: 1
126
+ };
127
+
128
+ // Depth textures without compare function must use non-filtering (nearest) sampling
129
+ if ( texture.isDepthTexture && texture.compareFunction === null ) {
130
+
131
+ samplerDescriptorGPU.magFilter = GPUFilterMode.Nearest;
132
+ samplerDescriptorGPU.minFilter = GPUFilterMode.Nearest;
133
+ samplerDescriptorGPU.mipmapFilter = GPUFilterMode.Nearest;
134
+
135
+ }
129
136
 
130
- if ( samplerDescriptorGPU.magFilter === GPUFilterMode.Linear && samplerDescriptorGPU.minFilter === GPUFilterMode.Linear && samplerDescriptorGPU.mipmapFilter === GPUFilterMode.Linear ) {
137
+ // anisotropy can only be used when all filter modes are set to linear.
131
138
 
132
- samplerDescriptorGPU.maxAnisotropy = texture.anisotropy;
139
+ if ( samplerDescriptorGPU.magFilter === GPUFilterMode.Linear && samplerDescriptorGPU.minFilter === GPUFilterMode.Linear && samplerDescriptorGPU.mipmapFilter === GPUFilterMode.Linear ) {
140
+
141
+ samplerDescriptorGPU.maxAnisotropy = texture.anisotropy;
142
+
143
+ }
144
+
145
+ if ( texture.isDepthTexture && texture.compareFunction !== null && backend.hasCompatibility( Compatibility.TEXTURE_COMPARE ) ) {
146
+
147
+ samplerDescriptorGPU.compare = _compareToWebGPU[ texture.compareFunction ];
148
+
149
+ }
150
+
151
+ const sampler = backend.device.createSampler( samplerDescriptorGPU );
152
+
153
+ samplerData = { sampler, usedTimes: 0 };
154
+
155
+ this._samplerCache.set( samplerKey, samplerData );
133
156
 
134
157
  }
135
158
 
136
- if ( texture.isDepthTexture && texture.compareFunction !== null ) {
159
+ const textureData = backend.get( texture );
160
+
161
+ if ( textureData.sampler !== samplerData.sampler ) {
137
162
 
138
- samplerDescriptorGPU.compare = _compareToWebGPU[ texture.compareFunction ];
163
+ // check if previous sampler is unused so it can be deleted
164
+
165
+ if ( textureData.sampler !== undefined ) {
166
+
167
+ const oldSamplerData = this._samplerCache.get( textureData.samplerKey );
168
+ oldSamplerData.usedTimes --;
169
+
170
+ if ( oldSamplerData.usedTimes === 0 ) {
171
+
172
+ this._samplerCache.delete( textureData.samplerKey );
173
+
174
+ }
175
+
176
+ }
177
+
178
+ // update to new sampler data
179
+
180
+ textureData.samplerKey = samplerKey;
181
+ textureData.sampler = samplerData.sampler;
182
+
183
+ samplerData.usedTimes ++;
139
184
 
140
185
  }
141
186
 
142
- textureGPU.sampler = device.createSampler( samplerDescriptorGPU );
187
+ return samplerKey;
143
188
 
144
189
  }
145
190
 
@@ -153,7 +198,7 @@ class WebGPUTextureUtils {
153
198
 
154
199
  let textureGPU;
155
200
 
156
- const format = getFormat( texture );
201
+ const format = getFormat( texture, this.backend.device );
157
202
 
158
203
  if ( texture.isCubeTexture ) {
159
204
 
@@ -186,6 +231,15 @@ class WebGPUTextureUtils {
186
231
 
187
232
  }
188
233
 
234
+ if ( texture.isExternalTexture ) {
235
+
236
+ textureData.texture = texture.sourceTexture;
237
+ textureData.initialized = true;
238
+
239
+ return;
240
+
241
+ }
242
+
189
243
  if ( options.needsMipmaps === undefined ) options.needsMipmaps = false;
190
244
  if ( options.levels === undefined ) options.levels = 1;
191
245
  if ( options.depth === undefined ) options.depth = 1;
@@ -221,7 +275,7 @@ class WebGPUTextureUtils {
221
275
 
222
276
  }
223
277
 
224
- if ( texture.isCompressedTexture !== true && texture.isCompressedArrayTexture !== true ) {
278
+ if ( texture.isCompressedTexture !== true && texture.isCompressedArrayTexture !== true && format !== GPUTextureFormat.RGB9E5UFloat ) {
225
279
 
226
280
  usage |= GPUTextureUsage.RENDER_ATTACHMENT;
227
281
 
@@ -245,7 +299,7 @@ class WebGPUTextureUtils {
245
299
 
246
300
  if ( format === undefined ) {
247
301
 
248
- console.warn( 'WebGPURenderer: Texture format not supported.' );
302
+ warn( 'WebGPURenderer: Texture format not supported.' );
249
303
 
250
304
  this.createDefaultTexture( texture );
251
305
  return;
@@ -258,7 +312,17 @@ class WebGPUTextureUtils {
258
312
 
259
313
  }
260
314
 
261
- textureData.texture = backend.device.createTexture( textureDescriptorGPU );
315
+ try {
316
+
317
+ textureData.texture = backend.device.createTexture( textureDescriptorGPU );
318
+
319
+ } catch ( e ) {
320
+
321
+ warn( 'WebGPURenderer: Failed to create texture with descriptor:', textureDescriptorGPU );
322
+ this.createDefaultTexture( texture );
323
+ return;
324
+
325
+ }
262
326
 
263
327
  if ( isMSAA ) {
264
328
 
@@ -266,6 +330,7 @@ class WebGPUTextureUtils {
266
330
 
267
331
  msaaTextureDescriptorGPU.label = msaaTextureDescriptorGPU.label + '-msaa';
268
332
  msaaTextureDescriptorGPU.sampleCount = samples;
333
+ msaaTextureDescriptorGPU.mipLevelCount = 1; // See https://www.w3.org/TR/webgpu/#texture-creation
269
334
 
270
335
  textureData.msaaTexture = backend.device.createTexture( msaaTextureDescriptorGPU );
271
336
 
@@ -281,13 +346,14 @@ class WebGPUTextureUtils {
281
346
  * Destroys the GPU data for the given texture object.
282
347
  *
283
348
  * @param {Texture} texture - The texture.
349
+ * @param {boolean} [isDefaultTexture=false] - Whether the texture uses a default GPU texture or not.
284
350
  */
285
- destroyTexture( texture ) {
351
+ destroyTexture( texture, isDefaultTexture = false ) {
286
352
 
287
353
  const backend = this.backend;
288
354
  const textureData = backend.get( texture );
289
355
 
290
- if ( textureData.texture !== undefined ) textureData.texture.destroy();
356
+ if ( textureData.texture !== undefined && isDefaultTexture === false ) textureData.texture.destroy();
291
357
 
292
358
  if ( textureData.msaaTexture !== undefined ) textureData.msaaTexture.destroy();
293
359
 
@@ -295,48 +361,17 @@ class WebGPUTextureUtils {
295
361
 
296
362
  }
297
363
 
298
- /**
299
- * Destroys the GPU sampler for the given texture.
300
- *
301
- * @param {Texture} texture - The texture to destroy the sampler for.
302
- */
303
- destroySampler( texture ) {
304
-
305
- const backend = this.backend;
306
- const textureData = backend.get( texture );
307
-
308
- delete textureData.sampler;
309
-
310
- }
311
-
312
364
  /**
313
365
  * Generates mipmaps for the given texture.
314
366
  *
315
367
  * @param {Texture} texture - The texture.
368
+ * @param {?GPUCommandEncoder} [encoder=null] - An optional command encoder used to generate mipmaps.
316
369
  */
317
- generateMipmaps( texture ) {
370
+ generateMipmaps( texture, encoder = null ) {
318
371
 
319
372
  const textureData = this.backend.get( texture );
320
373
 
321
- if ( texture.isCubeTexture ) {
322
-
323
- for ( let i = 0; i < 6; i ++ ) {
324
-
325
- this._generateMipmaps( textureData.texture, textureData.textureDescriptorGPU, i );
326
-
327
- }
328
-
329
- } else {
330
-
331
- const depth = texture.image.depth || 1;
332
-
333
- for ( let i = 0; i < depth; i ++ ) {
334
-
335
- this._generateMipmaps( textureData.texture, textureData.textureDescriptorGPU, i );
336
-
337
- }
338
-
339
- }
374
+ this._generateMipmaps( textureData.texture, encoder );
340
375
 
341
376
  }
342
377
 
@@ -348,24 +383,47 @@ class WebGPUTextureUtils {
348
383
  */
349
384
  getColorBuffer() {
350
385
 
351
- if ( this.colorBuffer ) this.colorBuffer.destroy();
352
-
353
386
  const backend = this.backend;
387
+ const canvasTarget = backend.renderer.getCanvasTarget();
354
388
  const { width, height } = backend.getDrawingBufferSize();
389
+ const samples = backend.renderer.currentSamples;
390
+
391
+ const colorTexture = canvasTarget.colorTexture;
392
+ const colorTextureData = backend.get( colorTexture );
355
393
 
356
- this.colorBuffer = backend.device.createTexture( {
394
+ if ( colorTexture.width === width && colorTexture.height === height && colorTexture.samples === samples ) {
395
+
396
+ return colorTextureData.texture;
397
+
398
+ }
399
+
400
+ // recreate
401
+
402
+ let colorBuffer = colorTextureData.texture;
403
+
404
+ if ( colorBuffer ) colorBuffer.destroy();
405
+
406
+ colorBuffer = backend.device.createTexture( {
357
407
  label: 'colorBuffer',
358
408
  size: {
359
409
  width: width,
360
410
  height: height,
361
411
  depthOrArrayLayers: 1
362
412
  },
363
- sampleCount: backend.utils.getSampleCount( backend.renderer.samples ),
413
+ sampleCount: backend.utils.getSampleCount( backend.renderer.currentSamples ),
364
414
  format: backend.utils.getPreferredCanvasFormat(),
365
415
  usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC
366
416
  } );
367
417
 
368
- return this.colorBuffer;
418
+ //
419
+
420
+ colorTexture.source.width = width;
421
+ colorTexture.source.height = height;
422
+ colorTexture.samples = samples;
423
+
424
+ colorTextureData.texture = colorBuffer;
425
+
426
+ return colorBuffer;
369
427
 
370
428
  }
371
429
 
@@ -380,9 +438,24 @@ class WebGPUTextureUtils {
380
438
  getDepthBuffer( depth = true, stencil = false ) {
381
439
 
382
440
  const backend = this.backend;
441
+ const canvasTarget = backend.renderer.getCanvasTarget();
383
442
  const { width, height } = backend.getDrawingBufferSize();
443
+ const samples = backend.renderer.currentSamples;
444
+
445
+ const depthTexture = canvasTarget.depthTexture;
446
+
447
+ if ( depthTexture.width === width &&
448
+ depthTexture.height === height &&
449
+ depthTexture.samples === samples &&
450
+ depthTexture.depth === depth &&
451
+ depthTexture.stencil === stencil ) {
452
+
453
+ return backend.get( depthTexture ).texture;
454
+
455
+ }
456
+
457
+ //
384
458
 
385
- const depthTexture = this.depthTexture;
386
459
  const depthTextureGPU = backend.get( depthTexture ).texture;
387
460
 
388
461
  let format, type;
@@ -390,18 +463,18 @@ class WebGPUTextureUtils {
390
463
  if ( stencil ) {
391
464
 
392
465
  format = DepthStencilFormat;
393
- type = UnsignedInt248Type;
466
+ type = backend.renderer.reversedDepthBuffer === true ? FloatType : UnsignedInt248Type;
394
467
 
395
468
  } else if ( depth ) {
396
469
 
397
470
  format = DepthFormat;
398
- type = UnsignedIntType;
471
+ type = backend.renderer.reversedDepthBuffer === true ? FloatType : UnsignedIntType;
399
472
 
400
473
  }
401
474
 
402
475
  if ( depthTextureGPU !== undefined ) {
403
476
 
404
- if ( depthTexture.image.width === width && depthTexture.image.height === height && depthTexture.format === format && depthTexture.type === type ) {
477
+ if ( depthTexture.image.width === width && depthTexture.image.height === height && depthTexture.format === format && depthTexture.type === type && depthTexture.samples === samples ) {
405
478
 
406
479
  return depthTextureGPU;
407
480
 
@@ -411,11 +484,14 @@ class WebGPUTextureUtils {
411
484
 
412
485
  }
413
486
 
487
+ // recreate
488
+
414
489
  depthTexture.name = 'depthBuffer';
415
490
  depthTexture.format = format;
416
491
  depthTexture.type = type;
417
492
  depthTexture.image.width = width;
418
493
  depthTexture.image.height = height;
494
+ depthTexture.samples = samples;
419
495
 
420
496
  this.createTexture( depthTexture, { width, height } );
421
497
 
@@ -432,6 +508,7 @@ class WebGPUTextureUtils {
432
508
  updateTexture( texture, options ) {
433
509
 
434
510
  const textureData = this.backend.get( texture );
511
+ const mipmaps = texture.mipmaps;
435
512
 
436
513
  const { textureDescriptorGPU } = textureData;
437
514
 
@@ -442,13 +519,42 @@ class WebGPUTextureUtils {
442
519
 
443
520
  if ( texture.isDataTexture ) {
444
521
 
445
- this._copyBufferToTexture( options.image, textureData.texture, textureDescriptorGPU, 0, texture.flipY );
522
+ if ( mipmaps.length > 0 ) {
523
+
524
+ for ( let i = 0, il = mipmaps.length; i < il; i ++ ) {
525
+
526
+ const mipmap = mipmaps[ i ];
527
+
528
+ this._copyBufferToTexture( mipmap, textureData.texture, textureDescriptorGPU, 0, texture.flipY, 0, i );
529
+
530
+ }
531
+
532
+
533
+ } else {
534
+
535
+ this._copyBufferToTexture( options.image, textureData.texture, textureDescriptorGPU, 0, texture.flipY );
536
+
537
+ }
446
538
 
447
539
  } else if ( texture.isArrayTexture || texture.isDataArrayTexture || texture.isData3DTexture ) {
448
540
 
449
- for ( let i = 0; i < options.image.depth; i ++ ) {
541
+ if ( texture.layerUpdates && texture.layerUpdates.size > 0 ) {
542
+
543
+ for ( const layerIndex of texture.layerUpdates ) {
544
+
545
+ this._copyBufferToTexture( options.image, textureData.texture, textureDescriptorGPU, layerIndex, texture.flipY, layerIndex );
546
+
547
+ }
548
+
549
+ texture.clearLayerUpdates();
550
+
551
+ } else {
552
+
553
+ for ( let i = 0; i < options.image.depth; i ++ ) {
450
554
 
451
- this._copyBufferToTexture( options.image, textureData.texture, textureDescriptorGPU, i, texture.flipY, i );
555
+ this._copyBufferToTexture( options.image, textureData.texture, textureDescriptorGPU, i, texture.flipY, i );
556
+
557
+ }
452
558
 
453
559
  }
454
560
 
@@ -458,11 +564,57 @@ class WebGPUTextureUtils {
458
564
 
459
565
  } else if ( texture.isCubeTexture ) {
460
566
 
461
- this._copyCubeMapToTexture( options.images, textureData.texture, textureDescriptorGPU, texture.flipY, texture.premultiplyAlpha );
567
+ this._copyCubeMapToTexture( texture, textureData.texture, textureDescriptorGPU );
568
+
569
+ } else if ( texture.isHTMLTexture ) {
570
+
571
+ const device = this.backend.device;
572
+ const canvas = this.backend.renderer.domElement;
573
+ const image = texture.image;
574
+
575
+ if ( typeof device.queue.copyElementImageToTexture !== 'function' ) return;
576
+
577
+ // Skip the first frame — the element needs a paint record first.
578
+ if ( ! textureData.hasPaintCallback ) {
579
+
580
+ textureData.hasPaintCallback = true;
581
+ canvas.requestPaint();
582
+ return;
583
+
584
+ }
585
+
586
+ const width = textureDescriptorGPU.size.width;
587
+ const height = textureDescriptorGPU.size.height;
588
+
589
+ device.queue.copyElementImageToTexture(
590
+ image, width, height,
591
+ { texture: textureData.texture }
592
+ );
593
+
594
+ if ( texture.flipY ) {
595
+
596
+ this._flipY( textureData.texture, textureDescriptorGPU );
597
+
598
+ }
462
599
 
463
600
  } else {
464
601
 
465
- this._copyImageToTexture( options.image, textureData.texture, textureDescriptorGPU, 0, texture.flipY, texture.premultiplyAlpha );
602
+ if ( mipmaps.length > 0 ) {
603
+
604
+ for ( let i = 0, il = mipmaps.length; i < il; i ++ ) {
605
+
606
+ const mipmap = mipmaps[ i ];
607
+
608
+ this._copyImageToTexture( mipmap, textureData.texture, textureDescriptorGPU, 0, texture.flipY, texture.premultiplyAlpha, i );
609
+
610
+ }
611
+
612
+
613
+ } else {
614
+
615
+ this._copyImageToTexture( options.image, textureData.texture, textureDescriptorGPU, 0, texture.flipY, texture.premultiplyAlpha );
616
+
617
+ }
466
618
 
467
619
  }
468
620
 
@@ -470,8 +622,6 @@ class WebGPUTextureUtils {
470
622
 
471
623
  textureData.version = texture.version;
472
624
 
473
- if ( texture.onUpdate ) texture.onUpdate( texture );
474
-
475
625
  }
476
626
 
477
627
  /**
@@ -500,7 +650,7 @@ class WebGPUTextureUtils {
500
650
 
501
651
  const readBuffer = device.createBuffer(
502
652
  {
503
- size: width * height * bytesPerTexel,
653
+ size: ( ( height - 1 ) * bytesPerRow ) + ( width * bytesPerTexel ), // see https://github.com/mrdoob/three.js/issues/31658#issuecomment-3229442010
504
654
  usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ
505
655
  }
506
656
  );
@@ -529,12 +679,23 @@ class WebGPUTextureUtils {
529
679
 
530
680
  await readBuffer.mapAsync( GPUMapMode.READ );
531
681
 
532
- const buffer = readBuffer.getMappedRange();
682
+ const buffer = readBuffer.getMappedRange().slice();
683
+
684
+ readBuffer.destroy();
533
685
 
534
686
  return new typedArrayType( buffer );
535
687
 
536
688
  }
537
689
 
690
+ /**
691
+ * Frees all internal resources.
692
+ */
693
+ dispose() {
694
+
695
+ this._samplerCache.clear();
696
+
697
+ }
698
+
538
699
  /**
539
700
  * Returns the default GPU texture for the given format.
540
701
  *
@@ -571,7 +732,7 @@ class WebGPUTextureUtils {
571
732
  */
572
733
  _getDefaultCubeTextureGPU( format ) {
573
734
 
574
- let defaultCubeTexture = this.defaultTexture[ format ];
735
+ let defaultCubeTexture = this.defaultCubeTexture[ format ];
575
736
 
576
737
  if ( defaultCubeTexture === undefined ) {
577
738
 
@@ -593,27 +754,46 @@ class WebGPUTextureUtils {
593
754
  * Uploads cube texture image data to the GPU memory.
594
755
  *
595
756
  * @private
596
- * @param {Array} images - The cube image data.
757
+ * @param {CubeTexture} texture - The cube texture.
597
758
  * @param {GPUTexture} textureGPU - The GPU texture.
598
759
  * @param {Object} textureDescriptorGPU - The GPU texture descriptor.
599
- * @param {boolean} flipY - Whether to flip texture data along their vertical axis or not.
600
- * @param {boolean} premultiplyAlpha - Whether the texture should have its RGB channels premultiplied by the alpha channel or not.
601
760
  */
602
- _copyCubeMapToTexture( images, textureGPU, textureDescriptorGPU, flipY, premultiplyAlpha ) {
761
+ _copyCubeMapToTexture( texture, textureGPU, textureDescriptorGPU ) {
762
+
763
+ const images = texture.images;
764
+ const mipmaps = texture.mipmaps;
603
765
 
604
766
  for ( let i = 0; i < 6; i ++ ) {
605
767
 
606
768
  const image = images[ i ];
607
769
 
608
- const flipIndex = flipY === true ? _flipMap[ i ] : i;
770
+ const flipIndex = texture.flipY === true ? _flipMap[ i ] : i;
609
771
 
610
772
  if ( image.isDataTexture ) {
611
773
 
612
- this._copyBufferToTexture( image.image, textureGPU, textureDescriptorGPU, flipIndex, flipY );
774
+ this._copyBufferToTexture( image.image, textureGPU, textureDescriptorGPU, flipIndex, texture.flipY );
613
775
 
614
776
  } else {
615
777
 
616
- this._copyImageToTexture( image, textureGPU, textureDescriptorGPU, flipIndex, flipY, premultiplyAlpha );
778
+ this._copyImageToTexture( image, textureGPU, textureDescriptorGPU, flipIndex, texture.flipY, texture.premultiplyAlpha );
779
+
780
+ }
781
+
782
+ for ( let j = 0; j < mipmaps.length; j ++ ) {
783
+
784
+ const mipmap = mipmaps[ j ];
785
+ const image = mipmap.images[ i ];
786
+
787
+ if ( image.isDataTexture ) {
788
+
789
+ this._copyBufferToTexture( image.image, textureGPU, textureDescriptorGPU, flipIndex, texture.flipY, 0, j + 1 );
790
+
791
+ } else {
792
+
793
+ this._copyImageToTexture( image, textureGPU, textureDescriptorGPU, flipIndex, texture.flipY, texture.premultiplyAlpha, j + 1 );
794
+
795
+ }
796
+
617
797
 
618
798
  }
619
799
 
@@ -631,26 +811,36 @@ class WebGPUTextureUtils {
631
811
  * @param {number} originDepth - The origin depth.
632
812
  * @param {boolean} flipY - Whether to flip texture data along their vertical axis or not.
633
813
  * @param {boolean} premultiplyAlpha - Whether the texture should have its RGB channels premultiplied by the alpha channel or not.
814
+ * @param {number} [mipLevel=0] - The mip level where the data should be copied to.
634
815
  */
635
- _copyImageToTexture( image, textureGPU, textureDescriptorGPU, originDepth, flipY, premultiplyAlpha ) {
816
+ _copyImageToTexture( image, textureGPU, textureDescriptorGPU, originDepth, flipY, premultiplyAlpha, mipLevel = 0 ) {
636
817
 
637
818
  const device = this.backend.device;
638
819
 
639
- device.queue.copyExternalImageToTexture(
640
- {
641
- source: image,
642
- flipY: flipY
643
- }, {
644
- texture: textureGPU,
645
- mipLevel: 0,
646
- origin: { x: 0, y: 0, z: originDepth },
647
- premultipliedAlpha: premultiplyAlpha
648
- }, {
649
- width: textureDescriptorGPU.size.width,
650
- height: textureDescriptorGPU.size.height,
651
- depthOrArrayLayers: 1
652
- }
653
- );
820
+ const width = ( mipLevel > 0 ) ? image.width : textureDescriptorGPU.size.width;
821
+ const height = ( mipLevel > 0 ) ? image.height : textureDescriptorGPU.size.height;
822
+
823
+ try {
824
+
825
+ device.queue.copyExternalImageToTexture(
826
+ {
827
+ source: image,
828
+ flipY: flipY
829
+ }, {
830
+ texture: textureGPU,
831
+ mipLevel: mipLevel,
832
+ origin: { x: 0, y: 0, z: originDepth },
833
+ premultipliedAlpha: premultiplyAlpha
834
+ }, {
835
+ width: width,
836
+ height: height,
837
+ depthOrArrayLayers: 1
838
+ }
839
+ );
840
+
841
+ // try/catch has been added to fix bad video frame data on certain devices, see #32391
842
+
843
+ } catch ( _ ) {}
654
844
 
655
845
  }
656
846
 
@@ -679,12 +869,11 @@ class WebGPUTextureUtils {
679
869
  *
680
870
  * @private
681
871
  * @param {GPUTexture} textureGPU - The GPU texture object.
682
- * @param {Object} textureDescriptorGPU - The texture descriptor.
683
- * @param {number} [baseArrayLayer=0] - The index of the first array layer accessible to the texture view.
872
+ * @param {?GPUCommandEncoder} [encoder=null] - An optional command encoder used to generate mipmaps.
684
873
  */
685
- _generateMipmaps( textureGPU, textureDescriptorGPU, baseArrayLayer = 0 ) {
874
+ _generateMipmaps( textureGPU, encoder = null ) {
686
875
 
687
- this._getPassUtils().generateMipmaps( textureGPU, textureDescriptorGPU, baseArrayLayer );
876
+ this._getPassUtils().generateMipmaps( textureGPU, encoder );
688
877
 
689
878
  }
690
879
 
@@ -711,9 +900,10 @@ class WebGPUTextureUtils {
711
900
  * @param {Object} textureDescriptorGPU - The GPU texture descriptor.
712
901
  * @param {number} originDepth - The origin depth.
713
902
  * @param {boolean} flipY - Whether to flip texture data along their vertical axis or not.
714
- * @param {number} [depth=0] - TODO.
903
+ * @param {number} [depth=0] - The depth offset when copying array or 3D texture data.
904
+ * @param {number} [mipLevel=0] - The mip level where the data should be copied to.
715
905
  */
716
- _copyBufferToTexture( image, textureGPU, textureDescriptorGPU, originDepth, flipY, depth = 0 ) {
906
+ _copyBufferToTexture( image, textureGPU, textureDescriptorGPU, originDepth, flipY, depth = 0, mipLevel = 0 ) {
717
907
 
718
908
  // @TODO: Consider to use GPUCommandEncoder.copyBufferToTexture()
719
909
  // @TODO: Consider to support valid buffer layouts with other formats like RGB
@@ -728,7 +918,7 @@ class WebGPUTextureUtils {
728
918
  device.queue.writeTexture(
729
919
  {
730
920
  texture: textureGPU,
731
- mipLevel: 0,
921
+ mipLevel: mipLevel,
732
922
  origin: { x: 0, y: 0, z: originDepth }
733
923
  },
734
924
  data,
@@ -916,7 +1106,9 @@ class WebGPUTextureUtils {
916
1106
  format === GPUTextureFormat.RG8Unorm ||
917
1107
  format === GPUTextureFormat.RG8Snorm ||
918
1108
  format === GPUTextureFormat.RG8Uint ||
919
- format === GPUTextureFormat.RG8Sint ) return 2;
1109
+ format === GPUTextureFormat.RG8Sint ||
1110
+ format === GPUTextureFormat.R16Unorm ||
1111
+ format === GPUTextureFormat.R16Snorm ) return 2;
920
1112
 
921
1113
  // 32-bit formats
922
1114
  if ( format === GPUTextureFormat.R32Uint ||
@@ -932,6 +1124,8 @@ class WebGPUTextureUtils {
932
1124
  format === GPUTextureFormat.RGBA8Sint ||
933
1125
  format === GPUTextureFormat.BGRA8Unorm ||
934
1126
  format === GPUTextureFormat.BGRA8UnormSRGB ||
1127
+ format === GPUTextureFormat.RG16Unorm ||
1128
+ format === GPUTextureFormat.RG16Snorm ||
935
1129
  // Packed 32-bit formats
936
1130
  format === GPUTextureFormat.RGB9E5UFloat ||
937
1131
  format === GPUTextureFormat.RGB10A2Unorm ||
@@ -947,7 +1141,9 @@ class WebGPUTextureUtils {
947
1141
  format === GPUTextureFormat.RG32Float ||
948
1142
  format === GPUTextureFormat.RGBA16Uint ||
949
1143
  format === GPUTextureFormat.RGBA16Sint ||
950
- format === GPUTextureFormat.RGBA16Float ) return 8;
1144
+ format === GPUTextureFormat.RGBA16Float ||
1145
+ format === GPUTextureFormat.RGBA16Unorm ||
1146
+ format === GPUTextureFormat.RGBA16Snorm ) return 8;
951
1147
 
952
1148
  // 128-bit formats
953
1149
  if ( format === GPUTextureFormat.RGBA32Uint ||
@@ -976,7 +1172,7 @@ class WebGPUTextureUtils {
976
1172
  if ( format === GPUTextureFormat.RG8Snorm ) return Int8Array;
977
1173
  if ( format === GPUTextureFormat.RGBA8Uint ) return Uint8Array;
978
1174
  if ( format === GPUTextureFormat.RGBA8Sint ) return Int8Array;
979
- if ( format === GPUTextureFormat.RGBA8Unorm ) return Uint8Array;
1175
+ if ( format === GPUTextureFormat.RGBA8Unorm || format === GPUTextureFormat.RGBA8UnormSRGB ) return Uint8Array;
980
1176
  if ( format === GPUTextureFormat.RGBA8Snorm ) return Int8Array;
981
1177
 
982
1178
 
@@ -990,6 +1186,12 @@ class WebGPUTextureUtils {
990
1186
  if ( format === GPUTextureFormat.RG16Float ) return Uint16Array;
991
1187
  if ( format === GPUTextureFormat.RGBA16Float ) return Uint16Array;
992
1188
 
1189
+ if ( format === GPUTextureFormat.R16Unorm ) return Uint16Array;
1190
+ if ( format === GPUTextureFormat.R16Snorm ) return Int16Array;
1191
+ if ( format === GPUTextureFormat.RG16Unorm ) return Uint16Array;
1192
+ if ( format === GPUTextureFormat.RG16Snorm ) return Int16Array;
1193
+ if ( format === GPUTextureFormat.RGBA16Unorm ) return Uint16Array;
1194
+ if ( format === GPUTextureFormat.RGBA16Snorm ) return Int16Array;
993
1195
 
994
1196
  if ( format === GPUTextureFormat.R32Uint ) return Uint32Array;
995
1197
  if ( format === GPUTextureFormat.R32Sint ) return Int32Array;
@@ -1001,8 +1203,7 @@ class WebGPUTextureUtils {
1001
1203
  if ( format === GPUTextureFormat.RGBA32Sint ) return Int32Array;
1002
1204
  if ( format === GPUTextureFormat.RGBA32Float ) return Float32Array;
1003
1205
 
1004
- if ( format === GPUTextureFormat.BGRA8Unorm ) return Uint8Array;
1005
- if ( format === GPUTextureFormat.BGRA8UnormSRGB ) return Uint8Array;
1206
+ if ( format === GPUTextureFormat.BGRA8Unorm || format === GPUTextureFormat.BGRA8UnormSRGB ) return Uint8Array;
1006
1207
  if ( format === GPUTextureFormat.RGB10A2Unorm ) return Uint32Array;
1007
1208
  if ( format === GPUTextureFormat.RGB9E5UFloat ) return Uint32Array;
1008
1209
  if ( format === GPUTextureFormat.RG11B10UFloat ) return Uint32Array;
@@ -1045,23 +1246,38 @@ class WebGPUTextureUtils {
1045
1246
  * Returns the GPU format for the given texture.
1046
1247
  *
1047
1248
  * @param {Texture} texture - The texture.
1048
- * @param {?GPUDevice} [device=null] - The GPU device which is used for feature detection.
1049
- * It is not necessary to apply the device for most formats.
1249
+ * @param {GPUDevice} [device] - The GPU device which is used for feature detection.
1050
1250
  * @return {string} The GPU format.
1051
1251
  */
1052
- export function getFormat( texture, device = null ) {
1252
+ export function getFormat( texture, device ) {
1053
1253
 
1054
1254
  const format = texture.format;
1055
1255
  const type = texture.type;
1256
+ const normalized = texture.normalized;
1056
1257
  const colorSpace = texture.colorSpace;
1057
1258
  const transfer = ColorManagement.getTransfer( colorSpace );
1058
1259
 
1059
1260
  let formatGPU;
1060
1261
 
1262
+ let textureFormatsTier1 = false;
1263
+
1264
+ if ( normalized ) {
1265
+
1266
+ textureFormatsTier1 = device.features.has( GPUFeatureName.TextureFormatsTier1 );
1267
+
1268
+ if ( textureFormatsTier1 === false ) {
1269
+
1270
+ warn( 'WebGPURenderer: Unable to use normalized textures without texture-formats-tier1 feature.' );
1271
+
1272
+ }
1273
+
1274
+ }
1275
+
1061
1276
  if ( texture.isCompressedTexture === true || texture.isCompressedArrayTexture === true ) {
1062
1277
 
1063
1278
  switch ( format ) {
1064
1279
 
1280
+ case RGB_S3TC_DXT1_Format:
1065
1281
  case RGBA_S3TC_DXT1_Format:
1066
1282
  formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.BC1RGBAUnormSRGB : GPUTextureFormat.BC1RGBAUnorm;
1067
1283
  break;
@@ -1074,7 +1290,28 @@ export function getFormat( texture, device = null ) {
1074
1290
  formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.BC3RGBAUnormSRGB : GPUTextureFormat.BC3RGBAUnorm;
1075
1291
  break;
1076
1292
 
1293
+ case RED_RGTC1_Format:
1294
+ formatGPU = GPUTextureFormat.BC4RUnorm;
1295
+ break;
1296
+
1297
+ case SIGNED_RED_RGTC1_Format:
1298
+ formatGPU = GPUTextureFormat.BC4RSnorm;
1299
+ break;
1300
+
1301
+ case RED_GREEN_RGTC2_Format:
1302
+ formatGPU = GPUTextureFormat.BC5RGUnorm;
1303
+ break;
1304
+
1305
+ case SIGNED_RED_GREEN_RGTC2_Format:
1306
+ formatGPU = GPUTextureFormat.BC5RGSnorm;
1307
+ break;
1308
+
1309
+ case RGBA_BPTC_Format:
1310
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.BC7RGBAUnormSRGB : GPUTextureFormat.BC7RGBAUnorm;
1311
+ break;
1312
+
1077
1313
  case RGB_ETC2_Format:
1314
+ case RGB_ETC1_Format:
1078
1315
  formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ETC2RGB8UnormSRGB : GPUTextureFormat.ETC2RGB8Unorm;
1079
1316
  break;
1080
1317
 
@@ -1082,6 +1319,22 @@ export function getFormat( texture, device = null ) {
1082
1319
  formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ETC2RGBA8UnormSRGB : GPUTextureFormat.ETC2RGBA8Unorm;
1083
1320
  break;
1084
1321
 
1322
+ case R11_EAC_Format:
1323
+ formatGPU = GPUTextureFormat.EACR11Unorm;
1324
+ break;
1325
+
1326
+ case SIGNED_R11_EAC_Format:
1327
+ formatGPU = GPUTextureFormat.EACR11Snorm;
1328
+ break;
1329
+
1330
+ case RG11_EAC_Format:
1331
+ formatGPU = GPUTextureFormat.EACRG11Unorm;
1332
+ break;
1333
+
1334
+ case SIGNED_RG11_EAC_Format:
1335
+ formatGPU = GPUTextureFormat.EACRG11Snorm;
1336
+ break;
1337
+
1085
1338
  case RGBA_ASTC_4x4_Format:
1086
1339
  formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC4x4UnormSRGB : GPUTextureFormat.ASTC4x4Unorm;
1087
1340
  break;
@@ -1143,7 +1396,7 @@ export function getFormat( texture, device = null ) {
1143
1396
  break;
1144
1397
 
1145
1398
  default:
1146
- console.error( 'WebGPURenderer: Unsupported texture format.', format );
1399
+ error( 'WebGPURenderer: Unsupported texture format.', format );
1147
1400
 
1148
1401
  }
1149
1402
 
@@ -1160,12 +1413,13 @@ export function getFormat( texture, device = null ) {
1160
1413
  break;
1161
1414
 
1162
1415
  case ShortType:
1163
- formatGPU = GPUTextureFormat.RGBA16Sint;
1416
+ formatGPU = textureFormatsTier1 ? GPUTextureFormat.RGBA16Snorm : GPUTextureFormat.RGBA16Sint;
1164
1417
  break;
1165
1418
 
1166
1419
  case UnsignedShortType:
1167
- formatGPU = GPUTextureFormat.RGBA16Uint;
1420
+ formatGPU = textureFormatsTier1 ? GPUTextureFormat.RGBA16Unorm : GPUTextureFormat.RGBA16Uint;
1168
1421
  break;
1422
+
1169
1423
  case UnsignedIntType:
1170
1424
  formatGPU = GPUTextureFormat.RGBA32Uint;
1171
1425
  break;
@@ -1187,7 +1441,7 @@ export function getFormat( texture, device = null ) {
1187
1441
  break;
1188
1442
 
1189
1443
  default:
1190
- console.error( 'WebGPURenderer: Unsupported texture type with RGBAFormat.', type );
1444
+ error( 'WebGPURenderer: Unsupported texture type with RGBAFormat.', type );
1191
1445
 
1192
1446
  }
1193
1447
 
@@ -1201,8 +1455,12 @@ export function getFormat( texture, device = null ) {
1201
1455
  formatGPU = GPUTextureFormat.RGB9E5UFloat;
1202
1456
  break;
1203
1457
 
1458
+ case UnsignedInt101111Type:
1459
+ formatGPU = GPUTextureFormat.RG11B10UFloat;
1460
+ break;
1461
+
1204
1462
  default:
1205
- console.error( 'WebGPURenderer: Unsupported texture type with RGBFormat.', type );
1463
+ error( 'WebGPURenderer: Unsupported texture type with RGBFormat.', type );
1206
1464
 
1207
1465
  }
1208
1466
 
@@ -1217,11 +1475,11 @@ export function getFormat( texture, device = null ) {
1217
1475
  break;
1218
1476
 
1219
1477
  case ShortType:
1220
- formatGPU = GPUTextureFormat.R16Sint;
1478
+ formatGPU = textureFormatsTier1 ? GPUTextureFormat.R16Snorm : GPUTextureFormat.R16Sint;
1221
1479
  break;
1222
1480
 
1223
1481
  case UnsignedShortType:
1224
- formatGPU = GPUTextureFormat.R16Uint;
1482
+ formatGPU = textureFormatsTier1 ? GPUTextureFormat.R16Unorm : GPUTextureFormat.R16Uint;
1225
1483
  break;
1226
1484
 
1227
1485
  case UnsignedIntType:
@@ -1245,7 +1503,7 @@ export function getFormat( texture, device = null ) {
1245
1503
  break;
1246
1504
 
1247
1505
  default:
1248
- console.error( 'WebGPURenderer: Unsupported texture type with RedFormat.', type );
1506
+ error( 'WebGPURenderer: Unsupported texture type with RedFormat.', type );
1249
1507
 
1250
1508
  }
1251
1509
 
@@ -1260,11 +1518,11 @@ export function getFormat( texture, device = null ) {
1260
1518
  break;
1261
1519
 
1262
1520
  case ShortType:
1263
- formatGPU = GPUTextureFormat.RG16Sint;
1521
+ formatGPU = textureFormatsTier1 ? GPUTextureFormat.RG16Snorm : GPUTextureFormat.RG16Sint;
1264
1522
  break;
1265
1523
 
1266
1524
  case UnsignedShortType:
1267
- formatGPU = GPUTextureFormat.RG16Uint;
1525
+ formatGPU = textureFormatsTier1 ? GPUTextureFormat.RG16Unorm : GPUTextureFormat.RG16Uint;
1268
1526
  break;
1269
1527
 
1270
1528
  case UnsignedIntType:
@@ -1288,7 +1546,7 @@ export function getFormat( texture, device = null ) {
1288
1546
  break;
1289
1547
 
1290
1548
  default:
1291
- console.error( 'WebGPURenderer: Unsupported texture type with RGFormat.', type );
1549
+ error( 'WebGPURenderer: Unsupported texture type with RGFormat.', type );
1292
1550
 
1293
1551
  }
1294
1552
 
@@ -1311,7 +1569,7 @@ export function getFormat( texture, device = null ) {
1311
1569
  break;
1312
1570
 
1313
1571
  default:
1314
- console.error( 'WebGPURenderer: Unsupported texture type with DepthFormat.', type );
1572
+ error( 'WebGPURenderer: Unsupported texture type with DepthFormat.', type );
1315
1573
 
1316
1574
  }
1317
1575
 
@@ -1329,7 +1587,7 @@ export function getFormat( texture, device = null ) {
1329
1587
 
1330
1588
  if ( device && device.features.has( GPUFeatureName.Depth32FloatStencil8 ) === false ) {
1331
1589
 
1332
- console.error( 'WebGPURenderer: Depth textures with DepthStencilFormat + FloatType can only be used with the "depth32float-stencil8" GPU feature.' );
1590
+ error( 'WebGPURenderer: Depth textures with DepthStencilFormat + FloatType can only be used with the "depth32float-stencil8" GPU feature.' );
1333
1591
 
1334
1592
  }
1335
1593
 
@@ -1338,7 +1596,7 @@ export function getFormat( texture, device = null ) {
1338
1596
  break;
1339
1597
 
1340
1598
  default:
1341
- console.error( 'WebGPURenderer: Unsupported texture type with DepthStencilFormat.', type );
1599
+ error( 'WebGPURenderer: Unsupported texture type with DepthStencilFormat.', type );
1342
1600
 
1343
1601
  }
1344
1602
 
@@ -1357,7 +1615,7 @@ export function getFormat( texture, device = null ) {
1357
1615
  break;
1358
1616
 
1359
1617
  default:
1360
- console.error( 'WebGPURenderer: Unsupported texture type with RedIntegerFormat.', type );
1618
+ error( 'WebGPURenderer: Unsupported texture type with RedIntegerFormat.', type );
1361
1619
 
1362
1620
  }
1363
1621
 
@@ -1376,7 +1634,7 @@ export function getFormat( texture, device = null ) {
1376
1634
  break;
1377
1635
 
1378
1636
  default:
1379
- console.error( 'WebGPURenderer: Unsupported texture type with RGIntegerFormat.', type );
1637
+ error( 'WebGPURenderer: Unsupported texture type with RGIntegerFormat.', type );
1380
1638
 
1381
1639
  }
1382
1640
 
@@ -1395,14 +1653,14 @@ export function getFormat( texture, device = null ) {
1395
1653
  break;
1396
1654
 
1397
1655
  default:
1398
- console.error( 'WebGPURenderer: Unsupported texture type with RGBAIntegerFormat.', type );
1656
+ error( 'WebGPURenderer: Unsupported texture type with RGBAIntegerFormat.', type );
1399
1657
 
1400
1658
  }
1401
1659
 
1402
1660
  break;
1403
1661
 
1404
1662
  default:
1405
- console.error( 'WebGPURenderer: Unsupported texture format.', format );
1663
+ error( 'WebGPURenderer: Unsupported texture format.', format );
1406
1664
 
1407
1665
  }
1408
1666