super-three 0.181.0 → 0.184.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (539) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +13152 -11354
  4. package/build/three.core.js +12319 -11539
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +1808 -781
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +27 -13
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +10523 -6263
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +10484 -6262
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +11 -3
  15. package/examples/jsm/animation/CCDIKSolver.js +7 -3
  16. package/examples/jsm/controls/ArcballControls.js +7 -4
  17. package/examples/jsm/controls/DragControls.js +2 -2
  18. package/examples/jsm/controls/FirstPersonControls.js +58 -54
  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 +34 -2
  24. package/examples/jsm/csm/CSM.js +2 -1
  25. package/examples/jsm/csm/CSMShadowNode.js +6 -2
  26. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  27. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  28. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  29. package/examples/jsm/exporters/EXRExporter.js +1 -1
  30. package/examples/jsm/exporters/GLTFExporter.js +152 -9
  31. package/examples/jsm/exporters/USDZExporter.js +22 -3
  32. package/examples/jsm/geometries/DecalGeometry.js +1 -1
  33. package/examples/jsm/geometries/TextGeometry.js +18 -0
  34. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  35. package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
  36. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  37. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  38. package/examples/jsm/helpers/ViewHelper.js +67 -8
  39. package/examples/jsm/inspector/Extension.js +13 -0
  40. package/examples/jsm/inspector/Inspector.js +203 -88
  41. package/examples/jsm/inspector/RendererInspector.js +14 -4
  42. package/examples/jsm/inspector/extensions/extensions.json +6 -0
  43. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
  44. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
  45. package/examples/jsm/inspector/tabs/Console.js +41 -7
  46. package/examples/jsm/inspector/tabs/Memory.js +128 -0
  47. package/examples/jsm/inspector/tabs/Parameters.js +51 -3
  48. package/examples/jsm/inspector/tabs/Performance.js +4 -4
  49. package/examples/jsm/inspector/tabs/Settings.js +264 -0
  50. package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
  51. package/examples/jsm/inspector/tabs/Viewer.js +107 -5
  52. package/examples/jsm/inspector/ui/Graph.js +2 -2
  53. package/examples/jsm/inspector/ui/List.js +1 -1
  54. package/examples/jsm/inspector/ui/Profiler.js +1936 -34
  55. package/examples/jsm/inspector/ui/Style.js +1044 -31
  56. package/examples/jsm/inspector/ui/Tab.js +222 -3
  57. package/examples/jsm/inspector/ui/Values.js +55 -2
  58. package/examples/jsm/inspector/ui/utils.js +13 -0
  59. package/examples/jsm/interaction/InteractionManager.js +226 -0
  60. package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
  61. package/examples/jsm/lighting/DynamicLighting.js +82 -0
  62. package/examples/jsm/lighting/LightProbeGrid.js +651 -0
  63. package/examples/jsm/lines/LineMaterial.js +7 -1
  64. package/examples/jsm/loaders/3DMLoader.js +5 -4
  65. package/examples/jsm/loaders/3MFLoader.js +2 -2
  66. package/examples/jsm/loaders/AMFLoader.js +2 -2
  67. package/examples/jsm/loaders/ColladaLoader.js +24 -4026
  68. package/examples/jsm/loaders/DRACOLoader.js +5 -5
  69. package/examples/jsm/loaders/EXRLoader.js +687 -48
  70. package/examples/jsm/loaders/FBXLoader.js +235 -37
  71. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  72. package/examples/jsm/loaders/GLTFLoader.js +146 -178
  73. package/examples/jsm/loaders/HDRLoader.js +1 -2
  74. package/examples/jsm/loaders/KMZLoader.js +5 -5
  75. package/examples/jsm/loaders/KTX2Loader.js +27 -5
  76. package/examples/jsm/loaders/LDrawLoader.js +41 -50
  77. package/examples/jsm/loaders/LWOLoader.js +7 -39
  78. package/examples/jsm/loaders/NRRDLoader.js +2 -2
  79. package/examples/jsm/loaders/PCDLoader.js +4 -2
  80. package/examples/jsm/loaders/SVGLoader.js +2 -2
  81. package/examples/jsm/loaders/TDSLoader.js +0 -2
  82. package/examples/jsm/loaders/TGALoader.js +0 -2
  83. package/examples/jsm/loaders/USDLoader.js +100 -40
  84. package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
  85. package/examples/jsm/loaders/VOXLoader.js +660 -117
  86. package/examples/jsm/loaders/VRMLLoader.js +79 -2
  87. package/examples/jsm/loaders/VTKLoader.js +42 -25
  88. package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
  89. package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
  90. package/examples/jsm/loaders/usd/USDAParser.js +450 -363
  91. package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
  92. package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
  93. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  94. package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
  95. package/examples/jsm/math/Octree.js +131 -1
  96. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  97. package/examples/jsm/misc/RollerCoaster.js +42 -4
  98. package/examples/jsm/misc/Volume.js +0 -1
  99. package/examples/jsm/misc/VolumeSlice.js +0 -1
  100. package/examples/jsm/modifiers/TessellateModifier.js +1 -1
  101. package/examples/jsm/objects/LensflareMesh.js +1 -1
  102. package/examples/jsm/objects/Reflector.js +73 -25
  103. package/examples/jsm/objects/Sky.js +90 -6
  104. package/examples/jsm/objects/SkyMesh.js +150 -16
  105. package/examples/jsm/objects/Water.js +4 -3
  106. package/examples/jsm/objects/Water2.js +5 -3
  107. package/examples/jsm/objects/WaterMesh.js +5 -7
  108. package/examples/jsm/physics/AmmoPhysics.js +12 -7
  109. package/examples/jsm/physics/JoltPhysics.js +10 -6
  110. package/examples/jsm/physics/RapierPhysics.js +9 -5
  111. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  112. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  113. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  114. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  115. package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
  116. package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
  117. package/examples/jsm/renderers/Projector.js +246 -28
  118. package/examples/jsm/renderers/SVGRenderer.js +174 -60
  119. package/examples/jsm/shaders/GTAOShader.js +19 -6
  120. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  121. package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
  122. package/examples/jsm/shaders/SAOShader.js +17 -4
  123. package/examples/jsm/shaders/SSAOShader.js +11 -1
  124. package/examples/jsm/shaders/SSRShader.js +6 -5
  125. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
  126. package/examples/jsm/shaders/VignetteShader.js +1 -1
  127. package/examples/jsm/transpiler/AST.js +44 -0
  128. package/examples/jsm/transpiler/GLSLDecoder.js +63 -6
  129. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  130. package/examples/jsm/transpiler/TSLEncoder.js +46 -3
  131. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  132. package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
  133. package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
  134. package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
  135. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  136. package/examples/jsm/tsl/display/AnamorphicNode.js +12 -1
  137. package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
  138. package/examples/jsm/tsl/display/BloomNode.js +16 -6
  139. package/examples/jsm/tsl/display/CRT.js +150 -0
  140. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
  141. package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
  142. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
  143. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  144. package/examples/jsm/tsl/display/FSR1Node.js +477 -0
  145. package/examples/jsm/tsl/display/FXAANode.js +2 -2
  146. package/examples/jsm/tsl/display/GTAONode.js +6 -4
  147. package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
  148. package/examples/jsm/tsl/display/GodraysNode.js +615 -0
  149. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  150. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  151. package/examples/jsm/tsl/display/OutlineNode.js +69 -19
  152. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  153. package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
  154. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  155. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  156. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  157. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  158. package/examples/jsm/tsl/display/SSGINode.js +8 -24
  159. package/examples/jsm/tsl/display/SSRNode.js +8 -8
  160. package/examples/jsm/tsl/display/SSSNode.js +6 -4
  161. package/examples/jsm/tsl/display/Shape.js +29 -0
  162. package/examples/jsm/tsl/display/SharpenNode.js +283 -0
  163. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  164. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  165. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  166. package/examples/jsm/tsl/display/TAAUNode.js +835 -0
  167. package/examples/jsm/tsl/display/TRAANode.js +315 -126
  168. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  169. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  170. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  171. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
  172. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
  173. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
  174. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
  175. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
  176. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
  177. package/examples/jsm/tsl/math/Bayer.js +53 -3
  178. package/examples/jsm/utils/BufferGeometryUtils.js +2 -3
  179. package/examples/jsm/utils/ColorUtils.js +76 -0
  180. package/examples/jsm/utils/LDrawUtils.js +1 -1
  181. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  182. package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
  183. package/examples/jsm/utils/SkeletonUtils.js +14 -8
  184. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  185. package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
  186. package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
  187. package/package.json +24 -30
  188. package/src/Three.Core.js +3 -1
  189. package/src/Three.TSL.js +25 -11
  190. package/src/Three.WebGPU.Nodes.js +5 -0
  191. package/src/Three.WebGPU.js +9 -0
  192. package/src/Three.js +1 -0
  193. package/src/animation/AnimationAction.js +12 -2
  194. package/src/animation/AnimationClip.js +1 -1
  195. package/src/animation/AnimationMixer.js +6 -0
  196. package/src/animation/AnimationUtils.js +1 -12
  197. package/src/animation/KeyframeTrack.js +47 -8
  198. package/src/animation/PropertyMixer.js +4 -4
  199. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  200. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  201. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  202. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  203. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  204. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  205. package/src/audio/Audio.js +1 -1
  206. package/src/audio/AudioContext.js +2 -2
  207. package/src/audio/AudioListener.js +5 -3
  208. package/src/cameras/Camera.js +32 -2
  209. package/src/cameras/CubeCamera.js +20 -0
  210. package/src/constants.js +90 -5
  211. package/src/core/BufferAttribute.js +13 -1
  212. package/src/core/BufferGeometry.js +14 -2
  213. package/src/core/Clock.js +7 -0
  214. package/src/core/Object3D.js +52 -4
  215. package/src/core/Raycaster.js +2 -2
  216. package/src/core/RenderTarget.js +4 -4
  217. package/src/extras/PMREMGenerator.js +7 -18
  218. package/src/extras/TextureUtils.js +5 -1
  219. package/src/extras/curves/CatmullRomCurve3.js +3 -2
  220. package/src/geometries/ExtrudeGeometry.js +2 -2
  221. package/src/geometries/PolyhedronGeometry.js +1 -1
  222. package/src/geometries/TorusGeometry.js +8 -3
  223. package/src/helpers/CameraHelper.js +3 -0
  224. package/src/helpers/DirectionalLightHelper.js +4 -1
  225. package/src/helpers/HemisphereLightHelper.js +3 -0
  226. package/src/helpers/PointLightHelper.js +1 -25
  227. package/src/helpers/SpotLightHelper.js +3 -0
  228. package/src/lights/DirectionalLight.js +13 -0
  229. package/src/lights/HemisphereLight.js +10 -0
  230. package/src/lights/Light.js +1 -11
  231. package/src/lights/LightProbe.js +0 -15
  232. package/src/lights/LightShadow.js +15 -6
  233. package/src/lights/PointLight.js +15 -0
  234. package/src/lights/PointLightShadow.js +0 -86
  235. package/src/lights/SpotLight.js +22 -1
  236. package/src/lights/webgpu/IESSpotLight.js +2 -1
  237. package/src/loaders/AudioLoader.js +11 -1
  238. package/src/loaders/Cache.js +28 -0
  239. package/src/loaders/DataTextureLoader.js +6 -4
  240. package/src/loaders/FileLoader.js +2 -3
  241. package/src/loaders/ImageBitmapLoader.js +12 -9
  242. package/src/loaders/Loader.js +6 -0
  243. package/src/loaders/MaterialLoader.js +3 -2
  244. package/src/loaders/ObjectLoader.js +46 -6
  245. package/src/loaders/nodes/NodeLoader.js +2 -2
  246. package/src/loaders/nodes/NodeObjectLoader.js +18 -0
  247. package/src/materials/Material.js +2 -0
  248. package/src/materials/MeshLambertMaterial.js +9 -0
  249. package/src/materials/MeshPhongMaterial.js +9 -0
  250. package/src/materials/MeshToonMaterial.js +1 -1
  251. package/src/materials/ShaderMaterial.js +20 -1
  252. package/src/materials/nodes/Line2NodeMaterial.js +34 -7
  253. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
  254. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
  255. package/src/materials/nodes/NodeMaterial.js +45 -25
  256. package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -86
  257. package/src/math/Line3.js +6 -5
  258. package/src/math/MathUtils.js +10 -10
  259. package/src/math/Matrix2.js +13 -9
  260. package/src/math/Matrix3.js +13 -9
  261. package/src/math/Matrix4.js +87 -74
  262. package/src/math/Plane.js +4 -3
  263. package/src/math/Quaternion.js +3 -29
  264. package/src/math/Sphere.js +1 -1
  265. package/src/math/Triangle.js +1 -1
  266. package/src/math/Vector2.js +11 -7
  267. package/src/math/Vector3.js +15 -13
  268. package/src/math/Vector4.js +13 -9
  269. package/src/math/interpolants/BezierInterpolant.js +108 -0
  270. package/src/nodes/Nodes.js +86 -68
  271. package/src/nodes/TSL.js +7 -7
  272. package/src/nodes/accessors/Arrays.js +1 -1
  273. package/src/nodes/accessors/BatchNode.js +10 -10
  274. package/src/nodes/accessors/Bitangent.js +5 -5
  275. package/src/nodes/accessors/BufferAttributeNode.js +107 -15
  276. package/src/nodes/accessors/BufferNode.js +29 -2
  277. package/src/nodes/accessors/Camera.js +149 -28
  278. package/src/nodes/accessors/ClippingNode.js +4 -4
  279. package/src/nodes/accessors/CubeTextureNode.js +27 -2
  280. package/src/nodes/accessors/InstanceNode.js +148 -43
  281. package/src/nodes/accessors/MaterialNode.js +9 -1
  282. package/src/nodes/accessors/MaterialProperties.js +2 -5
  283. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  284. package/src/nodes/accessors/ModelNode.js +1 -1
  285. package/src/nodes/accessors/Normal.js +11 -11
  286. package/src/nodes/accessors/Object3DNode.js +1 -1
  287. package/src/nodes/accessors/Position.js +34 -2
  288. package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
  289. package/src/nodes/accessors/ReferenceNode.js +8 -8
  290. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  291. package/src/nodes/accessors/SceneProperties.js +47 -0
  292. package/src/nodes/accessors/SkinningNode.js +27 -26
  293. package/src/nodes/accessors/StorageBufferNode.js +14 -25
  294. package/src/nodes/accessors/StorageTextureNode.js +40 -9
  295. package/src/nodes/accessors/Tangent.js +4 -14
  296. package/src/nodes/accessors/Texture3DNode.js +32 -35
  297. package/src/nodes/accessors/TextureNode.js +67 -23
  298. package/src/nodes/accessors/UniformArrayNode.js +6 -4
  299. package/src/nodes/accessors/UserDataNode.js +1 -2
  300. package/src/nodes/accessors/VertexColorNode.js +1 -2
  301. package/src/nodes/code/FunctionCallNode.js +1 -1
  302. package/src/nodes/code/FunctionNode.js +2 -3
  303. package/src/nodes/core/ArrayNode.js +21 -2
  304. package/src/nodes/core/AssignNode.js +3 -3
  305. package/src/nodes/core/AttributeNode.js +3 -3
  306. package/src/nodes/core/BypassNode.js +1 -1
  307. package/src/nodes/core/ContextNode.js +104 -5
  308. package/src/nodes/core/IndexNode.js +2 -1
  309. package/src/nodes/core/InputNode.js +1 -1
  310. package/src/nodes/core/InspectorNode.js +1 -1
  311. package/src/nodes/core/IsolateNode.js +1 -1
  312. package/src/nodes/core/MRTNode.js +48 -2
  313. package/src/nodes/core/Node.js +112 -15
  314. package/src/nodes/core/NodeBuilder.js +284 -66
  315. package/src/nodes/core/NodeError.js +28 -0
  316. package/src/nodes/core/NodeFrame.js +12 -4
  317. package/src/nodes/core/NodeUtils.js +11 -9
  318. package/src/nodes/core/OutputStructNode.js +12 -10
  319. package/src/nodes/core/ParameterNode.js +4 -4
  320. package/src/nodes/core/PropertyNode.js +19 -3
  321. package/src/nodes/core/StackNode.js +66 -17
  322. package/src/nodes/core/StackTrace.js +139 -0
  323. package/src/nodes/core/StructNode.js +17 -3
  324. package/src/nodes/core/StructTypeNode.js +12 -18
  325. package/src/nodes/core/SubBuildNode.js +2 -2
  326. package/src/nodes/core/UniformGroupNode.js +36 -6
  327. package/src/nodes/core/UniformNode.js +21 -5
  328. package/src/nodes/core/VarNode.js +48 -23
  329. package/src/nodes/core/VaryingNode.js +2 -19
  330. package/src/nodes/display/BlendModes.js +0 -64
  331. package/src/nodes/display/ColorAdjustment.js +17 -0
  332. package/src/nodes/display/ColorSpaceNode.js +3 -3
  333. package/src/nodes/display/NormalMapNode.js +39 -4
  334. package/src/nodes/display/PassNode.js +125 -16
  335. package/src/nodes/display/RenderOutputNode.js +7 -7
  336. package/src/nodes/display/ScreenNode.js +4 -2
  337. package/src/nodes/display/ToneMappingNode.js +1 -1
  338. package/src/nodes/display/ToonOutlinePassNode.js +2 -2
  339. package/src/nodes/display/ViewportDepthNode.js +52 -4
  340. package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
  341. package/src/nodes/display/ViewportTextureNode.js +39 -11
  342. package/src/nodes/fog/Fog.js +18 -35
  343. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
  344. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  345. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  346. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  347. package/src/nodes/functions/PhysicalLightingModel.js +126 -45
  348. package/src/nodes/geometry/RangeNode.js +5 -3
  349. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  350. package/src/nodes/gpgpu/BarrierNode.js +9 -0
  351. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
  352. package/src/nodes/gpgpu/ComputeNode.js +74 -48
  353. package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
  354. package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
  355. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  356. package/src/nodes/lighting/EnvironmentNode.js +28 -3
  357. package/src/nodes/lighting/LightsNode.js +7 -28
  358. package/src/nodes/lighting/PointShadowNode.js +162 -149
  359. package/src/nodes/lighting/ShadowFilterNode.js +53 -65
  360. package/src/nodes/lighting/ShadowNode.js +120 -42
  361. package/src/nodes/math/BitcastNode.js +1 -1
  362. package/src/nodes/math/BitcountNode.js +433 -0
  363. package/src/nodes/math/ConditionalNode.js +3 -3
  364. package/src/nodes/math/MathNode.js +76 -41
  365. package/src/nodes/math/OperatorNode.js +3 -2
  366. package/src/nodes/math/PackFloatNode.js +98 -0
  367. package/src/nodes/math/UnpackFloatNode.js +96 -0
  368. package/src/nodes/pmrem/PMREMNode.js +1 -1
  369. package/src/nodes/pmrem/PMREMUtils.js +9 -15
  370. package/src/nodes/tsl/TSLBase.js +1 -1
  371. package/src/nodes/tsl/TSLCore.js +38 -17
  372. package/src/nodes/utils/ArrayElementNode.js +14 -1
  373. package/src/nodes/utils/ConvertNode.js +1 -1
  374. package/src/nodes/utils/DebugNode.js +12 -12
  375. package/src/nodes/utils/EventNode.js +31 -2
  376. package/src/nodes/utils/FlipNode.js +1 -1
  377. package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
  378. package/src/nodes/utils/JoinNode.js +3 -3
  379. package/src/nodes/utils/LoopNode.js +1 -1
  380. package/src/nodes/utils/MemberNode.js +2 -2
  381. package/src/nodes/utils/Packing.js +13 -1
  382. package/src/nodes/utils/PostProcessingUtils.js +33 -1
  383. package/src/nodes/utils/RTTNode.js +1 -1
  384. package/src/nodes/utils/ReflectorNode.js +3 -4
  385. package/src/nodes/utils/Remap.js +48 -0
  386. package/src/nodes/utils/RotateNode.js +1 -1
  387. package/src/nodes/utils/SampleNode.js +1 -1
  388. package/src/nodes/utils/SetNode.js +1 -1
  389. package/src/nodes/utils/SplitNode.js +1 -1
  390. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  391. package/src/nodes/utils/UVUtils.js +28 -0
  392. package/src/objects/BatchedMesh.js +44 -16
  393. package/src/objects/InstancedMesh.js +30 -3
  394. package/src/objects/Line.js +1 -1
  395. package/src/objects/Mesh.js +1 -1
  396. package/src/objects/Points.js +1 -1
  397. package/src/objects/Skeleton.js +9 -0
  398. package/src/objects/SkinnedMesh.js +26 -9
  399. package/src/renderers/WebGLRenderer.js +329 -145
  400. package/src/renderers/common/Animation.js +3 -3
  401. package/src/renderers/common/Attributes.js +15 -1
  402. package/src/renderers/common/Backend.js +29 -8
  403. package/src/renderers/common/Background.js +26 -13
  404. package/src/renderers/common/BindGroup.js +1 -16
  405. package/src/renderers/common/Binding.js +11 -0
  406. package/src/renderers/common/Bindings.js +29 -14
  407. package/src/renderers/common/BlendMode.js +143 -0
  408. package/src/renderers/common/Buffer.js +40 -0
  409. package/src/renderers/common/BundleGroup.js +1 -1
  410. package/src/renderers/common/ChainMap.js +30 -6
  411. package/src/renderers/common/ComputePipeline.js +1 -1
  412. package/src/renderers/common/CubeRenderTarget.js +51 -7
  413. package/src/renderers/common/Geometries.js +29 -3
  414. package/src/renderers/common/Info.js +333 -4
  415. package/src/renderers/common/InspectorBase.js +6 -1
  416. package/src/renderers/common/Lighting.js +5 -21
  417. package/src/renderers/common/Pipelines.js +40 -7
  418. package/src/renderers/common/PostProcessing.js +8 -206
  419. package/src/renderers/common/ReadbackBuffer.js +78 -0
  420. package/src/renderers/common/RenderBundle.js +3 -1
  421. package/src/renderers/common/RenderBundles.js +7 -3
  422. package/src/renderers/common/RenderContext.js +16 -0
  423. package/src/renderers/common/RenderContexts.js +33 -49
  424. package/src/renderers/common/RenderLists.js +2 -1
  425. package/src/renderers/common/RenderObject.js +17 -5
  426. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  427. package/src/renderers/common/RenderObjects.js +21 -5
  428. package/src/renderers/common/RenderPipeline.js +232 -17
  429. package/src/renderers/common/Renderer.js +481 -117
  430. package/src/renderers/common/Sampler.js +4 -4
  431. package/src/renderers/common/StorageBuffer.js +13 -1
  432. package/src/renderers/common/Textures.js +89 -4
  433. package/src/renderers/common/TimestampQueryPool.js +5 -3
  434. package/src/renderers/common/Uniform.js +8 -0
  435. package/src/renderers/common/UniformsGroup.js +62 -1
  436. package/src/renderers/common/XRManager.js +37 -29
  437. package/src/renderers/common/extras/PMREMGenerator.js +25 -23
  438. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  439. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +242 -99
  440. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  441. package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
  442. package/src/renderers/shaders/DFGLUTData.js +19 -34
  443. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  444. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  445. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  446. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  447. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  448. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  449. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
  450. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
  451. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
  452. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  453. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  454. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
  455. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  456. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
  457. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
  458. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  459. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
  460. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
  461. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
  462. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  463. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  464. package/src/renderers/shaders/ShaderChunk.js +5 -3
  465. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
  466. package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
  467. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
  468. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  469. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  470. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  471. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  472. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  473. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  474. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  475. package/src/renderers/shaders/ShaderLib.js +7 -6
  476. package/src/renderers/shaders/UniformsLib.js +7 -5
  477. package/src/renderers/shaders/UniformsUtils.js +27 -5
  478. package/src/renderers/webgl/WebGLAnimation.js +2 -1
  479. package/src/renderers/webgl/WebGLBackground.js +15 -15
  480. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  481. package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
  482. package/src/renderers/webgl/WebGLCapabilities.js +9 -4
  483. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  484. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  485. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
  486. package/src/renderers/webgl/WebGLLights.js +18 -1
  487. package/src/renderers/webgl/WebGLMaterials.js +24 -13
  488. package/src/renderers/webgl/WebGLObjects.js +3 -1
  489. package/src/renderers/webgl/WebGLOutput.js +270 -0
  490. package/src/renderers/webgl/WebGLProgram.js +49 -109
  491. package/src/renderers/webgl/WebGLPrograms.js +63 -51
  492. package/src/renderers/webgl/WebGLRenderLists.js +15 -0
  493. package/src/renderers/webgl/WebGLRenderStates.js +13 -2
  494. package/src/renderers/webgl/WebGLShadowMap.js +188 -24
  495. package/src/renderers/webgl/WebGLState.js +75 -37
  496. package/src/renderers/webgl/WebGLTextures.js +215 -54
  497. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  498. package/src/renderers/webgl/WebGLUniformsGroups.js +19 -0
  499. package/src/renderers/webgl/WebGLUtils.js +6 -2
  500. package/src/renderers/webgl-fallback/WebGLBackend.js +253 -82
  501. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
  502. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +173 -74
  503. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
  504. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
  505. package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
  506. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +68 -53
  507. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
  508. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
  509. package/src/renderers/webgpu/WebGPUBackend.js +260 -140
  510. package/src/renderers/webgpu/WebGPURenderer.js +2 -1
  511. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +366 -90
  512. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +107 -34
  513. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
  514. package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
  515. package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
  516. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
  517. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
  518. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +156 -59
  519. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
  520. package/src/renderers/webgpu/utils/WebGPUUtils.js +33 -11
  521. package/src/renderers/webxr/WebXRController.js +12 -0
  522. package/src/renderers/webxr/WebXRManager.js +4 -2
  523. package/src/textures/CubeDepthTexture.js +76 -0
  524. package/src/textures/HTMLTexture.js +74 -0
  525. package/src/textures/Source.js +2 -2
  526. package/src/textures/Texture.js +16 -5
  527. package/src/utils.js +280 -3
  528. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  529. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  530. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  531. package/src/nodes/accessors/SceneNode.js +0 -145
  532. package/src/nodes/code/ScriptableNode.js +0 -726
  533. package/src/nodes/code/ScriptableValueNode.js +0 -253
  534. package/src/nodes/display/PosterizeNode.js +0 -65
  535. package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
  536. package/src/nodes/utils/RemapNode.js +0 -125
  537. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  538. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  539. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -12,6 +12,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
