@plastic-software/three 0.175.14 → 0.179.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 (572) hide show
  1. package/README.md +4 -4
  2. package/build/three.cjs +8402 -6787
  3. package/build/three.core.js +8007 -6688
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +397 -102
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +84 -27
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +6831 -2838
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +6648 -2838
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/jsm/Addons.js +1 -3
  14. package/examples/jsm/animation/AnimationClipCreator.js +1 -0
  15. package/examples/jsm/animation/CCDIKSolver.js +6 -3
  16. package/examples/jsm/capabilities/WebGL.js +1 -27
  17. package/examples/jsm/capabilities/WebGPU.js +2 -1
  18. package/examples/jsm/controls/ArcballControls.js +15 -4
  19. package/examples/jsm/controls/DragControls.js +1 -0
  20. package/examples/jsm/controls/FirstPersonControls.js +1 -0
  21. package/examples/jsm/controls/FlyControls.js +1 -0
  22. package/examples/jsm/controls/MapControls.js +1 -0
  23. package/examples/jsm/controls/OrbitControls.js +1 -0
  24. package/examples/jsm/controls/PointerLockControls.js +5 -3
  25. package/examples/jsm/controls/TrackballControls.js +1 -0
  26. package/examples/jsm/controls/TransformControls.js +62 -14
  27. package/examples/jsm/csm/CSM.js +2 -0
  28. package/examples/jsm/csm/CSMFrustum.js +2 -0
  29. package/examples/jsm/csm/CSMHelper.js +1 -0
  30. package/examples/jsm/csm/CSMShader.js +4 -1
  31. package/examples/jsm/csm/CSMShadowNode.js +22 -8
  32. package/examples/jsm/curves/CurveExtras.js +14 -0
  33. package/examples/jsm/curves/NURBSCurve.js +1 -0
  34. package/examples/jsm/curves/NURBSSurface.js +2 -0
  35. package/examples/jsm/curves/NURBSUtils.js +4 -1
  36. package/examples/jsm/curves/NURBSVolume.js +2 -0
  37. package/examples/jsm/effects/AnaglyphEffect.js +2 -0
  38. package/examples/jsm/effects/AsciiEffect.js +2 -0
  39. package/examples/jsm/effects/OutlineEffect.js +2 -0
  40. package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -0
  41. package/examples/jsm/effects/StereoEffect.js +2 -0
  42. package/examples/jsm/environments/DebugEnvironment.js +1 -0
  43. package/examples/jsm/environments/RoomEnvironment.js +57 -38
  44. package/examples/jsm/exporters/DRACOExporter.js +4 -2
  45. package/examples/jsm/exporters/EXRExporter.js +2 -0
  46. package/examples/jsm/exporters/GLTFExporter.js +7 -4
  47. package/examples/jsm/exporters/KTX2Exporter.js +2 -0
  48. package/examples/jsm/exporters/OBJExporter.js +3 -1
  49. package/examples/jsm/exporters/PLYExporter.js +4 -2
  50. package/examples/jsm/exporters/STLExporter.js +2 -0
  51. package/examples/jsm/exporters/USDZExporter.js +679 -300
  52. package/examples/jsm/geometries/BoxLineGeometry.js +1 -0
  53. package/examples/jsm/geometries/ConvexGeometry.js +1 -0
  54. package/examples/jsm/geometries/DecalGeometry.js +1 -0
  55. package/examples/jsm/geometries/ParametricFunctions.js +4 -1
  56. package/examples/jsm/geometries/ParametricGeometry.js +1 -0
  57. package/examples/jsm/geometries/RoundedBoxGeometry.js +48 -8
  58. package/examples/jsm/geometries/TeapotGeometry.js +1 -0
  59. package/examples/jsm/geometries/TextGeometry.js +1 -0
  60. package/examples/jsm/helpers/LightProbeHelper.js +1 -0
  61. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -0
  62. package/examples/jsm/helpers/OctreeHelper.js +1 -0
  63. package/examples/jsm/helpers/PositionalAudioHelper.js +1 -0
  64. package/examples/jsm/helpers/RapierHelper.js +59 -0
  65. package/examples/jsm/helpers/RectAreaLightHelper.js +1 -0
  66. package/examples/jsm/helpers/TextureHelper.js +1 -0
  67. package/examples/jsm/helpers/TextureHelperGPU.js +5 -4
  68. package/examples/jsm/helpers/VertexNormalsHelper.js +1 -0
  69. package/examples/jsm/helpers/VertexTangentsHelper.js +1 -0
  70. package/examples/jsm/helpers/ViewHelper.js +1 -0
  71. package/examples/jsm/interactive/HTMLMesh.js +11 -2
  72. package/examples/jsm/interactive/InteractiveGroup.js +1 -0
  73. package/examples/jsm/interactive/SelectionBox.js +2 -0
  74. package/examples/jsm/interactive/SelectionHelper.js +2 -0
  75. package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
  76. package/examples/jsm/lighting/TiledLighting.js +1 -0
  77. package/examples/jsm/lights/LightProbeGenerator.js +15 -3
  78. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -0
  79. package/examples/jsm/lights/RectAreaLightUniformsLib.js +1 -0
  80. package/examples/jsm/lines/Line2.js +1 -0
  81. package/examples/jsm/lines/LineGeometry.js +1 -0
  82. package/examples/jsm/lines/LineMaterial.js +4 -4
  83. package/examples/jsm/lines/LineSegments2.js +1 -0
  84. package/examples/jsm/lines/LineSegmentsGeometry.js +1 -0
  85. package/examples/jsm/lines/Wireframe.js +1 -0
  86. package/examples/jsm/lines/WireframeGeometry2.js +1 -0
  87. package/examples/jsm/lines/webgpu/Line2.js +1 -0
  88. package/examples/jsm/lines/webgpu/LineSegments2.js +3 -1
  89. package/examples/jsm/lines/webgpu/Wireframe.js +1 -0
  90. package/examples/jsm/loaders/3DMLoader.js +1 -0
  91. package/examples/jsm/loaders/3MFLoader.js +1 -0
  92. package/examples/jsm/loaders/AMFLoader.js +1 -0
  93. package/examples/jsm/loaders/BVHLoader.js +1 -0
  94. package/examples/jsm/loaders/ColladaLoader.js +6 -5
  95. package/examples/jsm/loaders/DDSLoader.js +1 -0
  96. package/examples/jsm/loaders/DRACOLoader.js +2 -1
  97. package/examples/jsm/loaders/EXRLoader.js +211 -22
  98. package/examples/jsm/loaders/FBXLoader.js +25 -23
  99. package/examples/jsm/loaders/FontLoader.js +1 -0
  100. package/examples/jsm/loaders/GCodeLoader.js +1 -0
  101. package/examples/jsm/loaders/GLTFLoader.js +10 -82
  102. package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -0
  103. package/examples/jsm/loaders/IESLoader.js +1 -0
  104. package/examples/jsm/loaders/KMZLoader.js +1 -0
  105. package/examples/jsm/loaders/KTX2Loader.js +67 -26
  106. package/examples/jsm/loaders/KTXLoader.js +1 -0
  107. package/examples/jsm/loaders/LDrawLoader.js +55 -3
  108. package/examples/jsm/loaders/LUT3dlLoader.js +1 -0
  109. package/examples/jsm/loaders/LUTCubeLoader.js +1 -0
  110. package/examples/jsm/loaders/LUTImageLoader.js +1 -0
  111. package/examples/jsm/loaders/LWOLoader.js +1 -13
  112. package/examples/jsm/loaders/LottieLoader.js +15 -0
  113. package/examples/jsm/loaders/MD2Loader.js +1 -0
  114. package/examples/jsm/loaders/MDDLoader.js +1 -0
  115. package/examples/jsm/loaders/MTLLoader.js +4 -3
  116. package/examples/jsm/loaders/MaterialXLoader.js +213 -30
  117. package/examples/jsm/loaders/NRRDLoader.js +1 -0
  118. package/examples/jsm/loaders/OBJLoader.js +1 -0
  119. package/examples/jsm/loaders/PCDLoader.js +122 -19
  120. package/examples/jsm/loaders/PDBLoader.js +1 -0
  121. package/examples/jsm/loaders/PLYLoader.js +1 -0
  122. package/examples/jsm/loaders/PVRLoader.js +1 -0
  123. package/examples/jsm/loaders/RGBELoader.js +1 -0
  124. package/examples/jsm/loaders/RGBMLoader.js +1 -0
  125. package/examples/jsm/loaders/STLLoader.js +1 -0
  126. package/examples/jsm/loaders/SVGLoader.js +1 -0
  127. package/examples/jsm/loaders/TDSLoader.js +1 -0
  128. package/examples/jsm/loaders/TGALoader.js +1 -0
  129. package/examples/jsm/loaders/TIFFLoader.js +1 -0
  130. package/examples/jsm/loaders/TTFLoader.js +14 -1
  131. package/examples/jsm/loaders/USDLoader.js +219 -0
  132. package/examples/jsm/loaders/USDZLoader.js +4 -891
  133. package/examples/jsm/loaders/UltraHDRLoader.js +1 -0
  134. package/examples/jsm/loaders/VOXLoader.js +1 -0
  135. package/examples/jsm/loaders/VRMLLoader.js +3 -2
  136. package/examples/jsm/loaders/VTKLoader.js +1 -0
  137. package/examples/jsm/loaders/XYZLoader.js +1 -0
  138. package/examples/jsm/loaders/lwo/IFFParser.js +74 -74
  139. package/examples/jsm/loaders/usd/USDAParser.js +741 -0
  140. package/examples/jsm/loaders/usd/USDCParser.js +17 -0
  141. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +1 -0
  142. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -0
  143. package/examples/jsm/materials/MeshPostProcessingMaterial.js +1 -0
  144. package/examples/jsm/math/Capsule.js +2 -0
  145. package/examples/jsm/math/ColorConverter.js +1 -0
  146. package/examples/jsm/math/ConvexHull.js +2 -0
  147. package/examples/jsm/math/ImprovedNoise.js +19 -14
  148. package/examples/jsm/math/Lut.js +2 -0
  149. package/examples/jsm/math/MeshSurfaceSampler.js +2 -0
  150. package/examples/jsm/math/OBB.js +2 -0
  151. package/examples/jsm/math/Octree.js +20 -1
  152. package/examples/jsm/math/SimplexNoise.js +2 -0
  153. package/examples/jsm/misc/ConvexObjectBreaker.js +3 -1
  154. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  155. package/examples/jsm/misc/Gyroscope.js +1 -0
  156. package/examples/jsm/misc/MD2Character.js +2 -0
  157. package/examples/jsm/misc/MD2CharacterComplex.js +5 -3
  158. package/examples/jsm/misc/MorphAnimMesh.js +1 -0
  159. package/examples/jsm/misc/MorphBlendMesh.js +1 -0
  160. package/examples/jsm/misc/ProgressiveLightMap.js +2 -0
  161. package/examples/jsm/misc/ProgressiveLightMapGPU.js +2 -0
  162. package/examples/jsm/misc/RollerCoaster.js +5 -0
  163. package/examples/jsm/misc/TubePainter.js +1 -0
  164. package/examples/jsm/misc/Volume.js +2 -0
  165. package/examples/jsm/misc/VolumeSlice.js +1 -0
  166. package/examples/jsm/modifiers/CurveModifier.js +3 -0
  167. package/examples/jsm/modifiers/CurveModifierGPU.js +2 -0
  168. package/examples/jsm/modifiers/EdgeSplitModifier.js +2 -0
  169. package/examples/jsm/modifiers/SimplifyModifier.js +2 -0
  170. package/examples/jsm/modifiers/TessellateModifier.js +2 -0
  171. package/examples/jsm/objects/GroundedSkybox.js +1 -0
  172. package/examples/jsm/objects/Lensflare.js +3 -0
  173. package/examples/jsm/objects/LensflareMesh.js +4 -3
  174. package/examples/jsm/objects/MarchingCubes.js +2 -0
  175. package/examples/jsm/objects/Reflector.js +1 -0
  176. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  177. package/examples/jsm/objects/Refractor.js +1 -0
  178. package/examples/jsm/objects/ShadowMesh.js +1 -0
  179. package/examples/jsm/objects/Sky.js +2 -1
  180. package/examples/jsm/objects/SkyMesh.js +22 -19
  181. package/examples/jsm/objects/Water.js +1 -0
  182. package/examples/jsm/objects/Water2.js +1 -0
  183. package/examples/jsm/objects/Water2Mesh.js +3 -1
  184. package/examples/jsm/objects/WaterMesh.js +2 -1
  185. package/examples/jsm/physics/AmmoPhysics.js +1 -0
  186. package/examples/jsm/physics/JoltPhysics.js +1 -0
  187. package/examples/jsm/physics/RapierPhysics.js +149 -13
  188. package/examples/jsm/postprocessing/AfterimagePass.js +20 -2
  189. package/examples/jsm/postprocessing/BloomPass.js +2 -1
  190. package/examples/jsm/postprocessing/BokehPass.js +2 -1
  191. package/examples/jsm/postprocessing/ClearPass.js +1 -0
  192. package/examples/jsm/postprocessing/CubeTexturePass.js +1 -0
  193. package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
  194. package/examples/jsm/postprocessing/EffectComposer.js +4 -2
  195. package/examples/jsm/postprocessing/FXAAPass.js +40 -0
  196. package/examples/jsm/postprocessing/FilmPass.js +1 -0
  197. package/examples/jsm/postprocessing/GTAOPass.js +14 -12
  198. package/examples/jsm/postprocessing/GlitchPass.js +2 -1
  199. package/examples/jsm/postprocessing/HalftonePass.js +2 -1
  200. package/examples/jsm/postprocessing/LUTPass.js +1 -0
  201. package/examples/jsm/postprocessing/MaskPass.js +1 -0
  202. package/examples/jsm/postprocessing/OutlinePass.js +22 -19
  203. package/examples/jsm/postprocessing/OutputPass.js +1 -0
  204. package/examples/jsm/postprocessing/Pass.js +3 -1
  205. package/examples/jsm/postprocessing/RenderPass.js +1 -0
  206. package/examples/jsm/postprocessing/RenderPixelatedPass.js +2 -1
  207. package/examples/jsm/postprocessing/RenderTransitionPass.js +4 -3
  208. package/examples/jsm/postprocessing/SAOPass.js +3 -2
  209. package/examples/jsm/postprocessing/SMAAPass.js +3 -2
  210. package/examples/jsm/postprocessing/SSAARenderPass.js +2 -1
  211. package/examples/jsm/postprocessing/SSAOPass.js +12 -10
  212. package/examples/jsm/postprocessing/SSRPass.js +4 -3
  213. package/examples/jsm/postprocessing/SavePass.js +2 -1
  214. package/examples/jsm/postprocessing/ShaderPass.js +1 -0
  215. package/examples/jsm/postprocessing/TAARenderPass.js +1 -0
  216. package/examples/jsm/postprocessing/TexturePass.js +1 -0
  217. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -1
  218. package/examples/jsm/renderers/CSS2DRenderer.js +3 -0
  219. package/examples/jsm/renderers/CSS3DRenderer.js +4 -0
  220. package/examples/jsm/renderers/Projector.js +2 -0
  221. package/examples/jsm/renderers/SVGRenderer.js +3 -0
  222. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +4 -1
  223. package/examples/jsm/shaders/AfterimageShader.js +4 -1
  224. package/examples/jsm/shaders/BasicShader.js +4 -1
  225. package/examples/jsm/shaders/BleachBypassShader.js +4 -1
  226. package/examples/jsm/shaders/BlendShader.js +4 -1
  227. package/examples/jsm/shaders/BokehShader.js +4 -1
  228. package/examples/jsm/shaders/BokehShader2.js +4 -1
  229. package/examples/jsm/shaders/BrightnessContrastShader.js +4 -1
  230. package/examples/jsm/shaders/ColorCorrectionShader.js +4 -1
  231. package/examples/jsm/shaders/ColorifyShader.js +4 -1
  232. package/examples/jsm/shaders/ConvolutionShader.js +4 -1
  233. package/examples/jsm/shaders/CopyShader.js +4 -1
  234. package/examples/jsm/shaders/DOFMipMapShader.js +4 -1
  235. package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
  236. package/examples/jsm/shaders/DigitalGlitch.js +4 -1
  237. package/examples/jsm/shaders/DotScreenShader.js +4 -1
  238. package/examples/jsm/shaders/ExposureShader.js +4 -1
  239. package/examples/jsm/shaders/FXAAShader.js +4 -1
  240. package/examples/jsm/shaders/FilmShader.js +4 -1
  241. package/examples/jsm/shaders/FocusShader.js +4 -1
  242. package/examples/jsm/shaders/FreiChenShader.js +4 -1
  243. package/examples/jsm/shaders/GTAOShader.js +4 -1
  244. package/examples/jsm/shaders/GammaCorrectionShader.js +4 -1
  245. package/examples/jsm/shaders/GodRaysShader.js +4 -1
  246. package/examples/jsm/shaders/HalftoneShader.js +4 -1
  247. package/examples/jsm/shaders/HorizontalBlurShader.js +4 -1
  248. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +4 -1
  249. package/examples/jsm/shaders/HueSaturationShader.js +4 -1
  250. package/examples/jsm/shaders/KaleidoShader.js +4 -1
  251. package/examples/jsm/shaders/LuminosityHighPassShader.js +4 -1
  252. package/examples/jsm/shaders/LuminosityShader.js +4 -1
  253. package/examples/jsm/shaders/MirrorShader.js +4 -1
  254. package/examples/jsm/shaders/NormalMapShader.js +4 -1
  255. package/examples/jsm/shaders/OutputShader.js +4 -1
  256. package/examples/jsm/shaders/PoissonDenoiseShader.js +4 -1
  257. package/examples/jsm/shaders/RGBShiftShader.js +4 -1
  258. package/examples/jsm/shaders/SAOShader.js +4 -1
  259. package/examples/jsm/shaders/SMAAShader.js +1 -0
  260. package/examples/jsm/shaders/SSAOShader.js +4 -1
  261. package/examples/jsm/shaders/SSRShader.js +1 -0
  262. package/examples/jsm/shaders/SepiaShader.js +4 -1
  263. package/examples/jsm/shaders/SobelOperatorShader.js +4 -1
  264. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +4 -1
  265. package/examples/jsm/shaders/TechnicolorShader.js +4 -1
  266. package/examples/jsm/shaders/ToonShader.js +2 -1
  267. package/examples/jsm/shaders/TriangleBlurShader.js +4 -1
  268. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +15 -3
  269. package/examples/jsm/shaders/VelocityShader.js +4 -1
  270. package/examples/jsm/shaders/VerticalBlurShader.js +4 -1
  271. package/examples/jsm/shaders/VerticalTiltShiftShader.js +4 -1
  272. package/examples/jsm/shaders/VignetteShader.js +4 -1
  273. package/examples/jsm/shaders/VolumeShader.js +5 -2
  274. package/examples/jsm/shaders/WaterRefractionShader.js +4 -1
  275. package/examples/jsm/textures/FlakesTexture.js +2 -0
  276. package/examples/jsm/transpiler/AST.js +381 -30
  277. package/examples/jsm/transpiler/GLSLDecoder.js +227 -88
  278. package/examples/jsm/transpiler/Linker.js +327 -0
  279. package/examples/jsm/transpiler/TSLEncoder.js +234 -85
  280. package/examples/jsm/transpiler/Transpiler.js +19 -1
  281. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  282. package/examples/jsm/transpiler/WGSLEncoder.js +788 -0
  283. package/examples/jsm/tsl/display/AfterImageNode.js +2 -3
  284. package/examples/jsm/tsl/display/AnaglyphPassNode.js +1 -0
  285. package/examples/jsm/tsl/display/AnamorphicNode.js +5 -4
  286. package/examples/jsm/tsl/display/BloomNode.js +9 -7
  287. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +206 -0
  288. package/examples/jsm/tsl/display/DenoiseNode.js +33 -33
  289. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -0
  290. package/examples/jsm/tsl/display/DotScreenNode.js +1 -0
  291. package/examples/jsm/tsl/display/FXAANode.js +3 -2
  292. package/examples/jsm/tsl/display/FilmNode.js +1 -0
  293. package/examples/jsm/tsl/display/GTAONode.js +1 -0
  294. package/examples/jsm/tsl/display/GaussianBlurNode.js +9 -36
  295. package/examples/jsm/tsl/display/LensflareNode.js +1 -0
  296. package/examples/jsm/tsl/display/Lut3DNode.js +1 -0
  297. package/examples/jsm/tsl/display/OutlineNode.js +1 -0
  298. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +1 -0
  299. package/examples/jsm/tsl/display/PixelationPassNode.js +1 -0
  300. package/examples/jsm/tsl/display/RGBShiftNode.js +1 -0
  301. package/examples/jsm/tsl/display/SMAANode.js +9 -8
  302. package/examples/jsm/tsl/display/SSAAPassNode.js +5 -4
  303. package/examples/jsm/tsl/display/SSRNode.js +1 -0
  304. package/examples/jsm/tsl/display/SobelOperatorNode.js +1 -0
  305. package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -0
  306. package/examples/jsm/tsl/display/StereoPassNode.js +1 -0
  307. package/examples/jsm/tsl/display/{TRAAPassNode.js → TRAANode.js} +184 -174
  308. package/examples/jsm/tsl/display/TransitionNode.js +1 -0
  309. package/examples/jsm/tsl/display/hashBlur.js +28 -6
  310. package/examples/jsm/tsl/lighting/TiledLightsNode.js +5 -4
  311. package/examples/jsm/tsl/math/Bayer.js +4 -1
  312. package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
  313. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
  314. package/examples/jsm/tsl/utils/Raymarching.js +6 -3
  315. package/examples/jsm/utils/BufferGeometryUtils.js +4 -1
  316. package/examples/jsm/utils/CameraUtils.js +4 -1
  317. package/examples/jsm/utils/GeometryCompressionUtils.js +4 -1
  318. package/examples/jsm/utils/GeometryUtils.js +4 -1
  319. package/examples/jsm/utils/LDrawUtils.js +2 -0
  320. package/examples/jsm/utils/SceneOptimizer.js +2 -0
  321. package/examples/jsm/utils/SceneUtils.js +4 -1
  322. package/examples/jsm/utils/ShadowMapViewer.js +2 -0
  323. package/examples/jsm/utils/ShadowMapViewerGPU.js +2 -0
  324. package/examples/jsm/utils/SkeletonUtils.js +4 -1
  325. package/examples/jsm/utils/SortUtils.js +4 -1
  326. package/examples/jsm/utils/UVsDebug.js +4 -1
  327. package/examples/jsm/utils/WebGLTextureUtils.js +4 -1
  328. package/examples/jsm/utils/WebGPUTextureUtils.js +4 -1
  329. package/examples/jsm/utils/WorkerPool.js +2 -0
  330. package/examples/jsm/webxr/ARButton.js +1 -0
  331. package/examples/jsm/webxr/OculusHandModel.js +1 -0
  332. package/examples/jsm/webxr/OculusHandPointerModel.js +1 -0
  333. package/examples/jsm/webxr/Text2D.js +4 -1
  334. package/examples/jsm/webxr/VRButton.js +1 -0
  335. package/examples/jsm/webxr/XRButton.js +1 -0
  336. package/examples/jsm/webxr/XRControllerModelFactory.js +2 -0
  337. package/examples/jsm/webxr/XREstimatedLight.js +1 -0
  338. package/examples/jsm/webxr/XRHandMeshModel.js +2 -0
  339. package/examples/jsm/webxr/XRHandModelFactory.js +2 -0
  340. package/examples/jsm/webxr/XRHandPrimitiveModel.js +2 -0
  341. package/examples/jsm/webxr/XRPlanes.js +1 -0
  342. package/package.json +6 -4
  343. package/src/Three.Core.js +2 -1
  344. package/src/Three.TSL.js +83 -26
  345. package/src/Three.WebGPU.Nodes.js +1 -0
  346. package/src/Three.WebGPU.js +3 -0
  347. package/src/animation/KeyframeTrack.js +1 -1
  348. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  349. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  350. package/src/audio/AudioListener.js +13 -10
  351. package/src/cameras/ArrayCamera.js +9 -1
  352. package/src/cameras/Camera.js +14 -0
  353. package/src/cameras/OrthographicCamera.js +1 -1
  354. package/src/cameras/PerspectiveCamera.js +1 -1
  355. package/src/constants.js +47 -20
  356. package/src/core/BufferAttribute.js +3 -3
  357. package/src/core/BufferGeometry.js +2 -5
  358. package/src/core/Clock.js +2 -8
  359. package/src/core/GLBufferAttribute.js +13 -1
  360. package/src/core/Object3D.js +23 -22
  361. package/src/core/RenderTarget.js +65 -21
  362. package/src/core/RenderTarget3D.js +1 -0
  363. package/{examples/jsm/misc → src/core}/Timer.js +4 -40
  364. package/src/extras/PMREMGenerator.js +11 -0
  365. package/src/extras/TextureUtils.js +1 -5
  366. package/src/extras/core/Curve.js +1 -1
  367. package/src/extras/core/Path.js +22 -22
  368. package/src/geometries/CapsuleGeometry.js +167 -17
  369. package/src/geometries/ExtrudeGeometry.js +39 -29
  370. package/src/helpers/ArrowHelper.js +2 -2
  371. package/src/helpers/CameraHelper.js +41 -11
  372. package/src/helpers/SkeletonHelper.js +36 -7
  373. package/src/lights/LightShadow.js +34 -7
  374. package/src/lights/PointLightShadow.js +1 -1
  375. package/src/lights/SpotLightShadow.js +9 -1
  376. package/src/lights/webgpu/ProjectorLight.js +46 -0
  377. package/src/loaders/BufferGeometryLoader.js +1 -10
  378. package/src/loaders/FileLoader.js +27 -4
  379. package/src/loaders/ImageBitmapLoader.js +48 -9
  380. package/src/loaders/ImageLoader.js +55 -8
  381. package/src/loaders/Loader.js +14 -0
  382. package/src/loaders/LoadingManager.js +23 -0
  383. package/src/loaders/ObjectLoader.js +44 -16
  384. package/src/loaders/nodes/NodeObjectLoader.js +2 -2
  385. package/src/materials/Material.js +1 -7
  386. package/src/materials/MeshBasicMaterial.js +1 -1
  387. package/src/materials/nodes/Line2NodeMaterial.js +0 -8
  388. package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
  389. package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
  390. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  391. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
  392. package/src/materials/nodes/MeshSSSNodeMaterial.js +2 -2
  393. package/src/materials/nodes/NodeMaterial.js +106 -20
  394. package/src/materials/nodes/PointsNodeMaterial.js +5 -0
  395. package/src/materials/nodes/manager/NodeMaterialObserver.js +107 -4
  396. package/src/math/Box3.js +28 -0
  397. package/src/math/Color.js +7 -7
  398. package/src/math/ColorManagement.js +22 -3
  399. package/src/math/Frustum.js +25 -9
  400. package/src/math/FrustumArray.js +258 -0
  401. package/src/math/Line3.js +129 -2
  402. package/src/math/Matrix4.js +48 -27
  403. package/src/math/Quaternion.js +1 -1
  404. package/src/math/Ray.js +2 -0
  405. package/src/math/Sphere.js +28 -0
  406. package/src/math/Spherical.js +2 -2
  407. package/src/nodes/Nodes.js +3 -3
  408. package/src/nodes/TSL.js +6 -3
  409. package/src/nodes/accessors/AccessorsUtils.js +7 -8
  410. package/src/nodes/accessors/Bitangent.js +54 -26
  411. package/src/nodes/accessors/Camera.js +40 -13
  412. package/src/nodes/accessors/CubeTextureNode.js +50 -2
  413. package/src/nodes/accessors/InstanceNode.js +5 -4
  414. package/src/nodes/accessors/Lights.js +2 -2
  415. package/src/nodes/accessors/MaterialNode.js +4 -0
  416. package/src/nodes/accessors/ModelNode.js +1 -1
  417. package/src/nodes/accessors/Normal.js +110 -24
  418. package/src/nodes/accessors/Object3DNode.js +7 -8
  419. package/src/nodes/accessors/Position.js +14 -4
  420. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  421. package/src/nodes/accessors/ReferenceNode.js +19 -4
  422. package/src/nodes/accessors/ReflectVector.js +3 -3
  423. package/src/nodes/accessors/SceneNode.js +1 -1
  424. package/src/nodes/accessors/SkinningNode.js +3 -2
  425. package/src/nodes/accessors/StorageBufferNode.js +25 -0
  426. package/src/nodes/accessors/StorageTextureNode.js +15 -4
  427. package/src/nodes/accessors/Tangent.js +25 -17
  428. package/src/nodes/accessors/TangentUtils.js +46 -0
  429. package/src/nodes/accessors/TextureBicubic.js +21 -3
  430. package/src/nodes/accessors/TextureNode.js +71 -8
  431. package/src/nodes/accessors/UniformArrayNode.js +0 -16
  432. package/src/nodes/accessors/VelocityNode.js +1 -0
  433. package/src/nodes/accessors/VertexColorNode.js +4 -4
  434. package/src/nodes/code/CodeNode.js +8 -11
  435. package/src/nodes/core/ArrayNode.js +12 -0
  436. package/src/nodes/core/AssignNode.js +30 -5
  437. package/src/nodes/core/AttributeNode.js +2 -2
  438. package/src/nodes/core/ContextNode.js +27 -4
  439. package/src/nodes/core/Node.js +83 -22
  440. package/src/nodes/core/NodeBuilder.js +273 -49
  441. package/src/nodes/core/NodeUtils.js +46 -1
  442. package/src/nodes/core/NodeVarying.js +19 -1
  443. package/src/nodes/core/PropertyNode.js +8 -12
  444. package/src/nodes/core/StackNode.js +171 -26
  445. package/src/nodes/core/StructTypeNode.js +26 -4
  446. package/src/nodes/core/SubBuildNode.js +89 -0
  447. package/src/nodes/core/UniformNode.js +63 -5
  448. package/src/nodes/core/VarNode.js +102 -4
  449. package/src/nodes/core/VaryingNode.js +45 -24
  450. package/src/nodes/display/BlendModes.js +42 -1
  451. package/src/nodes/display/ColorSpaceNode.js +4 -27
  452. package/src/nodes/display/FrontFacingNode.js +34 -2
  453. package/src/nodes/display/NormalMapNode.js +19 -50
  454. package/src/nodes/display/PassNode.js +165 -20
  455. package/src/nodes/display/ScreenNode.js +0 -26
  456. package/src/nodes/display/ViewportTextureNode.js +67 -7
  457. package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
  458. package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
  459. package/src/nodes/functions/PhongLightingModel.js +3 -3
  460. package/src/nodes/functions/PhysicalLightingModel.js +16 -16
  461. package/src/nodes/functions/ShadowMaskModel.js +5 -1
  462. package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
  463. package/src/nodes/functions/material/getParallaxCorrectNormal.js +1 -1
  464. package/src/nodes/gpgpu/AtomicFunctionNode.js +28 -10
  465. package/src/nodes/gpgpu/BarrierNode.js +3 -3
  466. package/src/nodes/gpgpu/ComputeNode.js +68 -24
  467. package/src/nodes/gpgpu/WorkgroupInfoNode.js +28 -3
  468. package/src/nodes/lighting/AnalyticLightNode.js +7 -13
  469. package/src/nodes/lighting/EnvironmentNode.js +5 -5
  470. package/src/nodes/lighting/HemisphereLightNode.js +2 -2
  471. package/src/nodes/lighting/IESSpotLightNode.js +2 -1
  472. package/src/nodes/lighting/LightsNode.js +29 -11
  473. package/src/nodes/lighting/ProjectorLightNode.js +91 -0
  474. package/src/nodes/lighting/ShadowBaseNode.js +1 -12
  475. package/src/nodes/lighting/ShadowFilterNode.js +274 -0
  476. package/src/nodes/lighting/ShadowNode.js +174 -242
  477. package/src/nodes/lighting/SpotLightNode.js +44 -7
  478. package/src/nodes/materialx/MaterialXNodes.js +131 -2
  479. package/src/nodes/materialx/lib/mx_noise.js +166 -2
  480. package/src/nodes/math/ConditionalNode.js +1 -20
  481. package/src/nodes/math/MathNode.js +146 -75
  482. package/src/nodes/math/OperatorNode.js +129 -119
  483. package/src/nodes/shapes/Shapes.js +5 -4
  484. package/src/nodes/tsl/TSLBase.js +1 -0
  485. package/src/nodes/tsl/TSLCore.js +222 -72
  486. package/src/nodes/utils/DebugNode.js +16 -4
  487. package/src/nodes/utils/Discard.js +2 -2
  488. package/src/nodes/utils/EquirectUV.js +27 -0
  489. package/src/nodes/utils/EventNode.js +83 -0
  490. package/src/nodes/utils/LoopNode.js +64 -34
  491. package/src/nodes/utils/MatcapUV.js +22 -0
  492. package/src/nodes/utils/RTTNode.js +22 -5
  493. package/src/nodes/utils/ReflectorNode.js +77 -7
  494. package/src/nodes/utils/SampleNode.js +81 -0
  495. package/src/nodes/utils/TriplanarTextures.js +65 -0
  496. package/src/objects/BatchedMesh.js +20 -6
  497. package/src/objects/Mesh.js +9 -0
  498. package/src/objects/Skeleton.js +1 -1
  499. package/src/objects/Sprite.js +9 -0
  500. package/src/renderers/WebGL3DRenderTarget.js +1 -0
  501. package/src/renderers/WebGLArrayRenderTarget.js +1 -0
  502. package/src/renderers/WebGLCubeRenderTarget.js +2 -4
  503. package/src/renderers/WebGLRenderer.js +45 -32
  504. package/src/renderers/common/Animation.js +2 -2
  505. package/src/renderers/common/Background.js +13 -2
  506. package/src/renderers/common/Bindings.js +19 -18
  507. package/src/renderers/common/Color4.js +2 -2
  508. package/src/renderers/common/CubeRenderTarget.js +1 -1
  509. package/src/renderers/common/PostProcessing.js +60 -5
  510. package/src/renderers/common/RenderList.js +0 -4
  511. package/src/renderers/common/RenderObject.js +80 -4
  512. package/src/renderers/common/Renderer.js +133 -22
  513. package/src/renderers/common/SampledTexture.js +3 -71
  514. package/src/renderers/common/Sampler.js +79 -0
  515. package/src/renderers/common/Storage3DTexture.js +100 -0
  516. package/src/renderers/common/StorageArrayTexture.js +84 -0
  517. package/src/renderers/common/StorageTexture.js +19 -0
  518. package/src/renderers/common/Textures.js +34 -24
  519. package/src/renderers/common/TimestampQueryPool.js +1 -0
  520. package/src/renderers/common/Uniform.js +1 -1
  521. package/src/renderers/common/UniformsGroup.js +14 -18
  522. package/src/renderers/common/XRManager.js +183 -35
  523. package/src/renderers/common/XRRenderTarget.js +21 -4
  524. package/src/renderers/common/extras/PMREMGenerator.js +30 -23
  525. package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
  526. package/src/renderers/common/nodes/Nodes.js +13 -3
  527. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
  528. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +20 -2
  529. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
  530. package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
  531. package/src/renderers/webgl/WebGLAttributes.js +4 -0
  532. package/src/renderers/webgl/WebGLCapabilities.js +2 -2
  533. package/src/renderers/webgl/WebGLMaterials.js +6 -6
  534. package/src/renderers/webgl/WebGLProgram.js +22 -16
  535. package/src/renderers/webgl/WebGLPrograms.js +8 -6
  536. package/src/renderers/webgl/WebGLShadowMap.js +14 -3
  537. package/src/renderers/webgl/WebGLState.js +4 -4
  538. package/src/renderers/webgl/WebGLTextures.js +163 -11
  539. package/src/renderers/webgl/WebGLUtils.js +1 -3
  540. package/src/renderers/webgl-fallback/WebGLBackend.js +261 -94
  541. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +75 -9
  542. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
  543. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
  544. package/src/renderers/webgl-fallback/utils/WebGLState.js +4 -4
  545. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +44 -29
  546. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
  547. package/src/renderers/webgpu/WebGPUBackend.js +505 -143
  548. package/src/renderers/webgpu/WebGPURenderer.js +7 -0
  549. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +4 -1
  550. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +4 -1
  551. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +129 -96
  552. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
  553. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +9 -1
  554. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +58 -31
  555. package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
  556. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +39 -9
  557. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +50 -108
  558. package/src/renderers/webgpu/utils/WebGPUUtils.js +2 -17
  559. package/src/renderers/webxr/WebXRController.js +1 -1
  560. package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
  561. package/src/renderers/webxr/WebXRManager.js +70 -9
  562. package/src/textures/DepthTexture.js +6 -10
  563. package/src/textures/ExternalTexture.js +45 -0
  564. package/src/textures/FramebufferTexture.js +2 -2
  565. package/src/textures/Source.js +32 -0
  566. package/src/textures/Texture.js +118 -1
  567. package/src/textures/VideoTexture.js +31 -3
  568. package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
  569. package/src/core/RenderTargetArray.js +0 -40
  570. package/src/nodes/utils/EquirectUVNode.js +0 -65
  571. package/src/nodes/utils/MatcapUVNode.js +0 -49
  572. package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
