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
@@ -14,7 +14,9 @@ import {
14
14
  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,
15
15
  RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, UnsignedIntType, UnsignedShortType, UnsignedInt248Type, UnsignedInt5999Type,
16
16
  NeverCompare, AlwaysCompare, LessCompare, LessEqualCompare, EqualCompare, GreaterEqualCompare, GreaterCompare, NotEqualCompare, IntType, RedIntegerFormat, RGIntegerFormat, RGBAIntegerFormat,
17
- UnsignedInt101111Type, RGBA_BPTC_Format, RGB_ETC1_Format, RGB_S3TC_DXT1_Format, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, RED_GREEN_RGTC2_Format, SIGNED_RED_GREEN_RGTC2_Format
17
+ UnsignedInt101111Type, RGBA_BPTC_Format, RGB_ETC1_Format, RGB_S3TC_DXT1_Format, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, RED_GREEN_RGTC2_Format, SIGNED_RED_GREEN_RGTC2_Format,
18
+ R11_EAC_Format, SIGNED_R11_EAC_Format, RG11_EAC_Format, SIGNED_RG11_EAC_Format,
19
+ Compatibility
18
20
  } from '../../../constants.js';
19
21
  import { CubeTexture } from '../../../textures/CubeTexture.js';
20
22
  import { Texture } from '../../../textures/Texture.js';
@@ -123,6 +125,15 @@ class WebGPUTextureUtils {
123
125
  maxAnisotropy: 1
124
126
  };
125
127
 
128
+ // Depth textures without compare function must use non-filtering (nearest) sampling
129
+ if ( texture.isDepthTexture && texture.compareFunction === null ) {
130
+
131
+ samplerDescriptorGPU.magFilter = GPUFilterMode.Nearest;
132
+ samplerDescriptorGPU.minFilter = GPUFilterMode.Nearest;
133
+ samplerDescriptorGPU.mipmapFilter = GPUFilterMode.Nearest;
134
+
135
+ }
136
+
126
137
  // anisotropy can only be used when all filter modes are set to linear.
127
138
 
