super-three 0.164.0 → 0.167.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 (416) hide show
  1. package/README.md +3 -3
  2. package/build/three.cjs +1273 -503
  3. package/build/three.module.js +1269 -504
  4. package/build/three.module.min.js +1 -1
  5. package/build/three.webgpu.js +76086 -0
  6. package/build/three.webgpu.min.js +6 -0
  7. package/examples/jsm/Addons.js +2 -1
  8. package/examples/jsm/controls/TransformControls.js +1 -1
  9. package/examples/jsm/csm/CSMShader.js +4 -4
  10. package/examples/jsm/environments/RoomEnvironment.js +1 -5
  11. package/examples/jsm/exporters/GLTFExporter.js +8 -4
  12. package/examples/jsm/exporters/USDZExporter.js +6 -4
  13. package/examples/jsm/geometries/TeapotGeometry.js +1 -1
  14. package/examples/jsm/helpers/ViewHelper.js +75 -61
  15. package/examples/jsm/lights/RectAreaLightTexturesLib.js +91 -0
  16. package/examples/jsm/lights/RectAreaLightUniformsLib.js +8 -63
  17. package/examples/jsm/lines/LineMaterial.js +1 -15
  18. package/examples/jsm/lines/LineSegments2.js +15 -0
  19. package/examples/jsm/lines/Wireframe.js +16 -1
  20. package/examples/jsm/lines/webgpu/Line2.js +20 -0
  21. package/examples/jsm/lines/webgpu/LineSegments2.js +376 -0
  22. package/examples/jsm/loaders/DRACOLoader.js +1 -1
  23. package/examples/jsm/loaders/FBXLoader.js +47 -58
  24. package/examples/jsm/loaders/GLTFLoader.js +12 -4
  25. package/examples/jsm/loaders/LDrawLoader.js +3 -2
  26. package/examples/jsm/loaders/MMDLoader.js +31 -12
  27. package/examples/jsm/loaders/MaterialXLoader.js +2 -9
  28. package/examples/jsm/loaders/USDZLoader.js +124 -76
  29. package/examples/jsm/loaders/UltraHDRLoader.js +583 -0
  30. package/examples/jsm/loaders/VTKLoader.js +76 -3
  31. package/examples/jsm/misc/GPUComputationRenderer.js +9 -19
  32. package/examples/jsm/modifiers/CurveModifier.js +11 -9
  33. package/examples/jsm/modifiers/SimplifyModifier.js +2 -1
  34. package/examples/jsm/objects/InstancedPoints.js +2 -2
  35. package/examples/jsm/objects/Lensflare.js +2 -2
  36. package/examples/jsm/postprocessing/RenderPass.js +1 -1
  37. package/examples/jsm/postprocessing/RenderTransitionPass.js +13 -38
  38. package/examples/jsm/postprocessing/SSAOPass.js +6 -9
  39. package/examples/jsm/postprocessing/UnrealBloomPass.js +4 -4
  40. package/examples/jsm/renderers/CSS2DRenderer.js +25 -5
  41. package/examples/jsm/renderers/CSS3DRenderer.js +24 -3
  42. package/examples/jsm/shaders/ColorifyShader.js +1 -2
  43. package/examples/jsm/shaders/FXAAShader.js +0 -2
  44. package/examples/jsm/shaders/GTAOShader.js +1 -1
  45. package/examples/jsm/shaders/LuminosityHighPassShader.js +1 -3
  46. package/examples/jsm/transpiler/GLSLDecoder.js +46 -4
  47. package/examples/jsm/transpiler/TSLEncoder.js +17 -15
  48. package/examples/jsm/utils/BufferGeometryUtils.js +18 -16
  49. package/examples/jsm/utils/GPUStatsPanel.js +2 -0
  50. package/examples/jsm/utils/SortUtils.js +8 -5
  51. package/package.json +9 -7
  52. package/src/Three.WebGPU.js +194 -0
  53. package/src/Three.js +2 -0
  54. package/src/animation/tracks/BooleanKeyframeTrack.js +10 -1
  55. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -2
  56. package/src/animation/tracks/StringKeyframeTrack.js +10 -1
  57. package/src/constants.js +4 -1
  58. package/src/core/Object3D.js +24 -22
  59. package/src/core/Raycaster.js +6 -2
  60. package/src/extras/TextureUtils.js +210 -0
  61. package/src/lights/Light.js +1 -0
  62. package/src/lights/LightShadow.js +5 -0
  63. package/{examples/jsm/lights → src/lights/webgpu}/IESSpotLight.js +1 -1
  64. package/src/loaders/FileLoader.js +4 -0
  65. package/src/loaders/LoaderUtils.js +3 -1
  66. package/src/loaders/ObjectLoader.js +34 -2
  67. package/src/materials/Material.js +13 -4
  68. package/src/math/Box2.js +4 -4
  69. package/src/math/Box3.js +6 -6
  70. package/src/math/ColorManagement.js +10 -0
  71. package/src/math/Matrix2.js +54 -0
  72. package/src/math/Vector4.js +13 -0
  73. package/{examples/jsm → src}/nodes/Nodes.js +39 -20
  74. package/{examples/jsm → src}/nodes/accessors/BatchNode.js +28 -10
  75. package/src/nodes/accessors/BitangentNode.js +13 -0
  76. package/{examples/jsm → src}/nodes/accessors/BufferAttributeNode.js +36 -1
  77. package/{examples/jsm → src}/nodes/accessors/BufferNode.js +6 -0
  78. package/src/nodes/accessors/CameraNode.js +19 -0
  79. package/{examples/jsm → src}/nodes/accessors/CubeTextureNode.js +22 -5
  80. package/src/nodes/accessors/InstanceNode.js +140 -0
  81. package/{examples/jsm → src}/nodes/accessors/MaterialNode.js +24 -2
  82. package/{examples/jsm → src}/nodes/accessors/ModelNode.js +4 -0
  83. package/{examples/jsm → src}/nodes/accessors/MorphNode.js +24 -20
  84. package/src/nodes/accessors/NormalNode.js +14 -0
  85. package/{examples/jsm → src}/nodes/accessors/Object3DNode.js +1 -1
  86. package/src/nodes/accessors/PositionNode.js +10 -0
  87. package/{examples/jsm → src}/nodes/accessors/ReferenceNode.js +7 -1
  88. package/src/nodes/accessors/ReflectVectorNode.js +10 -0
  89. package/{examples/jsm → src}/nodes/accessors/StorageBufferNode.js +50 -1
  90. package/{examples/jsm/nodes/accessors/TextureStoreNode.js → src/nodes/accessors/StorageTextureNode.js} +28 -6
  91. package/src/nodes/accessors/TangentNode.js +23 -0
  92. package/src/nodes/accessors/Texture3DNode.js +100 -0
  93. package/{examples/jsm → src}/nodes/accessors/TextureNode.js +55 -18
  94. package/src/nodes/accessors/UVNode.js +3 -0
  95. package/{examples/jsm → src}/nodes/accessors/UniformsNode.js +7 -1
  96. package/{examples/jsm → src}/nodes/accessors/VertexColorNode.js +2 -1
  97. package/{examples/jsm → src}/nodes/code/ScriptableNode.js +14 -0
  98. package/{examples/jsm → src}/nodes/code/ScriptableValueNode.js +2 -1
  99. package/{examples/jsm → src}/nodes/core/AttributeNode.js +34 -8
  100. package/{examples/jsm → src}/nodes/core/CacheNode.js +7 -10
  101. package/{examples/jsm → src}/nodes/core/ContextNode.js +6 -0
  102. package/{examples/jsm → src}/nodes/core/IndexNode.js +6 -0
  103. package/{examples/jsm → src}/nodes/core/LightingModel.js +2 -2
  104. package/src/nodes/core/MRTNode.js +76 -0
  105. package/{examples/jsm → src}/nodes/core/Node.js +33 -14
  106. package/{examples/jsm → src}/nodes/core/NodeBuilder.js +194 -45
  107. package/src/nodes/core/NodeCache.js +36 -0
  108. package/{examples/jsm → src}/nodes/core/NodeFrame.js +42 -0
  109. package/{examples/jsm → src}/nodes/core/NodeFunction.js +2 -2
  110. package/{examples/jsm → src}/nodes/core/NodeKeywords.js +1 -1
  111. package/{examples/jsm → src}/nodes/core/NodeUniform.js +1 -2
  112. package/{examples/jsm → src}/nodes/core/NodeUtils.js +6 -1
  113. package/{examples/jsm → src}/nodes/core/OutputStructNode.js +1 -5
  114. package/{examples/jsm → src}/nodes/core/PropertyNode.js +2 -0
  115. package/{examples/jsm → src}/nodes/core/TempNode.js +2 -2
  116. package/{examples/jsm → src}/nodes/core/UniformGroupNode.js +20 -0
  117. package/{examples/jsm → src}/nodes/core/UniformNode.js +10 -1
  118. package/{examples/jsm → src}/nodes/core/VarNode.js +2 -6
  119. package/src/nodes/core/VaryingNode.js +104 -0
  120. package/{examples/jsm → src}/nodes/display/AfterImageNode.js +24 -20
  121. package/{examples/jsm → src}/nodes/display/AnamorphicNode.js +18 -21
  122. package/src/nodes/display/BloomNode.js +333 -0
  123. package/{examples/jsm → src}/nodes/display/ColorAdjustmentNode.js +7 -2
  124. package/{examples/jsm → src}/nodes/display/ColorSpaceNode.js +1 -1
  125. package/src/nodes/display/DenoiseNode.js +198 -0
  126. package/src/nodes/display/DepthOfFieldNode.js +119 -0
  127. package/src/nodes/display/DotScreenNode.js +75 -0
  128. package/src/nodes/display/FXAANode.js +327 -0
  129. package/src/nodes/display/FilmNode.js +52 -0
  130. package/{examples/jsm → src}/nodes/display/FrontFacingNode.js +2 -1
  131. package/src/nodes/display/GTAONode.js +324 -0
  132. package/{examples/jsm → src}/nodes/display/GaussianBlurNode.js +34 -17
  133. package/src/nodes/display/Lut3DNode.js +53 -0
  134. package/{examples/jsm → src}/nodes/display/NormalMapNode.js +1 -1
  135. package/src/nodes/display/PassNode.js +291 -0
  136. package/src/nodes/display/PixelationPassNode.js +201 -0
  137. package/src/nodes/display/RGBShiftNode.js +49 -0
  138. package/src/nodes/display/RenderOutputNode.js +56 -0
  139. package/src/nodes/display/SobelOperatorNode.js +121 -0
  140. package/{examples/jsm → src}/nodes/display/ToneMappingNode.js +44 -5
  141. package/src/nodes/display/TransitionNode.js +76 -0
  142. package/{examples/jsm → src}/nodes/display/ViewportDepthNode.js +39 -16
  143. package/{examples/jsm → src}/nodes/display/ViewportDepthTextureNode.js +2 -1
  144. package/{examples/jsm → src}/nodes/display/ViewportNode.js +3 -2
  145. package/{examples/jsm → src}/nodes/display/ViewportSharedTextureNode.js +2 -1
  146. package/{examples/jsm → src}/nodes/display/ViewportTextureNode.js +5 -2
  147. package/src/nodes/functions/BSDF/LTC.js +131 -0
  148. package/src/nodes/functions/BasicLightingModel.js +78 -0
  149. package/{examples/jsm → src}/nodes/functions/PhongLightingModel.js +5 -3
  150. package/{examples/jsm → src}/nodes/functions/PhysicalLightingModel.js +103 -18
  151. package/src/nodes/functions/ToonLightingModel.js +51 -0
  152. package/{examples/jsm → src}/nodes/geometry/RangeNode.js +19 -6
  153. package/{examples/jsm → src}/nodes/lighting/AONode.js +1 -4
  154. package/{examples/jsm → src}/nodes/lighting/AmbientLightNode.js +1 -1
  155. package/src/nodes/lighting/AnalyticLightNode.js +333 -0
  156. package/src/nodes/lighting/BasicEnvironmentNode.js +26 -0
  157. package/src/nodes/lighting/BasicLightMapNode.js +29 -0
  158. package/{examples/jsm → src}/nodes/lighting/DirectionalLightNode.js +2 -3
  159. package/{examples/jsm → src}/nodes/lighting/EnvironmentNode.js +5 -4
  160. package/{examples/jsm → src}/nodes/lighting/HemisphereLightNode.js +2 -1
  161. package/{examples/jsm → src}/nodes/lighting/IESSpotLightNode.js +1 -1
  162. package/{examples/jsm → src}/nodes/lighting/LightingNode.js +2 -0
  163. package/{examples/jsm → src}/nodes/lighting/LightsNode.js +18 -3
  164. package/{examples/jsm → src}/nodes/lighting/PointLightNode.js +2 -3
  165. package/src/nodes/lighting/RectAreaLightNode.js +97 -0
  166. package/{examples/jsm → src}/nodes/lighting/SpotLightNode.js +2 -3
  167. package/{examples/jsm → src}/nodes/loaders/NodeLoader.js +3 -1
  168. package/{examples/jsm → src}/nodes/loaders/NodeMaterialLoader.js +2 -1
  169. package/{examples/jsm → src}/nodes/loaders/NodeObjectLoader.js +2 -1
  170. package/{examples/jsm → src}/nodes/materials/InstancedPointsNodeMaterial.js +3 -3
  171. package/{examples/jsm → src}/nodes/materials/Line2NodeMaterial.js +4 -4
  172. package/{examples/jsm → src}/nodes/materials/LineBasicNodeMaterial.js +3 -3
  173. package/{examples/jsm → src}/nodes/materials/LineDashedNodeMaterial.js +4 -3
  174. package/{examples/jsm → src}/nodes/materials/Materials.js +3 -0
  175. package/src/nodes/materials/MeshBasicNodeMaterial.js +73 -0
  176. package/{examples/jsm → src}/nodes/materials/MeshLambertNodeMaterial.js +12 -3
  177. package/src/nodes/materials/MeshMatcapNodeMaterial.js +53 -0
  178. package/{examples/jsm → src}/nodes/materials/MeshNormalNodeMaterial.js +5 -3
  179. package/{examples/jsm → src}/nodes/materials/MeshPhongNodeMaterial.js +11 -3
  180. package/{examples/jsm → src}/nodes/materials/MeshPhysicalNodeMaterial.js +26 -8
  181. package/{examples/jsm → src}/nodes/materials/MeshStandardNodeMaterial.js +14 -3
  182. package/src/nodes/materials/MeshToonNodeMaterial.js +34 -0
  183. package/{examples/jsm → src}/nodes/materials/NodeMaterial.js +97 -24
  184. package/{examples/jsm → src}/nodes/materials/PointsNodeMaterial.js +3 -3
  185. package/{examples/jsm → src}/nodes/materials/ShadowNodeMaterial.js +3 -3
  186. package/{examples/jsm → src}/nodes/materials/SpriteNodeMaterial.js +3 -3
  187. package/src/nodes/materials/VolumeNodeMaterial.js +106 -0
  188. package/{examples/jsm → src}/nodes/materialx/lib/mx_hsv.js +9 -17
  189. package/{examples/jsm → src}/nodes/materialx/lib/mx_noise.js +474 -577
  190. package/{examples/jsm → src}/nodes/materialx/lib/mx_transform_color.js +2 -8
  191. package/{examples/jsm → src}/nodes/math/CondNode.js +13 -6
  192. package/{examples/jsm → src}/nodes/math/HashNode.js +2 -2
  193. package/{examples/jsm → src}/nodes/math/MathNode.js +14 -1
  194. package/{examples/jsm → src}/nodes/math/OperatorNode.js +6 -6
  195. package/{examples/jsm → src}/nodes/parsers/GLSLNodeFunction.js +7 -7
  196. package/{examples/jsm → src}/nodes/pmrem/PMREMNode.js +2 -1
  197. package/{examples/jsm → src}/nodes/shadernode/ShaderNode.js +57 -33
  198. package/{examples/jsm → src}/nodes/utils/ArrayElementNode.js +1 -1
  199. package/{examples/jsm → src}/nodes/utils/DiscardNode.js +1 -0
  200. package/{examples/jsm → src}/nodes/utils/FunctionOverloadingNode.js +2 -0
  201. package/{examples/jsm → src}/nodes/utils/LoopNode.js +7 -6
  202. package/{examples/jsm → src}/nodes/utils/MatcapUVNode.js +1 -1
  203. package/{examples/jsm → src}/nodes/utils/MaxMipLevelNode.js +8 -2
  204. package/src/nodes/utils/RTTNode.js +130 -0
  205. package/{examples/jsm → src}/nodes/utils/ReflectorNode.js +9 -1
  206. package/{examples/jsm → src}/nodes/utils/TimerNode.js +1 -1
  207. package/src/objects/BatchedMesh.js +232 -162
  208. package/src/objects/InstancedMesh.js +1 -1
  209. package/src/renderers/WebGLRenderer.js +312 -68
  210. package/{examples/jsm → src}/renderers/common/Attributes.js +4 -1
  211. package/{examples/jsm → src}/renderers/common/Backend.js +30 -27
  212. package/{examples/jsm → src}/renderers/common/Background.js +9 -3
  213. package/src/renderers/common/BindGroup.js +16 -0
  214. package/{examples/jsm → src}/renderers/common/Bindings.js +54 -22
  215. package/src/renderers/common/ChainMap.js +59 -0
  216. package/{examples/jsm → src}/renderers/common/ClippingContext.js +8 -6
  217. package/{examples/jsm → src}/renderers/common/Color4.js +1 -1
  218. package/{examples/jsm → src}/renderers/common/CubeRenderTarget.js +7 -1
  219. package/{examples/jsm → src}/renderers/common/Geometries.js +37 -5
  220. package/{examples/jsm → src}/renderers/common/Info.js +34 -6
  221. package/{examples/jsm → src}/renderers/common/Pipelines.js +2 -2
  222. package/src/renderers/common/PostProcessing.js +87 -0
  223. package/{examples/jsm/objects → src/renderers/common}/QuadMesh.js +6 -3
  224. package/src/renderers/common/RenderBundle.js +18 -0
  225. package/src/renderers/common/RenderBundles.js +38 -0
  226. package/{examples/jsm → src}/renderers/common/RenderContext.js +1 -1
  227. package/{examples/jsm → src}/renderers/common/RenderContexts.js +1 -1
  228. package/{examples/jsm → src}/renderers/common/RenderList.js +9 -0
  229. package/{examples/jsm → src}/renderers/common/RenderObject.js +50 -11
  230. package/{examples/jsm → src}/renderers/common/Renderer.js +220 -40
  231. package/{examples/jsm → src}/renderers/common/SampledTexture.js +2 -2
  232. package/{examples/jsm → src}/renderers/common/StorageBufferAttribute.js +1 -1
  233. package/{examples/jsm → src}/renderers/common/StorageInstancedBufferAttribute.js +1 -1
  234. package/{examples/jsm → src}/renderers/common/StorageTexture.js +2 -1
  235. package/{examples/jsm → src}/renderers/common/Textures.js +6 -2
  236. package/{examples/jsm → src}/renderers/common/Uniform.js +10 -5
  237. package/{examples/jsm → src}/renderers/common/UniformsGroup.js +69 -31
  238. package/{examples/jsm → src}/renderers/common/extras/PMREMGenerator.js +13 -12
  239. package/src/renderers/common/nodes/NodeBuilderState.js +58 -0
  240. package/{examples/jsm → src}/renderers/common/nodes/NodeSampledTexture.js +19 -4
  241. package/{examples/jsm → src}/renderers/common/nodes/NodeSampler.js +8 -1
  242. package/{examples/jsm → src}/renderers/common/nodes/NodeStorageBuffer.js +5 -1
  243. package/{examples/jsm → src}/renderers/common/nodes/NodeUniform.js +3 -3
  244. package/{examples/jsm → src}/renderers/common/nodes/NodeUniformBuffer.js +2 -1
  245. package/{examples/jsm → src}/renderers/common/nodes/NodeUniformsGroup.js +2 -8
  246. package/{examples/jsm → src}/renderers/common/nodes/Nodes.js +37 -16
  247. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +31 -1
  248. package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +1 -1
  249. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -1
  250. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +9 -1
  251. package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +0 -9
  252. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -10
  253. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +3 -3
  254. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +8 -22
  255. package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +1 -1
  256. package/src/renderers/shaders/ShaderChunk/morphinstance_vertex.glsl.js +1 -1
  257. package/src/renderers/shaders/ShaderChunk/morphnormal_vertex.glsl.js +3 -14
  258. package/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js +10 -31
  259. package/src/renderers/shaders/ShaderChunk/morphtarget_vertex.glsl.js +3 -23
  260. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +45 -13
  261. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +7 -4
  262. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +3 -0
  263. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +3 -3
  264. package/src/renderers/shaders/ShaderLib/depth.glsl.js +8 -0
  265. package/src/renderers/shaders/UniformsLib.js +3 -0
  266. package/src/renderers/webgl/WebGLAttributes.js +2 -2
  267. package/src/renderers/webgl/WebGLBackground.js +6 -0
  268. package/src/renderers/webgl/WebGLBufferRenderer.js +6 -19
  269. package/src/renderers/webgl/WebGLExtensions.js +3 -1
  270. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +6 -18
  271. package/src/renderers/webgl/WebGLLights.js +15 -12
  272. package/src/renderers/webgl/WebGLMaterials.js +1 -5
  273. package/src/renderers/webgl/WebGLMorphtargets.js +1 -2
  274. package/src/renderers/webgl/WebGLProgram.js +28 -31
  275. package/src/renderers/webgl/WebGLPrograms.js +15 -15
  276. package/src/renderers/webgl/WebGLRenderStates.js +2 -2
  277. package/src/renderers/webgl/WebGLTextures.js +100 -70
  278. package/src/renderers/webgl/WebGLUniforms.js +12 -2
  279. package/src/renderers/webgl/WebGLUniformsGroups.js +7 -7
  280. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/WebGLBackend.js +156 -54
  281. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/nodes/GLSLNodeBuilder.js +188 -41
  282. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLAttributeUtils.js +2 -2
  283. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLConstants.js +1 -0
  284. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLExtensions.js +2 -0
  285. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLState.js +1 -1
  286. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLTextureUtils.js +126 -7
  287. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLUtils.js +1 -1
  288. package/{examples/jsm → src}/renderers/webgpu/WebGPUBackend.js +212 -78
  289. package/{examples/jsm → src}/renderers/webgpu/WebGPURenderer.js +2 -2
  290. package/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeBuilder.js +245 -49
  291. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +159 -0
  292. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUAttributeUtils.js +2 -1
  293. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUBindingUtils.js +30 -14
  294. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUConstants.js +9 -1
  295. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUPipelineUtils.js +74 -24
  296. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUTextureUtils.js +101 -25
  297. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUUtils.js +24 -3
  298. package/src/renderers/webxr/WebXRDepthSensing.js +9 -3
  299. package/src/renderers/webxr/WebXRManager.js +12 -2
  300. package/src/textures/CompressedArrayTexture.js +14 -0
  301. package/src/textures/DataArrayTexture.js +14 -0
  302. package/src/textures/DepthTexture.js +1 -3
  303. package/src/utils.js +30 -1
  304. package/examples/jsm/nodes/accessors/BitangentNode.js +0 -89
  305. package/examples/jsm/nodes/accessors/CameraNode.js +0 -119
  306. package/examples/jsm/nodes/accessors/InstanceNode.js +0 -94
  307. package/examples/jsm/nodes/accessors/NormalNode.js +0 -106
  308. package/examples/jsm/nodes/accessors/PositionNode.js +0 -104
  309. package/examples/jsm/nodes/accessors/ReflectVectorNode.js +0 -35
  310. package/examples/jsm/nodes/accessors/TangentNode.js +0 -109
  311. package/examples/jsm/nodes/accessors/UVNode.js +0 -47
  312. package/examples/jsm/nodes/core/NodeCache.js +0 -26
  313. package/examples/jsm/nodes/core/VaryingNode.js +0 -65
  314. package/examples/jsm/nodes/display/PassNode.js +0 -199
  315. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +0 -255
  316. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +0 -28
  317. package/examples/jsm/renderers/common/ChainMap.js +0 -89
  318. package/examples/jsm/renderers/common/PostProcessing.js +0 -33
  319. package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +0 -44
  320. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeFunction.js +0 -104
  321. /package/{examples/jsm → src}/nodes/accessors/AccessorsUtils.js +0 -0
  322. /package/{examples/jsm → src}/nodes/accessors/ClippingNode.js +0 -0
  323. /package/{examples/jsm → src}/nodes/accessors/InstancedPointsMaterialNode.js +0 -0
  324. /package/{examples/jsm → src}/nodes/accessors/MaterialReferenceNode.js +0 -0
  325. /package/{examples/jsm → src}/nodes/accessors/ModelViewProjectionNode.js +0 -0
  326. /package/{examples/jsm → src}/nodes/accessors/PointUVNode.js +0 -0
  327. /package/{examples/jsm → src}/nodes/accessors/RendererReferenceNode.js +0 -0
  328. /package/{examples/jsm → src}/nodes/accessors/SceneNode.js +0 -0
  329. /package/{examples/jsm → src}/nodes/accessors/SkinningNode.js +0 -0
  330. /package/{examples/jsm → src}/nodes/accessors/TextureBicubicNode.js +0 -0
  331. /package/{examples/jsm → src}/nodes/accessors/TextureSizeNode.js +0 -0
  332. /package/{examples/jsm → src}/nodes/accessors/UserDataNode.js +0 -0
  333. /package/{examples/jsm → src}/nodes/code/CodeNode.js +0 -0
  334. /package/{examples/jsm → src}/nodes/code/ExpressionNode.js +0 -0
  335. /package/{examples/jsm → src}/nodes/code/FunctionCallNode.js +0 -0
  336. /package/{examples/jsm → src}/nodes/code/FunctionNode.js +0 -0
  337. /package/{examples/jsm → src}/nodes/core/AssignNode.js +0 -0
  338. /package/{examples/jsm → src}/nodes/core/BypassNode.js +0 -0
  339. /package/{examples/jsm → src}/nodes/core/ConstNode.js +0 -0
  340. /package/{examples/jsm → src}/nodes/core/InputNode.js +0 -0
  341. /package/{examples/jsm → src}/nodes/core/NodeAttribute.js +0 -0
  342. /package/{examples/jsm → src}/nodes/core/NodeCode.js +0 -0
  343. /package/{examples/jsm → src}/nodes/core/NodeFunctionInput.js +0 -0
  344. /package/{examples/jsm → src}/nodes/core/NodeParser.js +0 -0
  345. /package/{examples/jsm → src}/nodes/core/NodeVar.js +0 -0
  346. /package/{examples/jsm → src}/nodes/core/NodeVarying.js +0 -0
  347. /package/{examples/jsm → src}/nodes/core/ParameterNode.js +0 -0
  348. /package/{examples/jsm → src}/nodes/core/StackNode.js +0 -0
  349. /package/{examples/jsm → src}/nodes/core/StructTypeNode.js +0 -0
  350. /package/{examples/jsm → src}/nodes/core/UniformGroup.js +0 -0
  351. /package/{examples/jsm → src}/nodes/core/constants.js +0 -0
  352. /package/{examples/jsm → src}/nodes/display/BlendModeNode.js +0 -0
  353. /package/{examples/jsm → src}/nodes/display/BumpMapNode.js +0 -0
  354. /package/{examples/jsm → src}/nodes/display/PosterizeNode.js +0 -0
  355. /package/{examples/jsm → src}/nodes/fog/FogExp2Node.js +0 -0
  356. /package/{examples/jsm → src}/nodes/fog/FogNode.js +0 -0
  357. /package/{examples/jsm → src}/nodes/fog/FogRangeNode.js +0 -0
  358. /package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_GGX.js +0 -0
  359. /package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Lambert.js +0 -0
  360. /package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Sheen.js +0 -0
  361. /package/{examples/jsm → src}/nodes/functions/BSDF/DFGApprox.js +0 -0
  362. /package/{examples/jsm → src}/nodes/functions/BSDF/D_GGX.js +0 -0
  363. /package/{examples/jsm → src}/nodes/functions/BSDF/D_GGX_Anisotropic.js +0 -0
  364. /package/{examples/jsm → src}/nodes/functions/BSDF/EnvironmentBRDF.js +0 -0
  365. /package/{examples/jsm → src}/nodes/functions/BSDF/F_Schlick.js +0 -0
  366. /package/{examples/jsm → src}/nodes/functions/BSDF/Schlick_to_F0.js +0 -0
  367. /package/{examples/jsm → src}/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +0 -0
  368. /package/{examples/jsm → src}/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +0 -0
  369. /package/{examples/jsm → src}/nodes/functions/ShadowMaskModel.js +0 -0
  370. /package/{examples/jsm → src}/nodes/functions/material/getGeometryRoughness.js +0 -0
  371. /package/{examples/jsm → src}/nodes/functions/material/getRoughness.js +0 -0
  372. /package/{examples/jsm → src}/nodes/gpgpu/ComputeNode.js +0 -0
  373. /package/{examples/jsm → src}/nodes/lighting/IrradianceNode.js +0 -0
  374. /package/{examples/jsm → src}/nodes/lighting/LightNode.js +0 -0
  375. /package/{examples/jsm → src}/nodes/lighting/LightUtils.js +0 -0
  376. /package/{examples/jsm → src}/nodes/lighting/LightingContextNode.js +0 -0
  377. /package/{examples/jsm → src}/nodes/materials/MeshSSSNodeMaterial.js +0 -0
  378. /package/{examples/jsm → src}/nodes/materialx/DISCLAIMER.md +0 -0
  379. /package/{examples/jsm → src}/nodes/materialx/MaterialXNodes.js +0 -0
  380. /package/{examples/jsm → src}/nodes/math/MathUtils.js +0 -0
  381. /package/{examples/jsm → src}/nodes/math/TriNoise3D.js +0 -0
  382. /package/{examples/jsm → src}/nodes/parsers/GLSLNodeParser.js +0 -0
  383. /package/{examples/jsm → src}/nodes/pmrem/PMREMUtils.js +0 -0
  384. /package/{examples/jsm → src}/nodes/procedural/CheckerNode.js +0 -0
  385. /package/{examples/jsm → src}/nodes/utils/ConvertNode.js +0 -0
  386. /package/{examples/jsm → src}/nodes/utils/EquirectUVNode.js +0 -0
  387. /package/{examples/jsm → src}/nodes/utils/JoinNode.js +0 -0
  388. /package/{examples/jsm → src}/nodes/utils/OscNode.js +0 -0
  389. /package/{examples/jsm → src}/nodes/utils/PackingNode.js +0 -0
  390. /package/{examples/jsm → src}/nodes/utils/RemapNode.js +0 -0
  391. /package/{examples/jsm → src}/nodes/utils/RotateNode.js +0 -0
  392. /package/{examples/jsm → src}/nodes/utils/RotateUVNode.js +0 -0
  393. /package/{examples/jsm → src}/nodes/utils/SetNode.js +0 -0
  394. /package/{examples/jsm → src}/nodes/utils/SplitNode.js +0 -0
  395. /package/{examples/jsm → src}/nodes/utils/SpriteSheetUVNode.js +0 -0
  396. /package/{examples/jsm → src}/nodes/utils/StorageArrayElementNode.js +0 -0
  397. /package/{examples/jsm → src}/nodes/utils/TriplanarTexturesNode.js +0 -0
  398. /package/{examples/jsm → src}/renderers/common/Animation.js +0 -0
  399. /package/{examples/jsm → src}/renderers/common/Binding.js +0 -0
  400. /package/{examples/jsm → src}/renderers/common/Buffer.js +0 -0
  401. /package/{examples/jsm → src}/renderers/common/BufferUtils.js +0 -0
  402. /package/{examples/jsm → src}/renderers/common/ComputePipeline.js +0 -0
  403. /package/{examples/jsm → src}/renderers/common/Constants.js +0 -0
  404. /package/{examples/jsm → src}/renderers/common/DataMap.js +0 -0
  405. /package/{examples/jsm → src}/renderers/common/Pipeline.js +0 -0
  406. /package/{examples/jsm → src}/renderers/common/ProgrammableStage.js +0 -0
  407. /package/{examples/jsm → src}/renderers/common/RenderLists.js +0 -0
  408. /package/{examples/jsm → src}/renderers/common/RenderObjects.js +0 -0
  409. /package/{examples/jsm → src}/renderers/common/RenderPipeline.js +0 -0
  410. /package/{examples/jsm → src}/renderers/common/Sampler.js +0 -0
  411. /package/{examples/jsm → src}/renderers/common/StorageBuffer.js +0 -0
  412. /package/{examples/jsm → src}/renderers/common/UniformBuffer.js +0 -0
  413. /package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/WebGLBufferRenderer.js +0 -0
  414. /package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLCapabilities.js +0 -0
  415. /package/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeParser.js +0 -0
  416. /package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUTexturePassUtils.js +0 -0