12
12
 
13
13
  const _imageDimensions = new Vector2();
14
14
  const _videoTextures = new WeakMap();
15
+ const _htmlTextures = new Set();
15
16
  let _canvas;
16
17
 
17
18
  const _sources = new WeakMap(); // maps WebglTexture objects to instances of Source
@@ -28,9 +29,9 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
28
29
  try {
29
30
 
30
31
  useOffscreenCanvas = typeof OffscreenCanvas !== 'undefined'
31
- // eslint-disable-next-line compat/compat
32
32
  && ( new OffscreenCanvas( 1, 1 ).getContext( '2d' ) ) !== null;
33
33
 
34
+
34
35
  } catch ( err ) {
35
36
 
36
37
  // Ignore any errors
@@ -42,7 +43,6 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
42
43
  // Use OffscreenCanvas when available. Specially needed in web workers
43
44
 
44
45
  return useOffscreenCanvas ?
45
- // eslint-disable-next-line compat/compat
46
46
  new OffscreenCanvas( width, height ) : createElementNS( 'canvas' );
47
47
 
48
48
  }
@@ -130,7 +130,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
130
130
 
131
131
  }
132
132
 
133
- function getInternalFormat( internalFormatName, glFormat, glType, colorSpace, forceLinearTransfer = false ) {
133
+ function getInternalFormat( internalFormatName, glFormat, glType, normalized, colorSpace, forceLinearTransfer = false ) {
134
134
 
135
135
  if ( internalFormatName !== null ) {
136
136
 
@@ -140,6 +140,20 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
140
140
 
141
141
  }
142
142
 
143
+ let ext_texture_norm16;
144
+
145
+ if ( normalized ) {
146
+
147
+ ext_texture_norm16 = extensions.get( 'EXT_texture_norm16' );
148
+
149
+ if ( ! ext_texture_norm16 ) {
150
+
151
+ warn( 'WebGLRenderer: Unable to use normalized textures without EXT_texture_norm16 extension' );
152
+
153
+ }
154
+
155
+ }
156
+
143
157
  let internalFormat = glFormat;
144
158
 
145
159
  if ( glFormat === _gl.RED ) {
@@ -147,6 +161,8 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
147
161
  if ( glType === _gl.FLOAT ) internalFormat = _gl.R32F;
148
162
  if ( glType === _gl.HALF_FLOAT ) internalFormat = _gl.R16F;
149
163
  if ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.R8;
164
+ if ( glType === _gl.UNSIGNED_SHORT && ext_texture_norm16 ) internalFormat = ext_texture_norm16.R16_EXT;
165
+ if ( glType === _gl.SHORT && ext_texture_norm16 ) internalFormat = ext_texture_norm16.R16_SNORM_EXT;
150
166
 
151
167
  }
152
168
 
@@ -166,6 +182,8 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
166
182
  if ( glType === _gl.FLOAT ) internalFormat = _gl.RG32F;
167
183
  if ( glType === _gl.HALF_FLOAT ) internalFormat = _gl.RG16F;
168
184
  if ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.RG8;
185
+ if ( glType === _gl.UNSIGNED_SHORT && ext_texture_norm16 ) internalFormat = ext_texture_norm16.RG16_EXT;
186
+ if ( glType === _gl.SHORT && ext_texture_norm16 ) internalFormat = ext_texture_norm16.RG16_SNORM_EXT;
169
187
 
170
188
  }
171
189
 
@@ -204,6 +222,8 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
204
222
 
205
223
  if ( glFormat === _gl.RGB ) {
206
224
 
225
+ if ( glType === _gl.UNSIGNED_SHORT && ext_texture_norm16 ) internalFormat = ext_texture_norm16.RGB16_EXT;
226
+ if ( glType === _gl.SHORT && ext_texture_norm16 ) internalFormat = ext_texture_norm16.RGB16_SNORM_EXT;
207
227
  if ( glType === _gl.UNSIGNED_INT_5_9_9_9_REV ) internalFormat = _gl.RGB9_E5;
208
228
  if ( glType === _gl.UNSIGNED_INT_10F_11F_11F_REV ) internalFormat = _gl.R11F_G11F_B10F;
209
229
 
@@ -216,6 +236,8 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
216
236
  if ( glType === _gl.FLOAT ) internalFormat = _gl.RGBA32F;
217
237
  if ( glType === _gl.HALF_FLOAT ) internalFormat = _gl.RGBA16F;
218
238
  if ( glType === _gl.UNSIGNED_BYTE ) internalFormat = ( transfer === SRGBTransfer ) ? _gl.SRGB8_ALPHA8 : _gl.RGBA8;
239
+ if ( glType === _gl.UNSIGNED_SHORT && ext_texture_norm16 ) internalFormat = ext_texture_norm16.RGBA16_EXT;
240
+ if ( glType === _gl.SHORT && ext_texture_norm16 ) internalFormat = ext_texture_norm16.RGBA16_SNORM_EXT;
219
241
  if ( glType === _gl.UNSIGNED_SHORT_4_4_4_4 ) internalFormat = _gl.RGBA4;
220
242
  if ( glType === _gl.UNSIGNED_SHORT_5_5_5_1 ) internalFormat = _gl.RGB5_A1;
221
243
 
@@ -317,6 +339,12 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
317
339
 
318
340
  }
319
341
 
342
+ if ( texture.isHTMLTexture ) {
343
+
344
+ _htmlTextures.delete( texture );
345
+
346
+ }
347
+
320
348
  }
