super-three 0.177.0 → 0.181.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 (501) hide show
  1. package/README.md +1 -1
  2. package/build/three.cjs +1994 -749
  3. package/build/three.core.js +1358 -506
  4. package/build/three.core.min.js +1 -1
  5. package/build/three.module.js +631 -247
  6. package/build/three.module.min.js +1 -1
  7. package/build/three.tsl.js +113 -33
  8. package/build/three.tsl.min.js +1 -1
  9. package/build/three.webgpu.js +9571 -3424
  10. package/build/three.webgpu.min.js +1 -1
  11. package/build/three.webgpu.nodes.js +9397 -3426
  12. package/build/three.webgpu.nodes.min.js +1 -1
  13. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  14. package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  15. package/examples/jsm/Addons.js +2 -3
  16. package/examples/jsm/animation/CCDIKSolver.js +1 -1
  17. package/examples/jsm/capabilities/WebGL.js +0 -27
  18. package/examples/jsm/capabilities/WebGPU.js +1 -1
  19. package/examples/jsm/controls/ArcballControls.js +9 -9
  20. package/examples/jsm/controls/DragControls.js +7 -57
  21. package/examples/jsm/controls/FirstPersonControls.js +3 -3
  22. package/examples/jsm/controls/FlyControls.js +1 -1
  23. package/examples/jsm/controls/OrbitControls.js +2 -2
  24. package/examples/jsm/controls/PointerLockControls.js +2 -10
  25. package/examples/jsm/controls/TrackballControls.js +1 -1
  26. package/examples/jsm/controls/TransformControls.js +62 -15
  27. package/examples/jsm/csm/CSMShadowNode.js +4 -4
  28. package/examples/jsm/effects/AsciiEffect.js +8 -8
  29. package/examples/jsm/environments/RoomEnvironment.js +8 -3
  30. package/examples/jsm/exporters/DRACOExporter.js +2 -2
  31. package/examples/jsm/exporters/EXRExporter.js +1 -1
  32. package/examples/jsm/exporters/GLTFExporter.js +33 -25
  33. package/examples/jsm/exporters/KTX2Exporter.js +4 -2
  34. package/examples/jsm/exporters/PLYExporter.js +1 -1
  35. package/examples/jsm/exporters/USDZExporter.js +683 -299
  36. package/examples/jsm/geometries/DecalGeometry.js +2 -2
  37. package/examples/jsm/geometries/ParametricGeometry.js +1 -1
  38. package/examples/jsm/geometries/RoundedBoxGeometry.js +47 -8
  39. package/examples/jsm/geometries/TeapotGeometry.js +2 -2
  40. package/examples/jsm/geometries/TextGeometry.js +3 -2
  41. package/examples/jsm/gpgpu/BitonicSort.js +715 -0
  42. package/examples/jsm/helpers/ViewHelper.js +43 -5
  43. package/examples/jsm/inspector/Inspector.js +427 -0
  44. package/examples/jsm/inspector/RendererInspector.js +415 -0
  45. package/examples/jsm/inspector/tabs/Console.js +204 -0
  46. package/examples/jsm/inspector/tabs/Parameters.js +332 -0
  47. package/examples/jsm/inspector/tabs/Performance.js +268 -0
  48. package/examples/jsm/inspector/tabs/Viewer.js +166 -0
  49. package/examples/jsm/inspector/ui/Graph.js +95 -0
  50. package/examples/jsm/inspector/ui/Item.js +170 -0
  51. package/examples/jsm/inspector/ui/List.js +75 -0
  52. package/examples/jsm/inspector/ui/Profiler.js +170 -0
  53. package/examples/jsm/inspector/ui/Style.js +654 -0
  54. package/examples/jsm/inspector/ui/Tab.js +46 -0
  55. package/examples/jsm/inspector/ui/Values.js +423 -0
  56. package/examples/jsm/inspector/ui/utils.js +56 -0
  57. package/examples/jsm/interactive/HTMLMesh.js +11 -13
  58. package/examples/jsm/interactive/InteractiveGroup.js +1 -1
  59. package/examples/jsm/interactive/SelectionBox.js +30 -0
  60. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  61. package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
  62. package/examples/jsm/lights/LightProbeGenerator.js +14 -3
  63. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  64. package/examples/jsm/lines/Line2.js +3 -3
  65. package/examples/jsm/lines/LineGeometry.js +1 -1
  66. package/examples/jsm/lines/LineSegments2.js +2 -2
  67. package/examples/jsm/lines/Wireframe.js +2 -2
  68. package/examples/jsm/lines/WireframeGeometry2.js +1 -1
  69. package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
  70. package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
  71. package/examples/jsm/loaders/3MFLoader.js +1 -1
  72. package/examples/jsm/loaders/ColladaLoader.js +4 -4
  73. package/examples/jsm/loaders/DDSLoader.js +1 -1
  74. package/examples/jsm/loaders/DRACOLoader.js +73 -22
  75. package/examples/jsm/loaders/EXRLoader.js +210 -22
  76. package/examples/jsm/loaders/FBXLoader.js +4 -4
  77. package/examples/jsm/loaders/FontLoader.js +23 -5
  78. package/examples/jsm/loaders/GLTFLoader.js +14 -8
  79. package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
  80. package/examples/jsm/loaders/HDRLoader.js +486 -0
  81. package/examples/jsm/loaders/KTX2Loader.js +136 -49
  82. package/examples/jsm/loaders/KTXLoader.js +2 -2
  83. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  84. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  85. package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
  86. package/examples/jsm/loaders/LWOLoader.js +2 -2
  87. package/examples/jsm/loaders/MaterialXLoader.js +233 -34
  88. package/examples/jsm/loaders/OBJLoader.js +1 -1
  89. package/examples/jsm/loaders/PDBLoader.js +1 -1
  90. package/examples/jsm/loaders/RGBELoader.js +7 -473
  91. package/examples/jsm/loaders/SVGLoader.js +2 -2
  92. package/examples/jsm/loaders/TTFLoader.js +13 -1
  93. package/examples/jsm/loaders/USDLoader.js +219 -0
  94. package/examples/jsm/loaders/USDZLoader.js +4 -892
  95. package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
  96. package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
  97. package/examples/jsm/loaders/usd/USDAParser.js +741 -0
  98. package/examples/jsm/loaders/usd/USDCParser.js +17 -0
  99. package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  100. package/examples/jsm/math/ColorSpaces.js +19 -1
  101. package/examples/jsm/math/ConvexHull.js +3 -3
  102. package/examples/jsm/math/ImprovedNoise.js +1 -1
  103. package/examples/jsm/math/Lut.js +2 -2
  104. package/examples/jsm/math/SimplexNoise.js +1 -1
  105. package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
  106. package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
  107. package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
  108. package/examples/jsm/misc/TubePainter.js +383 -40
  109. package/examples/jsm/misc/Volume.js +1 -1
  110. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  111. package/examples/jsm/objects/LensflareMesh.js +3 -3
  112. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  113. package/examples/jsm/objects/Sky.js +1 -1
  114. package/examples/jsm/objects/SkyMesh.js +3 -3
  115. package/examples/jsm/objects/Water.js +3 -3
  116. package/examples/jsm/objects/WaterMesh.js +6 -6
  117. package/examples/jsm/physics/RapierPhysics.js +95 -16
  118. package/examples/jsm/postprocessing/GTAOPass.js +10 -9
  119. package/examples/jsm/postprocessing/GlitchPass.js +2 -2
  120. package/examples/jsm/postprocessing/OutlinePass.js +17 -17
  121. package/examples/jsm/postprocessing/SSAOPass.js +10 -9
  122. package/examples/jsm/postprocessing/SSRPass.js +37 -8
  123. package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
  124. package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
  125. package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
  126. package/examples/jsm/renderers/SVGRenderer.js +1 -1
  127. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
  128. package/examples/jsm/shaders/AfterimageShader.js +1 -1
  129. package/examples/jsm/shaders/BleachBypassShader.js +1 -1
  130. package/examples/jsm/shaders/BokehShader.js +1 -1
  131. package/examples/jsm/shaders/BokehShader2.js +1 -1
  132. package/examples/jsm/shaders/DotScreenShader.js +1 -1
  133. package/examples/jsm/shaders/FocusShader.js +1 -1
  134. package/examples/jsm/shaders/GTAOShader.js +2 -2
  135. package/examples/jsm/shaders/GodRaysShader.js +1 -1
  136. package/examples/jsm/shaders/KaleidoShader.js +1 -1
  137. package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
  138. package/examples/jsm/shaders/SSRShader.js +1 -1
  139. package/examples/jsm/shaders/SepiaShader.js +1 -1
  140. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
  141. package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
  142. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +11 -2
  143. package/examples/jsm/shaders/VignetteShader.js +1 -1
  144. package/examples/jsm/transpiler/AST.js +381 -30
  145. package/examples/jsm/transpiler/GLSLDecoder.js +247 -104
  146. package/examples/jsm/transpiler/Linker.js +327 -0
  147. package/examples/jsm/transpiler/TSLEncoder.js +196 -92
  148. package/examples/jsm/transpiler/Transpiler.js +17 -1
  149. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  150. package/examples/jsm/transpiler/WGSLEncoder.js +812 -0
  151. package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
  152. package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
  153. package/examples/jsm/tsl/display/BloomNode.js +11 -6
  154. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
  155. package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
  156. package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
  157. package/examples/jsm/tsl/display/GTAONode.js +53 -5
  158. package/examples/jsm/tsl/display/GaussianBlurNode.js +55 -43
  159. package/examples/jsm/tsl/display/OutlineNode.js +13 -2
  160. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  161. package/examples/jsm/tsl/display/SSGINode.js +654 -0
  162. package/examples/jsm/tsl/display/SSRNode.js +182 -65
  163. package/examples/jsm/tsl/display/SSSNode.js +488 -0
  164. package/examples/jsm/tsl/display/TRAANode.js +578 -0
  165. package/examples/jsm/tsl/display/boxBlur.js +65 -0
  166. package/examples/jsm/tsl/display/hashBlur.js +18 -20
  167. package/examples/jsm/tsl/lighting/TiledLightsNode.js +22 -2
  168. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  169. package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
  170. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  171. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  172. package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
  173. package/package.json +5 -10
  174. package/src/Three.Core.js +5 -2
  175. package/src/Three.TSL.js +112 -32
  176. package/src/Three.WebGPU.Nodes.js +2 -0
  177. package/src/Three.WebGPU.js +4 -0
  178. package/src/animation/AnimationClip.js +20 -4
  179. package/src/animation/AnimationMixer.js +3 -3
  180. package/src/animation/AnimationObjectGroup.js +2 -1
  181. package/src/animation/KeyframeTrack.js +8 -7
  182. package/src/animation/PropertyBinding.js +12 -11
  183. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  184. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  185. package/src/audio/Audio.js +10 -9
  186. package/src/audio/PositionalAudio.js +1 -1
  187. package/src/cameras/Camera.js +14 -0
  188. package/src/cameras/OrthographicCamera.js +2 -2
  189. package/src/cameras/PerspectiveCamera.js +2 -2
  190. package/src/cameras/StereoCamera.js +2 -2
  191. package/src/constants.js +13 -5
  192. package/src/core/BufferAttribute.js +3 -3
  193. package/src/core/BufferGeometry.js +10 -10
  194. package/src/core/Clock.js +2 -8
  195. package/src/core/EventDispatcher.js +1 -1
  196. package/src/core/GLBufferAttribute.js +13 -1
  197. package/src/core/InterleavedBuffer.js +1 -1
  198. package/src/core/InterleavedBufferAttribute.js +3 -2
  199. package/src/core/Object3D.js +4 -3
  200. package/src/core/Raycaster.js +2 -1
  201. package/src/core/RenderTarget.js +10 -1
  202. package/{examples/jsm/misc → src/core}/Timer.js +4 -42
  203. package/src/extras/Controls.js +5 -4
  204. package/src/extras/DataUtils.js +2 -1
  205. package/src/extras/Earcut.js +6 -0
  206. package/src/extras/ImageUtils.js +2 -2
  207. package/src/extras/PMREMGenerator.js +279 -55
  208. package/src/extras/TextureUtils.js +2 -1
  209. package/src/extras/core/Curve.js +2 -1
  210. package/src/extras/core/Interpolations.js +7 -1
  211. package/src/extras/core/Path.js +22 -22
  212. package/src/extras/core/ShapePath.js +4 -4
  213. package/src/extras/lib/earcut.js +8 -8
  214. package/src/geometries/BoxGeometry.js +1 -0
  215. package/src/geometries/CapsuleGeometry.js +1 -0
  216. package/src/geometries/CircleGeometry.js +1 -0
  217. package/src/geometries/ConeGeometry.js +1 -0
  218. package/src/geometries/CylinderGeometry.js +1 -0
  219. package/src/geometries/DodecahedronGeometry.js +1 -0
  220. package/src/geometries/ExtrudeGeometry.js +8 -6
  221. package/src/geometries/IcosahedronGeometry.js +1 -0
  222. package/src/geometries/LatheGeometry.js +1 -0
  223. package/src/geometries/OctahedronGeometry.js +1 -0
  224. package/src/geometries/PlaneGeometry.js +1 -0
  225. package/src/geometries/RingGeometry.js +1 -0
  226. package/src/geometries/ShapeGeometry.js +1 -0
  227. package/src/geometries/SphereGeometry.js +1 -0
  228. package/src/geometries/TetrahedronGeometry.js +1 -0
  229. package/src/geometries/TorusGeometry.js +1 -0
  230. package/src/geometries/TorusKnotGeometry.js +1 -0
  231. package/src/geometries/TubeGeometry.js +1 -0
  232. package/src/helpers/CameraHelper.js +42 -12
  233. package/src/helpers/SkeletonHelper.js +35 -6
  234. package/src/lights/LightShadow.js +21 -8
  235. package/src/lights/PointLightShadow.js +1 -1
  236. package/src/lights/webgpu/ProjectorLight.js +1 -1
  237. package/src/loaders/AnimationLoader.js +2 -1
  238. package/src/loaders/AudioLoader.js +2 -1
  239. package/src/loaders/BufferGeometryLoader.js +2 -2
  240. package/src/loaders/Cache.js +2 -2
  241. package/src/loaders/DataTextureLoader.js +1 -1
  242. package/src/loaders/FileLoader.js +29 -5
  243. package/src/loaders/ImageBitmapLoader.js +32 -8
  244. package/src/loaders/ImageLoader.js +56 -9
  245. package/src/loaders/Loader.js +17 -3
  246. package/src/loaders/LoadingManager.js +45 -0
  247. package/src/loaders/MaterialLoader.js +3 -2
  248. package/src/loaders/ObjectLoader.js +13 -13
  249. package/src/loaders/TextureLoader.js +1 -1
  250. package/src/loaders/nodes/NodeLoader.js +3 -2
  251. package/src/materials/Material.js +16 -3
  252. package/src/materials/MeshBasicMaterial.js +2 -1
  253. package/src/materials/MeshDepthMaterial.js +1 -0
  254. package/src/materials/MeshDistanceMaterial.js +1 -1
  255. package/src/materials/MeshLambertMaterial.js +2 -1
  256. package/src/materials/MeshMatcapMaterial.js +22 -0
  257. package/src/materials/MeshNormalMaterial.js +1 -0
  258. package/src/materials/MeshPhongMaterial.js +2 -1
  259. package/src/materials/MeshPhysicalMaterial.js +2 -1
  260. package/src/materials/MeshStandardMaterial.js +8 -7
  261. package/src/materials/MeshToonMaterial.js +1 -0
  262. package/src/materials/PointsMaterial.js +1 -1
  263. package/src/materials/ShaderMaterial.js +2 -2
  264. package/src/materials/nodes/Line2NodeMaterial.js +2 -10
  265. package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
  266. package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
  267. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  268. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
  269. package/src/materials/nodes/MeshSSSNodeMaterial.js +3 -3
  270. package/src/materials/nodes/NodeMaterial.js +90 -27
  271. package/src/materials/nodes/PointsNodeMaterial.js +86 -28
  272. package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
  273. package/src/materials/nodes/manager/NodeMaterialObserver.js +89 -3
  274. package/src/math/Color.js +6 -5
  275. package/src/math/ColorManagement.js +9 -3
  276. package/src/math/Cylindrical.js +1 -1
  277. package/src/math/Euler.js +2 -1
  278. package/src/math/Frustum.js +25 -9
  279. package/src/math/FrustumArray.js +10 -5
  280. package/src/math/Line3.js +129 -2
  281. package/src/math/MathUtils.js +13 -11
  282. package/src/math/Matrix2.js +1 -1
  283. package/src/math/Matrix3.js +2 -2
  284. package/src/math/Matrix4.js +55 -34
  285. package/src/math/Plane.js +1 -1
  286. package/src/math/Quaternion.js +69 -67
  287. package/src/math/Spherical.js +3 -3
  288. package/src/nodes/Nodes.js +6 -4
  289. package/src/nodes/TSL.js +9 -4
  290. package/src/nodes/accessors/AccessorsUtils.js +7 -8
  291. package/src/nodes/accessors/Bitangent.js +31 -25
  292. package/src/nodes/accessors/BufferNode.js +1 -1
  293. package/src/nodes/accessors/Camera.js +142 -16
  294. package/src/nodes/accessors/ClippingNode.js +6 -5
  295. package/src/nodes/accessors/CubeTextureNode.js +5 -4
  296. package/src/nodes/accessors/InstanceNode.js +25 -5
  297. package/src/nodes/accessors/Lights.js +10 -0
  298. package/src/nodes/accessors/Normal.js +97 -30
  299. package/src/nodes/accessors/Object3DNode.js +2 -2
  300. package/src/nodes/accessors/Position.js +25 -9
  301. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  302. package/src/nodes/accessors/ReferenceNode.js +20 -4
  303. package/src/nodes/accessors/ReflectVector.js +3 -3
  304. package/src/nodes/accessors/SceneNode.js +3 -2
  305. package/src/nodes/accessors/StorageBufferNode.js +2 -1
  306. package/src/nodes/accessors/StorageTextureNode.js +23 -1
  307. package/src/nodes/accessors/Tangent.js +25 -17
  308. package/src/nodes/accessors/TangentUtils.js +46 -0
  309. package/src/nodes/accessors/Texture3DNode.js +14 -1
  310. package/src/nodes/accessors/TextureBicubic.js +21 -3
  311. package/src/nodes/accessors/TextureNode.js +142 -44
  312. package/src/nodes/accessors/UniformArrayNode.js +0 -16
  313. package/src/nodes/code/FunctionCallNode.js +24 -4
  314. package/src/nodes/code/FunctionNode.js +23 -0
  315. package/src/nodes/core/ArrayNode.js +13 -0
  316. package/src/nodes/core/AssignNode.js +6 -2
  317. package/src/nodes/core/AttributeNode.js +2 -1
  318. package/src/nodes/core/ContextNode.js +48 -10
  319. package/src/nodes/core/IndexNode.js +2 -2
  320. package/src/nodes/core/InputNode.js +2 -1
  321. package/src/nodes/core/InspectorNode.js +128 -0
  322. package/src/nodes/core/{CacheNode.js → IsolateNode.js} +36 -17
  323. package/src/nodes/core/Node.js +167 -34
  324. package/src/nodes/core/NodeBuilder.js +404 -120
  325. package/src/nodes/core/NodeFrame.js +21 -21
  326. package/src/nodes/core/NodeFunction.js +2 -1
  327. package/src/nodes/core/NodeParser.js +2 -1
  328. package/src/nodes/core/NodeUniform.js +1 -1
  329. package/src/nodes/core/NodeUtils.js +17 -88
  330. package/src/nodes/core/ParameterNode.js +31 -0
  331. package/src/nodes/core/PropertyNode.js +7 -0
  332. package/src/nodes/core/StackNode.js +77 -30
  333. package/src/nodes/core/StructNode.js +5 -5
  334. package/src/nodes/core/StructTypeNode.js +1 -0
  335. package/src/nodes/core/SubBuildNode.js +89 -0
  336. package/src/nodes/core/UniformNode.js +80 -14
  337. package/src/nodes/core/VarNode.js +142 -16
  338. package/src/nodes/core/VaryingNode.js +9 -6
  339. package/src/nodes/display/BlendModes.js +7 -6
  340. package/src/nodes/display/BumpMapNode.js +1 -1
  341. package/src/nodes/display/ColorAdjustment.js +1 -1
  342. package/src/nodes/display/FrontFacingNode.js +35 -7
  343. package/src/nodes/display/NormalMapNode.js +20 -50
  344. package/src/nodes/display/PassNode.js +206 -17
  345. package/src/nodes/display/RenderOutputNode.js +28 -2
  346. package/src/nodes/display/ScreenNode.js +44 -40
  347. package/src/nodes/display/ToneMappingNode.js +31 -4
  348. package/src/nodes/display/ToonOutlinePassNode.js +8 -0
  349. package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
  350. package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
  351. package/src/nodes/display/ViewportTextureNode.js +94 -4
  352. package/src/nodes/fog/Fog.js +3 -2
  353. package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
  354. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  355. package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
  356. package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
  357. package/src/nodes/functions/BasicLightingModel.js +2 -1
  358. package/src/nodes/functions/PhongLightingModel.js +3 -3
  359. package/src/nodes/functions/PhysicalLightingModel.js +19 -18
  360. package/src/nodes/functions/VolumetricLightingModel.js +5 -5
  361. package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
  362. package/src/nodes/geometry/RangeNode.js +40 -4
  363. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  364. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
  365. package/src/nodes/gpgpu/ComputeNode.js +81 -25
  366. package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
  367. package/src/nodes/gpgpu/WorkgroupInfoNode.js +29 -3
  368. package/src/nodes/lighting/EnvironmentNode.js +11 -11
  369. package/src/nodes/lighting/LightsNode.js +7 -8
  370. package/src/nodes/lighting/PointShadowNode.js +6 -0
  371. package/src/nodes/lighting/ProjectorLightNode.js +19 -6
  372. package/src/nodes/lighting/ShadowFilterNode.js +3 -1
  373. package/src/nodes/lighting/ShadowNode.js +77 -10
  374. package/src/nodes/materialx/MaterialXNodes.js +131 -2
  375. package/src/nodes/materialx/lib/mx_noise.js +165 -1
  376. package/src/nodes/math/BitcastNode.js +156 -0
  377. package/src/nodes/math/ConditionalNode.js +25 -27
  378. package/src/nodes/math/MathNode.js +106 -65
  379. package/src/nodes/math/OperatorNode.js +28 -43
  380. package/src/nodes/pmrem/PMREMUtils.js +117 -2
  381. package/src/nodes/shapes/Shapes.js +1 -1
  382. package/src/nodes/tsl/TSLBase.js +6 -2
  383. package/src/nodes/tsl/TSLCore.js +546 -186
  384. package/src/nodes/utils/DebugNode.js +3 -2
  385. package/src/nodes/utils/EquirectUV.js +27 -0
  386. package/src/nodes/utils/EventNode.js +119 -0
  387. package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
  388. package/src/nodes/utils/JoinNode.js +6 -3
  389. package/src/nodes/utils/LoopNode.js +20 -41
  390. package/src/nodes/utils/MatcapUV.js +22 -0
  391. package/src/nodes/utils/MemberNode.js +59 -7
  392. package/src/nodes/utils/PostProcessingUtils.js +28 -1
  393. package/src/nodes/utils/RTTNode.js +33 -6
  394. package/src/nodes/utils/ReflectorNode.js +68 -10
  395. package/src/nodes/utils/SampleNode.js +91 -0
  396. package/src/nodes/utils/SplitNode.js +11 -0
  397. package/src/nodes/utils/Timer.js +0 -47
  398. package/src/nodes/utils/TriplanarTextures.js +65 -0
  399. package/src/objects/BatchedMesh.js +6 -4
  400. package/src/objects/LOD.js +1 -1
  401. package/src/objects/Line.js +2 -1
  402. package/src/objects/LineSegments.js +2 -1
  403. package/src/objects/Skeleton.js +3 -2
  404. package/src/objects/SkinnedMesh.js +3 -1
  405. package/src/objects/Sprite.js +4 -3
  406. package/src/renderers/WebGLRenderer.js +77 -66
  407. package/src/renderers/common/Animation.js +13 -1
  408. package/src/renderers/common/Attributes.js +1 -1
  409. package/src/renderers/common/Backend.js +108 -27
  410. package/src/renderers/common/Background.js +4 -3
  411. package/src/renderers/common/Bindings.js +76 -19
  412. package/src/renderers/common/CanvasTarget.js +341 -0
  413. package/src/renderers/common/ChainMap.js +1 -1
  414. package/src/renderers/common/Color4.js +2 -2
  415. package/src/renderers/common/CubeRenderTarget.js +1 -1
  416. package/src/renderers/common/DataMap.js +1 -1
  417. package/src/renderers/common/Geometries.js +26 -0
  418. package/src/renderers/common/Info.js +4 -2
  419. package/src/renderers/common/InspectorBase.js +146 -0
  420. package/src/renderers/common/Pipelines.js +1 -1
  421. package/src/renderers/common/PostProcessing.js +61 -25
  422. package/src/renderers/common/QuadMesh.js +7 -1
  423. package/src/renderers/common/RenderContext.js +2 -2
  424. package/src/renderers/common/RenderList.js +7 -3
  425. package/src/renderers/common/RenderObject.js +84 -5
  426. package/src/renderers/common/RenderObjects.js +1 -1
  427. package/src/renderers/common/Renderer.js +486 -255
  428. package/src/renderers/common/RendererUtils.js +9 -0
  429. package/src/renderers/common/SampledTexture.js +8 -68
  430. package/src/renderers/common/Sampler.js +117 -0
  431. package/src/renderers/common/Storage3DTexture.js +100 -0
  432. package/src/renderers/common/StorageArrayTexture.js +84 -0
  433. package/src/renderers/common/StorageTexture.js +27 -0
  434. package/src/renderers/common/Textures.js +138 -46
  435. package/src/renderers/common/TimestampQueryPool.js +65 -3
  436. package/src/renderers/common/UniformsGroup.js +2 -1
  437. package/src/renderers/common/XRManager.js +63 -24
  438. package/src/renderers/common/XRRenderTarget.js +21 -4
  439. package/src/renderers/common/extras/PMREMGenerator.js +161 -66
  440. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  441. package/src/renderers/common/nodes/NodeLibrary.js +9 -7
  442. package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
  443. package/src/renderers/common/nodes/NodeSampler.js +13 -1
  444. package/src/renderers/common/nodes/Nodes.js +38 -16
  445. package/src/renderers/shaders/DFGLUTData.js +64 -0
  446. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
  447. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
  448. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
  449. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
  450. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
  451. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  452. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
  453. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
  454. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +21 -11
  455. package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
  456. package/src/renderers/shaders/UniformsLib.js +1 -0
  457. package/src/renderers/shaders/UniformsUtils.js +25 -4
  458. package/src/renderers/webgl/WebGLAttributes.js +4 -0
  459. package/src/renderers/webgl/WebGLCapabilities.js +4 -3
  460. package/src/renderers/webgl/WebGLExtensions.js +2 -25
  461. package/src/renderers/webgl/WebGLInfo.js +3 -1
  462. package/src/renderers/webgl/WebGLProgram.js +25 -18
  463. package/src/renderers/webgl/WebGLPrograms.js +9 -6
  464. package/src/renderers/webgl/WebGLShadowMap.js +13 -2
  465. package/src/renderers/webgl/WebGLState.js +17 -16
  466. package/src/renderers/webgl/WebGLTextures.js +38 -21
  467. package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
  468. package/src/renderers/webgl/WebGLUtils.js +3 -2
  469. package/src/renderers/webgl-fallback/WebGLBackend.js +245 -182
  470. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +184 -30
  471. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
  472. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
  473. package/src/renderers/webgl-fallback/utils/WebGLState.js +9 -8
  474. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +171 -19
  475. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
  476. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
  477. package/src/renderers/webgpu/WebGPUBackend.js +205 -128
  478. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
  479. package/src/renderers/webgpu/WebGPURenderer.js +3 -2
  480. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +198 -121
  481. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +8 -1
  482. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +49 -33
  483. package/src/renderers/webgpu/utils/WebGPUConstants.js +14 -3
  484. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +56 -37
  485. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
  486. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +266 -158
  487. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
  488. package/src/renderers/webgpu/utils/WebGPUUtils.js +24 -19
  489. package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
  490. package/src/renderers/webxr/WebXRManager.js +89 -13
  491. package/src/textures/ExternalTexture.js +56 -0
  492. package/src/textures/FramebufferTexture.js +2 -2
  493. package/src/textures/Source.js +14 -3
  494. package/src/textures/Texture.js +3 -2
  495. package/src/textures/VideoTexture.js +29 -2
  496. package/src/utils.js +67 -3
  497. package/examples/jsm/loaders/RGBMLoader.js +0 -1148
  498. package/examples/jsm/tsl/display/TRAAPassNode.js +0 -452
  499. package/src/nodes/utils/EquirectUVNode.js +0 -65
  500. package/src/nodes/utils/MatcapUVNode.js +0 -49
  501. package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