@@ -1,5 +1,6 @@
1
1
  import {
2
- GPUTextureAspect, GPUTextureViewDimension, GPUTextureSampleType, GPUBufferBindingType, GPUStorageTextureAccess
2
+ GPUTextureAspect, GPUTextureViewDimension, GPUTextureSampleType, GPUBufferBindingType, GPUStorageTextureAccess,
3
+ GPUSamplerBindingType
3
4
  } from './WebGPUConstants.js';
4
5
 
5
6
  import { FloatType, IntType, UnsignedIntType } from '../../../constants.js';
@@ -92,26 +93,6 @@ class WebGPUBindingUtils {
92
93
 
93
94
  bindingGPU.buffer = buffer;
94
95
 
95
- } else if ( binding.isSampler ) {
96
-
97
- const sampler = {}; // GPUSamplerBindingLayout
98
-
99
- if ( binding.texture.isDepthTexture ) {
100
-
101
- if ( binding.texture.compareFunction !== null ) {
102
-
103
- sampler.type = 'comparison';
104
-
105
- }
106
-
107
- }
108
-
109
- bindingGPU.sampler = sampler;
110
-
111
- } else if ( binding.isSampledTexture && binding.texture.isVideoTexture ) {
112
-
113
- bindingGPU.externalTexture = {}; // GPUExternalTextureBindingLayout
114
-
115
96
  } else if ( binding.isSampledTexture && binding.store ) {
116
97
 
117
98
  const storageTexture = {}; // GPUStorageTextureBindingLayout
@@ -133,6 +114,16 @@ class WebGPUBindingUtils {
133
114
 
134
115
  }
135
116
 
117
+ if ( binding.texture.isArrayTexture ) {
118
+
119
+ storageTexture.viewDimension = GPUTextureViewDimension.TwoDArray;
120
+
121
+ } else if ( binding.texture.is3DTexture ) {
122
+
123
+ storageTexture.viewDimension = GPUTextureViewDimension.ThreeD;
124
+
125
+ }
126
+
136
127
  bindingGPU.storageTexture = storageTexture;
137
128
 
138
129
  } else if ( binding.isSampledTexture ) {
@@ -155,7 +146,15 @@ class WebGPUBindingUtils {
155
146
 
156
147
  if ( binding.texture.isDepthTexture ) {
157
148
 
158
- texture.sampleType = GPUTextureSampleType.Depth;
149
+ if ( backend.compatibilityMode && binding.texture.compareFunction === null ) {
150
+
151
+ texture.sampleType = GPUTextureSampleType.UnfilterableFloat;
152
+
153
+ } else {
154
+
155
+ texture.sampleType = GPUTextureSampleType.Depth;
156
+
157
+ }
159
158
 
160
159
  } else if ( binding.texture.isDataTexture || binding.texture.isDataArrayTexture || binding.texture.isData3DTexture ) {
161
160
 
@@ -189,7 +188,7 @@ class WebGPUBindingUtils {
189
188
 
190
189
  texture.viewDimension = GPUTextureViewDimension.Cube;
191
190
 
192
- } else if ( binding.texture.isDataArrayTexture || binding.texture.isCompressedArrayTexture ) {
191
+ } else if ( binding.texture.isArrayTexture || binding.texture.isDataArrayTexture || binding.texture.isCompressedArrayTexture ) {
193
192
 
194
193
  texture.viewDimension = GPUTextureViewDimension.TwoDArray;
195
194
 
@@ -201,6 +200,26 @@ class WebGPUBindingUtils {
201
200
 
202
201
  bindingGPU.texture = texture;
203
202
 
203
+ } else if ( binding.isSampler ) {
204
+
205
+ const sampler = {}; // GPUSamplerBindingLayout
206
+
207
+ if ( binding.texture.isDepthTexture ) {
208
+
209
+ if ( binding.texture.compareFunction !== null ) {
210
+
211
+ sampler.type = GPUSamplerBindingType.Comparison;
212
+
213
+ } else if ( backend.compatibilityMode ) {
214
+
215
+ sampler.type = GPUSamplerBindingType.NonFiltering;
216
+
217
+ }
218
+
219
+ }
220
+
221
+ bindingGPU.sampler = sampler;
222
+
204
223
  } else {
205
224
 
206
225
  console.error( `WebGPUBindingUtils: Unsupported binding "${ binding }".` );
@@ -382,12 +401,6 @@ class WebGPUBindingUtils {
382
401
 
383
402
  entriesGPU.push( { binding: bindingPoint, resource: { buffer: bindingData.buffer } } );
384
403
 
385
- } else if ( binding.isSampler ) {
386
-
387
- const textureGPU = backend.get( binding.texture );
388
-
389
- entriesGPU.push( { binding: bindingPoint, resource: textureGPU.sampler } );
390
-
391
404
  } else if ( binding.isSampledTexture ) {
392
405
 
393
406
  const textureData = backend.get( binding.texture );
@@ -401,7 +414,15 @@ class WebGPUBindingUtils {
401
414
  } else {
402
415
 
403
416
  const mipLevelCount = binding.store ? 1 : textureData.texture.mipLevelCount;
404
- const propertyName = `view-${ textureData.texture.width }-${ textureData.texture.height }-${ mipLevelCount }`;
417
+ let propertyName = `view-${ textureData.texture.width }-${ textureData.texture.height }`;
418
+
419
+ if ( textureData.texture.depthOrArrayLayers > 1 ) {
420
+
421
+ propertyName += `-${ textureData.texture.depthOrArrayLayers }`;
422
+
423
+ }
424
+
425
+ propertyName += `-${ mipLevelCount }`;
405
426
 
406
427
  resourceGPU = textureData[ propertyName ];
407
428
 
@@ -419,7 +440,7 @@ class WebGPUBindingUtils {
419
440
 
420
441
  dimensionViewGPU = GPUTextureViewDimension.ThreeD;
421
442
 
422
- } else if ( binding.texture.isDataArrayTexture || binding.texture.isCompressedArrayTexture ) {
443
+ } else if ( binding.texture.isArrayTexture || binding.texture.isDataArrayTexture || binding.texture.isCompressedArrayTexture ) {
423
444
 
424
445
  dimensionViewGPU = GPUTextureViewDimension.TwoDArray;
425
446
 
@@ -437,6 +458,12 @@ class WebGPUBindingUtils {
437
458
 
438
459
  entriesGPU.push( { binding: bindingPoint, resource: resourceGPU } );
439
460
 
461
+ } else if ( binding.isSampler ) {
462
+
463
+ const textureGPU = backend.get( binding.texture );
464
+
465
+ entriesGPU.push( { binding: bindingPoint, resource: textureGPU.sampler } );
466
+
440
467
  }
441
468
 
442
469
  bindingPoint ++;
@@ -227,7 +227,7 @@ export const GPUBlendFactor = {
227
227
  SrcAlpha: 'src-alpha',
228
228
  OneMinusSrcAlpha: 'one-minus-src-alpha',
229
229
  Dst: 'dst',
230
- OneMinusDstColor: 'one-minus-dst',
230
+ OneMinusDst: 'one-minus-dst',
231
231
  DstAlpha: 'dst-alpha',
232
232
  OneMinusDstAlpha: 'one-minus-dst-alpha',
233
233
  SrcAlphaSaturated: 'src-alpha-saturated',
@@ -316,18 +316,24 @@ export const GPUInputStepMode = {
316
316
  };
317
317
 
318
318
  export const GPUFeatureName = {
319
+ CoreFeaturesAndLimits: 'core-features-and-limits',
319
320
  DepthClipControl: 'depth-clip-control',
320
321
  Depth32FloatStencil8: 'depth32float-stencil8',
321
322
  TextureCompressionBC: 'texture-compression-bc',
323
+ TextureCompressionBCSliced3D: 'texture-compression-bc-sliced-3d',
322
324
  TextureCompressionETC2: 'texture-compression-etc2',
323
325
  TextureCompressionASTC: 'texture-compression-astc',
326
+ TextureCompressionASTCSliced3D: 'texture-compression-astc-sliced-3d',
324
327
  TimestampQuery: 'timestamp-query',
325
328
  IndirectFirstInstance: 'indirect-first-instance',
326
329
  ShaderF16: 'shader-f16',
327
330
  RG11B10UFloat: 'rg11b10ufloat-renderable',
328
331
  BGRA8UNormStorage: 'bgra8unorm-storage',
329
332
  Float32Filterable: 'float32-filterable',
333
+ Float32Blendable: 'float32-blendable',
330
334
  ClipDistances: 'clip-distances',
331
335
  DualSourceBlending: 'dual-source-blending',
332
- Subgroups: 'subgroups'
336
+ Subgroups: 'subgroups',
337
+ TextureFormatsTier1: 'texture-formats-tier1',
338
+ TextureFormatsTier2: 'texture-formats-tier2'
333
339
  };
@@ -36,6 +36,35 @@ class WebGPUPipelineUtils {
36
36
  */
37
37
  this.backend = backend;
38
38
 
39
+ /**
40
+ * A Weak Map that tracks the active pipeline for render or compute passes.
41
+ *
42
+ * @private
43
+ * @type {WeakMap<(GPURenderPassEncoder|GPUComputePassEncoder),(GPURenderPipeline|GPUComputePipeline)>}
44
+ */
45
+ this._activePipelines = new WeakMap();
46
+
47
+ }
48
+
49
+ /**
50
+ * Sets the given pipeline for the given pass. The method makes sure to only set the
51
+ * pipeline when necessary.
52
+ *
53
+ * @param {(GPURenderPassEncoder|GPUComputePassEncoder)} pass - The pass encoder.
54
+ * @param {(GPURenderPipeline|GPUComputePipeline)} pipeline - The pipeline.
55
+ */
56
+ setPipeline( pass, pipeline ) {
57
+
58
+ const currentPipeline = this._activePipelines.get( pass );
59
+
60
+ if ( currentPipeline !== pipeline ) {
61
+
62
+ pass.setPipeline( pipeline );
63
+
64
+ this._activePipelines.set( pass, pipeline );
65
+
66
+ }
67
+
39
68
  }
40
69
 
41
70
  /**
@@ -88,7 +117,7 @@ class WebGPUPipelineUtils {
88
117
 
89
118
  let blending;
90
119
 
91
- if ( material.transparent === true && material.blending !== NoBlending ) {
120
+ if ( material.blending !== NoBlending && ( material.blending !== NormalBlending || material.transparent !== false ) ) {
92
121
 
93
122
  blending = this._getBlending( material );
94
123
 
@@ -228,9 +257,10 @@ class WebGPUPipelineUtils {
228
257
  * Creates GPU render bundle encoder for the given render context.
229
258
  *
230
259
  * @param {RenderContext} renderContext - The render context.
260
+ * @param {?string} [label='renderBundleEncoder'] - The label.
231
261
  * @return {GPURenderBundleEncoder} The GPU render bundle encoder.
232
262
  */
233
- createBundleEncoder( renderContext ) {
263
+ createBundleEncoder( renderContext, label = 'renderBundleEncoder' ) {
234
264
 
235
265
  const backend = this.backend;
236
266
  const { utils, device } = backend;
@@ -240,7 +270,7 @@ class WebGPUPipelineUtils {
240
270
  const sampleCount = this._getSampleCount( renderContext );
241
271
 
242
272
  const descriptor = {
243
- label: 'renderBundleEncoder',
273
+ label: label,
244
274
  colorFormats: [ colorFormat ],
245
275
  depthStencilFormat,
246
276
  sampleCount
@@ -359,7 +389,7 @@ class WebGPUPipelineUtils {
359
389
  break;
360
390
 
361
391
  case MultiplyBlending:
362
- setBlend( GPUBlendFactor.Zero, GPUBlendFactor.Src, GPUBlendFactor.Zero, GPUBlendFactor.SrcAlpha );
392
+ setBlend( GPUBlendFactor.Dst, GPUBlendFactor.OneMinusSrcAlpha, GPUBlendFactor.Zero, GPUBlendFactor.One );
363
393
  break;
364
394
 
365
395
  }
@@ -373,15 +403,15 @@ class WebGPUPipelineUtils {
373
403
  break;
374
404
 
375
405
  case AdditiveBlending:
376
- setBlend( GPUBlendFactor.SrcAlpha, GPUBlendFactor.One, GPUBlendFactor.SrcAlpha, GPUBlendFactor.One );
406
+ setBlend( GPUBlendFactor.SrcAlpha, GPUBlendFactor.One, GPUBlendFactor.One, GPUBlendFactor.One );
377
407
  break;
378
408
 
379
409
  case SubtractiveBlending:
380
- setBlend( GPUBlendFactor.Zero, GPUBlendFactor.OneMinusSrc, GPUBlendFactor.Zero, GPUBlendFactor.One );
410
+ console.error( 'THREE.WebGPURenderer: SubtractiveBlending requires material.premultipliedAlpha = true' );
381
411
  break;
382
412
 
383
413
  case MultiplyBlending:
384
- setBlend( GPUBlendFactor.Zero, GPUBlendFactor.Src, GPUBlendFactor.Zero, GPUBlendFactor.Src );
414
+ console.error( 'THREE.WebGPURenderer: MultiplyBlending requires material.premultipliedAlpha = true' );
385
415
  break;
386
416
 
387
417
  }
@@ -443,7 +473,7 @@ class WebGPUPipelineUtils {
443
473
  break;
444
474
 
445
475
  case OneMinusDstColorFactor:
446
- blendFactor = GPUBlendFactor.OneMinusDstColor;
476
+ blendFactor = GPUBlendFactor.OneMinusDst;
447
477
  break;
448
478
 
449
479
  case DstAlphaFactor:
@@ -682,7 +712,7 @@ class WebGPUPipelineUtils {
682
712
  *
683
713
  * @private
684
714
  * @param {Material} material - The material.
685
- * @return {string} The GPU color write mask.
715
+ * @return {number} The GPU color write mask.
686
716
  */
687
717
  _getColorWriteMask( material ) {
688
718
 
@@ -1,6 +1,7 @@
1
1
  import {
2
- GPUTextureFormat, GPUAddressMode, GPUFilterMode, GPUTextureDimension, GPUFeatureName
2
+ GPUTextureFormat, GPUAddressMode, GPUFilterMode, GPUTextureDimension, GPUFeatureName, GPUTextureViewDimension
3
3
  } from './WebGPUConstants.js';
4
+ import { ColorManagement } from '../../../math/ColorManagement.js';
4
5
 
5
6
  import WebGPUTexturePassUtils from './WebGPUTexturePassUtils.js';
6
7
 
@@ -9,11 +10,10 @@ import {
9
10
  NearestFilter, NearestMipmapNearestFilter, NearestMipmapLinearFilter,
10
11
  RepeatWrapping, MirroredRepeatWrapping,
11
12
  RGB_ETC2_Format, RGBA_ETC2_EAC_Format,
12
- RGBAFormat, RGBFormat, RedFormat, RGFormat, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, UnsignedByteType, FloatType, HalfFloatType, SRGBColorSpace, DepthFormat, DepthStencilFormat,
13
+ RGBAFormat, RGBFormat, RedFormat, RGFormat, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, UnsignedByteType, FloatType, HalfFloatType, SRGBTransfer, DepthFormat, DepthStencilFormat,
13
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,
14
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,
15
- NeverCompare, AlwaysCompare, LessCompare, LessEqualCompare, EqualCompare, GreaterEqualCompare, GreaterCompare, NotEqualCompare, IntType, RedIntegerFormat, RGIntegerFormat, RGBAIntegerFormat,
16
- CubeReflectionMapping, CubeRefractionMapping, EquirectangularReflectionMapping, EquirectangularRefractionMapping
16
+ NeverCompare, AlwaysCompare, LessCompare, LessEqualCompare, EqualCompare, GreaterEqualCompare, GreaterCompare, NotEqualCompare, IntType, RedIntegerFormat, RGIntegerFormat, RGBAIntegerFormat
17
17
  } from '../../../constants.js';
18
18
  import { CubeTexture } from '../../../textures/CubeTexture.js';
19
19
  import { DepthTexture } from '../../../textures/DepthTexture.js';
@@ -159,10 +159,6 @@ class WebGPUTextureUtils {
159
159
 
160
160
  textureGPU = this._getDefaultCubeTextureGPU( format );
161
161
 
162
- } else if ( texture.isVideoTexture ) {
163
-
164
- this.backend.get( texture ).externalTexture = this._getDefaultVideoFrame();
165
-
166
162
  } else {
167
163
 
168
164
  textureGPU = this._getDefaultTextureGPU( format );
@@ -247,33 +243,23 @@ class WebGPUTextureUtils {
247
243
 
248
244
  // texture creation
249
245
 
250
- if ( texture.isVideoTexture ) {
251
-
252
- const video = texture.source.data;
253
- const videoFrame = new VideoFrame( video );
246
+ if ( format === undefined ) {
254
247
 
255
- textureDescriptorGPU.size.width = videoFrame.displayWidth;
256
- textureDescriptorGPU.size.height = videoFrame.displayHeight;
248
+ console.warn( 'WebGPURenderer: Texture format not supported.' );
257
249
 
258
- videoFrame.close();
259
-
260
- textureData.externalTexture = video;
261
-
262
- } else {
263
-
264
- if ( format === undefined ) {
265
-
266
- console.warn( 'WebGPURenderer: Texture format not supported.' );
250
+ this.createDefaultTexture( texture );
251
+ return;
267
252
 
268
- this.createDefaultTexture( texture );
269
- return;
253
+ }
270
254
 
271
- }
255
+ if ( texture.isCubeTexture ) {
272
256
 
273
- textureData.texture = backend.device.createTexture( textureDescriptorGPU );
257
+ textureDescriptorGPU.textureBindingViewDimension = GPUTextureViewDimension.Cube;
274
258
 
275
259
  }
276
260
 
261
+ textureData.texture = backend.device.createTexture( textureDescriptorGPU );
262
+
277
263
  if ( isMSAA ) {
278
264
 
279
265
  const msaaTextureDescriptorGPU = Object.assign( {}, textureDescriptorGPU );
@@ -458,7 +444,7 @@ class WebGPUTextureUtils {
458
444
 
459
445
  this._copyBufferToTexture( options.image, textureData.texture, textureDescriptorGPU, 0, texture.flipY );
460
446
 
461
- } else if ( texture.isDataArrayTexture || texture.isData3DTexture ) {
447
+ } else if ( texture.isArrayTexture || texture.isDataArrayTexture || texture.isData3DTexture ) {
462
448
 
463
449
  for ( let i = 0; i < options.image.depth; i ++ ) {
464
450
 
@@ -472,17 +458,11 @@ class WebGPUTextureUtils {
472
458
 
473
459
  } else if ( texture.isCubeTexture ) {
474
460
 
475
- this._copyCubeMapToTexture( options.images, textureData.texture, textureDescriptorGPU, texture.flipY );
476
-
477
- } else if ( texture.isVideoTexture ) {
478
-
479
- const video = texture.source.data;
480
-
481
- textureData.externalTexture = video;
461
+ this._copyCubeMapToTexture( options.images, textureData.texture, textureDescriptorGPU, texture.flipY, texture.premultiplyAlpha );
482
462
 
483
463
  } else {
484
464
 
485
- this._copyImageToTexture( options.image, textureData.texture, textureDescriptorGPU, 0, texture.flipY );
465
+ this._copyImageToTexture( options.image, textureData.texture, textureDescriptorGPU, 0, texture.flipY, texture.premultiplyAlpha );
486
466
 
487
467
  }
488
468
 
@@ -555,21 +535,6 @@ class WebGPUTextureUtils {
555
535
 
556
536
  }
557
537
 
558
- /**
559
- * Returns `true` if the given texture is an environment map.
560
- *
561
- * @private
562
- * @param {Texture} texture - The texture.
563
- * @return {boolean} Whether the given texture is an environment map or not.
564
- */
565
- _isEnvironmentTexture( texture ) {
566
-
567
- const mapping = texture.mapping;
568
-
569
- return ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping ) || ( mapping === CubeReflectionMapping || mapping === CubeRefractionMapping );
570
-
571
- }
572
-
573
538
  /**
574
539
  * Returns the default GPU texture for the given format.
575
540
  *
@@ -624,33 +589,6 @@ class WebGPUTextureUtils {
624
589
 
625
590
  }
626
591
 
627
- /**
628
- * Returns the default video frame used as default data in context of video textures.
629
- *
630
- * @private
631
- * @return {VideoFrame} The video frame.
632
- */
633
- _getDefaultVideoFrame() {
634
-
635
- let defaultVideoFrame = this.defaultVideoFrame;
636
-
637
- if ( defaultVideoFrame === null ) {
638
-
639
- const init = {
640
- timestamp: 0,
641
- codedWidth: 1,
642
- codedHeight: 1,
643
- format: 'RGBA',
644
- };
645
-
646
- this.defaultVideoFrame = defaultVideoFrame = new VideoFrame( new Uint8Array( [ 0, 0, 0, 0xff ] ), init );
647
-
648
- }
649
-
650
- return defaultVideoFrame;
651
-
652
- }
653
-
654
592
  /**
655
593
  * Uploads cube texture image data to the GPU memory.
656
594
  *
@@ -659,8 +597,9 @@ class WebGPUTextureUtils {
659
597
  * @param {GPUTexture} textureGPU - The GPU texture.
660
598
  * @param {Object} textureDescriptorGPU - The GPU texture descriptor.
661
599
  * @param {boolean} flipY - Whether to flip texture data along their vertical axis or not.
600
+ * @param {boolean} premultiplyAlpha - Whether the texture should have its RGB channels premultiplied by the alpha channel or not.
662
601
  */
663
- _copyCubeMapToTexture( images, textureGPU, textureDescriptorGPU, flipY ) {
602
+ _copyCubeMapToTexture( images, textureGPU, textureDescriptorGPU, flipY, premultiplyAlpha ) {
664
603
 
665
604
  for ( let i = 0; i < 6; i ++ ) {
666
605
 
@@ -674,7 +613,7 @@ class WebGPUTextureUtils {
674
613
 
675
614
  } else {
676
615
 
677
- this._copyImageToTexture( image, textureGPU, textureDescriptorGPU, flipIndex, flipY );
616
+ this._copyImageToTexture( image, textureGPU, textureDescriptorGPU, flipIndex, flipY, premultiplyAlpha );
678
617
 
679
618
  }
680
619
 
@@ -691,8 +630,9 @@ class WebGPUTextureUtils {
691
630
  * @param {Object} textureDescriptorGPU - The GPU texture descriptor.
692
631
  * @param {number} originDepth - The origin depth.
693
632
  * @param {boolean} flipY - Whether to flip texture data along their vertical axis or not.
633
+ * @param {boolean} premultiplyAlpha - Whether the texture should have its RGB channels premultiplied by the alpha channel or not.
694
634
  */
695
- _copyImageToTexture( image, textureGPU, textureDescriptorGPU, originDepth, flipY ) {
635
+ _copyImageToTexture( image, textureGPU, textureDescriptorGPU, originDepth, flipY, premultiplyAlpha ) {
696
636
 
697
637
  const device = this.backend.device;
698
638
 
@@ -703,10 +643,11 @@ class WebGPUTextureUtils {
703
643
  }, {
704
644
  texture: textureGPU,
705
645
  mipLevel: 0,
706
- origin: { x: 0, y: 0, z: originDepth }
646
+ origin: { x: 0, y: 0, z: originDepth },
647
+ premultipliedAlpha: premultiplyAlpha
707
648
  }, {
708
- width: image.width,
709
- height: image.height,
649
+ width: textureDescriptorGPU.size.width,
650
+ height: textureDescriptorGPU.size.height,
710
651
  depthOrArrayLayers: 1
711
652
  }
712
653
  );
@@ -824,7 +765,7 @@ class WebGPUTextureUtils {
824
765
  const device = this.backend.device;
825
766
 
826
767
  const blockData = this._getBlockData( textureDescriptorGPU.format );
827
- const isTextureArray = textureDescriptorGPU.size.depthOrArrayLayers > 1;
768
+ const isArrayTexture = textureDescriptorGPU.size.depthOrArrayLayers > 1;
828
769
 
829
770
  for ( let i = 0; i < mipmaps.length; i ++ ) {
830
771
 
@@ -832,7 +773,7 @@ class WebGPUTextureUtils {
832
773
 
833
774
  const width = mipmap.width;
834
775
  const height = mipmap.height;
835
- const depth = isTextureArray ? textureDescriptorGPU.size.depthOrArrayLayers : 1;
776
+ const depth = isArrayTexture ? textureDescriptorGPU.size.depthOrArrayLayers : 1;
836
777
 
837
778
  const bytesPerRow = Math.ceil( width / blockData.width ) * blockData.byteLength;
838
779
  const bytesPerImage = bytesPerRow * Math.ceil( height / blockData.height );
@@ -1084,7 +1025,7 @@ class WebGPUTextureUtils {
1084
1025
 
1085
1026
  let dimension;
1086
1027
 
1087
- if ( texture.isData3DTexture ) {
1028
+ if ( texture.is3DTexture || texture.isData3DTexture ) {
1088
1029
 
1089
1030
  dimension = GPUTextureDimension.ThreeD;
1090
1031
 
@@ -1113,6 +1054,7 @@ export function getFormat( texture, device = null ) {
1113
1054
  const format = texture.format;
1114
1055
  const type = texture.type;
1115
1056
  const colorSpace = texture.colorSpace;
1057
+ const transfer = ColorManagement.getTransfer( colorSpace );
1116
1058
 
1117
1059
  let formatGPU;
1118
1060
 
@@ -1121,83 +1063,83 @@ export function getFormat( texture, device = null ) {
1121
1063
  switch ( format ) {
1122
1064
 
1123
1065
  case RGBA_S3TC_DXT1_Format:
1124
- formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.BC1RGBAUnormSRGB : GPUTextureFormat.BC1RGBAUnorm;
1066
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.BC1RGBAUnormSRGB : GPUTextureFormat.BC1RGBAUnorm;
1125
1067
  break;
1126
1068
 
1127
1069
  case RGBA_S3TC_DXT3_Format:
1128
- formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.BC2RGBAUnormSRGB : GPUTextureFormat.BC2RGBAUnorm;
1070
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.BC2RGBAUnormSRGB : GPUTextureFormat.BC2RGBAUnorm;
1129
1071
  break;
1130
1072
 
1131
1073
  case RGBA_S3TC_DXT5_Format:
1132
- formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.BC3RGBAUnormSRGB : GPUTextureFormat.BC3RGBAUnorm;
1074
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.BC3RGBAUnormSRGB : GPUTextureFormat.BC3RGBAUnorm;
1133
1075
  break;
1134
1076
 
1135
1077
  case RGB_ETC2_Format:
1136
- formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.ETC2RGB8UnormSRGB : GPUTextureFormat.ETC2RGB8Unorm;
1078
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ETC2RGB8UnormSRGB : GPUTextureFormat.ETC2RGB8Unorm;
1137
1079
  break;
1138
1080
 
1139
1081
  case RGBA_ETC2_EAC_Format:
1140
- formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.ETC2RGBA8UnormSRGB : GPUTextureFormat.ETC2RGBA8Unorm;
1082
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ETC2RGBA8UnormSRGB : GPUTextureFormat.ETC2RGBA8Unorm;
1141
1083
  break;
1142
1084
 
1143
1085
  case RGBA_ASTC_4x4_Format:
1144
- formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.ASTC4x4UnormSRGB : GPUTextureFormat.ASTC4x4Unorm;
1086
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC4x4UnormSRGB : GPUTextureFormat.ASTC4x4Unorm;
1145
1087
  break;
1146
1088
 
1147
1089
  case RGBA_ASTC_5x4_Format:
1148
- formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.ASTC5x4UnormSRGB : GPUTextureFormat.ASTC5x4Unorm;
1090
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC5x4UnormSRGB : GPUTextureFormat.ASTC5x4Unorm;
1149
1091
  break;
1150
1092
 
1151
1093
  case RGBA_ASTC_5x5_Format:
1152
- formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.ASTC5x5UnormSRGB : GPUTextureFormat.ASTC5x5Unorm;
1094
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC5x5UnormSRGB : GPUTextureFormat.ASTC5x5Unorm;
1153
1095
  break;
1154
1096
 
1155
1097
  case RGBA_ASTC_6x5_Format:
1156
- formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.ASTC6x5UnormSRGB : GPUTextureFormat.ASTC6x5Unorm;
1098
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC6x5UnormSRGB : GPUTextureFormat.ASTC6x5Unorm;
1157
1099
  break;
1158
1100
 
1159
1101
  case RGBA_ASTC_6x6_Format:
1160
- formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.ASTC6x6UnormSRGB : GPUTextureFormat.ASTC6x6Unorm;
1102
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC6x6UnormSRGB : GPUTextureFormat.ASTC6x6Unorm;
1161
1103
  break;
1162
1104
 
1163
1105
  case RGBA_ASTC_8x5_Format:
1164
- formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.ASTC8x5UnormSRGB : GPUTextureFormat.ASTC8x5Unorm;
1106
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC8x5UnormSRGB : GPUTextureFormat.ASTC8x5Unorm;
1165
1107
  break;
1166
1108
 
1167
1109
  case RGBA_ASTC_8x6_Format:
1168
- formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.ASTC8x6UnormSRGB : GPUTextureFormat.ASTC8x6Unorm;
1110
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC8x6UnormSRGB : GPUTextureFormat.ASTC8x6Unorm;
1169
1111
  break;
1170
1112
 
1171
1113
  case RGBA_ASTC_8x8_Format:
1172
- formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.ASTC8x8UnormSRGB : GPUTextureFormat.ASTC8x8Unorm;
1114
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC8x8UnormSRGB : GPUTextureFormat.ASTC8x8Unorm;
1173
1115
  break;
1174
1116
 
1175
1117
  case RGBA_ASTC_10x5_Format:
1176
- formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.ASTC10x5UnormSRGB : GPUTextureFormat.ASTC10x5Unorm;
1118
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC10x5UnormSRGB : GPUTextureFormat.ASTC10x5Unorm;
1177
1119
  break;
1178
1120
 
1179
1121
  case RGBA_ASTC_10x6_Format:
1180
- formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.ASTC10x6UnormSRGB : GPUTextureFormat.ASTC10x6Unorm;
1122
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC10x6UnormSRGB : GPUTextureFormat.ASTC10x6Unorm;
1181
1123
  break;
1182
1124
 
1183
1125
  case RGBA_ASTC_10x8_Format:
1184
- formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.ASTC10x8UnormSRGB : GPUTextureFormat.ASTC10x8Unorm;
1126
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC10x8UnormSRGB : GPUTextureFormat.ASTC10x8Unorm;
1185
1127
  break;
1186
1128
 
1187
1129
  case RGBA_ASTC_10x10_Format:
1188
- formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.ASTC10x10UnormSRGB : GPUTextureFormat.ASTC10x10Unorm;
1130
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC10x10UnormSRGB : GPUTextureFormat.ASTC10x10Unorm;
1189
1131
  break;
1190
1132
 
1191
1133
  case RGBA_ASTC_12x10_Format:
1192
- formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.ASTC12x10UnormSRGB : GPUTextureFormat.ASTC12x10Unorm;
1134
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC12x10UnormSRGB : GPUTextureFormat.ASTC12x10Unorm;
1193
1135
  break;
1194
1136
 
1195
1137
  case RGBA_ASTC_12x12_Format:
1196
- formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.ASTC12x12UnormSRGB : GPUTextureFormat.ASTC12x12Unorm;
1138
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC12x12UnormSRGB : GPUTextureFormat.ASTC12x12Unorm;
1197
1139
  break;
1198
1140
 
1199
1141
  case RGBAFormat:
1200
- formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.RGBA8UnormSRGB : GPUTextureFormat.RGBA8Unorm;
1142
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.RGBA8UnormSRGB : GPUTextureFormat.RGBA8Unorm;
1201
1143
  break;
1202
1144
 
1203
1145
  default:
@@ -1233,7 +1175,7 @@ export function getFormat( texture, device = null ) {
1233
1175
  break;
1234
1176
 
1235
1177
  case UnsignedByteType:
1236
- formatGPU = ( colorSpace === SRGBColorSpace ) ? GPUTextureFormat.RGBA8UnormSRGB : GPUTextureFormat.RGBA8Unorm;
1178
+ formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.RGBA8UnormSRGB : GPUTextureFormat.RGBA8Unorm;
1237
1179
  break;
1238
1180
 
1239
1181
  case HalfFloatType:
@@ -161,29 +161,14 @@ class WebGPUUtils {
161
161
  /**
162
162
  * Returns a modified sample count from the given sample count value.
163
163
  *
164
- * That is required since WebGPU does not support arbitrary sample counts.
164
+ * That is required since WebGPU only supports either 1 or 4.
165
165
  *
166
166
  * @param {number} sampleCount - The input sample count.
167
167
  * @return {number} The (potentially updated) output sample count.
168
168
  */
169
169
  getSampleCount( sampleCount ) {
170
170
 
171
- let count = 1;
172
-
173
- if ( sampleCount > 1 ) {
174
-
175
- // WebGPU only supports power-of-two sample counts and 2 is not a valid value
176
- count = Math.pow( 2, Math.floor( Math.log2( sampleCount ) ) );
177
-
178
- if ( count === 2 ) {
179
-
180
- count = 4;
181
-
182
- }
183
-
184
- }
185
-
186
- return count;
171
+ return sampleCount >= 4 ? 4 : 1;
187
172
 
188
173
  }
189
174