321
349
 
322
350
  function onRenderTargetDispose( event ) {
@@ -473,6 +501,18 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
473
501
 
474
502
  }
475
503
 
504
+ function getTextureUnits() {
505
+
506
+ return textureUnits;
507
+
508
+ }
509
+
510
+ function setTextureUnits( value ) {
511
+
512
+ textureUnits = value;
513
+
514
+ }
515
+
476
516
  function allocateTextureUnit() {
477
517
 
478
518
  const textureUnit = textureUnits;
@@ -590,7 +630,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
590
630
 
591
631
  const textureProperties = properties.get( texture );
592
632
 
593
- if ( texture.version > 0 && textureProperties.__version !== texture.version ) {
633
+ if ( texture.isCubeDepthTexture !== true && texture.version > 0 && textureProperties.__version !== texture.version ) {
594
634
 
595
635
  uploadCubeTexture( textureProperties, texture, slot );
596
636
  return;
@@ -827,11 +867,11 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
827
867
  // Trim the array to only contain the merged ranges.
828
868
  updateRanges.length = mergeIndex + 1;
829
869
 
830
- const currentUnpackRowLen = _gl.getParameter( _gl.UNPACK_ROW_LENGTH );
831
- const currentUnpackSkipPixels = _gl.getParameter( _gl.UNPACK_SKIP_PIXELS );
832
- const currentUnpackSkipRows = _gl.getParameter( _gl.UNPACK_SKIP_ROWS );
870
+ const currentUnpackRowLen = state.getParameter( _gl.UNPACK_ROW_LENGTH );
871
+ const currentUnpackSkipPixels = state.getParameter( _gl.UNPACK_SKIP_PIXELS );
872
+ const currentUnpackSkipRows = state.getParameter( _gl.UNPACK_SKIP_ROWS );
833
873
 
834
- _gl.pixelStorei( _gl.UNPACK_ROW_LENGTH, image.width );
874
+ state.pixelStorei( _gl.UNPACK_ROW_LENGTH, image.width );
835
875
 
836
876
  for ( let i = 0, l = updateRanges.length; i < l; i ++ ) {
837
877
 
@@ -847,8 +887,8 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
847
887
  const width = pixelCount;
848
888
  const height = 1;
849
889
 
850
- _gl.pixelStorei( _gl.UNPACK_SKIP_PIXELS, x );
851
- _gl.pixelStorei( _gl.UNPACK_SKIP_ROWS, y );
890
+ state.pixelStorei( _gl.UNPACK_SKIP_PIXELS, x );
891
+ state.pixelStorei( _gl.UNPACK_SKIP_ROWS, y );
852
892
 
853
893
  state.texSubImage2D( _gl.TEXTURE_2D, 0, x, y, width, height, glFormat, glType, image.data );
854
894
 
@@ -856,11 +896,12 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
856
896
 
857
897
  texture.clearUpdateRanges();
858
898
 
859
- _gl.pixelStorei( _gl.UNPACK_ROW_LENGTH, currentUnpackRowLen );
860
- _gl.pixelStorei( _gl.UNPACK_SKIP_PIXELS, currentUnpackSkipPixels );
861
- _gl.pixelStorei( _gl.UNPACK_SKIP_ROWS, currentUnpackSkipRows );
899
+ state.pixelStorei( _gl.UNPACK_ROW_LENGTH, currentUnpackRowLen );
900
+ state.pixelStorei( _gl.UNPACK_SKIP_PIXELS, currentUnpackSkipPixels );
901
+ state.pixelStorei( _gl.UNPACK_SKIP_ROWS, currentUnpackSkipRows );
862
902
 
863
903
  }
904
+
864
905
  }
865
906
 
866
907
  function setDeferTextureUploads( deferFlag ) {
@@ -918,14 +959,21 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
918
959
 
919
960
  state.activeTexture( _gl.TEXTURE0 + slot );
920
961
 
921
- const workingPrimaries = ColorManagement.getPrimaries( ColorManagement.workingColorSpace );
922
- const texturePrimaries = texture.colorSpace === NoColorSpace ? null : ColorManagement.getPrimaries( texture.colorSpace );
923
- const unpackConversion = texture.colorSpace === NoColorSpace || workingPrimaries === texturePrimaries ? _gl.NONE : _gl.BROWSER_DEFAULT_WEBGL;
962
+ const isImageBitmap = ( typeof ImageBitmap !== 'undefined' && texture.image instanceof ImageBitmap );
924
963
 
925
- _gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );
926
- _gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );
927
- _gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );
928
- _gl.pixelStorei( _gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, unpackConversion );
964
+ if ( isImageBitmap === false ) {
965
+
966
+ const workingPrimaries = ColorManagement.getPrimaries( ColorManagement.workingColorSpace );
967
+ const texturePrimaries = texture.colorSpace === NoColorSpace ? null : ColorManagement.getPrimaries( texture.colorSpace );
968
+ const unpackConversion = texture.colorSpace === NoColorSpace || workingPrimaries === texturePrimaries ? _gl.NONE : _gl.BROWSER_DEFAULT_WEBGL;
969
+
970
+ state.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );
971
+ state.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );
972
+ state.pixelStorei( _gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, unpackConversion );
973
+
974
+ }
975
+
976
+ state.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );
929
977
 
