super-three 0.181.0 → 0.185.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 (693) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +21332 -19201
  4. package/build/three.core.js +20908 -19853
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +1947 -862
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +37 -16
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +33628 -25197
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +33394 -25000
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +14 -3
  15. package/examples/jsm/animation/CCDIKSolver.js +7 -3
  16. package/examples/jsm/controls/ArcballControls.js +13 -6
  17. package/examples/jsm/controls/DragControls.js +2 -2
  18. package/examples/jsm/controls/FirstPersonControls.js +127 -86
  19. package/examples/jsm/controls/FlyControls.js +4 -0
  20. package/examples/jsm/controls/MapControls.js +55 -1
  21. package/examples/jsm/controls/OrbitControls.js +111 -8
  22. package/examples/jsm/controls/TrackballControls.js +8 -8
  23. package/examples/jsm/controls/TransformControls.js +102 -17
  24. package/examples/jsm/csm/CSM.js +2 -1
  25. package/examples/jsm/csm/CSMFrustum.js +31 -6
  26. package/examples/jsm/csm/CSMShadowNode.js +10 -3
  27. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  28. package/examples/jsm/effects/AsciiEffect.js +14 -1
  29. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  30. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  31. package/examples/jsm/exporters/DRACOExporter.js +27 -6
  32. package/examples/jsm/exporters/EXRExporter.js +1 -1
  33. package/examples/jsm/exporters/GLTFExporter.js +266 -21
  34. package/examples/jsm/exporters/PLYExporter.js +286 -73
  35. package/examples/jsm/exporters/USDZExporter.js +353 -99
  36. package/examples/jsm/generators/CityGenerator.js +346 -0
  37. package/examples/jsm/generators/ForestGenerator.js +347 -0
  38. package/examples/jsm/generators/TerrainGenerator.js +504 -0
  39. package/examples/jsm/generators/TreeGenerator.js +377 -0
  40. package/examples/jsm/generators/city/SidewalkGenerator.js +253 -0
  41. package/examples/jsm/generators/city/SkyscraperGenerator.js +1357 -0
  42. package/examples/jsm/geometries/DecalGeometry.js +1 -1
  43. package/examples/jsm/geometries/LoftGeometry.js +355 -0
  44. package/examples/jsm/geometries/TextGeometry.js +18 -0
  45. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  46. package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
  47. package/examples/jsm/helpers/LightProbeHelper.js +5 -4
  48. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  49. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  50. package/examples/jsm/helpers/ViewHelper.js +83 -14
  51. package/examples/jsm/inspector/Extension.js +13 -0
  52. package/examples/jsm/inspector/Inspector.js +244 -91
  53. package/examples/jsm/inspector/RendererInspector.js +165 -39
  54. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
  55. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
  56. package/examples/jsm/inspector/tabs/Console.js +241 -25
  57. package/examples/jsm/inspector/tabs/Memory.js +136 -0
  58. package/examples/jsm/inspector/tabs/Parameters.js +115 -7
  59. package/examples/jsm/inspector/tabs/Performance.js +24 -9
  60. package/examples/jsm/inspector/tabs/Settings.js +306 -0
  61. package/examples/jsm/inspector/tabs/Timeline.js +1696 -0
  62. package/examples/jsm/inspector/tabs/Viewer.js +723 -9
  63. package/examples/jsm/inspector/ui/Graph.js +162 -25
  64. package/examples/jsm/inspector/ui/Item.js +92 -13
  65. package/examples/jsm/inspector/ui/List.js +2 -2
  66. package/examples/jsm/inspector/ui/Profiler.js +1991 -44
  67. package/examples/jsm/inspector/ui/Style.js +1943 -543
  68. package/examples/jsm/inspector/ui/Tab.js +226 -5
  69. package/examples/jsm/inspector/ui/Values.js +126 -8
  70. package/examples/jsm/inspector/ui/utils.js +143 -10
  71. package/examples/jsm/interaction/InteractionManager.js +226 -0
  72. package/examples/jsm/libs/basis/README.md +0 -1
  73. package/examples/jsm/libs/demuxer_mp4.js +3 -3
  74. package/examples/jsm/libs/draco/README.md +0 -1
  75. package/examples/jsm/libs/meshopt_clusterizer.module.js +421 -0
  76. package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
  77. package/examples/jsm/libs/meshopt_simplifier.module.js +627 -0
  78. package/examples/jsm/libs/mikktspace.module.js +34 -9
  79. package/examples/jsm/lighting/ClusteredLighting.js +55 -0
  80. package/examples/jsm/lighting/DynamicLighting.js +82 -0
  81. package/examples/jsm/lighting/LightProbeGrid.js +681 -0
  82. package/examples/jsm/lines/LineMaterial.js +45 -16
  83. package/examples/jsm/lines/LineSegments2.js +8 -0
  84. package/examples/jsm/lines/webgpu/LineSegments2.js +8 -0
  85. package/examples/jsm/loaders/3DMLoader.js +6 -5
  86. package/examples/jsm/loaders/3MFLoader.js +2 -2
  87. package/examples/jsm/loaders/AMFLoader.js +2 -2
  88. package/examples/jsm/loaders/ColladaLoader.js +24 -4026
  89. package/examples/jsm/loaders/DRACOLoader.js +51 -18
  90. package/examples/jsm/loaders/EXRLoader.js +701 -90
  91. package/examples/jsm/loaders/FBXLoader.js +235 -37
  92. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  93. package/examples/jsm/loaders/GLTFLoader.js +146 -178
  94. package/examples/jsm/loaders/HDRLoader.js +7 -30
  95. package/examples/jsm/loaders/KMZLoader.js +5 -5
  96. package/examples/jsm/loaders/KTX2Loader.js +58 -17
  97. package/examples/jsm/loaders/LDrawLoader.js +49 -58
  98. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  99. package/examples/jsm/loaders/LUTCubeLoader.js +2 -2
  100. package/examples/jsm/loaders/LWOLoader.js +11 -39
  101. package/examples/jsm/loaders/LottieLoader.js +1 -1
  102. package/examples/jsm/loaders/MaterialXLoader.js +31 -9
  103. package/examples/jsm/loaders/NRRDLoader.js +5 -5
  104. package/examples/jsm/loaders/PCDLoader.js +11 -9
  105. package/examples/jsm/loaders/PLYLoader.js +218 -55
  106. package/examples/jsm/loaders/SVGLoader.js +549 -497
  107. package/examples/jsm/loaders/TDSLoader.js +0 -2
  108. package/examples/jsm/loaders/TGALoader.js +0 -2
  109. package/examples/jsm/loaders/TTFLoader.js +1 -1
  110. package/examples/jsm/loaders/USDLoader.js +127 -43
  111. package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
  112. package/examples/jsm/loaders/VOXLoader.js +660 -117
  113. package/examples/jsm/loaders/VRMLLoader.js +80 -3
  114. package/examples/jsm/loaders/VTKLoader.js +42 -25
  115. package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
  116. package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
  117. package/examples/jsm/loaders/usd/USDAParser.js +504 -344
  118. package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
  119. package/examples/jsm/loaders/usd/USDComposer.js +4627 -0
  120. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  121. package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
  122. package/examples/jsm/math/Octree.js +131 -1
  123. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  124. package/examples/jsm/misc/RollerCoaster.js +42 -4
  125. package/examples/jsm/misc/TileCreasedNormalsPlugin.js +270 -0
  126. package/examples/jsm/misc/Volume.js +2 -3
  127. package/examples/jsm/misc/VolumeSlice.js +0 -1
  128. package/examples/jsm/modifiers/TessellateModifier.js +1 -1
  129. package/examples/jsm/objects/GroundedSkybox.js +1 -1
  130. package/examples/jsm/objects/LensflareMesh.js +1 -1
  131. package/examples/jsm/objects/Reflector.js +72 -25
  132. package/examples/jsm/objects/Sky.js +90 -6
  133. package/examples/jsm/objects/SkyMesh.js +150 -16
  134. package/examples/jsm/objects/Water.js +4 -3
  135. package/examples/jsm/objects/Water2.js +5 -3
  136. package/examples/jsm/objects/Water2Mesh.js +1 -1
  137. package/examples/jsm/objects/WaterMesh.js +5 -7
  138. package/examples/jsm/physics/AmmoPhysics.js +27 -15
  139. package/examples/jsm/physics/JoltPhysics.js +10 -6
  140. package/examples/jsm/physics/RapierPhysics.js +36 -7
  141. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  142. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  143. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  144. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  145. package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
  146. package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
  147. package/examples/jsm/renderers/Projector.js +246 -28
  148. package/examples/jsm/renderers/SVGRenderer.js +174 -60
  149. package/examples/jsm/shaders/GTAOShader.js +19 -6
  150. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  151. package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
  152. package/examples/jsm/shaders/SAOShader.js +17 -4
  153. package/examples/jsm/shaders/SSAOShader.js +11 -1
  154. package/examples/jsm/shaders/SSRShader.js +6 -5
  155. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
  156. package/examples/jsm/shaders/VignetteShader.js +1 -1
  157. package/examples/jsm/shaders/VolumeShader.js +31 -44
  158. package/examples/jsm/transpiler/AST.js +44 -0
  159. package/examples/jsm/transpiler/GLSLDecoder.js +65 -8
  160. package/examples/jsm/transpiler/Linker.js +1 -1
  161. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  162. package/examples/jsm/transpiler/TSLEncoder.js +46 -3
  163. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  164. package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
  165. package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
  166. package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
  167. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  168. package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
  169. package/examples/jsm/tsl/display/BloomNode.js +75 -25
  170. package/examples/jsm/tsl/display/CRT.js +150 -0
  171. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
  172. package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
  173. package/examples/jsm/tsl/display/DepthOfFieldNode.js +3 -3
  174. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  175. package/examples/jsm/tsl/display/FSR1Node.js +477 -0
  176. package/examples/jsm/tsl/display/FXAANode.js +13 -14
  177. package/examples/jsm/tsl/display/GTAONode.js +40 -17
  178. package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
  179. package/examples/jsm/tsl/display/GodraysNode.js +615 -0
  180. package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +560 -0
  181. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  182. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  183. package/examples/jsm/tsl/display/OutlineNode.js +69 -19
  184. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  185. package/examples/jsm/tsl/display/PixelationPassNode.js +9 -8
  186. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  187. package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +912 -0
  188. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  189. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  190. package/examples/jsm/tsl/display/SSAAPassNode.js +15 -27
  191. package/examples/jsm/tsl/display/SSGINode.js +96 -62
  192. package/examples/jsm/tsl/display/SSRNode.js +831 -134
  193. package/examples/jsm/tsl/display/SSSNode.js +8 -6
  194. package/examples/jsm/tsl/display/Shape.js +29 -0
  195. package/examples/jsm/tsl/display/SharpenNode.js +283 -0
  196. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  197. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  198. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  199. package/examples/jsm/tsl/display/TAAUNode.js +835 -0
  200. package/examples/jsm/tsl/display/TRAANode.js +315 -126
  201. package/examples/jsm/tsl/display/TemporalReprojectNode.js +1023 -0
  202. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  203. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  204. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  205. package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +622 -0
  206. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
  207. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
  208. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
  209. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
  210. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
  211. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
  212. package/examples/jsm/tsl/math/Bayer.js +53 -3
  213. package/examples/jsm/tsl/math/curlNoise.js +107 -0
  214. package/examples/jsm/tsl/shadows/TileShadowNode.js +1 -1
  215. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +3 -3
  216. package/examples/jsm/tsl/utils/GroundedSkybox.js +62 -0
  217. package/examples/jsm/tsl/utils/RNoise.js +51 -0
  218. package/examples/jsm/tsl/utils/SpecularHelpers.js +325 -0
  219. package/examples/jsm/utils/BufferGeometryUtils.js +128 -62
  220. package/examples/jsm/utils/ColorUtils.js +76 -0
  221. package/examples/jsm/utils/GeometryCompressionUtils.js +1 -1
  222. package/examples/jsm/utils/LDrawUtils.js +1 -1
  223. package/examples/jsm/utils/SceneOptimizer.js +1 -1
  224. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  225. package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
  226. package/examples/jsm/utils/SkeletonUtils.js +14 -8
  227. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  228. package/examples/jsm/webxr/ARButton.js +1 -1
  229. package/examples/jsm/webxr/WebGLXRFallback.js +89 -0
  230. package/examples/jsm/webxr/XRControllerModelFactory.js +2 -2
  231. package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
  232. package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
  233. package/package.json +28 -34
  234. package/src/Three.Core.js +3 -1
  235. package/src/Three.TSL.js +35 -14
  236. package/src/Three.WebGPU.Nodes.js +5 -0
  237. package/src/Three.WebGPU.js +13 -0
  238. package/src/Three.js +1 -0
  239. package/src/animation/AnimationAction.js +18 -4
  240. package/src/animation/AnimationClip.js +0 -139
  241. package/src/animation/AnimationMixer.js +6 -0
  242. package/src/animation/AnimationUtils.js +1 -12
  243. package/src/animation/KeyframeTrack.js +47 -8
  244. package/src/animation/PropertyBinding.js +2 -2
  245. package/src/animation/PropertyMixer.js +4 -4
  246. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  247. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  248. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  249. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  250. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  251. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  252. package/src/audio/Audio.js +1 -1
  253. package/src/audio/AudioContext.js +2 -2
  254. package/src/audio/AudioListener.js +5 -3
  255. package/src/cameras/Camera.js +34 -4
  256. package/src/cameras/CubeCamera.js +20 -0
  257. package/src/cameras/StereoCamera.js +5 -2
  258. package/src/constants.js +90 -5
  259. package/src/core/BufferAttribute.js +13 -1
  260. package/src/core/BufferGeometry.js +43 -9
  261. package/src/core/Clock.js +7 -0
  262. package/src/core/Object3D.js +69 -11
  263. package/src/core/Raycaster.js +3 -3
  264. package/src/core/RenderTarget.js +19 -6
  265. package/src/extras/PMREMGenerator.js +13 -22
  266. package/src/extras/TextureUtils.js +6 -2
  267. package/src/extras/core/ShapePath.js +149 -160
  268. package/src/extras/curves/CatmullRomCurve3.js +3 -2
  269. package/src/geometries/ExtrudeGeometry.js +2 -2
  270. package/src/geometries/PolyhedronGeometry.js +1 -1
  271. package/src/geometries/SphereGeometry.js +8 -3
  272. package/src/geometries/TorusGeometry.js +8 -3
  273. package/src/helpers/CameraHelper.js +3 -0
  274. package/src/helpers/DirectionalLightHelper.js +6 -1
  275. package/src/helpers/HemisphereLightHelper.js +5 -0
  276. package/src/helpers/PointLightHelper.js +3 -25
  277. package/src/helpers/SpotLightHelper.js +4 -1
  278. package/src/lights/DirectionalLight.js +13 -0
  279. package/src/lights/HemisphereLight.js +10 -0
  280. package/src/lights/Light.js +1 -11
  281. package/src/lights/LightProbe.js +0 -15
  282. package/src/lights/LightShadow.js +15 -6
  283. package/src/lights/PointLight.js +15 -0
  284. package/src/lights/PointLightShadow.js +0 -86
  285. package/src/lights/SpotLight.js +22 -1
  286. package/src/lights/webgpu/IESSpotLight.js +2 -1
  287. package/src/loaders/AudioLoader.js +11 -1
  288. package/src/loaders/Cache.js +28 -0
  289. package/src/loaders/DataTextureLoader.js +75 -42
  290. package/src/loaders/FileLoader.js +2 -3
  291. package/src/loaders/ImageBitmapLoader.js +12 -9
  292. package/src/loaders/Loader.js +6 -0
  293. package/src/loaders/LoadingManager.js +5 -0
  294. package/src/loaders/MaterialLoader.js +37 -266
  295. package/src/loaders/ObjectLoader.js +48 -6
  296. package/src/loaders/nodes/NodeLoader.js +2 -2
  297. package/src/loaders/nodes/NodeObjectLoader.js +18 -0
  298. package/src/materials/LineBasicMaterial.js +4 -0
  299. package/src/materials/Material.js +198 -1
  300. package/src/materials/MeshBasicMaterial.js +24 -0
  301. package/src/materials/MeshDepthMaterial.js +10 -0
  302. package/src/materials/MeshDistanceMaterial.js +10 -0
  303. package/src/materials/MeshLambertMaterial.js +49 -1
  304. package/src/materials/MeshMatcapMaterial.js +25 -1
  305. package/src/materials/MeshNormalMaterial.js +9 -1
  306. package/src/materials/MeshPhongMaterial.js +49 -1
  307. package/src/materials/MeshPhysicalMaterial.js +38 -0
  308. package/src/materials/MeshStandardMaterial.js +42 -1
  309. package/src/materials/MeshToonMaterial.js +35 -2
  310. package/src/materials/PointsMaterial.js +7 -0
  311. package/src/materials/ShaderMaterial.js +106 -1
  312. package/src/materials/SpriteMaterial.js +7 -0
  313. package/src/materials/nodes/Line2NodeMaterial.js +380 -297
  314. package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
  315. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  316. package/src/materials/nodes/MeshPhongNodeMaterial.js +0 -9
  317. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +3 -30
  318. package/src/materials/nodes/MeshSSSNodeMaterial.js +0 -13
  319. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -15
  320. package/src/materials/nodes/NodeMaterial.js +153 -89
  321. package/src/materials/nodes/SpriteNodeMaterial.js +0 -10
  322. package/src/materials/nodes/manager/NodeMaterialObserver.js +234 -100
  323. package/src/math/Box3.js +5 -0
  324. package/src/math/FrustumArray.js +103 -133
  325. package/src/math/Interpolant.js +1 -1
  326. package/src/math/Line3.js +6 -5
  327. package/src/math/MathUtils.js +12 -12
  328. package/src/math/Matrix2.js +13 -9
  329. package/src/math/Matrix3.js +24 -9
  330. package/src/math/Matrix4.js +112 -74
  331. package/src/math/Plane.js +4 -3
  332. package/src/math/Quaternion.js +3 -29
  333. package/src/math/Sphere.js +1 -1
  334. package/src/math/Triangle.js +1 -1
  335. package/src/math/Vector2.js +13 -9
  336. package/src/math/Vector3.js +17 -15
  337. package/src/math/Vector4.js +15 -11
  338. package/src/math/interpolants/BezierInterpolant.js +106 -0
  339. package/src/nodes/Nodes.js +86 -71
  340. package/src/nodes/TSL.js +15 -13
  341. package/src/nodes/accessors/Arrays.js +5 -5
  342. package/src/nodes/accessors/Batch.js +108 -0
  343. package/src/nodes/accessors/Bitangent.js +7 -7
  344. package/src/nodes/accessors/BufferAttributeNode.js +120 -17
  345. package/src/nodes/accessors/BufferNode.js +29 -2
  346. package/src/nodes/accessors/Camera.js +149 -28
  347. package/src/nodes/accessors/ClippingNode.js +5 -5
  348. package/src/nodes/accessors/CubeTextureNode.js +27 -2
  349. package/src/nodes/accessors/Instance.js +264 -0
  350. package/src/nodes/accessors/MaterialNode.js +27 -3
  351. package/src/nodes/accessors/MaterialProperties.js +6 -8
  352. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  353. package/src/nodes/accessors/ModelNode.js +1 -1
  354. package/src/nodes/accessors/{MorphNode.js → Morph.js} +99 -112
  355. package/src/nodes/accessors/Normal.js +24 -24
  356. package/src/nodes/accessors/Object3DNode.js +1 -1
  357. package/src/nodes/accessors/Position.js +39 -3
  358. package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
  359. package/src/nodes/accessors/ReferenceNode.js +9 -8
  360. package/src/nodes/accessors/ReflectVector.js +3 -3
  361. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  362. package/src/nodes/accessors/SceneProperties.js +47 -0
  363. package/src/nodes/accessors/Skinning.js +263 -0
  364. package/src/nodes/accessors/StorageBufferNode.js +16 -27
  365. package/src/nodes/accessors/StorageTexture3DNode.js +100 -0
  366. package/src/nodes/accessors/StorageTextureNode.js +74 -11
  367. package/src/nodes/accessors/Tangent.js +8 -18
  368. package/src/nodes/accessors/Texture3DNode.js +32 -35
  369. package/src/nodes/accessors/TextureNode.js +124 -25
  370. package/src/nodes/accessors/UniformArrayNode.js +6 -4
  371. package/src/nodes/accessors/UserDataNode.js +1 -2
  372. package/src/nodes/accessors/VertexColorNode.js +1 -2
  373. package/src/nodes/code/FunctionCallNode.js +1 -1
  374. package/src/nodes/code/FunctionNode.js +4 -19
  375. package/src/nodes/core/ArrayNode.js +21 -2
  376. package/src/nodes/core/AssignNode.js +3 -3
  377. package/src/nodes/core/AttributeNode.js +3 -3
  378. package/src/nodes/core/BypassNode.js +1 -1
  379. package/src/nodes/core/ContextNode.js +104 -5
  380. package/src/nodes/core/IndexNode.js +2 -1
  381. package/src/nodes/core/InputNode.js +1 -1
  382. package/src/nodes/core/InspectorNode.js +1 -1
  383. package/src/nodes/core/IsolateNode.js +1 -1
  384. package/src/nodes/core/MRTNode.js +55 -4
  385. package/src/nodes/core/Node.js +151 -17
  386. package/src/nodes/core/NodeBuilder.js +479 -101
  387. package/src/nodes/core/NodeError.js +28 -0
  388. package/src/nodes/core/NodeFrame.js +12 -4
  389. package/src/nodes/core/NodeUtils.js +20 -18
  390. package/src/nodes/core/OutputStructNode.js +13 -11
  391. package/src/nodes/core/OverrideContextNode.js +153 -0
  392. package/src/nodes/core/ParameterNode.js +4 -4
  393. package/src/nodes/core/PropertyNode.js +66 -4
  394. package/src/nodes/core/StackNode.js +91 -20
  395. package/src/nodes/core/StackTrace.js +139 -0
  396. package/src/nodes/core/StructNode.js +20 -8
  397. package/src/nodes/core/StructTypeNode.js +17 -23
  398. package/src/nodes/core/SubBuildNode.js +2 -2
  399. package/src/nodes/core/UniformGroupNode.js +36 -6
  400. package/src/nodes/core/UniformNode.js +21 -5
  401. package/src/nodes/core/VarNode.js +56 -23
  402. package/src/nodes/core/VaryingNode.js +14 -21
  403. package/src/nodes/display/BlendModes.js +1 -105
  404. package/src/nodes/display/BumpMapNode.js +6 -1
  405. package/src/nodes/display/ColorAdjustment.js +27 -9
  406. package/src/nodes/display/ColorSpaceNode.js +3 -3
  407. package/src/nodes/display/FrontFacingNode.js +38 -9
  408. package/src/nodes/display/NormalMapNode.js +41 -6
  409. package/src/nodes/display/PassNode.js +157 -56
  410. package/src/nodes/display/PremultiplyAlphaFunctions.js +39 -0
  411. package/src/nodes/display/RenderOutputNode.js +19 -10
  412. package/src/nodes/display/ScreenNode.js +4 -2
  413. package/src/nodes/display/ToneMappingNode.js +1 -1
  414. package/src/nodes/display/ToonOutlinePassNode.js +2 -2
  415. package/src/nodes/display/ViewportDepthNode.js +52 -4
  416. package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
  417. package/src/nodes/display/ViewportTextureNode.js +39 -11
  418. package/src/nodes/fog/Fog.js +18 -35
  419. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
  420. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  421. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  422. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  423. package/src/nodes/functions/PhysicalLightingModel.js +126 -45
  424. package/src/nodes/functions/VolumetricLightingModel.js +40 -7
  425. package/src/nodes/geometry/RangeNode.js +5 -3
  426. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  427. package/src/nodes/gpgpu/BarrierNode.js +9 -0
  428. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
  429. package/src/nodes/gpgpu/ComputeNode.js +74 -48
  430. package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
  431. package/src/nodes/gpgpu/WorkgroupInfoNode.js +5 -5
  432. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  433. package/src/nodes/lighting/EnvironmentNode.js +30 -5
  434. package/src/nodes/lighting/IESSpotLightNode.js +40 -2
  435. package/src/nodes/lighting/LightingContextNode.js +10 -2
  436. package/src/nodes/lighting/LightsNode.js +97 -65
  437. package/src/nodes/lighting/PointShadowNode.js +166 -148
  438. package/src/nodes/lighting/ShadowFilterNode.js +74 -117
  439. package/src/nodes/lighting/ShadowNode.js +149 -51
  440. package/src/nodes/materialx/lib/mx_noise.js +2 -2
  441. package/src/nodes/math/BitcastNode.js +1 -1
  442. package/src/nodes/math/BitcountNode.js +433 -0
  443. package/src/nodes/math/ConditionalNode.js +6 -6
  444. package/src/nodes/math/MathNode.js +115 -52
  445. package/src/nodes/math/OperatorNode.js +24 -23
  446. package/src/nodes/math/PackFloatNode.js +98 -0
  447. package/src/nodes/math/UnpackFloatNode.js +96 -0
  448. package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
  449. package/src/nodes/pmrem/PMREMNode.js +34 -3
  450. package/src/nodes/pmrem/PMREMUtils.js +9 -15
  451. package/src/nodes/tsl/TSLBase.js +1 -1
  452. package/src/nodes/tsl/TSLCore.js +99 -33
  453. package/src/nodes/utils/ArrayElementNode.js +14 -1
  454. package/src/nodes/utils/ConvertNode.js +1 -1
  455. package/src/nodes/utils/DebugNode.js +12 -12
  456. package/src/nodes/utils/EquirectUV.js +30 -5
  457. package/src/nodes/utils/EventNode.js +31 -2
  458. package/src/nodes/utils/FlipNode.js +1 -1
  459. package/src/nodes/utils/FunctionOverloadingNode.js +2 -2
  460. package/src/nodes/utils/JoinNode.js +3 -3
  461. package/src/nodes/utils/LoopNode.js +1 -1
  462. package/src/nodes/utils/MemberNode.js +2 -2
  463. package/src/nodes/utils/Packing.js +48 -5
  464. package/src/nodes/utils/PostProcessingUtils.js +33 -1
  465. package/src/nodes/utils/RTTNode.js +41 -25
  466. package/src/nodes/utils/ReflectorNode.js +4 -4
  467. package/src/nodes/utils/Remap.js +48 -0
  468. package/src/nodes/utils/RotateNode.js +1 -1
  469. package/src/nodes/utils/SampleNode.js +1 -1
  470. package/src/nodes/utils/SetNode.js +1 -1
  471. package/src/nodes/utils/SplitNode.js +1 -1
  472. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  473. package/src/nodes/utils/StorageArrayElementNode.js +1 -1
  474. package/src/nodes/utils/UVUtils.js +28 -0
  475. package/src/objects/BatchedMesh.js +66 -30
  476. package/src/objects/InstancedMesh.js +19 -3
  477. package/src/objects/Line.js +1 -1
  478. package/src/objects/Mesh.js +1 -1
  479. package/src/objects/Points.js +1 -1
  480. package/src/objects/SkinnedMesh.js +26 -9
  481. package/src/renderers/WebGLRenderer.js +344 -156
  482. package/src/renderers/common/Animation.js +3 -3
  483. package/src/renderers/common/Attributes.js +15 -1
  484. package/src/renderers/common/Backend.js +78 -13
  485. package/src/renderers/common/Background.js +26 -13
  486. package/src/renderers/common/BindGroup.js +1 -16
  487. package/src/renderers/common/Binding.js +11 -0
  488. package/src/renderers/common/Bindings.js +141 -57
  489. package/src/renderers/common/BlendMode.js +143 -0
  490. package/src/renderers/common/Buffer.js +49 -0
  491. package/src/renderers/common/BundleGroup.js +1 -1
  492. package/src/renderers/common/ChainMap.js +30 -6
  493. package/src/renderers/common/ClippingContext.js +10 -2
  494. package/src/renderers/common/ComputePipeline.js +1 -1
  495. package/src/renderers/common/CubeRenderTarget.js +51 -7
  496. package/src/renderers/common/Geometries.js +29 -3
  497. package/src/renderers/common/Info.js +374 -4
  498. package/src/renderers/common/InspectorBase.js +6 -1
  499. package/src/renderers/common/Lighting.js +51 -19
  500. package/src/renderers/common/Pipelines.js +40 -7
  501. package/src/renderers/common/PostProcessing.js +8 -206
  502. package/src/renderers/common/ReadbackBuffer.js +78 -0
  503. package/src/renderers/common/RenderBundle.js +3 -1
  504. package/src/renderers/common/RenderBundles.js +7 -3
  505. package/src/renderers/common/RenderContext.js +16 -0
  506. package/src/renderers/common/RenderContexts.js +33 -49
  507. package/src/renderers/common/RenderList.js +41 -4
  508. package/src/renderers/common/RenderLists.js +2 -1
  509. package/src/renderers/common/RenderObject.js +88 -16
  510. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  511. package/src/renderers/common/RenderObjects.js +21 -5
  512. package/src/renderers/common/RenderPipeline.js +232 -17
  513. package/src/renderers/common/Renderer.js +700 -163
  514. package/src/renderers/common/Sampler.js +16 -48
  515. package/src/renderers/common/StorageBuffer.js +13 -1
  516. package/src/renderers/common/Textures.js +121 -9
  517. package/src/renderers/common/TimestampQueryPool.js +6 -4
  518. package/src/renderers/common/Uniform.js +8 -0
  519. package/src/renderers/common/UniformsGroup.js +84 -1
  520. package/src/renderers/common/XRManager.js +377 -51
  521. package/src/renderers/common/extras/PMREMGenerator.js +40 -61
  522. package/src/renderers/common/nodes/NodeBuilderState.js +10 -2
  523. package/src/renderers/common/nodes/NodeLibrary.js +4 -4
  524. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +298 -106
  525. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  526. package/src/renderers/common/nodes/NodeUniformBuffer.js +65 -0
  527. package/src/renderers/shaders/DFGLUTData.js +19 -34
  528. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  529. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  530. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  531. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  532. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  533. package/src/renderers/shaders/ShaderChunk/common.glsl.js +13 -4
  534. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +0 -6
  535. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  536. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +9 -13
  537. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +2 -2
  538. package/src/renderers/shaders/ShaderChunk/envmap_vertex.glsl.js +1 -1
  539. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
  540. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
  541. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  542. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  543. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +3 -1
  544. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  545. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
  546. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -2
  547. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
  548. package/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js +6 -0
  549. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  550. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
  551. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
  552. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
  553. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  554. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +2 -2
  555. package/src/renderers/shaders/ShaderChunk.js +5 -3
  556. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
  557. package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
  558. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +2 -3
  559. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  560. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  561. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  562. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  563. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  564. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  565. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  566. package/src/renderers/shaders/ShaderLib.js +7 -6
  567. package/src/renderers/shaders/UniformsLib.js +7 -5
  568. package/src/renderers/shaders/UniformsUtils.js +27 -5
  569. package/src/renderers/webgl/WebGLAnimation.js +2 -1
  570. package/src/renderers/webgl/WebGLBackground.js +15 -15
  571. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  572. package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
  573. package/src/renderers/webgl/WebGLCapabilities.js +9 -4
  574. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  575. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  576. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
  577. package/src/renderers/webgl/WebGLLights.js +18 -1
  578. package/src/renderers/webgl/WebGLMaterials.js +24 -13
  579. package/src/renderers/webgl/WebGLObjects.js +3 -1
  580. package/src/renderers/webgl/WebGLOutput.js +271 -0
  581. package/src/renderers/webgl/WebGLProgram.js +54 -113
  582. package/src/renderers/webgl/WebGLPrograms.js +74 -55
  583. package/src/renderers/webgl/WebGLRenderLists.js +24 -1
  584. package/src/renderers/webgl/WebGLRenderStates.js +13 -2
  585. package/src/renderers/webgl/WebGLShaderCache.js +5 -11
  586. package/src/renderers/webgl/WebGLShadowMap.js +188 -24
  587. package/src/renderers/webgl/WebGLState.js +75 -37
  588. package/src/renderers/webgl/WebGLTextures.js +230 -56
  589. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  590. package/src/renderers/webgl/WebGLUniformsGroups.js +82 -35
  591. package/src/renderers/webgl/WebGLUtils.js +6 -2
  592. package/src/renderers/webgl-fallback/WebGLBackend.js +322 -92
  593. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
  594. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +295 -66
  595. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
  596. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
  597. package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
  598. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +118 -73
  599. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
  600. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +9 -3
  601. package/src/renderers/webgpu/WebGPUBackend.js +733 -302
  602. package/src/renderers/webgpu/WebGPURenderer.js +2 -1
  603. package/src/renderers/webgpu/descriptors/GPUBindGroupDescriptor.js +48 -0
  604. package/src/renderers/webgpu/descriptors/GPUBufferDescriptor.js +57 -0
  605. package/src/renderers/webgpu/descriptors/GPUCommandEncoderDescriptor.js +30 -0
  606. package/src/renderers/webgpu/descriptors/GPUComputePassDescriptor.js +38 -0
  607. package/src/renderers/webgpu/descriptors/GPUComputePipelineDescriptor.js +48 -0
  608. package/src/renderers/webgpu/descriptors/GPUCopyExternalImageDestInfo.js +47 -0
  609. package/src/renderers/webgpu/descriptors/GPUCopyExternalImageSourceInfo.js +50 -0
  610. package/src/renderers/webgpu/descriptors/GPUExtent3D.js +51 -0
  611. package/src/renderers/webgpu/descriptors/GPUPipelineLayoutDescriptor.js +39 -0
  612. package/src/renderers/webgpu/descriptors/GPUQuerySetDescriptor.js +47 -0
  613. package/src/renderers/webgpu/descriptors/GPURenderBundleEncoderDescriptor.js +74 -0
  614. package/src/renderers/webgpu/descriptors/GPURenderPassColorAttachment.js +72 -0
  615. package/src/renderers/webgpu/descriptors/GPURenderPassDepthStencilAttachment.js +99 -0
  616. package/src/renderers/webgpu/descriptors/GPURenderPassDescriptor.js +72 -0
  617. package/src/renderers/webgpu/descriptors/GPURenderPassTimestampWrites.js +49 -0
  618. package/src/renderers/webgpu/descriptors/GPURenderPipelineDescriptor.js +130 -0
  619. package/src/renderers/webgpu/descriptors/GPUSamplerDescriptor.js +119 -0
  620. package/src/renderers/webgpu/descriptors/GPUShaderModuleDescriptor.js +46 -0
  621. package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferInfo.js +57 -0
  622. package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferLayout.js +48 -0
  623. package/src/renderers/webgpu/descriptors/GPUTexelCopyTextureInfo.js +61 -0
  624. package/src/renderers/webgpu/descriptors/GPUTextureDescriptor.js +99 -0
  625. package/src/renderers/webgpu/descriptors/GPUTextureViewDescriptor.js +108 -0
  626. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +0 -1
  627. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +526 -93
  628. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +1 -1
  629. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +194 -61
  630. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +395 -234
  631. package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
  632. package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
  633. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +224 -91
  634. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +228 -213
  635. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +428 -175
  636. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +40 -25
  637. package/src/renderers/webgpu/utils/WebGPUUtils.js +70 -13
  638. package/src/renderers/webxr/WebXRController.js +12 -0
  639. package/src/renderers/webxr/WebXRManager.js +4 -2
  640. package/src/textures/CubeDepthTexture.js +76 -0
  641. package/src/textures/DepthTexture.js +1 -1
  642. package/src/textures/ExternalTexture.js +0 -3
  643. package/src/textures/HTMLTexture.js +74 -0
  644. package/src/textures/Source.js +2 -2
  645. package/src/textures/Texture.js +16 -5
  646. package/src/utils.js +280 -3
  647. package/examples/fonts/LICENSE +0 -13
  648. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  649. package/examples/fonts/MPLUSRounded1c/OFL.txt +0 -91
  650. package/examples/fonts/README.md +0 -11
  651. package/examples/fonts/droid/NOTICE +0 -190
  652. package/examples/fonts/droid/README.txt +0 -18
  653. package/examples/fonts/droid/droid_sans_bold.typeface.json +0 -1
  654. package/examples/fonts/droid/droid_sans_mono_regular.typeface.json +0 -1
  655. package/examples/fonts/droid/droid_sans_regular.typeface.json +0 -1
  656. package/examples/fonts/droid/droid_serif_bold.typeface.json +0 -1
  657. package/examples/fonts/droid/droid_serif_regular.typeface.json +0 -1
  658. package/examples/fonts/gentilis_bold.typeface.json +0 -1
  659. package/examples/fonts/gentilis_regular.typeface.json +0 -1
  660. package/examples/fonts/helvetiker_bold.typeface.json +0 -1
  661. package/examples/fonts/helvetiker_regular.typeface.json +0 -1
  662. package/examples/fonts/optimer_bold.typeface.json +0 -1
  663. package/examples/fonts/optimer_regular.typeface.json +0 -1
  664. package/examples/fonts/ttf/README.md +0 -9
  665. package/examples/fonts/ttf/kenpixel.ttf +0 -0
  666. package/examples/jsm/libs/ammo.wasm.js +0 -822
  667. package/examples/jsm/libs/ammo.wasm.wasm +0 -0
  668. package/examples/jsm/libs/draco/draco_encoder.js +0 -33
  669. package/examples/jsm/libs/draco/gltf/draco_encoder.js +0 -33
  670. package/examples/jsm/libs/lottie_canvas.module.js +0 -14849
  671. package/examples/jsm/libs/opentype.module.js +0 -14506
  672. package/examples/jsm/libs/rhino3dm/rhino3dm.js +0 -21
  673. package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +0 -16
  674. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  675. package/examples/jsm/lighting/TiledLighting.js +0 -42
  676. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  677. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  678. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  679. package/examples/jsm/tsl/display/AnamorphicNode.js +0 -282
  680. package/examples/jsm/tsl/lighting/TiledLightsNode.js +0 -442
  681. package/src/nodes/accessors/BatchNode.js +0 -163
  682. package/src/nodes/accessors/InstanceNode.js +0 -244
  683. package/src/nodes/accessors/InstancedMeshNode.js +0 -50
  684. package/src/nodes/accessors/SceneNode.js +0 -145
  685. package/src/nodes/accessors/SkinningNode.js +0 -327
  686. package/src/nodes/code/ScriptableNode.js +0 -726
  687. package/src/nodes/code/ScriptableValueNode.js +0 -253
  688. package/src/nodes/display/PosterizeNode.js +0 -65
  689. package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
  690. package/src/nodes/utils/RemapNode.js +0 -125
  691. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  692. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  693. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -11,8 +11,8 @@ import WebGLCapabilities from './utils/WebGLCapabilities.js';
