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
@@ -8,7 +8,6 @@ import {
8
8
  NoToneMapping,
9
9
  LinearMipmapLinearFilter,
10
10
  SRGBColorSpace,
11
- LinearSRGBColorSpace,
12
11
  RGBAIntegerFormat,
13
12
  RGIntegerFormat,
14
13
  RedIntegerFormat,
@@ -31,8 +30,7 @@ import { WebGLBindingStates } from './webgl/WebGLBindingStates.js';
31
30
  import { WebGLBufferRenderer } from './webgl/WebGLBufferRenderer.js';
32
31
  import { WebGLCapabilities } from './webgl/WebGLCapabilities.js';
33
32
  import { WebGLClipping } from './webgl/WebGLClipping.js';
34
- import { WebGLCubeMaps } from './webgl/WebGLCubeMaps.js';
35
- import { WebGLCubeUVMaps } from './webgl/WebGLCubeUVMaps.js';
33
+ import { WebGLEnvironments } from './webgl/WebGLEnvironments.js';
36
34
  import { WebGLExtensions } from './webgl/WebGLExtensions.js';
37
35
  import { WebGLGeometries } from './webgl/WebGLGeometries.js';
38
36
  import { WebGLIndexedBufferRenderer } from './webgl/WebGLIndexedBufferRenderer.js';
@@ -40,6 +38,7 @@ import { WebGLInfo } from './webgl/WebGLInfo.js';
40
38
  import { WebGLMorphtargets } from './webgl/WebGLMorphtargets.js';
41
39
  import { WebGLMultiview } from './webgl/WebGLMultiview.js';
42
40
  import { WebGLObjects } from './webgl/WebGLObjects.js';
41
+ import { WebGLOutput } from './webgl/WebGLOutput.js';
43
42
  import { WebGLPrograms } from './webgl/WebGLPrograms.js';
44
43
  import { WebGLProperties } from './webgl/WebGLProperties.js';
45
44
  import { WebGLRenderLists } from './webgl/WebGLRenderLists.js';
@@ -53,7 +52,7 @@ import { WebGLUtils } from './webgl/WebGLUtils.js';
53
52
  import { WebXRManager } from './webxr/WebXRManager.js';
54
53
  import { WebGLMaterials } from './webgl/WebGLMaterials.js';
55
54
  import { WebGLUniformsGroups } from './webgl/WebGLUniformsGroups.js';
56
- import { createCanvasElement, probeAsync, warnOnce, error, warn, log } from '../utils.js';
55
+ import { createCanvasElement, probeAsync, error, warn, log } from '../utils.js';
57
56
  import { ColorManagement } from '../math/ColorManagement.js';
58
57
  import { getDFGLUT } from './shaders/DFGLUTData.js';
59
58
 
@@ -83,6 +82,7 @@ class WebGLRenderer {
83
82
  powerPreference = 'default',
84
83
  failIfMajorPerformanceCaveat = false,
85
84
  reversedDepthBuffer = false,
85
+ outputBufferType = UnsignedByteType,
86
86
  multiviewStereo = false,
87
87
  } = parameters;
88
88
 
@@ -113,6 +113,8 @@ class WebGLRenderer {
113
113
 
114
114
  }
115
115
 
116
+ const _outputBufferType = outputBufferType;
117
+
116
118
  const INTEGER_FORMATS = new Set( [
117
119
  RGBAIntegerFormat,
118
120
  RGIntegerFormat,
@@ -130,6 +132,7 @@ class WebGLRenderer {
130
132
 
131
133
  const uintClearColor = new Uint32Array( 4 );
132
134
  const intClearColor = new Int32Array( 4 );
135
+ const objectPosition = new Vector3();
133
136
 
134
137
  let currentRenderList = null;
135
138
  let currentRenderState = null;
@@ -140,10 +143,14 @@ class WebGLRenderer {
140
143
  const renderListStack = [];
141
144
  const renderStateStack = [];
142
145
 
146
+ // internal render target for non-UnsignedByteType color buffer
147
+
148
+ let output = null;
149
+
143
150
  // public properties
144
151
 
145
152
  /**
146
- * A canvas where the renderer draws its output.This is automatically created by the renderer
153
+ * A canvas where the renderer draws its output. This is automatically created by the renderer
147
154
  * in the constructor (if not provided already); you just need to add it to your page like so:
148
155
  * ```js
149
156
  * document.body.appendChild( renderer.domElement );
@@ -159,7 +166,7 @@ class WebGLRenderer {
159
166
  * - `checkShaderErrors`: If it is `true`, defines whether material shader programs are
160
167
  * checked for errors during compilation and linkage process. It may be useful to disable
161
168
  * this check in production for performance gain. It is strongly recommended to keep these
162
- * checks enabled during development. If the shader does not compile and link - it will not
169
+ * checks enabled during development. If the shader does not compile and link, it will not
163
170
  * work and associated material will not render.
164
171
  * - `onShaderError(gl, program, glVertexShader,glFragmentShader)`: A callback function that
165
172
  * can be used for custom error reporting. The callback receives the WebGL context, an instance
@@ -288,6 +295,11 @@ class WebGLRenderer {
288
295
  const _this = this;
289
296
 
290
297
  let _isContextLost = false;
298
+ let _nodesHandler = null;
299
+
300
+ let _scratchFramebuffer = null;
301
+ let _srcFramebuffer = null;
302
+ let _dstFramebuffer = null;
291
303
 
292
304
  // internal state cache
293
305
 
@@ -388,11 +400,11 @@ class WebGLRenderer {
388
400
 
389
401
  if ( getContext( contextName ) ) {
390
402
 
391
- throw new Error( 'Error creating WebGL context with your selected attributes.' );
403
+ throw new Error( 'THREE.WebGLRenderer: Error creating WebGL context with your selected attributes.' );
392
404
 
393
405
  } else {
394
406
 
395
- throw new Error( 'Error creating WebGL context.' );
407
+ throw new Error( 'THREE.WebGLRenderer: Error creating WebGL context.' );
396
408
 
397
409
  }
398
410
 
@@ -400,15 +412,15 @@ class WebGLRenderer {
400
412
 
401
413
  }
402
414
 
403
- } catch ( error ) {
415
+ } catch ( e ) {
404
416
 
405
- error( 'WebGLRenderer: ' + error.message );
406
- throw error;
417
+ error( 'WebGLRenderer: ' + e.message );
418
+ throw e;
407
419
 
408
420
  }
409
421
 
410
422
  let extensions, capabilities, state, info;
411
- let properties, textures, cubemaps, cubeuvmaps, attributes, geometries, objects;
423
+ let properties, textures, environments, attributes, geometries, objects;
412
424
  let programCache, materials, renderLists, renderStates, clipping, shadowMap;
413
425
  let multiview;
414
426
 
@@ -433,22 +445,25 @@ class WebGLRenderer {
433
445
 
434
446
  }
435
447
 
448
+ _scratchFramebuffer = _gl.createFramebuffer();
449
+ _srcFramebuffer = _gl.createFramebuffer();
450
+ _dstFramebuffer = _gl.createFramebuffer();
451
+
436
452
  info = new WebGLInfo( _gl );
437
453
  properties = new WebGLProperties();
438
454
  textures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info );
439
- cubemaps = new WebGLCubeMaps( _this );
440
- cubeuvmaps = new WebGLCubeUVMaps( _this );
455
+ environments = new WebGLEnvironments( _this );
441
456
  attributes = new WebGLAttributes( _gl );
442
457
  bindingStates = new WebGLBindingStates( _gl, attributes );
443
458
  geometries = new WebGLGeometries( _gl, attributes, info, bindingStates );
444
- objects = new WebGLObjects( _gl, geometries, attributes, info );
459
+ objects = new WebGLObjects( _gl, geometries, attributes, bindingStates, info );
445
460
  morphtargets = new WebGLMorphtargets( _gl, capabilities, textures );
446
461
  clipping = new WebGLClipping( properties );
447
- programCache = new WebGLPrograms( _this, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping );
462
+ programCache = new WebGLPrograms( _this, environments, extensions, capabilities, bindingStates, clipping );
448
463
  materials = new WebGLMaterials( _this, properties );
449
464
  renderLists = new WebGLRenderLists();
450
465
  renderStates = new WebGLRenderStates( extensions );
451
- background = new WebGLBackground( _this, cubemaps, cubeuvmaps, state, objects, _alpha, premultipliedAlpha );
466
+ background = new WebGLBackground( _this, environments, state, objects, _alpha, premultipliedAlpha );
452
467
  multiview = new WebGLMultiview( _this, extensions, _gl );
453
468
  shadowMap = new WebGLShadowMap( _this, objects, capabilities );
454
469
  uniformsGroups = new WebGLUniformsGroups( _gl, info, capabilities, state );
@@ -537,6 +552,14 @@ class WebGLRenderer {
537
552
 
538
553
  initGLContext();
539
554
 
555
+ // initialize internal render target for non-UnsignedByteType color buffer
556
+
557
+ if ( _outputBufferType !== UnsignedByteType ) {
558
+
559
+ output = new WebGLOutput( _outputBufferType, canvas.width, canvas.height, antialias, depth, stencil );
560
+
561
+ }
562
+
540
563
  // xr
541
564
 
542
565
  const xr = new WebXRManager( _this, _gl, extensions, multiviewStereo );
@@ -659,6 +682,12 @@ class WebGLRenderer {
659
682
 
660
683
  }
661
684
 
685
+ if ( output !== null ) {
686
+
687
+ output.setSize( canvas.width, canvas.height );
688
+
689
+ }
690
+
662
691
  this.setViewport( 0, 0, width, height );
663
692
 
664
693
  };
@@ -702,6 +731,39 @@ class WebGLRenderer {
702
731
 
703
732
  };
704
733
 
734
+ /**
735
+ * Sets the post-processing effects to be applied after rendering.
736
+ *
737
+ * @param {Array} effects - An array of post-processing effects.
738
+ */
739
+ this.setEffects = function ( effects ) {
740
+
741
+ if ( _outputBufferType === UnsignedByteType ) {
742
+
743
+ error( 'WebGLRenderer: setEffects() requires outputBufferType set to HalfFloatType or FloatType.' );
744
+ return;
745
+
746
+ }
747
+
748
+ if ( effects ) {
749
+
750
+ for ( let i = 0; i < effects.length; i ++ ) {
751
+
752
+ if ( effects[ i ].isOutputPass === true ) {
753
+
754
+ warn( 'WebGLRenderer: OutputPass is not needed in setEffects(). Tone mapping and color space conversion are applied automatically.' );
755
+ break;
756
+
757
+ }
758
+
759
+ }
760
+
761
+ }
762
+
763
+ output.setEffects( effects || [] );
764
+
765
+ };
766
+
705
767
  /**
706
768
  * Returns the current viewport definition.
707
769
  *
@@ -949,6 +1011,7 @@ class WebGLRenderer {
949
1011
  if ( depth ) {
950
1012
 
951
1013
  bits |= _gl.DEPTH_BUFFER_BIT;
1014
+ this.state.buffers.depth.setMask( true );
952
1015
 
953
1016
  }
954
1017
 
@@ -959,7 +1022,11 @@ class WebGLRenderer {
959
1022
 
960
1023
  }
961
1024
 
962
- _gl.clear( bits );
1025
+ if ( bits !== 0 ) {
1026
+
1027
+ _gl.clear( bits );
1028
+
1029
+ }
963
1030
 
964
1031
  };
965
1032
 
@@ -990,6 +1057,20 @@ class WebGLRenderer {
990
1057
 
991
1058
  };
992
1059
 
1060
+ /**
1061
+ * Sets a compatibility node builder for rendering node materials with WebGLRenderer.
1062
+ * This enables using TSL (Three.js Shading Language) node materials to prepare
1063
+ * for migration to WebGPURenderer.
1064
+ *
1065
+ * @param {WebGLNodesHandler} nodesHandler - The node builder instance.
1066
+ */
1067
+ this.setNodesHandler = function ( nodesHandler ) {
1068
+
1069
+ nodesHandler.setRenderer( this );
1070
+ _nodesHandler = nodesHandler;
1071
+
1072
+ };
1073
+
993
1074
  /**
994
1075
  * Frees the GPU-related resources allocated by this instance. Call this
995
1076
  * method whenever this instance is no longer used in your app.
@@ -1004,8 +1085,7 @@ class WebGLRenderer {
1004
1085
  renderLists.dispose();
1005
1086
  renderStates.dispose();
1006
1087
  properties.dispose();
1007
- cubemaps.dispose();
1008
- cubeuvmaps.dispose();
1088
+ environments.dispose();
1009
1089
  objects.dispose();
1010
1090
  bindingStates.dispose();
1011
1091
  uniformsGroups.dispose();
@@ -1109,7 +1189,7 @@ class WebGLRenderer {
1109
1189
 
1110
1190
  if ( scene === null ) scene = _emptyScene; // renderBufferDirect second parameter used to be fog (could be null)
1111
1191
 
1112
- const frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );
1192
+ const frontFaceCW = ( object.isMesh && object.matrixWorld.determinantAffine() < 0 );
1113
1193
 
1114
1194
  const program = setProgram( camera, scene, geometry, material, object );
1115
1195
 
@@ -1226,33 +1306,23 @@ class WebGLRenderer {
1226
1306
 
1227
1307
  if ( object.isBatchedMesh ) {
1228
1308
 
1229
- if ( object._multiDrawInstances !== null ) {
1230
-
1231
- // @deprecated, r174
1232
- warnOnce( 'WebGLRenderer: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection.' );
1233
- renderer.renderMultiDrawInstances( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount, object._multiDrawInstances );
1234
-
1235
- } else {
1236
-
1237
- if ( ! extensions.get( 'WEBGL_multi_draw' ) ) {
1238
-
1239
- const starts = object._multiDrawStarts;
1240
- const counts = object._multiDrawCounts;
1241
- const drawCount = object._multiDrawCount;
1242
- const bytesPerElement = index ? attributes.get( index ).bytesPerElement : 1;
1243
- const uniforms = properties.get( material ).currentProgram.getUniforms();
1244
- for ( let i = 0; i < drawCount; i ++ ) {
1309
+ if ( ! extensions.get( 'WEBGL_multi_draw' ) ) {
1245
1310
 
1246
- uniforms.setValue( _gl, '_gl_DrawID', i );
1247
- renderer.render( starts[ i ] / bytesPerElement, counts[ i ] );
1311
+ const starts = object._multiDrawStarts;
1312
+ const counts = object._multiDrawCounts;
1313
+ const drawCount = object._multiDrawCount;
1314
+ const bytesPerElement = index ? attributes.get( index ).bytesPerElement : 1;
1315
+ const uniforms = properties.get( material ).currentProgram.getUniforms();
1316
+ for ( let i = 0; i < drawCount; i ++ ) {
1248
1317
 
1249
- }
1318
+ uniforms.setValue( _gl, '_gl_DrawID', i );
1319
+ renderer.render( starts[ i ] / bytesPerElement, counts[ i ] );
1250
1320
 
1251
- } else {
1321
+ }
1252
1322
 
1253
- renderer.renderMultiDraw( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount );
1323
+ } else {
1254
1324
 
1255
- }
1325
+ renderer.renderMultiDraw( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount );
1256
1326
 
1257
1327
  }
1258
1328
 
@@ -1551,6 +1621,19 @@ class WebGLRenderer {
1551
1621
 
1552
1622
  if ( _isContextLost === true ) return;
1553
1623
 
1624
+ // update node builder if available
1625
+ if ( _nodesHandler !== null ) {
1626
+
1627
+ _nodesHandler.renderStart( scene, camera );
1628
+
1629
+ }
1630
+
1631
+ // use internal render target for HalfFloatType color buffer (only when tone mapping is enabled)
1632
+
1633
+ const isXRPresenting = xr.enabled === true && xr.isPresenting === true;
1634
+
1635
+ const useOutput = output !== null && ( _currentRenderTarget === null || isXRPresenting ) && output.begin( _this, _currentRenderTarget );
1636
+
1554
1637
  // update scene graph
1555
1638
 
1556
1639
  if ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();
@@ -1559,7 +1642,7 @@ class WebGLRenderer {
1559
1642
 
1560
1643
  if ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();
1561
1644
 
1562
- if ( xr.enabled === true && xr.isPresenting === true ) {
1645
+ if ( xr.enabled === true && xr.isPresenting === true && ( output === null || output.isCompositing() === false ) ) {
1563
1646
 
1564
1647
  if ( xr.cameraAutoUpdate === true ) xr.updateCamera( camera );
1565
1648
 
@@ -1573,6 +1656,7 @@ class WebGLRenderer {
1573
1656
  currentRenderState = renderStates.get( scene, renderStateStack.length );
1574
1657
  currentRenderState.init( camera );
1575
1658
 
1659
+ currentRenderState.state.textureUnits = textures.getTextureUnits();
1576
1660
  renderStateStack.push( currentRenderState );
1577
1661
 
1578
1662
  _projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );
@@ -1604,7 +1688,7 @@ class WebGLRenderer {
1604
1688
 
1605
1689
  if ( _this.sortObjects === true ) {
1606
1690
 
1607
- currentRenderList.sort( _opaqueSort, _transparentSort );
1691
+ currentRenderList.sort( _opaqueSort, _transparentSort, camera.reversedDepth );
1608
1692
 
1609
1693
  }
1610
1694
 
@@ -1619,6 +1703,8 @@ class WebGLRenderer {
1619
1703
 
1620
1704
  this.info.render.frame ++;
1621
1705
 
1706
+ if ( this.info.autoReset === true ) this.info.reset();
1707
+
1622
1708
  if ( _clippingEnabled === true ) clipping.beginShadows();
1623
1709
 
1624
1710
  const shadowsArray = currentRenderState.state.shadowsArray;
@@ -1629,58 +1715,62 @@ class WebGLRenderer {
1629
1715
 
1630
1716
  //
1631
1717
 
1632
- if ( this.info.autoReset === true ) this.info.reset();
1718
+ // render scene (skip if first effect is a render pass - it will render the scene itself)
1633
1719
 
1634
- // render scene
1720
+ const skipSceneRender = useOutput && output.hasRenderPass();
1635
1721
 
1636
- const opaqueObjects = currentRenderList.opaque;
1637
- const transmissiveObjects = currentRenderList.transmissive;
1722
+ if ( skipSceneRender === false ) {
1638
1723
 
1639
- currentRenderState.setupLights();
1724
+ const opaqueObjects = currentRenderList.opaque;
1725
+ const transmissiveObjects = currentRenderList.transmissive;
1726
+
1727
+ currentRenderState.setupLights();
1640
1728
 
1641
- if ( camera.isArrayCamera ) {
1729
+ if ( camera.isArrayCamera ) {
1642
1730
 
1643
- const cameras = camera.cameras;
1731
+ const cameras = camera.cameras;
1644
1732
 
1645
- if ( transmissiveObjects.length > 0 ) {
1733
+ if ( transmissiveObjects.length > 0 ) {
1646
1734
 
1647
- for ( let i = 0, l = cameras.length; i < l; i ++ ) {
1735
+ for ( let i = 0, l = cameras.length; i < l; i ++ ) {
1648
1736
 
1649
- const camera2 = cameras[ i ];
1737
+ const camera2 = cameras[ i ];
1650
1738
 
1651
- renderTransmissionPass( opaqueObjects, transmissiveObjects, scene, camera2 );
1739
+ renderTransmissionPass( opaqueObjects, transmissiveObjects, scene, camera2 );
1740
+
1741
+ }
1652
1742
 
1653
1743
  }
1654
1744
 
1655
- }
1745
+ if ( _renderBackground ) background.render( scene );
1656
1746
 
1657
- if ( _renderBackground ) background.render( scene );
1747
+ if ( xr.enabled && xr.isMultiview ) {
1658
1748
 
1659
- if ( xr.enabled && xr.isMultiview ) {
1749
+ textures.setDeferTextureUploads( true );
1660
1750
 
1661
- textures.setDeferTextureUploads( true );
1751
+ renderScene( currentRenderList, scene, camera, camera.cameras[ 0 ].viewport );
1662
1752
 
1663
- renderScene( currentRenderList, scene, camera, camera.cameras[ 0 ].viewport );
1753
+ } else {
1664
1754
 
1665
- } else {
1755
+ for ( let i = 0, l = cameras.length; i < l; i ++ ) {
1666
1756
 
1667
- for ( let i = 0, l = cameras.length; i < l; i ++ ) {
1757
+ const camera2 = cameras[ i ];
1668
1758
 
1669
- const camera2 = cameras[ i ];
1759
+ renderScene( currentRenderList, scene, camera2, camera2.viewport );
1670
1760
 
1671
- renderScene( currentRenderList, scene, camera2, camera2.viewport );
1761
+ }
1672
1762
 
1673
1763
  }
1674
1764
 
1675
- }
1765
+ } else {
1676
1766
 
1677
- } else {
1767
+ if ( transmissiveObjects.length > 0 ) renderTransmissionPass( opaqueObjects, transmissiveObjects, scene, camera );
1678
1768
 
1679
- if ( transmissiveObjects.length > 0 ) renderTransmissionPass( opaqueObjects, transmissiveObjects, scene, camera );
1769
+ if ( _renderBackground ) background.render( scene );
1680
1770
 
1681
- if ( _renderBackground ) background.render( scene );
1771
+ renderScene( currentRenderList, scene, camera );
1682
1772
 
1683
- renderScene( currentRenderList, scene, camera );
1773
+ }
1684
1774
 
1685
1775
  }
1686
1776
 
@@ -1698,12 +1788,18 @@ class WebGLRenderer {
1698
1788
 
1699
1789
  }
1700
1790
 
1791
+ // copy from internal render target to canvas using fullscreen quad
1792
+
1793
+ if ( useOutput ) {
1794
+
1795
+ output.end( _this );
1796
+
1797
+ }
1798
+
1701
1799
  //
1702
1800
 
1703
1801
  if ( scene.isScene === true ) scene.onAfterRender( _this, scene, camera );
1704
1802
 
1705
- textures.runDeferredUploads();
1706
-
1707
1803
  // _gl.finish();
1708
1804
 
1709
1805
  bindingStates.resetDefaultState();
@@ -1716,6 +1812,8 @@ class WebGLRenderer {
1716
1812
 
1717
1813
  currentRenderState = renderStateStack[ renderStateStack.length - 1 ];
1718
1814
 
1815
+ textures.setTextureUnits( currentRenderState.state.textureUnits );
1816
+
1719
1817
  if ( _clippingEnabled === true ) clipping.setGlobalState( _this.clippingPlanes, currentRenderState.state.camera );
1720
1818
 
1721
1819
  } else {
@@ -1736,6 +1834,12 @@ class WebGLRenderer {
1736
1834
 
1737
1835
  }
1738
1836
 
1837
+ if ( _nodesHandler !== null ) {
1838
+
1839
+ _nodesHandler.renderEnd();
1840
+
1841
+ }
1842
+
1739
1843
  };
1740
1844
 
1741
1845
  function projectObject( object, camera, groupOrder, sortObjects ) {
@@ -1754,6 +1858,10 @@ class WebGLRenderer {
1754
1858
 
1755
1859
  if ( object.autoUpdate === true ) object.update( camera );
1756
1860
 
1861
+ } else if ( object.isLightProbeGrid ) {
1862
+
1863
+ currentRenderState.pushLightProbeGrid( object );
1864
+
1757
1865
  } else if ( object.isLight ) {
1758
1866
 
1759
1867
  currentRenderState.pushLight( object );
@@ -1888,11 +1996,13 @@ class WebGLRenderer {
1888
1996
 
1889
1997
  if ( currentRenderState.state.transmissionRenderTarget[ camera.id ] === undefined ) {
1890
1998
 
1999
+ const hasHalfFloatSupport = extensions.has( 'EXT_color_buffer_half_float' ) || extensions.has( 'EXT_color_buffer_float' );
2000
+
1891
2001
  currentRenderState.state.transmissionRenderTarget[ camera.id ] = new WebGLRenderTarget( 1, 1, {
1892
2002
  generateMipmaps: true,
1893
- type: ( extensions.has( 'EXT_color_buffer_half_float' ) || extensions.has( 'EXT_color_buffer_float' ) ) ? HalfFloatType : UnsignedByteType,
2003
+ type: hasHalfFloatSupport ? HalfFloatType : UnsignedByteType,
1894
2004
  minFilter: LinearMipmapLinearFilter,
1895
- samples: 4,
2005
+ samples: Math.max( 4, capabilities.samples ), // to avoid feedback loops, the transmission render target requires a resolve, see #26177
1896
2006
  stencilBuffer: stencil,
1897
2007
  resolveDepthBuffer: false,
1898
2008
  resolveStencilBuffer: false,
@@ -2067,16 +2177,18 @@ class WebGLRenderer {
2067
2177
 
2068
2178
  const lightsStateVersion = lights.state.version;
2069
2179
 
2070
- const parameters = programCache.getParameters( material, lights.state, shadowsArray, scene, object );
2180
+ const parameters = programCache.getParameters( material, lights.state, shadowsArray, scene, object, currentRenderState.state.lightProbeGridArray );
2071
2181
  const programCacheKey = programCache.getProgramCacheKey( parameters );
2072
2182
 
2073
2183
  let programs = materialProperties.programs;
2074
2184
 
2075
2185
  // always update environment and fog - changing these trigger an getProgram call, but it's possible that the program doesn't change
2076
2186
 
2077
- materialProperties.environment = material.isMeshStandardMaterial ? scene.environment : null;
2187
+ materialProperties.environment = ( material.isMeshStandardMaterial || material.isMeshLambertMaterial || material.isMeshPhongMaterial ) ? scene.environment : null;
2078
2188
  materialProperties.fog = scene.fog;
2079
- materialProperties.envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || materialProperties.environment );
2189
+
2190
+ const usePMREM = material.isMeshStandardMaterial || ( material.isMeshLambertMaterial && ! material.envMap ) || ( material.isMeshPhongMaterial && ! material.envMap );
2191
+ materialProperties.envMap = environments.get( material.envMap || materialProperties.environment, usePMREM );
2080
2192
  materialProperties.envMapRotation = ( materialProperties.environment !== null && material.envMap === null ) ? scene.environmentRotation : material.envMapRotation;
2081
2193
 
2082
2194
  if ( programs === undefined ) {
@@ -2108,6 +2220,13 @@ class WebGLRenderer {
2108
2220
 
2109
2221
  parameters.uniforms = programCache.getUniforms( material );
2110
2222
 
2223
+ // Use node builder for node materials if available
2224
+ if ( _nodesHandler !== null && material.isNodeMaterial ) {
2225
+
2226
+ _nodesHandler.build( material, object, parameters );
2227
+
2228
+ }
2229
+
2111
2230
  material.onBeforeCompile( parameters, _this );
2112
2231
 
2113
2232
  program = programCache.acquireProgram( parameters, programCacheKey );
@@ -2149,17 +2268,16 @@ class WebGLRenderer {
2149
2268
  uniforms.pointLightShadows.value = lights.state.pointShadow;
2150
2269
  uniforms.hemisphereLights.value = lights.state.hemi;
2151
2270
 
2152
- uniforms.directionalShadowMap.value = lights.state.directionalShadowMap;
2153
2271
  uniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix;
2154
- uniforms.spotShadowMap.value = lights.state.spotShadowMap;
2155
2272
  uniforms.spotLightMatrix.value = lights.state.spotLightMatrix;
2156
2273
  uniforms.spotLightMap.value = lights.state.spotLightMap;
2157
- uniforms.pointShadowMap.value = lights.state.pointShadowMap;
2158
2274
  uniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix;
2159
2275
  // TODO (abelnation): add area lights shadow info to uniforms
2160
2276
 
2161
2277
  }
2162
2278
 
2279
+ materialProperties.lightProbeGrid = currentRenderState.state.lightProbeGridArray.length > 0;
2280
+
2163
2281
  materialProperties.currentProgram = program;
2164
2282
  materialProperties.uniformsList = null;
2165
2283
 
@@ -2204,6 +2322,30 @@ class WebGLRenderer {
2204
2322
 
2205
2323
  }
2206
2324
 
2325
+ function findLightProbeGrid( volumes, object ) {
2326
+
2327
+ if ( volumes.length === 0 ) return null;
2328
+
2329
+ if ( volumes.length === 1 ) {
2330
+
2331
+ return volumes[ 0 ].texture !== null ? volumes[ 0 ] : null;
2332
+
2333
+ }
2334
+
2335
+ objectPosition.setFromMatrixPosition( object.matrixWorld );
2336
+
2337
+ for ( let i = 0, l = volumes.length; i < l; i ++ ) {
2338
+
2339
+ const v = volumes[ i ];
2340
+
2341
+ if ( v.texture !== null && v.boundingBox.containsPoint( objectPosition ) ) return v;
2342
+
2343
+ }
2344
+
2345
+ return null;
2346
+
2347
+ }
2348
+
2207
2349
  function setProgram( camera, scene, geometry, material, object ) {
2208
2350
 
2209
2351
  if ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...
@@ -2211,9 +2353,10 @@ class WebGLRenderer {
2211
2353
  textures.resetTextureUnits();
2212
2354
 
2213
2355
  const fog = scene.fog;
2214
- const environment = material.isMeshStandardMaterial ? scene.environment : null;
2215
- const colorSpace = ( _currentRenderTarget === null ) ? _this.outputColorSpace : ( _currentRenderTarget.isXRRenderTarget === true ? _currentRenderTarget.texture.colorSpace : LinearSRGBColorSpace );
2216
- const envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || environment );
2356
+ const environment = ( material.isMeshStandardMaterial || material.isMeshLambertMaterial || material.isMeshPhongMaterial ) ? scene.environment : null;
2357
+ const colorSpace = ( _currentRenderTarget === null ) ? _this.outputColorSpace : ( _currentRenderTarget.isXRRenderTarget === true ? _currentRenderTarget.texture.colorSpace : ColorManagement.workingColorSpace );
2358
+ const usePMREM = material.isMeshStandardMaterial || ( material.isMeshLambertMaterial && ! material.envMap ) || ( material.isMeshPhongMaterial && ! material.envMap );
2359
+ const envMap = environments.get( material.envMap || environment, usePMREM );
2217
2360
  const vertexAlphas = material.vertexColors === true && !! geometry.attributes.color && geometry.attributes.color.itemSize === 4;
2218
2361
  const vertexTangents = !! geometry.attributes.tangent && ( !! material.normalMap || material.anisotropy > 0 );
2219
2362
  const morphTargets = !! geometry.morphAttributes.position;
@@ -2361,6 +2504,10 @@ class WebGLRenderer {
2361
2504
 
2362
2505
  needsProgramChange = true;
2363
2506
 
2507
+ } else if ( !! materialProperties.lightProbeGrid !== ( currentRenderState.state.lightProbeGridArray.length > 0 ) ) {
2508
+
2509
+ needsProgramChange = true;
2510
+
2364
2511
  } else if ( materialProperties.numMultiviewViews !== numMultiviewViews ) {
2365
2512
 
2366
2513
  needsProgramChange = true;
@@ -2382,6 +2529,14 @@ class WebGLRenderer {
2382
2529
 
2383
2530
  program = getProgram( material, scene, object );
2384
2531
 
2532
+ // notify the node builder that the program has changed so uniforms and update nodes can
2533
+ // be cached and triggered.
2534
+ if ( _nodesHandler && material.isNodeMaterial ) {
2535
+
2536
+ _nodesHandler.onUpdateProgram( material, program, materialProperties );
2537
+
2538
+ }
2539
+
2385
2540
  }
2386
2541
 
2387
2542
  let refreshProgram = false;
@@ -2407,6 +2562,19 @@ class WebGLRenderer {
2407
2562
 
2408
2563
  }
2409
2564
 
2565
+ if ( materialProperties.needsLights ) {
2566
+
2567
+ const objectVolume = findLightProbeGrid( currentRenderState.state.lightProbeGridArray, object );
2568
+
2569
+ if ( materialProperties.lightProbeGrid !== objectVolume ) {
2570
+
2571
+ materialProperties.lightProbeGrid = objectVolume;
2572
+ refreshMaterial = true;
2573
+
2574
+ }
2575
+
2576
+ }
2577
+
2410
2578
  if ( refreshProgram || _currentCamera !== camera ) {
2411
2579
 
2412
2580
  // common camera uniforms
@@ -2433,6 +2601,7 @@ class WebGLRenderer {
2433
2601
 
2434
2602
  }
2435
2603
 
2604
+
2436
2605
  const uCamPos = p_uniforms.map.cameraPosition;
2437
2606
 
2438
2607
  if ( uCamPos !== undefined ) {
@@ -2476,6 +2645,30 @@ class WebGLRenderer {
2476
2645
 
2477
2646
  }
2478
2647
 
2648
+ // Pre-allocate texture units for shadow samplers before setting data textures
2649
+ if ( materialProperties.needsLights ) {
2650
+
2651
+ // Set shadow map uniforms first to ensure they get the first texture units
2652
+ if ( lights.state.directionalShadowMap.length > 0 ) {
2653
+
2654
+ p_uniforms.setValue( _gl, 'directionalShadowMap', lights.state.directionalShadowMap, textures );
2655
+
2656
+ }
2657
+
2658
+ if ( lights.state.spotShadowMap.length > 0 ) {
2659
+
2660
+ p_uniforms.setValue( _gl, 'spotShadowMap', lights.state.spotShadowMap, textures );
2661
+
2662
+ }
2663
+
2664
+ if ( lights.state.pointShadowMap.length > 0 ) {
2665
+
2666
+ p_uniforms.setValue( _gl, 'pointShadowMap', lights.state.pointShadowMap, textures );
2667
+
2668
+ }
2669
+
2670
+ }
2671
+
2479
2672
  // skinning and morph target uniforms must be set even if material didn't change
2480
2673
  // auto-setting of texture unit for bone and morph texture must go before other textures
2481
2674
  // otherwise textures used for skinning and morphing can take over texture units reserved for other material textures
@@ -2529,17 +2722,7 @@ class WebGLRenderer {
2529
2722
 
2530
2723
  }
2531
2724
 
2532
- // https://github.com/mrdoob/three.js/pull/24467#issuecomment-1209031512
2533
-
2534
- if ( material.isMeshGouraudMaterial && material.envMap !== null ) {
2535
-
2536
- m_uniforms.envMap.value = envMap;
2537
-
2538
- m_uniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) ? - 1 : 1;
2539
-
2540
- }
2541
-
2542
- if ( material.isMeshStandardMaterial && material.envMap === null && scene.environment !== null ) {
2725
+ if ( ( material.isMeshStandardMaterial || material.isMeshLambertMaterial || material.isMeshPhongMaterial ) && material.envMap === null && scene.environment !== null ) {
2543
2726
 
2544
2727
  m_uniforms.envMapIntensity.value = scene.environmentIntensity;
2545
2728
 
@@ -2581,6 +2764,19 @@ class WebGLRenderer {
2581
2764
 
2582
2765
  materials.refreshMaterialUniforms( m_uniforms, material, _pixelRatio, _height, currentRenderState.state.transmissionRenderTarget[ camera.id ] );
2583
2766
 
2767
+ // light probe volume
2768
+
2769
+ if ( materialProperties.needsLights && materialProperties.lightProbeGrid ) {
2770
+
2771
+ const volume = materialProperties.lightProbeGrid;
2772
+
2773
+ m_uniforms.probesSH.value = volume.texture;
2774
+ m_uniforms.probesMin.value.copy( volume.boundingBox.min );
2775
+ m_uniforms.probesMax.value.copy( volume.boundingBox.max );
2776
+ m_uniforms.probesResolution.value.copy( volume.resolution );
2777
+
2778
+ }
2779
+
2584
2780
  WebGLUniforms.upload( _gl, getUniformList( materialProperties ), m_uniforms, textures );
2585
2781
 
2586
2782
  }
@@ -2615,7 +2811,7 @@ class WebGLRenderer {
2615
2811
 
2616
2812
  // UBOs
2617
2813
 
2618
- if ( material.isShaderMaterial || material.isRawShaderMaterial ) {
2814
+ if ( material.uniformsGroups !== undefined ) {
2619
2815
 
2620
2816
  const groups = material.uniformsGroups;
2621
2817
 
@@ -2725,7 +2921,7 @@ class WebGLRenderer {
2725
2921
  const renderTargetProperties = properties.get( renderTarget );
2726
2922
 
2727
2923
  renderTargetProperties.__autoAllocateDepthBuffer = renderTarget.resolveDepthBuffer === false;
2728
- if ( ! renderTargetProperties.__autoAllocateDepthBuffer ) {
2924
+ if ( renderTargetProperties.__autoAllocateDepthBuffer === false && ( ! _currentRenderTarget || ! _currentRenderTarget.isWebGLMultiviewRenderTarget ) ) {
2729
2925
 
2730
2926
  // The multisample_render_to_texture extension doesn't work properly if there
2731
2927
  // are midframe flushes and an external depth buffer. Disable use of the extension.
@@ -2748,8 +2944,6 @@ class WebGLRenderer {
2748
2944
 
2749
2945
  };
2750
2946
 
2751
- const _scratchFrameBuffer = _gl.createFramebuffer();
2752
-
2753
2947
  /**
2754
2948
  * Sets the active rendertarget.
2755
2949
  *
@@ -2772,7 +2966,6 @@ class WebGLRenderer {
2772
2966
  _currentActiveCubeFace = activeCubeFace;
2773
2967
  _currentActiveMipmapLevel = activeMipmapLevel;
2774
2968
 
2775
- let useDefaultFramebuffer = true;
2776
2969
  let framebuffer = null;
2777
2970
  let isCube = false;
2778
2971
  let isRenderTarget3D = false;
@@ -2783,9 +2976,21 @@ class WebGLRenderer {
2783
2976
 
2784
2977
  if ( renderTargetProperties.__useDefaultFramebuffer !== undefined ) {
2785
2978
 
2786
- // We need to make sure to rebind the framebuffer.
2787
- state.bindFramebuffer( _gl.FRAMEBUFFER, null );
2788
- useDefaultFramebuffer = false;
2979
+ // Externally-managed framebuffer (e.g. XR)
2980
+ // Bind to the stored framebuffer (may be null for default, or a WebGLFramebuffer)
2981
+ state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );
2982
+
2983
+ _currentViewport.copy( renderTarget.viewport );
2984
+ _currentScissor.copy( renderTarget.scissor );
2985
+ _currentScissorTest = renderTarget.scissorTest;
2986
+
2987
+ state.viewport( _currentViewport );
2988
+ state.scissor( _currentScissor );
2989
+ state.setScissorTest( _currentScissorTest );
2990
+
2991
+ _currentMaterialId = - 1;
2992
+
2993
+ return;
2789
2994
 
2790
2995
  } else if ( renderTargetProperties.__webglFramebuffer === undefined ) {
2791
2996
 
@@ -2809,7 +3014,7 @@ class WebGLRenderer {
2809
3014
  ( renderTarget.width !== depthTexture.image.width || renderTarget.height !== depthTexture.image.height )
2810
3015
  ) {
2811
3016
 
2812
- throw new Error( 'WebGLRenderTarget: Attached DepthTexture is initialized to the incorrect size.' );
3017
+ throw new Error( 'THREE.WebGLRenderer: Attached DepthTexture is initialized to the incorrect size.' );
2813
3018
 
2814
3019
  }
2815
3020
 
@@ -2878,13 +3083,13 @@ class WebGLRenderer {
2878
3083
  // being bound that are different sizes.
2879
3084
  if ( activeMipmapLevel !== 0 ) {
2880
3085
 
2881
- framebuffer = _scratchFrameBuffer;
3086
+ framebuffer = _scratchFramebuffer;
2882
3087
 
2883
3088
  }
2884
3089
 
2885
3090
  const framebufferBound = state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
2886
3091
 
2887
- if ( framebufferBound && useDefaultFramebuffer ) {
3092
+ if ( framebufferBound ) {
2888
3093
 
2889
3094
  state.drawBuffers( renderTarget, framebuffer );
2890
3095
 
@@ -2963,6 +3168,10 @@ class WebGLRenderer {
2963
3168
  const textureFormat = texture.format;
2964
3169
  const textureType = texture.type;
2965
3170
 
3171
+ // when using MRT, select the correct color buffer for the subsequent read command
3172
+
3173
+ if ( renderTarget.textures.length > 1 ) _gl.readBuffer( _gl.COLOR_ATTACHMENT0 + textureIndex );
3174
+
2966
3175
  if ( ! capabilities.textureFormatReadable( textureFormat ) ) {
2967
3176
 
2968
3177
  error( 'WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' );
@@ -2981,10 +3190,6 @@ class WebGLRenderer {
2981
3190
 
2982
3191
  if ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {
2983
3192
 
2984
- // when using MRT, select the correct color buffer for the subsequent read command
2985
-
2986
- if ( renderTarget.textures.length > 1 ) _gl.readBuffer( _gl.COLOR_ATTACHMENT0 + textureIndex );
2987
-
2988
3193
  _gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), buffer );
2989
3194
 
2990
3195
  }
@@ -3045,6 +3250,11 @@ class WebGLRenderer {
3045
3250
  const textureFormat = texture.format;
3046
3251
  const textureType = texture.type;
3047
3252
 
3253
+ // when using MRT, select the correct color buffer for the subsequent read command
3254
+
3255
+ if ( renderTarget.textures.length > 1 ) _gl.readBuffer( _gl.COLOR_ATTACHMENT0 + textureIndex );
3256
+
3257
+
3048
3258
  if ( ! capabilities.textureFormatReadable( textureFormat ) ) {
3049
3259
 
3050
3260
  throw new Error( 'THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.' );
@@ -3061,10 +3271,6 @@ class WebGLRenderer {
3061
3271
  _gl.bindBuffer( _gl.PIXEL_PACK_BUFFER, glBuffer );
3062
3272
  _gl.bufferData( _gl.PIXEL_PACK_BUFFER, buffer.byteLength, _gl.STREAM_READ );
3063
3273
 
3064
- // when using MRT, select the correct color buffer for the subsequent read command
3065
-
3066
- if ( renderTarget.textures.length > 1 ) _gl.readBuffer( _gl.COLOR_ATTACHMENT0 + textureIndex );
3067
-
3068
3274
  _gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), 0 );
3069
3275
 
3070
3276
  // reset the frame buffer to the currently set buffer before waiting
@@ -3120,8 +3326,6 @@ class WebGLRenderer {
3120
3326
 
3121
3327
  };
3122
3328
 
3123
- const _srcFramebuffer = _gl.createFramebuffer();
3124
- const _dstFramebuffer = _gl.createFramebuffer();
3125
3329
 
3126
3330
  /**
3127
3331
  * Copies data of the given source texture into a destination texture.
@@ -3134,27 +3338,9 @@ class WebGLRenderer {
3134
3338
  * @param {?(Box2|Box3)} [srcRegion=null] - A bounding box which describes the source region. Can be two or three-dimensional.
3135
3339
  * @param {?(Vector2|Vector3)} [dstPosition=null] - A vector that represents the origin of the destination region. Can be two or three-dimensional.
3136
3340
  * @param {number} [srcLevel=0] - The source mipmap level to copy.
3137
- * @param {?number} [dstLevel=null] - The destination mipmap level.
3341
+ * @param {?number} [dstLevel=0] - The destination mipmap level.
3138
3342
  */
3139
- this.copyTextureToTexture = function ( srcTexture, dstTexture, srcRegion = null, dstPosition = null, srcLevel = 0, dstLevel = null ) {
3140
-
3141
- // support the previous signature with just a single dst mipmap level
3142
- if ( dstLevel === null ) {
3143
-
3144
- if ( srcLevel !== 0 ) {
3145
-
3146
- // @deprecated, r171
3147
- warnOnce( 'WebGLRenderer: copyTextureToTexture function signature has changed to support src and dst mipmap levels.' );
3148
- dstLevel = srcLevel;
3149
- srcLevel = 0;
3150
-
3151
- } else {
3152
-
3153
- dstLevel = 0;
3154
-
3155
- }
3156
-
3157
- }
3343
+ this.copyTextureToTexture = function ( srcTexture, dstTexture, srcRegion = null, dstPosition = null, srcLevel = 0, dstLevel = 0 ) {
3158
3344
 
3159
3345
  // gather the necessary dimensions to copy
3160
3346
  let width, height, depth, minX, minY, minZ;
@@ -3230,22 +3416,24 @@ class WebGLRenderer {
3230
3416
 
3231
3417
  }
3232
3418
 
3233
- _gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY );
3234
- _gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha );
3235
- _gl.pixelStorei( _gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment );
3419
+ state.activeTexture( _gl.TEXTURE0 ); // see #33153
3420
+
3421
+ state.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY );
3422
+ state.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha );
3423
+ state.pixelStorei( _gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment );
3236
3424
 
3237
3425
  // used for copying data from cpu
3238
- const currentUnpackRowLen = _gl.getParameter( _gl.UNPACK_ROW_LENGTH );
3239
- const currentUnpackImageHeight = _gl.getParameter( _gl.UNPACK_IMAGE_HEIGHT );
3240
- const currentUnpackSkipPixels = _gl.getParameter( _gl.UNPACK_SKIP_PIXELS );
3241
- const currentUnpackSkipRows = _gl.getParameter( _gl.UNPACK_SKIP_ROWS );
3242
- const currentUnpackSkipImages = _gl.getParameter( _gl.UNPACK_SKIP_IMAGES );
3243
-
3244
- _gl.pixelStorei( _gl.UNPACK_ROW_LENGTH, image.width );
3245
- _gl.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, image.height );
3246
- _gl.pixelStorei( _gl.UNPACK_SKIP_PIXELS, minX );
3247
- _gl.pixelStorei( _gl.UNPACK_SKIP_ROWS, minY );
3248
- _gl.pixelStorei( _gl.UNPACK_SKIP_IMAGES, minZ );
3426
+ const currentUnpackRowLen = state.getParameter( _gl.UNPACK_ROW_LENGTH );
3427
+ const currentUnpackImageHeight = state.getParameter( _gl.UNPACK_IMAGE_HEIGHT );
3428
+ const currentUnpackSkipPixels = state.getParameter( _gl.UNPACK_SKIP_PIXELS );
3429
+ const currentUnpackSkipRows = state.getParameter( _gl.UNPACK_SKIP_ROWS );
3430
+ const currentUnpackSkipImages = state.getParameter( _gl.UNPACK_SKIP_IMAGES );
3431
+
3432
+ state.pixelStorei( _gl.UNPACK_ROW_LENGTH, image.width );
3433
+ state.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, image.height );
3434
+ state.pixelStorei( _gl.UNPACK_SKIP_PIXELS, minX );
3435
+ state.pixelStorei( _gl.UNPACK_SKIP_ROWS, minY );
3436
+ state.pixelStorei( _gl.UNPACK_SKIP_IMAGES, minZ );
3249
3437
 
3250
3438
  // set up the src texture
3251
3439
  const isSrc3D = srcTexture.isDataArrayTexture || srcTexture.isData3DTexture;
@@ -3371,11 +3559,11 @@ class WebGLRenderer {
3371
3559
  }
3372
3560
 
3373
3561
  // reset values
3374
- _gl.pixelStorei( _gl.UNPACK_ROW_LENGTH, currentUnpackRowLen );
3375
- _gl.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, currentUnpackImageHeight );
3376
- _gl.pixelStorei( _gl.UNPACK_SKIP_PIXELS, currentUnpackSkipPixels );
3377
- _gl.pixelStorei( _gl.UNPACK_SKIP_ROWS, currentUnpackSkipRows );
3378
- _gl.pixelStorei( _gl.UNPACK_SKIP_IMAGES, currentUnpackSkipImages );
3562
+ state.pixelStorei( _gl.UNPACK_ROW_LENGTH, currentUnpackRowLen );
3563
+ state.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, currentUnpackImageHeight );
3564
+ state.pixelStorei( _gl.UNPACK_SKIP_PIXELS, currentUnpackSkipPixels );
3565
+ state.pixelStorei( _gl.UNPACK_SKIP_ROWS, currentUnpackSkipRows );
3566
+ state.pixelStorei( _gl.UNPACK_SKIP_IMAGES, currentUnpackSkipImages );
3379
3567
 