930
978
  let image = resizeImage( texture.image, false, capabilities.maxTextureSize );
931
979
  image = verifyColorSpace( texture, image );
@@ -933,7 +981,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
933
981
  const glFormat = utils.convert( texture.format, texture.colorSpace );
934
982
 
935
983
  const glType = utils.convert( texture.type );
936
- let glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace, texture.isVideoTexture );
984
+ let glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.normalized, texture.colorSpace, texture.isVideoTexture );
937
985
 
938
986
  setTextureParameters( textureType, texture );
939
987
 
@@ -1250,6 +1298,59 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
1250
1298
 
1251
1299
  }
1252
1300
 
1301
+ } else if ( texture.isHTMLTexture ) {
1302
+
1303
+ if ( 'texElementImage2D' in _gl ) {
1304
+
1305
+ const canvas = _gl.canvas;
1306
+
1307
+ // Ensure the canvas supports HTML-in-Canvas and the element is a child.
1308
+ if ( ! canvas.hasAttribute( 'layoutsubtree' ) ) {
1309
+
1310
+ canvas.setAttribute( 'layoutsubtree', 'true' );
1311
+
1312
+ }
1313
+
1314
+ if ( image.parentNode !== canvas ) {
1315
+
1316
+ canvas.appendChild( image );
1317
+
1318
+ // Register and set up a shared paint callback for all HTMLTextures.
1319
+ _htmlTextures.add( texture );
1320
+
1321
+ canvas.onpaint = ( event ) => {
1322
+
1323
+ const changed = event.changedElements;
1324
+
1325
+ for ( const t of _htmlTextures ) {
1326
+
1327
+ if ( changed.includes( t.image ) ) {
1328
+
1329
+ t.needsUpdate = true;
1330
+
1331
+ }
1332
+
1333
+ }
1334
+
1335
+ };
1336
+
1337
+ canvas.requestPaint();
1338
+ return;
1339
+
1340
+ }
1341
+
1342
+ const level = 0;
1343
+ const internalFormat = _gl.RGBA;
1344
+ const srcFormat = _gl.RGBA;
1345
+ const srcType = _gl.UNSIGNED_BYTE;
1346
+
1347
+ _gl.texElementImage2D( _gl.TEXTURE_2D, level, internalFormat, srcFormat, srcType, image );
1348
+ _gl.texParameteri( _gl.TEXTURE_2D, _gl.TEXTURE_MIN_FILTER, _gl.LINEAR );
1349
+ _gl.texParameteri( _gl.TEXTURE_2D, _gl.TEXTURE_WRAP_S, _gl.CLAMP_TO_EDGE );
1350
+ _gl.texParameteri( _gl.TEXTURE_2D, _gl.TEXTURE_WRAP_T, _gl.CLAMP_TO_EDGE );
1351
+
1352
+ }
1353
+
1253
1354
  } else {
1254
1355
 
1255
1356
  // regular Texture (image, video, canvas)
@@ -1354,10 +1455,10 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
1354
1455
  const texturePrimaries = texture.colorSpace === NoColorSpace ? null : ColorManagement.getPrimaries( texture.colorSpace );
1355
1456
  const unpackConversion = texture.colorSpace === NoColorSpace || workingPrimaries === texturePrimaries ? _gl.NONE : _gl.BROWSER_DEFAULT_WEBGL;
1356
1457
 
1357
- _gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );
1358
- _gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );
1359
- _gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );
1360
- _gl.pixelStorei( _gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, unpackConversion );
1458
+ state.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );
1459
+ state.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );
1460
+ state.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );
1461
+ state.pixelStorei( _gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, unpackConversion );
1361
1462
 
