super-three 0.171.0 → 0.173.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 (455) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/build/three.cjs +594 -427
  4. package/build/three.core.js +515 -81
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +79 -350
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +20 -7
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +29362 -3427
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +29361 -3427
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +0 -5
  15. package/examples/jsm/animation/CCDIKSolver.js +9 -7
  16. package/examples/jsm/capabilities/WebGPU.js +1 -1
  17. package/examples/jsm/controls/ArcballControls.js +48 -37
  18. package/examples/jsm/controls/OrbitControls.js +5 -4
  19. package/examples/jsm/csm/CSMShadowNode.js +16 -11
  20. package/examples/jsm/curves/NURBSCurve.js +1 -1
  21. package/examples/jsm/curves/NURBSUtils.js +3 -0
  22. package/examples/jsm/effects/OutlineEffect.js +1 -1
  23. package/examples/jsm/exporters/GLTFExporter.js +34 -29
  24. package/examples/jsm/exporters/KTX2Exporter.js +1 -1
  25. package/examples/jsm/exporters/PLYExporter.js +2 -2
  26. package/examples/jsm/geometries/TextGeometry.js +1 -12
  27. package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
  28. package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
  29. package/examples/jsm/interactive/InteractiveGroup.js +108 -51
  30. package/examples/jsm/libs/demuxer_mp4.js +109 -0
  31. package/examples/jsm/lights/LightProbeGenerator.js +3 -3
  32. package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
  33. package/examples/jsm/loaders/3MFLoader.js +6 -3
  34. package/examples/jsm/loaders/BVHLoader.js +1 -1
  35. package/examples/jsm/loaders/ColladaLoader.js +5 -5
  36. package/examples/jsm/loaders/DDSLoader.js +42 -0
  37. package/examples/jsm/loaders/GCodeLoader.js +4 -2
  38. package/examples/jsm/loaders/GLTFLoader.js +22 -4
  39. package/examples/jsm/loaders/KTX2Loader.js +6 -1
  40. package/examples/jsm/loaders/KTXLoader.js +4 -4
  41. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  42. package/examples/jsm/loaders/LottieLoader.js +1 -1
  43. package/examples/jsm/loaders/MTLLoader.js +1 -0
  44. package/examples/jsm/loaders/NRRDLoader.js +1 -1
  45. package/examples/jsm/loaders/PLYLoader.js +7 -7
  46. package/examples/jsm/loaders/PVRLoader.js +1 -1
  47. package/examples/jsm/loaders/SVGLoader.js +2 -2
  48. package/examples/jsm/loaders/TDSLoader.js +1 -2
  49. package/examples/jsm/loaders/VRMLLoader.js +7 -7
  50. package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
  51. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
  52. package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
  53. package/examples/jsm/math/ConvexHull.js +1 -1
  54. package/examples/jsm/math/OBB.js +17 -0
  55. package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
  56. package/examples/jsm/misc/ProgressiveLightMap.js +4 -3
  57. package/examples/jsm/misc/ProgressiveLightMapGPU.js +14 -13
  58. package/examples/jsm/misc/Volume.js +27 -17
  59. package/examples/jsm/misc/VolumeSlice.js +7 -5
  60. package/examples/jsm/modifiers/CurveModifier.js +10 -8
  61. package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
  62. package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
  63. package/examples/jsm/objects/GroundedSkybox.js +4 -4
  64. package/examples/jsm/objects/Sky.js +2 -2
  65. package/examples/jsm/objects/SkyMesh.js +3 -3
  66. package/examples/jsm/objects/Water2.js +1 -1
  67. package/examples/jsm/objects/Water2Mesh.js +2 -2
  68. package/examples/jsm/objects/WaterMesh.js +29 -24
  69. package/examples/jsm/physics/JoltPhysics.js +7 -7
  70. package/examples/jsm/physics/RapierPhysics.js +4 -4
  71. package/examples/jsm/postprocessing/BloomPass.js +2 -2
  72. package/examples/jsm/postprocessing/EffectComposer.js +1 -2
  73. package/examples/jsm/postprocessing/OutlinePass.js +4 -4
  74. package/examples/jsm/postprocessing/OutputPass.js +2 -0
  75. package/examples/jsm/postprocessing/SAOPass.js +1 -2
  76. package/examples/jsm/postprocessing/SMAAPass.js +1 -3
  77. package/examples/jsm/postprocessing/SSAOPass.js +2 -4
  78. package/examples/jsm/postprocessing/SSRPass.js +2 -4
  79. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
  80. package/examples/jsm/renderers/SVGRenderer.js +6 -4
  81. package/examples/jsm/shaders/BokehShader2.js +1 -1
  82. package/examples/jsm/shaders/GodRaysShader.js +3 -3
  83. package/examples/jsm/shaders/OutputShader.js +5 -1
  84. package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
  85. package/examples/jsm/transpiler/GLSLDecoder.js +2 -2
  86. package/examples/jsm/transpiler/TSLEncoder.js +2 -0
  87. package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
  88. package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
  89. package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
  90. package/examples/jsm/tsl/display/BleachBypass.js +10 -0
  91. package/examples/jsm/tsl/display/BloomNode.js +233 -26
  92. package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
  93. package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
  94. package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
  95. package/examples/jsm/tsl/display/FXAANode.js +52 -3
  96. package/examples/jsm/tsl/display/FilmNode.js +47 -1
  97. package/examples/jsm/tsl/display/GTAONode.js +210 -14
  98. package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
  99. package/examples/jsm/tsl/display/LensflareNode.js +131 -13
  100. package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
  101. package/examples/jsm/tsl/display/MotionBlur.js +12 -2
  102. package/examples/jsm/tsl/display/OutlineNode.js +343 -26
  103. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
  104. package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
  105. package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
  106. package/examples/jsm/tsl/display/SMAANode.js +187 -46
  107. package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
  108. package/examples/jsm/tsl/display/SSRNode.js +194 -21
  109. package/examples/jsm/tsl/display/Sepia.js +9 -0
  110. package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
  111. package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
  112. package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
  113. package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
  114. package/examples/jsm/tsl/display/TransitionNode.js +71 -6
  115. package/examples/jsm/tsl/display/hashBlur.js +14 -3
  116. package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
  117. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  118. package/examples/jsm/utils/CameraUtils.js +4 -1
  119. package/examples/jsm/utils/GeometryUtils.js +22 -19
  120. package/examples/jsm/utils/SceneUtils.js +2 -2
  121. package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
  122. package/examples/jsm/webxr/XREstimatedLight.js +1 -1
  123. package/package.json +8 -3
  124. package/src/Three.Core.js +4 -0
  125. package/src/Three.Legacy.js +0 -21
  126. package/src/Three.TSL.js +18 -5
  127. package/src/Three.WebGPU.Nodes.js +2 -2
  128. package/src/Three.WebGPU.js +2 -2
  129. package/src/animation/PropertyBinding.js +2 -2
  130. package/src/cameras/ArrayCamera.js +1 -0
  131. package/src/cameras/PerspectiveCamera.js +18 -2
  132. package/src/constants.js +6 -1
  133. package/src/core/BufferAttribute.js +4 -0
  134. package/src/core/EventDispatcher.js +8 -6
  135. package/src/core/RenderTarget.js +18 -0
  136. package/src/core/RenderTarget3D.js +22 -0
  137. package/src/core/RenderTargetArray.js +22 -0
  138. package/src/extras/Earcut.js +1 -1
  139. package/src/extras/ImageUtils.js +1 -11
  140. package/src/extras/PMREMGenerator.js +20 -0
  141. package/src/extras/TextureUtils.js +6 -0
  142. package/src/helpers/CameraHelper.js +16 -13
  143. package/src/loaders/nodes/NodeLoader.js +59 -0
  144. package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
  145. package/src/loaders/nodes/NodeObjectLoader.js +61 -0
  146. package/src/materials/nodes/Line2NodeMaterial.js +128 -34
  147. package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
  148. package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
  149. package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
  150. package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
  151. package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
  152. package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
  153. package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
  154. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
  155. package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
  156. package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
  157. package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
  158. package/src/materials/nodes/NodeMaterial.js +476 -23
  159. package/src/materials/nodes/NodeMaterials.js +0 -1
  160. package/src/materials/nodes/PointsNodeMaterial.js +121 -10
  161. package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
  162. package/src/materials/nodes/SpriteNodeMaterial.js +78 -20
  163. package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
  164. package/src/materials/nodes/manager/NodeMaterialObserver.js +95 -0
  165. package/src/nodes/Nodes.js +5 -6
  166. package/src/nodes/TSL.js +6 -3
  167. package/src/nodes/accessors/AccessorsUtils.js +27 -0
  168. package/src/nodes/accessors/Arrays.js +47 -6
  169. package/src/nodes/accessors/BatchNode.js +42 -6
  170. package/src/nodes/accessors/Bitangent.js +37 -0
  171. package/src/nodes/accessors/BufferAttributeNode.js +178 -5
  172. package/src/nodes/accessors/BufferNode.js +63 -0
  173. package/src/nodes/accessors/BuiltinNode.js +38 -0
  174. package/src/nodes/accessors/Camera.js +113 -3
  175. package/src/nodes/accessors/ClippingNode.js +71 -2
  176. package/src/nodes/accessors/CubeTextureNode.js +64 -0
  177. package/src/nodes/accessors/InstanceNode.js +85 -2
  178. package/src/nodes/accessors/InstancedMeshNode.js +28 -3
  179. package/src/nodes/accessors/Lights.js +50 -1
  180. package/src/nodes/accessors/MaterialNode.js +306 -12
  181. package/src/nodes/accessors/MaterialProperties.js +7 -0
  182. package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
  183. package/src/nodes/accessors/ModelNode.js +100 -5
  184. package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
  185. package/src/nodes/accessors/MorphNode.js +48 -4
  186. package/src/nodes/accessors/Normal.js +65 -5
  187. package/src/nodes/accessors/Object3DNode.js +101 -1
  188. package/src/nodes/accessors/PointUVNode.js +26 -0
  189. package/src/nodes/accessors/Position.js +56 -7
  190. package/src/nodes/accessors/ReferenceBaseNode.js +186 -0
  191. package/src/nodes/accessors/ReferenceNode.js +201 -2
  192. package/src/nodes/accessors/ReflectVector.js +24 -0
  193. package/src/nodes/accessors/RendererReferenceNode.js +46 -1
  194. package/src/nodes/accessors/SceneNode.js +54 -0
  195. package/src/nodes/accessors/SkinningNode.js +127 -1
  196. package/src/nodes/accessors/StorageBufferNode.js +209 -8
  197. package/src/nodes/accessors/StorageTextureNode.js +118 -0
  198. package/src/nodes/accessors/Tangent.js +38 -2
  199. package/src/nodes/accessors/Texture3DNode.js +91 -7
  200. package/src/nodes/accessors/TextureBicubic.js +12 -2
  201. package/src/nodes/accessors/TextureNode.js +316 -10
  202. package/src/nodes/accessors/TextureSizeNode.js +42 -0
  203. package/src/nodes/accessors/UV.js +10 -1
  204. package/src/nodes/accessors/UniformArrayNode.js +231 -25
  205. package/src/nodes/accessors/UserDataNode.js +46 -0
  206. package/src/nodes/accessors/VelocityNode.js +80 -0
  207. package/src/nodes/accessors/VertexColorNode.js +39 -2
  208. package/src/nodes/code/CodeNode.js +95 -1
  209. package/src/nodes/code/ExpressionNode.js +28 -0
  210. package/src/nodes/code/FunctionCallNode.js +37 -0
  211. package/src/nodes/code/FunctionNode.js +45 -0
  212. package/src/nodes/code/ScriptableNode.js +223 -1
  213. package/src/nodes/code/ScriptableValueNode.js +85 -1
  214. package/src/nodes/core/ArrayNode.js +125 -0
  215. package/src/nodes/core/AssignNode.js +48 -2
  216. package/src/nodes/core/AttributeNode.js +43 -0
  217. package/src/nodes/core/BypassNode.js +47 -2
  218. package/src/nodes/core/CacheNode.js +53 -2
  219. package/src/nodes/core/ConstNode.js +32 -0
  220. package/src/nodes/core/ContextNode.js +65 -0
  221. package/src/nodes/core/IndexNode.js +68 -7
  222. package/src/nodes/core/InputNode.js +48 -0
  223. package/src/nodes/core/LightingModel.js +60 -0
  224. package/src/nodes/core/MRTNode.js +66 -0
  225. package/src/nodes/core/Node.js +350 -12
  226. package/src/nodes/core/NodeAttribute.js +38 -0
  227. package/src/nodes/core/NodeBuilder.js +1166 -26
  228. package/src/nodes/core/NodeCache.js +41 -2
  229. package/src/nodes/core/NodeCode.js +31 -0
  230. package/src/nodes/core/NodeFrame.js +123 -2
  231. package/src/nodes/core/NodeFunction.js +46 -0
  232. package/src/nodes/core/NodeFunctionInput.js +44 -0
  233. package/src/nodes/core/NodeParser.js +11 -0
  234. package/src/nodes/core/NodeUniform.js +52 -0
  235. package/src/nodes/core/NodeUtils.js +152 -1
  236. package/src/nodes/core/NodeVar.js +47 -1
  237. package/src/nodes/core/NodeVarying.js +28 -0
  238. package/src/nodes/core/OutputStructNode.js +51 -10
  239. package/src/nodes/core/ParameterNode.js +28 -0
  240. package/src/nodes/core/PropertyNode.js +232 -0
  241. package/src/nodes/core/StackNode.js +98 -1
  242. package/src/nodes/core/StructNode.js +121 -0
  243. package/src/nodes/core/StructType.js +13 -0
  244. package/src/nodes/core/StructTypeNode.js +105 -6
  245. package/src/nodes/core/TempNode.js +31 -5
  246. package/src/nodes/core/UniformGroupNode.js +82 -7
  247. package/src/nodes/core/UniformNode.js +66 -0
  248. package/src/nodes/core/VarNode.js +146 -7
  249. package/src/nodes/core/VaryingNode.js +100 -3
  250. package/src/nodes/core/constants.js +36 -0
  251. package/src/nodes/display/BlendModes.js +88 -1
  252. package/src/nodes/display/BumpMapNode.js +37 -0
  253. package/src/nodes/display/ColorAdjustment.js +53 -11
  254. package/src/nodes/display/ColorSpaceFunctions.js +16 -0
  255. package/src/nodes/display/ColorSpaceNode.js +82 -0
  256. package/src/nodes/display/FrontFacingNode.js +29 -0
  257. package/src/nodes/display/NormalMapNode.js +43 -0
  258. package/src/nodes/display/PassNode.js +300 -7
  259. package/src/nodes/display/PosterizeNode.js +33 -0
  260. package/src/nodes/display/RenderOutputNode.js +66 -1
  261. package/src/nodes/display/ScreenNode.js +96 -0
  262. package/src/nodes/display/ToneMappingFunctions.js +58 -10
  263. package/src/nodes/display/ToneMappingNode.js +55 -2
  264. package/src/nodes/display/ToonOutlinePassNode.js +73 -0
  265. package/src/nodes/display/ViewportDepthNode.js +122 -8
  266. package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
  267. package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
  268. package/src/nodes/display/ViewportTextureNode.js +57 -0
  269. package/src/nodes/fog/Fog.js +110 -0
  270. package/src/nodes/functions/BasicLightingModel.js +24 -0
  271. package/src/nodes/functions/PhongLightingModel.js +34 -2
  272. package/src/nodes/functions/PhysicalLightingModel.js +167 -8
  273. package/src/nodes/functions/ShadowMaskModel.js +23 -0
  274. package/src/nodes/functions/ToonLightingModel.js +20 -0
  275. package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
  276. package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
  277. package/src/nodes/geometry/RangeNode.js +54 -2
  278. package/src/nodes/gpgpu/AtomicFunctionNode.js +174 -2
  279. package/src/nodes/gpgpu/BarrierNode.js +47 -0
  280. package/src/nodes/gpgpu/ComputeBuiltinNode.js +134 -0
  281. package/src/nodes/gpgpu/ComputeNode.js +106 -2
  282. package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
  283. package/src/nodes/lighting/AONode.js +18 -0
  284. package/src/nodes/lighting/AmbientLightNode.js +10 -0
  285. package/src/nodes/lighting/AnalyticLightNode.js +97 -2
  286. package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
  287. package/src/nodes/lighting/BasicLightMapNode.js +17 -0
  288. package/src/nodes/lighting/DirectionalLightNode.js +10 -0
  289. package/src/nodes/lighting/EnvironmentNode.js +18 -0
  290. package/src/nodes/lighting/HemisphereLightNode.js +31 -0
  291. package/src/nodes/lighting/IESSpotLightNode.js +11 -0
  292. package/src/nodes/lighting/IrradianceNode.js +17 -0
  293. package/src/nodes/lighting/LightProbeNode.js +20 -0
  294. package/src/nodes/lighting/LightUtils.js +12 -0
  295. package/src/nodes/lighting/LightingContextNode.js +48 -0
  296. package/src/nodes/lighting/LightingNode.js +15 -6
  297. package/src/nodes/lighting/LightsNode.js +132 -1
  298. package/src/nodes/lighting/PointLightNode.js +32 -1
  299. package/src/nodes/lighting/PointShadowNode.js +54 -1
  300. package/src/nodes/lighting/RectAreaLightNode.js +44 -6
  301. package/src/nodes/lighting/ShadowBaseNode.js +93 -0
  302. package/src/nodes/lighting/ShadowNode.js +241 -35
  303. package/src/nodes/lighting/SpotLightNode.js +43 -0
  304. package/src/nodes/math/ConditionalNode.js +78 -4
  305. package/src/nodes/math/Hash.js +9 -0
  306. package/src/nodes/math/MathNode.js +627 -11
  307. package/src/nodes/math/MathUtils.js +45 -1
  308. package/src/nodes/math/OperatorNode.js +329 -18
  309. package/src/nodes/math/TriNoise3D.js +18 -7
  310. package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
  311. package/src/nodes/parsers/GLSLNodeParser.js +11 -0
  312. package/src/nodes/pmrem/PMREMNode.js +133 -0
  313. package/src/nodes/pmrem/PMREMUtils.js +2 -2
  314. package/src/nodes/procedural/Checker.js +9 -0
  315. package/src/nodes/shapes/Shapes.js +33 -0
  316. package/src/nodes/tsl/TSLBase.js +3 -2
  317. package/src/nodes/tsl/TSLCore.js +22 -2
  318. package/src/nodes/utils/ArrayElementNode.js +39 -3
  319. package/src/nodes/utils/ConvertNode.js +31 -0
  320. package/src/nodes/utils/CubeMapNode.js +78 -0
  321. package/src/nodes/utils/Discard.js +16 -0
  322. package/src/nodes/utils/EquirectUVNode.js +31 -1
  323. package/src/nodes/utils/FlipNode.js +38 -0
  324. package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
  325. package/src/nodes/utils/JoinNode.js +25 -0
  326. package/src/nodes/utils/LoopNode.js +82 -2
  327. package/src/nodes/utils/MatcapUVNode.js +17 -0
  328. package/src/nodes/utils/MaxMipLevelNode.js +49 -0
  329. package/src/nodes/utils/MemberNode.js +68 -0
  330. package/src/nodes/utils/Oscillators.js +33 -0
  331. package/src/nodes/utils/Packing.js +17 -0
  332. package/src/nodes/utils/PostProcessingUtils.js +28 -23
  333. package/src/nodes/utils/RTTNode.js +123 -2
  334. package/src/nodes/utils/ReflectorNode.js +174 -4
  335. package/src/nodes/utils/RemapNode.js +79 -0
  336. package/src/nodes/utils/RotateNode.js +41 -0
  337. package/src/nodes/utils/SetNode.js +44 -1
  338. package/src/nodes/utils/SplitNode.js +55 -3
  339. package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
  340. package/src/nodes/utils/SpriteUtils.js +17 -0
  341. package/src/nodes/utils/StorageArrayElementNode.js +54 -0
  342. package/src/nodes/utils/Timer.js +40 -0
  343. package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
  344. package/src/nodes/utils/UVUtils.js +20 -0
  345. package/src/nodes/utils/ViewportUtils.js +13 -0
  346. package/src/objects/BatchedMesh.js +2 -3
  347. package/src/objects/ClippingGroup.js +49 -0
  348. package/src/objects/Line.js +6 -6
  349. package/src/renderers/WebGLRenderer.js +30 -4
  350. package/src/renderers/common/Animation.js +85 -0
  351. package/src/renderers/common/Attributes.js +36 -0
  352. package/src/renderers/common/Backend.js +502 -44
  353. package/src/renderers/common/Background.js +48 -1
  354. package/src/renderers/common/BindGroup.js +43 -0
  355. package/src/renderers/common/Binding.js +35 -0
  356. package/src/renderers/common/Bindings.js +93 -1
  357. package/src/renderers/common/Buffer.js +49 -0
  358. package/src/renderers/common/BufferUtils.js +27 -0
  359. package/src/renderers/common/BundleGroup.js +57 -0
  360. package/src/renderers/common/ChainMap.js +45 -6
  361. package/src/renderers/common/ClippingContext.js +108 -15
  362. package/src/renderers/common/Color4.js +40 -0
  363. package/src/renderers/common/ComputePipeline.js +24 -0
  364. package/src/renderers/common/CubeRenderTarget.js +13 -0
  365. package/src/renderers/common/DataMap.js +37 -1
  366. package/src/renderers/common/Geometries.js +91 -14
  367. package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
  368. package/src/renderers/common/Info.js +78 -35
  369. package/src/renderers/common/Lighting.js +34 -6
  370. package/src/renderers/common/Pipeline.js +22 -0
  371. package/src/renderers/common/Pipelines.js +148 -5
  372. package/src/renderers/common/PostProcessing.js +99 -11
  373. package/src/renderers/common/ProgrammableStage.js +60 -2
  374. package/src/renderers/common/QuadMesh.js +54 -5
  375. package/src/renderers/common/RenderBundle.js +14 -8
  376. package/src/renderers/common/RenderBundles.js +39 -10
  377. package/src/renderers/common/RenderContext.js +201 -2
  378. package/src/renderers/common/RenderContexts.js +59 -6
  379. package/src/renderers/common/RenderList.js +178 -0
  380. package/src/renderers/common/RenderLists.js +40 -3
  381. package/src/renderers/common/RenderObject.js +400 -17
  382. package/src/renderers/common/RenderObjects.js +103 -7
  383. package/src/renderers/common/RenderPipeline.js +24 -0
  384. package/src/renderers/common/Renderer.js +1170 -86
  385. package/src/renderers/common/RendererUtils.js +193 -0
  386. package/src/renderers/common/SampledTexture.js +120 -0
  387. package/src/renderers/common/Sampler.js +30 -0
  388. package/src/renderers/common/StorageBuffer.js +24 -0
  389. package/src/renderers/common/StorageBufferAttribute.js +31 -2
  390. package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
  391. package/src/renderers/common/StorageTexture.js +38 -0
  392. package/src/renderers/common/Textures.js +97 -7
  393. package/src/renderers/common/TimestampQueryPool.js +39 -0
  394. package/src/renderers/common/Uniform.js +225 -3
  395. package/src/renderers/common/UniformBuffer.js +19 -0
  396. package/src/renderers/common/UniformsGroup.js +141 -2
  397. package/src/renderers/common/XRManager.js +1193 -0
  398. package/src/renderers/common/XRRenderTarget.js +74 -0
  399. package/src/renderers/common/extras/PMREMGenerator.js +76 -10
  400. package/src/renderers/common/nodes/NodeBuilderState.js +99 -5
  401. package/src/renderers/common/nodes/NodeLibrary.js +89 -0
  402. package/src/renderers/common/nodes/NodeSampledTexture.js +90 -2
  403. package/src/renderers/common/nodes/NodeSampler.js +28 -0
  404. package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
  405. package/src/renderers/common/nodes/NodeUniform.js +243 -2
  406. package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
  407. package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
  408. package/src/renderers/common/nodes/Nodes.js +352 -78
  409. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
  410. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
  411. package/src/renderers/webgl/WebGLBackground.js +4 -0
  412. package/src/renderers/webgl-fallback/WebGLBackend.js +819 -116
  413. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +347 -18
  414. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +58 -1
  415. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
  416. package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
  417. package/src/renderers/webgl-fallback/utils/WebGLState.js +323 -11
  418. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +168 -22
  419. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +359 -0
  420. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
  421. package/src/renderers/webgpu/WebGPUBackend.js +578 -164
  422. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +36 -0
  423. package/src/renderers/webgpu/WebGPURenderer.js +36 -0
  424. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
  425. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
  426. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +674 -52
  427. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
  428. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  429. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +95 -14
  430. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +94 -1
  431. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +102 -3
  432. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +98 -1
  433. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +262 -18
  434. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +274 -0
  435. package/src/renderers/webgpu/utils/WebGPUUtils.js +116 -4
  436. package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
  437. package/src/renderers/webxr/WebXRManager.js +19 -2
  438. package/src/textures/Data3DTexture.js +2 -2
  439. package/src/textures/Texture.js +4 -0
  440. package/src/textures/VideoFrameTexture.js +35 -0
  441. package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
  442. package/examples/jsm/animation/MMDPhysics.js +0 -1408
  443. package/examples/jsm/exporters/MMDExporter.js +0 -223
  444. package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -176
  445. package/examples/jsm/libs/mmdparser.module.js +0 -11530
  446. package/examples/jsm/loaders/MMDLoader.js +0 -2298
  447. package/examples/jsm/objects/InstancedPoints.js +0 -19
  448. package/examples/jsm/shaders/MMDToonShader.js +0 -134
  449. package/src/materials/nodes/InstancedPointsNodeMaterial.js +0 -156
  450. package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -24
  451. package/src/nodes/core/UniformGroup.js +0 -13
  452. package/src/nodes/fog/FogExp2Node.js +0 -35
  453. package/src/nodes/fog/FogNode.js +0 -50
  454. package/src/nodes/fog/FogRangeNode.js +0 -36
  455. package/src/renderers/common/PostProcessingUtils.js +0 -86
