@plastic-software/three 0.183.4 → 0.184.1

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 (277) hide show
  1. package/build/three.cjs +775 -287
  2. package/build/three.core.js +372 -110
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +428 -181
  5. package/build/three.module.min.js +1 -1
  6. package/build/three.tsl.js +7 -1
  7. package/build/three.tsl.min.js +1 -1
  8. package/build/three.webgpu.js +2979 -1281
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +2942 -1281
  11. package/build/three.webgpu.nodes.min.js +1 -1
  12. package/examples/jsm/Addons.js +11 -0
  13. package/examples/jsm/animation/CCDIKSolver.js +5 -1
  14. package/examples/jsm/controls/ArcballControls.js +4 -1
  15. package/examples/jsm/controls/DragControls.js +2 -2
  16. package/examples/jsm/controls/FirstPersonControls.js +58 -54
  17. package/examples/jsm/controls/FlyControls.js +4 -0
  18. package/examples/jsm/controls/OrbitControls.js +2 -2
  19. package/examples/jsm/controls/TrackballControls.js +2 -2
  20. package/examples/jsm/controls/TransformControls.js +34 -2
  21. package/examples/jsm/csm/CSMShadowNode.js +6 -2
  22. package/examples/jsm/exporters/GLTFExporter.js +21 -5
  23. package/examples/jsm/geometries/TextGeometry.js +18 -0
  24. package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
  25. package/examples/jsm/inspector/Extension.js +13 -0
  26. package/examples/jsm/inspector/Inspector.js +169 -114
  27. package/examples/jsm/inspector/RendererInspector.js +2 -2
  28. package/examples/jsm/inspector/extensions/extensions.json +6 -0
  29. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
  30. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
  31. package/examples/jsm/inspector/tabs/Memory.js +128 -0
  32. package/examples/jsm/inspector/tabs/Parameters.js +34 -2
  33. package/examples/jsm/inspector/tabs/Performance.js +2 -2
  34. package/examples/jsm/inspector/tabs/Settings.js +264 -0
  35. package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
  36. package/examples/jsm/inspector/tabs/Viewer.js +105 -3
  37. package/examples/jsm/inspector/ui/Graph.js +2 -2
  38. package/examples/jsm/inspector/ui/List.js +1 -1
  39. package/examples/jsm/inspector/ui/Profiler.js +273 -176
  40. package/examples/jsm/inspector/ui/Style.js +64 -10
  41. package/examples/jsm/inspector/ui/Tab.js +39 -7
  42. package/examples/jsm/inspector/ui/Values.js +39 -2
  43. package/examples/jsm/inspector/ui/utils.js +13 -0
  44. package/examples/jsm/interaction/InteractionManager.js +226 -0
  45. package/examples/jsm/libs/meshopt_decoder.module.js +8 -8
  46. package/examples/jsm/lighting/DynamicLighting.js +82 -0
  47. package/examples/jsm/lighting/LightProbeGrid.js +651 -0
  48. package/examples/jsm/lines/LineMaterial.js +1 -1
  49. package/examples/jsm/loaders/EXRLoader.js +682 -43
  50. package/examples/jsm/loaders/FBXLoader.js +233 -33
  51. package/examples/jsm/loaders/GLTFLoader.js +24 -7
  52. package/examples/jsm/loaders/HDRLoader.js +1 -1
  53. package/examples/jsm/loaders/KTX2Loader.js +8 -2
  54. package/examples/jsm/loaders/LDrawLoader.js +39 -47
  55. package/examples/jsm/loaders/SVGLoader.js +1 -1
  56. package/examples/jsm/loaders/VTKLoader.js +5 -1
  57. package/examples/jsm/loaders/collada/ColladaComposer.js +101 -7
  58. package/examples/jsm/loaders/collada/ColladaParser.js +19 -4
  59. package/examples/jsm/loaders/usd/USDAParser.js +6 -0
  60. package/examples/jsm/loaders/usd/USDCParser.js +26 -0
  61. package/examples/jsm/loaders/usd/USDComposer.js +656 -103
  62. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  63. package/examples/jsm/misc/RollerCoaster.js +42 -4
  64. package/examples/jsm/modifiers/TessellateModifier.js +1 -1
  65. package/examples/jsm/objects/Reflector.js +73 -25
  66. package/examples/jsm/objects/Sky.js +14 -2
  67. package/examples/jsm/objects/SkyMesh.js +23 -6
  68. package/examples/jsm/renderers/Projector.js +18 -38
  69. package/examples/jsm/renderers/SVGRenderer.js +6 -25
  70. package/examples/jsm/transpiler/GLSLDecoder.js +2 -2
  71. package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
  72. package/examples/jsm/tsl/display/AfterImageNode.js +10 -0
  73. package/examples/jsm/tsl/display/AnamorphicNode.js +11 -0
  74. package/examples/jsm/tsl/display/BilateralBlurNode.js +10 -0
  75. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
  76. package/examples/jsm/tsl/display/FSR1Node.js +477 -0
  77. package/examples/jsm/tsl/display/GTAONode.js +2 -1
  78. package/examples/jsm/tsl/display/GaussianBlurNode.js +10 -0
  79. package/examples/jsm/tsl/display/GodraysNode.js +2 -11
  80. package/examples/jsm/tsl/display/OutlineNode.js +66 -16
  81. package/examples/jsm/tsl/display/SSGINode.js +0 -4
  82. package/examples/jsm/tsl/display/SharpenNode.js +283 -0
  83. package/examples/jsm/tsl/display/TAAUNode.js +835 -0
  84. package/examples/jsm/tsl/display/TRAANode.js +48 -7
  85. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
  86. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
  87. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
  88. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
  89. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
  90. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
  91. package/examples/jsm/tsl/math/Bayer.js +13 -2
  92. package/examples/jsm/utils/BufferGeometryUtils.js +2 -3
  93. package/examples/jsm/utils/ColorUtils.js +76 -0
  94. package/examples/jsm/utils/SkeletonUtils.js +14 -8
  95. package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
  96. package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
  97. package/package.json +4 -4
  98. package/src/Three.Core.js +1 -0
  99. package/src/Three.TSL.js +6 -0
  100. package/src/Three.WebGPU.Nodes.js +3 -0
  101. package/src/Three.WebGPU.js +6 -0
  102. package/src/animation/AnimationAction.js +11 -1
  103. package/src/audio/AudioContext.js +2 -2
  104. package/src/constants.js +1 -1
  105. package/src/core/BufferAttribute.js +13 -1
  106. package/src/core/Clock.js +1 -1
  107. package/src/core/Object3D.js +1 -5
  108. package/src/core/RenderTarget.js +1 -0
  109. package/src/extras/curves/CatmullRomCurve3.js +3 -2
  110. package/src/loaders/AudioLoader.js +11 -1
  111. package/src/loaders/DataTextureLoader.js +6 -4
  112. package/src/loaders/FileLoader.js +1 -2
  113. package/src/loaders/ImageBitmapLoader.js +4 -6
  114. package/src/loaders/MaterialLoader.js +1 -1
  115. package/src/loaders/ObjectLoader.js +25 -4
  116. package/src/loaders/nodes/NodeObjectLoader.js +18 -0
  117. package/src/materials/MeshToonMaterial.js +1 -1
  118. package/src/materials/nodes/Line2NodeMaterial.js +27 -0
  119. package/src/materials/nodes/NodeMaterial.js +0 -27
  120. package/src/materials/nodes/manager/NodeMaterialObserver.js +188 -89
  121. package/src/math/Line3.js +3 -0
  122. package/src/math/Matrix2.js +13 -9
  123. package/src/math/Matrix3.js +13 -9
  124. package/src/math/Matrix4.js +13 -9
  125. package/src/math/Plane.js +4 -3
  126. package/src/math/Triangle.js +1 -1
  127. package/src/math/Vector2.js +11 -7
  128. package/src/math/Vector3.js +12 -8
  129. package/src/math/Vector4.js +13 -9
  130. package/src/nodes/Nodes.js +0 -1
  131. package/src/nodes/TSL.js +1 -1
  132. package/src/nodes/accessors/BufferAttributeNode.js +9 -3
  133. package/src/nodes/accessors/CubeTextureNode.js +7 -1
  134. package/src/nodes/accessors/MaterialProperties.js +2 -5
  135. package/src/nodes/accessors/Object3DNode.js +1 -1
  136. package/src/nodes/accessors/ReferenceBaseNode.js +2 -2
  137. package/src/nodes/accessors/ReferenceNode.js +4 -4
  138. package/src/nodes/accessors/SceneProperties.js +2 -8
  139. package/src/nodes/accessors/StorageBufferNode.js +10 -4
  140. package/src/nodes/accessors/StorageTextureNode.js +4 -9
  141. package/src/nodes/accessors/TextureNode.js +10 -2
  142. package/src/nodes/accessors/UniformArrayNode.js +2 -2
  143. package/src/nodes/code/FunctionCallNode.js +1 -1
  144. package/src/nodes/code/FunctionNode.js +1 -1
  145. package/src/nodes/core/ArrayNode.js +1 -1
  146. package/src/nodes/core/AssignNode.js +1 -1
  147. package/src/nodes/core/AttributeNode.js +1 -1
  148. package/src/nodes/core/BypassNode.js +1 -1
  149. package/src/nodes/core/ContextNode.js +1 -1
  150. package/src/nodes/core/IndexNode.js +2 -1
  151. package/src/nodes/core/InputNode.js +1 -1
  152. package/src/nodes/core/InspectorNode.js +1 -1
  153. package/src/nodes/core/IsolateNode.js +1 -1
  154. package/src/nodes/core/Node.js +83 -12
  155. package/src/nodes/core/NodeBuilder.js +117 -16
  156. package/src/nodes/core/NodeUtils.js +1 -1
  157. package/src/nodes/core/OutputStructNode.js +1 -1
  158. package/src/nodes/core/ParameterNode.js +1 -1
  159. package/src/nodes/core/StackNode.js +1 -1
  160. package/src/nodes/core/StructNode.js +1 -1
  161. package/src/nodes/core/StructTypeNode.js +1 -1
  162. package/src/nodes/core/SubBuildNode.js +1 -1
  163. package/src/nodes/core/UniformGroupNode.js +36 -6
  164. package/src/nodes/core/VarNode.js +1 -1
  165. package/src/nodes/core/VaryingNode.js +1 -1
  166. package/src/nodes/display/NormalMapNode.js +2 -2
  167. package/src/nodes/display/PassNode.js +27 -7
  168. package/src/nodes/display/RenderOutputNode.js +4 -4
  169. package/src/nodes/display/ScreenNode.js +1 -1
  170. package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
  171. package/src/nodes/display/ViewportTextureNode.js +18 -7
  172. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  173. package/src/nodes/geometry/RangeNode.js +1 -1
  174. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  175. package/src/nodes/gpgpu/BarrierNode.js +9 -0
  176. package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
  177. package/src/nodes/gpgpu/ComputeNode.js +69 -44
  178. package/src/nodes/gpgpu/SubgroupFunctionNode.js +1 -1
  179. package/src/nodes/lighting/LightsNode.js +6 -27
  180. package/src/nodes/lighting/ShadowNode.js +24 -2
  181. package/src/nodes/math/BitcastNode.js +1 -1
  182. package/src/nodes/math/ConditionalNode.js +1 -1
  183. package/src/nodes/math/MathNode.js +73 -1
  184. package/src/nodes/math/OperatorNode.js +1 -1
  185. package/src/nodes/math/PackFloatNode.js +1 -1
  186. package/src/nodes/math/UnpackFloatNode.js +1 -1
  187. package/src/nodes/tsl/TSLBase.js +1 -1
  188. package/src/nodes/tsl/TSLCore.js +21 -3
  189. package/src/nodes/utils/ArrayElementNode.js +1 -1
  190. package/src/nodes/utils/ConvertNode.js +1 -1
  191. package/src/nodes/utils/DebugNode.js +1 -1
  192. package/src/nodes/utils/EventNode.js +30 -0
  193. package/src/nodes/utils/FlipNode.js +1 -1
  194. package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
  195. package/src/nodes/utils/JoinNode.js +1 -1
  196. package/src/nodes/utils/MemberNode.js +1 -1
  197. package/src/nodes/utils/Remap.js +48 -0
  198. package/src/nodes/utils/RotateNode.js +1 -1
  199. package/src/nodes/utils/SetNode.js +1 -1
  200. package/src/nodes/utils/SplitNode.js +1 -1
  201. package/src/objects/BatchedMesh.js +17 -2
  202. package/src/objects/InstancedMesh.js +19 -3
  203. package/src/objects/SkinnedMesh.js +26 -9
  204. package/src/renderers/WebGLRenderer.js +147 -48
  205. package/src/renderers/common/Animation.js +3 -3
  206. package/src/renderers/common/Attributes.js +15 -1
  207. package/src/renderers/common/Backend.js +0 -8
  208. package/src/renderers/common/Background.js +2 -2
  209. package/src/renderers/common/BindGroup.js +1 -8
  210. package/src/renderers/common/Bindings.js +2 -2
  211. package/src/renderers/common/ComputePipeline.js +1 -1
  212. package/src/renderers/common/CubeRenderTarget.js +1 -1
  213. package/src/renderers/common/Info.js +333 -4
  214. package/src/renderers/common/InspectorBase.js +6 -1
  215. package/src/renderers/common/Pipelines.js +36 -3
  216. package/src/renderers/common/ReadbackBuffer.js +78 -0
  217. package/src/renderers/common/RenderBundle.js +3 -1
  218. package/src/renderers/common/RenderBundles.js +5 -2
  219. package/src/renderers/common/RenderObject.js +2 -2
  220. package/src/renderers/common/RenderObjects.js +3 -3
  221. package/src/renderers/common/RenderPipeline.js +35 -6
  222. package/src/renderers/common/Renderer.js +232 -53
  223. package/src/renderers/common/Textures.js +72 -3
  224. package/src/renderers/common/UniformsGroup.js +1 -1
  225. package/src/renderers/common/XRManager.js +34 -27
  226. package/src/renderers/common/extras/PMREMGenerator.js +23 -15
  227. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  228. package/src/renderers/common/nodes/NodeManager.js +230 -99
  229. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  230. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +1 -1
  231. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
  232. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +8 -0
  233. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
  234. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +1 -3
  235. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
  236. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
  237. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
  238. package/src/renderers/shaders/ShaderChunk.js +2 -0
  239. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
  240. package/src/renderers/shaders/ShaderLib.js +0 -1
  241. package/src/renderers/shaders/UniformsLib.js +7 -2
  242. package/src/renderers/shaders/UniformsUtils.js +27 -5
  243. package/src/renderers/webgl/WebGLAnimation.js +2 -1
  244. package/src/renderers/webgl/WebGLBackground.js +13 -13
  245. package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
  246. package/src/renderers/webgl/WebGLCapabilities.js +6 -0
  247. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
  248. package/src/renderers/webgl/WebGLMaterials.js +12 -13
  249. package/src/renderers/webgl/WebGLOutput.js +4 -1
  250. package/src/renderers/webgl/WebGLProgram.js +4 -0
  251. package/src/renderers/webgl/WebGLPrograms.js +21 -4
  252. package/src/renderers/webgl/WebGLRenderStates.js +13 -2
  253. package/src/renderers/webgl/WebGLState.js +43 -0
  254. package/src/renderers/webgl/WebGLTextures.js +129 -26
  255. package/src/renderers/webgl/WebGLUniformsGroups.js +19 -0
  256. package/src/renderers/webgl-fallback/WebGLBackend.js +106 -65
  257. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
  258. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +29 -51
  259. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
  260. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
  261. package/src/renderers/webgl-fallback/utils/WebGLState.js +42 -1
  262. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +63 -50
  263. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +1 -1
  264. package/src/renderers/webgpu/WebGPUBackend.js +160 -146
  265. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +55 -33
  266. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +103 -17
  267. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +1 -1
  268. package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
  269. package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -0
  270. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +91 -17
  271. package/src/renderers/webgpu/utils/WebGPUUtils.js +18 -2
  272. package/src/renderers/webxr/WebXRController.js +12 -0
  273. package/src/textures/HTMLTexture.js +74 -0
  274. package/src/textures/Source.js +1 -1
  275. package/src/textures/Texture.js +13 -2
  276. package/src/utils.js +23 -1
  277. package/src/nodes/utils/RemapNode.js +0 -125
@@ -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 );
@@ -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 ) {
@@ -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
  }