1362
1463
  const isCompressed = ( texture.isCompressedTexture || texture.image[ 0 ].isCompressedTexture );
1363
1464
  const isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture );
@@ -1383,7 +1484,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
1383
1484
  const image = cubeImage[ 0 ],
1384
1485
  glFormat = utils.convert( texture.format, texture.colorSpace ),
1385
1486
  glType = utils.convert( texture.type ),
1386
- glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace );
1487
+ glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.normalized, texture.colorSpace );
1387
1488
 
1388
1489
  const useTexStorage = ( texture.isVideoTexture !== true );
1389
1490
  const allocateMemory = ( sourceProperties.__version === undefined ) || ( forceUpload === true );
@@ -1579,7 +1680,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
1579
1680
 
1580
1681
  const glFormat = utils.convert( texture.format, texture.colorSpace );
1581
1682
  const glType = utils.convert( texture.type );
1582
- const glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace );
1683
+ const glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.normalized, texture.colorSpace );
1583
1684
  const renderTargetProperties = properties.get( renderTarget );
1584
1685
  const textureProperties = properties.get( texture );
1585
1686
 
@@ -1641,7 +1742,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
1641
1742
  }
1642
1743
 
1643
1744
  // Setup storage for internal depth/stencil buffers and bind to correct framebuffer