11
11
  import { GLFeatureName } from './utils/WebGLConstants.js';
12
12
  import { WebGLBufferRenderer } from './WebGLBufferRenderer.js';
13
13
 
14
- import { warnOnce, warn, error } from '../../utils.js';
15
- import { WebGLCoordinateSystem, TimestampQuery } from '../../constants.js';
14
+ import { isTypedArray, warnOnce, warn, error } from '../../utils.js';
15
+ import { WebGLCoordinateSystem, TimestampQuery, Compatibility } from '../../constants.js';
16
16
  import WebGLTimestampQueryPool from './utils/WebGLTimestampQueryPool.js';
17
17
 
18
18
  /**
@@ -28,6 +28,7 @@ class WebGLBackend extends Backend {
28
28
  *
29
29
  * @typedef {Object} WebGLBackend~Options
30
30
  * @property {boolean} [logarithmicDepthBuffer=false] - Whether logarithmic depth buffer is enabled or not.
31
+ * @property {boolean} [reversedDepthBuffer=false] - Whether reversed depth buffer is enabled or not.
31
32
  * @property {boolean} [alpha=true] - Whether the default framebuffer (which represents the final contents of the canvas) should be transparent or opaque.
32
33
  * @property {boolean} [depth=true] - Whether the default framebuffer should have a depth buffer or not.
33
34
  * @property {boolean} [stencil=false] - Whether the default framebuffer should have a stencil buffer or not.
@@ -184,7 +185,6 @@ class WebGLBackend extends Backend {
184
185
  */
