@gnsx/three 0.185.15 → 0.186.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 (417) hide show
  1. package/build/three.cjs +10 -82600
  2. package/build/three.core.js +1303 -728
  3. package/build/three.module.js +439 -338
  4. package/build/three.tsl.js +74 -44
  5. package/build/three.webgpu.js +6036 -2184
  6. package/build/three.webgpu.nodes.js +6020 -2184
  7. package/examples/jsm/Addons.js +6 -6
  8. package/examples/jsm/controls/ArcballControls.js +1 -1
  9. package/examples/jsm/controls/FirstPersonControls.js +44 -20
  10. package/examples/jsm/controls/OrbitControls.js +9 -0
  11. package/examples/jsm/controls/TrackballControls.js +109 -4
  12. package/examples/jsm/csm/CSMShadowNode.js +13 -0
  13. package/examples/jsm/exporters/GLTFExporter.js +23 -7
  14. package/examples/jsm/exporters/USDZExporter.js +2 -2
  15. package/examples/jsm/generators/CityGenerator.js +377 -45
  16. package/examples/jsm/generators/ForestGenerator.js +12 -12
  17. package/examples/jsm/generators/TerrainGenerator.js +49 -37
  18. package/examples/jsm/generators/TreeGenerator.js +70 -76
  19. package/examples/jsm/generators/city/BenchGenerator.js +127 -0
  20. package/examples/jsm/generators/city/CarGenerator.js +479 -0
  21. package/examples/jsm/generators/city/CityGeneratorUtils.js +31 -0
  22. package/examples/jsm/generators/city/HydrantGenerator.js +106 -0
  23. package/examples/jsm/generators/city/InstancedMeshGenerator.js +86 -0
  24. package/examples/jsm/generators/city/PersonGenerator.js +447 -0
  25. package/examples/jsm/generators/city/SidewalkGenerator.js +33 -38
  26. package/examples/jsm/generators/city/SkyscraperGenerator.js +448 -48
  27. package/examples/jsm/generators/city/StreetTreeGenerator.js +231 -0
  28. package/examples/jsm/generators/city/StreetlightGenerator.js +100 -0
  29. package/examples/jsm/generators/city/TrafficlightGenerator.js +106 -0
  30. package/examples/jsm/generators/city/TrashcanGenerator.js +100 -0
  31. package/examples/jsm/geometries/BoxLineGeometry.js +1 -1
  32. package/examples/jsm/geometries/ParametricGeometry.js +1 -1
  33. package/examples/jsm/geometries/RoundedBoxGeometry.js +1 -1
  34. package/examples/jsm/gpgpu/CountingSort.js +271 -0
  35. package/examples/jsm/helpers/LightProbeGridHelper.js +60 -239
  36. package/examples/jsm/helpers/LightProbeGridHelperWebGL.js +221 -0
  37. package/examples/jsm/inspector/Extension.js +94 -0
  38. package/examples/jsm/inspector/Inspector.js +145 -41
  39. package/examples/jsm/inspector/RendererInspector.js +100 -52
  40. package/examples/jsm/inspector/extensions/color-grading/ColorGrading.js +2609 -0
  41. package/examples/jsm/inspector/extensions/color-grading/ColorWheel.js +352 -0
  42. package/examples/jsm/inspector/extensions/color-grading/CurveEditor.js +599 -0
  43. package/examples/jsm/inspector/extensions/color-grading/LUT3DStyle.js +1201 -0
  44. package/examples/jsm/inspector/extensions/color-grading/LUTMath.js +788 -0
  45. package/examples/jsm/inspector/extensions/color-grading/modules/BrightnessModule.js +72 -0
  46. package/examples/jsm/inspector/extensions/color-grading/modules/ColorWheelModule.js +112 -0
  47. package/examples/jsm/inspector/extensions/color-grading/modules/ContrastModule.js +82 -0
  48. package/examples/jsm/inspector/extensions/color-grading/modules/CurvesModule.js +109 -0
  49. package/examples/jsm/inspector/extensions/color-grading/modules/ExposureHueModule.js +110 -0
  50. package/examples/jsm/inspector/extensions/color-grading/modules/ExposureModule.js +73 -0
  51. package/examples/jsm/inspector/extensions/color-grading/modules/HueModule.js +78 -0
  52. package/examples/jsm/inspector/extensions/color-grading/modules/ImportedCubeModule.js +89 -0
  53. package/examples/jsm/inspector/extensions/color-grading/modules/Module.js +285 -0
  54. package/examples/jsm/inspector/extensions/color-grading/modules/OutputModule.js +101 -0
  55. package/examples/jsm/inspector/extensions/color-grading/modules/RendererModule.js +225 -0
  56. package/examples/jsm/inspector/extensions/color-grading/modules/SatVibranceModule.js +102 -0
  57. package/examples/jsm/inspector/extensions/color-grading/modules/SaturationModule.js +76 -0
  58. package/examples/jsm/inspector/extensions/color-grading/modules/VibranceModule.js +76 -0
  59. package/examples/jsm/inspector/extensions/color-grading/modules/WhiteBalanceModule.js +86 -0
  60. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +26 -31
  61. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +1 -0
  62. package/examples/jsm/inspector/tabs/Memory.js +0 -2
  63. package/examples/jsm/inspector/tabs/Settings.js +4 -0
  64. package/examples/jsm/inspector/tabs/Timeline.js +223 -171
  65. package/examples/jsm/inspector/tabs/Viewer.js +515 -21
  66. package/examples/jsm/inspector/ui/List.js +15 -9
  67. package/examples/jsm/inspector/ui/Profiler.js +170 -14
  68. package/examples/jsm/inspector/ui/Style.js +269 -23
  69. package/examples/jsm/inspector/ui/Tab.js +2 -0
  70. package/examples/jsm/inspector/ui/Values.js +14 -2
  71. package/examples/jsm/interactive/HTMLMesh.js +19 -3
  72. package/examples/jsm/lighting/LightProbeGrid.js +484 -889
  73. package/examples/jsm/lighting/LightProbeGridUtils.js +107 -0
  74. package/examples/jsm/lighting/LightProbeGridWebGL.js +841 -0
  75. package/examples/jsm/lighting/vxgi/VXGIConeTracer.js +194 -0
  76. package/examples/jsm/lighting/vxgi/VXGINode.js +660 -0
  77. package/examples/jsm/lighting/vxgi/VXGISceneCollector.js +478 -0
  78. package/examples/jsm/lighting/vxgi/VXGIVolume.js +1430 -0
  79. package/examples/jsm/lights/SunLight.js +95 -0
  80. package/examples/jsm/lights/SunLightNode.js +56 -0
  81. package/examples/jsm/lights/SunLightShadow.js +319 -0
  82. package/examples/jsm/lights/SunShadowNode.js +312 -0
  83. package/examples/jsm/loaders/3DMLoader.js +150 -49
  84. package/examples/jsm/loaders/3MFLoader.js +202 -1
  85. package/examples/jsm/loaders/FBXLoader.js +81 -5
  86. package/examples/jsm/loaders/GLTFGaussianSplatLoaderExtension.js +330 -0
  87. package/examples/jsm/loaders/GLTFLoader.js +79 -14
  88. package/examples/jsm/loaders/GaussianSplatPLYLoader.js +386 -0
  89. package/examples/jsm/loaders/KSPLATLoader.js +463 -0
  90. package/examples/jsm/loaders/MaterialXLoader.js +111 -1010
  91. package/examples/jsm/loaders/PCDLoader.js +1 -1
  92. package/examples/jsm/loaders/SPLATLoader.js +139 -0
  93. package/examples/jsm/loaders/SPZLoader.js +561 -0
  94. package/examples/jsm/loaders/materialx/MaterialXArchive.js +108 -0
  95. package/examples/jsm/loaders/materialx/MaterialXDocument.js +878 -0
  96. package/examples/jsm/loaders/materialx/MaterialXHextile.js +183 -0
  97. package/examples/jsm/loaders/materialx/MaterialXInterfaceValidation.js +376 -0
  98. package/examples/jsm/loaders/materialx/MaterialXLog.js +75 -0
  99. package/examples/jsm/loaders/materialx/MaterialXNodeInterfaceRegistry.js +4 -0
  100. package/examples/jsm/loaders/materialx/MaterialXNodeLibrary.js +1021 -0
  101. package/examples/jsm/loaders/materialx/MaterialXSurfaceMappings.js +661 -0
  102. package/examples/jsm/loaders/materialx/MaterialXUtils.js +57 -0
  103. package/examples/jsm/loaders/materialx/compile/MaterialXCompileRegistry.js +997 -0
  104. package/examples/jsm/loaders/materialx/parse/MaterialXParser.js +28 -0
  105. package/examples/jsm/loaders/usd/USDAParser.js +15 -2
  106. package/examples/jsm/loaders/usd/USDCParser.js +1 -4
  107. package/examples/jsm/loaders/usd/USDComposer.js +80 -42
  108. package/examples/jsm/materials/WoodNodeMaterial.js +6 -108
  109. package/examples/jsm/misc/RollerCoaster.js +2 -2
  110. package/examples/jsm/misc/SculptGL.LICENSE.txt +21 -0
  111. package/examples/jsm/misc/Sculptor.js +1679 -0
  112. package/examples/jsm/misc/SculptorMesh.js +1504 -0
  113. package/examples/jsm/misc/SculptorTools.js +1180 -0
  114. package/examples/jsm/misc/SculptorUtils.js +345 -0
  115. package/examples/jsm/misc/TubePainter.js +28 -16
  116. package/examples/jsm/misc/VolumeSlice.js +24 -24
  117. package/examples/jsm/modifiers/SimplifyModifier.js +63 -556
  118. package/examples/jsm/objects/GaussianSplat.js +1039 -0
  119. package/examples/jsm/objects/Sky.js +66 -45
  120. package/examples/jsm/objects/SkyMesh.js +70 -51
  121. package/examples/jsm/physics/JoltPhysics.js +1 -1
  122. package/examples/jsm/postprocessing/AfterimagePass.js +4 -2
  123. package/examples/jsm/postprocessing/BloomPass.js +2 -2
  124. package/examples/jsm/postprocessing/GTAOPass.js +1 -1
  125. package/examples/jsm/postprocessing/OutlinePass.js +5 -5
  126. package/examples/jsm/postprocessing/SAOPass.js +1 -1
  127. package/examples/jsm/postprocessing/SSAOPass.js +1 -1
  128. package/examples/jsm/postprocessing/SSRPass.js +4 -2
  129. package/examples/jsm/postprocessing/SavePass.js +1 -1
  130. package/examples/jsm/postprocessing/TAARenderPass.js +1 -1
  131. package/examples/jsm/postprocessing/UnrealBloomPass.js +30 -13
  132. package/examples/jsm/renderers/CSS2DRenderer.js +29 -5
  133. package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
  134. package/examples/jsm/shaders/ExposureShader.js +1 -1
  135. package/examples/jsm/shaders/FilmShader.js +2 -1
  136. package/examples/jsm/transpiler/AST.js +21 -2
  137. package/examples/jsm/transpiler/GLSLDecoder.js +498 -8
  138. package/examples/jsm/transpiler/TSLEncoder.js +82 -10
  139. package/examples/jsm/transpiler/WGSLEncoder.js +33 -4
  140. package/examples/jsm/tsl/WebGLNodesHandler.js +29 -39
  141. package/examples/jsm/tsl/display/AfterImageNode.js +2 -0
  142. package/examples/jsm/tsl/display/AnaglyphPassNode.js +3 -2
  143. package/examples/jsm/tsl/display/BilateralBlurNode.js +5 -2
  144. package/examples/jsm/tsl/display/BloomNode.js +55 -30
  145. package/examples/jsm/tsl/display/DenoiseNode.js +21 -1
  146. package/examples/jsm/tsl/display/DepthOfFieldNode.js +24 -6
  147. package/examples/jsm/tsl/display/DotScreenNode.js +11 -11
  148. package/examples/jsm/tsl/display/FSR1Node.js +8 -4
  149. package/examples/jsm/tsl/display/GTAONode.js +199 -86
  150. package/examples/jsm/tsl/display/GaussianBlurNode.js +65 -52
  151. package/examples/jsm/tsl/display/GodraysNode.js +5 -2
  152. package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +2 -2
  153. package/examples/jsm/tsl/display/LensflareNode.js +5 -2
  154. package/examples/jsm/tsl/display/OITPassNode.js +352 -0
  155. package/examples/jsm/tsl/display/OutlineNode.js +2 -0
  156. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +3 -2
  157. package/examples/jsm/tsl/display/RGBShiftNode.js +9 -9
  158. package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +7 -4
  159. package/examples/jsm/tsl/display/RetroPassNode.js +1 -1
  160. package/examples/jsm/tsl/display/SMAANode.js +22 -61
  161. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -4
  162. package/examples/jsm/tsl/display/SSAONode.js +436 -0
  163. package/examples/jsm/tsl/display/SSGINode.js +5 -2
  164. package/examples/jsm/tsl/display/SSRNode.js +7 -2
  165. package/examples/jsm/tsl/display/SSSNode.js +5 -2
  166. package/examples/jsm/tsl/display/SharpenNode.js +5 -4
  167. package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -3
  168. package/examples/jsm/tsl/display/StereoPassNode.js +1 -3
  169. package/examples/jsm/tsl/display/TAAUNode.js +22 -125
  170. package/examples/jsm/tsl/display/TRAANode.js +16 -142
  171. package/examples/jsm/tsl/display/TemporalReprojectNode.js +21 -15
  172. package/examples/jsm/tsl/display/depthAwareBlur.js +63 -0
  173. package/examples/jsm/tsl/display/hashBlur.js +3 -2
  174. package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +38 -27
  175. package/examples/jsm/tsl/lighting/LightProbeGridNode.js +136 -0
  176. package/examples/jsm/tsl/math/voronoiNoise.js +112 -0
  177. package/examples/jsm/tsl/shadows/TileShadowNode.js +4 -6
  178. package/examples/jsm/tsl/utils/Raymarching.js +5 -5
  179. package/examples/jsm/tsl/utils/SoftParticles.js +60 -0
  180. package/examples/jsm/tsl/utils/TAAUtils.js +195 -0
  181. package/examples/jsm/utils/BufferGeometryUtils.js +14 -14
  182. package/examples/jsm/utils/GaussianSplatUtils.js +229 -0
  183. package/examples/jsm/utils/WebGLTextureUtils.js +1 -1
  184. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  185. package/examples/jsm/webxr/WebGLXRFallback.js +2 -16
  186. package/examples/jsm/webxr/XRControllerModelFactory.js +16 -4
  187. package/package.json +9 -16
  188. package/src/Three.Core.js +2 -1
  189. package/src/Three.TSL.js +73 -43
  190. package/src/Three.WebGPU.Nodes.js +1 -0
  191. package/src/Three.WebGPU.js +1 -0
  192. package/src/animation/AnimationClip.js +15 -2
  193. package/src/animation/AnimationObjectGroup.js +18 -6
  194. package/src/animation/AnimationUtils.js +26 -0
  195. package/src/animation/KeyframeTrack.js +37 -0
  196. package/src/constants.js +23 -1
  197. package/src/core/BufferAttribute.js +3 -2
  198. package/src/core/BufferGeometry.js +1 -1
  199. package/src/core/InterleavedBuffer.js +5 -1
  200. package/src/core/Object3D.js +40 -12
  201. package/src/core/Raycaster.js +4 -0
  202. package/src/core/RenderTarget.js +99 -9
  203. package/src/core/RenderTarget3D.js +12 -8
  204. package/src/extras/Controls.js +0 -8
  205. package/src/extras/PMREMGenerator.js +99 -205
  206. package/src/geometries/TorusGeometry.js +1 -1
  207. package/src/helpers/ArrowHelper.js +2 -0
  208. package/src/helpers/AxesHelper.js +2 -0
  209. package/src/helpers/Box3Helper.js +2 -0
  210. package/src/helpers/BoxHelper.js +2 -0
  211. package/src/helpers/CameraHelper.js +2 -0
  212. package/src/helpers/DirectionalLightHelper.js +2 -0
  213. package/src/helpers/GridHelper.js +2 -0
  214. package/src/helpers/HemisphereLightHelper.js +2 -0
  215. package/src/helpers/PlaneHelper.js +2 -0
  216. package/src/helpers/PointLightHelper.js +2 -0
  217. package/src/helpers/PolarGridHelper.js +2 -0
  218. package/src/helpers/SkeletonHelper.js +2 -0
  219. package/src/helpers/SpotLightHelper.js +2 -0
  220. package/src/lights/Light.js +0 -10
  221. package/src/lights/LightShadow.js +43 -12
  222. package/src/lights/SpotLightShadow.js +18 -0
  223. package/src/loaders/BufferGeometryLoader.js +5 -0
  224. package/src/loaders/ImageBitmapLoader.js +3 -1
  225. package/src/loaders/ObjectLoader.js +8 -5
  226. package/src/materials/Material.js +80 -57
  227. package/src/materials/MeshPhysicalMaterial.js +32 -0
  228. package/src/materials/nodes/Line2NodeMaterial.js +17 -8
  229. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +42 -5
  230. package/src/materials/nodes/NodeMaterial.js +19 -13
  231. package/src/materials/nodes/PointsNodeMaterial.js +2 -1
  232. package/src/materials/nodes/manager/NodeMaterialObserver.js +282 -55
  233. package/src/math/Frustum.js +9 -0
  234. package/src/math/FrustumArray.js +1 -1
  235. package/src/math/MathUtils.js +5 -3
  236. package/src/math/Matrix4.js +2 -9
  237. package/src/math/Plane.js +30 -1
  238. package/src/math/Quaternion.js +0 -10
  239. package/src/math/Ray.js +95 -45
  240. package/src/math/Triangle.js +0 -2
  241. package/src/math/Vector3.js +2 -2
  242. package/src/math/Vector4.js +0 -4
  243. package/src/math/interpolants/BezierInterpolant.js +36 -23
  244. package/src/nodes/Nodes.js +2 -0
  245. package/src/nodes/TSL.js +11 -3
  246. package/src/nodes/accessors/Batch.js +85 -13
  247. package/src/nodes/accessors/BufferAttributeNode.js +1 -1
  248. package/src/nodes/accessors/BuiltinNode.js +1 -1
  249. package/src/nodes/accessors/Instance.js +19 -18
  250. package/src/nodes/accessors/MaterialNode.js +9 -0
  251. package/src/nodes/accessors/ModelNode.js +85 -9
  252. package/src/nodes/accessors/ReferenceBaseNode.js +1 -70
  253. package/src/nodes/accessors/ReferenceElementNode.js +72 -0
  254. package/src/nodes/accessors/ReferenceNode.js +1 -70
  255. package/src/nodes/accessors/Skinning.js +124 -12
  256. package/src/nodes/accessors/StorageTextureNode.js +7 -3
  257. package/src/nodes/accessors/Texture3DNode.js +1 -1
  258. package/src/nodes/accessors/TextureNode.js +51 -21
  259. package/src/nodes/accessors/TextureSizeNode.js +4 -2
  260. package/src/nodes/accessors/UniformArrayNode.js +30 -5
  261. package/src/nodes/code/CodeNode.js +1 -1
  262. package/src/nodes/code/FunctionNode.js +12 -2
  263. package/src/nodes/core/ArrayNode.js +2 -2
  264. package/src/nodes/core/ContextNode.js +57 -4
  265. package/src/nodes/core/IndexNode.js +69 -4
  266. package/src/nodes/core/InspectorNode.js +2 -2
  267. package/src/nodes/core/MRTNode.js +44 -2
  268. package/src/nodes/core/Node.js +6 -3
  269. package/src/nodes/core/NodeBuilder.js +65 -50
  270. package/src/nodes/core/NodeFrame.js +11 -3
  271. package/src/nodes/core/NodeUtils.js +88 -0
  272. package/src/nodes/core/PropertyNode.js +8 -0
  273. package/src/nodes/core/StackNode.js +0 -1
  274. package/src/nodes/core/StructNode.js +4 -3
  275. package/src/nodes/core/UniformGroupNode.js +3 -2
  276. package/src/nodes/core/UniformNode.js +26 -12
  277. package/src/nodes/core/VarNode.js +0 -1
  278. package/src/nodes/display/BumpMapNode.js +2 -2
  279. package/src/nodes/display/ColorAdjustment.js +1 -1
  280. package/src/nodes/display/PassNode.js +76 -15
  281. package/src/nodes/display/ScreenNode.js +22 -65
  282. package/src/nodes/fog/Fog.js +4 -4
  283. package/src/nodes/functions/BSDF/BRDF_GGX.js +6 -6
  284. package/src/nodes/functions/BSDF/BRDF_Sheen.js +1 -1
  285. package/src/nodes/functions/BSDF/DFGLUT.js +2 -1
  286. package/src/nodes/functions/BSDF/LTC.js +1 -1
  287. package/src/nodes/functions/PhongLightingModel.js +1 -1
  288. package/src/nodes/functions/PhysicalLightingModel.js +83 -25
  289. package/src/nodes/functions/ToonLightingModel.js +2 -2
  290. package/src/nodes/functions/material/getParallaxCorrectNormal.js +3 -3
  291. package/src/nodes/gpgpu/AtomicFunctionNode.js +64 -13
  292. package/src/nodes/gpgpu/BarrierNode.js +13 -4
  293. package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
  294. package/src/nodes/gpgpu/ComputeNode.js +20 -17
  295. package/src/nodes/gpgpu/SubgroupFunctionNode.js +165 -37
  296. package/src/nodes/gpgpu/WorkgroupInfoNode.js +44 -6
  297. package/src/nodes/lighting/EnvironmentNode.js +40 -4
  298. package/src/nodes/lighting/LightsNode.js +20 -4
  299. package/src/nodes/lighting/ShadowBaseNode.js +158 -1
  300. package/src/nodes/lighting/ShadowFilterNode.js +2 -106
  301. package/src/nodes/lighting/ShadowNode.js +22 -91
  302. package/src/nodes/materialx/{lib/mx_hsv.js → MaterialXColor.js} +3 -6
  303. package/src/nodes/materialx/{lib/mx_transform_color.js → MaterialXColorTransform.js} +3 -6
  304. package/src/nodes/materialx/MaterialXCore.js +37 -0
  305. package/src/nodes/materialx/MaterialXNodes.js +64 -72
  306. package/src/nodes/materialx/{lib/mx_noise.js → MaterialXNoise.js} +426 -197
  307. package/src/nodes/math/BitcountNode.js +24 -4
  308. package/src/nodes/math/MathNode.js +4 -4
  309. package/src/nodes/math/MathUtils.js +15 -4
  310. package/src/nodes/math/OperatorNode.js +2 -2
  311. package/src/nodes/math/PackFloatNode.js +29 -1
  312. package/src/nodes/math/Packed4x8IntegerNode.js +433 -0
  313. package/src/nodes/math/UnpackFloatNode.js +30 -2
  314. package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
  315. package/src/nodes/pmrem/PMREMNode.js +1 -1
  316. package/src/nodes/pmrem/PMREMUtils.js +31 -74
  317. package/src/nodes/shapes/Shapes.js +1 -1
  318. package/src/nodes/tsl/TSLCore.js +1 -31
  319. package/src/nodes/utils/EventNode.js +75 -0
  320. package/src/nodes/utils/LoopNode.js +54 -13
  321. package/src/nodes/utils/PostProcessingUtils.js +23 -2
  322. package/src/nodes/utils/RTTNode.js +97 -32
  323. package/src/nodes/utils/ReflectorNode.js +8 -4
  324. package/src/nodes/utils/RotateNode.js +85 -8
  325. package/src/nodes/utils/SpriteUtils.js +58 -23
  326. package/src/objects/BatchedMesh.js +6 -0
  327. package/src/objects/InstancedMesh.js +1 -1
  328. package/src/objects/LOD.js +1 -1
  329. package/src/objects/Line.js +12 -0
  330. package/src/objects/Mesh.js +12 -0
  331. package/src/objects/Points.js +12 -0
  332. package/src/objects/Sprite.js +12 -0
  333. package/src/renderers/WebGLRenderer.js +93 -27
  334. package/src/renderers/common/Animation.js +12 -2
  335. package/src/renderers/common/Backend.js +38 -10
  336. package/src/renderers/common/BindGroup.js +0 -1
  337. package/src/renderers/common/Bindings.js +50 -4
  338. package/src/renderers/common/BundleGroup.js +4 -0
  339. package/src/renderers/common/ClippingContext.js +11 -1
  340. package/src/renderers/common/Color4.js +9 -0
  341. package/src/renderers/common/Constants.js +0 -5
  342. package/src/renderers/common/DirectRenderPipeline.js +233 -0
  343. package/src/renderers/common/Geometries.js +24 -3
  344. package/src/renderers/common/Info.js +3 -3
  345. package/src/renderers/common/InspectorBase.js +37 -8
  346. package/src/renderers/common/Lighting.js +11 -4
  347. package/src/renderers/common/Pipelines.js +6 -4
  348. package/src/renderers/common/QuadMesh.js +16 -2
  349. package/src/renderers/common/RenderContext.js +8 -0
  350. package/src/renderers/common/RenderList.js +53 -19
  351. package/src/renderers/common/RenderLists.js +58 -11
  352. package/src/renderers/common/RenderObject.js +14 -0
  353. package/src/renderers/common/RenderObjects.js +14 -9
  354. package/src/renderers/common/RenderPipeline.js +52 -44
  355. package/src/renderers/common/Renderer.js +226 -55
  356. package/src/renderers/common/Storage3DTexture.js +16 -0
  357. package/src/renderers/common/Textures.js +3 -3
  358. package/src/renderers/common/XRManager.js +79 -72
  359. package/src/renderers/common/extras/PMREMGenerator.js +76 -144
  360. package/src/renderers/common/nodes/NodeManager.js +144 -6
  361. package/src/renderers/common/nodes/NodeStorageBuffer.js +3 -1
  362. package/src/renderers/common/nodes/NodeUniformBuffer.js +3 -1
  363. package/src/renderers/shaders/DFGLUTData.js +2 -1
  364. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +4 -2
  365. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +48 -0
  366. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +53 -4
  367. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +20 -2
  368. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +20 -0
  369. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +6 -0
  370. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +61 -57
  371. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +82 -0
  372. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +9 -0
  373. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +8 -1
  374. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +15 -0
  375. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -0
  376. package/src/renderers/shaders/ShaderLib.js +1 -0
  377. package/src/renderers/shaders/UniformsLib.js +16 -0
  378. package/src/renderers/webgl/WebGLAnimation.js +2 -2
  379. package/src/renderers/webgl/WebGLCapabilities.js +2 -2
  380. package/src/renderers/webgl/WebGLLights.js +74 -4
  381. package/src/renderers/webgl/WebGLMaterials.js +6 -0
  382. package/src/renderers/webgl/WebGLOutput.js +36 -24
  383. package/src/renderers/webgl/WebGLProgram.js +3 -0
  384. package/src/renderers/webgl/WebGLPrograms.js +8 -0
  385. package/src/renderers/webgl/WebGLRenderLists.js +6 -10
  386. package/src/renderers/webgl/WebGLShadowMap.js +47 -44
  387. package/src/renderers/webgl/WebGLTextures.js +7 -7
  388. package/src/renderers/webgl-fallback/WebGLBackend.js +153 -45
  389. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +83 -29
  390. package/src/renderers/webgl-fallback/utils/WebGLState.js +163 -17
  391. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +32 -5
  392. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +11 -4
  393. package/src/renderers/webgpu/WebGPUBackend.js +513 -145
  394. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +99 -20
  395. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +2 -1
  396. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +3 -12
  397. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +24 -14
  398. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +80 -14
  399. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +62 -7
  400. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +9 -3
  401. package/src/renderers/webgpu/utils/WebGPUUtils.js +16 -4
  402. package/src/renderers/webxr/WebXRManager.js +25 -2
  403. package/src/scenes/Scene.js +3 -3
  404. package/src/textures/CompressedArrayTexture.js +16 -0
  405. package/src/textures/Data3DTexture.js +16 -0
  406. package/src/textures/DataArrayTexture.js +16 -0
  407. package/src/textures/DepthTexture.js +3 -3
  408. package/src/textures/Texture.js +3 -3
  409. package/src/textures/{Source.js → TextureSource.js} +39 -8
  410. package/build/three.core.min.js +0 -6
  411. package/build/three.module.min.js +0 -6
  412. package/build/three.tsl.min.js +0 -6
  413. package/build/three.webgpu.min.js +0 -6
  414. package/build/three.webgpu.nodes.min.js +0 -6
  415. package/examples/jsm/libs/ecsy.module.js +0 -1792
  416. package/examples/jsm/loaders/LottieLoader.js +0 -130
  417. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +0 -52