@@ -2,8 +2,6 @@
2
2
  import 'https://greggman.github.io/webgpu-avoid-redundant-state-setting/webgpu-check-redundant-state-setting.js';
3
3
  //*/
4
4
 
5
- import { WebGPUCoordinateSystem } from 'three';
6
-
7
5
  import { GPUFeatureName, GPUTextureFormat, GPULoadOp, GPUStoreOp, GPUIndexFormat, GPUTextureViewDimension } from './utils/WebGPUConstants.js';
8
6
 
9
7
  import WGSLNodeBuilder from './nodes/WGSLNodeBuilder.js';
@@ -15,6 +13,8 @@ import WebGPUBindingUtils from './utils/WebGPUBindingUtils.js';
15
13
  import WebGPUPipelineUtils from './utils/WebGPUPipelineUtils.js';
16
14
  import WebGPUTextureUtils from './utils/WebGPUTextureUtils.js';
17
15
 
16
+ import { WebGPUCoordinateSystem } from '../../constants.js';
17
+
18
18
  //
19
19
 
20
20
  class WebGPUBackend extends Backend {
@@ -28,18 +28,6 @@ class WebGPUBackend extends Backend {
28
28
  // some parameters require default values other than "undefined"
29
29
  this.parameters.alpha = ( parameters.alpha === undefined ) ? true : parameters.alpha;
30
30
 
31
- this.parameters.antialias = ( parameters.antialias === true );
32
-
33
- if ( this.parameters.antialias === true ) {
34
-
35
- this.parameters.sampleCount = ( parameters.sampleCount === undefined ) ? 4 : parameters.sampleCount;
36
-
37
- } else {
38
-
39
- this.parameters.sampleCount = 1;
40
-
41
- }
42
-
43
31
  this.parameters.requiredLimits = ( parameters.requiredLimits === undefined ) ? {} : parameters.requiredLimits;
44
32
 
45
33
  this.trackTimestamp = ( parameters.trackTimestamp === true );
@@ -153,8 +141,6 @@ class WebGPUBackend extends Backend {
153
141
 
154
142
  let descriptor = this.defaultRenderPassdescriptor;
155
143
 
156
- const antialias = this.parameters.antialias;
157
-
158
144
  if ( descriptor === null ) {
159
145
 
160
146
  const renderer = this.renderer;
@@ -170,7 +156,7 @@ class WebGPUBackend extends Backend {
170
156
 
171
157
  const colorAttachment = descriptor.colorAttachments[ 0 ];
172
158
 
173
- if ( antialias === true ) {
159
+ if ( this.renderer.samples > 0 ) {
174
160
 
175
161
  colorAttachment.view = this.colorBuffer.createView();
176
162
 
@@ -186,7 +172,7 @@ class WebGPUBackend extends Backend {
186
172
 
187
173
  const colorAttachment = descriptor.colorAttachments[ 0 ];
188
174
 
189
- if ( antialias === true ) {
175
+ if ( this.renderer.samples > 0 ) {
190
176
 
191
177
  colorAttachment.resolveTarget = this.context.getCurrentTexture().createView();
192
178
 
@@ -218,11 +204,24 @@ class WebGPUBackend extends Backend {
218
204
  if ( renderTargetData.width !== renderTarget.width ||
219
205
  renderTargetData.height !== renderTarget.height ||
220
206
  renderTargetData.activeMipmapLevel !== renderTarget.activeMipmapLevel ||
221
- renderTargetData.samples !== renderTarget.samples
207
+ renderTargetData.samples !== renderTarget.samples ||
208
+ descriptors.length !== renderTarget.textures.length
222
209
  ) {
223
210
 
224
211
  descriptors.length = 0;
225
212
 
213
+ // dispose
214
+
215
+ const onDispose = () => {
216
+
217
+ renderTarget.removeEventListener( 'dispose', onDispose );
218
+
219
+ this.delete( renderTarget );
220
+
221
+ };
222
+
223
+ renderTarget.addEventListener( 'dispose', onDispose );
224
+
226
225
  }
227
226
 
228
227
  let descriptor = descriptors[ renderContext.activeCubeFace ];
@@ -269,7 +268,7 @@ class WebGPUBackend extends Backend {
269
268
  const depthTextureData = this.get( renderContext.depthTexture );
270
269
 
271
270
  const depthStencilAttachment = {
272
- view: depthTextureData.texture.createView(),
271
+ view: depthTextureData.texture.createView()
273
272
  };
274
273
 
275
274
  descriptor = {
@@ -453,6 +452,13 @@ class WebGPUBackend extends Backend {
453
452
  const renderContextData = this.get( renderContext );
454
453
  const occlusionQueryCount = renderContext.occlusionQueryCount;
455
454
 
455
+ if ( renderContextData.renderBundles !== undefined && renderContextData.renderBundles.length > 0 ) {
456
+
457
+ renderContextData.registerBundlesPhase = false;
458
+ renderContextData.currentPass.executeBundles( renderContextData.renderBundles );
459
+
460
+ }
461
+
456
462
  if ( occlusionQueryCount > renderContextData.occlusionQueryIndex ) {
457
463
 
458
464
  renderContextData.currentPass.endOcclusionQuery();
@@ -560,7 +566,7 @@ class WebGPUBackend extends Backend {
560
566
 
561
567
  for ( let i = 0; i < currentOcclusionQueryObjects.length; i ++ ) {
562
568
 
563
- if ( results[ i ] !== 0n ) {
569
+ if ( results[ i ] !== BigInt( 0 ) ) {
564
570
 
565
571
  occluded.add( currentOcclusionQueryObjects[ i ] );
566
572
 
@@ -759,12 +765,41 @@ class WebGPUBackend extends Backend {
759
765
  const pipelineGPU = this.get( pipeline ).pipeline;
760
766
  passEncoderGPU.setPipeline( pipelineGPU );
761
767
 
762
- // bind group
768
+ // bind groups
769
+
770
+ for ( let i = 0, l = bindings.length; i < l; i ++ ) {
771
+
772
+ const bindGroup = bindings[ i ];
773
+ const bindingsData = this.get( bindGroup );
774
+
775
+ passEncoderGPU.setBindGroup( i, bindingsData.group );
776
+
777
+ }
778
+
779
+ const maxComputeWorkgroupsPerDimension = this.device.limits.maxComputeWorkgroupsPerDimension;
763
780
 
764
- const bindGroupGPU = this.get( bindings ).group;
765
- passEncoderGPU.setBindGroup( 0, bindGroupGPU );
781
+ const computeNodeData = this.get( computeNode );
766
782
 
767
- passEncoderGPU.dispatchWorkgroups( computeNode.dispatchCount );
783
+ if ( computeNodeData.dispatchSize === undefined ) computeNodeData.dispatchSize = { x: 0, y: 1, z: 1 };
784
+
785
+ const { dispatchSize } = computeNodeData;
786
+
787
+ if ( computeNode.dispatchCount > maxComputeWorkgroupsPerDimension ) {
788
+
789
+ dispatchSize.x = Math.min( computeNode.dispatchCount, maxComputeWorkgroupsPerDimension );
790
+ dispatchSize.y = Math.ceil( computeNode.dispatchCount / maxComputeWorkgroupsPerDimension );
791
+
792
+ } else {
793
+
794
+ dispatchSize.x = computeNode.dispatchCount;
795
+
796
+ }
797
+
798
+ passEncoderGPU.dispatchWorkgroups(
799
+ dispatchSize.x,
800
+ dispatchSize.y,
801
+ dispatchSize.z
802
+ );
768
803
 
769
804
  }
770
805
 
@@ -786,14 +821,27 @@ class WebGPUBackend extends Backend {
786
821
 
787
822
  const { object, geometry, context, pipeline } = renderObject;
788
823
 
789
- const bindingsData = this.get( renderObject.getBindings() );
824
+ const bindings = renderObject.getBindings();
790
825
  const contextData = this.get( context );
791
826
  const pipelineGPU = this.get( pipeline ).pipeline;
792
827
  const currentSets = contextData.currentSets;
793
828
 
794
- // pipeline
829
+ const renderObjectData = this.get( renderObject );
830
+
831
+ const { bundleEncoder, renderBundle, lastPipelineGPU } = renderObjectData;
832
+
833
+ const renderContextData = this.get( context );
834
+
835
+ if ( renderContextData.registerBundlesPhase === true && bundleEncoder !== undefined && lastPipelineGPU === pipelineGPU ) {
795
836
 
796
- const passEncoderGPU = contextData.currentPass;
837
+ renderContextData.renderBundles.push( renderBundle );
838
+ return;
839
+
840
+ }
841
+
842
+ const passEncoderGPU = this.renderer._currentRenderBundle ? this.createBundleEncoder( context, renderObject ) : contextData.currentPass;
843
+
844
+ // pipeline
797
845
 
798
846
  if ( currentSets.pipeline !== pipelineGPU ) {
799
847
 
@@ -803,10 +851,16 @@ class WebGPUBackend extends Backend {
803
851
 
804
852
  }
805
853
 
806
- // bind group
854
+ // bind groups
855
+
856
+ for ( let i = 0, l = bindings.length; i < l; i ++ ) {
807
857
 
808
- const bindGroupGPU = bindingsData.group;
809
- passEncoderGPU.setBindGroup( 0, bindGroupGPU );
858
+ const bindGroup = bindings[ i ];
859
+ const bindingsData = this.get( bindGroup );
860
+
861
+ passEncoderGPU.setBindGroup( i, bindingsData.group );
862
+
863
+ }
810
864
 
811
865
  // attributes
812
866
 
@@ -886,7 +940,25 @@ class WebGPUBackend extends Backend {
886
940
  const instanceCount = this.getInstanceCount( renderObject );
887
941
  if ( instanceCount === 0 ) return;
888
942
 
889
- if ( hasIndex === true ) {
943
+ if ( object.isBatchedMesh === true ) {
944
+
945
+ const starts = object._multiDrawStarts;
946
+ const counts = object._multiDrawCounts;
947
+ const drawCount = object._multiDrawCount;
948
+ const drawInstances = object._multiDrawInstances;
949
+
950
+ const bytesPerElement = index.bytesPerElement || 1;
951
+
952
+ for ( let i = 0; i < drawCount; i ++ ) {
953
+
954
+ const count = drawInstances ? drawInstances[ i ] : 1;
955
+ const firstInstance = count > 1 ? 0 : i;
956
+
957
+ passEncoderGPU.drawIndexed( counts[ i ] / bytesPerElement, count, starts[ i ] / 4, 0, firstInstance );
958
+
959
+ }
960
+
961
+ } else if ( hasIndex === true ) {
890
962
 
891
963
  const indexCount = ( drawRange.count !== Infinity ) ? drawRange.count : index.count;
892
964
 
@@ -905,6 +977,15 @@ class WebGPUBackend extends Backend {
905
977
 
906
978
  }
907
979
 
980
+ if ( this.renderer._currentRenderBundle ) {
981
+
982
+ const renderBundle = passEncoderGPU.finish();
983
+ renderObjectData.lastPipelineGPU = pipelineGPU;
984
+ renderObjectData.renderBundle = renderBundle;
985
+ renderObjectData.bundleEncoder = passEncoderGPU;
986
+
987
+ }
988
+
908
989
  }
909
990
 
910
991
  // cache key
@@ -917,7 +998,7 @@ class WebGPUBackend extends Backend {
917
998
 
918
999
  const utils = this.utils;
919
1000
 
920
- const sampleCount = utils.getSampleCount( renderObject.context );
1001
+ const sampleCount = utils.getSampleCountRenderContext( renderObject.context );
921
1002
  const colorSpace = utils.getCurrentColorSpace( renderObject.context );
922
1003
  const colorFormat = utils.getCurrentColorFormat( renderObject.context );
923
1004
  const depthStencilFormat = utils.getCurrentDepthStencilFormat( renderObject.context );
@@ -982,7 +1063,7 @@ class WebGPUBackend extends Backend {
982
1063
  material.stencilFail, material.stencilZFail, material.stencilZPass,
983
1064
  material.stencilFuncMask, material.stencilWriteMask,
984
1065
  material.side,
985
- utils.getSampleCount( renderContext ),
1066
+ utils.getSampleCountRenderContext( renderContext ),
986
1067
  utils.getCurrentColorSpace( renderContext ), utils.getCurrentColorFormat( renderContext ), utils.getCurrentDepthStencilFormat( renderContext ),
987
1068
  utils.getPrimitiveTopology( object, material ),
988
1069
  renderObject.clippingContextVersion
@@ -1078,52 +1159,69 @@ class WebGPUBackend extends Backend {
1078
1159
  const renderContextData = this.get( renderContext );
1079
1160
 
1080
1161
  const size = 2 * BigInt64Array.BYTES_PER_ELEMENT;
1081
- const resolveBuffer = this.device.createBuffer( {
1082
- size,
1083
- usage: GPUBufferUsage.QUERY_RESOLVE | GPUBufferUsage.COPY_SRC,
1084
- } );
1085
1162
 
1086
- const resultBuffer = this.device.createBuffer( {
1087
- size,
1088
- usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,
1089
- } );
1163
+ if ( renderContextData.currentTimestampQueryBuffers === undefined ) {
1164
+
1165
+ renderContextData.currentTimestampQueryBuffers = {
1166
+ resolveBuffer: this.device.createBuffer( {
1167
+ label: 'timestamp resolve buffer',
1168
+ size: size,
1169
+ usage: GPUBufferUsage.QUERY_RESOLVE | GPUBufferUsage.COPY_SRC,
1170
+ } ),
1171
+ resultBuffer: this.device.createBuffer( {
1172
+ label: 'timestamp result buffer',
1173
+ size: size,
1174
+ usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,
1175
+ } ),
1176
+ isMappingPending: false,
1177
+ };
1178
+
1179
+ }
1180
+
1181
+ const { resolveBuffer, resultBuffer, isMappingPending } = renderContextData.currentTimestampQueryBuffers;
1182
+
1183
+ if ( isMappingPending === true ) return;
1090
1184
 
1091
1185
  encoder.resolveQuerySet( renderContextData.timeStampQuerySet, 0, 2, resolveBuffer, 0 );
1092
1186
  encoder.copyBufferToBuffer( resolveBuffer, 0, resultBuffer, 0, size );
1093
1187
 
1094
- renderContextData.currentTimestampQueryBuffer = resultBuffer;
1095
-
1096
1188
  }
1097
1189
 
1098
- async resolveTimestampAsync(renderContext, type = 'render') {
1099
- if (!this.hasFeature(GPUFeatureName.TimestampQuery) || !this.trackTimestamp) return;
1100
-
1101
- const renderContextData = this.get(renderContext);
1102
- const { currentTimestampQueryBuffer } = renderContextData;
1103
-
1104
- if (currentTimestampQueryBuffer === undefined) return;
1105
-
1106
- const buffer = currentTimestampQueryBuffer;
1107
-
1108
- try {
1109
- await buffer.mapAsync(GPUMapMode.READ);
1110
- const times = new BigUint64Array(buffer.getMappedRange());
1111
- const duration = Number(times[1] - times[0]) / 1000000;
1112
- this.renderer.info.updateTimestamp(type, duration);
1113
- } catch (error) {
1114
- console.error(`Error mapping buffer: ${error}`);
1115
- // Optionally handle the error, e.g., re-queue the buffer or skip it
1116
- } finally {
1117
- buffer.unmap();
1118
- }
1190
+ async resolveTimestampAsync( renderContext, type = 'render' ) {
1191
+
1192
+ if ( ! this.hasFeature( GPUFeatureName.TimestampQuery ) || ! this.trackTimestamp ) return;
1193
+
1194
+ const renderContextData = this.get( renderContext );
1195
+
1196
+ if ( renderContextData.currentTimestampQueryBuffers === undefined ) return;
1197
+
1198
+ const { resultBuffer, isMappingPending } = renderContextData.currentTimestampQueryBuffers;
1199
+
1200
+ if ( isMappingPending === true ) return;
1201
+
1202
+ renderContextData.currentTimestampQueryBuffers.isMappingPending = true;
1203
+
1204
+ resultBuffer.mapAsync( GPUMapMode.READ ).then( () => {
1205
+
1206
+ const times = new BigUint64Array( resultBuffer.getMappedRange() );
1207
+ const duration = Number( times[ 1 ] - times[ 0 ] ) / 1000000;
1208
+
1209
+
1210
+ this.renderer.info.updateTimestamp( type, duration );
1211
+
1212
+ resultBuffer.unmap();
1213
+
1214
+ renderContextData.currentTimestampQueryBuffers.isMappingPending = false;
1215
+
1216
+ } );
1217
+
1119
1218
  }
1120
-
1121
1219
 
1122
1220
  // node builder
1123
1221
 
1124
- createNodeBuilder( object, renderer, scene = null ) {
1222
+ createNodeBuilder( object, renderer ) {
1125
1223
 
1126
- return new WGSLNodeBuilder( object, renderer, scene );
1224
+ return new WGSLNodeBuilder( object, renderer );
1127
1225
 
1128
1226
  }
1129
1227
 
@@ -1160,17 +1258,23 @@ class WebGPUBackend extends Backend {
1160
1258
 
1161
1259
  }
1162
1260
 
1261
+ createBundleEncoder( renderContext, renderObject ) {
1262
+
1263
+ return this.pipelineUtils.createBundleEncoder( renderContext, renderObject );
1264
+
1265
+ }
1266
+
1163
1267
  // bindings
1164
1268
 
1165
- createBindings( bindings ) {
1269
+ createBindings( bindGroup ) {
1166
1270
 
1167
- this.bindingUtils.createBindings( bindings );
1271
+ this.bindingUtils.createBindings( bindGroup );
1168
1272
 
1169
1273
  }
1170
1274
 
1171
- updateBindings( bindings ) {
1275
+ updateBindings( bindGroup ) {
1172
1276
 
1173
- this.bindingUtils.createBindings( bindings );
1277
+ this.bindingUtils.createBindings( bindGroup );
1174
1278
 
1175
1279
  }
1176
1280
 
@@ -1235,7 +1339,32 @@ class WebGPUBackend extends Backend {
1235
1339
 
1236
1340
  }
1237
1341
 
1238
- copyTextureToTexture( position, srcTexture, dstTexture, level = 0 ) {
1342
+ copyTextureToTexture( srcTexture, dstTexture, srcRegion = null, dstPosition = null, level = 0 ) {
1343
+
1344
+ let dstX = 0;
1345
+ let dstY = 0;
1346
+
1347
+ let srcX = 0;
1348
+ let srcY = 0;
1349
+
1350
+ let srcWidth = srcTexture.image.width;
1351
+ let srcHeight = srcTexture.image.height;
1352
+
1353
+ if ( srcRegion !== null ) {
1354
+
1355
+ srcX = srcRegion.x;
1356
+ srcY = srcRegion.y;
1357
+ srcWidth = srcRegion.width;
1358
+ srcHeight = srcRegion.height;
1359
+
1360
+ }
1361
+
1362
+ if ( dstPosition !== null ) {
1363
+
1364
+ dstX = dstPosition.x;
1365
+ dstY = dstPosition.y;
1366
+
1367
+ }
1239
1368
 
1240
1369
  const encoder = this.device.createCommandEncoder( { label: 'copyTextureToTexture_' + srcTexture.id + '_' + dstTexture.id } );
1241
1370
 
@@ -1246,16 +1375,16 @@ class WebGPUBackend extends Backend {
1246
1375
  {
1247
1376
  texture: sourceGPU,
1248
1377
  mipLevel: level,
1249
- origin: { x: 0, y: 0, z: 0 }
1378
+ origin: { x: srcX, y: srcY, z: 0 }
1250
1379
  },
1251
1380
  {
1252
1381
  texture: destinationGPU,
1253
1382
  mipLevel: level,
1254
- origin: { x: position.x, y: position.y, z: position.z }
1383
+ origin: { x: dstX, y: dstY, z: 0 }
1255
1384
  },
1256
1385
  [
1257
- srcTexture.image.width,
1258
- srcTexture.image.height
1386
+ srcWidth,
1387
+ srcHeight
1259
1388
  ]
1260
1389
  );
1261
1390
 
@@ -1325,7 +1454,12 @@ class WebGPUBackend extends Backend {
1325
1454
 
1326
1455
  if ( texture.generateMipmaps ) this.textureUtils.generateMipmaps( texture );
1327
1456
 
1328
- descriptor.colorAttachments[ 0 ].loadOp = GPULoadOp.Load;
1457
+ for ( let i = 0; i < descriptor.colorAttachments.length; i ++ ) {
1458
+
1459
+ descriptor.colorAttachments[ i ].loadOp = GPULoadOp.Load;
1460
+
1461
+ }
1462
+
1329
1463
  if ( renderContext.depth ) descriptor.depthStencilAttachment.depthLoadOp = GPULoadOp.Load;
1330
1464
  if ( renderContext.stencil ) descriptor.depthStencilAttachment.stencilLoadOp = GPULoadOp.Load;
1331
1465
 
@@ -1,7 +1,7 @@
1
- import WebGPU from '../../capabilities/WebGPU.js';
1
+ import WebGPU from '../../../examples/jsm/capabilities/WebGPU.js';
2
2
 
3
3
  import Renderer from '../common/Renderer.js';
4
- import WebGLBackend from '../webgl/WebGLBackend.js';
4
+ import WebGLBackend from '../webgl-fallback/WebGLBackend.js';
5
5
  import WebGPUBackend from './WebGPUBackend.js';
6
6
  /*
7
7
  const debugHandler = {