super-three 0.133.4 → 0.136.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (409) hide show
  1. package/LICENSE +1 -1
  2. package/build/three.js +2285 -1983
  3. package/build/three.min.js +1 -1
  4. package/build/three.module.js +5983 -5358
  5. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff +0 -0
  6. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff2 +0 -0
  7. package/examples/fonts/open-sans/open-sans.css +9 -0
  8. package/examples/fonts/tabler-icons/fonts/tabler-icons.eot +0 -0
  9. package/examples/fonts/tabler-icons/fonts/tabler-icons.svg +3966 -0
  10. package/examples/fonts/tabler-icons/fonts/tabler-icons.ttf +0 -0
  11. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff +0 -0
  12. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff2 +0 -0
  13. package/examples/fonts/tabler-icons/tabler-icons.min.css +4 -0
  14. package/examples/js/animation/CCDIKSolver.js +0 -1
  15. package/examples/js/animation/MMDPhysics.js +2 -4
  16. package/examples/js/cameras/CinematicCamera.js +2 -7
  17. package/examples/js/controls/ArcballControls.js +99 -72
  18. package/examples/js/controls/DragControls.js +7 -0
  19. package/examples/js/controls/OrbitControls.js +5 -36
  20. package/examples/js/controls/TrackballControls.js +3 -2
  21. package/examples/js/controls/TransformControls.js +24 -1
  22. package/examples/js/csm/CSM.js +2 -2
  23. package/examples/js/csm/CSMFrustum.js +133 -0
  24. package/examples/js/curves/CurveExtras.js +0 -2
  25. package/examples/js/effects/AsciiEffect.js +2 -9
  26. package/examples/js/exporters/GLTFExporter.js +148 -64
  27. package/examples/js/exporters/MMDExporter.js +1 -1
  28. package/examples/js/exporters/USDZExporter.js +45 -26
  29. package/examples/js/geometries/ConvexGeometry.js +1 -1
  30. package/examples/js/geometries/TeapotGeometry.js +0 -1
  31. package/examples/js/interactive/SelectionBox.js +2 -0
  32. package/examples/js/interactive/SelectionHelper.js +22 -7
  33. package/examples/js/lights/RectAreaLightUniformsLib.js +4 -0
  34. package/examples/js/lines/LineMaterial.js +58 -20
  35. package/examples/js/lines/LineSegments2.js +29 -24
  36. package/examples/js/loaders/3DMLoader.js +24 -11
  37. package/examples/js/loaders/3MFLoader.js +2 -2
  38. package/examples/js/loaders/AMFLoader.js +0 -2
  39. package/examples/js/loaders/BasisTextureLoader.js +1 -0
  40. package/examples/js/loaders/ColladaLoader.js +61 -4
  41. package/examples/js/loaders/EXRLoader.js +201 -272
  42. package/examples/js/loaders/FBXLoader.js +4 -5
  43. package/examples/js/loaders/GLTFLoader.js +98 -35
  44. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -10
  45. package/examples/js/loaders/KTX2Loader.js +23 -2
  46. package/examples/js/loaders/KTXLoader.js +1 -1
  47. package/examples/js/loaders/LDrawLoader.js +1169 -901
  48. package/examples/js/loaders/LUT3dlLoader.js +19 -10
  49. package/examples/js/loaders/LUTCubeLoader.js +5 -4
  50. package/examples/js/loaders/LWOLoader.js +8 -6
  51. package/examples/js/loaders/LogLuvLoader.js +766 -0
  52. package/examples/js/loaders/MMDLoader.js +0 -1
  53. package/examples/js/loaders/NRRDLoader.js +9 -2
  54. package/examples/js/loaders/OBJLoader.js +0 -2
  55. package/examples/js/loaders/PLYLoader.js +33 -8
  56. package/examples/js/loaders/RGBELoader.js +8 -22
  57. package/examples/js/loaders/RGBMLoader.js +56 -6
  58. package/examples/js/loaders/SVGLoader.js +12 -6
  59. package/examples/js/loaders/TDSLoader.js +237 -271
  60. package/examples/js/loaders/VOXLoader.js +1 -0
  61. package/examples/js/loaders/VRMLLoader.js +11 -22
  62. package/examples/js/loaders/lwo/LWO2Parser.js +1 -0
  63. package/examples/js/loaders/lwo/LWO3Parser.js +4 -2
  64. package/examples/js/math/ConvexHull.js +7 -13
  65. package/examples/js/math/ImprovedNoise.js +1 -1
  66. package/examples/js/misc/GPUComputationRenderer.js +3 -1
  67. package/examples/js/misc/Volume.js +2 -2
  68. package/examples/js/modifiers/CurveModifier.js +8 -7
  69. package/examples/js/modifiers/EdgeSplitModifier.js +1 -1
  70. package/examples/js/modifiers/SimplifyModifier.js +1 -1
  71. package/examples/js/objects/Lensflare.js +2 -10
  72. package/examples/js/objects/MarchingCubes.js +42 -128
  73. package/examples/js/objects/Reflector.js +8 -13
  74. package/examples/js/objects/ReflectorForSSRPass.js +0 -10
  75. package/examples/js/objects/Refractor.js +8 -13
  76. package/examples/js/objects/Sky.js +1 -1
  77. package/examples/js/objects/Water.js +3 -15
  78. package/examples/js/objects/Water2.js +4 -7
  79. package/examples/js/postprocessing/GlitchPass.js +6 -5
  80. package/examples/js/postprocessing/SMAAPass.js +2 -9
  81. package/examples/js/postprocessing/SSAOPass.js +10 -21
  82. package/examples/js/postprocessing/SavePass.js +1 -5
  83. package/examples/js/renderers/CSS2DRenderer.js +4 -4
  84. package/examples/js/renderers/CSS3DRenderer.js +4 -4
  85. package/examples/js/shaders/ConvolutionShader.js +0 -1
  86. package/examples/js/shaders/DigitalGlitch.js +3 -3
  87. package/examples/js/shaders/FXAAShader.js +1 -1
  88. package/examples/js/shaders/FilmShader.js +1 -1
  89. package/examples/js/shaders/GammaCorrectionShader.js +1 -1
  90. package/examples/js/shaders/HorizontalBlurShader.js +1 -2
  91. package/examples/js/shaders/MMDToonShader.js +0 -1
  92. package/examples/js/shaders/SSAOShader.js +1 -1
  93. package/examples/js/shaders/SSRShader.js +1 -1
  94. package/examples/js/shaders/SSRrShader.js +1 -1
  95. package/examples/js/shaders/VerticalBlurShader.js +1 -2
  96. package/examples/js/utils/GeometryUtils.js +1 -1
  97. package/examples/jsm/animation/CCDIKSolver.js +0 -1
  98. package/examples/jsm/animation/MMDPhysics.js +1 -3
  99. package/examples/jsm/cameras/CinematicCamera.js +2 -5
  100. package/examples/jsm/{WebGL.js → capabilities/WebGL.js} +2 -2
  101. package/examples/jsm/{renderers/webgpu → capabilities}/WebGPU.js +1 -1
  102. package/examples/jsm/controls/ArcballControls.js +80 -77
  103. package/examples/jsm/controls/DragControls.js +7 -0
  104. package/examples/jsm/controls/OrbitControls.js +9 -51
  105. package/examples/jsm/controls/TrackballControls.js +1 -1
  106. package/examples/jsm/controls/TransformControls.js +24 -1
  107. package/examples/jsm/csm/CSM.js +3 -3
  108. package/examples/jsm/csm/{Frustum.js → CSMFrustum.js} +3 -3
  109. package/examples/jsm/curves/CurveExtras.js +0 -2
  110. package/examples/jsm/effects/AsciiEffect.js +2 -9
  111. package/examples/jsm/exporters/GLTFExporter.js +169 -99
  112. package/examples/jsm/exporters/MMDExporter.js +1 -1
  113. package/examples/jsm/exporters/USDZExporter.js +47 -26
  114. package/examples/jsm/geometries/ConvexGeometry.js +1 -1
  115. package/examples/jsm/geometries/TeapotGeometry.js +0 -1
  116. package/examples/jsm/interactive/SelectionBox.js +1 -0
  117. package/examples/jsm/interactive/SelectionHelper.js +19 -7
  118. package/examples/jsm/libs/flow.module.js +3338 -0
  119. package/examples/jsm/libs/lil-gui.module.min.js +8 -0
  120. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  121. package/examples/jsm/lights/RectAreaLightUniformsLib.js +7 -0
  122. package/examples/jsm/lines/LineMaterial.js +59 -23
  123. package/examples/jsm/lines/LineSegments2.js +22 -18
  124. package/examples/jsm/loaders/3DMLoader.js +18 -12
  125. package/examples/jsm/loaders/3MFLoader.js +2 -2
  126. package/examples/jsm/loaders/AMFLoader.js +0 -2
  127. package/examples/jsm/loaders/BasisTextureLoader.js +7 -0
  128. package/examples/jsm/loaders/ColladaLoader.js +61 -4
  129. package/examples/jsm/loaders/EXRLoader.js +200 -306
  130. package/examples/jsm/loaders/FBXLoader.js +4 -5
  131. package/examples/jsm/loaders/GLTFLoader.js +102 -40
  132. package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -17
  133. package/examples/jsm/loaders/KTX2Loader.js +30 -2
  134. package/examples/jsm/loaders/KTXLoader.js +1 -1
  135. package/examples/jsm/loaders/LDrawLoader.js +1159 -898
  136. package/examples/jsm/loaders/LUT3dlLoader.js +19 -12
  137. package/examples/jsm/loaders/LUTCubeLoader.js +5 -5
  138. package/examples/jsm/loaders/LWOLoader.js +8 -6
  139. package/examples/jsm/loaders/LogLuvLoader.js +606 -0
  140. package/examples/jsm/loaders/MMDLoader.js +0 -1
  141. package/examples/jsm/loaders/NRRDLoader.js +10 -2
  142. package/examples/jsm/loaders/OBJLoader.js +0 -2
  143. package/examples/jsm/loaders/PLYLoader.js +34 -8
  144. package/examples/jsm/loaders/RGBELoader.js +7 -28
  145. package/examples/jsm/loaders/RGBMLoader.js +62 -8
  146. package/examples/jsm/loaders/SVGLoader.js +15 -7
  147. package/examples/jsm/loaders/TDSLoader.js +236 -275
  148. package/examples/jsm/loaders/VOXLoader.js +1 -0
  149. package/examples/jsm/loaders/VRMLLoader.js +11 -23
  150. package/examples/jsm/loaders/lwo/LWO2Parser.js +1 -0
  151. package/examples/jsm/loaders/lwo/LWO3Parser.js +2 -2
  152. package/examples/jsm/math/ConvexHull.js +7 -13
  153. package/examples/jsm/math/ImprovedNoise.js +1 -1
  154. package/examples/jsm/misc/GPUComputationRenderer.js +3 -1
  155. package/examples/jsm/misc/Volume.js +2 -2
  156. package/examples/jsm/modifiers/CurveModifier.js +9 -8
  157. package/examples/jsm/modifiers/EdgeSplitModifier.js +1 -1
  158. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  159. package/examples/jsm/node-editor/NodeEditor.js +455 -0
  160. package/examples/jsm/node-editor/accessors/NormalEditor.js +30 -0
  161. package/examples/jsm/node-editor/accessors/PositionEditor.js +30 -0
  162. package/examples/jsm/node-editor/accessors/UVEditor.js +26 -0
  163. package/examples/jsm/node-editor/display/BlendEditor.js +43 -0
  164. package/examples/jsm/node-editor/examples/animate-uv.json +1 -0
  165. package/examples/jsm/node-editor/examples/fake-top-light.json +1 -0
  166. package/examples/jsm/node-editor/examples/oscillator-color.json +1 -0
  167. package/examples/jsm/node-editor/examples/rim.json +1 -0
  168. package/examples/jsm/node-editor/inputs/ColorEditor.js +91 -0
  169. package/examples/jsm/node-editor/inputs/FloatEditor.js +24 -0
  170. package/examples/jsm/node-editor/inputs/SliderEditor.js +68 -0
  171. package/examples/jsm/node-editor/inputs/Vector2Editor.js +28 -0
  172. package/examples/jsm/node-editor/inputs/Vector3Editor.js +30 -0
  173. package/examples/jsm/node-editor/inputs/Vector4Editor.js +37 -0
  174. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +108 -0
  175. package/examples/jsm/node-editor/math/DotEditor.js +36 -0
  176. package/examples/jsm/node-editor/math/InvertEditor.js +38 -0
  177. package/examples/jsm/node-editor/math/LimiterEditor.js +48 -0
  178. package/examples/jsm/node-editor/math/NormalizeEditor.js +26 -0
  179. package/examples/jsm/node-editor/math/OperatorEditor.js +50 -0
  180. package/examples/jsm/node-editor/math/PowerEditor.js +34 -0
  181. package/examples/jsm/node-editor/math/TrigonometryEditor.js +39 -0
  182. package/examples/jsm/node-editor/procedural/CheckerEditor.js +26 -0
  183. package/examples/jsm/node-editor/utils/OscillatorEditor.js +42 -0
  184. package/examples/jsm/node-editor/utils/TimerEditor.js +57 -0
  185. package/examples/jsm/nodes/core/NodeBuilder.js +2 -2
  186. package/examples/jsm/nodes/materials/StandardNodeMaterial.js +1 -1
  187. package/examples/jsm/nodes/materials/nodes/StandardNode.js +7 -6
  188. package/examples/jsm/nodes/math/MathNode.js +12 -0
  189. package/examples/jsm/nodes/misc/BumpMapNode.js +1 -1
  190. package/examples/jsm/nodes/misc/TextureCubeUVNode.js +1 -4
  191. package/examples/jsm/nodes/utils/ColorSpaceNode.js +5 -177
  192. package/examples/jsm/objects/Lensflare.js +5 -16
  193. package/examples/jsm/objects/MarchingCubes.js +46 -152
  194. package/examples/jsm/objects/Reflector.js +8 -16
  195. package/examples/jsm/objects/ReflectorForSSRPass.js +0 -12
  196. package/examples/jsm/objects/Refractor.js +8 -16
  197. package/examples/jsm/objects/Sky.js +1 -1
  198. package/examples/jsm/objects/Water.js +3 -18
  199. package/examples/jsm/objects/Water2.js +4 -8
  200. package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +1 -1
  201. package/examples/jsm/postprocessing/AfterimagePass.js +1 -1
  202. package/examples/jsm/postprocessing/BloomPass.js +1 -1
  203. package/examples/jsm/postprocessing/BokehPass.js +1 -1
  204. package/examples/jsm/postprocessing/ClearPass.js +1 -1
  205. package/examples/jsm/postprocessing/CubeTexturePass.js +1 -1
  206. package/examples/jsm/postprocessing/DotScreenPass.js +1 -1
  207. package/examples/jsm/postprocessing/EffectComposer.js +3 -3
  208. package/examples/jsm/postprocessing/FilmPass.js +1 -1
  209. package/examples/jsm/postprocessing/GlitchPass.js +10 -7
  210. package/examples/jsm/postprocessing/HalftonePass.js +1 -1
  211. package/examples/jsm/postprocessing/MaskPass.js +1 -1
  212. package/examples/jsm/postprocessing/OutlinePass.js +1 -1
  213. package/examples/jsm/postprocessing/RenderPass.js +1 -1
  214. package/examples/jsm/postprocessing/SAOPass.js +2 -2
  215. package/examples/jsm/postprocessing/SMAAPass.js +3 -12
  216. package/examples/jsm/postprocessing/SSAARenderPass.js +1 -1
  217. package/examples/jsm/postprocessing/SSAOPass.js +15 -26
  218. package/examples/jsm/postprocessing/SSRPass.js +1 -1
  219. package/examples/jsm/postprocessing/SSRrPass.js +1 -1
  220. package/examples/jsm/postprocessing/SavePass.js +2 -4
  221. package/examples/jsm/postprocessing/ShaderPass.js +1 -1
  222. package/examples/jsm/postprocessing/TAARenderPass.js +1 -1
  223. package/examples/jsm/postprocessing/TexturePass.js +1 -1
  224. package/examples/jsm/postprocessing/UnrealBloomPass.js +1 -1
  225. package/examples/jsm/renderers/CSS2DRenderer.js +5 -4
  226. package/examples/jsm/renderers/CSS3DRenderer.js +5 -4
  227. package/examples/jsm/renderers/nodes/Nodes.js +17 -13
  228. package/examples/jsm/renderers/nodes/ShaderNode.js +229 -49
  229. package/examples/jsm/renderers/nodes/accessors/MaterialNode.js +6 -6
  230. package/examples/jsm/renderers/nodes/accessors/ModelViewProjectionNode.js +5 -5
  231. package/examples/jsm/renderers/nodes/accessors/NormalNode.js +14 -3
  232. package/examples/jsm/renderers/nodes/accessors/PointUVNode.js +3 -3
  233. package/examples/jsm/renderers/nodes/accessors/PositionNode.js +15 -5
  234. package/examples/jsm/renderers/nodes/accessors/SkinningNode.js +107 -0
  235. package/examples/jsm/renderers/nodes/accessors/UVNode.js +7 -5
  236. package/examples/jsm/renderers/nodes/core/ArrayInputNode.js +3 -3
  237. package/examples/jsm/renderers/nodes/core/AttributeNode.js +6 -0
  238. package/examples/jsm/renderers/nodes/core/BypassNode.js +38 -0
  239. package/examples/jsm/renderers/nodes/core/CodeNode.js +3 -3
  240. package/examples/jsm/renderers/nodes/core/ContextNode.js +4 -19
  241. package/examples/jsm/renderers/nodes/core/ExpressionNode.js +13 -2
  242. package/examples/jsm/renderers/nodes/core/FunctionNode.js +19 -132
  243. package/examples/jsm/renderers/nodes/core/InputNode.js +13 -3
  244. package/examples/jsm/renderers/nodes/core/Node.js +32 -10
  245. package/examples/jsm/renderers/nodes/core/NodeBuilder.js +146 -128
  246. package/examples/jsm/renderers/nodes/core/NodeFunction.js +22 -0
  247. package/examples/jsm/renderers/nodes/core/NodeFunctionInput.js +4 -4
  248. package/examples/jsm/renderers/nodes/core/NodeKeywords.js +18 -179
  249. package/examples/jsm/renderers/nodes/core/NodeParser.js +11 -0
  250. package/examples/jsm/renderers/nodes/core/NodeVar.js +2 -2
  251. package/examples/jsm/renderers/nodes/core/PropertyNode.js +14 -2
  252. package/examples/jsm/renderers/nodes/core/TempNode.js +10 -13
  253. package/examples/jsm/renderers/nodes/core/VarNode.js +12 -7
  254. package/examples/jsm/renderers/nodes/core/VaryNode.js +23 -8
  255. package/examples/jsm/renderers/nodes/core/constants.js +2 -0
  256. package/examples/jsm/renderers/nodes/display/ColorSpaceNode.js +43 -63
  257. package/examples/jsm/renderers/nodes/display/NormalMapNode.js +21 -22
  258. package/examples/jsm/renderers/nodes/functions/BSDFs.js +64 -101
  259. package/examples/jsm/renderers/nodes/functions/PhysicalMaterialFunctions.js +27 -0
  260. package/examples/jsm/renderers/nodes/inputs/BufferNode.js +25 -0
  261. package/examples/jsm/renderers/nodes/inputs/IntNode.js +17 -0
  262. package/examples/jsm/renderers/nodes/inputs/TextureNode.js +13 -10
  263. package/examples/jsm/renderers/nodes/lights/LightContextNode.js +20 -14
  264. package/examples/jsm/renderers/nodes/lights/LightNode.js +32 -36
  265. package/examples/jsm/renderers/nodes/math/CondNode.js +60 -0
  266. package/examples/jsm/renderers/nodes/math/MathNode.js +91 -37
  267. package/examples/jsm/renderers/nodes/math/OperatorNode.js +124 -31
  268. package/examples/jsm/renderers/nodes/parsers/GLSLNodeFunction.js +137 -0
  269. package/examples/jsm/renderers/nodes/parsers/GLSLNodeParser.js +14 -0
  270. package/examples/jsm/renderers/nodes/parsers/WGSLNodeFunction.js +89 -0
  271. package/examples/jsm/renderers/nodes/parsers/WGSLNodeParser.js +14 -0
  272. package/examples/jsm/renderers/nodes/procedural/CheckerNode.js +7 -9
  273. package/examples/jsm/renderers/nodes/utils/ArrayElementNode.js +31 -0
  274. package/examples/jsm/renderers/nodes/utils/ConvertNode.js +33 -0
  275. package/examples/jsm/renderers/nodes/utils/JoinNode.js +7 -7
  276. package/examples/jsm/renderers/nodes/utils/OscNode.js +58 -0
  277. package/examples/jsm/renderers/nodes/utils/SplitNode.js +18 -8
  278. package/examples/jsm/renderers/nodes/utils/SpriteSheetUVNode.js +7 -7
  279. package/examples/jsm/renderers/nodes/utils/TimerNode.js +1 -1
  280. package/examples/jsm/renderers/webgl/nodes/SlotNode.js +22 -0
  281. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +192 -95
  282. package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +2 -2
  283. package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +2 -2
  284. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +1 -1
  285. package/examples/jsm/renderers/webgpu/WebGPUBindings.js +10 -9
  286. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +2 -4
  287. package/examples/jsm/renderers/webgpu/WebGPUObjects.js +1 -1
  288. package/examples/jsm/renderers/webgpu/WebGPUProgrammableStage.js +2 -4
  289. package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +15 -23
  290. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +44 -65
  291. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +13 -31
  292. package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +61 -28
  293. package/examples/jsm/renderers/webgpu/WebGPUTextures.js +35 -29
  294. package/examples/jsm/renderers/webgpu/constants.js +2 -2
  295. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +459 -95
  296. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
  297. package/examples/jsm/shaders/ConvolutionShader.js +0 -1
  298. package/examples/jsm/shaders/DigitalGlitch.js +3 -3
  299. package/examples/jsm/shaders/FXAAShader.js +1 -1
  300. package/examples/jsm/shaders/FilmShader.js +1 -1
  301. package/examples/jsm/shaders/GammaCorrectionShader.js +1 -1
  302. package/examples/jsm/shaders/HorizontalBlurShader.js +1 -2
  303. package/examples/jsm/shaders/MMDToonShader.js +0 -1
  304. package/examples/jsm/shaders/SSAOShader.js +1 -1
  305. package/examples/jsm/shaders/SSRShader.js +1 -1
  306. package/examples/jsm/shaders/SSRrShader.js +1 -1
  307. package/examples/jsm/shaders/VerticalBlurShader.js +1 -2
  308. package/examples/jsm/utils/GeometryUtils.js +1 -1
  309. package/examples/jsm/utils/LDrawUtils.js +195 -0
  310. package/examples/jsm/utils/WorkerPool.js +11 -11
  311. package/examples/jsm/webxr/OculusHandPointerModel.js +6 -6
  312. package/examples/jsm/webxr/VRButton.js +24 -0
  313. package/examples/jsm/webxr/XREstimatedLight.js +2 -0
  314. package/package.json +27 -18
  315. package/src/Three.Legacy.js +18 -0
  316. package/src/Three.js +1 -3
  317. package/src/animation/AnimationMixer.js +1 -0
  318. package/src/cameras/CubeCamera.js +2 -0
  319. package/src/cameras/StereoCamera.js +8 -7
  320. package/src/constants.js +3 -23
  321. package/src/core/Layers.js +7 -1
  322. package/src/core/Object3D.js +3 -1
  323. package/src/extras/ImageUtils.js +63 -0
  324. package/src/extras/PMREMGenerator.js +49 -185
  325. package/src/extras/core/Interpolations.js +1 -1
  326. package/src/geometries/LatheGeometry.js +70 -47
  327. package/src/helpers/CameraHelper.js +1 -1
  328. package/src/loaders/FileLoader.js +98 -144
  329. package/src/loaders/ImageLoader.js +9 -4
  330. package/src/loaders/LoaderUtils.js +26 -0
  331. package/src/loaders/MaterialLoader.js +8 -5
  332. package/src/loaders/ObjectLoader.js +2 -0
  333. package/src/materials/Material.js +8 -8
  334. package/src/materials/MeshPhysicalMaterial.js +20 -14
  335. package/src/math/Color.js +1 -39
  336. package/src/math/MathUtils.js +5 -16
  337. package/src/math/Quaternion.js +1 -1
  338. package/src/math/Ray.js +2 -2
  339. package/src/math/Sphere.js +10 -1
  340. package/src/objects/Skeleton.js +1 -0
  341. package/src/renderers/WebGLCubeRenderTarget.js +0 -2
  342. package/src/renderers/WebGLMultisampleRenderTarget.js +7 -1
  343. package/src/renderers/WebGLRenderer.js +106 -199
  344. package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +2 -2
  345. package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +1 -1
  346. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +2 -24
  347. package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +0 -2
  348. package/src/renderers/shaders/ShaderChunk/encodings_pars_fragment.glsl.js +0 -78
  349. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  350. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -2
  351. package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +1 -1
  352. package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +1 -1
  353. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +1 -1
  354. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +19 -6
  355. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +28 -2
  356. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +10 -3
  357. package/src/renderers/shaders/ShaderChunk/map_particle_fragment.glsl.js +1 -2
  358. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +1 -1
  359. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  360. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +9 -8
  361. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -3
  362. package/src/renderers/shaders/ShaderLib/equirect.glsl.js +1 -3
  363. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +1 -1
  364. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +1 -2
  365. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +23 -5
  366. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +2 -1
  367. package/src/renderers/shaders/ShaderLib.js +8 -6
  368. package/src/renderers/shaders/UniformsLib.js +1 -2
  369. package/src/renderers/webgl/WebGLCapabilities.js +0 -2
  370. package/src/renderers/webgl/WebGLCubeMaps.js +0 -4
  371. package/src/renderers/webgl/WebGLCubeUVMaps.js +29 -16
  372. package/src/renderers/webgl/WebGLExtensions.js +1 -0
  373. package/src/renderers/webgl/WebGLMaterials.js +27 -15
  374. package/src/renderers/webgl/WebGLMorphtargets.js +13 -0
  375. package/src/renderers/webgl/WebGLProgram.js +12 -37
  376. package/src/renderers/webgl/WebGLPrograms.js +192 -70
  377. package/src/renderers/webgl/WebGLRenderLists.js +4 -14
  378. package/src/renderers/webgl/WebGLShaderCache.js +120 -0
  379. package/src/renderers/webgl/WebGLShadowMap.js +14 -5
  380. package/src/renderers/webgl/WebGLState.js +157 -17
  381. package/src/renderers/webgl/WebGLTextures.js +442 -83
  382. package/src/renderers/webgl/WebGLUniforms.js +45 -1
  383. package/src/renderers/webgl/WebGLUtils.js +86 -28
  384. package/src/renderers/webxr/WebXRManager.js +77 -109
  385. package/src/scenes/Scene.js +1 -1
  386. package/src/textures/DataTexture.js +0 -2
  387. package/src/textures/DataTexture2DArray.js +0 -2
  388. package/src/textures/DataTexture3D.js +0 -2
  389. package/src/textures/FramebufferTexture.js +25 -0
  390. package/src/textures/Texture.js +8 -1
  391. package/src/textures/VideoTexture.js +1 -3
  392. package/examples/js/WebGL.js +0 -90
  393. package/examples/js/controls/DeviceOrientationControls.js +0 -147
  394. package/examples/js/libs/dat.gui.min.js +0 -14
  395. package/examples/js/utils/RoughnessMipmapper.js +0 -278
  396. package/examples/jsm/controls/DeviceOrientationControls.js +0 -153
  397. package/examples/jsm/libs/dat.gui.module.js +0 -3575
  398. package/examples/jsm/libs/glslang.js +0 -78
  399. package/examples/jsm/libs/glslang.wasm +0 -0
  400. package/examples/jsm/renderers/nodes/consts/MathConsts.js +0 -7
  401. package/examples/jsm/renderers/nodes/core/ConstNode.js +0 -39
  402. package/examples/jsm/renderers/nodes/core/NodeSlot.js +0 -13
  403. package/examples/jsm/renderers/nodes/core/StructNode.js +0 -80
  404. package/examples/jsm/renderers/nodes/core/StructVarNode.js +0 -75
  405. package/examples/jsm/renderers/nodes/functions/EncodingFunctions.js +0 -99
  406. package/examples/jsm/renderers/nodes/functions/MathFunctions.js +0 -47
  407. package/examples/jsm/renderers/webgpu/nodes/ShaderLib.js +0 -152
  408. package/examples/jsm/utils/RoughnessMipmapper.js +0 -300
  409. package/src/extras/objects/ImmediateRenderObject.js +0 -31