3380
3568
  // Generate mipmaps only when copying level 0
3381
3569
  if ( dstLevel === 0 && dstTexture.generateMipmaps ) {
@@ -3519,6 +3707,7 @@ class WebGLRenderer {
3519
3707
  * Note that this setting uses `gl_FragDepth` if available which disables the Early Fragment Test optimization and can cause a decrease in performance.
3520
3708
  * @property {boolean} [reversedDepthBuffer=false] Whether to use a reverse depth buffer. Requires the `EXT_clip_control` extension.
3521
3709
  * This is a more faster and accurate version than logarithmic depth buffer.
3710
+ * @property {number} [outputBufferType=UnsignedByteType] Defines the type of the output buffer. Use `HalfFloatType` for HDR rendering with tone mapping and post-processing support.
3522
3711
  **/
3523
3712
 
3524
3713
  /**
@@ -3540,7 +3729,6 @@ class WebGLRenderer {
3540
3729
  * @property {string} precision - The shader precision currently being used by the renderer.
3541
3730
  * @property {boolean} reversedDepthBuffer - `true` if `reversedDepthBuffer` was set to `true` in the constructor
3542
3731
  * and the rendering context supports `EXT_clip_control`.
3543
- * @property {boolean} vertexTextures - `true` if vertex textures can be used.
3544
3732
  **/
3545
3733
 
3546
3734
  /**
@@ -3582,7 +3770,7 @@ class WebGLRenderer {
3582
3770
  * If you do not require dynamic lighting / shadows, you may set this to `false`.
3583
3771
  * @property {boolean} [needsUpdate=false] - When set to `true`, shadow maps in the scene
3584
3772
  * will be updated in the next `render` call.
3585
- * @property {(BasicShadowMap|PCFShadowMap|PCFSoftShadowMap|VSMShadowMap)} [type=PCFShadowMap] - Defines the shadow map type.
3773
+ * @property {(BasicShadowMap|PCFShadowMap|VSMShadowMap)} [type=PCFShadowMap] - Defines the shadow map type.
3586
3774
  **/
3587
3775
 
3588
3776
  export { WebGLRenderer };