@@ -157,10 +157,12 @@ class WebGPUTextureUtils {
157
157
  const texture = binding.texture;
158
158
  const textureNode = binding.textureNode;
159
159
 
160
+ const isComparison = texture.isDepthTexture === true && texture.compareFunction !== null && textureNode.isSampleCompare() && backend.hasCompatibility( Compatibility.TEXTURE_COMPARE );
161
+
160
162
  const samplerKey = texture.minFilter + '-' + texture.magFilter + '-' +
161
163
  texture.wrapS + '-' + texture.wrapT + '-' + ( texture.wrapR || '0' ) + '-' +
162
164
  texture.anisotropy + '-' + ( texture.isDepthTexture === true ? 1 : 0 ) + '-' +
163
- ( texture.compareFunction !== null && textureNode.compareNode !== null ? texture.compareFunction : 0 );
165
+ ( isComparison ? texture.compareFunction : 0 );
164
166
 
165
167
  let samplerData = this._samplerCache.get( samplerKey );
166
168
 
@@ -174,7 +176,7 @@ class WebGPUTextureUtils {
174
176
  _samplerDescriptor.mipmapFilter = this._convertMipmapFilterMode( texture.minFilter );
175
177
 
176
178
  // Depth textures without compare function must use non-filtering (nearest) sampling
177
- if ( texture.isDepthTexture && ( texture.compareFunction === null || textureNode.compareNode === null ) ) {
179
+ if ( texture.isDepthTexture && isComparison === false ) {
178
180
 
179
181
  _samplerDescriptor.magFilter = GPUFilterMode.Nearest;
180
182
  _samplerDescriptor.minFilter = GPUFilterMode.Nearest;
@@ -190,7 +192,7 @@ class WebGPUTextureUtils {
190
192
 
191
193
  }
192
194
 
193
- if ( texture.isDepthTexture && texture.compareFunction !== null && textureNode.compareNode !== null && backend.hasCompatibility( Compatibility.TEXTURE_COMPARE ) ) {
195
+ if ( isComparison ) {
194
196
 
195
197
  _samplerDescriptor.compare = _compareToWebGPU[ texture.compareFunction ];
196
198
 
@@ -361,6 +363,20 @@ class WebGPUTextureUtils {
361
363
  textureData.format = format;
362
364
 
363
365
  const { samples, primarySamples, isMSAA } = backend.utils.getTextureSampleData( texture );
366
+ const renderTarget = texture.renderTarget;
367
+
368
+ // WebGPU multisampled 2D textures can only have a single array layer.
369
+ const useSeparateMSAATextures = samples > 1 && renderTarget !== null && depth > 1 && dimension === GPUTextureDimension.TwoD;
370
+ const supportsTransientAttachments = GPUTextureUsage.TRANSIENT_ATTACHMENT !== undefined;
371
+ // Layered rendering can resume after a framebuffer copy, so its attachments must support loading.
372
+ const useTransientAttachments = supportsTransientAttachments && useSeparateMSAATextures === false;
373
+ const useTransientDepthAttachment = texture.isDepthTexture === true &&
374
+ useTransientAttachments &&
375
+ renderTarget?.storeMultisampledDepthBuffer === false &&
376
+ ( renderTarget.stencilBuffer === false || renderTarget.storeMultisampledStencilBuffer === false );
377
+ const useTransientColorAttachment = texture.isDepthTexture !== true &&
378
+ useTransientAttachments &&
379
+ renderTarget?.storeMultisampledColorBuffer === false;
364
380
 
365
381
  let usage = GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.COPY_SRC;
366
382
 
@@ -376,6 +392,14 @@ class WebGPUTextureUtils {
376
392
 
377
393
  }
378
394
 
395
+ // when the multisampled data are discarded, try to use a transient attachment if possible
396
+
397
+ if ( primarySamples > 1 && useTransientDepthAttachment ) {
398
+
399
+ usage = GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TRANSIENT_ATTACHMENT;
400
+
401
+ }
402
+
379
403
  const textureDescriptorGPU = new GPUTextureDescriptor();
380
404
  textureDescriptorGPU.label = texture.name;
381
405
  textureDescriptorGPU.size.width = width;
@@ -416,7 +440,7 @@ class WebGPUTextureUtils {
416
440
 
417
441
  }
418
442
 
419
- if ( isMSAA ) {
443
+ if ( isMSAA || useSeparateMSAATextures ) {
420
444
 
421
445
  const msaaTextureDescriptorGPU = Object.assign( {}, textureDescriptorGPU );
422
446
 
@@ -424,7 +448,32 @@ class WebGPUTextureUtils {
424
448
  msaaTextureDescriptorGPU.sampleCount = samples;
425
449
  msaaTextureDescriptorGPU.mipLevelCount = 1; // See https://www.w3.org/TR/webgpu/#texture-creation
426
450
 
427
- textureData.msaaTexture = backend.device.createTexture( msaaTextureDescriptorGPU );
451
+ // when the multisampled data are discarded, try to use a transient attachment if possible
452
+
453
+ if ( useTransientDepthAttachment || useTransientColorAttachment ) {
454
+
455
+ msaaTextureDescriptorGPU.usage = GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TRANSIENT_ATTACHMENT;
456
+
457
+ }
458
+
459
+ if ( useSeparateMSAATextures ) {
460
+
461
+ msaaTextureDescriptorGPU.size = Object.assign( {}, msaaTextureDescriptorGPU.size, { depthOrArrayLayers: 1 } );
462
+
463
+ textureData.msaaTextures = [];
464
+
465
+ for ( let i = 0; i < depth; i ++ ) {
466
+
467
+ msaaTextureDescriptorGPU.label = textureDescriptorGPU.label + '-msaa-' + i;
468
+ textureData.msaaTextures.push( backend.device.createTexture( msaaTextureDescriptorGPU ) );
469
+
470
+ }
471
+
472
+ } else {
473
+
474
+ textureData.msaaTexture = backend.device.createTexture( msaaTextureDescriptorGPU );
475
+
476
+ }
428
477
 
429
478
  }
430
479
 
@@ -445,10 +494,16 @@ class WebGPUTextureUtils {
445
494
  const backend = this.backend;
446
495
  const textureData = backend.get( texture );
447
496
 
448
- if ( textureData.texture !== undefined && isDefaultTexture === false && texture.isExternalTexture !== true ) textureData.texture.destroy();
497
+ if ( textureData.texture !== undefined && isDefaultTexture === false && texture.isExternalTexture !== true && textureData.externalTexture !== true ) textureData.texture.destroy();
449
498
 
450
499
  if ( textureData.msaaTexture !== undefined ) textureData.msaaTexture.destroy();
451
500
 
501
+ if ( textureData.msaaTextures !== undefined ) {
502
+
503
+ for ( const msaaTexture of textureData.msaaTextures ) msaaTexture.destroy();
504
+
505
+ }
506
+
452
507
  backend.delete( texture );
453
508
 
454
509
  }
@@ -753,7 +808,7 @@ class WebGPUTextureUtils {
753
808
  * @param {number} y - The y coordinate of the copy origin.
754
809
  * @param {number} width - The width of the copy.
755
810
  * @param {number} height - The height of the copy.
756
- * @param {number} faceIndex - The face index.
811
+ * @param {number} faceIndex - The cube face, depth slice or array layer index.
757
812
  * @return {Promise<TypedArray>} A Promise that resolves with a typed array when the copy operation has finished.
758
813
  */
759
814
  async copyTextureToBuffer( texture, x, y, width, height, faceIndex ) {
@@ -1,4 +1,4 @@
1
- import { error, warnOnce } from '../../../utils.js';
1
+ import { error } from '../../../utils.js';
2
2
  import TimestampQueryPool from '../../common/TimestampQueryPool.js';
3
3
  import { submit } from './WebGPUUtils.js';
4
4
  import GPUBufferDescriptor from '../descriptors/GPUBufferDescriptor.js';
@@ -70,8 +70,10 @@ class WebGPUTimestampQueryPool extends TimestampQueryPool {
70
70
 
71
71
  if ( this.currentQueryIndex + 2 > this.maxQueries ) {
72
72
 
73
- warnOnce( `WebGPUTimestampQueryPool [${ this.type }]: Maximum number of queries exceeded, when using trackTimestamp it is necessary to resolves the queries via renderer.resolveTimestampsAsync( THREE.TimestampQuery.${ this.type.toUpperCase() } ).` );
74
- return null;
73
+ this.resolveQueriesAsync();
74
+
75
+ this.currentQueryIndex = 0;
76
+ this.queryOffsets.clear();
75
77
 
76
78
  }
77
79
 
@@ -213,6 +215,8 @@ class WebGPUTimestampQueryPool extends TimestampQueryPool {
213
215
 
214
216
  const frames = [];
215
217
 
218
+ this.timestamps.clear();
219
+
216
220
  for ( const [ uid, offsetOrOffsets ] of currentOffsets ) {
217
221
 
218
222
  const match = uid.match( /^(.*):f(\d+)$/ );
@@ -352,6 +356,8 @@ class WebGPUTimestampQueryPool extends TimestampQueryPool {
352
356
  }
353
357
 
354
358
  this.queryOffsets.clear();
359
+ this.timestamps.clear();
360
+ this.frames = [];
355
361
  // WITH_GENESYS
356
362
  this.timestampRanges.clear();
357
363
  // !WITH_GENESYS
@@ -111,10 +111,21 @@ class WebGPUUtils {
111
111
 
112
112
  } else if ( texture.isDepthTexture && ! texture.renderTarget ) {
113
113
 
114
- const renderer = this.backend.renderer;
115
- const renderTarget = renderer.getRenderTarget();
114
+ const textureData = this.backend.get( texture );
116
115
 
117
- samples = renderTarget ? renderTarget.samples : renderer.currentSamples;
116
+ if ( textureData.texture !== undefined ) {
117
+
118
+ // use the effective sample count of the allocated texture
119
+
120
+ samples = textureData.texture.sampleCount;
121
+
122
+ } else {
123
+
124
+ // otherwise use the current samples of the renderer
125
+
126
+ samples = this.backend.renderer.currentSamples;
127
+
128
+ }
118
129
 
119
130
  } else if ( texture.renderTarget ) {
120
131
 
@@ -125,7 +136,8 @@ class WebGPUUtils {
125
136
  samples = this.getSampleCount( samples || 1 );
126
137
 
127
138
  const isMSAA = samples > 1 && texture.renderTarget !== null && ( texture.isDepthTexture !== true && texture.isFramebufferTexture !== true );
128
- const primarySamples = isMSAA ? 1 : samples;
139
+ const isMSAAArrayDepthTexture = samples > 1 && texture.renderTarget !== null && texture.isDepthTexture === true && texture.isArrayTexture === true;
140
+ const primarySamples = isMSAA || isMSAAArrayDepthTexture ? 1 : samples;
129
141
 
130
142
  return { samples, primarySamples, isMSAA };
131
143
 
@@ -67,6 +67,7 @@ class WebXRManager extends EventDispatcher {
67
67
 
68
68
  const currentSize = new Vector2();
69
69
  let currentPixelRatio = null;
70
+ let currentCameraSettings = null;
70
71
 
71
72
  //
72
73
 
@@ -262,6 +263,18 @@ class WebXRManager extends EventDispatcher {
262
263
  renderer.setPixelRatio( currentPixelRatio );
263
264
  renderer.setSize( currentSize.width, currentSize.height, false );
264
265
 
266
+ if ( currentCameraSettings !== null ) {
267
+
268
+ const camera = currentCameraSettings.camera;
269
+
270
+ camera.fov = currentCameraSettings.fov;
271
+ camera.zoom = currentCameraSettings.zoom;
272
+ camera.updateProjectionMatrix();
273
+
274
+ currentCameraSettings = null;
275
+
276
+ }
277
+
265
278
  scope.dispatchEvent( { type: 'sessionend' } );
266
279
 
267
280
  }
@@ -451,7 +464,9 @@ class WebXRManager extends EventDispatcher {
451
464
  colorSpace: renderer.outputColorSpace,
452
465
  stencilBuffer: attributes.stencil,
453
466
  resolveDepthBuffer: ( glBaseLayer.ignoreDepthValues === false ),
454
- resolveStencilBuffer: ( glBaseLayer.ignoreDepthValues === false )
467
+ resolveStencilBuffer: ( glBaseLayer.ignoreDepthValues === false ),
468
+ storeMultisampledDepthBuffer: ( glBaseLayer.ignoreDepthValues === false ),
469
+ storeMultisampledStencilBuffer: ( glBaseLayer.ignoreDepthValues === false )
455
470
 
456
471
  }
457
472
  );
@@ -496,7 +511,9 @@ class WebXRManager extends EventDispatcher {
496
511
  colorSpace: renderer.outputColorSpace,
497
512
  samples: attributes.antialias ? 4 : 0,
498
513
  resolveDepthBuffer: ( glProjLayer.ignoreDepthValues === false ),
499
- resolveStencilBuffer: ( glProjLayer.ignoreDepthValues === false )
514
+ resolveStencilBuffer: ( glProjLayer.ignoreDepthValues === false ),
515
+ storeMultisampledDepthBuffer: ( glProjLayer.ignoreDepthValues === false ),
516
+ storeMultisampledStencilBuffer: ( glProjLayer.ignoreDepthValues === false )
500
517
  } );
501
518
 
502
519
  }
@@ -779,6 +796,12 @@ class WebXRManager extends EventDispatcher {
779
796
 
780
797
  // update user camera and its children
781
798
 
799
+ if ( currentCameraSettings === null && camera.isPerspectiveCamera ) {
800
+
801
+ currentCameraSettings = { camera: camera, fov: camera.fov, zoom: camera.zoom };
802
+
803
+ }
804
+
782
805
  updateUserCamera( camera, cameraXR, parent );
783
806
 
784
807
  };
@@ -149,11 +149,11 @@ class Scene extends Object3D {
149
149
 
150
150
  if ( this.fog !== null ) data.object.fog = this.fog.toJSON();
151
151
 
152
- if ( this.backgroundBlurriness > 0 ) data.object.backgroundBlurriness = this.backgroundBlurriness;
153
- if ( this.backgroundIntensity !== 1 ) data.object.backgroundIntensity = this.backgroundIntensity;
152
+ data.object.backgroundBlurriness = this.backgroundBlurriness;
153
+ data.object.backgroundIntensity = this.backgroundIntensity;
154
154
  data.object.backgroundRotation = this.backgroundRotation.toArray();
155
155
 
156
- if ( this.environmentIntensity !== 1 ) data.object.environmentIntensity = this.environmentIntensity;
156
+ data.object.environmentIntensity = this.environmentIntensity;
157
157
  data.object.environmentRotation = this.environmentRotation.toArray();
158
158
 
159
159
  return data;
@@ -60,6 +60,22 @@ class CompressedArrayTexture extends CompressedTexture {
60
60
 
61
61
  }
62
62
 
63
+ /**
64
+ * Copies the values of the given texture to this instance.
65
+ *
66
+ * @param {CompressedArrayTexture} source - The texture to copy.
67
+ * @return {CompressedArrayTexture} A reference to this instance.
68
+ */
69
+ copy( source ) {
70
+
71
+ super.copy( source );
72
+
73
+ this.wrapR = source.wrapR;
74
+
75
+ return this;
76
+
77
+ }
78
+
63
79
  /**
64
80
  * Describes that a specific layer of the texture needs to be updated.
65
81
  * Normally when {@link Texture#needsUpdate} is set to `true`, the
@@ -107,6 +107,22 @@ class Data3DTexture extends Texture {
107
107
 
108
108
  }
109
109
 
110
+ /**
111
+ * Copies the values of the given texture to this instance.
112
+ *
113
+ * @param {Data3DTexture} source - The texture to copy.
114
+ * @return {Data3DTexture} A reference to this instance.
115
+ */
116
+ copy( source ) {
117
+
118
+ super.copy( source );
119
+
120
+ this.wrapR = source.wrapR;
121
+
122
+ return this;
123
+
124
+ }
125
+
110
126
  }
111
127
 
112
128
  export { Data3DTexture };
@@ -105,6 +105,22 @@ class DataArrayTexture extends Texture {
105
105
 
106
106
  }
107
107
 
108
+ /**
109
+ * Copies the values of the given texture to this instance.
110
+ *
111
+ * @param {DataArrayTexture} source - The texture to copy.
112
+ * @return {DataArrayTexture} A reference to this instance.
113
+ */
114
+ copy( source ) {
115
+
116
+ super.copy( source );
117
+
118
+ this.wrapR = source.wrapR;
119
+
120
+ return this;
121
+
122
+ }
123
+
108
124
  /**
109
125
  * Describes that a specific layer of the texture needs to be updated.
110
126
  * Normally when {@link Texture#needsUpdate} is set to `true`, the
@@ -1,4 +1,4 @@
1
- import { Source } from './Source.js';
1
+ import { TextureSource } from './TextureSource.js';
2
2
  import { Texture } from './Texture.js';
3
3
  import { NearestFilter, UnsignedIntType, DepthFormat, DepthStencilFormat } from '../constants.js';
4
4
 
@@ -82,7 +82,7 @@ class DepthTexture extends Texture {
82
82
 
83
83
  super.copy( source );
84
84
 
85
- this.source = new Source( Object.assign( {}, source.image ) ); // see #30540
85
+ this.source = new TextureSource( Object.assign( {}, source.image ) ); // see #30540
86
86
  this.compareFunction = source.compareFunction;
87
87
 
88
88
  return this;
@@ -93,7 +93,7 @@ class DepthTexture extends Texture {
93
93
 
94
94
  const data = super.toJSON( meta );
95
95
 
96
- if ( this.compareFunction !== null ) data.compareFunction = this.compareFunction;
96
+ data.compareFunction = this.compareFunction;
97
97
 
98
98
  return data;
99
99
 
@@ -14,7 +14,7 @@ import { generateUUID } from '../math/MathUtils.js';
14
14
  import { Vector2 } from '../math/Vector2.js';
15
15
  import { Vector3 } from '../math/Vector3.js';
16
16
  import { Matrix3 } from '../math/Matrix3.js';
17
- import { Source } from './Source.js';
17
+ import { TextureSource } from './TextureSource.js';
18
18
  import { warn } from '../utils.js';
19
19
 
20
20
  let _textureId = 0;
@@ -88,9 +88,9 @@ class Texture extends EventDispatcher {
88
88
  * where multiple textures render the same data but with different texture
89
89
  * transformations.
90
90
  *
91
- * @type {Source}
91
+ * @type {TextureSource}
92
92
  */
93
- this.source = new Source( image );
93
+ this.source = new TextureSource( image );
94
94
 
95
95
  /**
96
96
  * An array holding user-defined mipmaps.
@@ -1,6 +1,6 @@
1
1
  import { ImageUtils } from '../extras/ImageUtils.js';
2
2
  import { generateUUID } from '../math/MathUtils.js';
3
- import { warn } from '../utils.js';
3
+ import { warn, warnOnce } from '../utils.js';
4
4
 
5
5
  let _sourceId = 0;
6
6
 
@@ -10,10 +10,10 @@ let _sourceId = 0;
10
10
  * The main purpose of this class is to decouple the data definition from the texture
11
11
  * definition so the same data can be used with multiple texture instances.
12
12
  */
13
- class Source {
13
+ class TextureSource {
14
14
 
15
15
  /**
16
- * Constructs a new video texture.
16
+ * Constructs a new texture source.
17
17
  *
18
18
  * @param {any} [data=null] - The data definition of a texture.
19
19
  */
@@ -26,12 +26,12 @@ class Source {
26
26
  * @readonly
27
27
  * @default true
28
28
  */
29
- this.isSource = true;
29
+ this.isTextureSource = true;
30
30
 
31
31
  /**
32
32
  * The ID of the source.
33
33
  *
34
- * @name Source#id
34
+ * @name TextureSource#id
35
35
  * @type {number}
36
36
  * @readonly
37
37
  */
@@ -53,7 +53,7 @@ class Source {
53
53
  this.data = data;
54
54
 
55
55
  /**
56
- * This property is only relevant when {@link Source#needsUpdate} is set to `true` and
56
+ * This property is only relevant when {@link TextureSource#needsUpdate} is set to `true` and
57
57
  * provides more control on how texture data should be processed. When `dataReady` is set
58
58
  * to `false`, the engine performs the memory allocation (if necessary) but does not transfer
59
59
  * the data into the GPU memory.
@@ -64,7 +64,7 @@ class Source {
64
64
  this.dataReady = true;
65
65
 
66
66
  /**
67
- * This starts at `0` and counts how many times {@link Source#needsUpdate} is set to `true`.
67
+ * This starts at `0` and counts how many times {@link TextureSource#needsUpdate} is set to `true`.
68
68
  *
69
69
  * @type {number}
70
70
  * @readonly
@@ -227,4 +227,35 @@ function serializeImage( image ) {
227
227
 
228
228
  }
229
229
 
230
- export { Source };
230
+ /**
231
+ * @deprecated since r186. Use {@link TextureSource} instead. `Source` has been renamed to `TextureSource`.
232
+ */
233
+ class Source extends TextureSource {
234
+
235
+ /**
236
+ * Constructs a new texture source.
237
+ *
238
+ * @param {any} [data=null] - The data definition of a texture.
239
+ * @deprecated since r186. Use {@link TextureSource} instead.
240
+ */
241
+ constructor( data = null ) {
242
+
243
+ warnOnce( 'Source: "Source" has been renamed to "TextureSource". Please update your code to use "THREE.TextureSource" instead.' ); // @deprecated, r186
244
+
245
+ super( data );
246
+
247
+ /**
248
+ * This flag can be used for type testing.
249
+ *
250
+ * @deprecated since r186. Use {@link TextureSource#isTextureSource} instead.
251
+ * @type {boolean}
252
+ * @readonly
253
+ * @default true
254
+ */
255
+ this.isSource = true;
256
+
257
+ }
258
+
259
+ }
260
+
261
+ export { Source, TextureSource };