super-three 0.176.0 → 0.179.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (571) hide show
  1. package/README.md +4 -4
  2. package/build/three.cjs +8377 -6761
  3. package/build/three.core.js +8001 -6682
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +378 -82
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +84 -27
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +6829 -2835
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +6646 -2835
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/jsm/Addons.js +1 -3
  14. package/examples/jsm/animation/AnimationClipCreator.js +1 -0
  15. package/examples/jsm/animation/CCDIKSolver.js +6 -3
  16. package/examples/jsm/capabilities/WebGL.js +1 -27
  17. package/examples/jsm/capabilities/WebGPU.js +2 -1
  18. package/examples/jsm/controls/ArcballControls.js +15 -4
  19. package/examples/jsm/controls/DragControls.js +1 -0
  20. package/examples/jsm/controls/FirstPersonControls.js +1 -0
  21. package/examples/jsm/controls/FlyControls.js +1 -0
  22. package/examples/jsm/controls/MapControls.js +1 -0
  23. package/examples/jsm/controls/OrbitControls.js +1 -0
  24. package/examples/jsm/controls/PointerLockControls.js +5 -3
  25. package/examples/jsm/controls/TrackballControls.js +1 -0
  26. package/examples/jsm/controls/TransformControls.js +62 -14
  27. package/examples/jsm/csm/CSM.js +2 -0
  28. package/examples/jsm/csm/CSMFrustum.js +2 -0
  29. package/examples/jsm/csm/CSMHelper.js +1 -0
  30. package/examples/jsm/csm/CSMShader.js +4 -1
  31. package/examples/jsm/csm/CSMShadowNode.js +22 -8
  32. package/examples/jsm/curves/CurveExtras.js +14 -0
  33. package/examples/jsm/curves/NURBSCurve.js +1 -0
  34. package/examples/jsm/curves/NURBSSurface.js +2 -0
  35. package/examples/jsm/curves/NURBSUtils.js +4 -1
  36. package/examples/jsm/curves/NURBSVolume.js +2 -0
  37. package/examples/jsm/effects/AnaglyphEffect.js +2 -0
  38. package/examples/jsm/effects/AsciiEffect.js +2 -0
  39. package/examples/jsm/effects/OutlineEffect.js +2 -0
  40. package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -0
  41. package/examples/jsm/effects/StereoEffect.js +2 -0
  42. package/examples/jsm/environments/DebugEnvironment.js +1 -0
  43. package/examples/jsm/environments/RoomEnvironment.js +57 -38
  44. package/examples/jsm/exporters/DRACOExporter.js +4 -2
  45. package/examples/jsm/exporters/EXRExporter.js +2 -0
  46. package/examples/jsm/exporters/GLTFExporter.js +7 -4
  47. package/examples/jsm/exporters/KTX2Exporter.js +2 -0
  48. package/examples/jsm/exporters/OBJExporter.js +3 -1
  49. package/examples/jsm/exporters/PLYExporter.js +4 -2
  50. package/examples/jsm/exporters/STLExporter.js +2 -0
  51. package/examples/jsm/exporters/USDZExporter.js +679 -300
  52. package/examples/jsm/geometries/BoxLineGeometry.js +1 -0
  53. package/examples/jsm/geometries/ConvexGeometry.js +1 -0
  54. package/examples/jsm/geometries/DecalGeometry.js +1 -0
  55. package/examples/jsm/geometries/ParametricFunctions.js +4 -1
  56. package/examples/jsm/geometries/ParametricGeometry.js +1 -0
  57. package/examples/jsm/geometries/RoundedBoxGeometry.js +48 -8
  58. package/examples/jsm/geometries/TeapotGeometry.js +1 -0
  59. package/examples/jsm/geometries/TextGeometry.js +1 -0
  60. package/examples/jsm/helpers/LightProbeHelper.js +1 -0
  61. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -0
  62. package/examples/jsm/helpers/OctreeHelper.js +1 -0
  63. package/examples/jsm/helpers/PositionalAudioHelper.js +1 -0
  64. package/examples/jsm/helpers/RapierHelper.js +59 -0
  65. package/examples/jsm/helpers/RectAreaLightHelper.js +1 -0
  66. package/examples/jsm/helpers/TextureHelper.js +1 -0
  67. package/examples/jsm/helpers/TextureHelperGPU.js +5 -4
  68. package/examples/jsm/helpers/VertexNormalsHelper.js +1 -0
  69. package/examples/jsm/helpers/VertexTangentsHelper.js +1 -0
  70. package/examples/jsm/helpers/ViewHelper.js +1 -0
  71. package/examples/jsm/interactive/HTMLMesh.js +11 -2
  72. package/examples/jsm/interactive/InteractiveGroup.js +1 -0
  73. package/examples/jsm/interactive/SelectionBox.js +2 -0
  74. package/examples/jsm/interactive/SelectionHelper.js +2 -0
  75. package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
  76. package/examples/jsm/lighting/TiledLighting.js +1 -0
  77. package/examples/jsm/lights/LightProbeGenerator.js +15 -3
  78. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -0
  79. package/examples/jsm/lights/RectAreaLightUniformsLib.js +1 -0
  80. package/examples/jsm/lines/Line2.js +1 -0
  81. package/examples/jsm/lines/LineGeometry.js +1 -0
  82. package/examples/jsm/lines/LineMaterial.js +4 -4
  83. package/examples/jsm/lines/LineSegments2.js +1 -0
  84. package/examples/jsm/lines/LineSegmentsGeometry.js +1 -0
  85. package/examples/jsm/lines/Wireframe.js +1 -0
  86. package/examples/jsm/lines/WireframeGeometry2.js +1 -0
  87. package/examples/jsm/lines/webgpu/Line2.js +1 -0
  88. package/examples/jsm/lines/webgpu/LineSegments2.js +3 -1
  89. package/examples/jsm/lines/webgpu/Wireframe.js +1 -0
  90. package/examples/jsm/loaders/3DMLoader.js +1 -0
  91. package/examples/jsm/loaders/3MFLoader.js +1 -0
  92. package/examples/jsm/loaders/AMFLoader.js +1 -0
  93. package/examples/jsm/loaders/BVHLoader.js +1 -0
  94. package/examples/jsm/loaders/ColladaLoader.js +6 -5
  95. package/examples/jsm/loaders/DDSLoader.js +1 -0
  96. package/examples/jsm/loaders/DRACOLoader.js +2 -1
  97. package/examples/jsm/loaders/EXRLoader.js +211 -22
  98. package/examples/jsm/loaders/FBXLoader.js +25 -23
  99. package/examples/jsm/loaders/FontLoader.js +1 -0
  100. package/examples/jsm/loaders/GCodeLoader.js +1 -0
  101. package/examples/jsm/loaders/GLTFLoader.js +10 -82
  102. package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -0
  103. package/examples/jsm/loaders/IESLoader.js +1 -0
  104. package/examples/jsm/loaders/KMZLoader.js +1 -0
  105. package/examples/jsm/loaders/KTX2Loader.js +67 -26
  106. package/examples/jsm/loaders/KTXLoader.js +1 -0
  107. package/examples/jsm/loaders/LDrawLoader.js +55 -3
  108. package/examples/jsm/loaders/LUT3dlLoader.js +1 -0
  109. package/examples/jsm/loaders/LUTCubeLoader.js +1 -0
  110. package/examples/jsm/loaders/LUTImageLoader.js +1 -0
  111. package/examples/jsm/loaders/LWOLoader.js +1 -13
  112. package/examples/jsm/loaders/LottieLoader.js +15 -0
  113. package/examples/jsm/loaders/MD2Loader.js +1 -0
  114. package/examples/jsm/loaders/MDDLoader.js +1 -0
  115. package/examples/jsm/loaders/MTLLoader.js +4 -3
  116. package/examples/jsm/loaders/MaterialXLoader.js +213 -30
  117. package/examples/jsm/loaders/NRRDLoader.js +1 -0
  118. package/examples/jsm/loaders/OBJLoader.js +1 -0
  119. package/examples/jsm/loaders/PCDLoader.js +122 -19
  120. package/examples/jsm/loaders/PDBLoader.js +1 -0
  121. package/examples/jsm/loaders/PLYLoader.js +1 -0
  122. package/examples/jsm/loaders/PVRLoader.js +1 -0
  123. package/examples/jsm/loaders/RGBELoader.js +1 -0
  124. package/examples/jsm/loaders/RGBMLoader.js +1 -0
  125. package/examples/jsm/loaders/STLLoader.js +1 -0
  126. package/examples/jsm/loaders/SVGLoader.js +1 -0
  127. package/examples/jsm/loaders/TDSLoader.js +1 -0
  128. package/examples/jsm/loaders/TGALoader.js +1 -0
  129. package/examples/jsm/loaders/TIFFLoader.js +1 -0
  130. package/examples/jsm/loaders/TTFLoader.js +14 -1
  131. package/examples/jsm/loaders/USDLoader.js +219 -0
  132. package/examples/jsm/loaders/USDZLoader.js +4 -891
  133. package/examples/jsm/loaders/UltraHDRLoader.js +1 -0
  134. package/examples/jsm/loaders/VOXLoader.js +1 -0
  135. package/examples/jsm/loaders/VRMLLoader.js +3 -2
  136. package/examples/jsm/loaders/VTKLoader.js +1 -0
  137. package/examples/jsm/loaders/XYZLoader.js +1 -0
  138. package/examples/jsm/loaders/lwo/IFFParser.js +74 -74
  139. package/examples/jsm/loaders/usd/USDAParser.js +741 -0
  140. package/examples/jsm/loaders/usd/USDCParser.js +17 -0
  141. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +1 -0
  142. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -0
  143. package/examples/jsm/materials/MeshPostProcessingMaterial.js +1 -0
  144. package/examples/jsm/math/Capsule.js +2 -0
  145. package/examples/jsm/math/ColorConverter.js +1 -0
  146. package/examples/jsm/math/ConvexHull.js +2 -0
  147. package/examples/jsm/math/ImprovedNoise.js +19 -14
  148. package/examples/jsm/math/Lut.js +2 -0
  149. package/examples/jsm/math/MeshSurfaceSampler.js +2 -0
  150. package/examples/jsm/math/OBB.js +2 -0
  151. package/examples/jsm/math/Octree.js +20 -1
  152. package/examples/jsm/math/SimplexNoise.js +2 -0
  153. package/examples/jsm/misc/ConvexObjectBreaker.js +3 -1
  154. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  155. package/examples/jsm/misc/Gyroscope.js +1 -0
  156. package/examples/jsm/misc/MD2Character.js +2 -0
  157. package/examples/jsm/misc/MD2CharacterComplex.js +5 -3
  158. package/examples/jsm/misc/MorphAnimMesh.js +1 -0
  159. package/examples/jsm/misc/MorphBlendMesh.js +1 -0
  160. package/examples/jsm/misc/ProgressiveLightMap.js +2 -0
  161. package/examples/jsm/misc/ProgressiveLightMapGPU.js +2 -0
  162. package/examples/jsm/misc/RollerCoaster.js +5 -0
  163. package/examples/jsm/misc/TubePainter.js +1 -0
  164. package/examples/jsm/misc/Volume.js +2 -0
  165. package/examples/jsm/misc/VolumeSlice.js +1 -0
  166. package/examples/jsm/modifiers/CurveModifier.js +3 -0
  167. package/examples/jsm/modifiers/CurveModifierGPU.js +2 -0
  168. package/examples/jsm/modifiers/EdgeSplitModifier.js +2 -0
  169. package/examples/jsm/modifiers/SimplifyModifier.js +2 -0
  170. package/examples/jsm/modifiers/TessellateModifier.js +2 -0
  171. package/examples/jsm/objects/GroundedSkybox.js +1 -0
  172. package/examples/jsm/objects/Lensflare.js +3 -0
  173. package/examples/jsm/objects/LensflareMesh.js +4 -3
  174. package/examples/jsm/objects/MarchingCubes.js +2 -0
  175. package/examples/jsm/objects/Reflector.js +1 -0
  176. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  177. package/examples/jsm/objects/Refractor.js +1 -0
  178. package/examples/jsm/objects/ShadowMesh.js +1 -0
  179. package/examples/jsm/objects/Sky.js +2 -1
  180. package/examples/jsm/objects/SkyMesh.js +22 -19
  181. package/examples/jsm/objects/Water.js +1 -0
  182. package/examples/jsm/objects/Water2.js +1 -0
  183. package/examples/jsm/objects/Water2Mesh.js +3 -1
  184. package/examples/jsm/objects/WaterMesh.js +2 -1
  185. package/examples/jsm/physics/AmmoPhysics.js +1 -0
  186. package/examples/jsm/physics/JoltPhysics.js +1 -0
  187. package/examples/jsm/physics/RapierPhysics.js +149 -13
  188. package/examples/jsm/postprocessing/AfterimagePass.js +20 -2
  189. package/examples/jsm/postprocessing/BloomPass.js +2 -1
  190. package/examples/jsm/postprocessing/BokehPass.js +2 -1
  191. package/examples/jsm/postprocessing/ClearPass.js +1 -0
  192. package/examples/jsm/postprocessing/CubeTexturePass.js +1 -0
  193. package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
  194. package/examples/jsm/postprocessing/EffectComposer.js +5 -6
  195. package/examples/jsm/postprocessing/FXAAPass.js +40 -0
  196. package/examples/jsm/postprocessing/FilmPass.js +1 -0
  197. package/examples/jsm/postprocessing/GTAOPass.js +14 -12
  198. package/examples/jsm/postprocessing/GlitchPass.js +2 -1
  199. package/examples/jsm/postprocessing/HalftonePass.js +2 -1
  200. package/examples/jsm/postprocessing/LUTPass.js +1 -0
  201. package/examples/jsm/postprocessing/MaskPass.js +1 -0
  202. package/examples/jsm/postprocessing/OutlinePass.js +22 -19
  203. package/examples/jsm/postprocessing/OutputPass.js +1 -0
  204. package/examples/jsm/postprocessing/Pass.js +3 -1
  205. package/examples/jsm/postprocessing/RenderPass.js +1 -0
  206. package/examples/jsm/postprocessing/RenderPixelatedPass.js +2 -1
  207. package/examples/jsm/postprocessing/RenderTransitionPass.js +4 -3
  208. package/examples/jsm/postprocessing/SAOPass.js +3 -2
  209. package/examples/jsm/postprocessing/SMAAPass.js +3 -2
  210. package/examples/jsm/postprocessing/SSAARenderPass.js +2 -1
  211. package/examples/jsm/postprocessing/SSAOPass.js +12 -10
  212. package/examples/jsm/postprocessing/SSRPass.js +4 -3
  213. package/examples/jsm/postprocessing/SavePass.js +2 -1
  214. package/examples/jsm/postprocessing/ShaderPass.js +1 -0
  215. package/examples/jsm/postprocessing/TAARenderPass.js +1 -0
  216. package/examples/jsm/postprocessing/TexturePass.js +1 -0
  217. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -1
  218. package/examples/jsm/renderers/CSS2DRenderer.js +3 -0
  219. package/examples/jsm/renderers/CSS3DRenderer.js +4 -0
  220. package/examples/jsm/renderers/Projector.js +2 -0
  221. package/examples/jsm/renderers/SVGRenderer.js +3 -0
  222. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +4 -1
  223. package/examples/jsm/shaders/AfterimageShader.js +4 -1
  224. package/examples/jsm/shaders/BasicShader.js +4 -1
  225. package/examples/jsm/shaders/BleachBypassShader.js +4 -1
  226. package/examples/jsm/shaders/BlendShader.js +4 -1
  227. package/examples/jsm/shaders/BokehShader.js +4 -1
  228. package/examples/jsm/shaders/BokehShader2.js +4 -1
  229. package/examples/jsm/shaders/BrightnessContrastShader.js +4 -1
  230. package/examples/jsm/shaders/ColorCorrectionShader.js +4 -1
  231. package/examples/jsm/shaders/ColorifyShader.js +4 -1
  232. package/examples/jsm/shaders/ConvolutionShader.js +4 -1
  233. package/examples/jsm/shaders/CopyShader.js +4 -1
  234. package/examples/jsm/shaders/DOFMipMapShader.js +4 -1
  235. package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
  236. package/examples/jsm/shaders/DigitalGlitch.js +4 -1
  237. package/examples/jsm/shaders/DotScreenShader.js +4 -1
  238. package/examples/jsm/shaders/ExposureShader.js +4 -1
  239. package/examples/jsm/shaders/FXAAShader.js +4 -1
  240. package/examples/jsm/shaders/FilmShader.js +4 -1
  241. package/examples/jsm/shaders/FocusShader.js +4 -1
  242. package/examples/jsm/shaders/FreiChenShader.js +4 -1
  243. package/examples/jsm/shaders/GTAOShader.js +4 -1
  244. package/examples/jsm/shaders/GammaCorrectionShader.js +4 -1
  245. package/examples/jsm/shaders/GodRaysShader.js +4 -1
  246. package/examples/jsm/shaders/HalftoneShader.js +4 -1
  247. package/examples/jsm/shaders/HorizontalBlurShader.js +4 -1
  248. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +4 -1
  249. package/examples/jsm/shaders/HueSaturationShader.js +4 -1
  250. package/examples/jsm/shaders/KaleidoShader.js +4 -1
  251. package/examples/jsm/shaders/LuminosityHighPassShader.js +4 -1
  252. package/examples/jsm/shaders/LuminosityShader.js +4 -1
  253. package/examples/jsm/shaders/MirrorShader.js +4 -1
  254. package/examples/jsm/shaders/NormalMapShader.js +4 -1
  255. package/examples/jsm/shaders/OutputShader.js +4 -1
  256. package/examples/jsm/shaders/PoissonDenoiseShader.js +4 -1
  257. package/examples/jsm/shaders/RGBShiftShader.js +4 -1
  258. package/examples/jsm/shaders/SAOShader.js +4 -1
  259. package/examples/jsm/shaders/SMAAShader.js +1 -0
  260. package/examples/jsm/shaders/SSAOShader.js +4 -1
  261. package/examples/jsm/shaders/SSRShader.js +1 -0
  262. package/examples/jsm/shaders/SepiaShader.js +4 -1
  263. package/examples/jsm/shaders/SobelOperatorShader.js +4 -1
  264. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +4 -1
  265. package/examples/jsm/shaders/TechnicolorShader.js +4 -1
  266. package/examples/jsm/shaders/ToonShader.js +2 -1
  267. package/examples/jsm/shaders/TriangleBlurShader.js +4 -1
  268. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +15 -3
  269. package/examples/jsm/shaders/VelocityShader.js +4 -1
  270. package/examples/jsm/shaders/VerticalBlurShader.js +4 -1
  271. package/examples/jsm/shaders/VerticalTiltShiftShader.js +4 -1
  272. package/examples/jsm/shaders/VignetteShader.js +4 -1
  273. package/examples/jsm/shaders/VolumeShader.js +5 -2
  274. package/examples/jsm/shaders/WaterRefractionShader.js +4 -1
  275. package/examples/jsm/textures/FlakesTexture.js +2 -0
  276. package/examples/jsm/transpiler/AST.js +381 -30
  277. package/examples/jsm/transpiler/GLSLDecoder.js +227 -88
  278. package/examples/jsm/transpiler/Linker.js +327 -0
  279. package/examples/jsm/transpiler/TSLEncoder.js +234 -85
  280. package/examples/jsm/transpiler/Transpiler.js +19 -1
  281. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  282. package/examples/jsm/transpiler/WGSLEncoder.js +788 -0
  283. package/examples/jsm/tsl/display/AfterImageNode.js +2 -3
  284. package/examples/jsm/tsl/display/AnaglyphPassNode.js +1 -0
  285. package/examples/jsm/tsl/display/AnamorphicNode.js +5 -4
  286. package/examples/jsm/tsl/display/BloomNode.js +9 -7
  287. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +206 -0
  288. package/examples/jsm/tsl/display/DenoiseNode.js +33 -33
  289. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -0
  290. package/examples/jsm/tsl/display/DotScreenNode.js +1 -0
  291. package/examples/jsm/tsl/display/FXAANode.js +3 -2
  292. package/examples/jsm/tsl/display/FilmNode.js +1 -0
  293. package/examples/jsm/tsl/display/GTAONode.js +1 -0
  294. package/examples/jsm/tsl/display/GaussianBlurNode.js +9 -36
  295. package/examples/jsm/tsl/display/LensflareNode.js +1 -0
  296. package/examples/jsm/tsl/display/Lut3DNode.js +1 -0
  297. package/examples/jsm/tsl/display/OutlineNode.js +1 -0
  298. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +1 -0
  299. package/examples/jsm/tsl/display/PixelationPassNode.js +1 -0
  300. package/examples/jsm/tsl/display/RGBShiftNode.js +1 -0
  301. package/examples/jsm/tsl/display/SMAANode.js +9 -8
  302. package/examples/jsm/tsl/display/SSAAPassNode.js +5 -4
  303. package/examples/jsm/tsl/display/SSRNode.js +1 -0
  304. package/examples/jsm/tsl/display/SobelOperatorNode.js +1 -0
  305. package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -0
  306. package/examples/jsm/tsl/display/StereoPassNode.js +1 -0
  307. package/examples/jsm/tsl/display/{TRAAPassNode.js → TRAANode.js} +184 -174
  308. package/examples/jsm/tsl/display/TransitionNode.js +1 -0
  309. package/examples/jsm/tsl/display/hashBlur.js +28 -6
  310. package/examples/jsm/tsl/lighting/TiledLightsNode.js +5 -4
  311. package/examples/jsm/tsl/math/Bayer.js +4 -1
  312. package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
  313. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
  314. package/examples/jsm/tsl/utils/Raymarching.js +6 -3
  315. package/examples/jsm/utils/BufferGeometryUtils.js +4 -1
  316. package/examples/jsm/utils/CameraUtils.js +4 -1
  317. package/examples/jsm/utils/GeometryCompressionUtils.js +4 -1
  318. package/examples/jsm/utils/GeometryUtils.js +4 -1
  319. package/examples/jsm/utils/LDrawUtils.js +2 -0
  320. package/examples/jsm/utils/SceneOptimizer.js +2 -0
  321. package/examples/jsm/utils/SceneUtils.js +4 -1
  322. package/examples/jsm/utils/ShadowMapViewer.js +2 -0
  323. package/examples/jsm/utils/ShadowMapViewerGPU.js +2 -0
  324. package/examples/jsm/utils/SkeletonUtils.js +4 -1
  325. package/examples/jsm/utils/SortUtils.js +4 -1
  326. package/examples/jsm/utils/UVsDebug.js +4 -1
  327. package/examples/jsm/utils/WebGLTextureUtils.js +4 -1
  328. package/examples/jsm/utils/WebGPUTextureUtils.js +4 -1
  329. package/examples/jsm/utils/WorkerPool.js +2 -0
  330. package/examples/jsm/webxr/ARButton.js +1 -0
  331. package/examples/jsm/webxr/OculusHandModel.js +1 -0
  332. package/examples/jsm/webxr/OculusHandPointerModel.js +1 -0
  333. package/examples/jsm/webxr/Text2D.js +4 -1
  334. package/examples/jsm/webxr/VRButton.js +1 -0
  335. package/examples/jsm/webxr/XRButton.js +1 -0
  336. package/examples/jsm/webxr/XRControllerModelFactory.js +2 -0
  337. package/examples/jsm/webxr/XREstimatedLight.js +1 -0
  338. package/examples/jsm/webxr/XRHandMeshModel.js +2 -0
  339. package/examples/jsm/webxr/XRHandModelFactory.js +2 -0
  340. package/examples/jsm/webxr/XRHandPrimitiveModel.js +2 -0
  341. package/examples/jsm/webxr/XRPlanes.js +1 -0
  342. package/package.json +6 -4
  343. package/src/Three.Core.js +2 -1
  344. package/src/Three.TSL.js +83 -26
  345. package/src/Three.WebGPU.Nodes.js +1 -0
  346. package/src/Three.WebGPU.js +3 -0
  347. package/src/animation/KeyframeTrack.js +1 -1
  348. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  349. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  350. package/src/audio/AudioListener.js +13 -10
  351. package/src/cameras/ArrayCamera.js +9 -1
  352. package/src/cameras/Camera.js +14 -0
  353. package/src/cameras/OrthographicCamera.js +1 -1
  354. package/src/cameras/PerspectiveCamera.js +1 -1
  355. package/src/constants.js +47 -20
  356. package/src/core/BufferAttribute.js +3 -3
  357. package/src/core/BufferGeometry.js +2 -5
  358. package/src/core/Clock.js +2 -8
  359. package/src/core/GLBufferAttribute.js +13 -1
  360. package/src/core/Object3D.js +23 -22
  361. package/src/core/RenderTarget.js +65 -21
  362. package/src/core/RenderTarget3D.js +1 -0
  363. package/{examples/jsm/misc → src/core}/Timer.js +4 -40
  364. package/src/extras/PMREMGenerator.js +11 -0
  365. package/src/extras/TextureUtils.js +1 -5
  366. package/src/extras/core/Curve.js +1 -1
  367. package/src/extras/core/Path.js +22 -22
  368. package/src/geometries/CapsuleGeometry.js +167 -17
  369. package/src/geometries/ExtrudeGeometry.js +39 -29
  370. package/src/helpers/ArrowHelper.js +2 -2
  371. package/src/helpers/CameraHelper.js +41 -11
  372. package/src/helpers/SkeletonHelper.js +36 -7
  373. package/src/lights/LightShadow.js +34 -7
  374. package/src/lights/PointLightShadow.js +1 -1
  375. package/src/lights/SpotLightShadow.js +9 -1
  376. package/src/lights/webgpu/ProjectorLight.js +46 -0
  377. package/src/loaders/BufferGeometryLoader.js +1 -10
  378. package/src/loaders/FileLoader.js +27 -4
  379. package/src/loaders/ImageBitmapLoader.js +48 -9
  380. package/src/loaders/ImageLoader.js +55 -8
  381. package/src/loaders/Loader.js +14 -0
  382. package/src/loaders/LoadingManager.js +23 -0
  383. package/src/loaders/ObjectLoader.js +44 -16
  384. package/src/loaders/nodes/NodeObjectLoader.js +2 -2
  385. package/src/materials/Material.js +1 -7
  386. package/src/materials/MeshBasicMaterial.js +1 -1
  387. package/src/materials/nodes/Line2NodeMaterial.js +0 -8
  388. package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
  389. package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
  390. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  391. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
  392. package/src/materials/nodes/MeshSSSNodeMaterial.js +2 -2
  393. package/src/materials/nodes/NodeMaterial.js +106 -20
  394. package/src/materials/nodes/PointsNodeMaterial.js +5 -0
  395. package/src/materials/nodes/manager/NodeMaterialObserver.js +107 -4
  396. package/src/math/Box3.js +28 -0
  397. package/src/math/Color.js +7 -7
  398. package/src/math/ColorManagement.js +22 -3
  399. package/src/math/Frustum.js +25 -9
  400. package/src/math/FrustumArray.js +258 -0
  401. package/src/math/Line3.js +129 -2
  402. package/src/math/Matrix4.js +48 -27
  403. package/src/math/Quaternion.js +1 -1
  404. package/src/math/Ray.js +2 -0
  405. package/src/math/Sphere.js +28 -0
  406. package/src/math/Spherical.js +2 -2
  407. package/src/nodes/Nodes.js +3 -3
  408. package/src/nodes/TSL.js +6 -3
  409. package/src/nodes/accessors/AccessorsUtils.js +7 -8
  410. package/src/nodes/accessors/Bitangent.js +54 -26
  411. package/src/nodes/accessors/Camera.js +40 -13
  412. package/src/nodes/accessors/CubeTextureNode.js +50 -2
  413. package/src/nodes/accessors/InstanceNode.js +5 -4
  414. package/src/nodes/accessors/Lights.js +2 -2
  415. package/src/nodes/accessors/MaterialNode.js +4 -0
  416. package/src/nodes/accessors/ModelNode.js +1 -1
  417. package/src/nodes/accessors/Normal.js +110 -24
  418. package/src/nodes/accessors/Object3DNode.js +7 -8
  419. package/src/nodes/accessors/Position.js +14 -4
  420. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  421. package/src/nodes/accessors/ReferenceNode.js +19 -4
  422. package/src/nodes/accessors/ReflectVector.js +3 -3
  423. package/src/nodes/accessors/SceneNode.js +1 -1
  424. package/src/nodes/accessors/SkinningNode.js +3 -2
  425. package/src/nodes/accessors/StorageBufferNode.js +25 -0
  426. package/src/nodes/accessors/StorageTextureNode.js +15 -4
  427. package/src/nodes/accessors/Tangent.js +25 -17
  428. package/src/nodes/accessors/TangentUtils.js +46 -0
  429. package/src/nodes/accessors/TextureBicubic.js +21 -3
  430. package/src/nodes/accessors/TextureNode.js +71 -8
  431. package/src/nodes/accessors/UniformArrayNode.js +0 -16
  432. package/src/nodes/accessors/VelocityNode.js +1 -0
  433. package/src/nodes/accessors/VertexColorNode.js +4 -4
  434. package/src/nodes/code/CodeNode.js +8 -11
  435. package/src/nodes/core/ArrayNode.js +12 -0
  436. package/src/nodes/core/AssignNode.js +30 -5
  437. package/src/nodes/core/AttributeNode.js +2 -2
  438. package/src/nodes/core/ContextNode.js +27 -4
  439. package/src/nodes/core/Node.js +83 -22
  440. package/src/nodes/core/NodeBuilder.js +273 -49
  441. package/src/nodes/core/NodeUtils.js +46 -1
  442. package/src/nodes/core/NodeVarying.js +19 -1
  443. package/src/nodes/core/PropertyNode.js +8 -12
  444. package/src/nodes/core/StackNode.js +171 -26
  445. package/src/nodes/core/StructTypeNode.js +26 -4
  446. package/src/nodes/core/SubBuildNode.js +89 -0
  447. package/src/nodes/core/UniformNode.js +63 -5
  448. package/src/nodes/core/VarNode.js +102 -4
  449. package/src/nodes/core/VaryingNode.js +45 -24
  450. package/src/nodes/display/BlendModes.js +42 -1
  451. package/src/nodes/display/ColorSpaceNode.js +4 -27
  452. package/src/nodes/display/FrontFacingNode.js +34 -2
  453. package/src/nodes/display/NormalMapNode.js +19 -50
  454. package/src/nodes/display/PassNode.js +165 -20
  455. package/src/nodes/display/ScreenNode.js +0 -26
  456. package/src/nodes/display/ViewportTextureNode.js +67 -7
  457. package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
  458. package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
  459. package/src/nodes/functions/PhongLightingModel.js +3 -3
  460. package/src/nodes/functions/PhysicalLightingModel.js +16 -16
  461. package/src/nodes/functions/ShadowMaskModel.js +5 -1
  462. package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
  463. package/src/nodes/functions/material/getParallaxCorrectNormal.js +1 -1
  464. package/src/nodes/gpgpu/AtomicFunctionNode.js +28 -10
  465. package/src/nodes/gpgpu/BarrierNode.js +3 -3
  466. package/src/nodes/gpgpu/ComputeNode.js +68 -24
  467. package/src/nodes/gpgpu/WorkgroupInfoNode.js +28 -3
  468. package/src/nodes/lighting/AnalyticLightNode.js +7 -13
  469. package/src/nodes/lighting/EnvironmentNode.js +5 -5
  470. package/src/nodes/lighting/HemisphereLightNode.js +2 -2
  471. package/src/nodes/lighting/IESSpotLightNode.js +2 -1
  472. package/src/nodes/lighting/LightsNode.js +29 -11
  473. package/src/nodes/lighting/ProjectorLightNode.js +91 -0
  474. package/src/nodes/lighting/ShadowBaseNode.js +1 -12
  475. package/src/nodes/lighting/ShadowFilterNode.js +274 -0
  476. package/src/nodes/lighting/ShadowNode.js +174 -242
  477. package/src/nodes/lighting/SpotLightNode.js +44 -7
  478. package/src/nodes/materialx/MaterialXNodes.js +131 -2
  479. package/src/nodes/materialx/lib/mx_noise.js +166 -2
  480. package/src/nodes/math/ConditionalNode.js +1 -20
  481. package/src/nodes/math/MathNode.js +146 -75
  482. package/src/nodes/math/OperatorNode.js +129 -119
  483. package/src/nodes/shapes/Shapes.js +5 -4
  484. package/src/nodes/tsl/TSLBase.js +1 -0
  485. package/src/nodes/tsl/TSLCore.js +222 -72
  486. package/src/nodes/utils/DebugNode.js +16 -4
  487. package/src/nodes/utils/Discard.js +2 -2
  488. package/src/nodes/utils/EquirectUV.js +27 -0
  489. package/src/nodes/utils/EventNode.js +83 -0
  490. package/src/nodes/utils/LoopNode.js +64 -34
  491. package/src/nodes/utils/MatcapUV.js +22 -0
  492. package/src/nodes/utils/RTTNode.js +22 -5
  493. package/src/nodes/utils/ReflectorNode.js +77 -7
  494. package/src/nodes/utils/SampleNode.js +81 -0
  495. package/src/nodes/utils/TriplanarTextures.js +65 -0
  496. package/src/objects/BatchedMesh.js +20 -6
  497. package/src/objects/Mesh.js +9 -0
  498. package/src/objects/Skeleton.js +1 -1
  499. package/src/objects/Sprite.js +9 -0
  500. package/src/renderers/WebGL3DRenderTarget.js +1 -0
  501. package/src/renderers/WebGLArrayRenderTarget.js +1 -0
  502. package/src/renderers/WebGLCubeRenderTarget.js +2 -4
  503. package/src/renderers/WebGLRenderer.js +45 -32
  504. package/src/renderers/common/Animation.js +2 -2
  505. package/src/renderers/common/Background.js +13 -2
  506. package/src/renderers/common/Bindings.js +19 -18
  507. package/src/renderers/common/Color4.js +2 -2
  508. package/src/renderers/common/CubeRenderTarget.js +1 -1
  509. package/src/renderers/common/PostProcessing.js +60 -5
  510. package/src/renderers/common/RenderList.js +0 -4
  511. package/src/renderers/common/RenderObject.js +80 -4
  512. package/src/renderers/common/Renderer.js +133 -22
  513. package/src/renderers/common/SampledTexture.js +3 -71
  514. package/src/renderers/common/Sampler.js +79 -0
  515. package/src/renderers/common/Storage3DTexture.js +100 -0
  516. package/src/renderers/common/StorageArrayTexture.js +84 -0
  517. package/src/renderers/common/StorageTexture.js +19 -0
  518. package/src/renderers/common/Textures.js +34 -24
  519. package/src/renderers/common/TimestampQueryPool.js +1 -0
  520. package/src/renderers/common/Uniform.js +1 -1
  521. package/src/renderers/common/UniformsGroup.js +14 -18
  522. package/src/renderers/common/XRManager.js +183 -35
  523. package/src/renderers/common/XRRenderTarget.js +21 -4
  524. package/src/renderers/common/extras/PMREMGenerator.js +30 -23
  525. package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
  526. package/src/renderers/common/nodes/Nodes.js +13 -3
  527. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
  528. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +20 -2
  529. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
  530. package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
  531. package/src/renderers/webgl/WebGLAttributes.js +4 -0
  532. package/src/renderers/webgl/WebGLCapabilities.js +2 -2
  533. package/src/renderers/webgl/WebGLProgram.js +12 -6
  534. package/src/renderers/webgl/WebGLPrograms.js +6 -4
  535. package/src/renderers/webgl/WebGLShadowMap.js +14 -3
  536. package/src/renderers/webgl/WebGLState.js +4 -4
  537. package/src/renderers/webgl/WebGLTextures.js +162 -11
  538. package/src/renderers/webgl/WebGLUtils.js +1 -3
  539. package/src/renderers/webgl-fallback/WebGLBackend.js +261 -94
  540. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +75 -9
  541. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
  542. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +1 -0
  543. package/src/renderers/webgl-fallback/utils/WebGLState.js +4 -4
  544. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +44 -29
  545. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +22 -21
  546. package/src/renderers/webgpu/WebGPUBackend.js +505 -143
  547. package/src/renderers/webgpu/WebGPURenderer.js +7 -0
  548. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +4 -1
  549. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +4 -1
  550. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +129 -96
  551. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -0
  552. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +9 -1
  553. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +58 -31
  554. package/src/renderers/webgpu/utils/WebGPUConstants.js +8 -2
  555. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +39 -9
  556. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +50 -108
  557. package/src/renderers/webgpu/utils/WebGPUUtils.js +2 -17
  558. package/src/renderers/webxr/WebXRController.js +1 -1
  559. package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
  560. package/src/renderers/webxr/WebXRManager.js +70 -7
  561. package/src/textures/DepthTexture.js +6 -10
  562. package/src/textures/ExternalTexture.js +45 -0
  563. package/src/textures/FramebufferTexture.js +2 -2
  564. package/src/textures/Source.js +32 -0
  565. package/src/textures/Texture.js +118 -1
  566. package/src/textures/VideoTexture.js +31 -3
  567. package/examples/jsm/effects/PeppersGhostEffect.js +0 -172
  568. package/src/core/RenderTargetArray.js +0 -40
  569. package/src/nodes/utils/EquirectUVNode.js +0 -65
  570. package/src/nodes/utils/MatcapUVNode.js +0 -49
  571. package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