@@ -0,0 +1,274 @@
1
+ import { warnOnce } from '../../../utils.js';
2
+ import TimestampQueryPool from '../../common/TimestampQueryPool.js';
3
+
4
+ /**
5
+ * Manages a pool of WebGPU timestamp queries for performance measurement.
6
+ * Extends the base TimestampQueryPool to provide WebGPU-specific implementation.
7
+ * @extends TimestampQueryPool
8
+ */
9
+ class WebGPUTimestampQueryPool extends TimestampQueryPool {
10
+
11
+ /**
12
+ * Creates a new WebGPU timestamp query pool.
13
+ * @param {GPUDevice} device - The WebGPU device to create queries on.
14
+ * @param {string} type - The type identifier for this query pool.
15
+ * @param {number} [maxQueries=2048] - Maximum number of queries this pool can hold.
16
+ */
17
+ constructor( device, type, maxQueries = 2048 ) {
18
+
19
+ super( maxQueries );
20
+ this.device = device;
21
+ this.type = type;
22
+
23
+ this.querySet = this.device.createQuerySet( {
24
+ type: 'timestamp',
25
+ count: this.maxQueries,
26
+ label: `queryset_global_timestamp_${type}`
27
+ } );
28
+
29
+ const bufferSize = this.maxQueries * 8;
30
+ this.resolveBuffer = this.device.createBuffer( {
31
+ label: `buffer_timestamp_resolve_${type}`,
32
+ size: bufferSize,
33
+ usage: GPUBufferUsage.QUERY_RESOLVE | GPUBufferUsage.COPY_SRC
34
+ } );
35
+
36
+ this.resultBuffer = this.device.createBuffer( {
37
+ label: `buffer_timestamp_result_${type}`,
38
+ size: bufferSize,
39
+ usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ
40
+ } );
41
+
42
+ }
43
+
44
+ /**
45
+ * Allocates a pair of queries for a given render context.
46
+ * @param {Object} renderContext - The render context to allocate queries for.
47
+ * @returns {?number} The base offset for the allocated queries, or null if allocation failed.
48
+ */
49
+ allocateQueriesForContext( renderContext ) {
50
+
51
+ if ( ! this.trackTimestamp || this.isDisposed ) return null;
52
+
53
+ if ( this.currentQueryIndex + 2 > this.maxQueries ) {
54
+
55
+ warnOnce( `WebGPUTimestampQueryPool [${ this.type }]: Maximum number of queries exceeded, when using trackTimestamp it is necessary to resolves the queries via renderer.resolveTimestampsAsync( THREE.TimestampQuery.${ this.type.toUpperCase() } ).` );
56
+ return null;
57
+
58
+ }
59
+
60
+ const baseOffset = this.currentQueryIndex;
61
+ this.currentQueryIndex += 2;
62
+
63
+ this.queryOffsets.set( renderContext.id, baseOffset );
64
+ return baseOffset;
65
+
66
+ }
67
+
68
+ /**
69
+ * Asynchronously resolves all pending queries and returns the total duration.
70
+ * If there's already a pending resolve operation, returns that promise instead.
71
+ * @returns {Promise<number>} The total duration in milliseconds, or the last valid value if resolution fails.
72
+ */
73
+ async resolveQueriesAsync() {
74
+
75
+ if ( ! this.trackTimestamp || this.currentQueryIndex === 0 || this.isDisposed ) {
76
+
77
+ return this.lastValue;
78
+
79
+ }
80
+
81
+ if ( this.pendingResolve ) {
82
+
83
+ return this.pendingResolve;
84
+
85
+ }
86
+
87
+ this.pendingResolve = this._resolveQueries();
88
+
89
+ try {
90
+
91
+ const result = await this.pendingResolve;
92
+ return result;
93
+
94
+ } finally {
95
+
96
+ this.pendingResolve = null;
97
+
98
+ }
99
+
100
+ }
101
+
102
+ /**
103
+ * Internal method to resolve queries and calculate total duration.
104
+ * @private
105
+ * @returns {Promise<number>} The total duration in milliseconds.
106
+ */
107
+ async _resolveQueries() {
108
+
109
+ if ( this.isDisposed ) {
110
+
111
+ return this.lastValue;
112
+
113
+ }
114
+
115
+ try {
116
+
117
+ if ( this.resultBuffer.mapState !== 'unmapped' ) {
118
+
119
+ return this.lastValue;
120
+
121
+ }
122
+
123
+ const currentOffsets = new Map( this.queryOffsets );
124
+ const queryCount = this.currentQueryIndex;
125
+ const bytesUsed = queryCount * 8;
126
+
127
+ // Reset state before GPU work
128
+ this.currentQueryIndex = 0;
129
+ this.queryOffsets.clear();
130
+
131
+ const commandEncoder = this.device.createCommandEncoder();
132
+
133
+ commandEncoder.resolveQuerySet(
134
+ this.querySet,
135
+ 0,
136
+ queryCount,
137
+ this.resolveBuffer,
138
+ 0
139
+ );
140
+
141
+ commandEncoder.copyBufferToBuffer(
142
+ this.resolveBuffer,
143
+ 0,
144
+ this.resultBuffer,
145
+ 0,
146
+ bytesUsed
147
+ );
148
+
149
+ const commandBuffer = commandEncoder.finish();
150
+ this.device.queue.submit( [ commandBuffer ] );
151
+
152
+ if ( this.resultBuffer.mapState !== 'unmapped' ) {
153
+
154
+ return this.lastValue;
155
+
156
+ }
157
+
158
+ // Create and track the mapping operation
159
+ await this.resultBuffer.mapAsync( GPUMapMode.READ, 0, bytesUsed );
160
+
161
+ if ( this.isDisposed ) {
162
+
163
+ if ( this.resultBuffer.mapState === 'mapped' ) {
164
+
165
+ this.resultBuffer.unmap();
166
+
167
+ }
168
+
169
+ return this.lastValue;
170
+
171
+ }
172
+
173
+ const times = new BigUint64Array( this.resultBuffer.getMappedRange( 0, bytesUsed ) );
174
+ let totalDuration = 0;
175
+
176
+ for ( const [ , baseOffset ] of currentOffsets ) {
177
+
178
+ const startTime = times[ baseOffset ];
179
+ const endTime = times[ baseOffset + 1 ];
180
+ const duration = Number( endTime - startTime ) / 1e6;
181
+ totalDuration += duration;
182
+
183
+ }
184
+
185
+ this.resultBuffer.unmap();
186
+ this.lastValue = totalDuration;
187
+
188
+ return totalDuration;
189
+
190
+ } catch ( error ) {
191
+
192
+ console.error( 'Error resolving queries:', error );
193
+ if ( this.resultBuffer.mapState === 'mapped' ) {
194
+
195
+ this.resultBuffer.unmap();
196
+
197
+ }
198
+
199
+ return this.lastValue;
200
+
201
+ }
202
+
203
+ }
204
+
205
+ async dispose() {
206
+
207
+ if ( this.isDisposed ) {
208
+
209
+ return;
210
+
211
+ }
212
+
213
+ this.isDisposed = true;
214
+
215
+ // Wait for pending resolve operation
216
+ if ( this.pendingResolve ) {
217
+
218
+ try {
219
+
220
+ await this.pendingResolve;
221
+
222
+ } catch ( error ) {
223
+
224
+ console.error( 'Error waiting for pending resolve:', error );
225
+
226
+ }
227
+
228
+ }
229
+
230
+ // Ensure buffer is unmapped before destroying
231
+ if ( this.resultBuffer && this.resultBuffer.mapState === 'mapped' ) {
232
+
233
+ try {
234
+
235
+ this.resultBuffer.unmap();
236
+
237
+ } catch ( error ) {
238
+
239
+ console.error( 'Error unmapping buffer:', error );
240
+
241
+ }
242
+
243
+ }
244
+
245
+ // Destroy resources
246
+ if ( this.querySet ) {
247
+
248
+ this.querySet.destroy();
249
+ this.querySet = null;
250
+
251
+ }
252
+
253
+ if ( this.resolveBuffer ) {
254
+
255
+ this.resolveBuffer.destroy();
256
+ this.resolveBuffer = null;
257
+
258
+ }
259
+
260
+ if ( this.resultBuffer ) {
261
+
262
+ this.resultBuffer.destroy();
263
+ this.resultBuffer = null;
264
+
265
+ }
266
+
267
+ this.queryOffsets.clear();
268
+ this.pendingResolve = null;
269
+
270
+ }
271
+
272
+ }
273
+
274
+ export default WebGPUTimestampQueryPool;
@@ -1,13 +1,35 @@
1
+ import { HalfFloatType, UnsignedByteType } from '../../../constants.js';
1
2
  import { GPUPrimitiveTopology, GPUTextureFormat } from './WebGPUConstants.js';