128
139
  if ( samplerDescriptorGPU.magFilter === GPUFilterMode.Linear && samplerDescriptorGPU.minFilter === GPUFilterMode.Linear && samplerDescriptorGPU.mipmapFilter === GPUFilterMode.Linear ) {
@@ -131,7 +142,7 @@ class WebGPUTextureUtils {
131
142
 
132
143
  }
133
144
 
134
- if ( texture.isDepthTexture && texture.compareFunction !== null ) {
145
+ if ( texture.isDepthTexture && texture.compareFunction !== null && backend.hasCompatibility( Compatibility.TEXTURE_COMPARE ) ) {
135
146
 
136
147
  samplerDescriptorGPU.compare = _compareToWebGPU[ texture.compareFunction ];
137
148
 
@@ -187,7 +198,7 @@ class WebGPUTextureUtils {
187
198
 
188
199
  let textureGPU;
189
200
 
190
- const format = getFormat( texture );
201
+ const format = getFormat( texture, this.backend.device );
191
202
 
192
203
  if ( texture.isCubeTexture ) {
193
204
 
@@ -301,7 +312,17 @@ class WebGPUTextureUtils {
301
312
 
302
313
  }
303
314
 
304
- textureData.texture = backend.device.createTexture( textureDescriptorGPU );
315
+ try {
316
+
317
+ textureData.texture = backend.device.createTexture( textureDescriptorGPU );
318
+
319
+ } catch ( e ) {
320
+
321
+ warn( 'WebGPURenderer: Failed to create texture with descriptor:', textureDescriptorGPU );
322
+ this.createDefaultTexture( texture );
323
+ return;
324
+
325
+ }
305
326
 
306
327
  if ( isMSAA ) {
307
328
 
@@ -350,25 +371,7 @@ class WebGPUTextureUtils {
350
371
 
351
372
  const textureData = this.backend.get( texture );
352
373
 
353
- if ( texture.isCubeTexture ) {
354
-
355
- for ( let i = 0; i < 6; i ++ ) {
356
-
357
- this._generateMipmaps( textureData.texture, textureData.textureDescriptorGPU, i, encoder );
358
-
359
- }
360
-
361
- } else {
362
-
363
- const depth = texture.image.depth || 1;
364
-
365
- for ( let i = 0; i < depth; i ++ ) {
366
-
367
- this._generateMipmaps( textureData.texture, textureData.textureDescriptorGPU, i, encoder );
368
-
369
- }
370
-
371
- }
374
+ this._generateMipmaps( textureData.texture, encoder );
372
375
 
373
376
  }
374
377
 
@@ -460,12 +463,12 @@ class WebGPUTextureUtils {
460
463
  if ( stencil ) {
461
464
 
462
465
  format = DepthStencilFormat;
463
- type = UnsignedInt248Type;
466
+ type = backend.renderer.reversedDepthBuffer === true ? FloatType : UnsignedInt248Type;
464
467
 
465
468
  } else if ( depth ) {
466
469
 
467
470
  format = DepthFormat;
468
- type = UnsignedIntType;
471
+ type = backend.renderer.reversedDepthBuffer === true ? FloatType : UnsignedIntType;
469
472
 
470
473
  }
471
474
 
@@ -535,9 +538,23 @@ class WebGPUTextureUtils {
535
538
 
536
539
  } else if ( texture.isArrayTexture || texture.isDataArrayTexture || texture.isData3DTexture ) {
537
540
 
538
- for ( let i = 0; i < options.image.depth; i ++ ) {
541
+ if ( texture.layerUpdates && texture.layerUpdates.size > 0 ) {
542
+
543
+ for ( const layerIndex of texture.layerUpdates ) {
544
+
545
+ this._copyBufferToTexture( options.image, textureData.texture, textureDescriptorGPU, layerIndex, texture.flipY, layerIndex );
546
+
547
+ }
548
+
549
+ texture.clearLayerUpdates();
539
550
 
540
- this._copyBufferToTexture( options.image, textureData.texture, textureDescriptorGPU, i, texture.flipY, i );
551
+ } else {
552
+
553
+ for ( let i = 0; i < options.image.depth; i ++ ) {
554
+
555
+ this._copyBufferToTexture( options.image, textureData.texture, textureDescriptorGPU, i, texture.flipY, i );
556
+
557
+ }
541
558
 
542
559
  }
543
560
 
@@ -549,6 +566,37 @@ class WebGPUTextureUtils {
549
566
 
550
567
  this._copyCubeMapToTexture( texture, textureData.texture, textureDescriptorGPU );
551
568
 
569
+ } else if ( texture.isHTMLTexture ) {
570
+
571
+ const device = this.backend.device;
572
+ const canvas = this.backend.renderer.domElement;
573
+ const image = texture.image;
574
+
575
+ if ( typeof device.queue.copyElementImageToTexture !== 'function' ) return;
576
+
577
+ // Skip the first frame — the element needs a paint record first.
578
+ if ( ! textureData.hasPaintCallback ) {
579
+
580
+ textureData.hasPaintCallback = true;
581
+ canvas.requestPaint();
582
+ return;
583
+
584
+ }
585
+
586
+ const width = textureDescriptorGPU.size.width;
587
+ const height = textureDescriptorGPU.size.height;
588
+
589
+ device.queue.copyElementImageToTexture(
590
+ image, width, height,
591
+ { texture: textureData.texture }
592
+ );
593
+
594
+ if ( texture.flipY ) {
595
+
596
+ this._flipY( textureData.texture, textureDescriptorGPU );
597
+
598
+ }
599
+
552
600
  } else {
553
601
 
554
602
  if ( mipmaps.length > 0 ) {
@@ -631,7 +679,9 @@ class WebGPUTextureUtils {
631
679
 
632
680
  await readBuffer.mapAsync( GPUMapMode.READ );
633
681
 
634
- const buffer = readBuffer.getMappedRange();
682
+ const buffer = readBuffer.getMappedRange().slice();
683
+
684
+ readBuffer.destroy();
635
685
 
636
686
  return new typedArrayType( buffer );
637
687
 
@@ -682,7 +732,7 @@ class WebGPUTextureUtils {
682
732
  */
683
733
  _getDefaultCubeTextureGPU( format ) {
684
734
 
685
- let defaultCubeTexture = this.defaultTexture[ format ];
735
+ let defaultCubeTexture = this.defaultCubeTexture[ format ];
686
736
 
687
737
  if ( defaultCubeTexture === undefined ) {
688
738
 
@@ -770,21 +820,27 @@ class WebGPUTextureUtils {
770
820
  const width = ( mipLevel > 0 ) ? image.width : textureDescriptorGPU.size.width;
771
821
  const height = ( mipLevel > 0 ) ? image.height : textureDescriptorGPU.size.height;
772
822
 
773
- device.queue.copyExternalImageToTexture(
774
- {
775
- source: image,
776
- flipY: flipY
777
- }, {
778
- texture: textureGPU,
779
- mipLevel: mipLevel,
780
- origin: { x: 0, y: 0, z: originDepth },
781
- premultipliedAlpha: premultiplyAlpha
782
- }, {
783
- width: width,
784
- height: height,
785
- depthOrArrayLayers: 1
786
- }
787
- );
823
+ try {
824
+
825
+ device.queue.copyExternalImageToTexture(
826
+ {
827
+ source: image,
828
+ flipY: flipY
829
+ }, {
830
+ texture: textureGPU,
831
+ mipLevel: mipLevel,
832
+ origin: { x: 0, y: 0, z: originDepth },
833
+ premultipliedAlpha: premultiplyAlpha
834
+ }, {
835
+ width: width,
836
+ height: height,
837
+ depthOrArrayLayers: 1
838
+ }
839
+ );
840
+
841
+ // try/catch has been added to fix bad video frame data on certain devices, see #32391
842
+
843
+ } catch ( _ ) {}
788
844
 
789
845
  }
790
846
 
@@ -813,13 +869,11 @@ class WebGPUTextureUtils {
813
869
  *
814
870
  * @private
815
871
  * @param {GPUTexture} textureGPU - The GPU texture object.
816
- * @param {Object} textureDescriptorGPU - The texture descriptor.
817
- * @param {number} [baseArrayLayer=0] - The index of the first array layer accessible to the texture view.
818
872
  * @param {?GPUCommandEncoder} [encoder=null] - An optional command encoder used to generate mipmaps.
819
873
  */
820
- _generateMipmaps( textureGPU, textureDescriptorGPU, baseArrayLayer = 0, encoder = null ) {
874
+ _generateMipmaps( textureGPU, encoder = null ) {
821
875
 
822
- this._getPassUtils().generateMipmaps( textureGPU, textureDescriptorGPU, baseArrayLayer, encoder );
876
+ this._getPassUtils().generateMipmaps( textureGPU, encoder );
823
877
 
824
878
  }
825
879
 
@@ -1052,7 +1106,9 @@ class WebGPUTextureUtils {
1052
1106
  format === GPUTextureFormat.RG8Unorm ||
1053
1107
  format === GPUTextureFormat.RG8Snorm ||
1054
1108
  format === GPUTextureFormat.RG8Uint ||
1055
- format === GPUTextureFormat.RG8Sint ) return 2;
1109
+ format === GPUTextureFormat.RG8Sint ||
1110
+ format === GPUTextureFormat.R16Unorm ||
1111
+ format === GPUTextureFormat.R16Snorm ) return 2;
1056
1112
 
1057
1113
  // 32-bit formats
1058
1114
  if ( format === GPUTextureFormat.R32Uint ||
@@ -1068,6 +1124,8 @@ class WebGPUTextureUtils {
1068
1124
  format === GPUTextureFormat.RGBA8Sint ||
1069
1125
  format === GPUTextureFormat.BGRA8Unorm ||
1070
1126
  format === GPUTextureFormat.BGRA8UnormSRGB ||
1127
+ format === GPUTextureFormat.RG16Unorm ||
1128
+ format === GPUTextureFormat.RG16Snorm ||
1071
1129
  // Packed 32-bit formats
1072
1130
  format === GPUTextureFormat.RGB9E5UFloat ||
1073
1131
  format === GPUTextureFormat.RGB10A2Unorm ||
@@ -1083,7 +1141,9 @@ class WebGPUTextureUtils {
1083
1141
  format === GPUTextureFormat.RG32Float ||
1084
1142
  format === GPUTextureFormat.RGBA16Uint ||
1085
1143
  format === GPUTextureFormat.RGBA16Sint ||
1086
- format === GPUTextureFormat.RGBA16Float ) return 8;
1144
+ format === GPUTextureFormat.RGBA16Float ||
1145
+ format === GPUTextureFormat.RGBA16Unorm ||
1146
+ format === GPUTextureFormat.RGBA16Snorm ) return 8;
1087
1147
 
1088
1148
  // 128-bit formats
1089
1149
  if ( format === GPUTextureFormat.RGBA32Uint ||
@@ -1126,6 +1186,12 @@ class WebGPUTextureUtils {
1126
1186
  if ( format === GPUTextureFormat.RG16Float ) return Uint16Array;
1127
1187
  if ( format === GPUTextureFormat.RGBA16Float ) return Uint16Array;
1128
1188
 
1189
+ if ( format === GPUTextureFormat.R16Unorm ) return Uint16Array;
1190
+ if ( format === GPUTextureFormat.R16Snorm ) return Int16Array;
1191
+ if ( format === GPUTextureFormat.RG16Unorm ) return Uint16Array;
1192
+ if ( format === GPUTextureFormat.RG16Snorm ) return Int16Array;
1193
+ if ( format === GPUTextureFormat.RGBA16Unorm ) return Uint16Array;
1194
+ if ( format === GPUTextureFormat.RGBA16Snorm ) return Int16Array;
1129
1195
 
1130
1196
  if ( format === GPUTextureFormat.R32Uint ) return Uint32Array;
1131
1197
  if ( format === GPUTextureFormat.R32Sint ) return Int32Array;
@@ -1180,19 +1246,33 @@ class WebGPUTextureUtils {
1180
1246
  * Returns the GPU format for the given texture.
1181
1247
  *
1182
1248
  * @param {Texture} texture - The texture.
1183
- * @param {?GPUDevice} [device=null] - The GPU device which is used for feature detection.
1184
- * It is not necessary to apply the device for most formats.
1249
+ * @param {GPUDevice} [device] - The GPU device which is used for feature detection.
1185
1250
  * @return {string} The GPU format.
1186
1251
  */
1187
- export function getFormat( texture, device = null ) {
1252
+ export function getFormat( texture, device ) {
1188
1253
 
1189
1254
  const format = texture.format;
1190
1255
  const type = texture.type;
1256
+ const normalized = texture.normalized;
1191
1257
  const colorSpace = texture.colorSpace;
1192
1258
  const transfer = ColorManagement.getTransfer( colorSpace );
1193
1259
 
1194
1260
  let formatGPU;
1195
1261
 
1262
+ let textureFormatsTier1 = false;
1263
+
1264
+ if ( normalized ) {
1265
+
1266
+ textureFormatsTier1 = device.features.has( GPUFeatureName.TextureFormatsTier1 );
1267
+
1268
+ if ( textureFormatsTier1 === false ) {
1269
+
1270
+ warn( 'WebGPURenderer: Unable to use normalized textures without texture-formats-tier1 feature.' );
1271
+
1272
+ }
1273
+
1274
+ }
1275
+
1196
1276
  if ( texture.isCompressedTexture === true || texture.isCompressedArrayTexture === true ) {
1197
1277
 
1198
1278
  switch ( format ) {
@@ -1239,6 +1319,22 @@ export function getFormat( texture, device = null ) {
1239
1319
  formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ETC2RGBA8UnormSRGB : GPUTextureFormat.ETC2RGBA8Unorm;
1240
1320
  break;
1241
1321
 
1322
+ case R11_EAC_Format:
1323
+ formatGPU = GPUTextureFormat.EACR11Unorm;
1324
+ break;
1325
+
1326
+ case SIGNED_R11_EAC_Format:
1327
+ formatGPU = GPUTextureFormat.EACR11Snorm;
1328
+ break;
1329
+
1330
+ case RG11_EAC_Format:
1331
+ formatGPU = GPUTextureFormat.EACRG11Unorm;
1332
+ break;
1333
+
1334
+ case SIGNED_RG11_EAC_Format:
1335
+ formatGPU = GPUTextureFormat.EACRG11Snorm;
1336
+ break;
1337
+
1242
1338
  case RGBA_ASTC_4x4_Format:
1243
1339
  formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC4x4UnormSRGB : GPUTextureFormat.ASTC4x4Unorm;
1244
1340
  break;
@@ -1317,12 +1413,13 @@ export function getFormat( texture, device = null ) {
1317
1413
  break;
1318
1414
 
1319
1415
  case ShortType:
1320
- formatGPU = GPUTextureFormat.RGBA16Sint;
1416
+ formatGPU = textureFormatsTier1 ? GPUTextureFormat.RGBA16Snorm : GPUTextureFormat.RGBA16Sint;
1321
1417
  break;
1322
1418
 
1323
1419
  case UnsignedShortType:
1324
- formatGPU = GPUTextureFormat.RGBA16Uint;
1420
+ formatGPU = textureFormatsTier1 ? GPUTextureFormat.RGBA16Unorm : GPUTextureFormat.RGBA16Uint;
1325
1421
  break;
1422
+
1326
1423
  case UnsignedIntType:
1327
1424
  formatGPU = GPUTextureFormat.RGBA32Uint;
1328
1425
  break;
@@ -1378,11 +1475,11 @@ export function getFormat( texture, device = null ) {
1378
1475
  break;
1379
1476
 
1380
1477
  case ShortType:
1381
- formatGPU = GPUTextureFormat.R16Sint;
1478
+ formatGPU = textureFormatsTier1 ? GPUTextureFormat.R16Snorm : GPUTextureFormat.R16Sint;
1382
1479
  break;
1383
1480
 
1384
1481
  case UnsignedShortType:
1385
- formatGPU = GPUTextureFormat.R16Uint;
1482
+ formatGPU = textureFormatsTier1 ? GPUTextureFormat.R16Unorm : GPUTextureFormat.R16Uint;
1386
1483
  break;
1387
1484
 
1388
1485
  case UnsignedIntType:
@@ -1421,11 +1518,11 @@ export function getFormat( texture, device = null ) {
1421
1518
  break;
1422
1519
 
1423
1520
  case ShortType:
1424
- formatGPU = GPUTextureFormat.RG16Sint;
1521
+ formatGPU = textureFormatsTier1 ? GPUTextureFormat.RG16Snorm : GPUTextureFormat.RG16Sint;
1425
1522
  break;
1426
1523
 
1427
1524
  case UnsignedShortType:
1428
- formatGPU = GPUTextureFormat.RG16Uint;
1525
+ formatGPU = textureFormatsTier1 ? GPUTextureFormat.RG16Unorm : GPUTextureFormat.RG16Uint;
1429
1526
  break;
1430
1527
 
1431
1528
  case UnsignedIntType:
@@ -1,4 +1,4 @@
1
- import { warnOnce } from '../../../utils.js';
1
+ import { error, warnOnce } from '../../../utils.js';
2
2
  import TimestampQueryPool from '../../common/TimestampQueryPool.js';
3
3
 
4
4
  /**
@@ -217,9 +217,9 @@ class WebGPUTimestampQueryPool extends TimestampQueryPool {
217
217
 
218
218
  return totalDuration;
219
219
 
220
- } catch ( error ) {
220
+ } catch ( e ) {
221
221
 
222
- error( 'Error resolving queries:', error );
222
+ error( 'Error resolving queries:', e );
223
223
  if ( this.resultBuffer.mapState === 'mapped' ) {
224
224
 
225
225
  this.resultBuffer.unmap();
@@ -255,9 +255,9 @@ class WebGPUTimestampQueryPool extends TimestampQueryPool {
255
255
 
256
256
  await this.pendingResolve;
257
257
 
258
- } catch ( error ) {
258
+ } catch ( e ) {
259
259
 
260
- error( 'Error waiting for pending resolve:', error );
260
+ error( 'Error waiting for pending resolve:', e );
261
261
 
262
262
  }
263
263
 
@@ -270,9 +270,9 @@ class WebGPUTimestampQueryPool extends TimestampQueryPool {
270
270
 
271
271
  this.resultBuffer.unmap();
272
272
 
273
- } catch ( error ) {
273
+ } catch ( e ) {
274
274
 
275
- error( 'Error unmapping buffer:', error );
275
+ error( 'Error unmapping buffer:', e );
276
276
 
277
277
  }
278
278
 
@@ -34,17 +34,37 @@ class WebGPUUtils {
34
34
 
35
35
  let format;
36
36
 
37
- if ( renderContext.depthTexture !== null ) {
37
+ if ( renderContext.depth ) {
38
38
 
39
- format = this.getTextureFormatGPU( renderContext.depthTexture );
39
+ if ( renderContext.depthTexture !== null ) {
40
40
 
41
- } else if ( renderContext.depth && renderContext.stencil ) {
41
+ format = this.getTextureFormatGPU( renderContext.depthTexture );
42
42
 
43
- format = GPUTextureFormat.Depth24PlusStencil8;
43
+ } else if ( renderContext.stencil ) {
44
44
 
45
- } else if ( renderContext.depth ) {
45
+ if ( this.backend.renderer.reversedDepthBuffer === true ) {
46
46
 
47
- format = GPUTextureFormat.Depth24Plus;
47
+ format = GPUTextureFormat.Depth32FloatStencil8;
48
+
49
+ } else {
50
+
51
+ format = GPUTextureFormat.Depth24PlusStencil8;
52
+
53
+ }
54
+
55
+ } else {
56
+
57
+ if ( this.backend.renderer.reversedDepthBuffer === true ) {
58
+
59
+ format = GPUTextureFormat.Depth32Float;
60
+
61
+ } else {
62
+
63
+ format = GPUTextureFormat.Depth24Plus;
64
+
65
+ }
66
+
67
+ }
48
68
 
49
69
  }
50
70
 
@@ -220,23 +240,25 @@ class WebGPUUtils {
220
240
  */
221
241
  getPreferredCanvasFormat() {
222
242
 
223
- const outputType = this.backend.parameters.outputType;
243
+ const parameters = this.backend.parameters;
244
+
245
+ const bufferType = parameters.outputType;
224
246
 
225
- if ( outputType === undefined ) {
247
+ if ( bufferType === undefined ) {
226
248
 
227
249
  return navigator.gpu.getPreferredCanvasFormat();
228
250
 
229
- } else if ( outputType === UnsignedByteType ) {
251
+ } else if ( bufferType === UnsignedByteType ) {
230
252
 
231
253
  return GPUTextureFormat.BGRA8Unorm;
232
254
 
233
- } else if ( outputType === HalfFloatType ) {
255
+ } else if ( bufferType === HalfFloatType ) {
234
256
 
235
257
  return GPUTextureFormat.RGBA16Float;
236
258
 
237
259
  } else {
238
260
 
239
- throw new Error( 'Unsupported outputType' );
261
+ throw new Error( 'Unsupported output buffer type.' );
240
262
 
241
263
  }
242
264
 
@@ -109,6 +109,7 @@ class WebXRController {
109
109
  this._grip.linearVelocity = new Vector3();
110
110
  this._grip.hasAngularVelocity = false;
111
111
  this._grip.angularVelocity = new Vector3();
112
+ this._grip.eventsEnabled = false;
112
113
 
113
114
  }
114
115
 
@@ -321,6 +322,17 @@ class WebXRController {
321
322
 
322
323
  }
323
324
 
325
+ // grip update event if enabled
326
+ if ( grip.eventsEnabled ) {
327
+
328
+ grip.dispatchEvent( {
329
+ type: 'gripUpdated',
330
+ data: inputSource,
331
+ target: this
332
+ } );
333
+
334
+ }
335
+
324
336
  }
325
337
 
326
338
  }
@@ -31,6 +31,8 @@ class WebXRManager extends EventDispatcher {
31
31
  *
32
32
  * @param {WebGLRenderer} renderer - The renderer.
33
33
  * @param {WebGL2RenderingContext} gl - The rendering context.
34
+ * @param {WebGLExtensions} extensions - The WebGL extensions helper.
35
+ * @param {boolean} useMultiview - Whether to enable OCULUS_multiview when available.
34
36
  */
35
37
  constructor( renderer, gl, extensions, useMultiview ) {
36
38
 
@@ -815,8 +817,8 @@ class WebXRManager extends EventDispatcher {
815
817
 
816
818
  // inherit camera layers and enable eye layers (1 = left, 2 = right)
817
819
  cameraXR.layers.mask = camera.layers.mask | 0b110;
818
- cameraL.layers.mask = cameraXR.layers.mask & 0b011;
819
- cameraR.layers.mask = cameraXR.layers.mask & 0b101;
820
+ cameraL.layers.mask = cameraXR.layers.mask & ~ 0b100;
821
+ cameraR.layers.mask = cameraXR.layers.mask & ~ 0b010;
820
822
 
821
823
  const cameras = cameraXR.cameras;
822
824
  var object = poseTarget || camera;
@@ -0,0 +1,76 @@
1
+ import { DepthTexture } from './DepthTexture.js';
2
+ import { CubeReflectionMapping, NearestFilter, UnsignedIntType, DepthFormat } from '../constants.js';
3
+
4
+ /**
5
+ * This class can be used to automatically save the depth information of a
6
+ * cube rendering into a cube texture with depth format. Used for PointLight shadows.
7
+ *
8
+ * @augments DepthTexture
9
+ */
10
+ class CubeDepthTexture extends DepthTexture {
11
+
12
+ /**
13
+ * Constructs a new cube depth texture.
14
+ *
15
+ * @param {number} size - The size (width and height) of each cube face.
16
+ * @param {number} [type=UnsignedIntType] - The texture type.
17
+ * @param {number} [mapping=CubeReflectionMapping] - The texture mapping.
18
+ * @param {number} [wrapS=ClampToEdgeWrapping] - The wrapS value.
19
+ * @param {number} [wrapT=ClampToEdgeWrapping] - The wrapT value.
20
+ * @param {number} [magFilter=NearestFilter] - The mag filter value.
21
+ * @param {number} [minFilter=NearestFilter] - The min filter value.
22
+ * @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The anisotropy value.
23
+ * @param {number} [format=DepthFormat] - The texture format.
24
+ */
25
+ constructor( size, type = UnsignedIntType, mapping = CubeReflectionMapping, wrapS, wrapT, magFilter = NearestFilter, minFilter = NearestFilter, anisotropy, format = DepthFormat ) {
26
+
27
+ // Create 6 identical image descriptors for the cube faces
28
+ const image = { width: size, height: size, depth: 1 };
29
+ const images = [ image, image, image, image, image, image ];
30
+
31
+ // Call DepthTexture constructor with width, height
32
+ super( size, size, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format );
33
+
34
+ // Replace the single image with the array of 6 images
35
+ this.image = images;
36
+
37
+ /**
38
+ * This flag can be used for type testing.
39
+ *
40
+ * @type {boolean}
41
+ * @readonly
42
+ * @default true
43
+ */
44
+ this.isCubeDepthTexture = true;
45
+
46
+ /**
47
+ * Set to true for cube texture handling in WebGLTextures.
48
+ *
49
+ * @type {boolean}
50
+ * @readonly
51
+ * @default true
52
+ */
53
+ this.isCubeTexture = true;
54
+
55
+ }
56
+
57
+ /**
58
+ * Alias for {@link CubeDepthTexture#image}.
59
+ *
60
+ * @type {Array<Image>}
61
+ */
62
+ get images() {
63
+
64
+ return this.image;
65
+
66
+ }
67
+
68
+ set images( value ) {
69
+
70
+ this.image = value;
71
+
72
+ }
73
+
74
+ }
75
+
76
+ export { CubeDepthTexture };