1644
- function setupRenderBufferStorage( renderbuffer, renderTarget, isMultisample ) {
1745
+ function setupRenderBufferStorage( renderbuffer, renderTarget, useMultisample ) {
1645
1746
 
1646
1747
  _gl.bindRenderbuffer( _gl.RENDERBUFFER, renderbuffer );
1647
1748
 
@@ -1706,15 +1807,13 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
1706
1807
  const glAttachmentType = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;
1707
1808
 
1708
1809
  // set up the attachment
1709
- const samples = getRenderTargetSamples( renderTarget );
1710
- const isUseMultisampledRTT = useMultisampledRTT( renderTarget );
1711
- if ( isUseMultisampledRTT ) {
1810
+ if ( useMultisampledRTT( renderTarget ) ) {
1712
1811
 
1713
- multisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
1812
+ multisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, getRenderTargetSamples( renderTarget ), glInternalFormat, renderTarget.width, renderTarget.height );
1714
1813
 
1715
- } else if ( isMultisample ) {
1814
+ } else if ( useMultisample ) {
1716
1815
 
1717
- _gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
1816
+ _gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, getRenderTargetSamples( renderTarget ), glInternalFormat, renderTarget.width, renderTarget.height );
1718
1817
 
1719
1818
  } else {
1720
1819
 
@@ -1734,16 +1833,15 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
1734
1833
 
1735
1834
  const glFormat = utils.convert( texture.format, texture.colorSpace );
1736
1835
  const glType = utils.convert( texture.type );
1737
- const glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace );
1738
- const samples = getRenderTargetSamples( renderTarget );
1836
+ const glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.normalized, texture.colorSpace );
1739
1837
 
1740
- if ( isMultisample && useMultisampledRTT( renderTarget ) === false ) {
1838
+ if ( useMultisampledRTT( renderTarget ) ) {
1741
1839
 
1742
- _gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
1840
+ multisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, getRenderTargetSamples( renderTarget ), glInternalFormat, renderTarget.width, renderTarget.height );
1743
1841
 
1744
- } else if ( useMultisampledRTT( renderTarget ) ) {
1842
+ } else if ( useMultisample ) {
1745
1843
 
1746
- multisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
1844
+ _gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, getRenderTargetSamples( renderTarget ), glInternalFormat, renderTarget.width, renderTarget.height );
1747
1845
 
1748
1846
  } else {
1749
1847
 
@@ -1760,10 +1858,9 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
1760
1858
  }
1761
1859
 
1762
1860
  // Setup resources for a Depth Texture for a FBO (needs an extension)