2
3
 
4
+ /**
5
+ * A WebGPU backend utility module with common helpers.
6
+ *
7
+ * @private
8
+ */
3
9
  class WebGPUUtils {
4
10
 
11
+ /**
12
+ * Constructs a new utility object.
13
+ *
14
+ * @param {WebGPUBackend} backend - The WebGPU backend.
15
+ */
5
16
  constructor( backend ) {
6
17
 
18
+ /**
19
+ * A reference to the WebGPU backend.
20
+ *
21
+ * @type {WebGPUBackend}
22
+ */
7
23
  this.backend = backend;
8
24
 
9
25
  }
10
26
 
27
+ /**
28
+ * Returns the depth/stencil GPU format for the given render context.
29
+ *
30
+ * @param {RenderContext} renderContext - The render context.
31
+ * @return {String} The depth/stencil GPU texture format.
32
+ */
11
33
  getCurrentDepthStencilFormat( renderContext ) {
12
34
 
13
35
  let format;
@@ -30,12 +52,60 @@ class WebGPUUtils {
30
52
 
31
53
  }
32
54
 
55
+ /**
56
+ * Returns the GPU format for the given texture.
57
+ *
58
+ * @param {Texture} texture - The texture.
59
+ * @return {String} The GPU texture format.
60
+ */
33
61
  getTextureFormatGPU( texture ) {
34
62
 
35
63
  return this.backend.get( texture ).format;
36
64
 
37
65
  }
38
66
 
67
+ /**
68
+ * Returns an object that defines the multi-sampling state of the given texture.
69
+ *
70
+ * @param {Texture} texture - The texture.
71
+ * @return {Object} The multi-sampling state.
72
+ */
73
+ getTextureSampleData( texture ) {
74
+
75
+ let samples;
76
+
77
+ if ( texture.isFramebufferTexture ) {
78
+
79
+ samples = 1;
80
+
81
+ } else if ( texture.isDepthTexture && ! texture.renderTarget ) {
82
+
83
+ const renderer = this.backend.renderer;
84
+ const renderTarget = renderer.getRenderTarget();
85
+
86
+ samples = renderTarget ? renderTarget.samples : renderer.samples;
87
+
88
+ } else if ( texture.renderTarget ) {
89
+
90
+ samples = texture.renderTarget.samples;
91
+
92
+ }
93
+
94
+ samples = samples || 1;
95
+
96
+ const isMSAA = samples > 1 && texture.renderTarget !== null && ( texture.isDepthTexture !== true && texture.isFramebufferTexture !== true );
97
+ const primarySamples = isMSAA ? 1 : samples;
98
+
99
+ return { samples, primarySamples, isMSAA };
100
+
101
+ }
102
+
103
+ /**
104
+ * Returns the default color attachment's GPU format of the current render context.
105
+ *
106
+ * @param {RenderContext} renderContext - The render context.
107
+ * @return {String} The GPU texture format of the default color attachment.
108
+ */
39
109
  getCurrentColorFormat( renderContext ) {
40
110
 
41
111
  let format;
@@ -54,6 +124,12 @@ class WebGPUUtils {
54
124
 
55
125
  }
56
126
 
127
+ /**
128
+ * Returns the output color space of the current render context.
129
+ *
130
+ * @param {RenderContext} renderContext - The render context.
131
+ * @return {String} The output color space.
132
+ */
57
133
  getCurrentColorSpace( renderContext ) {
58
134
 
59
135
  if ( renderContext.textures !== null ) {
@@ -66,6 +142,13 @@ class WebGPUUtils {
66
142
 
67
143
  }
68
144
 
145
+ /**
146
+ * Returns GPU primitive topology for the given object and material.
147
+ *
148
+ * @param {Object3D} object - The 3D object.
149
+ * @param {Material} material - The material.
150
+ * @return {String} The GPU primitive topology.
151
+ */
69
152
  getPrimitiveTopology( object, material ) {
70
153
 
71
154
  if ( object.isPoints ) return GPUPrimitiveTopology.PointList;
@@ -75,6 +158,14 @@ class WebGPUUtils {
75
158
 
76
159
  }
77
160
 
161
+ /**
162
+ * Returns a modified sample count from the given sample count value.
163
+ *
164
+ * That is required since WebGPU does not support arbitrary sample counts.
165
+ *
166
+ * @param {Number} sampleCount - The input sample count.
167
+ * @return {Number} The (potentially updated) output sample count.
168
+ */
78
169
  getSampleCount( sampleCount ) {
79
170
 
80
171
  let count = 1;
@@ -96,6 +187,12 @@ class WebGPUUtils {
96
187
 
97
188
  }
98
189
 
190
+ /**
191
+ * Returns the sample count of the given render context.
192
+ *
193
+ * @param {RenderContext} renderContext - The render context.
194
+ * @return {Number} The sample count.
195
+ */
99
196
  getSampleCountRenderContext( renderContext ) {
100
197
 
101
198
  if ( renderContext.textures !== null ) {
@@ -108,18 +205,33 @@ class WebGPUUtils {
108
205
 
109
206
  }
110
207
 
208
+ /**
209
+ * Returns the preferred canvas format.
210
+ *
211
+ * There is a separate method for this so it's possible to
212
+ * honor edge cases for specific devices.
213
+ *
214
+ * @return {String} The GPU texture format of the canvas.
215
+ */
111
216
  getPreferredCanvasFormat() {
112
217
 
113
- // TODO: Remove this check when Quest 34.5 is out
114
- // https://github.com/mrdoob/three.js/pull/29221/files#r1731833949
218
+ const outputType = this.backend.parameters.outputType;
115
219
 
116
- if ( navigator.userAgent.includes( 'Quest' ) ) {
220
+ if ( outputType === undefined ) {
221
+
222
+ return navigator.gpu.getPreferredCanvasFormat();
223
+
224
+ } else if ( outputType === UnsignedByteType ) {
117
225
 
118
226
  return GPUTextureFormat.BGRA8Unorm;
119
227
 
228
+ } else if ( outputType === HalfFloatType ) {
229
+
230
+ return GPUTextureFormat.RGBA16Float;
231
+
120
232
  } else {
121
233
 
122
- return navigator.gpu.getPreferredCanvasFormat();
234
+ throw new Error( 'Unsupported outputType' );
123
235
 
124
236
  }
125
237
 
@@ -52,7 +52,7 @@ class WebXRDepthSensing {
52
52
  const texProps = renderer.properties.get( texture );
53
53
  texProps.__webglTexture = depthData.texture;
54
54
 
55
- if ( ( depthData.depthNear != renderState.depthNear ) || ( depthData.depthFar != renderState.depthFar ) ) {
55
+ if ( ( depthData.depthNear !== renderState.depthNear ) || ( depthData.depthFar !== renderState.depthFar ) ) {
56
56
 
57
57
  this.depthNear = depthData.depthNear;
58
58
  this.depthFar = depthData.depthFar;
@@ -248,6 +248,12 @@ class WebXRManager extends EventDispatcher {
248
248
 
249
249
  };
250
250
 
251
+ this.getRenderTarget = function () {
252
+
253
+ return newRenderTarget;
254
+
255
+ };
256
+
251
257
  this.getFrame = function () {
252
258
 
253
259
  return xrFrame;
@@ -286,7 +292,11 @@ class WebXRManager extends EventDispatcher {
286
292
  currentPixelRatio = renderer.getPixelRatio();
287
293
  renderer.getSize( currentSize );
288
294
 
289
- if ( session.renderState.layers === undefined ) {
295
+ // Check that the browser implements the necessary APIs to use an
296
+ // XRProjectionLayer rather than an XRWebGLLayer
297
+ const useLayers = typeof XRWebGLBinding !== 'undefined' && 'createProjectionLayer' in XRWebGLBinding.prototype;
298
+
299
+ if ( ! useLayers ) {
290
300
 
291
301
  const layerInit = {
292
302
  antialias: attributes.antialias,
@@ -511,6 +521,10 @@ class WebXRManager extends EventDispatcher {
511
521
  * the cameras' projection and world matrices have already been set.
512
522
  * And that near and far planes are identical for both cameras.
513
523
  * Visualization of this technique: https://computergraphics.stackexchange.com/a/4765
524
+ *
525
+ * @param {ArrayCamera} camera - The camera to update.
526
+ * @param {PerspectiveCamera} cameraL - The left camera.
527
+ * @param {PerspectiveCamera} cameraR - The right camera.
514
528
  */
515
529
  function setProjectionFromUnion( camera, cameraL, cameraR ) {
516
530
 
@@ -839,8 +853,11 @@ class WebXRManager extends EventDispatcher {
839
853
  //
840
854
 
841
855
  const enabledFeatures = session.enabledFeatures;
856
+ const gpuDepthSensingEnabled = enabledFeatures &&
857
+ enabledFeatures.includes( 'depth-sensing' ) &&
858
+ session.depthUsage == 'gpu-optimized';
842
859
 
843
- if ( enabledFeatures && enabledFeatures.includes( 'depth-sensing' ) ) {
860
+ if ( gpuDepthSensingEnabled && glBinding ) {
844
861
 
845
862
  const depthData = glBinding.getDepthInformation( views[ 0 ] );
846
863
 
@@ -6,9 +6,9 @@ class Data3DTexture extends Texture {
6
6
  constructor( data = null, width = 1, height = 1, depth = 1 ) {
7
7
 
8
8
  // We're going to add .setXXX() methods for setting properties later.
9
- // Users can still set in DataTexture3D directly.
9
+ // Users can still set in Data3DTexture directly.
10
10
  //
11
- // const texture = new THREE.DataTexture3D( data, width, height, depth );
11
+ // const texture = new THREE.Data3DTexture( data, width, height, depth );
12
12
  // texture.anisotropy = 16;
13
13
  //
14
14
  // See #14839
@@ -69,6 +69,7 @@ class Texture extends EventDispatcher {
69
69
  this.version = 0;
70
70
  this.onUpdate = null;
71
71
 
72
+ this.renderTarget = null; // assign texture to a render target
72
73
  this.isRenderTargetTexture = false; // indicates whether a texture belongs to a render target or not
73
74
  this.pmremVersion = 0; // indicates whether this texture should be processed by PMREMGenerator or not (only relevant for render target textures)
74
75
 
@@ -134,6 +135,9 @@ class Texture extends EventDispatcher {
134
135
  this.unpackAlignment = source.unpackAlignment;
135
136
  this.colorSpace = source.colorSpace;
136
137
 
138
+ this.renderTarget = source.renderTarget;
139
+ this.isRenderTargetTexture = source.isRenderTargetTexture;
140
+
137
141
  this.userData = JSON.parse( JSON.stringify( source.userData ) );
138
142
 
139
143
  this.needsUpdate = true;
@@ -0,0 +1,35 @@
1
+ import { VideoTexture } from './VideoTexture.js';
2
+
3
+ class VideoFrameTexture extends VideoTexture {
4
+
5
+ constructor( mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {
6
+
7
+ super( {}, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );
8
+
9
+ this.isVideoFrameTexture = true;
10
+
11
+ }
12
+
13
+ update() {
14
+
15
+ // overwrites `VideoTexture.update()` with an empty method since
16
+ // this type of texture is updated via `setFrame()`.
17
+
18
+ }
19
+
20
+ clone() {
21
+
22
+ return new this.constructor().copy( this ); // restoring Texture.clone()
23
+
24
+ }
25
+
26
+ setFrame( frame ) {
27
+
28
+ this.image = frame;
29
+ this.needsUpdate = true;
30
+
31
+ }
32
+
33
+ }
34
+
35
+ export { VideoFrameTexture };