185
186
  this._knownBindings = new WeakSet();
186
187
 
187
-
188
188
  /**
189
189
  * Whether the device supports framebuffers invalidation or not.
190
190
  *
@@ -265,9 +265,33 @@ class WebGLBackend extends Backend {
265
265
  this.extensions.get( 'WEBGL_render_shared_exponent' );
266
266
  this.extensions.get( 'WEBGL_multi_draw' );
267
267
  this.extensions.get( 'OVR_multiview2' );
268
+ this.extensions.get( 'EXT_clip_control' );
268
269
 
269
270
  this.disjoint = this.extensions.get( 'EXT_disjoint_timer_query_webgl2' );
270
271
  this.parallel = this.extensions.get( 'KHR_parallel_shader_compile' );
272
+ this.drawBuffersIndexedExt = this.extensions.get( 'OES_draw_buffers_indexed' );
273
+
274
+ if ( parameters.reversedDepthBuffer ) {
275
+
276
+ if ( this.extensions.has( 'EXT_clip_control' ) ) {
277
+
278
+ renderer.reversedDepthBuffer = true;
279
+
280
+ } else {
281
+
282
+ warn( 'WebGPURenderer: Unable to use reversed depth buffer due to missing EXT_clip_control extension. Fallback to default depth buffer.' );
283
+
284
+ renderer.reversedDepthBuffer = false;
285
+
286
+ }
287
+
288
+ }
289
+
290
+ if ( renderer.reversedDepthBuffer ) {
291
+
292
+ this.state.setReversedDepth( true );
293
+
294
+ }
271
295
 
272
296
  }
273
297
 
@@ -283,17 +307,34 @@ class WebGLBackend extends Backend {
283
307
 
284
308
  }
285
309
 
310
+ /**
311
+ * Whether the backend supports query timestamps or not.
312
+ *
313
+ * @type {boolean}
314
+ * @readonly
315
+ */
316
+ get hasTimestamp() {
317
+
318
+ return this.disjoint !== null;
319
+
320
+ }
321
+
286
322
  /**
287
323
  * This method performs a readback operation by moving buffer data from
288
- * a storage buffer attribute from the GPU to the CPU.
324
+ * a storage buffer attribute from the GPU to the CPU. ReadbackBuffer can
325
+ * be used to retain and reuse handles to the intermediate buffers and prevent
326
+ * new allocation.
289
327
  *
290
328
  * @async
291
- * @param {StorageBufferAttribute} attribute - The storage buffer attribute.
292
- * @return {Promise<ArrayBuffer>} A promise that resolves with the buffer data when the data are ready.
329
+ * @param {BufferAttribute} attribute - The storage buffer attribute to read frm.
330
+ * @param {ReadbackBuffer|ArrayBuffer} target - The storage buffer attribute.
331
+ * @param {number} offset - The storage buffer attribute.
332
+ * @param {number} count - The offset from which to start reading the
333
+ * @return {Promise<ArrayBuffer|ReadbackBuffer>} A promise that resolves with the buffer data when the data are ready.
293
334
  */