1763
- function setupDepthTexture( framebuffer, renderTarget ) {
1861
+ function setupDepthTexture( framebuffer, renderTarget, cubeFace ) {
1764
1862
 
1765
- const isCube = ( renderTarget && renderTarget.isWebGLCubeRenderTarget );
1766
- if ( isCube ) throw new Error( 'Depth Texture with cube render targets is not supported' );
1863
+ const isCube = ( renderTarget.isWebGLCubeRenderTarget === true );
1767
1864
 
1768
1865
  state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
1769
1866
 
@@ -1787,7 +1884,49 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
1787
1884
 
1788
1885
  }
1789
1886
 
1790
- if ( renderTarget.depthTexture.image.depth != 1 ) {
1887
+ if ( isCube ) {
1888
+
1889
+ // For cube depth textures, initialize and bind without uploading image data
1890
+ if ( textureProperties.__webglInit === undefined ) {
1891
+
1892
+ textureProperties.__webglInit = true;
1893
+ renderTarget.depthTexture.addEventListener( 'dispose', onTextureDispose );
1894
+
1895
+ }
1896
+
1897
+ // Only create and allocate storage once
1898
+ if ( textureProperties.__webglTexture === undefined ) {
1899
+
1900
+ textureProperties.__webglTexture = _gl.createTexture();
1901
+
1902
+ state.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture );
1903
+ setTextureParameters( _gl.TEXTURE_CUBE_MAP, renderTarget.depthTexture );
1904
+
1905
+ // Allocate storage for all 6 faces with correct depth texture format
1906
+ const glFormat = utils.convert( renderTarget.depthTexture.format );
1907
+ const glType = utils.convert( renderTarget.depthTexture.type );
1908
+
1909
+ // Use proper internal format for depth textures
1910
+ let glInternalFormat;
1911
+ if ( renderTarget.depthTexture.format === DepthFormat ) {
1912
+
1913
+ glInternalFormat = _gl.DEPTH_COMPONENT24;
1914
+
1915
+ } else if ( renderTarget.depthTexture.format === DepthStencilFormat ) {
1916
+
1917
+ glInternalFormat = _gl.DEPTH24_STENCIL8;
1918
+
1919
+ }
1920
+
1921
+ for ( let i = 0; i < 6; i ++ ) {
1922
+
1923
+ _gl.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null );
1924
+
1925
+ }
1926
+
1927
+ }
1928
+
1929
+ } else if ( renderTarget.depthTexture.image.depth != 1 ) {
1791
1930
 
1792
1931
  setTexture2DArray( renderTarget.depthTexture, 0 );
1793
1932
 
@@ -1837,15 +1976,18 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
1837
1976
 
1838
1977
  } else {
1839
1978
 
1979
+ const glTextureType = isCube ? _gl.TEXTURE_CUBE_MAP_POSITIVE_X + cubeFace : _gl.TEXTURE_2D;
1980
+ const glAttachmentType = renderTarget.depthTexture.format === DepthStencilFormat ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;
1981
+
1840
1982
  if ( renderTarget.depthTexture.format === DepthFormat ) {
1841
1983
 
1842
1984
  if ( useMultisampledRTT( renderTarget ) ) {
1843
1985
 
1844
- multisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0, samples );
1986
+ multisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, glAttachmentType, glTextureType, webglDepthTexture, 0, samples );
1845
1987
 
1846
1988
  } else {
1847
1989
 
1848
- _gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 );
1990
+ _gl.framebufferTexture2D( _gl.FRAMEBUFFER, glAttachmentType, glTextureType, webglDepthTexture, 0 );
1849
1991
 
1850
1992
  }
1851
1993
 
@@ -1853,11 +1995,11 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
1853
1995
 
1854
1996
  if ( useMultisampledRTT( renderTarget ) ) {
1855
1997
 
1856
- multisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0, samples );
1998
+ multisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, glAttachmentType, glTextureType, webglDepthTexture, 0, samples );
1857
1999
 
1858
2000
  } else {
1859
2001
 
1860
- _gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 );
2002
+ _gl.framebufferTexture2D( _gl.FRAMEBUFFER, glAttachmentType, glTextureType, webglDepthTexture, 0 );
1861
2003
 
1862
2004
  }
1863
2005
 
@@ -1910,17 +2052,28 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
1910
2052
 
1911
2053
  if ( renderTarget.depthTexture && ! renderTargetProperties.__autoAllocateDepthBuffer ) {
1912
2054
 
1913
- if ( isCube ) throw new Error( 'target.depthTexture not supported in Cube render targets' );
2055
+ if ( isCube ) {
1914
2056
 
1915
- const mipmaps = renderTarget.texture.mipmaps;
2057
+ // For cube render targets with depth texture, setup each face
2058
+ for ( let i = 0; i < 6; i ++ ) {
1916
2059
 
1917
- if ( mipmaps && mipmaps.length > 0 ) {
2060
+ setupDepthTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, i );
1918
2061
 
1919
- setupDepthTexture( renderTargetProperties.__webglFramebuffer[ 0 ], renderTarget );
2062
+ }
1920
2063
 
1921
2064
  } else {
1922
2065
 
1923
- setupDepthTexture( renderTargetProperties.__webglFramebuffer, renderTarget );
2066
+ const mipmaps = renderTarget.texture.mipmaps;
2067
+
2068
+ if ( mipmaps && mipmaps.length > 0 ) {
2069
+
2070
+ setupDepthTexture( renderTargetProperties.__webglFramebuffer[ 0 ], renderTarget, 0 );
2071
+
2072
+ } else {
2073
+
2074
+ setupDepthTexture( renderTargetProperties.__webglFramebuffer, renderTarget, 0 );
2075
+
2076
+ }
1924
2077
 
1925
2078
  }
1926
2079
 
@@ -2113,7 +2266,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
2113
2266
 
2114
2267
  const glFormat = utils.convert( texture.format, texture.colorSpace );
2115
2268
  const glType = utils.convert( texture.type );
2116
- const glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace, renderTarget.isXRRenderTarget === true );
2269
+ const glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.normalized, texture.colorSpace, renderTarget.isXRRenderTarget === true );
2117
2270
  const samples = getRenderTargetSamples( renderTarget );
2118
2271
  _gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
2119
2272
 
@@ -2495,6 +2648,8 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
2495
2648
 
2496
2649
  this.allocateTextureUnit = allocateTextureUnit;
2497
2650
  this.resetTextureUnits = resetTextureUnits;
2651
+ this.getTextureUnits = getTextureUnits;
2652
+ this.setTextureUnits = setTextureUnits;
2498
2653
 
2499
2654
  this.setTexture2D = setTexture2D;
2500
2655
  this.setTexture2DArray = setTexture2DArray;
@@ -2512,6 +2667,12 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
2512
2667
  this.runDeferredUploads = runDeferredUploads;
2513
2668
  this.setDeferTextureUploads = setDeferTextureUploads;
2514
2669
 
2670
+ this.isReversedDepthBuffer = function () {
2671
+
2672
+ return state.buffers.depth.getReversed();
2673
+
2674
+ };
2675
+
2515
2676
  }
2516
2677
 
2517
2678
  export { WebGLTextures };
@@ -46,7 +46,7 @@ import { Texture } from '../../textures/Texture.js';
46
46
  import { DataArrayTexture } from '../../textures/DataArrayTexture.js';
47
47
  import { Data3DTexture } from '../../textures/Data3DTexture.js';
48
48
  import { DepthTexture } from '../../textures/DepthTexture.js';
49
- import { LessEqualCompare } from '../../constants.js';
49
+ import { LessEqualCompare, GreaterEqualCompare } from '../../constants.js';
50
50
 
51
51
  const emptyTexture = /*@__PURE__*/ new Texture();
52
52
 