@@ -46,10 +46,10 @@ class WebGPUTimestampQueryPool extends TimestampQueryPool {
46
46
  /**
47
47
  * Allocates a pair of queries for a given render context.
48
48
  *
49
- * @param {Object} renderContext - The render context to allocate queries for.
49
+ * @param {string} uid - A unique identifier for the render context.
50
50
  * @returns {?number} The base offset for the allocated queries, or null if allocation failed.
51
51
  */
52
- allocateQueriesForContext( renderContext ) {
52
+ allocateQueriesForContext( uid ) {
53
53
 
54
54
  if ( ! this.trackTimestamp || this.isDisposed ) return null;
55
55
 
@@ -63,7 +63,8 @@ class WebGPUTimestampQueryPool extends TimestampQueryPool {
63
63
  const baseOffset = this.currentQueryIndex;
64
64
  this.currentQueryIndex += 2;
65
65
 
66
- this.queryOffsets.set( renderContext.id, baseOffset );
66
+ this.queryOffsets.set( uid, baseOffset );
67
+
67
68
  return baseOffset;
68
69
 
69
70
  }
@@ -177,26 +178,48 @@ class WebGPUTimestampQueryPool extends TimestampQueryPool {
177
178
 
178
179
  }
179
180
 
181
+ //
182
+
180
183
  const times = new BigUint64Array( this.resultBuffer.getMappedRange( 0, bytesUsed ) );
181
- let totalDuration = 0;
184
+ const framesDuration = {};
185
+
186
+ const frames = [];
187
+
188
+ for ( const [ uid, baseOffset ] of currentOffsets ) {
189
+
190
+ const match = uid.match( /^(.*):f(\d+)$/ );
191
+ const frame = parseInt( match[ 2 ] );
192
+
193
+ if ( frames.includes( frame ) === false ) {
182
194
 
183
- for ( const [ , baseOffset ] of currentOffsets ) {
195
+ frames.push( frame );
196
+
197
+ }
198
+
199
+ if ( framesDuration[ frame ] === undefined ) framesDuration[ frame ] = 0;
184
200
 
185
201
  const startTime = times[ baseOffset ];
186
202
  const endTime = times[ baseOffset + 1 ];
187
203
  const duration = Number( endTime - startTime ) / 1e6;
188
- totalDuration += duration;
204
+
205
+ this.timestamps.set( uid, duration );
206
+
207
+ framesDuration[ frame ] += duration;
189
208
 
190
209
  }
191
210
 
211
+ // Return the total duration of the last frame
212
+ const totalDuration = framesDuration[ frames[ frames.length - 1 ] ];
213
+
192
214
  this.resultBuffer.unmap();
193
215
  this.lastValue = totalDuration;
216
+ this.frames = frames;
194
217
 
195
218
  return totalDuration;
196
219
 
197
220
  } catch ( error ) {
198
221
 
199
- console.error( 'Error resolving queries:', error );
222
+ error( 'Error resolving queries:', error );
200
223
  if ( this.resultBuffer.mapState === 'mapped' ) {
201
224
 
202
225
  this.resultBuffer.unmap();
@@ -234,7 +257,7 @@ class WebGPUTimestampQueryPool extends TimestampQueryPool {
234
257
 
235
258
  } catch ( error ) {
236
259
 
237
- console.error( 'Error waiting for pending resolve:', error );
260
+ error( 'Error waiting for pending resolve:', error );
238
261
 
239
262
  }
240
263
 
@@ -249,7 +272,7 @@ class WebGPUTimestampQueryPool extends TimestampQueryPool {
249
272
 
250
273
  } catch ( error ) {
251
274
 
252
- console.error( 'Error unmapping buffer:', error );
275
+ error( 'Error unmapping buffer:', error );
253
276
 
254
277
  }
255
278
 
@@ -83,7 +83,7 @@ class WebGPUUtils {
83
83
  const renderer = this.backend.renderer;
84
84
  const renderTarget = renderer.getRenderTarget();
85
85
 
86
- samples = renderTarget ? renderTarget.samples : renderer.samples;
86
+ samples = renderTarget ? renderTarget.samples : renderer.currentSamples;
87
87
 
88
88
  } else if ( texture.renderTarget ) {
89
89
 
@@ -124,6 +124,26 @@ class WebGPUUtils {
124
124
 
125
125
  }
126
126
 
127
+ /**
128
+ * Returns the GPU formats of all color attachments of the current render context.
129
+ *
130
+ * @param {RenderContext} renderContext - The render context.
131
+ * @return {Array<string>} The GPU texture formats of all color attachments.
132
+ */
133
+ getCurrentColorFormats( renderContext ) {
134
+
135
+ if ( renderContext.textures !== null ) {
136
+
137
+ return renderContext.textures.map( t => this.getTextureFormatGPU( t ) );
138
+
139
+ } else {
140
+
141
+ return [ this.getPreferredCanvasFormat() ]; // default context format
142
+
143
+ }
144
+
145
+ }
146
+
127
147
  /**
128
148
  * Returns the output color space of the current render context.
129
149
  *
@@ -161,29 +181,14 @@ class WebGPUUtils {
161
181
  /**
162
182
  * Returns a modified sample count from the given sample count value.
163
183
  *
164
- * That is required since WebGPU does not support arbitrary sample counts.
184
+ * That is required since WebGPU only supports either 1 or 4.
165
185
  *
166
186
  * @param {number} sampleCount - The input sample count.
167
187
  * @return {number} The (potentially updated) output sample count.
168
188
  */
169
189
  getSampleCount( sampleCount ) {
170
190
 
171
- let count = 1;
172
-
173
- if ( sampleCount > 1 ) {
174
-
175
- // WebGPU only supports power-of-two sample counts and 2 is not a valid value
176
- count = Math.pow( 2, Math.floor( Math.log2( sampleCount ) ) );
177
-
178
- if ( count === 2 ) {
179
-
180
- count = 4;
181
-
182
- }
183
-
184
- }
185
-
186
- return count;
191
+ return sampleCount >= 4 ? 4 : 1;
187
192
 
188
193
  }
189
194
 
@@ -201,7 +206,7 @@ class WebGPUUtils {
201
206
 
202
207
  }
203
208
 
204
- return this.getSampleCount( this.backend.renderer.samples );
209
+ return this.getSampleCount( this.backend.renderer.currentSamples );
205
210
 
206
211
  }
207
212
 
@@ -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,8 +10,10 @@ 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';
16
+ import { warn } from '../../utils.js';
15
17
 
16
18
  /**
17
19
  * This class represents an abstraction of the WebXR Device API and is
@@ -55,7 +57,10 @@ class WebXRManager extends EventDispatcher {
55
57
  let glBaseLayer = null;
56
58
  let xrFrame = null;
57
59
 
60
+ const supportsGlBinding = typeof XRWebGLBinding !== 'undefined';
61
+
58
62
  const depthSensing = new WebXRDepthSensing();
63
+ const cameraAccessTextures = {};
59
64
  const attributes = gl.getContextAttributes();
60
65
 
61
66
  let initialRenderTarget = null;
@@ -243,6 +248,11 @@ class WebXRManager extends EventDispatcher {
243
248
  _currentDepthFar = null;
244
249
 
245
250
  depthSensing.reset();
251
+ for ( const key in cameraAccessTextures ) {
252
+
253
+ delete cameraAccessTextures[ key ];
254
+
255
+ }
246
256
 
247
257
  // restore framebuffer/rendering state
248
258
 
@@ -280,7 +290,7 @@ class WebXRManager extends EventDispatcher {
280
290
 
281
291
  if ( scope.isPresenting === true ) {
282
292
 
283
- console.warn( 'THREE.WebXRManager: Cannot change framebuffer scale while presenting.' );
293
+ warn( 'WebXRManager: Cannot change framebuffer scale while presenting.' );
284
294
 
285
295
  }
286
296
 
@@ -302,7 +312,7 @@ class WebXRManager extends EventDispatcher {
302
312
 
303
313
  if ( scope.isPresenting === true ) {
304
314
 
305
- console.warn( 'THREE.WebXRManager: Cannot change reference space type while presenting.' );
315
+ warn( 'WebXRManager: Cannot change reference space type while presenting.' );
306
316
 
307
317
  }
308
318
 
@@ -333,6 +343,9 @@ class WebXRManager extends EventDispatcher {
333
343
  /**
334
344
  * Returns the current base layer.
335
345
  *
346
+ * This is an `XRProjectionLayer` when the targeted XR device supports the
347
+ * WebXR Layers API, or an `XRWebGLLayer` otherwise.
348
+ *
336
349
  * @return {?(XRWebGLLayer|XRProjectionLayer)} The XR base layer.
337
350
  */
338
351
  this.getBaseLayer = function () {
@@ -344,10 +357,19 @@ class WebXRManager extends EventDispatcher {
344
357
  /**
345
358
  * Returns the current XR binding.
346
359
  *
347
- * @return {?XRWebGLBinding} The XR binding.
360
+ * Creates a new binding if needed and the browser is
361
+ * capable of doing so.
362
+ *
363
+ * @return {?XRWebGLBinding} The XR binding. Returns `null` if one cannot be created.
348
364
  */
349
365
  this.getBinding = function () {
350
366
 
367
+ if ( glBinding === null && supportsGlBinding ) {
368
+
369
+ glBinding = new XRWebGLBinding( session, gl );
370
+
371
+ }
372
+
351
373
  return glBinding;
352
374
 
353
375
  };
@@ -415,11 +437,12 @@ class WebXRManager extends EventDispatcher {
415
437
  currentPixelRatio = renderer.getPixelRatio();
416
438
  renderer.getSize( currentSize );
417
439
 
440
+
418
441
  // Check that the browser implements the necessary APIs to use an
419
442
  // XRProjectionLayer rather than an XRWebGLLayer
420
- const useLayers = typeof XRWebGLBinding !== 'undefined' && 'createProjectionLayer' in XRWebGLBinding.prototype;
443
+ const supportsLayers = supportsGlBinding && 'createProjectionLayer' in XRWebGLBinding.prototype;
421
444
 
422
- if ( ! useLayers ) {
445
+ if ( ! supportsLayers ) {
423
446
 
424
447
  const layerInit = {
425
448
  antialias: attributes.antialias,
@@ -478,7 +501,7 @@ class WebXRManager extends EventDispatcher {
478
501
 
479
502
  }
480
503
 
481
- glBinding = new XRWebGLBinding( session, gl );
504
+ glBinding = this.getBinding();
482
505
 
483
506
  glProjLayer = glBinding.createProjectionLayer( projectionlayerInit );
484
507
 
@@ -574,6 +597,8 @@ class WebXRManager extends EventDispatcher {
574
597
  /**
575
598
  * Returns the current depth texture computed via depth sensing.
576
599
  *
600
+ * See {@link WebXRDepthSensing#getDepthTexture}.
601
+ *
577
602
  * @return {?Texture} The depth texture.
578
603
  */
579
604
  this.getDepthTexture = function () {
@@ -750,7 +775,7 @@ class WebXRManager extends EventDispatcher {
750
775
 
751
776
  /**
752
777
  * Updates the state of the XR camera. Use this method on app level if you
753
- * set cameraAutoUpdate` to `false`. The method requires the non-XR
778
+ * set `cameraAutoUpdate` to `false`. The method requires the non-XR
754
779
  * camera of the scene as a parameter. The passed in camera's transformation
755
780
  * is automatically adjusted to the position of the XR camera when calling
756
781
  * this method.
@@ -788,9 +813,10 @@ class WebXRManager extends EventDispatcher {
788
813
 
789
814
  }
790
815
 
791
- cameraL.layers.mask = camera.layers.mask | 0b010;
792
- cameraR.layers.mask = camera.layers.mask | 0b100;
793
- cameraXR.layers.mask = cameraL.layers.mask | cameraR.layers.mask;
816
+ // inherit camera layers and enable eye layers (1 = left, 2 = right)
817
+ cameraXR.layers.mask = camera.layers.mask | 0b110;
818
+ cameraL.layers.mask = cameraXR.layers.mask & 0b011;
819
+ cameraR.layers.mask = cameraXR.layers.mask & 0b101;
794
820
 
795
821
  const cameras = cameraXR.cameras;
796
822
  var object = poseTarget || camera;
@@ -872,7 +898,7 @@ class WebXRManager extends EventDispatcher {
872
898
  /**
873
899
  * Returns the amount of foveation used by the XR compositor for the projection layer.
874
900
  *
875
- * @return {number} The amount of foveation.
901
+ * @return {number|undefined} The amount of foveation.
876
902
  */
877
903
  this.getFoveation = function () {
878
904
 
@@ -927,6 +953,8 @@ class WebXRManager extends EventDispatcher {
927
953
  /**
928
954
  * Returns the depth sensing mesh.
929
955
  *
956
+ * See {@link WebXRDepthSensing#getMesh}.
957
+ *
930
958
  * @return {Mesh} The depth sensing mesh.
931
959
  */
932
960
  this.getDepthSensingMesh = function () {
@@ -935,6 +963,19 @@ class WebXRManager extends EventDispatcher {
935
963
 
936
964
  };
937
965
 
966
+ /**
967
+ * Retrieves an opaque texture from the view-aligned {@link XRCamera}.
968
+ * Only available during the current animation loop.
969
+ *
970
+ * @param {XRCamera} xrCamera - The camera to query.
971
+ * @return {?Texture} An opaque texture representing the current raw camera frame.
972
+ */
973
+ this.getCameraTexture = function ( xrCamera ) {
974
+
975
+ return cameraAccessTextures[ xrCamera ];
976
+
977
+ };
978
+
938
979
  // Animation Loop
939
980
 
940
981
  let onAnimationFrameCallback = null;
@@ -1034,13 +1075,48 @@ class WebXRManager extends EventDispatcher {
1034
1075
  enabledFeatures.includes( 'depth-sensing' ) &&
1035
1076
  session.depthUsage == 'gpu-optimized';
1036
1077
 
1037
- if ( gpuDepthSensingEnabled && glBinding ) {
1078
+ if ( gpuDepthSensingEnabled && supportsGlBinding ) {
1079
+
1080
+ glBinding = scope.getBinding();
1038
1081
 
1039
1082
  const depthData = glBinding.getDepthInformation( views[ 0 ] );
1040
1083
 
1041
1084
  if ( depthData && depthData.isValid && depthData.texture ) {
1042
1085
 
1043
- depthSensing.init( renderer, depthData, session.renderState );
1086
+ depthSensing.init( depthData, session.renderState );
1087
+
1088
+ }
1089
+
1090
+ }
1091
+
1092
+ const cameraAccessEnabled = enabledFeatures &&
1093
+ enabledFeatures.includes( 'camera-access' );
1094
+
1095
+ if ( cameraAccessEnabled && supportsGlBinding ) {
1096
+
1097
+ renderer.state.unbindTexture();
1098
+
1099
+ glBinding = scope.getBinding();
1100
+
1101
+ for ( let i = 0; i < views.length; i ++ ) {
1102
+
1103
+ const camera = views[ i ].camera;
1104
+
1105
+ if ( camera ) {
1106
+
1107
+ let cameraTex = cameraAccessTextures[ camera ];
1108
+
1109
+ if ( ! cameraTex ) {
1110
+
1111
+ cameraTex = new ExternalTexture();
1112
+ cameraAccessTextures[ camera ] = cameraTex;
1113
+
1114
+ }
1115
+
1116
+ const glTexture = glBinding.getCameraImage( camera );
1117
+ cameraTex.sourceTexture = glTexture;
1118
+
1119
+ }
1044
1120
 
1045
1121
  }
1046
1122
 
@@ -0,0 +1,56 @@
1
+ import { Texture } from './Texture.js';
2
+
3
+ /**
4
+ * Represents a texture created externally with the same 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}, and in
10
+ * the {@link WebGPURenderer} WebGPU backend.
11
+ *
12
+ * @augments Texture
13
+ */
14
+ class ExternalTexture extends Texture {
15
+
16
+ /**
17
+ * Creates a new raw texture.
18
+ *
19
+ * @param {?(WebGLTexture|GPUTexture)} [sourceTexture=null] - The external texture.
20
+ */
21
+ constructor( sourceTexture = null ) {
22
+
23
+ super();
24
+
25
+ /**
26
+ * The external source texture.
27
+ *
28
+ * @type {?(WebGLTexture|GPUTexture)}
29
+ * @default null
30
+ */
31
+ this.sourceTexture = sourceTexture;
32
+
33
+ /**
34
+ * This flag can be used for type testing.
35
+ *
36
+ * @type {boolean}
37
+ * @readonly
38
+ * @default true
39
+ */
40
+ this.isExternalTexture = true;
41
+
42
+ }
43
+
44
+ copy( source ) {
45
+
46
+ super.copy( source );
47
+
48
+ this.sourceTexture = source.sourceTexture;
49
+
50
+ return this;
51
+
52
+ }
53
+
54
+ }
55
+
56
+ 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
 
@@ -1,5 +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
4
 
4
5
  let _sourceId = 0;
5
6
 
@@ -73,13 +74,23 @@ class Source {
73
74
 
74
75
  }
75
76
 
77
+ /**
78
+ * Returns the dimensions of the source into the given target vector.
79
+ *
80
+ * @param {(Vector2|Vector3)} target - The target object the result is written into.
81
+ * @return {(Vector2|Vector3)} The dimensions of the source.
82
+ */
76
83
  getSize( target ) {
77
84
 
78
85
  const data = this.data;
79
86
 
80
- if ( data instanceof HTMLVideoElement ) {
87
+ if ( ( typeof HTMLVideoElement !== 'undefined' ) && ( data instanceof HTMLVideoElement ) ) {
88
+
89
+ target.set( data.videoWidth, data.videoHeight, 0 );
90
+
91
+ } else if ( data instanceof VideoFrame ) {
81
92
 
82
- target.set( data.videoWidth, data.videoHeight );
93
+ target.set( data.displayHeight, data.displayWidth, 0 );
83
94
 
84
95
  } else if ( data !== null ) {
85
96
 
@@ -207,7 +218,7 @@ function serializeImage( image ) {
207
218
 
208
219
  } else {
209
220
 
210
- console.warn( 'THREE.Texture: Unable to serialize Texture.' );
221
+ warn( 'Texture: Unable to serialize Texture.' );
211
222
  return {};
212
223
 
213
224
  }
@@ -15,6 +15,7 @@ import { Vector2 } from '../math/Vector2.js';
15
15
  import { Vector3 } from '../math/Vector3.js';
16
16
  import { Matrix3 } from '../math/Matrix3.js';
17
17
  import { Source } from './Source.js';
18
+ import { warn } from '../utils.js';
18
19
 
19
20
  let _textureId = 0;
20
21
 
@@ -521,7 +522,7 @@ class Texture extends EventDispatcher {
521
522
 
522
523
  if ( newValue === undefined ) {
523
524
 
524
- console.warn( `THREE.Texture.setValues(): parameter '${ key }' has value of undefined.` );
525
+ warn( `Texture.setValues(): parameter '${ key }' has value of undefined.` );
525
526
  continue;
526
527
 
527
528
  }
@@ -530,7 +531,7 @@ class Texture extends EventDispatcher {
530
531
 
531
532
  if ( currentValue === undefined ) {
532
533
 
533
- console.warn( `THREE.Texture.setValues(): property '${ key }' does not exist.` );
534
+ warn( `Texture.setValues(): property '${ key }' does not exist.` );
534
535
  continue;
535
536
 
536
537
  }
@@ -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
  *
@@ -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,20 @@ class VideoTexture extends Texture {
95
108
 
96
109
  }
97
110
 
111
+ dispose() {
112
+
113
+ if ( this._requestVideoFrameCallbackId !== 0 ) {
114
+
115
+ this.source.data.cancelVideoFrameCallback( this._requestVideoFrameCallbackId );
116
+
117
+ this._requestVideoFrameCallbackId = 0;
118
+
119
+ }
120
+
121
+ super.dispose();
122
+
123
+ }
124
+
98
125
  }
99
126
 
100
127
  export { VideoTexture };