super-three 0.171.0 → 0.173.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 (455) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/build/three.cjs +594 -427
  4. package/build/three.core.js +515 -81
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +79 -350
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +20 -7
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +29362 -3427
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +29361 -3427
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +0 -5
  15. package/examples/jsm/animation/CCDIKSolver.js +9 -7
  16. package/examples/jsm/capabilities/WebGPU.js +1 -1
  17. package/examples/jsm/controls/ArcballControls.js +48 -37
  18. package/examples/jsm/controls/OrbitControls.js +5 -4
  19. package/examples/jsm/csm/CSMShadowNode.js +16 -11
  20. package/examples/jsm/curves/NURBSCurve.js +1 -1
  21. package/examples/jsm/curves/NURBSUtils.js +3 -0
  22. package/examples/jsm/effects/OutlineEffect.js +1 -1
  23. package/examples/jsm/exporters/GLTFExporter.js +34 -29
  24. package/examples/jsm/exporters/KTX2Exporter.js +1 -1
  25. package/examples/jsm/exporters/PLYExporter.js +2 -2
  26. package/examples/jsm/geometries/TextGeometry.js +1 -12
  27. package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
  28. package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
  29. package/examples/jsm/interactive/InteractiveGroup.js +108 -51
  30. package/examples/jsm/libs/demuxer_mp4.js +109 -0
  31. package/examples/jsm/lights/LightProbeGenerator.js +3 -3
  32. package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
  33. package/examples/jsm/loaders/3MFLoader.js +6 -3
  34. package/examples/jsm/loaders/BVHLoader.js +1 -1
  35. package/examples/jsm/loaders/ColladaLoader.js +5 -5
  36. package/examples/jsm/loaders/DDSLoader.js +42 -0
  37. package/examples/jsm/loaders/GCodeLoader.js +4 -2
  38. package/examples/jsm/loaders/GLTFLoader.js +22 -4
  39. package/examples/jsm/loaders/KTX2Loader.js +6 -1
  40. package/examples/jsm/loaders/KTXLoader.js +4 -4
  41. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  42. package/examples/jsm/loaders/LottieLoader.js +1 -1
  43. package/examples/jsm/loaders/MTLLoader.js +1 -0
  44. package/examples/jsm/loaders/NRRDLoader.js +1 -1
  45. package/examples/jsm/loaders/PLYLoader.js +7 -7
  46. package/examples/jsm/loaders/PVRLoader.js +1 -1
  47. package/examples/jsm/loaders/SVGLoader.js +2 -2
  48. package/examples/jsm/loaders/TDSLoader.js +1 -2
  49. package/examples/jsm/loaders/VRMLLoader.js +7 -7
  50. package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
  51. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
  52. package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
  53. package/examples/jsm/math/ConvexHull.js +1 -1
  54. package/examples/jsm/math/OBB.js +17 -0
  55. package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
  56. package/examples/jsm/misc/ProgressiveLightMap.js +4 -3
  57. package/examples/jsm/misc/ProgressiveLightMapGPU.js +14 -13
  58. package/examples/jsm/misc/Volume.js +27 -17
  59. package/examples/jsm/misc/VolumeSlice.js +7 -5
  60. package/examples/jsm/modifiers/CurveModifier.js +10 -8
  61. package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
  62. package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
  63. package/examples/jsm/objects/GroundedSkybox.js +4 -4
  64. package/examples/jsm/objects/Sky.js +2 -2
  65. package/examples/jsm/objects/SkyMesh.js +3 -3
  66. package/examples/jsm/objects/Water2.js +1 -1
  67. package/examples/jsm/objects/Water2Mesh.js +2 -2
  68. package/examples/jsm/objects/WaterMesh.js +29 -24
  69. package/examples/jsm/physics/JoltPhysics.js +7 -7
  70. package/examples/jsm/physics/RapierPhysics.js +4 -4
  71. package/examples/jsm/postprocessing/BloomPass.js +2 -2
  72. package/examples/jsm/postprocessing/EffectComposer.js +1 -2
  73. package/examples/jsm/postprocessing/OutlinePass.js +4 -4
  74. package/examples/jsm/postprocessing/OutputPass.js +2 -0
  75. package/examples/jsm/postprocessing/SAOPass.js +1 -2
  76. package/examples/jsm/postprocessing/SMAAPass.js +1 -3
  77. package/examples/jsm/postprocessing/SSAOPass.js +2 -4
  78. package/examples/jsm/postprocessing/SSRPass.js +2 -4
  79. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
  80. package/examples/jsm/renderers/SVGRenderer.js +6 -4
  81. package/examples/jsm/shaders/BokehShader2.js +1 -1
  82. package/examples/jsm/shaders/GodRaysShader.js +3 -3
  83. package/examples/jsm/shaders/OutputShader.js +5 -1
  84. package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
  85. package/examples/jsm/transpiler/GLSLDecoder.js +2 -2
  86. package/examples/jsm/transpiler/TSLEncoder.js +2 -0
  87. package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
  88. package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
  89. package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
  90. package/examples/jsm/tsl/display/BleachBypass.js +10 -0
  91. package/examples/jsm/tsl/display/BloomNode.js +233 -26
  92. package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
  93. package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
  94. package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
  95. package/examples/jsm/tsl/display/FXAANode.js +52 -3
  96. package/examples/jsm/tsl/display/FilmNode.js +47 -1
  97. package/examples/jsm/tsl/display/GTAONode.js +210 -14
  98. package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
  99. package/examples/jsm/tsl/display/LensflareNode.js +131 -13
  100. package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
  101. package/examples/jsm/tsl/display/MotionBlur.js +12 -2
  102. package/examples/jsm/tsl/display/OutlineNode.js +343 -26
  103. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
  104. package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
  105. package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
  106. package/examples/jsm/tsl/display/SMAANode.js +187 -46
  107. package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
  108. package/examples/jsm/tsl/display/SSRNode.js +194 -21
  109. package/examples/jsm/tsl/display/Sepia.js +9 -0
  110. package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
  111. package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
  112. package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
  113. package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
  114. package/examples/jsm/tsl/display/TransitionNode.js +71 -6
  115. package/examples/jsm/tsl/display/hashBlur.js +14 -3
  116. package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
  117. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  118. package/examples/jsm/utils/CameraUtils.js +4 -1
  119. package/examples/jsm/utils/GeometryUtils.js +22 -19
  120. package/examples/jsm/utils/SceneUtils.js +2 -2
  121. package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
  122. package/examples/jsm/webxr/XREstimatedLight.js +1 -1
  123. package/package.json +8 -3
  124. package/src/Three.Core.js +4 -0
  125. package/src/Three.Legacy.js +0 -21
  126. package/src/Three.TSL.js +18 -5
  127. package/src/Three.WebGPU.Nodes.js +2 -2
  128. package/src/Three.WebGPU.js +2 -2
  129. package/src/animation/PropertyBinding.js +2 -2
  130. package/src/cameras/ArrayCamera.js +1 -0
  131. package/src/cameras/PerspectiveCamera.js +18 -2
  132. package/src/constants.js +6 -1
  133. package/src/core/BufferAttribute.js +4 -0
  134. package/src/core/EventDispatcher.js +8 -6
  135. package/src/core/RenderTarget.js +18 -0
  136. package/src/core/RenderTarget3D.js +22 -0
  137. package/src/core/RenderTargetArray.js +22 -0
  138. package/src/extras/Earcut.js +1 -1
  139. package/src/extras/ImageUtils.js +1 -11
  140. package/src/extras/PMREMGenerator.js +20 -0
  141. package/src/extras/TextureUtils.js +6 -0
  142. package/src/helpers/CameraHelper.js +16 -13
  143. package/src/loaders/nodes/NodeLoader.js +59 -0
  144. package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
  145. package/src/loaders/nodes/NodeObjectLoader.js +61 -0
  146. package/src/materials/nodes/Line2NodeMaterial.js +128 -34
  147. package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
  148. package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
  149. package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
  150. package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
  151. package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
  152. package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
  153. package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
  154. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
  155. package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
  156. package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
  157. package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
  158. package/src/materials/nodes/NodeMaterial.js +476 -23
  159. package/src/materials/nodes/NodeMaterials.js +0 -1
  160. package/src/materials/nodes/PointsNodeMaterial.js +121 -10
  161. package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
  162. package/src/materials/nodes/SpriteNodeMaterial.js +78 -20
  163. package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
  164. package/src/materials/nodes/manager/NodeMaterialObserver.js +95 -0
  165. package/src/nodes/Nodes.js +5 -6
  166. package/src/nodes/TSL.js +6 -3
  167. package/src/nodes/accessors/AccessorsUtils.js +27 -0
  168. package/src/nodes/accessors/Arrays.js +47 -6
  169. package/src/nodes/accessors/BatchNode.js +42 -6
  170. package/src/nodes/accessors/Bitangent.js +37 -0
  171. package/src/nodes/accessors/BufferAttributeNode.js +178 -5
  172. package/src/nodes/accessors/BufferNode.js +63 -0
  173. package/src/nodes/accessors/BuiltinNode.js +38 -0
  174. package/src/nodes/accessors/Camera.js +113 -3
  175. package/src/nodes/accessors/ClippingNode.js +71 -2
  176. package/src/nodes/accessors/CubeTextureNode.js +64 -0
  177. package/src/nodes/accessors/InstanceNode.js +85 -2
  178. package/src/nodes/accessors/InstancedMeshNode.js +28 -3
  179. package/src/nodes/accessors/Lights.js +50 -1
  180. package/src/nodes/accessors/MaterialNode.js +306 -12
  181. package/src/nodes/accessors/MaterialProperties.js +7 -0
  182. package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
  183. package/src/nodes/accessors/ModelNode.js +100 -5
  184. package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
  185. package/src/nodes/accessors/MorphNode.js +48 -4
  186. package/src/nodes/accessors/Normal.js +65 -5
  187. package/src/nodes/accessors/Object3DNode.js +101 -1
  188. package/src/nodes/accessors/PointUVNode.js +26 -0
  189. package/src/nodes/accessors/Position.js +56 -7
  190. package/src/nodes/accessors/ReferenceBaseNode.js +186 -0
  191. package/src/nodes/accessors/ReferenceNode.js +201 -2
  192. package/src/nodes/accessors/ReflectVector.js +24 -0
  193. package/src/nodes/accessors/RendererReferenceNode.js +46 -1
  194. package/src/nodes/accessors/SceneNode.js +54 -0
  195. package/src/nodes/accessors/SkinningNode.js +127 -1
  196. package/src/nodes/accessors/StorageBufferNode.js +209 -8
  197. package/src/nodes/accessors/StorageTextureNode.js +118 -0
  198. package/src/nodes/accessors/Tangent.js +38 -2
  199. package/src/nodes/accessors/Texture3DNode.js +91 -7
  200. package/src/nodes/accessors/TextureBicubic.js +12 -2
  201. package/src/nodes/accessors/TextureNode.js +316 -10
  202. package/src/nodes/accessors/TextureSizeNode.js +42 -0
  203. package/src/nodes/accessors/UV.js +10 -1
  204. package/src/nodes/accessors/UniformArrayNode.js +231 -25
  205. package/src/nodes/accessors/UserDataNode.js +46 -0
  206. package/src/nodes/accessors/VelocityNode.js +80 -0
  207. package/src/nodes/accessors/VertexColorNode.js +39 -2
  208. package/src/nodes/code/CodeNode.js +95 -1
  209. package/src/nodes/code/ExpressionNode.js +28 -0
  210. package/src/nodes/code/FunctionCallNode.js +37 -0
  211. package/src/nodes/code/FunctionNode.js +45 -0
  212. package/src/nodes/code/ScriptableNode.js +223 -1
  213. package/src/nodes/code/ScriptableValueNode.js +85 -1
  214. package/src/nodes/core/ArrayNode.js +125 -0
  215. package/src/nodes/core/AssignNode.js +48 -2
  216. package/src/nodes/core/AttributeNode.js +43 -0
  217. package/src/nodes/core/BypassNode.js +47 -2
  218. package/src/nodes/core/CacheNode.js +53 -2
  219. package/src/nodes/core/ConstNode.js +32 -0
  220. package/src/nodes/core/ContextNode.js +65 -0
  221. package/src/nodes/core/IndexNode.js +68 -7
  222. package/src/nodes/core/InputNode.js +48 -0
  223. package/src/nodes/core/LightingModel.js +60 -0
  224. package/src/nodes/core/MRTNode.js +66 -0
  225. package/src/nodes/core/Node.js +350 -12
  226. package/src/nodes/core/NodeAttribute.js +38 -0
  227. package/src/nodes/core/NodeBuilder.js +1166 -26
  228. package/src/nodes/core/NodeCache.js +41 -2
  229. package/src/nodes/core/NodeCode.js +31 -0
  230. package/src/nodes/core/NodeFrame.js +123 -2
  231. package/src/nodes/core/NodeFunction.js +46 -0
  232. package/src/nodes/core/NodeFunctionInput.js +44 -0
  233. package/src/nodes/core/NodeParser.js +11 -0
  234. package/src/nodes/core/NodeUniform.js +52 -0
  235. package/src/nodes/core/NodeUtils.js +152 -1
  236. package/src/nodes/core/NodeVar.js +47 -1
  237. package/src/nodes/core/NodeVarying.js +28 -0
  238. package/src/nodes/core/OutputStructNode.js +51 -10
  239. package/src/nodes/core/ParameterNode.js +28 -0
  240. package/src/nodes/core/PropertyNode.js +232 -0
  241. package/src/nodes/core/StackNode.js +98 -1
  242. package/src/nodes/core/StructNode.js +121 -0
  243. package/src/nodes/core/StructType.js +13 -0
  244. package/src/nodes/core/StructTypeNode.js +105 -6
  245. package/src/nodes/core/TempNode.js +31 -5
  246. package/src/nodes/core/UniformGroupNode.js +82 -7
  247. package/src/nodes/core/UniformNode.js +66 -0
  248. package/src/nodes/core/VarNode.js +146 -7
  249. package/src/nodes/core/VaryingNode.js +100 -3
  250. package/src/nodes/core/constants.js +36 -0
  251. package/src/nodes/display/BlendModes.js +88 -1
  252. package/src/nodes/display/BumpMapNode.js +37 -0
  253. package/src/nodes/display/ColorAdjustment.js +53 -11
  254. package/src/nodes/display/ColorSpaceFunctions.js +16 -0
  255. package/src/nodes/display/ColorSpaceNode.js +82 -0
  256. package/src/nodes/display/FrontFacingNode.js +29 -0
  257. package/src/nodes/display/NormalMapNode.js +43 -0
  258. package/src/nodes/display/PassNode.js +300 -7
  259. package/src/nodes/display/PosterizeNode.js +33 -0
  260. package/src/nodes/display/RenderOutputNode.js +66 -1
  261. package/src/nodes/display/ScreenNode.js +96 -0
  262. package/src/nodes/display/ToneMappingFunctions.js +58 -10
  263. package/src/nodes/display/ToneMappingNode.js +55 -2
  264. package/src/nodes/display/ToonOutlinePassNode.js +73 -0
  265. package/src/nodes/display/ViewportDepthNode.js +122 -8
  266. package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
  267. package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
  268. package/src/nodes/display/ViewportTextureNode.js +57 -0
  269. package/src/nodes/fog/Fog.js +110 -0
  270. package/src/nodes/functions/BasicLightingModel.js +24 -0
  271. package/src/nodes/functions/PhongLightingModel.js +34 -2
  272. package/src/nodes/functions/PhysicalLightingModel.js +167 -8
  273. package/src/nodes/functions/ShadowMaskModel.js +23 -0
  274. package/src/nodes/functions/ToonLightingModel.js +20 -0
  275. package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
  276. package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
  277. package/src/nodes/geometry/RangeNode.js +54 -2
  278. package/src/nodes/gpgpu/AtomicFunctionNode.js +174 -2
  279. package/src/nodes/gpgpu/BarrierNode.js +47 -0
  280. package/src/nodes/gpgpu/ComputeBuiltinNode.js +134 -0
  281. package/src/nodes/gpgpu/ComputeNode.js +106 -2
  282. package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
  283. package/src/nodes/lighting/AONode.js +18 -0
  284. package/src/nodes/lighting/AmbientLightNode.js +10 -0
  285. package/src/nodes/lighting/AnalyticLightNode.js +97 -2
  286. package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
  287. package/src/nodes/lighting/BasicLightMapNode.js +17 -0
  288. package/src/nodes/lighting/DirectionalLightNode.js +10 -0
  289. package/src/nodes/lighting/EnvironmentNode.js +18 -0
  290. package/src/nodes/lighting/HemisphereLightNode.js +31 -0
  291. package/src/nodes/lighting/IESSpotLightNode.js +11 -0
  292. package/src/nodes/lighting/IrradianceNode.js +17 -0
  293. package/src/nodes/lighting/LightProbeNode.js +20 -0
  294. package/src/nodes/lighting/LightUtils.js +12 -0
  295. package/src/nodes/lighting/LightingContextNode.js +48 -0
  296. package/src/nodes/lighting/LightingNode.js +15 -6
  297. package/src/nodes/lighting/LightsNode.js +132 -1
  298. package/src/nodes/lighting/PointLightNode.js +32 -1
  299. package/src/nodes/lighting/PointShadowNode.js +54 -1
  300. package/src/nodes/lighting/RectAreaLightNode.js +44 -6
  301. package/src/nodes/lighting/ShadowBaseNode.js +93 -0
  302. package/src/nodes/lighting/ShadowNode.js +241 -35
  303. package/src/nodes/lighting/SpotLightNode.js +43 -0
  304. package/src/nodes/math/ConditionalNode.js +78 -4
  305. package/src/nodes/math/Hash.js +9 -0
  306. package/src/nodes/math/MathNode.js +627 -11
  307. package/src/nodes/math/MathUtils.js +45 -1
  308. package/src/nodes/math/OperatorNode.js +329 -18
  309. package/src/nodes/math/TriNoise3D.js +18 -7
  310. package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
  311. package/src/nodes/parsers/GLSLNodeParser.js +11 -0
  312. package/src/nodes/pmrem/PMREMNode.js +133 -0
  313. package/src/nodes/pmrem/PMREMUtils.js +2 -2
  314. package/src/nodes/procedural/Checker.js +9 -0
  315. package/src/nodes/shapes/Shapes.js +33 -0
  316. package/src/nodes/tsl/TSLBase.js +3 -2
  317. package/src/nodes/tsl/TSLCore.js +22 -2
  318. package/src/nodes/utils/ArrayElementNode.js +39 -3
  319. package/src/nodes/utils/ConvertNode.js +31 -0
  320. package/src/nodes/utils/CubeMapNode.js +78 -0
  321. package/src/nodes/utils/Discard.js +16 -0
  322. package/src/nodes/utils/EquirectUVNode.js +31 -1
  323. package/src/nodes/utils/FlipNode.js +38 -0
  324. package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
  325. package/src/nodes/utils/JoinNode.js +25 -0
  326. package/src/nodes/utils/LoopNode.js +82 -2
  327. package/src/nodes/utils/MatcapUVNode.js +17 -0
  328. package/src/nodes/utils/MaxMipLevelNode.js +49 -0
  329. package/src/nodes/utils/MemberNode.js +68 -0
  330. package/src/nodes/utils/Oscillators.js +33 -0
  331. package/src/nodes/utils/Packing.js +17 -0
  332. package/src/nodes/utils/PostProcessingUtils.js +28 -23
  333. package/src/nodes/utils/RTTNode.js +123 -2
  334. package/src/nodes/utils/ReflectorNode.js +174 -4
  335. package/src/nodes/utils/RemapNode.js +79 -0
  336. package/src/nodes/utils/RotateNode.js +41 -0
  337. package/src/nodes/utils/SetNode.js +44 -1
  338. package/src/nodes/utils/SplitNode.js +55 -3
  339. package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
  340. package/src/nodes/utils/SpriteUtils.js +17 -0
  341. package/src/nodes/utils/StorageArrayElementNode.js +54 -0
  342. package/src/nodes/utils/Timer.js +40 -0
  343. package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
  344. package/src/nodes/utils/UVUtils.js +20 -0
  345. package/src/nodes/utils/ViewportUtils.js +13 -0
  346. package/src/objects/BatchedMesh.js +2 -3
  347. package/src/objects/ClippingGroup.js +49 -0
  348. package/src/objects/Line.js +6 -6
  349. package/src/renderers/WebGLRenderer.js +30 -4
  350. package/src/renderers/common/Animation.js +85 -0
  351. package/src/renderers/common/Attributes.js +36 -0
  352. package/src/renderers/common/Backend.js +502 -44
  353. package/src/renderers/common/Background.js +48 -1
  354. package/src/renderers/common/BindGroup.js +43 -0
  355. package/src/renderers/common/Binding.js +35 -0
  356. package/src/renderers/common/Bindings.js +93 -1
  357. package/src/renderers/common/Buffer.js +49 -0
  358. package/src/renderers/common/BufferUtils.js +27 -0
  359. package/src/renderers/common/BundleGroup.js +57 -0
  360. package/src/renderers/common/ChainMap.js +45 -6
  361. package/src/renderers/common/ClippingContext.js +108 -15
  362. package/src/renderers/common/Color4.js +40 -0
  363. package/src/renderers/common/ComputePipeline.js +24 -0
  364. package/src/renderers/common/CubeRenderTarget.js +13 -0
  365. package/src/renderers/common/DataMap.js +37 -1
  366. package/src/renderers/common/Geometries.js +91 -14
  367. package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
  368. package/src/renderers/common/Info.js +78 -35
  369. package/src/renderers/common/Lighting.js +34 -6
  370. package/src/renderers/common/Pipeline.js +22 -0
  371. package/src/renderers/common/Pipelines.js +148 -5
  372. package/src/renderers/common/PostProcessing.js +99 -11
  373. package/src/renderers/common/ProgrammableStage.js +60 -2
  374. package/src/renderers/common/QuadMesh.js +54 -5
  375. package/src/renderers/common/RenderBundle.js +14 -8
  376. package/src/renderers/common/RenderBundles.js +39 -10
  377. package/src/renderers/common/RenderContext.js +201 -2
  378. package/src/renderers/common/RenderContexts.js +59 -6
  379. package/src/renderers/common/RenderList.js +178 -0
  380. package/src/renderers/common/RenderLists.js +40 -3
  381. package/src/renderers/common/RenderObject.js +400 -17
  382. package/src/renderers/common/RenderObjects.js +103 -7
  383. package/src/renderers/common/RenderPipeline.js +24 -0
  384. package/src/renderers/common/Renderer.js +1170 -86
  385. package/src/renderers/common/RendererUtils.js +193 -0
  386. package/src/renderers/common/SampledTexture.js +120 -0
  387. package/src/renderers/common/Sampler.js +30 -0
  388. package/src/renderers/common/StorageBuffer.js +24 -0
  389. package/src/renderers/common/StorageBufferAttribute.js +31 -2
  390. package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
  391. package/src/renderers/common/StorageTexture.js +38 -0
  392. package/src/renderers/common/Textures.js +97 -7
  393. package/src/renderers/common/TimestampQueryPool.js +39 -0
  394. package/src/renderers/common/Uniform.js +225 -3
  395. package/src/renderers/common/UniformBuffer.js +19 -0
  396. package/src/renderers/common/UniformsGroup.js +141 -2
  397. package/src/renderers/common/XRManager.js +1193 -0
  398. package/src/renderers/common/XRRenderTarget.js +74 -0
  399. package/src/renderers/common/extras/PMREMGenerator.js +76 -10
  400. package/src/renderers/common/nodes/NodeBuilderState.js +99 -5
  401. package/src/renderers/common/nodes/NodeLibrary.js +89 -0
  402. package/src/renderers/common/nodes/NodeSampledTexture.js +90 -2
  403. package/src/renderers/common/nodes/NodeSampler.js +28 -0
  404. package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
  405. package/src/renderers/common/nodes/NodeUniform.js +243 -2
  406. package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
  407. package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
  408. package/src/renderers/common/nodes/Nodes.js +352 -78
  409. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
  410. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
  411. package/src/renderers/webgl/WebGLBackground.js +4 -0
  412. package/src/renderers/webgl-fallback/WebGLBackend.js +819 -116
  413. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +347 -18
  414. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +58 -1
  415. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
  416. package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
  417. package/src/renderers/webgl-fallback/utils/WebGLState.js +323 -11
  418. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +168 -22
  419. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +359 -0
  420. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
  421. package/src/renderers/webgpu/WebGPUBackend.js +578 -164
  422. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +36 -0
  423. package/src/renderers/webgpu/WebGPURenderer.js +36 -0
  424. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
  425. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
  426. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +674 -52
  427. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
  428. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  429. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +95 -14
  430. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +94 -1
  431. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +102 -3
  432. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +98 -1
  433. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +262 -18
  434. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +274 -0
  435. package/src/renderers/webgpu/utils/WebGPUUtils.js +116 -4
  436. package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
  437. package/src/renderers/webxr/WebXRManager.js +19 -2
  438. package/src/textures/Data3DTexture.js +2 -2
  439. package/src/textures/Texture.js +4 -0
  440. package/src/textures/VideoFrameTexture.js +35 -0
  441. package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
  442. package/examples/jsm/animation/MMDPhysics.js +0 -1408
  443. package/examples/jsm/exporters/MMDExporter.js +0 -223
  444. package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -176
  445. package/examples/jsm/libs/mmdparser.module.js +0 -11530
  446. package/examples/jsm/loaders/MMDLoader.js +0 -2298
  447. package/examples/jsm/objects/InstancedPoints.js +0 -19
  448. package/examples/jsm/shaders/MMDToonShader.js +0 -134
  449. package/src/materials/nodes/InstancedPointsNodeMaterial.js +0 -156
  450. package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -24
  451. package/src/nodes/core/UniformGroup.js +0 -13
  452. package/src/nodes/fog/FogExp2Node.js +0 -35
  453. package/src/nodes/fog/FogNode.js +0 -50
  454. package/src/nodes/fog/FogRangeNode.js +0 -36
  455. package/src/renderers/common/PostProcessingUtils.js +0 -86
