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
@@ -4,10 +4,11 @@ import {
4
4
  AdditiveBlending, SubtractiveBlending, MultiplyBlending, SubtractEquation, ReverseSubtractEquation,
5
5
  ZeroFactor, OneFactor, SrcColorFactor, SrcAlphaFactor, SrcAlphaSaturateFactor, DstColorFactor, DstAlphaFactor,
6
6
  OneMinusSrcColorFactor, OneMinusSrcAlphaFactor, OneMinusDstColorFactor, OneMinusDstAlphaFactor,
7
- NeverDepth, AlwaysDepth, LessDepth, LessEqualDepth, EqualDepth, GreaterEqualDepth, GreaterDepth, NotEqualDepth
7
+ NeverDepth, AlwaysDepth, LessDepth, LessEqualDepth, EqualDepth, GreaterEqualDepth, GreaterDepth, NotEqualDepth,
8
+ MaterialBlending
8
9
  } from '../../../constants.js';
9
10
  import { Vector4 } from '../../../math/Vector4.js';
10
- import { error } from '../../../utils.js';
11
+ import { error, ReversedDepthFuncs, warnOnce } from '../../../utils.js';
11
12
 
12
13
  let equationToGL, factorToGL;
13
14
 
@@ -49,6 +50,7 @@ class WebGLState {
49
50
  // documented for convenience reasons.
50
51
 
51
52
  this.enabled = {};
53
+ this.parameters = {};
52
54
  this.currentFlipSided = null;
53
55
  this.currentCullFace = null;
54
56
  this.currentProgram = null;
@@ -62,6 +64,7 @@ class WebGLState {
62
64
  this.currentPolygonOffsetFactor = null;
63
65
  this.currentPolygonOffsetUnits = null;
64
66
  this.currentColorMask = null;
67
+ this.currentDepthReversed = false;
65
68
  this.currentDepthFunc = null;
66
69
  this.currentDepthMask = null;
67
70
  this.currentStencilFunc = null;
@@ -85,7 +88,6 @@ class WebGLState {
85
88
  this.currentBoundTextures = {};
86
89
  this.currentBoundBufferBases = {};
87
90
 
88
-
89
91
  this._init();
90
92
 
91
93
  }
@@ -271,6 +273,151 @@ class WebGLState {
271
273
 
272
274
  }
273
275
 
276
+ setMRTBlending( textures, mrt, material ) {
277
+
278
+ const gl = this.gl;
279
+ const drawBuffersIndexedExt = this.backend.drawBuffersIndexedExt;
280
+
281
+ if ( ! drawBuffersIndexedExt ) {
282
+
283
+ warnOnce( 'WebGPURenderer: Multiple Render Targets (MRT) blending configuration is not fully supported in compatibility mode. The material blending will be used for all render targets.' );
284
+
285
+ return;
286
+
287
+ }
288
+
289
+ for ( let i = 0; i < textures.length; i ++ ) {
290
+
291
+ const texture = textures[ i ];
292
+
293
+ let blending = null;
294
+
295
+ if ( mrt !== null ) {
296
+
297
+ const blendMode = mrt.getBlendMode( texture.name );
298
+
299
+ if ( blendMode.blending === MaterialBlending ) {
300
+
301
+ // use material blending
302
+ blending = material;
303
+
304
+ } else if ( blendMode.blending !== NoBlending ) {
305
+
306
+ blending = blendMode;
307
+
308
+ }
309
+
310
+ } else {
311
+
312
+ // use material blending
313
+ blending = material;
314
+
315
+ }
316
+
317
+ if ( blending !== null ) {
318
+
319
+ this._setMRTBlendingIndex( i, blending );
320
+
321
+ } else {
322
+
323
+ // use opaque blending (no blending)
324
+ drawBuffersIndexedExt.blendFuncSeparateiOES( i, gl.ONE, gl.ZERO, gl.ONE, gl.ZERO );
325
+
326
+ }
327
+
328
+ }
329
+
330
+ }
331
+
332
+ /**
333
+ * Applies blending configuration for a specific draw buffer index.
334
+ *
335
+ * @private
336
+ * @param {number} index - The draw buffer index.
337
+ * @param {Object} blending - The blending configuration (material or BlendMode).
338
+ */
339
+ _setMRTBlendingIndex( index, blending ) {
340
+
341
+ const { gl } = this;
342
+ const drawBuffersIndexedExt = this.backend.drawBuffersIndexedExt;
343
+
344
+ const blendingType = blending.blending;
345
+ const blendSrc = blending.blendSrc;
346
+ const blendDst = blending.blendDst;
347
+ const blendEquation = blending.blendEquation;
348
+ const premultipliedAlpha = blending.premultipliedAlpha;
349
+
350
+ if ( blendingType === CustomBlending ) {
351
+
352
+ const blendSrcAlpha = blending.blendSrcAlpha !== null ? blending.blendSrcAlpha : blendSrc;
353
+ const blendDstAlpha = blending.blendDstAlpha !== null ? blending.blendDstAlpha : blendDst;
354
+ const blendEquationAlpha = blending.blendEquationAlpha !== null ? blending.blendEquationAlpha : blendEquation;
355
+
356
+ drawBuffersIndexedExt.blendEquationSeparateiOES( index, equationToGL[ blendEquation ], equationToGL[ blendEquationAlpha ] );
357
+ drawBuffersIndexedExt.blendFuncSeparateiOES( index, factorToGL[ blendSrc ], factorToGL[ blendDst ], factorToGL[ blendSrcAlpha ], factorToGL[ blendDstAlpha ] );
358
+
359
+ } else {
360
+
361
+ drawBuffersIndexedExt.blendEquationSeparateiOES( index, gl.FUNC_ADD, gl.FUNC_ADD );
362
+
363
+ if ( premultipliedAlpha ) {
364
+
365
+ switch ( blendingType ) {
366
+
367
+ case NormalBlending:
368
+ drawBuffersIndexedExt.blendFuncSeparateiOES( index, gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );
369
+ break;
370
+
371
+ case AdditiveBlending:
372
+ drawBuffersIndexedExt.blendFuncSeparateiOES( index, gl.ONE, gl.ONE, gl.ONE, gl.ONE );
373
+ break;
374
+
375
+ case SubtractiveBlending:
376
+ drawBuffersIndexedExt.blendFuncSeparateiOES( index, gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ZERO, gl.ONE );
377
+ break;
378
+
379
+ case MultiplyBlending:
380
+ drawBuffersIndexedExt.blendFuncSeparateiOES( index, gl.DST_COLOR, gl.ONE_MINUS_SRC_ALPHA, gl.ZERO, gl.ONE );
381
+ break;
382
+
383
+ default:
384
+ drawBuffersIndexedExt.blendFuncSeparateiOES( index, gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );
385
+ break;
386
+
387
+ }
388
+
389
+ } else {
390
+
391
+ switch ( blendingType ) {
392
+
393
+ case NormalBlending:
394
+ drawBuffersIndexedExt.blendFuncSeparateiOES( index, gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );
395
+ break;
396
+
397
+ case AdditiveBlending:
398
+ drawBuffersIndexedExt.blendFuncSeparateiOES( index, gl.SRC_ALPHA, gl.ONE, gl.ONE, gl.ONE );
399
+ break;
400
+
401
+ case SubtractiveBlending:
402
+ drawBuffersIndexedExt.blendFuncSeparateiOES( index, gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ZERO, gl.ONE );
403
+ break;
404
+
405
+ case MultiplyBlending:
406
+ drawBuffersIndexedExt.blendFuncSeparateiOES( index, gl.DST_COLOR, gl.ONE_MINUS_SRC_ALPHA, gl.ZERO, gl.ONE );
407
+ break;
408
+
409
+ default:
410
+ drawBuffersIndexedExt.blendFuncSeparateiOES( index, gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );
411
+ break;
412
+
413
+ }
414
+
415
+ }
416
+
417
+ }
418
+
419
+ }
420
+
274
421
  /**
275
422
  * Defines the blending.
276
423
  *
@@ -463,6 +610,34 @@ class WebGLState {
463
610
 
464
611
  }
465
612
 
613
+
614
+ /**
615
+ * Configures the WebGL state to use a reversed depth buffer.
616
+ *
617
+ * @param {boolean} reversed - Whether the depth buffer is reversed or not.
618
+ */
619
+ setReversedDepth( reversed ) {
620
+
621
+ if ( this.currentDepthReversed !== reversed ) {
622
+
623
+ const ext = this.backend.extensions.get( 'EXT_clip_control' );
624
+
625
+ if ( reversed ) {
626
+
627
+ ext.clipControlEXT( ext.LOWER_LEFT_EXT, ext.ZERO_TO_ONE_EXT );
628
+
629
+ } else {
630
+
631
+ ext.clipControlEXT( ext.LOWER_LEFT_EXT, ext.NEGATIVE_ONE_TO_ONE_EXT );
632
+
633
+ }
634
+
635
+ this.currentDepthReversed = reversed;
636
+
637
+ }
638
+
639
+ }
640
+
466
641
  /**
467
642
  * Specifies whether depth values can be written when rendering
468
643
  * into a framebuffer or not.
@@ -493,6 +668,8 @@ class WebGLState {
493
668
  */
494
669
  setDepthFunc( depthFunc ) {
495
670
 
671
+ if ( this.currentDepthReversed ) depthFunc = ReversedDepthFuncs[ depthFunc ];
672
+
496
673
  if ( this.currentDepthFunc !== depthFunc ) {
497
674
 
498
675
  const { gl } = this;
@@ -610,11 +787,11 @@ class WebGLState {
610
787
 
611
788
  if ( boolean ) {
612
789
 
613
- gl.enable( gl.SCISSOR_TEST );
790
+ this.enable( gl.SCISSOR_TEST );
614
791
 
615
792
  } else {
616
793
 
617
- gl.disable( gl.SCISSOR_TEST );
794
+ this.disable( gl.SCISSOR_TEST );
618
795
 
619
796
  }
620
797
 
@@ -1115,7 +1292,6 @@ class WebGLState {
1115
1292
 
1116
1293
  }
1117
1294
 
1118
-
1119
1295
  /**
1120
1296
  * Unbinds the current bound texture.
1121
1297
  *
@@ -1139,6 +1315,47 @@ class WebGLState {
1139
1315
 
1140
1316
  }
1141
1317
 
1318
+ /**
1319
+ * Returns the value for the given parameter.
1320
+ *
1321
+ * @param {number} name - The paramter to get the value for.
1322
+ * @return {any} The value for the given parameter.
1323
+ */
1324
+ getParameter( name ) {
1325
+
1326
+ const { gl, parameters } = this;
1327
+
1328
+ if ( parameters[ name ] !== undefined ) {
1329
+
1330
+ return parameters[ name ];
1331
+
1332
+ } else {
1333
+
1334
+ return gl.getParameter( name );
1335
+
1336
+ }
1337
+
1338
+ }
1339
+
1340
+ /**
1341
+ * Specifies a pixel storage mode.
1342
+ *
1343
+ * @param {number} name - The parameter to set.
1344
+ * @param {any} value - A value to set the parameter to.
1345
+ */
1346
+ pixelStorei( name, value ) {
1347
+
1348
+ const { gl, parameters } = this;
1349
+
1350
+ if ( parameters[ name ] !== value ) {
1351
+
1352
+ gl.pixelStorei( name, value );
1353
+ parameters[ name ] = value;
1354
+
1355
+ }
1356
+
1357
+ }
1358
+
1142
1359
  }
1143
1360
 
1144
1361
  export default WebGLState;
@@ -162,7 +162,7 @@ class WebGLTextureUtils {
162
162
  * @param {boolean} [forceLinearTransfer=false] - Whether to force a linear transfer or not.
163
163
  * @return {GLenum} The internal format.
164
164
  */
165
- getInternalFormat( internalFormatName, glFormat, glType, colorSpace, forceLinearTransfer = false ) {
165
+ getInternalFormat( internalFormatName, glFormat, glType, normalized, colorSpace, forceLinearTransfer = false ) {
166
166
 
167
167
  const { gl, extensions } = this;
168
168
 
@@ -174,6 +174,20 @@ class WebGLTextureUtils {
174
174
 
175
175
  }
176
176
 
177
+ let extTextureNorm16 = null;
178
+
179
+ if ( normalized ) {
180
+
181
+ extTextureNorm16 = extensions.get( 'EXT_texture_norm16' );
182
+
183
+ if ( ! extTextureNorm16 ) {
184
+
185
+ warn( 'WebGLRenderer: Unable to use normalized textures without EXT_texture_norm16 extension' );
186
+
187
+ }
188
+
189
+ }
190
+
177
191
  let internalFormat = glFormat;
178
192
 
179
193
  if ( glFormat === gl.RED ) {
@@ -181,11 +195,9 @@ class WebGLTextureUtils {
181
195
  if ( glType === gl.FLOAT ) internalFormat = gl.R32F;
182
196
  if ( glType === gl.HALF_FLOAT ) internalFormat = gl.R16F;
183
197
  if ( glType === gl.UNSIGNED_BYTE ) internalFormat = gl.R8;
184
- if ( glType === gl.UNSIGNED_SHORT ) internalFormat = gl.R16;
185
- if ( glType === gl.UNSIGNED_INT ) internalFormat = gl.R32UI;
186
- if ( glType === gl.BYTE ) internalFormat = gl.R8I;
187
- if ( glType === gl.SHORT ) internalFormat = gl.R16I;
188
- if ( glType === gl.INT ) internalFormat = gl.R32I;
198
+ if ( glType === gl.BYTE ) internalFormat = gl.R8_SNORM;
199
+ if ( glType === gl.UNSIGNED_SHORT && extTextureNorm16 ) internalFormat = extTextureNorm16.R16_EXT;
200
+ if ( glType === gl.SHORT && extTextureNorm16 ) internalFormat = extTextureNorm16.R16_SNORM_EXT;
189
201
 
190
202
  }
191
203
 
@@ -205,11 +217,9 @@ class WebGLTextureUtils {
205
217
  if ( glType === gl.FLOAT ) internalFormat = gl.RG32F;
206
218
  if ( glType === gl.HALF_FLOAT ) internalFormat = gl.RG16F;
207
219
  if ( glType === gl.UNSIGNED_BYTE ) internalFormat = gl.RG8;
208
- if ( glType === gl.UNSIGNED_SHORT ) internalFormat = gl.RG16;
209
- if ( glType === gl.UNSIGNED_INT ) internalFormat = gl.RG32UI;
210
- if ( glType === gl.BYTE ) internalFormat = gl.RG8I;
211
- if ( glType === gl.SHORT ) internalFormat = gl.RG16I;
212
- if ( glType === gl.INT ) internalFormat = gl.RG32I;
220
+ if ( glType === gl.BYTE ) internalFormat = gl.RG8_SNORM;
221
+ if ( glType === gl.UNSIGNED_SHORT && extTextureNorm16 ) internalFormat = extTextureNorm16.RG16_EXT;
222
+ if ( glType === gl.SHORT && extTextureNorm16 ) internalFormat = extTextureNorm16.RG16_SNORM_EXT;
213
223
 
214
224
  }
215
225
 
@@ -230,13 +240,10 @@ class WebGLTextureUtils {
230
240
 
231
241
  if ( glType === gl.FLOAT ) internalFormat = gl.RGB32F;
232
242
  if ( glType === gl.HALF_FLOAT ) internalFormat = gl.RGB16F;
233
- if ( glType === gl.UNSIGNED_BYTE ) internalFormat = gl.RGB8;
234
- if ( glType === gl.UNSIGNED_SHORT ) internalFormat = gl.RGB16;
235
- if ( glType === gl.UNSIGNED_INT ) internalFormat = gl.RGB32UI;
236
- if ( glType === gl.BYTE ) internalFormat = gl.RGB8I;
237
- if ( glType === gl.SHORT ) internalFormat = gl.RGB16I;
238
- if ( glType === gl.INT ) internalFormat = gl.RGB32I;
239
243
  if ( glType === gl.UNSIGNED_BYTE ) internalFormat = ( transfer === SRGBTransfer ) ? gl.SRGB8 : gl.RGB8;
244
+ if ( glType === gl.BYTE ) internalFormat = gl.RGB8_SNORM;
245
+ if ( glType === gl.UNSIGNED_SHORT && extTextureNorm16 ) internalFormat = extTextureNorm16.RGB16_EXT;
246
+ if ( glType === gl.SHORT && extTextureNorm16 ) internalFormat = extTextureNorm16.RGB16_SNORM_EXT;
240
247
  if ( glType === gl.UNSIGNED_SHORT_5_6_5 ) internalFormat = gl.RGB565;
241
248
  if ( glType === gl.UNSIGNED_SHORT_5_5_5_1 ) internalFormat = gl.RGB5_A1;
242
249
  if ( glType === gl.UNSIGNED_SHORT_4_4_4_4 ) internalFormat = gl.RGB4;
@@ -262,13 +269,10 @@ class WebGLTextureUtils {
262
269
 
263
270
  if ( glType === gl.FLOAT ) internalFormat = gl.RGBA32F;
264
271
  if ( glType === gl.HALF_FLOAT ) internalFormat = gl.RGBA16F;
265
- if ( glType === gl.UNSIGNED_BYTE ) internalFormat = gl.RGBA8;
266
- if ( glType === gl.UNSIGNED_SHORT ) internalFormat = gl.RGBA16;
267
- if ( glType === gl.UNSIGNED_INT ) internalFormat = gl.RGBA32UI;
268
- if ( glType === gl.BYTE ) internalFormat = gl.RGBA8I;
269
- if ( glType === gl.SHORT ) internalFormat = gl.RGBA16I;
270
- if ( glType === gl.INT ) internalFormat = gl.RGBA32I;
271
272
  if ( glType === gl.UNSIGNED_BYTE ) internalFormat = ( transfer === SRGBTransfer ) ? gl.SRGB8_ALPHA8 : gl.RGBA8;
273
+ if ( glType === gl.BYTE ) internalFormat = gl.RGBA8_SNORM;
274
+ if ( glType === gl.UNSIGNED_SHORT && extTextureNorm16 ) internalFormat = extTextureNorm16.RGBA16_EXT;
275
+ if ( glType === gl.SHORT && extTextureNorm16 ) internalFormat = extTextureNorm16.RGBA16_SNORM_EXT;
272
276
  if ( glType === gl.UNSIGNED_SHORT_4_4_4_4 ) internalFormat = gl.RGBA4;
273
277
  if ( glType === gl.UNSIGNED_SHORT_5_5_5_1 ) internalFormat = gl.RGB5_A1;
274
278
 
@@ -320,15 +324,16 @@ class WebGLTextureUtils {
320
324
  setTextureParameters( textureType, texture ) {
321
325
 
322
326
  const { gl, extensions, backend } = this;
327
+ const { state } = this.backend;
323
328
 
324
329
  const workingPrimaries = ColorManagement.getPrimaries( ColorManagement.workingColorSpace );
325
330
  const texturePrimaries = texture.colorSpace === NoColorSpace ? null : ColorManagement.getPrimaries( texture.colorSpace );
326
331
  const unpackConversion = texture.colorSpace === NoColorSpace || workingPrimaries === texturePrimaries ? gl.NONE : gl.BROWSER_DEFAULT_WEBGL;
327
332
 
328
- gl.pixelStorei( gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );
329
- gl.pixelStorei( gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );
330
- gl.pixelStorei( gl.UNPACK_ALIGNMENT, texture.unpackAlignment );
331
- gl.pixelStorei( gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, unpackConversion );
333
+ state.pixelStorei( gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );
334
+ state.pixelStorei( gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );
335
+ state.pixelStorei( gl.UNPACK_ALIGNMENT, texture.unpackAlignment );
336
+ state.pixelStorei( gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, unpackConversion );
332
337
 
333
338
  gl.texParameteri( textureType, gl.TEXTURE_WRAP_S, wrappingToGL[ texture.wrapS ] );
334
339
  gl.texParameteri( textureType, gl.TEXTURE_WRAP_T, wrappingToGL[ texture.wrapT ] );
@@ -370,7 +375,7 @@ class WebGLTextureUtils {
370
375
  if ( texture.anisotropy > 1 ) {
371
376
 
372
377
  const extension = extensions.get( 'EXT_texture_filter_anisotropic' );
373
- gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, backend.getMaxAnisotropy() ) );
378
+ gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, backend.capabilities.getMaxAnisotropy() ) );
374
379
 
375
380
  }
376
381
 
@@ -428,7 +433,7 @@ class WebGLTextureUtils {
428
433
 
429
434
  const glFormat = backend.utils.convert( texture.format, texture.colorSpace );
430
435
  const glType = backend.utils.convert( texture.type );
431
- const glInternalFormat = this.getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace, texture.isVideoTexture );
436
+ const glInternalFormat = this.getInternalFormat( texture.internalFormat, glFormat, glType, texture.normalized, texture.colorSpace, texture.isVideoTexture );
432
437
 
433
438
  const textureGPU = gl.createTexture();
434
439
  const glTextureType = this.getGLTextureType( texture );
@@ -470,6 +475,7 @@ class WebGLTextureUtils {
470
475
  copyBufferToTexture( buffer, texture ) {
471
476
 
472
477
  const { gl, backend } = this;
478
+ const { state } = backend;
473
479
 
474
480
  const { textureGPU, glTextureType, glFormat, glType } = backend.get( texture );
475
481
 
@@ -479,8 +485,8 @@ class WebGLTextureUtils {
479
485
 
480
486
  backend.state.bindTexture( glTextureType, textureGPU );
481
487
 
482
- gl.pixelStorei( gl.UNPACK_FLIP_Y_WEBGL, false );
483
- gl.pixelStorei( gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false );
488
+ state.pixelStorei( gl.UNPACK_FLIP_Y_WEBGL, false );
489
+ state.pixelStorei( gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false );
484
490
  gl.texSubImage2D( glTextureType, 0, 0, 0, width, height, glFormat, glType, 0 );
485
491
 
486
492
  gl.bindBuffer( gl.PIXEL_UNPACK_BUFFER, null );
@@ -488,7 +494,7 @@ class WebGLTextureUtils {
488
494
  backend.state.unbindTexture();
489
495
  // debug
490
496
  // const framebuffer = gl.createFramebuffer();
491
- // gl.bindFramebuffer( gl.FRAMEBUFFER, framebuffer );
497
+ // backend.state.bindFramebuffer( gl.FRAMEBUFFER, framebuffer );
492
498
  // gl.framebufferTexture2D( gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, glTextureType, textureGPU, 0 );
493
499
 
494
500
  // const readout = new Float32Array( width * height * 4 );
@@ -497,7 +503,7 @@ class WebGLTextureUtils {
497
503
  // const altType = gl.getParameter( gl.IMPLEMENTATION_COLOR_READ_TYPE );
498
504
 
499
505
  // gl.readPixels( 0, 0, width, height, altFormat, altType, readout );
500
- // gl.bindFramebuffer( gl.FRAMEBUFFER, null );
506
+ // backend.state.bindFramebuffer( gl.FRAMEBUFFER, null );
501
507
  // log( readout );
502
508
 
503
509
  }
@@ -628,6 +634,13 @@ class WebGLTextureUtils {
628
634
 
629
635
  gl.texImage2D( glTextureType, 0, glInternalFormat, glFormat, glType, options.image );
630
636
 
637
+ } else if ( texture.isHTMLTexture ) {
638
+
639
+ if ( typeof gl.texElementImage2D === 'function' ) {
640
+
641
+ gl.texElementImage2D( gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, options.image );
642
+
643
+ }
631
644
 
632
645
  } else {
633
646
 
@@ -832,22 +845,22 @@ class WebGLTextureUtils {
832
845
 
833
846
  }
834
847
 
835
- gl.pixelStorei( gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY );
836
- gl.pixelStorei( gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha );
837
- gl.pixelStorei( gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment );
848
+ state.pixelStorei( gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY );
849
+ state.pixelStorei( gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha );
850
+ state.pixelStorei( gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment );
838
851
 
839
852
  // used for copying data from cpu
840
- const currentUnpackRowLen = gl.getParameter( gl.UNPACK_ROW_LENGTH );
841
- const currentUnpackImageHeight = gl.getParameter( gl.UNPACK_IMAGE_HEIGHT );
842
- const currentUnpackSkipPixels = gl.getParameter( gl.UNPACK_SKIP_PIXELS );
843
- const currentUnpackSkipRows = gl.getParameter( gl.UNPACK_SKIP_ROWS );
844
- const currentUnpackSkipImages = gl.getParameter( gl.UNPACK_SKIP_IMAGES );
845
-
846
- gl.pixelStorei( gl.UNPACK_ROW_LENGTH, image.width );
847
- gl.pixelStorei( gl.UNPACK_IMAGE_HEIGHT, image.height );
848
- gl.pixelStorei( gl.UNPACK_SKIP_PIXELS, minX );
849
- gl.pixelStorei( gl.UNPACK_SKIP_ROWS, minY );
850
- gl.pixelStorei( gl.UNPACK_SKIP_IMAGES, minZ );
853
+ const currentUnpackRowLen = state.getParameter( gl.UNPACK_ROW_LENGTH );
854
+ const currentUnpackImageHeight = state.getParameter( gl.UNPACK_IMAGE_HEIGHT );
855
+ const currentUnpackSkipPixels = state.getParameter( gl.UNPACK_SKIP_PIXELS );
856
+ const currentUnpackSkipRows = state.getParameter( gl.UNPACK_SKIP_ROWS );
857
+ const currentUnpackSkipImages = state.getParameter( gl.UNPACK_SKIP_IMAGES );
858
+
859
+ state.pixelStorei( gl.UNPACK_ROW_LENGTH, image.width );
860
+ state.pixelStorei( gl.UNPACK_IMAGE_HEIGHT, image.height );
861
+ state.pixelStorei( gl.UNPACK_SKIP_PIXELS, minX );
862
+ state.pixelStorei( gl.UNPACK_SKIP_ROWS, minY );
863
+ state.pixelStorei( gl.UNPACK_SKIP_IMAGES, minZ );
851
864
 
852
865
  // set up the src texture
853
866
  const isSrc3D = srcTexture.isDataArrayTexture || srcTexture.isData3DTexture || dstTexture.isArrayTexture;
@@ -981,11 +994,11 @@ class WebGLTextureUtils {
981
994
  }
982
995
 
983
996
  // reset values
984
- gl.pixelStorei( gl.UNPACK_ROW_LENGTH, currentUnpackRowLen );
985
- gl.pixelStorei( gl.UNPACK_IMAGE_HEIGHT, currentUnpackImageHeight );
986
- gl.pixelStorei( gl.UNPACK_SKIP_PIXELS, currentUnpackSkipPixels );
987
- gl.pixelStorei( gl.UNPACK_SKIP_ROWS, currentUnpackSkipRows );
988
- gl.pixelStorei( gl.UNPACK_SKIP_IMAGES, currentUnpackSkipImages );
997
+ state.pixelStorei( gl.UNPACK_ROW_LENGTH, currentUnpackRowLen );
998
+ state.pixelStorei( gl.UNPACK_IMAGE_HEIGHT, currentUnpackImageHeight );
999
+ state.pixelStorei( gl.UNPACK_SKIP_PIXELS, currentUnpackSkipPixels );
1000
+ state.pixelStorei( gl.UNPACK_SKIP_ROWS, currentUnpackSkipRows );
1001
+ state.pixelStorei( gl.UNPACK_SKIP_IMAGES, currentUnpackSkipImages );
989
1002
 
990
1003
  // Generate mipmaps only when copying level 0
991
1004
  if ( dstLevel === 0 && dstTexture.generateMipmaps ) {
@@ -1183,7 +1196,7 @@ class WebGLTextureUtils {
1183
1196
 
1184
1197
  const fb = gl.createFramebuffer();
1185
1198
 
1186
- gl.bindFramebuffer( gl.READ_FRAMEBUFFER, fb );
1199
+ backend.state.bindFramebuffer( gl.READ_FRAMEBUFFER, fb );
1187
1200
 
1188
1201
  const target = texture.isCubeTexture ? gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex : gl.TEXTURE_2D;
1189
1202
 
@@ -1210,6 +1223,8 @@ class WebGLTextureUtils {
1210
1223
  gl.getBufferSubData( gl.PIXEL_PACK_BUFFER, 0, dstBuffer );
1211
1224
  gl.bindBuffer( gl.PIXEL_PACK_BUFFER, null );
1212
1225
 
1226
+ backend.state.bindFramebuffer( gl.READ_FRAMEBUFFER, null );
1227
+
1213
1228
  gl.deleteFramebuffer( fb );
1214
1229
 
1215
1230
  return dstBuffer;
@@ -1,4 +1,4 @@
1
- import { warnOnce, warn } from '../../../utils.js';
1
+ import { error, warnOnce, warn } from '../../../utils.js';
2
2
  import TimestampQueryPool from '../../common/TimestampQueryPool.js';
3
3
 
4
4
  /**
@@ -61,7 +61,7 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
61
61
  // Check if we have enough space for a new query pair
62
62
  if ( this.currentQueryIndex + 2 > this.maxQueries ) {
63
63
 
64
- warnOnce( `WebGPUTimestampQueryPool [${ this.type }]: Maximum number of queries exceeded, when using trackTimestamp it is necessary to resolves the queries via renderer.resolveTimestampsAsync( THREE.TimestampQuery.${ this.type.toUpperCase() } ).` );
64
+ warnOnce( `WebGLTimestampQueryPool [${ this.type }]: Maximum number of queries exceeded, when using trackTimestamp it is necessary to resolves the queries via renderer.resolveTimestampsAsync( THREE.TimestampQuery.${ this.type.toUpperCase() } ).` );
65
65
  return null;
66
66
 
67
67
  }
@@ -122,9 +122,9 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
122
122
 
123
123
  }
124
124
 
125
- } catch ( error ) {
125
+ } catch ( e ) {
126
126
 
127
- error( 'Error in beginQuery:', error );
127
+ error( 'Error in beginQuery:', e );
128
128
  this.activeQuery = null;
129
129
  this.queryStates.set( baseOffset, 'inactive' );
130
130
 
@@ -165,9 +165,9 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
165
165
  this.queryStates.set( baseOffset, 'ended' );
166
166
  this.activeQuery = null;
167
167
 
168
- } catch ( error ) {
168
+ } catch ( e ) {
169
169
 
170
- error( 'Error in endQuery:', error );
170
+ error( 'Error in endQuery:', e );
171
171
  // Reset state on error
172
172
  this.queryStates.set( baseOffset, 'inactive' );
173
173
  this.activeQuery = null;
@@ -258,9 +258,9 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
258
258
 
259
259
  return totalDuration;
260
260
 
261
- } catch ( error ) {
261
+ } catch ( e ) {
262
262
 
263
- error( 'Error resolving queries:', error );
263
+ error( 'Error resolving queries:', e );
264
264
  return this.lastValue;
265
265
 
266
266
  } finally {
@@ -346,9 +346,9 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
346
346
  const elapsed = this.gl.getQueryParameter( query, this.gl.QUERY_RESULT );
347
347
  resolve( Number( elapsed ) / 1e6 ); // Convert nanoseconds to milliseconds
348
348
 
349
- } catch ( error ) {
349
+ } catch ( e ) {
350
350
 
351
- error( 'Error checking query:', error );
351
+ error( 'Error checking query:', e );
352
352
  resolve( this.lastValue );
353
353
 
354
354
  }
@@ -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, RGBFormat, RGBAFormat, AlphaFormat, RedIntegerFormat, RGFormat, RGIntegerFormat, RGBAIntegerFormat, HalfFloatType, FloatType, UnsignedIntType, IntType, UnsignedShortType, ShortType, ByteType, UnsignedInt248Type, UnsignedInt5999Type, UnsignedShort5551Type, UnsignedShort4444Type, UnsignedByteType, RGBA_BPTC_Format, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, RED_GREEN_RGTC2_Format, SIGNED_RED_GREEN_RGTC2_Format, SRGBTransfer, NoColorSpace, 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, RGBFormat, RGBAFormat, AlphaFormat, RedIntegerFormat, RGFormat, RGIntegerFormat, RGBAIntegerFormat, HalfFloatType, FloatType, UnsignedIntType, IntType, UnsignedShortType, ShortType, ByteType, UnsignedInt248Type, UnsignedInt5999Type, UnsignedShort5551Type, UnsignedShort4444Type, UnsignedByteType, RGBA_BPTC_Format, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, RED_GREEN_RGTC2_Format, SIGNED_RED_GREEN_RGTC2_Format, SRGBTransfer, NoColorSpace, UnsignedInt101111Type } from '../../../constants.js';
2
2
  import { ColorManagement } from '../../../math/ColorManagement.js';
3
3
 
4
4
  /**
@@ -154,7 +154,7 @@ class WebGLUtils {
154
154
 
155
155
  // ETC
156
156
 
157
- if ( p === RGB_ETC1_Format || p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format ) {
157
+ 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 ) {
158
158
 
159
159
  extension = extensions.get( 'WEBGL_compressed_texture_etc' );
160
160
 
@@ -162,6 +162,10 @@ class WebGLUtils {
162
162
 
163
163
  if ( p === RGB_ETC1_Format || p === RGB_ETC2_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ETC2 : extension.COMPRESSED_RGB8_ETC2;
164
164
  if ( p === RGBA_ETC2_EAC_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC : extension.COMPRESSED_RGBA8_ETC2_EAC;
165
+ if ( p === R11_EAC_Format ) return extension.COMPRESSED_R11_EAC;
166
+ if ( p === SIGNED_R11_EAC_Format ) return extension.COMPRESSED_SIGNED_R11_EAC;
167
+ if ( p === RG11_EAC_Format ) return extension.COMPRESSED_RG11_EAC;
168
+ if ( p === SIGNED_RG11_EAC_Format ) return extension.COMPRESSED_SIGNED_RG11_EAC;
165
169
 
166
170
  } else {
167
171