@@ -572,7 +572,7 @@ function setValueT1( gl, v, textures ) {
572
572
 
573
573
  if ( this.type === gl.SAMPLER_2D_SHADOW ) {
574
574
 
575
- emptyShadowTexture.compareFunction = LessEqualCompare; // #28670
575
+ emptyShadowTexture.compareFunction = textures.isReversedDepthBuffer() ? GreaterEqualCompare : LessEqualCompare;
576
576
  emptyTexture2D = emptyShadowTexture;
577
577
 
578
578
  } else {
@@ -822,9 +822,21 @@ function setValueT1Array( gl, v, textures ) {
822
822
 
823
823
  }
824
824
 
825
+ let emptyTexture2D;
826
+
827
+ if ( this.type === gl.SAMPLER_2D_SHADOW ) {
828
+
829
+ emptyTexture2D = emptyShadowTexture;
830
+
831
+ } else {
832
+
833
+ emptyTexture2D = emptyTexture;
834
+
835
+ }
836
+
825
837
  for ( let i = 0; i !== n; ++ i ) {
826
838
 
827
- textures.setTexture2D( v[ i ] || emptyTexture, units[ i ] );
839
+ textures.setTexture2D( v[ i ] || emptyTexture2D, units[ i ] );
828
840
 
829
841
  }
830
842
 
@@ -1110,6 +1122,31 @@ class WebGLUniforms {
1110
1122
 
1111
1123
  }
1112
1124
 
1125
+ // Sort uniforms to prioritize shadow samplers first (for optimal texture unit allocation)
1126
+
1127
+ const shadowSamplers = [];
1128
+ const otherUniforms = [];
1129
+
1130
+ for ( const u of this.seq ) {
1131
+
1132
+ if ( u.type === gl.SAMPLER_2D_SHADOW || u.type === gl.SAMPLER_CUBE_SHADOW || u.type === gl.SAMPLER_2D_ARRAY_SHADOW ) {
1133
+
1134
+ shadowSamplers.push( u );
1135
+
1136
+ } else {
1137
+
1138
+ otherUniforms.push( u );
1139
+
1140
+ }
1141
+
1142
+ }
1143
+
1144
+ if ( shadowSamplers.length > 0 ) {
1145
+
1146
+ this.seq = shadowSamplers.concat( otherUniforms );
1147
+
1148
+ }
1149
+
1113
1150
  }
1114
1151
 
1115
1152
  setValue( gl, name, value, textures ) {
@@ -141,6 +141,11 @@ function WebGLUniformsGroups( gl, info, capabilities, state ) {
141
141
  uniform.__data[ 10 ] = value.elements[ 8 ];
142
142
  uniform.__data[ 11 ] = 0;
143
143
 
144
+ } else if ( ArrayBuffer.isView( value ) ) {
145
+
146
+ // copy the buffer data using "set"
147
+ uniform.__data.set( new value.constructor( value.buffer, value.byteOffset, uniform.__data.length ) );
148
+
144
149
  } else {
145
150
 
146
151
  value.toArray( uniform.__data, arrayOffset );
@@ -176,6 +181,10 @@ function WebGLUniformsGroups( gl, info, capabilities, state ) {
176
181
 
177
182
  cache[ indexString ] = value;
178
183
 
184
+ } else if ( ArrayBuffer.isView( value ) ) {
185
+
186
+ cache[ indexString ] = value.slice();
187
+
179
188
  } else {
180
189
 
181
190
  cache[ indexString ] = value.clone();
@@ -199,6 +208,11 @@ function WebGLUniformsGroups( gl, info, capabilities, state ) {
199
208
 
200
209
  }
201
210
 
211
+ } else if ( ArrayBuffer.isView( value ) ) {
212
+
213
+ // always update the array buffers
214
+ return true;
215
+
202
216
  } else {
203
217
 
204
218
  if ( cachedObject.equals( value ) === false ) {
@@ -339,6 +353,11 @@ function WebGLUniformsGroups( gl, info, capabilities, state ) {
339
353
 
340
354
  warn( 'WebGLRenderer: Texture samplers can not be part of an uniforms group.' );
341
355
 
356
+ } else if ( ArrayBuffer.isView( value ) ) {
357
+
358
+ info.boundary = 16;
359
+ info.storage = value.byteLength;
360
+
342
361
  } else {
343
362
 
344
363
  warn( 'WebGLRenderer: Unsupported uniform value type.', value );
@@ -1,4 +1,4 @@
1
- import { RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT5_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT1_Format, RGB_S3TC_DXT1_Format, DepthFormat, DepthStencilFormat, RedFormat, RGBAFormat, AlphaFormat, RedIntegerFormat, RGFormat, RGIntegerFormat, RGBAIntegerFormat, HalfFloatType, FloatType, UnsignedIntType, IntType, UnsignedShortType, ShortType, ByteType, UnsignedInt248Type, UnsignedShort5551Type, UnsignedShort4444Type, UnsignedByteType, RGBA_BPTC_Format, RGB_BPTC_SIGNED_Format, RGB_BPTC_UNSIGNED_Format, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, RED_GREEN_RGTC2_Format, SIGNED_RED_GREEN_RGTC2_Format, NoColorSpace, SRGBTransfer, UnsignedInt5999Type, RGBFormat, UnsignedInt101111Type } from '../../constants.js';
1
+ import { RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGBA_ETC2_EAC_Format, R11_EAC_Format, SIGNED_R11_EAC_Format, RG11_EAC_Format, SIGNED_RG11_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT5_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT1_Format, RGB_S3TC_DXT1_Format, DepthFormat, DepthStencilFormat, RedFormat, RGBAFormat, AlphaFormat, RedIntegerFormat, RGFormat, RGIntegerFormat, RGBAIntegerFormat, HalfFloatType, FloatType, UnsignedIntType, IntType, UnsignedShortType, ShortType, ByteType, UnsignedInt248Type, UnsignedShort5551Type, UnsignedShort4444Type, UnsignedByteType, RGBA_BPTC_Format, RGB_BPTC_SIGNED_Format, RGB_BPTC_UNSIGNED_Format, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, RED_GREEN_RGTC2_Format, SIGNED_RED_GREEN_RGTC2_Format, NoColorSpace, SRGBTransfer, UnsignedInt5999Type, RGBFormat, UnsignedInt101111Type } from '../../constants.js';
2
2
  import { ColorManagement } from '../../math/ColorManagement.js';
3
3
 
4
4
  function WebGLUtils( gl, extensions ) {
@@ -102,7 +102,7 @@ function WebGLUtils( gl, extensions ) {
102
102
 
103
103
  // ETC
104
104
 
105
- if ( p === RGB_ETC1_Format || p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format ) {
105
+ if ( p === RGB_ETC1_Format || p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format || p === R11_EAC_Format || p === SIGNED_R11_EAC_Format || p === RG11_EAC_Format || p === SIGNED_RG11_EAC_Format ) {
106
106
 
107
107
  extension = extensions.get( 'WEBGL_compressed_texture_etc' );
108
108
 
@@ -110,6 +110,10 @@ function WebGLUtils( gl, extensions ) {
110
110
 
111
111
  if ( p === RGB_ETC1_Format || p === RGB_ETC2_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ETC2 : extension.COMPRESSED_RGB8_ETC2;
112
112
  if ( p === RGBA_ETC2_EAC_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC : extension.COMPRESSED_RGBA8_ETC2_EAC;
113
+ if ( p === R11_EAC_Format ) return extension.COMPRESSED_R11_EAC;
114
+ if ( p === SIGNED_R11_EAC_Format ) return extension.COMPRESSED_SIGNED_R11_EAC;
115
+ if ( p === RG11_EAC_Format ) return extension.COMPRESSED_RG11_EAC;
116
+ if ( p === SIGNED_RG11_EAC_Format ) return extension.COMPRESSED_SIGNED_RG11_EAC;
113
117
 
114
118
  } else {
115
119