294
- async getArrayBufferAsync( attribute ) {
335
+ async getArrayBufferAsync( attribute, target = null, offset = 0, count = - 1 ) {
295
336
 
296
- return await this.attributeUtils.getArrayBufferAsync( attribute );
337
+ return await this.attributeUtils.getArrayBufferAsync( attribute, target, offset, count );
297
338
 
298
339
  }
299
340
 
@@ -445,9 +486,12 @@ class WebGLBackend extends Backend {
445
486
 
446
487
  if ( renderContext.scissor ) {
447
488
 
448
- const { x, y, width, height } = renderContext.scissorValue;
489
+ this.updateScissor( renderContext );
490
+
491
+ } else {
449
492
 
450
- state.scissor( x, renderContext.height - height - y, width, height );
493
+ const { width, height } = this.getDrawingBufferSize();
494
+ state.scissor( 0, 0, width, height );
451
495
 
452
496
  }
453
497
 
@@ -544,6 +588,17 @@ class WebGLBackend extends Backend {
544
588
 
545
589
  }
546
590
 
591
+ if ( previousContext.scissor ) {
592
+
593
+ this.updateScissor( previousContext );
594
+
595
+ } else {
596
+
597
+ const { width, height } = this.getDrawingBufferSize();
598
+ state.scissor( 0, 0, width, height );
599
+
600
+ }
601
+
547
602
  }
548
603
 
549
604
  this.prepareTimestampBuffer( TimestampQuery.RENDER, this.getTimestampUID( renderContext ) );
@@ -645,6 +700,20 @@ class WebGLBackend extends Backend {
645
700
 
646
701
  }
647
702
 
703
+ /**
704
+ * Updates the scissor with the values from the given render context.
705
+ *
706
+ * @param {RenderContext} renderContext - The render context.
707
+ */
708
+ updateScissor( renderContext ) {
709
+
710
+ const { state } = this;
711
+ const { x, y, width, height } = renderContext.scissorValue;
712
+
713
+ state.scissor( x, renderContext.height - height - y, width, height );
714
+
715
+ }
716
+
648
717
  /**
649
718
  * Defines the scissor test.
650
719
  *
@@ -775,6 +844,14 @@ class WebGLBackend extends Backend {
775
844
 
776
845
  if ( setFrameBuffer && resolveRenderTarget ) this._resolveRenderTarget( descriptor );
777
846
 
847
+ // Restore the framebuffer of the active render pass when clearing an unrelated
848
+ // render target, so subsequent draws in the pass don't bind to the cleared target.
849
+ if ( setFrameBuffer && this._currentContext !== null && this._currentContext !== descriptor ) {
850
+
851
+ this._setFramebuffer( this._currentContext );
852
+
853
+ }
854
+
778
855
  }
779
856
 
780
857
  }
@@ -814,7 +891,7 @@ class WebGLBackend extends Backend {
814
891
  if ( this.discard === false ) {
815
892
 
816
893
  // required here to handle async behaviour of render.compute()
817
- gl.enable( gl.RASTERIZER_DISCARD );
894
+ state.enable( gl.RASTERIZER_DISCARD );
818
895
  this.discard = true;
819
896
 
820
897
  }
@@ -900,11 +977,11 @@ class WebGLBackend extends Backend {
900
977
  */
901
978
  finishCompute( computeGroup ) {
902
979
 
903
- const gl = this.gl;
980
+ const { state, gl } = this;
904
981
 
905
982
  this.discard = false;
906
983
 
907
- gl.disable( gl.RASTERIZER_DISCARD );
984
+ state.disable( gl.RASTERIZER_DISCARD );
908
985
 
909
986
  this.prepareTimestampBuffer( TimestampQuery.COMPUTE, this.getTimestampUID( computeGroup ) );
910
987
 
@@ -930,6 +1007,56 @@ class WebGLBackend extends Backend {
930
1007
 
931
1008
  }
932
1009
 
1010
+ /**
1011
+ * Internal draw function.
1012
+ *
1013
+ * @private
1014
+ * @param {Object3D} object - The object to render.
1015
+ * @param {WebGLBufferRenderer} renderer - The internal renderer.
1016
+ * @param {number} firstVertex - The first vertex to render.
1017
+ * @param {number} vertexCount - The vertex count.
1018
+ * @param {number} instanceCount - The intance count.
1019
+ * @param {WebGLProgram} programGPU - The raw WebGL shader program.
1020
+ */
1021
+ _draw( object, renderer, firstVertex, vertexCount, instanceCount, programGPU ) {
1022
+
1023
+ if ( object.isBatchedMesh ) {
1024
+
1025
+ if ( this.hasFeature( 'WEBGL_multi_draw' ) === false ) {
1026
+
1027
+ const { gl } = this;
1028
+
1029
+ const drawIdLocation = gl.getUniformLocation( programGPU, 'nodeUniformDrawId' );
1030
+
1031
+ const starts = object._multiDrawStarts;
1032
+ const counts = object._multiDrawCounts;
1033
+ const drawCount = object._multiDrawCount;
1034
+
1035
+ for ( let i = 0; i < drawCount; i ++ ) {
1036
+
1037
+ gl.uniform1ui( drawIdLocation, i );
1038
+ renderer.render( starts[ i ], counts[ i ] );
1039
+
1040
+ }
1041
+
1042
+ } else {
1043
+
1044
+ renderer.renderMultiDraw( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount );
1045
+
1046
+ }
1047
+
1048
+ } else if ( instanceCount > 1 ) {
1049
+
1050
+ renderer.renderInstances( firstVertex, vertexCount, instanceCount );
1051
+
1052
+ } else {
1053
+
1054
+ renderer.render( firstVertex, vertexCount );
1055
+
1056
+ }
1057
+
1058
+ }
1059
+
933
1060
  /**
934
1061
  * Executes a draw command for the given render object.
935
1062
  *
@@ -953,10 +1080,16 @@ class WebGLBackend extends Backend {
953
1080
 
954
1081
  this._bindUniforms( renderObject.getBindings() );
955
1082
 
956
- const frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );
1083
+ const frontFaceCW = ( object.isMesh && object.matrixWorld.determinantAffine() < 0 );
957
1084
 
958
1085
  state.setMaterial( material, frontFaceCW, hardwareClippingPlanes );
959
1086
 
1087
+ if ( context.mrt !== null && context.textures !== null ) {
1088
+
1089
+ state.setMRTBlending( context.textures, context.mrt, material );
1090
+
1091
+ }
1092
+
960
1093
  state.useProgram( programGPU );
961
1094
 
962
1095
  // vertex state
@@ -1061,38 +1194,6 @@ class WebGLBackend extends Backend {
1061
1194
 
1062
1195
  }
1063
1196
 
1064
- const draw = () => {
1065
-
1066
- if ( object.isBatchedMesh ) {
1067
-
1068
- if ( object._multiDrawInstances !== null ) {
1069
-
1070
- // @deprecated, r174
1071
- warnOnce( 'WebGLBackend: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection.' );
1072
- renderer.renderMultiDrawInstances( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount, object._multiDrawInstances );
1073
-
1074
- } else if ( ! this.hasFeature( 'WEBGL_multi_draw' ) ) {
1075
-
1076
- warnOnce( 'WebGLBackend: WEBGL_multi_draw not supported.' );
1077
-
1078
- } else {
1079
-
1080
- renderer.renderMultiDraw( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount );
1081
-
1082
- }
1083
-
1084
- } else if ( instanceCount > 1 ) {
1085
-
1086
- renderer.renderInstances( firstVertex, vertexCount, instanceCount );
1087
-
1088
- } else {
1089
-
1090
- renderer.render( firstVertex, vertexCount );
1091
-
1092
- }
1093
-
1094
- };
1095
-
1096
1197
  if ( renderObject.camera.isArrayCamera === true && renderObject.camera.cameras.length > 0 && renderObject.camera.isMultiViewCamera === false ) {
1097
1198
 
1098
1199
  const cameraData = this.get( renderObject.camera );
@@ -1121,7 +1222,20 @@ class WebGLBackend extends Backend {
1121
1222
 
1122
1223
  }
1123
1224
 
1124
- const cameraIndexData = this.get( cameraIndex );
1225
+ let cameraIndexBufferIndex = 0;
1226
+
1227
+ bindingsSearch: for ( const bindGroup of renderObject.getBindings() ) {
1228
+
1229
+ for ( const binding of bindGroup.bindings ) {
1230
+
1231
+ if ( binding === cameraIndex ) break bindingsSearch;
1232
+
1233
+ if ( binding.isUniformsGroup || binding.isUniformBuffer ) cameraIndexBufferIndex ++;
1234
+
1235
+ }
1236
+
1237
+ }
1238
+
1125
1239
  const pixelRatio = this.renderer.getPixelRatio();
1126
1240
 
1127
1241
  const renderTarget = this._currentContext.renderTarget;
@@ -1190,9 +1304,9 @@ class WebGLBackend extends Backend {
1190
1304
 
1191
1305
  }
1192
1306
 
1193
- state.bindBufferBase( gl.UNIFORM_BUFFER, cameraIndexData.index, cameraData.indexesGPU[ i ] );
1307
+ state.bindBufferBase( gl.UNIFORM_BUFFER, cameraIndexBufferIndex, cameraData.indexesGPU[ i ] );
1194
1308
 
1195
- draw();
1309
+ this._draw( object, renderer, firstVertex, vertexCount, instanceCount, programGPU );
1196
1310
 
1197
1311
  }
1198
1312
 
@@ -1203,7 +1317,7 @@ class WebGLBackend extends Backend {
1203
1317
 
1204
1318
  } else {
1205
1319
 
1206
- draw();
1320
+ this._draw( object, renderer, firstVertex, vertexCount, instanceCount, programGPU );
1207
1321
 
1208
1322
  }
1209
1323
 
@@ -1315,10 +1429,10 @@ class WebGLBackend extends Backend {
1315
1429
  /**
1316
1430
  * This method does nothing since WebGL 2 has no concept of samplers.
1317
1431
  *
1318
- * @param {Texture} texture - The texture to update the sampler for.
1432
+ * @param {Sampler} binding - The sampler binding to update.
1319
1433
  * @return {string} The current sampler key.
1320
1434
  */
1321
- updateSampler( /*texture*/ ) {
1435
+ updateSampler( /*binding*/ ) {
1322
1436
 
1323
1437
  return '';
1324
1438
 
@@ -1527,7 +1641,7 @@ class WebGLBackend extends Backend {
1527
1641
  const fragmentErrors = this._getShaderErrors( gl, glFragmentShader, 'fragment' );
1528
1642
 
1529
1643
  error(
1530
- 'THREE.WebGLProgram: Shader Error ' + gl.getError() + ' - ' +
1644
+ 'WebGLProgram: Shader Error ' + gl.getError() + ' - ' +
1531
1645
  'VALIDATE_STATUS ' + gl.getProgramParameter( programGPU, gl.VALIDATE_STATUS ) + '\n\n' +
1532
1646
  'Program Info Log: ' + programLog + '\n' +
1533
1647
  vertexErrors + '\n' +
@@ -1576,7 +1690,8 @@ class WebGLBackend extends Backend {
1576
1690
  //
1577
1691
 
1578
1692
  this.set( pipeline, {
1579
- programGPU
1693
+ programGPU,
1694
+ pipeline: programGPU
1580
1695
  } );
1581
1696
 
1582
1697
  }
@@ -1732,41 +1847,46 @@ class WebGLBackend extends Backend {
1732
1847
 
1733
1848
  const { gl } = this;
1734
1849
 
1735
- const bindGroupData = this.get( bindGroup );
1736
-
1737
- let i = bindGroupData.uniformBuffers;
1738
- let t = bindGroupData.textures;
1739
-
1740
1850
  for ( const binding of bindGroup.bindings ) {
1741
1851
 
1742
1852
  const map = this.get( binding );
1743
1853
 
1744
1854
  if ( binding.isUniformsGroup || binding.isUniformBuffer ) {
1745
1855
 
1746
- const data = binding.buffer;
1747
- let { bufferGPU } = this.get( data );
1856
+ const array = binding.buffer;
1857
+ const bufferGPU = map.bufferGPU;
1748
1858
 
1749
- if ( bufferGPU === undefined ) {
1859
+ gl.bindBuffer( gl.UNIFORM_BUFFER, bufferGPU );
1750
1860
 
1751
- // create
1861
+ // update
1752
1862
 
1753
- bufferGPU = gl.createBuffer();
1754
- gl.bindBuffer( gl.UNIFORM_BUFFER, bufferGPU );
1755
- gl.bufferData( gl.UNIFORM_BUFFER, data, gl.DYNAMIC_DRAW );
1863
+ const updateRanges = binding.updateRanges;
1756
1864
 
1757
- this.set( data, { bufferGPU } );
1865
+ gl.bindBuffer( gl.UNIFORM_BUFFER, bufferGPU );
1866
+
1867
+ if ( updateRanges.length === 0 ) {
1868
+
1869
+ gl.bufferData( gl.UNIFORM_BUFFER, array, gl.DYNAMIC_DRAW );
1758
1870
 
1759
1871
  } else {
1760
1872
 
1761
- // update
1873
+ const isTyped = isTypedArray( array );
1874
+ const byteOffsetFactor = isTyped ? 1 : array.BYTES_PER_ELEMENT;
1762
1875
 
1763
- gl.bindBuffer( gl.UNIFORM_BUFFER, bufferGPU );
1764
- gl.bufferSubData( gl.UNIFORM_BUFFER, 0, data );
1876
+ for ( let i = 0, l = updateRanges.length; i < l; i ++ ) {
1765
1877
 
1766
- }
1878
+ const range = updateRanges[ i ];
1767
1879
 
1768
- map.index = i ++;
1769
- map.bufferGPU = bufferGPU;
1880
+ const dataOffset = range.start * byteOffsetFactor;
1881
+ const size = range.count * byteOffsetFactor;
1882
+
1883
+ const bufferOffset = dataOffset * ( isTyped ? array.BYTES_PER_ELEMENT : 1 ); // bufferOffset is always in bytes
1884
+
1885
+ gl.bufferSubData( gl.UNIFORM_BUFFER, bufferOffset, array, dataOffset, size );
1886
+
1887
+ }
1888
+
1889
+ }
1770
1890
 
1771
1891
  this.set( binding, map );
1772
1892
 
@@ -1774,7 +1894,6 @@ class WebGLBackend extends Backend {
1774
1894
 
1775
1895
  const { textureGPU, glTextureType } = this.get( binding.texture );
1776
1896
 
1777
- map.index = t ++;
1778
1897
  map.textureGPU = textureGPU;
1779
1898
  map.glTextureType = glTextureType;
1780
1899
 
@@ -1799,10 +1918,53 @@ class WebGLBackend extends Backend {
1799
1918
 
1800
1919
  const bindingData = this.get( binding );
1801
1920
  const bufferGPU = bindingData.bufferGPU;
1802
- const data = binding.buffer;
1921
+ const array = binding.buffer;
1922
+
1923
+ const updateRanges = binding.updateRanges;
1803
1924
 
1804
1925
  gl.bindBuffer( gl.UNIFORM_BUFFER, bufferGPU );
1805
- gl.bufferData( gl.UNIFORM_BUFFER, data, gl.DYNAMIC_DRAW );
1926
+
1927
+ if ( updateRanges.length === 0 ) {
1928
+
1929
+ gl.bufferData( gl.UNIFORM_BUFFER, array, gl.DYNAMIC_DRAW );
1930
+
1931
+ } else {
1932
+
1933
+ const isTyped = isTypedArray( array );
1934
+ const byteOffsetFactor = isTyped ? 1 : array.BYTES_PER_ELEMENT;
1935
+
1936
+ // Update ranges arrive sorted and non-overlapping which makes
1937
+ // it easy to merge contiguous ranges.
1938
+
1939
+ let start = updateRanges[ 0 ].start; // start of the current merged range
1940
+
1941
+ for ( let i = 0, l = updateRanges.length; i < l; i ++ ) {
1942
+
1943
+ const range = updateRanges[ i ];
1944
+ const next = updateRanges[ i + 1 ];
1945
+
1946
+ const end = range.start + range.count; // exclusive end of the current range
1947
+
1948
+ // keep merging while the next range is contiguous
1949
+
1950
+ if ( next !== undefined && next.start === end ) continue;
1951
+
1952
+ // write the merged range
1953
+
1954
+ const dataOffset = start * byteOffsetFactor;
1955
+ const size = ( end - start ) * byteOffsetFactor;
1956
+
1957
+ const bufferOffset = dataOffset * ( isTyped ? array.BYTES_PER_ELEMENT : 1 ); // bufferOffset is always in bytes
1958
+
1959
+ gl.bufferSubData( gl.UNIFORM_BUFFER, bufferOffset, array, dataOffset, size );
1960
+
1961
+ // start next if possible
1962
+
1963
+ if ( next !== undefined ) start = next.start;
1964
+
1965
+ }
1966
+
1967
+ }
1806
1968
 
1807
1969
  }
1808
1970
 
@@ -1810,6 +1972,44 @@ class WebGLBackend extends Backend {
1810
1972
 
1811
1973
  // attributes
1812
1974
 
1975
+ /**
1976
+ * Creates a uniform buffer.
1977
+ *
1978
+ * @param {Buffer} uniformBuffer - The uniform buffer.
1979
+ */
1980
+ createUniformBuffer( uniformBuffer ) {
1981
+
1982
+ const uniformBufferData = this.get( uniformBuffer );
1983
+
1984
+ if ( uniformBufferData.bufferGPU === undefined ) {
1985
+
1986
+ const gl = this.gl;
1987
+ const array = uniformBuffer.buffer;
1988
+
1989
+ uniformBufferData.bufferGPU = gl.createBuffer();
1990
+
1991
+ gl.bindBuffer( gl.UNIFORM_BUFFER, uniformBufferData.bufferGPU );
1992
+ gl.bufferData( gl.UNIFORM_BUFFER, array.byteLength, gl.DYNAMIC_DRAW );
1993
+
1994
+ }
1995
+
1996
+ }
1997
+
1998
+ /**
1999
+ * Destroys the GPU data for the given uniform buffer.
2000
+ *
2001
+ * @param {Buffer} uniformBuffer - The uniform buffer.
2002
+ */
2003
+ destroyUniformBuffer( uniformBuffer ) {
2004
+
2005
+ const uniformBufferData = this.get( uniformBuffer );
2006
+
2007
+ this.gl.deleteBuffer( uniformBufferData.bufferGPU );
2008
+
2009
+ this.delete( uniformBuffer );
2010
+
2011
+ }
2012
+
1813
2013
  /**
1814
2014
  * Creates the GPU buffer of an indexed shader attribute.
1815
2015
  *
@@ -1897,17 +2097,6 @@ class WebGLBackend extends Backend {
1897
2097
 
1898
2098
  }
1899
2099
 
1900
- /**
1901
- * Returns the maximum anisotropy texture filtering value.
1902
- *
1903
- * @return {number} The maximum anisotropy texture filtering value.
1904
- */
1905
- getMaxAnisotropy() {
1906
-
1907
- return this.capabilities.getMaxAnisotropy();
1908
-
1909
- }
1910
-
1911
2100
  /**
1912
2101
  * Copies data of the given source texture to the given destination texture.
1913
2102
  *
@@ -1937,6 +2126,35 @@ class WebGLBackend extends Backend {
1937
2126
 
1938
2127
  }
1939
2128
 
2129
+ /**
2130
+ * Checks if the given compatibility is supported by the backend.
2131
+ *
2132
+ * @param {string} name - The compatibility name.
2133
+ * @return {boolean} Whether the compatibility is supported or not.
2134
+ */
2135
+ hasCompatibility( name ) {
2136
+
2137
+ if ( name === Compatibility.TEXTURE_COMPARE ) return true;
2138
+
2139
+ return super.hasCompatibility( name );
2140
+
2141
+ }
2142
+
2143
+ /**
2144
+ * Initializes the render target defined in the given render context.
2145
+ *
2146
+ * @param {RenderContext} renderContext - The render context.
2147
+ */
2148
+ initRenderTarget( renderContext ) {
2149
+
2150
+ const { gl, state } = this;
2151
+
2152
+ this._setFramebuffer( renderContext );
2153
+
2154
+ state.bindFramebuffer( gl.FRAMEBUFFER, null );
2155
+
2156
+ }
2157
+
1940
2158
  /**
1941
2159
  * Configures the active framebuffer from the given render context.
1942
2160
  *
@@ -1955,7 +2173,7 @@ class WebGLBackend extends Backend {
1955
2173
  const renderTargetContextData = this.get( renderTarget );
1956
2174
  const { samples, depthBuffer, stencilBuffer } = renderTarget;
1957
2175
 
1958
- const isCube = renderTarget.isWebGLCubeRenderTarget === true;
2176
+ const isCube = renderTarget.isCubeRenderTarget === true;
1959
2177
  const isRenderTarget3D = renderTarget.isRenderTarget3D === true;
1960
2178
  const isRenderTargetArray = renderTarget.depth > 1;
1961
2179
  const isXRRenderTarget = renderTarget.isXRRenderTarget === true;
@@ -2091,6 +2309,12 @@ class WebGLBackend extends Backend {
2091
2309
 
2092
2310
  gl.framebufferTextureLayer( gl.FRAMEBUFFER, depthStyle, textureData.textureGPU, 0, layer );
2093
2311
 
2312
+ } else if ( descriptor.depthTexture.isCubeTexture ) {
2313
+
2314
+ const cubeFace = this.renderer._activeCubeFace;
2315
+
2316
+ gl.framebufferTexture2D( gl.FRAMEBUFFER, depthStyle, gl.TEXTURE_CUBE_MAP_POSITIVE_X + cubeFace, textureData.textureGPU, 0 );
2317
+
2094
2318
  } else {
2095
2319
 
2096
2320
  gl.framebufferTexture2D( gl.FRAMEBUFFER, depthStyle, gl.TEXTURE_2D, textureData.textureGPU, 0 );
@@ -2400,20 +2624,22 @@ class WebGLBackend extends Backend {
2400
2624
 
2401
2625
  const gl = this.gl;
2402
2626
 
2627
+ let uniformBuffers = 0;
2628
+ let textures = 0;
2629
+
2403
2630
  for ( const bindGroup of bindings ) {
2404
2631
 
2405
2632
  for ( const binding of bindGroup.bindings ) {
2406
2633
 
2407
- const bindingData = this.get( binding );
2408
- const index = bindingData.index;
2409
-
2410
2634
  if ( binding.isUniformsGroup || binding.isUniformBuffer ) {
2411
2635
 
2636
+ const index = uniformBuffers ++;
2412
2637
  const location = gl.getUniformBlockIndex( programGPU, binding.name );
2413
2638
  gl.uniformBlockBinding( programGPU, location, index );
2414
2639
 
2415
2640
  } else if ( binding.isSampledTexture ) {
2416
2641
 
2642
+ const index = textures ++;
2417
2643
  const location = gl.getUniformLocation( programGPU, binding.name );
2418
2644
  gl.uniform1i( location, index );
2419
2645
 
@@ -2435,20 +2661,24 @@ class WebGLBackend extends Backend {
2435
2661
 
2436
2662
  const { gl, state } = this;
2437
2663
 
2664
+ let uniformBuffers = 0;
2665
+ let textures = 0;
2666
+
2438
2667
  for ( const bindGroup of bindings ) {
2439
2668
 
2440
2669
  for ( const binding of bindGroup.bindings ) {
2441
2670
 
2442
2671
  const bindingData = this.get( binding );
2443
- const index = bindingData.index;
2444
2672
 
2445
2673
  if ( binding.isUniformsGroup || binding.isUniformBuffer ) {
2446
2674
 
2675
+ const index = uniformBuffers ++;
2447
2676
  // TODO USE bindBufferRange to group multiple uniform buffers
2448
2677
  state.bindBufferBase( gl.UNIFORM_BUFFER, index, bindingData.bufferGPU );
2449
2678
 
2450
2679
  } else if ( binding.isSampledTexture ) {
2451
2680
 
2681
+ const index = textures ++;
2452
2682
  state.bindTexture( bindingData.glTextureType, bindingData.textureGPU, gl.TEXTURE0 + index );
2453
2683
 
2454
2684
  }