@@ -1,12 +1,27 @@
1
1
  import DataMap from '../../common/DataMap.js';
2
2
  import { GPUTextureViewDimension, GPUIndexFormat, GPUFilterMode, GPUPrimitiveTopology, GPULoadOp, GPUStoreOp } from './WebGPUConstants.js';
3
3
 
4
+ /**
5
+ * A WebGPU backend utility module used by {@link WebGPUTextureUtils}.
6
+ *
7
+ * @private
8
+ */
4
9
  class WebGPUTexturePassUtils extends DataMap {
5
10
 
11
+ /**
12
+ * Constructs a new utility object.
13
+ *
14
+ * @param {GPUDevice} device - The WebGPU device.
15
+ */
6
16
  constructor( device ) {
7
17
 
8
18
  super();
9
19
 
20
+ /**
21
+ * The WebGPU device.
22
+ *
23
+ * @type {GPUDevice}
24
+ */
10
25
  this.device = device;
11
26
 
12
27
  const mipmapVertexSource = `
@@ -71,23 +86,62 @@ fn main( @location( 0 ) vTex : vec2<f32> ) -> @location( 0 ) vec4<f32> {
71
86
 
72
87
  }
73
88
  `;
89
+
90
+ /**
91
+ * The mipmap GPU sampler.
92
+ *
93
+ * @type {GPUSampler}
94
+ */
74
95
  this.mipmapSampler = device.createSampler( { minFilter: GPUFilterMode.Linear } );
96
+
97
+ /**
98
+ * The flipY GPU sampler.
99
+ *
100
+ * @type {GPUSampler}
101
+ */
75
102
  this.flipYSampler = device.createSampler( { minFilter: GPUFilterMode.Nearest } ); //@TODO?: Consider using textureLoad()
76
103
 
77
- // We'll need a new pipeline for every texture format used.
104
+ /**
105
+ * A cache for GPU render pipelines used for copy/transfer passes.
106
+ * Every texture format requires a unique pipeline.
107
+ *
108
+ * @type {Object<String,GPURenderPipeline>}
109
+ */
78
110
  this.transferPipelines = {};
111
+
112
+ /**
113
+ * A cache for GPU render pipelines used for flipY passes.
114
+ * Every texture format requires a unique pipeline.
115
+ *
116
+ * @type {Object<String,GPURenderPipeline>}
117
+ */
79
118
  this.flipYPipelines = {};
80
119
 
120
+ /**
121
+ * The mipmap vertex shader module.
122
+ *
123
+ * @type {GPUShaderModule}
124
+ */
81
125
  this.mipmapVertexShaderModule = device.createShaderModule( {
82
126
  label: 'mipmapVertex',
83
127
  code: mipmapVertexSource
84
128
  } );
85
129
 
130
+ /**
131
+ * The mipmap fragment shader module.
132
+ *
133
+ * @type {GPUShaderModule}
134
+ */
86
135
  this.mipmapFragmentShaderModule = device.createShaderModule( {
87
136
  label: 'mipmapFragment',
88
137
  code: mipmapFragmentSource
89
138
  } );
90
139
 
140
+ /**
141
+ * The flipY fragment shader module.
142
+ *
143
+ * @type {GPUShaderModule}
144
+ */
91
145
  this.flipYFragmentShaderModule = device.createShaderModule( {
92
146
  label: 'flipYFragment',
93
147
  code: flipYFragmentSource
@@ -95,6 +149,13 @@ fn main( @location( 0 ) vTex : vec2<f32> ) -> @location( 0 ) vec4<f32> {
95
149
 
96
150
  }
97
151
 
152
+ /**
153
+ * Returns a render pipeline for the internal copy render pass. The pass
154
+ * requires a unique render pipeline for each texture format.
155
+ *
156
+ * @param {String} format - The GPU texture format
157
+ * @return {GPURenderPipeline} The GPU render pipeline.
158
+ */
98
159
  getTransferPipeline( format ) {
99
160
 
100
161
  let pipeline = this.transferPipelines[ format ];
@@ -127,6 +188,13 @@ fn main( @location( 0 ) vTex : vec2<f32> ) -> @location( 0 ) vec4<f32> {
127
188
 
128
189
  }
129
190
 
191
+ /**
192
+ * Returns a render pipeline for the flipY render pass. The pass
193
+ * requires a unique render pipeline for each texture format.
194
+ *
195
+ * @param {String} format - The GPU texture format
196
+ * @return {GPURenderPipeline} The GPU render pipeline.
197
+ */
130
198
  getFlipYPipeline( format ) {
131
199
 
132
200
  let pipeline = this.flipYPipelines[ format ];
@@ -159,6 +227,13 @@ fn main( @location( 0 ) vTex : vec2<f32> ) -> @location( 0 ) vec4<f32> {
159
227
 
160
228
  }
161
229
 
230
+ /**
231
+ * Flip the contents of the given GPU texture along its vertical axis.
232
+ *
233
+ * @param {GPUTexture} textureGPU - The GPU texture object.
234
+ * @param {Object} textureGPUDescriptor - The texture descriptor.
235
+ * @param {Number} [baseArrayLayer=0] - The index of the first array layer accessible to the texture view.
236
+ */
162
237
  flipY( textureGPU, textureGPUDescriptor, baseArrayLayer = 0 ) {
163
238
 
164
239
  const format = textureGPUDescriptor.format;
@@ -229,6 +304,13 @@ fn main( @location( 0 ) vTex : vec2<f32> ) -> @location( 0 ) vec4<f32> {
229
304
 
230
305
  }
231
306
 
307
+ /**
308
+ * Generates mipmaps for the given GPU texture.
309
+ *
310
+ * @param {GPUTexture} textureGPU - The GPU texture object.
311
+ * @param {Object} textureGPUDescriptor - The texture descriptor.
312
+ * @param {Number} [baseArrayLayer=0] - The index of the first array layer accessible to the texture view.
313
+ */
232
314
  generateMipmaps( textureGPU, textureGPUDescriptor, baseArrayLayer = 0 ) {
233
315
 
234
316
  const textureData = this.get( textureGPU );
@@ -254,6 +336,15 @@ fn main( @location( 0 ) vTex : vec2<f32> ) -> @location( 0 ) vec4<f32> {
254
336
 
255
337
  }
256
338
 
339
+ /**
340
+ * Since multiple copy render passes are required to generate mipmaps, the passes
341
+ * are managed as render bundles to improve performance.
342
+ *
343
+ * @param {GPUTexture} textureGPU - The GPU texture object.
344
+ * @param {Object} textureGPUDescriptor - The texture descriptor.
345
+ * @param {Number} baseArrayLayer - The index of the first array layer accessible to the texture view.
346
+ * @return {Array} An array of render bundles.
347
+ */
257
348
  _mipmapCreateBundles( textureGPU, textureGPUDescriptor, baseArrayLayer ) {
258
349
 
259
350
  const pipeline = this.getTransferPipeline( textureGPUDescriptor.format );
@@ -319,6 +410,12 @@ fn main( @location( 0 ) vTex : vec2<f32> ) -> @location( 0 ) vec4<f32> {
319
410
 
320
411
  }
321
412
 
413
+ /**
414
+ * Executes the render bundles.
415
+ *
416
+ * @param {GPUCommandEncoder} commandEncoder - The GPU command encoder.
417
+ * @param {Array} passes - An array of render bundles.
418
+ */
322
419
  _mipmapRunBundles( commandEncoder, passes ) {
323
420
 
324
421
  const levels = passes.length;
@@ -32,25 +32,82 @@ const _compareToWebGPU = {
32
32
 
33
33
  const _flipMap = [ 0, 1, 3, 2, 4, 5 ];
34
34
 
35
+ /**
36
+ * A WebGPU backend utility module for managing textures.
37
+ *
38
+ * @private
39
+ */
35
40
  class WebGPUTextureUtils {
36
41
 
42
+ /**
43
+ * Constructs a new utility object.
44
+ *
45
+ * @param {WebGPUBackend} backend - The WebGPU backend.
46
+ */
37
47
  constructor( backend ) {
38
48
 
49
+ /**
50
+ * A reference to the WebGPU backend.
51
+ *
52
+ * @type {WebGPUBackend}
53
+ */
39
54
  this.backend = backend;
40
55
 
56
+ /**
57
+ * A reference to the pass utils.
58
+ *
59
+ * @type {WebGPUTexturePassUtils?}
60
+ * @default null
61
+ */
41
62
  this._passUtils = null;
42
63
 
64
+ /**
65
+ * A dictionary for managing default textures. The key
66
+ * is the texture format, the value the texture object.
67
+ *
68
+ * @type {Object<String,Texture>}
69
+ */
43
70
  this.defaultTexture = {};
71
+
72
+ /**
73
+ * A dictionary for managing default cube textures. The key
74
+ * is the texture format, the value the texture object.
75
+ *
76
+ * @type {Object<String,CubeTexture>}
77
+ */
44
78
  this.defaultCubeTexture = {};
79
+
80
+ /**
81
+ * A default video frame.
82
+ *
83
+ * @type {VideoFrame?}
84
+ * @default null
85
+ */
45
86
  this.defaultVideoFrame = null;
46
87
 
88
+ /**
89
+ * Represents the color attachment of the default framebuffer.
90
+ *
91
+ * @type {GPUTexture?}
92
+ * @default null
93
+ */
47
94
  this.colorBuffer = null;
48
95
 
96
+ /**
97
+ * Represents the depth attachment of the default framebuffer.
98
+ *
99
+ * @type {DepthTexture}
100
+ */
49
101
  this.depthTexture = new DepthTexture();
50
102
  this.depthTexture.name = 'depthBuffer';
51
103
 
52
104
  }
53
105
 
106
+ /**
107
+ * Creates a GPU sampler for the given texture.
108
+ *
109
+ * @param {Texture} texture - The texture to create the sampler for.
110
+ */
54
111
  createSampler( texture ) {
55
112
 
56
113
  const backend = this.backend;
@@ -86,6 +143,12 @@ class WebGPUTextureUtils {
86
143
 
87
144
  }
88
145
 
146
+ /**
147
+ * Creates a default texture for the given texture that can be used
148
+ * as a placeholder until the actual texture is ready for usage.
149
+ *
150
+ * @param {Texture} texture - The texture to create a default texture for.
151
+ */
89
152
  createDefaultTexture( texture ) {
90
153
 
91
154
  let textureGPU;
@@ -110,6 +173,13 @@ class WebGPUTextureUtils {
110
173
 
111
174
  }
112
175
 
176
+ /**
177
+ * Defines a texture on the GPU for the given texture object.
178
+ *
179
+ * @param {Texture} texture - The texture.
180
+ * @param {Object} [options={}] - Optional configuration parameter.
181
+ * @return {undefined}
182
+ */
113
183
  createTexture( texture, options = {} ) {
114
184
 
115
185
  const backend = this.backend;
@@ -146,11 +216,7 @@ class WebGPUTextureUtils {
146
216
 
147
217
  textureData.format = format;
148
218
 
149
- let sampleCount = options.sampleCount !== undefined ? options.sampleCount : 1;
150
-
151
- sampleCount = backend.utils.getSampleCount( sampleCount );
152
-
153
- const primarySampleCount = texture.isRenderTargetTexture && ! texture.isMultisampleRenderTargetTexture ? 1 : sampleCount;
219
+ const { samples, primarySamples, isMSAA } = backend.utils.getTextureSampleData( texture );
154
220
 
155
221
  let usage = GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC;
156
222
 
@@ -174,7 +240,7 @@ class WebGPUTextureUtils {
174
240
  depthOrArrayLayers: depth,
175
241
  },
176
242
  mipLevelCount: levels,
177
- sampleCount: primarySampleCount,
243
+ sampleCount: primarySamples,
178
244
  dimension: dimension,
179
245
  format: format,
180
246
  usage: usage
@@ -208,12 +274,12 @@ class WebGPUTextureUtils {
208
274
 
209
275
  }
210
276
 
211
- if ( texture.isRenderTargetTexture && sampleCount > 1 && ! texture.isMultisampleRenderTargetTexture ) {
277
+ if ( isMSAA ) {
212
278
 
213
279
  const msaaTextureDescriptorGPU = Object.assign( {}, textureDescriptorGPU );
214
280
 
215
281
  msaaTextureDescriptorGPU.label = msaaTextureDescriptorGPU.label + '-msaa';
216
- msaaTextureDescriptorGPU.sampleCount = sampleCount;
282
+ msaaTextureDescriptorGPU.sampleCount = samples;
217
283
 
218
284
  textureData.msaaTexture = backend.device.createTexture( msaaTextureDescriptorGPU );
219
285
 
@@ -225,6 +291,11 @@ class WebGPUTextureUtils {
225
291
 
226
292
  }
227
293
 
294
+ /**
295
+ * Destroys the GPU data for the given texture object.
296
+ *
297
+ * @param {Texture} texture - The texture.
298
+ */
228
299
  destroyTexture( texture ) {
229
300
 
230
301
  const backend = this.backend;
@@ -238,6 +309,11 @@ class WebGPUTextureUtils {
238
309
 
239
310
  }
240
311
 
312
+ /**
313
+ * Destroys the GPU sampler for the given texture.
314
+ *
315
+ * @param {Texture} texture - The texture to destroy the sampler for.
316
+ */
241
317
  destroySampler( texture ) {
242
318
 
243
319
  const backend = this.backend;
@@ -247,6 +323,11 @@ class WebGPUTextureUtils {
247
323
 
248
324
  }
249
325
 
326
+ /**
327
+ * Generates mipmaps for the given texture.
328
+ *
329
+ * @param {Texture} texture - The texture.
330
+ */
250
331
  generateMipmaps( texture ) {
251
332
 
252
333
  const textureData = this.backend.get( texture );
@@ -273,6 +354,12 @@ class WebGPUTextureUtils {
273
354
 
274
355
  }
275
356
 
357
+ /**
358
+ * Returns the color buffer representing the color
359
+ * attachment of the default framebuffer.
360
+ *
361
+ * @return {GPUTexture} The color buffer.
362
+ */
276
363
  getColorBuffer() {
277
364
 
278
365
  if ( this.colorBuffer ) this.colorBuffer.destroy();
@@ -296,6 +383,14 @@ class WebGPUTextureUtils {
296
383
 
297
384
  }
298
385
 
386
+ /**
387
+ * Returns the depth buffer representing the depth
388
+ * attachment of the default framebuffer.
389
+ *
390
+ * @param {Boolean} [depth=true] - Whether depth is enabled or not.
391
+ * @param {Boolean} [stencil=false] - Whether stencil is enabled or not.
392
+ * @return {GPUTexture} The depth buffer.
393
+ */
299
394
  getDepthBuffer( depth = true, stencil = false ) {
300
395
 
301
396
  const backend = this.backend;
@@ -336,12 +431,18 @@ class WebGPUTextureUtils {
336
431
  depthTexture.image.width = width;
337
432
  depthTexture.image.height = height;
338
433
 
339
- this.createTexture( depthTexture, { sampleCount: backend.utils.getSampleCount( backend.renderer.samples ), width, height } );
434
+ this.createTexture( depthTexture, { width, height } );
340
435
 
341
436
  return backend.get( depthTexture ).texture;
342
437
 
343
438
  }
344
439
 
440
+ /**
441
+ * Uploads the updated texture data to the GPU.
442
+ *
443
+ * @param {Texture} texture - The texture.
444
+ * @param {Object} [options={}] - Optional configuration parameter.
445
+ */
345
446
  updateTexture( texture, options ) {
346
447
 
347
448
  const textureData = this.backend.get( texture );
@@ -393,6 +494,18 @@ class WebGPUTextureUtils {
393
494
 
394
495
  }
395
496
 
497
+ /**
498
+ * Returns texture data as a typed array.
499
+ *
500
+ * @async
501
+ * @param {Texture} texture - The texture to copy.
502
+ * @param {Number} x - The x coordinate of the copy origin.
503
+ * @param {Number} y - The y coordinate of the copy origin.
504
+ * @param {Number} width - The width of the copy.
505
+ * @param {Number} height - The height of the copy.
506
+ * @param {Number} faceIndex - The face index.
507
+ * @return {Promise<TypedArray>} A Promise that resolves with a typed array when the copy operation has finished.
508
+ */
396
509
  async copyTextureToBuffer( texture, x, y, width, height, faceIndex ) {
397
510
 
398
511
  const device = this.backend.device;
@@ -442,6 +555,13 @@ class WebGPUTextureUtils {
442
555
 
443
556
  }
444
557
 
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
+ */
445
565
  _isEnvironmentTexture( texture ) {
446
566
 
447
567
  const mapping = texture.mapping;
@@ -450,6 +570,13 @@ class WebGPUTextureUtils {
450
570
 
451
571
  }
452
572
 
573
+ /**
574
+ * Returns the default GPU texture for the given format.
575
+ *
576
+ * @private
577
+ * @param {String} format - The GPU format.
578
+ * @return {GPUTexture} The GPU texture.
579
+ */
453
580
  _getDefaultTextureGPU( format ) {
454
581
 
455
582
  let defaultTexture = this.defaultTexture[ format ];
@@ -470,6 +597,13 @@ class WebGPUTextureUtils {
470
597
 
471
598
  }
472
599
 
600
+ /**
601
+ * Returns the default GPU cube texture for the given format.
602
+ *
603
+ * @private
604
+ * @param {String} format - The GPU format.
605
+ * @return {GPUTexture} The GPU texture.
606
+ */
473
607
  _getDefaultCubeTextureGPU( format ) {
474
608
 
475
609
  let defaultCubeTexture = this.defaultTexture[ format ];
@@ -490,6 +624,12 @@ class WebGPUTextureUtils {
490
624
 
491
625
  }
492
626
 
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
+ */
493
633
  _getDefaultVideoFrame() {
494
634
 
495
635
  let defaultVideoFrame = this.defaultVideoFrame;
@@ -511,6 +651,15 @@ class WebGPUTextureUtils {
511
651
 
512
652
  }
513
653
 
654
+ /**
655
+ * Uploads cube texture image data to the GPU memory.
656
+ *
657
+ * @private
658
+ * @param {Array} images - The cube image data.
659
+ * @param {GPUTexture} textureGPU - The GPU texture.
660
+ * @param {Object} textureDescriptorGPU - The GPU texture descriptor.
661
+ * @param {Boolean} flipY - Whether to flip texture data along their vertical axis or not.
662
+ */
514
663
  _copyCubeMapToTexture( images, textureGPU, textureDescriptorGPU, flipY ) {
515
664
 
516
665
  for ( let i = 0; i < 6; i ++ ) {
@@ -533,13 +682,24 @@ class WebGPUTextureUtils {
533
682
 
534
683
  }
535
684
 
685
+ /**
686
+ * Uploads texture image data to the GPU memory.
687
+ *
688
+ * @private
689
+ * @param {HTMLImageElement|ImageBitmap|HTMLCanvasElement} image - The image data.
690
+ * @param {GPUTexture} textureGPU - The GPU texture.
691
+ * @param {Object} textureDescriptorGPU - The GPU texture descriptor.
692
+ * @param {Number} originDepth - The origin depth.
693
+ * @param {Boolean} flipY - Whether to flip texture data along their vertical axis or not.
694
+ */
536
695
  _copyImageToTexture( image, textureGPU, textureDescriptorGPU, originDepth, flipY ) {
537
696
 
538
697
  const device = this.backend.device;
539
698
 
540
699
  device.queue.copyExternalImageToTexture(
541
700
  {
542
- source: image
701
+ source: image,
702
+ flipY: flipY
543
703
  }, {
544
704
  texture: textureGPU,
545
705
  mipLevel: 0,
@@ -551,14 +711,14 @@ class WebGPUTextureUtils {
551
711
  }
552
712
  );
553
713
 
554
- if ( flipY === true ) {
555
-
556
- this._flipY( textureGPU, textureDescriptorGPU, originDepth );
557
-
558
- }
559
-
560
714
  }
561
715
 
716
+ /**
717
+ * Returns the pass utils singleton.
718
+ *
719
+ * @private
720
+ * @return {WebGPUTexturePassUtils} The utils instance.
721
+ */
562
722
  _getPassUtils() {
563
723
 
564
724
  let passUtils = this._passUtils;
@@ -573,18 +733,45 @@ class WebGPUTextureUtils {
573
733
 
574
734
  }
575
735
 
736
+ /**
737
+ * Generates mipmaps for the given GPU texture.
738
+ *
739
+ * @private
740
+ * @param {GPUTexture} textureGPU - The GPU texture object.
741
+ * @param {Object} textureDescriptorGPU - The texture descriptor.
742
+ * @param {Number} [baseArrayLayer=0] - The index of the first array layer accessible to the texture view.
743
+ */
576
744
  _generateMipmaps( textureGPU, textureDescriptorGPU, baseArrayLayer = 0 ) {
577
745
 
578
746
  this._getPassUtils().generateMipmaps( textureGPU, textureDescriptorGPU, baseArrayLayer );
579
747
 
580
748
  }
581
749
 
750
+ /**
751
+ * Flip the contents of the given GPU texture along its vertical axis.
752
+ *
753
+ * @private
754
+ * @param {GPUTexture} textureGPU - The GPU texture object.
755
+ * @param {Object} textureDescriptorGPU - The texture descriptor.
756
+ * @param {Number} [originDepth=0] - The origin depth.
757
+ */
582
758
  _flipY( textureGPU, textureDescriptorGPU, originDepth = 0 ) {
583
759
 
584
760
  this._getPassUtils().flipY( textureGPU, textureDescriptorGPU, originDepth );
585
761
 
586
762
  }
587
763
 
764
+ /**
765
+ * Uploads texture buffer data to the GPU memory.
766
+ *
767
+ * @private
768
+ * @param {Object} image - An object defining the image buffer data.
769
+ * @param {GPUTexture} textureGPU - The GPU texture.
770
+ * @param {Object} textureDescriptorGPU - The GPU texture descriptor.
771
+ * @param {Number} originDepth - The origin depth.
772
+ * @param {Boolean} flipY - Whether to flip texture data along their vertical axis or not.
773
+ * @param {Number} [depth=0] - TODO.
774
+ */
588
775
  _copyBufferToTexture( image, textureGPU, textureDescriptorGPU, originDepth, flipY, depth = 0 ) {
589
776
 
590
777
  // @TODO: Consider to use GPUCommandEncoder.copyBufferToTexture()
@@ -622,6 +809,14 @@ class WebGPUTextureUtils {
622
809
 
623
810
  }
624
811
 
812
+ /**
813
+ * Uploads compressed texture data to the GPU memory.
814
+ *
815
+ * @private
816
+ * @param {Array<Object>} mipmaps - An array with mipmap data.
817
+ * @param {GPUTexture} textureGPU - The GPU texture.
818
+ * @param {Object} textureDescriptorGPU - The GPU texture descriptor.
819
+ */
625
820
  _copyCompressedBufferToTexture( mipmaps, textureGPU, textureDescriptorGPU ) {
626
821
 
627
822
  // @TODO: Consider to use GPUCommandEncoder.copyBufferToTexture()
@@ -669,10 +864,16 @@ class WebGPUTextureUtils {
669
864
 
670
865
  }
671
866
 
867
+ /**
868
+ * This method is only relevant for compressed texture formats. It returns a block
869
+ * data descriptor for the given GPU compressed texture format.
870
+ *
871
+ * @private
872
+ * @param {String} format - The GPU compressed texture format.
873
+ * @return {Object} The block data descriptor.
874
+ */
672
875
  _getBlockData( format ) {
673
876
 
674
- // this method is only relevant for compressed texture formats
675
-
676
877
  if ( format === GPUTextureFormat.BC1RGBAUnorm || format === GPUTextureFormat.BC1RGBAUnormSRGB ) return { byteLength: 8, width: 4, height: 4 }; // DXT1
677
878
  if ( format === GPUTextureFormat.BC2RGBAUnorm || format === GPUTextureFormat.BC2RGBAUnormSRGB ) return { byteLength: 16, width: 4, height: 4 }; // DXT3
678
879
  if ( format === GPUTextureFormat.BC3RGBAUnorm || format === GPUTextureFormat.BC3RGBAUnormSRGB ) return { byteLength: 16, width: 4, height: 4 }; // DXT5
@@ -706,6 +907,13 @@ class WebGPUTextureUtils {
706
907
 
707
908
  }
708
909
 
910
+ /**
911
+ * Converts the three.js uv wrapping constants to GPU address mode constants.
912
+ *
913
+ * @private
914
+ * @param {Number} value - The three.js constant defining a uv wrapping mode.
915
+ * @return {String} The GPU address mode.
916
+ */
709
917
  _convertAddressMode( value ) {
710
918
 
711
919
  let addressMode = GPUAddressMode.ClampToEdge;
@@ -724,6 +932,13 @@ class WebGPUTextureUtils {
724
932
 
725
933
  }
726
934
 
935
+ /**
936
+ * Converts the three.js filter constants to GPU filter constants.
937
+ *
938
+ * @private
939
+ * @param {Number} value - The three.js constant defining a filter mode.
940
+ * @return {String} The GPU filter mode.
941
+ */
727
942
  _convertFilterMode( value ) {
728
943
 
729
944
  let filterMode = GPUFilterMode.Linear;
@@ -738,6 +953,13 @@ class WebGPUTextureUtils {
738
953
 
739
954
  }
740
955
 
956
+ /**
957
+ * Returns the bytes-per-texel value for the given GPU texture format.
958
+ *
959
+ * @private
960
+ * @param {String} format - The GPU texture format.
961
+ * @return {Number} The bytes-per-texel.
962
+ */
741
963
  _getBytesPerTexel( format ) {
742
964
 
743
965
  // 8-bit formats
@@ -794,6 +1016,13 @@ class WebGPUTextureUtils {
794
1016
 
795
1017
  }
796
1018
 
1019
+ /**
1020
+ * Returns the corresponding typed array type for the given GPU texture format.
1021
+ *
1022
+ * @private
1023
+ * @param {String} format - The GPU texture format.
1024
+ * @return {TypedArray.constructor} The typed array type.
1025
+ */
797
1026
  _getTypedArrayType( format ) {
798
1027
 
799
1028
  if ( format === GPUTextureFormat.R8Uint ) return Uint8Array;
@@ -844,6 +1073,13 @@ class WebGPUTextureUtils {
844
1073
 
845
1074
  }
846
1075
 
1076
+ /**
1077
+ * Returns the GPU dimensions for the given texture.
1078
+ *
1079
+ * @private
1080
+ * @param {Texture} texture - The texture.
1081
+ * @return {String} The GPU dimension.
1082
+ */
847
1083
  _getDimension( texture ) {
848
1084
 
849
1085
  let dimension;
@@ -864,6 +1100,14 @@ class WebGPUTextureUtils {
864
1100
 
865
1101
  }
866
1102
 
1103
+ /**
1104
+ * Returns the GPU format for the given texture.
1105
+ *
1106
+ * @param {Texture} texture - The texture.
1107
+ * @param {GPUDevice?} [device=null] - The GPU device which is used for feature detection.
1108
+ * It is not necessary to apply the device for most formats.
1109
+ * @return {String} The GPU format.
1110
+ */
867
1111
  export function getFormat( texture, device = null ) {
868
1112
 
869
1113
  const format = texture.format;