@@ -402,7 +402,7 @@ class WebXRController {
402
402
  *
403
403
  * @private
404
404
  * @param {Group} hand - The group representing the hand space.
405
- * @param {XRHandJoint} inputjoint - The XR frame.
405
+ * @param {XRJointSpace} inputjoint - The hand joint data.
406
406
  * @return {Group} A group representing the hand joint for the given input joint.
407
407
  */
408
408
  _getHandJoint( hand, inputjoint ) {
@@ -1,7 +1,7 @@
1
1
  import { PlaneGeometry } from '../../geometries/PlaneGeometry.js';
2
2
  import { ShaderMaterial } from '../../materials/ShaderMaterial.js';
3
3
  import { Mesh } from '../../objects/Mesh.js';
4
- import { Texture } from '../../textures/Texture.js';
4
+ import { ExternalTexture } from '../../textures/ExternalTexture.js';
5
5
 
6
6
  const _occlusion_vertex = `
7
7
  void main() {
@@ -42,9 +42,9 @@ class WebXRDepthSensing {
42
42
  constructor() {
43
43
 
44
44
  /**
45
- * A texture representing the depth of the user's environment.
45
+ * An opaque texture representing the depth of the user's environment.
46
46
  *
47
- * @type {?Texture}
47
+ * @type {?ExternalTexture}
48
48
  */
49
49
  this.texture = null;
50
50
 
@@ -74,18 +74,14 @@ class WebXRDepthSensing {
74
74
  /**
75
75
  * Inits the depth sensing module
76
76
  *
77
- * @param {WebGLRenderer} renderer - The renderer.
78
77
  * @param {XRWebGLDepthInformation} depthData - The XR depth data.
79
78
  * @param {XRRenderState} renderState - The XR render state.
80
79
  */
81
- init( renderer, depthData, renderState ) {
80
+ init( depthData, renderState ) {
82
81
 
83
82
  if ( this.texture === null ) {
84
83
 
85
- const texture = new Texture();
86
-
87
- const texProps = renderer.properties.get( texture );
88
- texProps.__webglTexture = depthData.texture;
84
+ const texture = new ExternalTexture( depthData.texture );
89
85
 
90
86
  if ( ( depthData.depthNear !== renderState.depthNear ) || ( depthData.depthFar !== renderState.depthFar ) ) {
91
87
 
@@ -146,7 +142,7 @@ class WebXRDepthSensing {
146
142
  /**
147
143
  * Returns a texture representing the depth of the user's environment.
148
144
  *
149
- * @return {?Texture} The depth texture.
145
+ * @return {?ExternalTexture} The depth texture.
150
146
  */
151
147
  getDepthTexture() {
152
148
 
@@ -10,6 +10,7 @@ import { WebGLMultiviewRenderTarget } from '../WebGLMultiviewRenderTarget.js';
10
10
  import { WebGLRenderTarget } from '../WebGLRenderTarget.js';
11
11
  import { WebXRController } from './WebXRController.js';
12
12
  import { DepthTexture } from '../../textures/DepthTexture.js';
13
+ import { ExternalTexture } from '../../textures/ExternalTexture.js';
13
14
  import { DepthFormat, DepthStencilFormat, RGBAFormat, UnsignedByteType, UnsignedIntType, UnsignedInt248Type } from '../../constants.js';
14
15
  import { WebXRDepthSensing } from './WebXRDepthSensing.js';
15
16
 
@@ -56,6 +57,7 @@ class WebXRManager extends EventDispatcher {
56
57
  let xrFrame = null;
57
58
 
58
59
  const depthSensing = new WebXRDepthSensing();
60
+ const cameraAccessTextures = {};
59
61
  const attributes = gl.getContextAttributes();
60
62
 
61
63
  let initialRenderTarget = null;
@@ -243,6 +245,11 @@ class WebXRManager extends EventDispatcher {
243
245
  _currentDepthFar = null;
244
246
 
245
247
  depthSensing.reset();
248
+ for ( const key in cameraAccessTextures ) {
249
+
250
+ delete cameraAccessTextures[ key ];
251
+
252
+ }
246
253
 
247
254
  // restore framebuffer/rendering state
248
255
 
@@ -289,7 +296,8 @@ class WebXRManager extends EventDispatcher {
289
296
  /**
290
297
  * Sets the reference space type. Can be used to configure a spatial relationship with the user's physical
291
298
  * environment. Depending on how the user moves in 3D space, setting an appropriate reference space can
292
- * improve tracking. Default is `local-floor`.
299
+ * improve tracking. Default is `local-floor`. Valid values can be found here
300
+ * https://developer.mozilla.org/en-US/docs/Web/API/XRReferenceSpace#reference_space_types.
293
301
  *
294
302
  * This method can not be used during a XR session.
295
303
  *
@@ -414,9 +422,15 @@ class WebXRManager extends EventDispatcher {
414
422
  currentPixelRatio = renderer.getPixelRatio();
415
423
  renderer.getSize( currentSize );
416
424
 
425
+ if ( typeof XRWebGLBinding !== 'undefined' ) {
426
+
427
+ glBinding = new XRWebGLBinding( session, gl );
428
+
429
+ }
430
+
417
431
  // Check that the browser implements the necessary APIs to use an
418
432
  // XRProjectionLayer rather than an XRWebGLLayer
419
- const useLayers = typeof XRWebGLBinding !== 'undefined' && 'createProjectionLayer' in XRWebGLBinding.prototype;
433
+ const useLayers = glBinding !== null && 'createProjectionLayer' in XRWebGLBinding.prototype;
420
434
 
421
435
  if ( ! useLayers ) {
422
436
 
@@ -787,9 +801,10 @@ class WebXRManager extends EventDispatcher {
787
801
 
788
802
  }
789
803
 
790
- cameraL.layers.mask = camera.layers.mask | 0b010;
791
- cameraR.layers.mask = camera.layers.mask | 0b100;
792
- cameraXR.layers.mask = cameraL.layers.mask | cameraR.layers.mask;
804
+ // inherit camera layers and enable eye layers (1 = left, 2 = right)
805
+ cameraXR.layers.mask = camera.layers.mask | 0b110;
806
+ cameraL.layers.mask = cameraXR.layers.mask & 0b011;
807
+ cameraR.layers.mask = cameraXR.layers.mask & 0b101;
793
808
 
794
809
  const cameras = cameraXR.cameras;
795
810
  var object = poseTarget || camera;
@@ -871,7 +886,7 @@ class WebXRManager extends EventDispatcher {
871
886
  /**
872
887
  * Returns the amount of foveation used by the XR compositor for the projection layer.
873
888
  *
874
- * @return {number} The amount of foveation.
889
+ * @return {number|undefined} The amount of foveation.
875
890
  */
876
891
  this.getFoveation = function () {
877
892
 
@@ -934,6 +949,19 @@ class WebXRManager extends EventDispatcher {
934
949
 
935
950
  };
936
951
 
952
+ /**
953
+ * Retrieves an opaque texture from the view-aligned {@link XRCamera}.
954
+ * Only available during the current animation loop.
955
+ *
956
+ * @param {XRCamera} xrCamera - The camera to query.
957
+ * @return {?Texture} An opaque texture representing the current raw camera frame.
958
+ */
959
+ this.getCameraTexture = function ( xrCamera ) {
960
+
961
+ return cameraAccessTextures[ xrCamera ];
962
+
963
+ };
964
+
937
965
  // Animation Loop
938
966
 
939
967
  let onAnimationFrameCallback = null;
@@ -1039,7 +1067,42 @@ class WebXRManager extends EventDispatcher {
1039
1067
 
1040
1068
  if ( depthData && depthData.isValid && depthData.texture ) {
1041
1069
 
1042
- depthSensing.init( renderer, depthData, session.renderState );
1070
+ depthSensing.init( depthData, session.renderState );
1071
+
1072
+ }
1073
+
1074
+ }
1075
+
1076
+ const cameraAccessEnabled = enabledFeatures &&
1077
+ enabledFeatures.includes( 'camera-access' );
1078
+
1079
+ if ( cameraAccessEnabled ) {
1080
+
1081
+ renderer.state.unbindTexture();
1082
+
1083
+ if ( glBinding ) {
1084
+
1085
+ for ( let i = 0; i < views.length; i ++ ) {
1086
+
1087
+ const camera = views[ i ].camera;
1088
+
1089
+ if ( camera ) {
1090
+
1091
+ let cameraTex = cameraAccessTextures[ camera ];
1092
+
1093
+ if ( ! cameraTex ) {
1094
+
1095
+ cameraTex = new ExternalTexture();
1096
+ cameraAccessTextures[ camera ] = cameraTex;
1097
+
1098
+ }
1099
+
1100
+ const glTexture = glBinding.getCameraImage( camera );
1101
+ cameraTex.sourceTexture = glTexture;
1102
+
1103
+ }
1104
+
1105
+ }
1043
1106
 
1044
1107
  }
1045
1108
 
@@ -23,8 +23,9 @@ class DepthTexture extends Texture {
23
23
  * @param {number} [minFilter=LinearFilter] - The min filter value.
24
24
  * @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The anisotropy value.
25
25
  * @param {number} [format=DepthFormat] - The texture format.
26
+ * @param {number} [depth=1] - The depth of the texture.
26
27
  */
27
- constructor( width, height, type = UnsignedIntType, mapping, wrapS, wrapT, magFilter = NearestFilter, minFilter = NearestFilter, anisotropy, format = DepthFormat ) {
28
+ constructor( width, height, type = UnsignedIntType, mapping, wrapS, wrapT, magFilter = NearestFilter, minFilter = NearestFilter, anisotropy, format = DepthFormat, depth = 1 ) {
28
29
 
29
30
  if ( format !== DepthFormat && format !== DepthStencilFormat ) {
30
31
 
@@ -32,7 +33,9 @@ class DepthTexture extends Texture {
32
33
 
33
34
  }
34
35
 
35
- super( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );
36
+ const image = { width: width, height: height, depth: depth };
37
+
38
+ super( image, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );
36
39
 
37
40
  /**
38
41
  * This flag can be used for type testing.
@@ -43,13 +46,6 @@ class DepthTexture extends Texture {
43
46
  */
44
47
  this.isDepthTexture = true;
45
48
 
46
- /**
47
- * The image property of a depth texture just defines its dimensions.
48
- *
49
- * @type {{width:number,height:number}}
50
- */
51
- this.image = { width: width, height: height };
52
-
53
49
  /**
54
50
  * If set to `true`, the texture is flipped along the vertical axis when
55
51
  * uploaded to the GPU.
@@ -72,7 +68,7 @@ class DepthTexture extends Texture {
72
68
  this.generateMipmaps = false;
73
69
 
74
70
  /**
75
- * The depth compare function.
71
+ * Code corresponding to the depth compare function.
76
72
  *
77
73
  * @type {?(NeverCompare|LessCompare|EqualCompare|LessEqualCompare|GreaterCompare|NotEqualCompare|GreaterEqualCompare|AlwaysCompare)}
78
74
  * @default null
@@ -0,0 +1,45 @@
1
+ import { Texture } from './Texture.js';
2
+
3
+ /**
4
+ * Represents a texture created externally from the renderer context.
5
+ *
6
+ * This may be a texture from a protected media stream, device camera feed,
7
+ * or other data feeds like a depth sensor.
8
+ *
9
+ * Note that this class is only supported in {@link WebGLRenderer} right now.
10
+ *
11
+ * @augments Texture
12
+ */
13
+ class ExternalTexture extends Texture {
14
+
15
+ /**
16
+ * Creates a new raw texture.
17
+ *
18
+ * @param {?WebGLTexture} [sourceTexture=null] - The external texture.
19
+ */
20
+ constructor( sourceTexture = null ) {
21
+
22
+ super();
23
+
24
+ /**
25
+ * The external source texture.
26
+ *
27
+ * @type {?WebGLTexture}
28
+ * @default null
29
+ */
30
+ this.sourceTexture = sourceTexture;
31
+
32
+ /**
33
+ * This flag can be used for type testing.
34
+ *
35
+ * @type {boolean}
36
+ * @readonly
37
+ * @default true
38
+ */
39
+ this.isExternalTexture = true;
40
+
41
+ }
42
+
43
+ }
44
+
45
+ export { ExternalTexture };
@@ -30,8 +30,8 @@ class FramebufferTexture extends Texture {
30
30
  /**
31
31
  * Constructs a new framebuffer texture.
32
32
  *
33
- * @param {number} width - The width of the texture.
34
- * @param {number} height - The height of the texture.
33
+ * @param {number} [width] - The width of the texture.
34
+ * @param {number} [height] - The height of the texture.
35
35
  */
36
36
  constructor( width, height ) {
37
37
 
@@ -73,6 +73,38 @@ class Source {
73
73
 
74
74
  }
75
75
 
76
+ /**
77
+ * Returns the dimensions of the source into the given target vector.
78
+ *
79
+ * @param {(Vector2|Vector3)} target - The target object the result is written into.
80
+ * @return {(Vector2|Vector3)} The dimensions of the source.
81
+ */
82
+ getSize( target ) {
83
+
84
+ const data = this.data;
85
+
86
+ if ( data instanceof HTMLVideoElement ) {
87
+
88
+ target.set( data.videoWidth, data.videoHeight, 0 );
89
+
90
+ } else if ( data instanceof VideoFrame ) {
91
+
92
+ target.set( data.displayHeight, data.displayWidth, 0 );
93
+
94
+ } else if ( data !== null ) {
95
+
96
+ target.set( data.width, data.height, data.depth || 0 );
97
+
98
+ } else {
99
+
100
+ target.set( 0, 0, 0 );
101
+
102
+ }
103
+
104
+ return target;
105
+
106
+ }
107
+
76
108
  /**
77
109
  * When the property is set to `true`, the engine allocates the memory
78
110
  * for the texture (if necessary) and triggers the actual texture upload
@@ -12,11 +12,14 @@ import {
12
12
  } from '../constants.js';
13
13
  import { generateUUID } from '../math/MathUtils.js';
14
14
  import { Vector2 } from '../math/Vector2.js';
15
+ import { Vector3 } from '../math/Vector3.js';
15
16
  import { Matrix3 } from '../math/Matrix3.js';
16
17
  import { Source } from './Source.js';
17
18
 
18
19
  let _textureId = 0;
19
20
 
21
+ const _tempVec3 = /*@__PURE__*/ new Vector3();
22
+
20
23
  /**
21
24
  * Base class for all textures.
22
25
  *
@@ -302,6 +305,14 @@ class Texture extends EventDispatcher {
302
305
  */
303
306
  this.userData = {};
304
307
 
308
+ /**
309
+ * This can be used to only update a subregion or specific rows of the texture (for example, just the
310
+ * first 3 rows). Use the `addUpdateRange()` function to add ranges to this array.
311
+ *
312
+ * @type {Array<Object>}
313
+ */
314
+ this.updateRanges = [];
315
+
305
316
  /**
306
317
  * This starts at `0` and counts how many times {@link Texture#needsUpdate} is set to `true`.
307
318
  *
@@ -337,6 +348,15 @@ class Texture extends EventDispatcher {
337
348
  */
338
349
  this.isRenderTargetTexture = false;
339
350
 
351
+ /**
352
+ * Indicates if a texture should be handled like a texture array.
353
+ *
354
+ * @type {boolean}
355
+ * @readonly
356
+ * @default false
357
+ */
358
+ this.isArrayTexture = image && image.depth && image.depth > 1 ? true : false;
359
+
340
360
  /**
341
361
  * Indicates whether this texture should be processed by `PMREMGenerator` or not
342
362
  * (only relevant for render target textures).
@@ -349,6 +369,33 @@ class Texture extends EventDispatcher {
349
369
 
350
370
  }
351
371
 
372
+ /**
373
+ * The width of the texture in pixels.
374
+ */
375
+ get width() {
376
+
377
+ return this.source.getSize( _tempVec3 ).x;
378
+
379
+ }
380
+
381
+ /**
382
+ * The height of the texture in pixels.
383
+ */
384
+ get height() {
385
+
386
+ return this.source.getSize( _tempVec3 ).y;
387
+
388
+ }
389
+
390
+ /**
391
+ * The depth of the texture in pixels.
392
+ */
393
+ get depth() {
394
+
395
+ return this.source.getSize( _tempVec3 ).z;
396
+
397
+ }
398
+
352
399
  /**
353
400
  * The image object holding the texture data.
354
401
  *
@@ -376,6 +423,27 @@ class Texture extends EventDispatcher {
376
423
 
377
424
  }
378
425
 
426
+ /**
427
+ * Adds a range of data in the data texture to be updated on the GPU.
428
+ *
429
+ * @param {number} start - Position at which to start update.
430
+ * @param {number} count - The number of components to update.
431
+ */
432
+ addUpdateRange( start, count ) {
433
+
434
+ this.updateRanges.push( { start, count } );
435
+
436
+ }
437
+
438
+ /**
439
+ * Clears the update ranges.
440
+ */
441
+ clearUpdateRanges() {
442
+
443
+ this.updateRanges.length = 0;
444
+
445
+ }
446
+
379
447
  /**
380
448
  * Returns a new texture with copied values from this instance.
381
449
  *
@@ -431,6 +499,7 @@ class Texture extends EventDispatcher {
431
499
 
432
500
  this.renderTarget = source.renderTarget;
433
501
  this.isRenderTargetTexture = source.isRenderTargetTexture;
502
+ this.isArrayTexture = source.isArrayTexture;
434
503
 
435
504
  this.userData = JSON.parse( JSON.stringify( source.userData ) );
436
505
 
@@ -440,6 +509,54 @@ class Texture extends EventDispatcher {
440
509
 
441
510
  }
442
511
 
512
+ /**
513
+ * Sets this texture's properties based on `values`.
514
+ * @param {Object} values - A container with texture parameters.
515
+ */
516
+ setValues( values ) {
517
+
518
+ for ( const key in values ) {
519
+
520
+ const newValue = values[ key ];
521
+
522
+ if ( newValue === undefined ) {
523
+
524
+ console.warn( `THREE.Texture.setValues(): parameter '${ key }' has value of undefined.` );
525
+ continue;
526
+
527
+ }
528
+
529
+ const currentValue = this[ key ];
530
+
531
+ if ( currentValue === undefined ) {
532
+
533
+ console.warn( `THREE.Texture.setValues(): property '${ key }' does not exist.` );
534
+ continue;
535
+
536
+ }
537
+
538
+ if ( ( currentValue && newValue ) && ( currentValue.isVector2 && newValue.isVector2 ) ) {
539
+
540
+ currentValue.copy( newValue );
541
+
542
+ } else if ( ( currentValue && newValue ) && ( currentValue.isVector3 && newValue.isVector3 ) ) {
543
+
544
+ currentValue.copy( newValue );
545
+
546
+ } else if ( ( currentValue && newValue ) && ( currentValue.isMatrix3 && newValue.isMatrix3 ) ) {
547
+
548
+ currentValue.copy( newValue );
549
+
550
+ } else {
551
+
552
+ this[ key ] = newValue;
553
+
554
+ }
555
+
556
+ }
557
+
558
+ }
559
+
443
560
  /**
444
561
  * Serializes the texture into JSON.
445
562
  *
@@ -460,7 +577,7 @@ class Texture extends EventDispatcher {
460
577
  const output = {
461
578
 
462
579
  metadata: {
463
- version: 4.6,
580
+ version: 4.7,
464
581
  type: 'Texture',
465
582
  generator: 'Texture.toJSON'
466
583
  },
@@ -10,6 +10,9 @@ import { Texture } from './Texture.js';
10
10
  * const texture = new THREE.VideoTexture( video );
11
11
  * ```
12
12
  *
13
+ * Note: When using video textures with {@link WebGPURenderer}, {@link Texture#colorSpace} must be
14
+ * set to THREE.SRGBColorSpace.
15
+ *
13
16
  * Note: After the initial use of a texture, its dimensions, format, and type
14
17
  * cannot be changed. Instead, call {@link Texture#dispose} on the texture and instantiate a new one.
15
18
  *
@@ -20,7 +23,7 @@ class VideoTexture extends Texture {
20
23
  /**
21
24
  * Constructs a new video texture.
22
25
  *
23
- * @param {Video} video - The video element to use as a data source for the texture.
26
+ * @param {HTMLVideoElement} video - The video element to use as a data source for the texture.
24
27
  * @param {number} [mapping=Texture.DEFAULT_MAPPING] - The texture mapping.
25
28
  * @param {number} [wrapS=ClampToEdgeWrapping] - The wrapS value.
26
29
  * @param {number} [wrapT=ClampToEdgeWrapping] - The wrapT value.
@@ -53,18 +56,28 @@ class VideoTexture extends Texture {
53
56
  */
54
57
  this.generateMipmaps = false;
55
58
 
59
+ /**
60
+ * The video frame request callback identifier, which is a positive integer.
61
+ *
62
+ * Value of 0 represents no scheduled rVFC.
63
+ *
64
+ * @private
65
+ * @type {number}
66
+ */
67
+ this._requestVideoFrameCallbackId = 0;
68
+
56
69
  const scope = this;
57
70
 
58
71
  function updateVideo() {
59
72
 
60
73
  scope.needsUpdate = true;
61
- video.requestVideoFrameCallback( updateVideo );
74
+ scope._requestVideoFrameCallbackId = video.requestVideoFrameCallback( updateVideo );
62
75
 
63
76
  }
64
77
 
65
78
  if ( 'requestVideoFrameCallback' in video ) {
66
79
 
67
- video.requestVideoFrameCallback( updateVideo );
80
+ this._requestVideoFrameCallbackId = video.requestVideoFrameCallback( updateVideo );
68
81
 
69
82
  }
70
83
 
@@ -95,6 +108,21 @@ class VideoTexture extends Texture {
95
108
 
96
109
  }
97
110
 
111
+ /**
112
+ * @override
113
+ */
114
+ dispose() {
115
+
116
+ if ( this._requestVideoFrameCallbackId !== 0 ) {
117
+
118
+ this.source.data.cancelVideoFrameCallback( this._requestVideoFrameCallbackId );
119
+
120
+ }
121
+
122
+ super.dispose();
123
+
124
+ }
125
+
98
126
  }
99
127
 
100
128
  export { VideoTexture };