@@ -3,14 +3,13 @@ import WebGPUProgrammableStage from './WebGPUProgrammableStage.js';
3
3
 
4
4
  class WebGPURenderPipelines {
5
5
 
6
- constructor( renderer, properties, device, glslang, sampleCount, nodes ) {
6
+ constructor( renderer, device, sampleCount, nodes, bindings = null ) {
7
7
 
8
8
  this.renderer = renderer;
9
- this.properties = properties;
10
9
  this.device = device;
11
- this.glslang = glslang;
12
10
  this.sampleCount = sampleCount;
13
11
  this.nodes = nodes;
12
+ this.bindings = bindings;
14
13
 
15
14
  this.pipelines = [];
16
15
  this.objectCache = new WeakMap();
@@ -25,11 +24,7 @@ class WebGPURenderPipelines {
25
24
  get( object ) {
26
25
 
27
26
  const device = this.device;
28
- const glslang = this.glslang;
29
- const properties = this.properties;
30
-
31
27
  const material = object.material;
32
- const materialProperties = properties.get( material );
33
28
 
34
29
  const cache = this._getCache( object );
35
30
 
@@ -37,6 +32,14 @@ class WebGPURenderPipelines {
37
32
 
38
33
  if ( this._needsUpdate( object, cache ) ) {
39
34
 
35
+ // release previous cache
36
+
37
+ if ( cache.currentPipeline !== undefined ) {
38
+
39
+ this._releaseObject( object );
40
+
41
+ }
42
+
40
43
  // get shader
41
44
 
42
45
  const nodeBuilder = this.nodes.get( object );
@@ -47,7 +50,7 @@ class WebGPURenderPipelines {
47
50
 
48
51
  if ( stageVertex === undefined ) {
49
52
 
50
- stageVertex = new WebGPUProgrammableStage( device, glslang, nodeBuilder.vertexShader, 'vertex' );
53
+ stageVertex = new WebGPUProgrammableStage( device, nodeBuilder.vertexShader, 'vertex' );
51
54
  this.stages.vertex.set( nodeBuilder.vertexShader, stageVertex );
52
55
 
53
56
  }
@@ -56,7 +59,7 @@ class WebGPURenderPipelines {
56
59
 
57
60
  if ( stageFragment === undefined ) {
58
61
 
59
- stageFragment = new WebGPUProgrammableStage( device, glslang, nodeBuilder.fragmentShader, 'fragment' );
62
+ stageFragment = new WebGPUProgrammableStage( device, nodeBuilder.fragmentShader, 'fragment' );
60
63
  this.stages.fragment.set( nodeBuilder.fragmentShader, stageFragment );
61
64
 
62
65
  }
@@ -66,37 +69,15 @@ class WebGPURenderPipelines {
66
69
  currentPipeline = this._acquirePipeline( stageVertex, stageFragment, object, nodeBuilder );
67
70
  cache.currentPipeline = currentPipeline;
68
71
 
69
- // keep track of all pipelines which are used by a material
70
-
71
- let materialPipelines = materialProperties.pipelines;
72
-
73
- if ( materialPipelines === undefined ) {
74
-
75
- materialPipelines = new Set();
76
- materialProperties.pipelines = materialPipelines;
77
-
78
- }
79
-
80
- if ( materialPipelines.has( currentPipeline ) === false ) {
72
+ // keep track of all used times
81
73
 
82
- materialPipelines.add( currentPipeline );
74
+ currentPipeline.usedTimes ++;
75
+ stageVertex.usedTimes ++;
76
+ stageFragment.usedTimes ++;
83
77
 
84
- currentPipeline.usedTimes ++;
85
- stageVertex.usedTimes ++;
86
- stageFragment.usedTimes ++;
78
+ // events
87
79
 
88
- }
89
-
90
- // dispose
91
-
92
- if ( materialProperties.disposeCallback === undefined ) {
93
-
94
- const disposeCallback = onMaterialDispose.bind( this );
95
- materialProperties.disposeCallback = disposeCallback;
96
-
97
- material.addEventListener( 'dispose', disposeCallback );
98
-
99
- }
80
+ material.addEventListener( 'dispose', cache.dispose );
100
81
 
101
82
  } else {
102
83
 
@@ -184,7 +165,20 @@ class WebGPURenderPipelines {
184
165
 
185
166
  if ( cache === undefined ) {
186
167
 
187
- cache = {};
168
+ cache = {
169
+
170
+ dispose: () => {
171
+
172
+ this._releaseObject( object );
173
+
174
+ this.objectCache.delete( object );
175
+
176
+ object.material.removeEventListener( 'dispose', cache.dispose );
177
+
178
+ }
179
+
180
+ };
181
+
188
182
  this.objectCache.set( object, cache );
189
183
 
190
184
  }
@@ -193,6 +187,18 @@ class WebGPURenderPipelines {
193
187
 
194
188
  }
195
189
 
190
+ _releaseObject( object ) {
191
+
192
+ const cache = this.objectCache.get( object );
193
+
194
+ this._releasePipeline( cache.currentPipeline );
195
+ delete cache.currentPipeline;
196
+
197
+ this.nodes.remove( object );
198
+ this.bindings.remove( object );
199
+
200
+ }
201
+
196
202
  _releasePipeline( pipeline ) {
197
203
 
198
204
  if ( -- pipeline.usedTimes === 0 ) {
@@ -284,31 +290,4 @@ class WebGPURenderPipelines {
284
290
 
285
291
  }
286
292
 
287
- function onMaterialDispose( event ) {
288
-
289
- const properties = this.properties;
290
-
291
- const material = event.target;
292
- const materialProperties = properties.get( material );
293
-
294
- material.removeEventListener( 'dispose', materialProperties.disposeCallback );
295
-
296
- properties.remove( material );
297
-
298
- // remove references to pipelines
299
-
300
- const pipelines = materialProperties.pipelines;
301
-
302
- if ( pipelines !== undefined ) {
303
-
304
- for ( const pipeline of pipelines ) {
305
-
306
- this._releasePipeline( pipeline );
307
-
308
- }
309
-
310
- }
311
-
312
- }
313
-
314
293
  export default WebGPURenderPipelines;
@@ -12,8 +12,6 @@ import WebGPUTextures from './WebGPUTextures.js';
12
12
  import WebGPUBackground from './WebGPUBackground.js';
13
13
  import WebGPUNodes from './nodes/WebGPUNodes.js';
14
14
 
15
- import glslang from '../../libs/glslang.js';
16
-
17
15
  import { Frustum, Matrix4, Vector3, Color, LinearEncoding } from 'three';
18
16
 
19
17
  console.info( 'THREE.WebGPURenderer: Modified Matrix4.makePerspective() and Matrix4.makeOrtographic() to work with WebGPU, see https://github.com/mrdoob/three.js/issues/20276.' );
@@ -94,7 +92,6 @@ class WebGPURenderer {
94
92
  this._adapter = null;
95
93
  this._device = null;
96
94
  this._context = null;
97
- this._swapChain = null;
98
95
  this._colorBuffer = null;
99
96
  this._depthBuffer = null;
100
97
 
@@ -166,30 +163,27 @@ class WebGPURenderer {
166
163
 
167
164
  const device = await adapter.requestDevice( deviceDescriptor );
168
165
 
169
- const compiler = await glslang();
170
-
171
166
  const context = ( parameters.context !== undefined ) ? parameters.context : this.domElement.getContext( 'webgpu' );
172
167
 
173
- const swapChain = context.configure( {
168
+ context.configure( {
174
169
  device: device,
175
- format: GPUTextureFormat.BRGA8Unorm // this is the only valid swap chain format right now (r121)
170
+ format: GPUTextureFormat.BGRA8Unorm // this is the only valid context format right now (r121)
176
171
  } );
177
172
 
178
173
  this._adapter = adapter;
179
174
  this._device = device;
180
175
  this._context = context;
181
- this._swapChain = swapChain;
182
176
 
183
177
  this._info = new WebGPUInfo();
184
178
  this._properties = new WebGPUProperties();
185
179
  this._attributes = new WebGPUAttributes( device );
186
180
  this._geometries = new WebGPUGeometries( this._attributes, this._info );
187
- this._textures = new WebGPUTextures( device, this._properties, this._info, compiler );
181
+ this._textures = new WebGPUTextures( device, this._properties, this._info );
188
182
  this._objects = new WebGPUObjects( this._geometries, this._info );
189
183
  this._nodes = new WebGPUNodes( this );
190
- this._renderPipelines = new WebGPURenderPipelines( this, this._properties, device, compiler, parameters.sampleCount, this._nodes );
191
- this._computePipelines = new WebGPUComputePipelines( device, compiler );
192
- this._bindings = new WebGPUBindings( device, this._info, this._properties, this._textures, this._renderPipelines, this._computePipelines, this._attributes, this._nodes );
184
+ this._computePipelines = new WebGPUComputePipelines( device );
185
+ this._renderPipelines = new WebGPURenderPipelines( this, device, parameters.sampleCount, this._nodes );
186
+ this._bindings = this._renderPipelines.bindings = new WebGPUBindings( device, this._info, this._properties, this._textures, this._renderPipelines, this._computePipelines, this._attributes, this._nodes );
193
187
  this._renderLists = new WebGPURenderLists();
194
188
  this._background = new WebGPUBackground( this );
195
189
 
@@ -493,7 +487,7 @@ class WebGPURenderer {
493
487
 
494
488
  } else {
495
489
 
496
- format = GPUTextureFormat.BRGA8Unorm; // default swap chain format
490
+ format = GPUTextureFormat.BGRA8Unorm; // default context format
497
491
 
498
492
  }
499
493
 
@@ -639,7 +633,6 @@ class WebGPURenderer {
639
633
 
640
634
  _projectObject( object, camera, groupOrder ) {
641
635
 
642
- const info = this._info;
643
636
  const currentRenderList = this._currentRenderList;
644
637
 
645
638
  if ( object.visible === false ) return;
@@ -693,19 +686,6 @@ class WebGPURenderer {
693
686
 
694
687
  } else if ( object.isMesh || object.isLine || object.isPoints ) {
695
688
 
696
- if ( object.isSkinnedMesh ) {
697
-
698
- // update skeleton only once in a frame
699
-
700
- if ( object.skeleton.frame !== info.render.frame ) {
701
-
702
- object.skeleton.update();
703
- object.skeleton.frame = info.render.frame;
704
-
705
- }
706
-
707
- }
708
-
709
689
  if ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) {
710
690
 
711
691
  if ( this.sortObjects === true ) {
@@ -791,7 +771,7 @@ class WebGPURenderer {
791
771
  passEncoder.setViewport( vp.x, vp.y, vp.width, vp.height, minDepth, maxDepth );
792
772
 
793
773
  this._nodes.update( object, camera2 );
794
- this._bindings.update( object, camera2 );
774
+ this._bindings.update( object );
795
775
  this._renderObject( object, passEncoder );
796
776
 
797
777
  }
@@ -801,7 +781,7 @@ class WebGPURenderer {
801
781
  } else {
802
782
 
803
783
  this._nodes.update( object, camera );
804
- this._bindings.update( object, camera );
784
+ this._bindings.update( object );
805
785
  this._renderObject( object, passEncoder );
806
786
 
807
787
  }
@@ -914,7 +894,7 @@ class WebGPURenderer {
914
894
  depthOrArrayLayers: 1
915
895
  },
916
896
  sampleCount: this._parameters.sampleCount,
917
- format: GPUTextureFormat.BRGA8Unorm,
897
+ format: GPUTextureFormat.BGRA8Unorm,
918
898
  usage: GPUTextureUsage.RENDER_ATTACHMENT
919
899
  } );
920
900
 
@@ -953,7 +933,7 @@ class WebGPURenderer {
953
933
 
954
934
  this._context.configure( {
955
935
  device: device,
956
- format: GPUTextureFormat.BRGA8Unorm,
936
+ format: GPUTextureFormat.BGRA8Unorm,
957
937
  usage: GPUTextureUsage.RENDER_ATTACHMENT,
958
938
  size: {
959
939
  width: Math.floor( this._width * this._pixelRatio ),
@@ -976,4 +956,6 @@ class WebGPURenderer {
976
956
 
977
957
  }
978
958
 
959
+ WebGPURenderer.prototype.isWebGPURenderer = true;
960
+
979
961
  export default WebGPURenderer;
@@ -24,28 +24,59 @@ import { GPUIndexFormat, GPUFilterMode, GPUPrimitiveTopology } from './constants
24
24
 
25
25
  class WebGPUTextureUtils {
26
26
 
27
- constructor( device, glslang ) {
27
+ constructor( device ) {
28
28
 
29
29
  this.device = device;
30
30
 
31
- const mipmapVertexSource = `#version 450
32
- const vec2 pos[4] = vec2[4](vec2(-1.0f, 1.0f), vec2(1.0f, 1.0f), vec2(-1.0f, -1.0f), vec2(1.0f, -1.0f));
33
- const vec2 tex[4] = vec2[4](vec2(0.0f, 0.0f), vec2(1.0f, 0.0f), vec2(0.0f, 1.0f), vec2(1.0f, 1.0f));
34
- layout(location = 0) out vec2 vTex;
35
- void main() {
36
- vTex = tex[gl_VertexIndex];
37
- gl_Position = vec4(pos[gl_VertexIndex], 0.0, 1.0);
38
- }
39
- `;
40
-
41
- const mipmapFragmentSource = `#version 450
42
- layout(set = 0, binding = 0) uniform sampler imgSampler;
43
- layout(set = 0, binding = 1) uniform texture2D img;
44
- layout(location = 0) in vec2 vTex;
45
- layout(location = 0) out vec4 outColor;
46
- void main() {
47
- outColor = texture(sampler2D(img, imgSampler), vTex);
48
- }`;
31
+ const mipmapVertexSource = `
32
+ struct VarysStruct {
33
+
34
+ [[ builtin( position ) ]] Position: vec4<f32>;
35
+ [[ location( 0 ) ]] vTex : vec2<f32>;
36
+
37
+ };
38
+
39
+ [[ stage( vertex ) ]]
40
+ fn main( [[ builtin( vertex_index ) ]] vertexIndex : u32 ) -> VarysStruct {
41
+
42
+ var Varys: VarysStruct;
43
+
44
+ var pos = array< vec2<f32>, 4 >(
45
+ vec2<f32>( -1.0, 1.0 ),
46
+ vec2<f32>( 1.0, 1.0 ),
47
+ vec2<f32>( -1.0, -1.0 ),
48
+ vec2<f32>( 1.0, -1.0 )
49
+ );
50
+
51
+ var tex = array< vec2<f32>, 4 >(
52
+ vec2<f32>( 0.0, 0.0 ),
53
+ vec2<f32>( 1.0, 0.0 ),
54
+ vec2<f32>( 0.0, 1.0 ),
55
+ vec2<f32>( 1.0, 1.0 )
56
+ );
57
+
58
+ Varys.vTex = tex[ vertexIndex ];
59
+ Varys.Position = vec4<f32>( pos[ vertexIndex ], 0.0, 1.0 );
60
+
61
+ return Varys;
62
+
63
+ }
64
+ `;
65
+
66
+ const mipmapFragmentSource = `
67
+ [[ group( 0 ), binding( 0 ) ]]
68
+ var imgSampler : sampler;
69
+
70
+ [[ group( 0 ), binding( 1 ) ]]
71
+ var img : texture_2d<f32>;
72
+
73
+ [[ stage( fragment ) ]]
74
+ fn main( [[ location( 0 ) ]] vTex : vec2<f32> ) -> [[ location( 0 ) ]] vec4<f32> {
75
+
76
+ return textureSample( img, imgSampler, vTex );
77
+
78
+ }
79
+ `;
49
80
 
50
81
  this.sampler = device.createSampler( { minFilter: GPUFilterMode.Linear } );
51
82
 
@@ -53,10 +84,11 @@ class WebGPUTextureUtils {
53
84
  this.pipelines = {};
54
85
 
55
86
  this.mipmapVertexShaderModule = device.createShaderModule( {
56
- code: glslang.compileGLSL( mipmapVertexSource, 'vertex' ),
87
+ code: mipmapVertexSource
57
88
  } );
89
+
58
90
  this.mipmapFragmentShaderModule = device.createShaderModule( {
59
- code: glslang.compileGLSL( mipmapFragmentSource, 'fragment' ),
91
+ code: mipmapFragmentSource
60
92
  } );
61
93
 
62
94
  }
@@ -82,6 +114,7 @@ class WebGPUTextureUtils {
82
114
  stripIndexFormat: GPUIndexFormat.Uint32
83
115
  }
84
116
  } );
117
+
85
118
  this.pipelines[ format ] = pipeline;
86
119
 
87
120
  }
@@ -99,32 +132,32 @@ class WebGPUTextureUtils {
99
132
 
100
133
  let srcView = textureGPU.createView( {
101
134
  baseMipLevel: 0,
102
- mipLevelCount: 1,
135
+ mipLevelCount: 1
103
136
  } );
104
137
 
105
138
  for ( let i = 1; i < textureGPUDescriptor.mipLevelCount; i ++ ) {
106
139
 
107
140
  const dstView = textureGPU.createView( {
108
141
  baseMipLevel: i,
109
- mipLevelCount: 1,
142
+ mipLevelCount: 1
110
143
  } );
111
144
 
112
145
  const passEncoder = commandEncoder.beginRenderPass( {
113
146
  colorAttachments: [ {
114
147
  view: dstView,
115
- loadValue: [ 0, 0, 0, 0 ],
116
- } ],
148
+ loadValue: [ 0, 0, 0, 0 ]
149
+ } ]
117
150
  } );
118
151
 
119
152
  const bindGroup = this.device.createBindGroup( {
120
153
  layout: bindGroupLayout,
121
154
  entries: [ {
122
155
  binding: 0,
123
- resource: this.sampler,
156
+ resource: this.sampler
124
157
  }, {
125
158
  binding: 1,
126
- resource: srcView,
127
- } ],
159
+ resource: srcView
160
+ } ]
128
161
  } );
129
162
 
130
163
  passEncoder.setPipeline( pipeline );
@@ -1,17 +1,16 @@
1
1
  import { GPUTextureFormat, GPUAddressMode, GPUFilterMode, GPUTextureDimension } from './constants.js';
2
2
  import { CubeTexture, Texture, NearestFilter, NearestMipmapNearestFilter, NearestMipmapLinearFilter, LinearFilter, RepeatWrapping, MirroredRepeatWrapping,
3
- RGBFormat, RGBAFormat, RedFormat, RGFormat, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, UnsignedByteType, FloatType, HalfFloatType, sRGBEncoding
3
+ RGBAFormat, RedFormat, RGFormat, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, UnsignedByteType, FloatType, HalfFloatType, sRGBEncoding
4
4
  } from 'three';
5
5
  import WebGPUTextureUtils from './WebGPUTextureUtils.js';
6
6
 
7
7
  class WebGPUTextures {
8
8
 
9
- constructor( device, properties, info, glslang ) {
9
+ constructor( device, properties, info ) {
10
10
 
11
11
  this.device = device;
12
12
  this.properties = properties;
13
13
  this.info = info;
14
- this.glslang = glslang;
15
14
 
16
15
  this.defaultTexture = null;
17
16
  this.defaultCubeTexture = null;
@@ -42,7 +41,9 @@ class WebGPUTextures {
42
41
  texture.minFilter = NearestFilter;
43
42
  texture.magFilter = NearestFilter;
44
43
 
45
- this.defaultTexture = this._createTexture( texture );
44
+ this._uploadTexture( texture );
45
+
46
+ this.defaultTexture = this.getTextureGPU( texture );
46
47
 
47
48
  }
48
49
 
@@ -58,7 +59,9 @@ class WebGPUTextures {
58
59
  texture.minFilter = NearestFilter;
59
60
  texture.magFilter = NearestFilter;
60
61
 
61
- this.defaultCubeTexture = this._createTexture( texture );
62
+ this._uploadTexture( texture );
63
+
64
+ this.defaultCubeTexture = this.getTextureGPU( texture );
62
65
 
63
66
  }
64
67
 
@@ -84,7 +87,7 @@ class WebGPUTextures {
84
87
 
85
88
  updateTexture( texture ) {
86
89
 
87
- let forceUpdate = false;
90
+ let needsUpdate = false;
88
91
 
89
92
  const textureProperties = this.properties.get( texture );
90
93
 
@@ -117,21 +120,9 @@ class WebGPUTextures {
117
120
 
118
121
  }
119
122
 
120
- // texture creation
121
-
122
- if ( textureProperties.textureGPU !== undefined ) {
123
+ //
123
124
 
124
- // @TODO: Avoid calling of destroy() in certain scenarios. When only the contents of a texture
125
- // are updated, a buffer upload should be sufficient. However, if the user changes
126
- // the dimensions of the texture, format or usage, a new instance of GPUTexture is required.
127
-
128
- textureProperties.textureGPU.destroy();
129
-
130
- }
131
-
132
- textureProperties.textureGPU = this._createTexture( texture );
133
- textureProperties.version = texture.version;
134
- forceUpdate = true;
125
+ needsUpdate = this._uploadTexture( texture );
135
126
 
136
127
  }
137
128
 
@@ -143,11 +134,11 @@ class WebGPUTextures {
143
134
  if ( textureProperties.initializedRTT === false ) {
144
135
 
145
136
  textureProperties.initializedRTT = true;
146
- forceUpdate = true;
137
+ needsUpdate = true;
147
138
 
148
139
  }
149
140
 
150
- return forceUpdate;
141
+ return needsUpdate;
151
142
 
152
143
  }
153
144
 
@@ -305,11 +296,15 @@ class WebGPUTextures {
305
296
 
306
297
  }
307
298
 
308
- _createTexture( texture ) {
299
+ _uploadTexture( texture ) {
300
+
301
+ let needsUpdate = false;
309
302
 
310
303
  const device = this.device;
311
304
  const image = texture.image;
312
305
 
306
+ const textureProperties = this.properties.get( texture );
307
+
313
308
  const { width, height, depth } = this._getSize( texture );
314
309
  const needsMipmaps = this._needsMipmaps( texture );
315
310
  const dimension = this._getDimension( texture );
@@ -326,8 +321,6 @@ class WebGPUTextures {
326
321
 
327
322
  }
328
323
 
329
- // texture creation
330
-
331
324
  const textureGPUDescriptor = {
332
325
  size: {
333
326
  width: width,
@@ -340,7 +333,19 @@ class WebGPUTextures {
340
333
  format: format,
341
334
  usage: usage
342
335
  };
343
- const textureGPU = device.createTexture( textureGPUDescriptor );
336
+
337
+ // texture creation
338
+
339
+ let textureGPU = textureProperties.textureGPU;
340
+
341
+ if ( textureGPU === undefined ) {
342
+
343
+ textureGPU = device.createTexture( textureGPUDescriptor );
344
+ textureProperties.textureGPU = textureGPU;
345
+
346
+ needsUpdate = true;
347
+
348
+ }
344
349
 
345
350
  // transfer texture data
346
351
 
@@ -376,7 +381,9 @@ class WebGPUTextures {
376
381
 
377
382
  }
378
383
 
379
- return textureGPU;
384
+ textureProperties.version = texture.version;
385
+
386
+ return needsUpdate;
380
387
 
381
388
  }
382
389
 
@@ -481,7 +488,7 @@ class WebGPUTextures {
481
488
 
482
489
  if ( this.utils === null ) {
483
490
 
484
- this.utils = new WebGPUTextureUtils( this.device, this.glslang ); // only create this helper if necessary
491
+ this.utils = new WebGPUTextureUtils( this.device ); // only create this helper if necessary
485
492
 
486
493
  }
487
494
 
@@ -557,7 +564,6 @@ class WebGPUTextures {
557
564
  formatGPU = ( encoding === sRGBEncoding ) ? GPUTextureFormat.BC3RGBAUnormSRGB : GPUTextureFormat.BC3RGBAUnorm;
558
565
  break;
559
566
 
560
- case RGBFormat:
561
567
  case RGBAFormat:
562
568
 
563
569
  switch ( type ) {
@@ -107,8 +107,8 @@ export const GPUTextureFormat = {
107
107
  RGBA8Snorm: 'rgba8snorm',
108
108
  RGBA8Uint: 'rgba8uint',
109
109
  RGBA8Sint: 'rgba8sint',
110
- BRGA8Unorm: 'bgra8unorm',
111
- BRGA8UnormSRGB: 'bgra8unorm-srgb',
110
+ BGRA8Unorm: 'bgra8unorm',
111
+ BGRA8UnormSRGB: 'bgra8unorm-srgb',
112
112
  // Packed 32-bit formats
113
113
  RGB9E5UFloat: 'rgb9e5ufloat',
114
114
  RGB10A2Unorm: 'rgb10a2unorm',