@plastic-software/three 0.179.0 → 0.181.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (430) hide show
  1. package/build/three.cjs +1108 -591
  2. package/build/three.core.js +616 -345
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +488 -250
  5. package/build/three.module.min.js +1 -1
  6. package/build/three.tsl.js +37 -6
  7. package/build/three.tsl.min.js +1 -1
  8. package/build/three.webgpu.js +6576 -2152
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +6575 -2151
  11. package/build/three.webgpu.nodes.min.js +1 -1
  12. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  13. package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  14. package/examples/jsm/Addons.js +1 -1
  15. package/examples/jsm/animation/CCDIKSolver.js +1 -1
  16. package/examples/jsm/controls/ArcballControls.js +8 -8
  17. package/examples/jsm/controls/DragControls.js +7 -57
  18. package/examples/jsm/controls/FirstPersonControls.js +3 -3
  19. package/examples/jsm/controls/FlyControls.js +1 -1
  20. package/examples/jsm/controls/OrbitControls.js +2 -2
  21. package/examples/jsm/controls/PointerLockControls.js +2 -10
  22. package/examples/jsm/controls/TrackballControls.js +1 -1
  23. package/examples/jsm/controls/TransformControls.js +1 -1
  24. package/examples/jsm/effects/AsciiEffect.js +8 -8
  25. package/examples/jsm/exporters/DRACOExporter.js +2 -2
  26. package/examples/jsm/exporters/EXRExporter.js +1 -1
  27. package/examples/jsm/exporters/GLTFExporter.js +33 -25
  28. package/examples/jsm/exporters/KTX2Exporter.js +4 -2
  29. package/examples/jsm/exporters/PLYExporter.js +1 -1
  30. package/examples/jsm/exporters/USDZExporter.js +9 -2
  31. package/examples/jsm/geometries/DecalGeometry.js +2 -2
  32. package/examples/jsm/geometries/ParametricGeometry.js +1 -1
  33. package/examples/jsm/geometries/TeapotGeometry.js +2 -2
  34. package/examples/jsm/geometries/TextGeometry.js +3 -2
  35. package/examples/jsm/gpgpu/BitonicSort.js +715 -0
  36. package/examples/jsm/helpers/ViewHelper.js +43 -5
  37. package/examples/jsm/inspector/Inspector.js +427 -0
  38. package/examples/jsm/inspector/RendererInspector.js +415 -0
  39. package/examples/jsm/inspector/tabs/Console.js +204 -0
  40. package/examples/jsm/inspector/tabs/Parameters.js +332 -0
  41. package/examples/jsm/inspector/tabs/Performance.js +268 -0
  42. package/examples/jsm/inspector/tabs/Viewer.js +166 -0
  43. package/examples/jsm/inspector/ui/Graph.js +95 -0
  44. package/examples/jsm/inspector/ui/Item.js +170 -0
  45. package/examples/jsm/inspector/ui/List.js +75 -0
  46. package/examples/jsm/inspector/ui/Profiler.js +170 -0
  47. package/examples/jsm/inspector/ui/Style.js +654 -0
  48. package/examples/jsm/inspector/ui/Tab.js +46 -0
  49. package/examples/jsm/inspector/ui/Values.js +423 -0
  50. package/examples/jsm/inspector/ui/utils.js +56 -0
  51. package/examples/jsm/interactive/HTMLMesh.js +6 -10
  52. package/examples/jsm/interactive/InteractiveGroup.js +1 -1
  53. package/examples/jsm/interactive/SelectionBox.js +30 -0
  54. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  55. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  56. package/examples/jsm/lines/Line2.js +3 -3
  57. package/examples/jsm/lines/LineGeometry.js +1 -1
  58. package/examples/jsm/lines/LineSegments2.js +2 -2
  59. package/examples/jsm/lines/Wireframe.js +2 -2
  60. package/examples/jsm/lines/WireframeGeometry2.js +1 -1
  61. package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
  62. package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
  63. package/examples/jsm/loaders/3MFLoader.js +1 -1
  64. package/examples/jsm/loaders/ColladaLoader.js +3 -3
  65. package/examples/jsm/loaders/DDSLoader.js +1 -1
  66. package/examples/jsm/loaders/DRACOLoader.js +73 -22
  67. package/examples/jsm/loaders/EXRLoader.js +5 -5
  68. package/examples/jsm/loaders/FBXLoader.js +2 -2
  69. package/examples/jsm/loaders/FontLoader.js +23 -5
  70. package/examples/jsm/loaders/GLTFLoader.js +14 -8
  71. package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
  72. package/examples/jsm/loaders/HDRLoader.js +486 -0
  73. package/examples/jsm/loaders/KTX2Loader.js +136 -49
  74. package/examples/jsm/loaders/KTXLoader.js +2 -2
  75. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  76. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  77. package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
  78. package/examples/jsm/loaders/LWOLoader.js +2 -2
  79. package/examples/jsm/loaders/MaterialXLoader.js +22 -5
  80. package/examples/jsm/loaders/OBJLoader.js +1 -1
  81. package/examples/jsm/loaders/PDBLoader.js +1 -1
  82. package/examples/jsm/loaders/RGBELoader.js +7 -473
  83. package/examples/jsm/loaders/SVGLoader.js +2 -2
  84. package/examples/jsm/loaders/TTFLoader.js +4 -4
  85. package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
  86. package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
  87. package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  88. package/examples/jsm/math/ColorSpaces.js +19 -1
  89. package/examples/jsm/math/ConvexHull.js +3 -3
  90. package/examples/jsm/math/ImprovedNoise.js +1 -1
  91. package/examples/jsm/math/Lut.js +2 -2
  92. package/examples/jsm/math/SimplexNoise.js +1 -1
  93. package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
  94. package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
  95. package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
  96. package/examples/jsm/misc/TubePainter.js +383 -40
  97. package/examples/jsm/misc/Volume.js +1 -1
  98. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  99. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  100. package/examples/jsm/objects/Sky.js +1 -1
  101. package/examples/jsm/objects/SkyMesh.js +1 -1
  102. package/examples/jsm/objects/Water.js +3 -3
  103. package/examples/jsm/objects/WaterMesh.js +6 -6
  104. package/examples/jsm/postprocessing/GlitchPass.js +2 -2
  105. package/examples/jsm/postprocessing/OutlinePass.js +1 -1
  106. package/examples/jsm/postprocessing/SSRPass.js +37 -8
  107. package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
  108. package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
  109. package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
  110. package/examples/jsm/renderers/SVGRenderer.js +1 -1
  111. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
  112. package/examples/jsm/shaders/AfterimageShader.js +1 -1
  113. package/examples/jsm/shaders/BleachBypassShader.js +1 -1
  114. package/examples/jsm/shaders/BokehShader.js +1 -1
  115. package/examples/jsm/shaders/BokehShader2.js +1 -1
  116. package/examples/jsm/shaders/DotScreenShader.js +1 -1
  117. package/examples/jsm/shaders/FocusShader.js +1 -1
  118. package/examples/jsm/shaders/GTAOShader.js +2 -2
  119. package/examples/jsm/shaders/GodRaysShader.js +1 -1
  120. package/examples/jsm/shaders/KaleidoShader.js +1 -1
  121. package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
  122. package/examples/jsm/shaders/SSRShader.js +1 -1
  123. package/examples/jsm/shaders/SepiaShader.js +1 -1
  124. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
  125. package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
  126. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +1 -1
  127. package/examples/jsm/shaders/VignetteShader.js +1 -1
  128. package/examples/jsm/transpiler/GLSLDecoder.js +22 -19
  129. package/examples/jsm/transpiler/TSLEncoder.js +9 -10
  130. package/examples/jsm/transpiler/WGSLEncoder.js +24 -0
  131. package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
  132. package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
  133. package/examples/jsm/tsl/display/BloomNode.js +7 -3
  134. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +2 -1
  135. package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
  136. package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
  137. package/examples/jsm/tsl/display/GTAONode.js +53 -5
  138. package/examples/jsm/tsl/display/GaussianBlurNode.js +49 -35
  139. package/examples/jsm/tsl/display/OutlineNode.js +13 -2
  140. package/examples/jsm/tsl/display/SSGINode.js +654 -0
  141. package/examples/jsm/tsl/display/SSRNode.js +182 -65
  142. package/examples/jsm/tsl/display/SSSNode.js +488 -0
  143. package/examples/jsm/tsl/display/TRAANode.js +124 -7
  144. package/examples/jsm/tsl/display/boxBlur.js +65 -0
  145. package/examples/jsm/tsl/display/hashBlur.js +16 -18
  146. package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
  147. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  148. package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
  149. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  150. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  151. package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
  152. package/package.json +5 -10
  153. package/src/Three.Core.js +4 -2
  154. package/src/Three.TSL.js +36 -5
  155. package/src/Three.WebGPU.Nodes.js +2 -0
  156. package/src/Three.WebGPU.js +2 -0
  157. package/src/animation/AnimationClip.js +20 -4
  158. package/src/animation/AnimationMixer.js +3 -3
  159. package/src/animation/AnimationObjectGroup.js +2 -1
  160. package/src/animation/KeyframeTrack.js +7 -6
  161. package/src/animation/PropertyBinding.js +12 -11
  162. package/src/audio/Audio.js +10 -9
  163. package/src/audio/PositionalAudio.js +1 -1
  164. package/src/cameras/OrthographicCamera.js +1 -1
  165. package/src/cameras/PerspectiveCamera.js +1 -1
  166. package/src/cameras/StereoCamera.js +2 -2
  167. package/src/constants.js +11 -3
  168. package/src/core/BufferGeometry.js +10 -10
  169. package/src/core/EventDispatcher.js +1 -1
  170. package/src/core/InterleavedBuffer.js +1 -1
  171. package/src/core/InterleavedBufferAttribute.js +3 -2
  172. package/src/core/Object3D.js +3 -2
  173. package/src/core/Raycaster.js +2 -1
  174. package/src/core/RenderTarget.js +10 -1
  175. package/src/extras/Controls.js +5 -4
  176. package/src/extras/DataUtils.js +2 -1
  177. package/src/extras/Earcut.js +6 -0
  178. package/src/extras/ImageUtils.js +2 -2
  179. package/src/extras/PMREMGenerator.js +268 -55
  180. package/src/extras/TextureUtils.js +2 -1
  181. package/src/extras/core/Curve.js +2 -1
  182. package/src/extras/core/Interpolations.js +7 -1
  183. package/src/extras/core/ShapePath.js +4 -4
  184. package/src/extras/lib/earcut.js +8 -8
  185. package/src/geometries/BoxGeometry.js +1 -0
  186. package/src/geometries/CapsuleGeometry.js +1 -0
  187. package/src/geometries/CircleGeometry.js +1 -0
  188. package/src/geometries/ConeGeometry.js +1 -0
  189. package/src/geometries/CylinderGeometry.js +1 -0
  190. package/src/geometries/DodecahedronGeometry.js +1 -0
  191. package/src/geometries/ExtrudeGeometry.js +8 -6
  192. package/src/geometries/IcosahedronGeometry.js +1 -0
  193. package/src/geometries/LatheGeometry.js +1 -0
  194. package/src/geometries/OctahedronGeometry.js +1 -0
  195. package/src/geometries/PlaneGeometry.js +1 -0
  196. package/src/geometries/RingGeometry.js +1 -0
  197. package/src/geometries/ShapeGeometry.js +1 -0
  198. package/src/geometries/SphereGeometry.js +1 -0
  199. package/src/geometries/TetrahedronGeometry.js +1 -0
  200. package/src/geometries/TorusGeometry.js +1 -0
  201. package/src/geometries/TorusKnotGeometry.js +1 -0
  202. package/src/geometries/TubeGeometry.js +1 -0
  203. package/src/helpers/CameraHelper.js +1 -1
  204. package/src/lights/webgpu/ProjectorLight.js +1 -1
  205. package/src/loaders/AnimationLoader.js +2 -1
  206. package/src/loaders/AudioLoader.js +2 -1
  207. package/src/loaders/BufferGeometryLoader.js +2 -2
  208. package/src/loaders/Cache.js +2 -2
  209. package/src/loaders/DataTextureLoader.js +1 -1
  210. package/src/loaders/FileLoader.js +3 -2
  211. package/src/loaders/ImageBitmapLoader.js +5 -4
  212. package/src/loaders/ImageLoader.js +1 -1
  213. package/src/loaders/Loader.js +3 -3
  214. package/src/loaders/LoadingManager.js +25 -3
  215. package/src/loaders/MaterialLoader.js +3 -2
  216. package/src/loaders/ObjectLoader.js +13 -13
  217. package/src/loaders/TextureLoader.js +1 -1
  218. package/src/loaders/nodes/NodeLoader.js +3 -2
  219. package/src/materials/Material.js +16 -3
  220. package/src/materials/MeshBasicMaterial.js +1 -0
  221. package/src/materials/MeshDepthMaterial.js +1 -0
  222. package/src/materials/MeshDistanceMaterial.js +1 -1
  223. package/src/materials/MeshLambertMaterial.js +2 -1
  224. package/src/materials/MeshMatcapMaterial.js +22 -0
  225. package/src/materials/MeshNormalMaterial.js +1 -0
  226. package/src/materials/MeshPhongMaterial.js +2 -1
  227. package/src/materials/MeshPhysicalMaterial.js +2 -1
  228. package/src/materials/MeshStandardMaterial.js +8 -7
  229. package/src/materials/MeshToonMaterial.js +1 -0
  230. package/src/materials/PointsMaterial.js +1 -1
  231. package/src/materials/ShaderMaterial.js +2 -2
  232. package/src/materials/nodes/Line2NodeMaterial.js +2 -2
  233. package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
  234. package/src/materials/nodes/NodeMaterial.js +62 -22
  235. package/src/materials/nodes/PointsNodeMaterial.js +81 -28
  236. package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
  237. package/src/materials/nodes/manager/NodeMaterialObserver.js +3 -2
  238. package/src/math/Color.js +6 -5
  239. package/src/math/ColorManagement.js +9 -3
  240. package/src/math/Cylindrical.js +1 -1
  241. package/src/math/Euler.js +2 -1
  242. package/src/math/MathUtils.js +13 -11
  243. package/src/math/Matrix2.js +1 -1
  244. package/src/math/Matrix3.js +2 -2
  245. package/src/math/Matrix4.js +7 -7
  246. package/src/math/Plane.js +1 -1
  247. package/src/math/Quaternion.js +68 -66
  248. package/src/math/Spherical.js +1 -1
  249. package/src/nodes/Nodes.js +4 -1
  250. package/src/nodes/TSL.js +4 -1
  251. package/src/nodes/accessors/BufferNode.js +1 -1
  252. package/src/nodes/accessors/Camera.js +133 -7
  253. package/src/nodes/accessors/ClippingNode.js +6 -5
  254. package/src/nodes/accessors/CubeTextureNode.js +5 -4
  255. package/src/nodes/accessors/InstanceNode.js +25 -5
  256. package/src/nodes/accessors/Lights.js +10 -0
  257. package/src/nodes/accessors/Normal.js +5 -4
  258. package/src/nodes/accessors/Object3DNode.js +1 -1
  259. package/src/nodes/accessors/Position.js +18 -2
  260. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  261. package/src/nodes/accessors/ReferenceNode.js +3 -2
  262. package/src/nodes/accessors/SceneNode.js +2 -1
  263. package/src/nodes/accessors/StorageBufferNode.js +2 -1
  264. package/src/nodes/accessors/StorageTextureNode.js +22 -0
  265. package/src/nodes/accessors/Texture3DNode.js +14 -1
  266. package/src/nodes/accessors/TextureNode.js +130 -44
  267. package/src/nodes/code/FunctionCallNode.js +24 -4
  268. package/src/nodes/code/FunctionNode.js +23 -0
  269. package/src/nodes/core/ArrayNode.js +1 -0
  270. package/src/nodes/core/AssignNode.js +4 -3
  271. package/src/nodes/core/AttributeNode.js +2 -1
  272. package/src/nodes/core/ContextNode.js +29 -10
  273. package/src/nodes/core/IndexNode.js +2 -2
  274. package/src/nodes/core/InputNode.js +2 -1
  275. package/src/nodes/core/InspectorNode.js +128 -0
  276. package/src/nodes/core/{CacheNode.js → IsolateNode.js} +40 -7
  277. package/src/nodes/core/Node.js +152 -31
  278. package/src/nodes/core/NodeBuilder.js +183 -35
  279. package/src/nodes/core/NodeFrame.js +21 -21
  280. package/src/nodes/core/NodeFunction.js +2 -1
  281. package/src/nodes/core/NodeParser.js +2 -1
  282. package/src/nodes/core/NodeUniform.js +1 -1
  283. package/src/nodes/core/NodeUtils.js +17 -91
  284. package/src/nodes/core/ParameterNode.js +31 -0
  285. package/src/nodes/core/PropertyNode.js +7 -0
  286. package/src/nodes/core/StackNode.js +43 -16
  287. package/src/nodes/core/StructNode.js +5 -5
  288. package/src/nodes/core/StructTypeNode.js +1 -0
  289. package/src/nodes/core/SubBuildNode.js +2 -2
  290. package/src/nodes/core/UniformNode.js +18 -10
  291. package/src/nodes/core/VarNode.js +70 -33
  292. package/src/nodes/core/VaryingNode.js +3 -2
  293. package/src/nodes/display/BlendModes.js +5 -4
  294. package/src/nodes/display/BumpMapNode.js +1 -1
  295. package/src/nodes/display/ColorAdjustment.js +1 -1
  296. package/src/nodes/display/FrontFacingNode.js +4 -8
  297. package/src/nodes/display/NormalMapNode.js +2 -1
  298. package/src/nodes/display/PassNode.js +52 -11
  299. package/src/nodes/display/RenderOutputNode.js +28 -2
  300. package/src/nodes/display/ScreenNode.js +44 -14
  301. package/src/nodes/display/ToneMappingNode.js +31 -4
  302. package/src/nodes/display/ToonOutlinePassNode.js +8 -0
  303. package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
  304. package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
  305. package/src/nodes/display/ViewportTextureNode.js +42 -12
  306. package/src/nodes/fog/Fog.js +3 -2
  307. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  308. package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
  309. package/src/nodes/functions/BasicLightingModel.js +2 -1
  310. package/src/nodes/functions/PhysicalLightingModel.js +3 -2
  311. package/src/nodes/functions/VolumetricLightingModel.js +5 -5
  312. package/src/nodes/geometry/RangeNode.js +40 -4
  313. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
  314. package/src/nodes/gpgpu/ComputeNode.js +17 -5
  315. package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
  316. package/src/nodes/gpgpu/WorkgroupInfoNode.js +2 -1
  317. package/src/nodes/lighting/EnvironmentNode.js +6 -6
  318. package/src/nodes/lighting/LightsNode.js +3 -4
  319. package/src/nodes/lighting/PointShadowNode.js +6 -0
  320. package/src/nodes/lighting/ShadowFilterNode.js +2 -0
  321. package/src/nodes/lighting/ShadowNode.js +75 -8
  322. package/src/nodes/math/BitcastNode.js +156 -0
  323. package/src/nodes/math/ConditionalNode.js +24 -7
  324. package/src/nodes/math/MathNode.js +25 -19
  325. package/src/nodes/math/OperatorNode.js +7 -5
  326. package/src/nodes/pmrem/PMREMUtils.js +117 -2
  327. package/src/nodes/shapes/Shapes.js +1 -1
  328. package/src/nodes/tsl/TSLBase.js +5 -2
  329. package/src/nodes/tsl/TSLCore.js +460 -159
  330. package/src/nodes/utils/DebugNode.js +2 -1
  331. package/src/nodes/utils/EventNode.js +36 -0
  332. package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
  333. package/src/nodes/utils/JoinNode.js +6 -3
  334. package/src/nodes/utils/LoopNode.js +20 -24
  335. package/src/nodes/utils/MemberNode.js +59 -7
  336. package/src/nodes/utils/PostProcessingUtils.js +28 -1
  337. package/src/nodes/utils/RTTNode.js +13 -3
  338. package/src/nodes/utils/ReflectorNode.js +58 -7
  339. package/src/nodes/utils/SampleNode.js +12 -2
  340. package/src/nodes/utils/SplitNode.js +11 -0
  341. package/src/nodes/utils/Timer.js +0 -47
  342. package/src/objects/BatchedMesh.js +2 -2
  343. package/src/objects/LOD.js +1 -1
  344. package/src/objects/Line.js +2 -1
  345. package/src/objects/LineSegments.js +2 -1
  346. package/src/objects/Skeleton.js +3 -2
  347. package/src/objects/SkinnedMesh.js +3 -1
  348. package/src/objects/Sprite.js +4 -3
  349. package/src/renderers/WebGLRenderer.js +48 -41
  350. package/src/renderers/common/Animation.js +13 -1
  351. package/src/renderers/common/Attributes.js +1 -1
  352. package/src/renderers/common/Backend.js +108 -27
  353. package/src/renderers/common/Background.js +2 -1
  354. package/src/renderers/common/Bindings.js +58 -2
  355. package/src/renderers/common/CanvasTarget.js +341 -0
  356. package/src/renderers/common/ChainMap.js +1 -1
  357. package/src/renderers/common/DataMap.js +1 -1
  358. package/src/renderers/common/Geometries.js +26 -0
  359. package/src/renderers/common/Info.js +4 -2
  360. package/src/renderers/common/InspectorBase.js +146 -0
  361. package/src/renderers/common/Pipelines.js +1 -1
  362. package/src/renderers/common/PostProcessing.js +6 -25
  363. package/src/renderers/common/QuadMesh.js +7 -1
  364. package/src/renderers/common/RenderContext.js +2 -2
  365. package/src/renderers/common/RenderList.js +7 -3
  366. package/src/renderers/common/RenderObject.js +16 -2
  367. package/src/renderers/common/RenderObjects.js +1 -1
  368. package/src/renderers/common/Renderer.js +473 -245
  369. package/src/renderers/common/RendererUtils.js +9 -0
  370. package/src/renderers/common/SampledTexture.js +9 -1
  371. package/src/renderers/common/Sampler.js +50 -12
  372. package/src/renderers/common/StorageTexture.js +9 -1
  373. package/src/renderers/common/Textures.js +121 -45
  374. package/src/renderers/common/TimestampQueryPool.js +65 -3
  375. package/src/renderers/common/UniformsGroup.js +2 -1
  376. package/src/renderers/common/XRManager.js +42 -22
  377. package/src/renderers/common/extras/PMREMGenerator.js +160 -65
  378. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  379. package/src/renderers/common/nodes/NodeLibrary.js +9 -7
  380. package/src/renderers/common/nodes/NodeSampler.js +13 -1
  381. package/src/renderers/common/nodes/Nodes.js +38 -16
  382. package/src/renderers/shaders/DFGLUTData.js +64 -0
  383. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
  384. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
  385. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
  386. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
  387. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
  388. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  389. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
  390. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
  391. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +7 -15
  392. package/src/renderers/shaders/ShaderLib/depth.glsl.js +1 -1
  393. package/src/renderers/shaders/UniformsLib.js +1 -0
  394. package/src/renderers/shaders/UniformsUtils.js +25 -4
  395. package/src/renderers/webgl/WebGLCapabilities.js +2 -1
  396. package/src/renderers/webgl/WebGLExtensions.js +2 -25
  397. package/src/renderers/webgl/WebGLInfo.js +3 -1
  398. package/src/renderers/webgl/WebGLProgram.js +15 -14
  399. package/src/renderers/webgl/WebGLPrograms.js +2 -1
  400. package/src/renderers/webgl/WebGLShadowMap.js +3 -2
  401. package/src/renderers/webgl/WebGLState.js +15 -14
  402. package/src/renderers/webgl/WebGLTextures.js +19 -14
  403. package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
  404. package/src/renderers/webgl/WebGLUtils.js +3 -2
  405. package/src/renderers/webgl-fallback/WebGLBackend.js +199 -167
  406. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +181 -25
  407. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
  408. package/src/renderers/webgl-fallback/utils/WebGLState.js +7 -6
  409. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +169 -19
  410. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
  411. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
  412. package/src/renderers/webgpu/WebGPUBackend.js +153 -123
  413. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
  414. package/src/renderers/webgpu/WebGPURenderer.js +3 -2
  415. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +142 -50
  416. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +2 -1
  417. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +5 -3
  418. package/src/renderers/webgpu/utils/WebGPUConstants.js +7 -2
  419. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +53 -34
  420. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
  421. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +260 -99
  422. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
  423. package/src/renderers/webgpu/utils/WebGPUUtils.js +22 -2
  424. package/src/renderers/webxr/WebXRManager.js +42 -26
  425. package/src/textures/ExternalTexture.js +15 -4
  426. package/src/textures/Source.js +3 -2
  427. package/src/textures/Texture.js +3 -2
  428. package/src/textures/VideoTexture.js +2 -3
  429. package/src/utils.js +67 -3
  430. package/examples/jsm/loaders/RGBMLoader.js +0 -1148
@@ -1,5 +1,7 @@
1
1
  import { LinearFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, NearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, FloatType, MirroredRepeatWrapping, ClampToEdgeWrapping, RepeatWrapping, NeverCompare, AlwaysCompare, LessCompare, LessEqualCompare, EqualCompare, GreaterEqualCompare, GreaterCompare, NotEqualCompare, NoColorSpace, LinearTransfer, SRGBTransfer } from '../../../constants.js';
2
2
  import { ColorManagement } from '../../../math/ColorManagement.js';
3
+ import { getByteLength } from '../../../extras/TextureUtils.js';
4
+ import { warn } from '../../../utils.js';
3
5
 
4
6
  let initialized = false, wrappingToGL, filterToGL, compareToGL;
5
7
 
@@ -47,6 +49,24 @@ class WebGLTextureUtils {
47
49
  */
48
50
  this.defaultTextures = {};
49
51
 
52
+ /**
53
+ * A scratch framebuffer used for attaching the source texture in
54
+ * {@link copyTextureToTexture}.
55
+ *
56
+ * @private
57
+ * @type {?WebGLFramebuffer}
58
+ */
59
+ this._srcFramebuffer = null;
60
+
61
+ /**
62
+ * A scratch framebuffer used for attaching the destination texture in
63
+ * {@link copyTextureToTexture}.
64
+ *
65
+ * @private
66
+ * @type {?WebGLFramebuffer}
67
+ */
68
+ this._dstFramebuffer = null;
69
+
50
70
  if ( initialized === false ) {
51
71
 
52
72
  this._init();
@@ -150,7 +170,7 @@ class WebGLTextureUtils {
150
170
 
151
171
  if ( gl[ internalFormatName ] !== undefined ) return gl[ internalFormatName ];
152
172
 
153
- console.warn( 'THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format \'' + internalFormatName + '\'' );
173
+ warn( 'WebGLBackend: Attempt to use non-existing WebGL internal format \'' + internalFormatName + '\'' );
154
174
 
155
175
  }
156
176
 
@@ -221,6 +241,7 @@ class WebGLTextureUtils {
221
241
  if ( glType === gl.UNSIGNED_SHORT_5_5_5_1 ) internalFormat = gl.RGB5_A1;
222
242
  if ( glType === gl.UNSIGNED_SHORT_4_4_4_4 ) internalFormat = gl.RGB4;
223
243
  if ( glType === gl.UNSIGNED_INT_5_9_9_9_REV ) internalFormat = gl.RGB9_E5;
244
+ if ( glType === gl.UNSIGNED_INT_10F_11F_11F_REV ) internalFormat = gl.R11F_G11F_B10F;
224
245
 
225
246
  }
226
247
 
@@ -388,8 +409,7 @@ class WebGLTextureUtils {
388
409
 
389
410
  backend.set( texture, {
390
411
  textureGPU,
391
- glTextureType,
392
- isDefault: true
412
+ glTextureType
393
413
  } );
394
414
 
395
415
  }
@@ -478,7 +498,7 @@ class WebGLTextureUtils {
478
498
 
479
499
  // gl.readPixels( 0, 0, width, height, altFormat, altType, readout );
480
500
  // gl.bindFramebuffer( gl.FRAMEBUFFER, null );
481
- // console.log( readout );
501
+ // log( readout );
482
502
 
483
503
  }
484
504
 
@@ -521,7 +541,7 @@ class WebGLTextureUtils {
521
541
 
522
542
  } else {
523
543
 
524
- console.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' );
544
+ warn( 'WebGLBackend: Attempt to load unsupported compressed texture format in .uploadTexture()' );
525
545
 
526
546
  }
527
547
 
@@ -539,7 +559,7 @@ class WebGLTextureUtils {
539
559
 
540
560
  } else {
541
561
 
542
- console.warn( 'Unsupported compressed texture format' );
562
+ warn( 'WebGLBackend: Unsupported compressed texture format' );
543
563
 
544
564
  }
545
565
 
@@ -551,6 +571,7 @@ class WebGLTextureUtils {
551
571
  } else if ( texture.isCubeTexture ) {
552
572
 
553
573
  const images = options.images;
574
+ const mipmaps = texture.mipmaps;
554
575
 
555
576
  for ( let i = 0; i < 6; i ++ ) {
556
577
 
@@ -558,13 +579,42 @@ class WebGLTextureUtils {
558
579
 
559
580
  gl.texSubImage2D( gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, 0, 0, width, height, glFormat, glType, image );
560
581
 
582
+ for ( let j = 0; j < mipmaps.length; j ++ ) {
583
+
584
+ const mipmap = mipmaps[ j ];
585
+ const image = getImage( mipmap.images[ i ] );
586
+
587
+ gl.texSubImage2D( gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, 0, 0, image.width, image.height, glFormat, glType, image );
588
+
589
+ }
590
+
561
591
  }
562
592
 
563
593
  } else if ( texture.isDataArrayTexture || texture.isArrayTexture ) {
564
594
 
565
595
  const image = options.image;
566
596
 
567
- gl.texSubImage3D( gl.TEXTURE_2D_ARRAY, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data );
597
+ if ( texture.layerUpdates.size > 0 ) {
598
+
599
+ const layerByteLength = getByteLength( image.width, image.height, texture.format, texture.type );
600
+
601
+ for ( const layerIndex of texture.layerUpdates ) {
602
+
603
+ const layerData = image.data.subarray(
604
+ layerIndex * layerByteLength / image.data.BYTES_PER_ELEMENT,
605
+ ( layerIndex + 1 ) * layerByteLength / image.data.BYTES_PER_ELEMENT
606
+ );
607
+ gl.texSubImage3D( gl.TEXTURE_2D_ARRAY, 0, 0, 0, layerIndex, image.width, image.height, 1, glFormat, glType, layerData );
608
+
609
+ }
610
+
611
+ texture.clearLayerUpdates();
612
+
613
+ } else {
614
+
615
+ gl.texSubImage3D( gl.TEXTURE_2D_ARRAY, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data );
616
+
617
+ }
568
618
 
569
619
  } else if ( texture.isData3DTexture ) {
570
620
 
@@ -581,9 +631,26 @@ class WebGLTextureUtils {
581
631
 
582
632
  } else {
583
633
 
584
- const image = getImage( options.image );
634
+ const mipmaps = texture.mipmaps;
635
+
636
+ if ( mipmaps.length > 0 ) {
637
+
638
+ for ( let i = 0, il = mipmaps.length; i < il; i ++ ) {
639
+
640
+ const mipmap = mipmaps[ i ];
641
+
642
+ const image = getImage( mipmap );
643
+ gl.texSubImage2D( glTextureType, i, 0, 0, mipmap.width, mipmap.height, glFormat, glType, image );
644
+
645
+ }
646
+
647
+ } else {
648
+
649
+ const image = getImage( options.image );
650
+ gl.texSubImage2D( glTextureType, 0, 0, 0, width, height, glFormat, glType, image );
651
+
652
+ }
585
653
 
586
- gl.texSubImage2D( glTextureType, 0, 0, 0, width, height, glFormat, glType, image );
587
654
 
588
655
  }
589
656
 
@@ -673,14 +740,20 @@ class WebGLTextureUtils {
673
740
  * Destroys the GPU data for the given texture object.
674
741
  *
675
742
  * @param {Texture} texture - The texture.
743
+ * @param {boolean} [isDefaultTexture=false] - Whether the texture uses a default GPU texture or not.
676
744
  */
677
- destroyTexture( texture ) {
745
+ destroyTexture( texture, isDefaultTexture = false ) {
678
746
 
679
747
  const { gl, backend } = this;
680
748
  const { textureGPU, renderTarget } = backend.get( texture );
681
749
 
682
750
  this.deallocateRenderBuffers( renderTarget );
683
- gl.deleteTexture( textureGPU );
751
+
752
+ if ( isDefaultTexture === false ) {
753
+
754
+ gl.deleteTexture( textureGPU );
755
+
756
+ }
684
757
 
685
758
  backend.delete( texture );
686
759
 
@@ -759,7 +832,6 @@ class WebGLTextureUtils {
759
832
 
760
833
  }
761
834
 
762
-
763
835
  gl.pixelStorei( gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY );
764
836
  gl.pixelStorei( gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha );
765
837
  gl.pixelStorei( gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment );
@@ -778,8 +850,10 @@ class WebGLTextureUtils {
778
850
  gl.pixelStorei( gl.UNPACK_SKIP_IMAGES, minZ );
779
851
 
780
852
  // set up the src texture
853
+ const isSrc3D = srcTexture.isDataArrayTexture || srcTexture.isData3DTexture || dstTexture.isArrayTexture;
781
854
  const isDst3D = dstTexture.isDataArrayTexture || dstTexture.isData3DTexture || dstTexture.isArrayTexture;
782
- if ( srcTexture.isRenderTargetTexture || srcTexture.isDepthTexture ) {
855
+
856
+ if ( srcTexture.isDepthTexture ) {
783
857
 
784
858
  const srcTextureData = backend.get( srcTexture );
785
859
  const dstTextureData = backend.get( dstTexture );
@@ -793,15 +867,79 @@ class WebGLTextureUtils {
793
867
  state.bindFramebuffer( gl.READ_FRAMEBUFFER, srcFramebuffer );
794
868
  state.bindFramebuffer( gl.DRAW_FRAMEBUFFER, dstFramebuffer );
795
869
 
796
- let mask = gl.COLOR_BUFFER_BIT;
870
+ for ( let i = 0; i < depth; i ++ ) {
797
871
 
798
- if ( srcTexture.isDepthTexture ) mask = gl.DEPTH_BUFFER_BIT;
872
+ // if the source or destination are a 3d target then a layer needs to be bound
873
+ if ( isSrc3D ) {
799
874
 
800
- gl.blitFramebuffer( minX, minY, width, height, dstX, dstY, width, height, mask, gl.NEAREST );
875
+ gl.framebufferTextureLayer( gl.READ_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, srcTextureData.textureGPU, srcLevel, minZ + i );
876
+ gl.framebufferTextureLayer( gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, dstTextureGPU, dstLevel, dstZ + i );
877
+
878
+ }
879
+
880
+ gl.blitFramebuffer( minX, minY, width, height, dstX, dstY, width, height, gl.DEPTH_BUFFER_BIT, gl.NEAREST );
881
+
882
+ }
801
883
 
802
884
  state.bindFramebuffer( gl.READ_FRAMEBUFFER, null );
803
885
  state.bindFramebuffer( gl.DRAW_FRAMEBUFFER, null );
804
886
 
887
+ } else if ( srcLevel !== 0 || srcTexture.isRenderTargetTexture || backend.has( srcTexture ) ) {
888
+
889
+ // get the appropriate frame buffers
890
+ const srcTextureData = backend.get( srcTexture );
891
+
892
+ if ( this._srcFramebuffer === null ) this._srcFramebuffer = gl.createFramebuffer();
893
+ if ( this._dstFramebuffer === null ) this._dstFramebuffer = gl.createFramebuffer();
894
+
895
+ // bind the frame buffer targets
896
+ state.bindFramebuffer( gl.READ_FRAMEBUFFER, this._srcFramebuffer );
897
+ state.bindFramebuffer( gl.DRAW_FRAMEBUFFER, this._dstFramebuffer );
898
+
899
+ for ( let i = 0; i < depth; i ++ ) {
900
+
901
+ // assign the correct layers and mip maps to the frame buffers
902
+ if ( isSrc3D ) {
903
+
904
+ gl.framebufferTextureLayer( gl.READ_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, srcTextureData.textureGPU, srcLevel, minZ + i );
905
+
906
+ } else {
907
+
908
+ gl.framebufferTexture2D( gl.READ_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, srcTextureData.textureGPU, srcLevel );
909
+
910
+ }
911
+
912
+ if ( isDst3D ) {
913
+
914
+ gl.framebufferTextureLayer( gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, dstTextureGPU, dstLevel, dstZ + i );
915
+
916
+ } else {
917
+
918
+ gl.framebufferTexture2D( gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, dstTextureGPU, dstLevel );
919
+
920
+ }
921
+
922
+ // copy the data using the fastest function that can achieve the copy
923
+ if ( srcLevel !== 0 ) {
924
+
925
+ gl.blitFramebuffer( minX, minY, width, height, dstX, dstY, width, height, gl.COLOR_BUFFER_BIT, gl.NEAREST );
926
+
927
+ } else if ( isDst3D ) {
928
+
929
+ gl.copyTexSubImage3D( glTextureType, dstLevel, dstX, dstY, dstZ + i, minX, minY, width, height );
930
+
931
+ } else {
932
+
933
+ gl.copyTexSubImage2D( glTextureType, dstLevel, dstX, dstY, minX, minY, width, height );
934
+
935
+ }
936
+
937
+ }
938
+
939
+ // unbind read, draw buffers
940
+ state.bindFramebuffer( gl.READ_FRAMEBUFFER, null );
941
+ state.bindFramebuffer( gl.DRAW_FRAMEBUFFER, null );
942
+
805
943
  } else {
806
944
 
807
945
  if ( isDst3D ) {
@@ -826,15 +964,15 @@ class WebGLTextureUtils {
826
964
  // copy data into the 2d texture
827
965
  if ( srcTexture.isDataTexture ) {
828
966
 
829
- gl.texSubImage2D( glTextureType, dstLevel, dstX, dstY, width, height, glFormat, glType, image.data );
967
+ gl.texSubImage2D( gl.TEXTURE_2D, dstLevel, dstX, dstY, width, height, glFormat, glType, image.data );
830
968
 
831
969
  } else if ( srcTexture.isCompressedTexture ) {
832
970
 
833
- gl.compressedTexSubImage2D( glTextureType, dstLevel, dstX, dstY, image.width, image.height, glFormat, image.data );
971
+ gl.compressedTexSubImage2D( gl.TEXTURE_2D, dstLevel, dstX, dstY, image.width, image.height, glFormat, image.data );
834
972
 
835
973
  } else {
836
974
 
837
- gl.texSubImage2D( glTextureType, dstLevel, dstX, dstY, width, height, glFormat, glType, image );
975
+ gl.texSubImage2D( gl.TEXTURE_2D, dstLevel, dstX, dstY, width, height, glFormat, glType, image );
838
976
 
839
977
  }
840
978
 
@@ -1135,6 +1273,18 @@ class WebGLTextureUtils {
1135
1273
 
1136
1274
  }
1137
1275
 
1276
+ /**
1277
+ * Frees the internal resources.
1278
+ */
1279
+ dispose() {
1280
+
1281
+ const { gl } = this;
1282
+
1283
+ if ( this._srcFramebuffer !== null ) gl.deleteFramebuffer( this._srcFramebuffer );
1284
+ if ( this._dstFramebuffer !== null ) gl.deleteFramebuffer( this._dstFramebuffer );
1285
+
1286
+ }
1287
+
1138
1288
  }
1139
1289
 
1140
1290
  function getImage( source ) {
@@ -1,4 +1,4 @@
1
- import { warnOnce } from '../../../utils.js';
1
+ import { warnOnce, warn } from '../../../utils.js';
2
2
  import TimestampQueryPool from '../../common/TimestampQueryPool.js';
3
3
 
4
4
  /**
@@ -29,7 +29,7 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
29
29
 
30
30
  if ( ! this.ext ) {
31
31
 
32
- console.warn( 'EXT_disjoint_timer_query not supported; timestamps will be disabled.' );
32
+ warn( 'EXT_disjoint_timer_query not supported; timestamps will be disabled.' );
33
33
  this.trackTimestamp = false;
34
34
  return;
35
35
 
@@ -51,10 +51,10 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
51
51
  /**
52
52
  * Allocates a pair of queries for a given render context.
53
53
  *
54
- * @param {Object} renderContext - The render context to allocate queries for.
54
+ * @param {string} uid - A unique identifier for the render context.
55
55
  * @returns {?number} The base offset for the allocated queries, or null if allocation failed.
56
56
  */
57
- allocateQueriesForContext( renderContext ) {
57
+ allocateQueriesForContext( uid ) {
58
58
 
59
59
  if ( ! this.trackTimestamp ) return null;
60
60
 
@@ -71,7 +71,7 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
71
71
 
72
72
  // Initialize query states
73
73
  this.queryStates.set( baseOffset, 'inactive' );
74
- this.queryOffsets.set( renderContext.id, baseOffset );
74
+ this.queryOffsets.set( uid, baseOffset );
75
75
 
76
76
  return baseOffset;
77
77
 
@@ -80,9 +80,9 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
80
80
  /**
81
81
  * Begins a timestamp query for the specified render context.
82
82
  *
83
- * @param {Object} renderContext - The render context to begin timing for.
83
+ * @param {string} uid - A unique identifier for the render context.
84
84
  */
85
- beginQuery( renderContext ) {
85
+ beginQuery( uid ) {
86
86
 
87
87
  if ( ! this.trackTimestamp || this.isDisposed ) {
88
88
 
@@ -90,7 +90,7 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
90
90
 
91
91
  }
92
92
 
93
- const baseOffset = this.queryOffsets.get( renderContext.id );
93
+ const baseOffset = this.queryOffsets.get( uid );
94
94
  if ( baseOffset == null ) {
95
95
 
96
96
  return;
@@ -124,7 +124,7 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
124
124
 
125
125
  } catch ( error ) {
126
126
 
127
- console.error( 'Error in beginQuery:', error );
127
+ error( 'Error in beginQuery:', error );
128
128
  this.activeQuery = null;
129
129
  this.queryStates.set( baseOffset, 'inactive' );
130
130
 
@@ -135,10 +135,9 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
135
135
  /**
136
136
  * Ends the active timestamp query for the specified render context.
137
137
  *
138
- * @param {Object} renderContext - The render context to end timing for.
139
- * @param {string} renderContext.id - Unique identifier for the render context.
138
+ * @param {string} uid - A unique identifier for the render context.
140
139
  */
141
- endQuery( renderContext ) {
140
+ endQuery( uid ) {
142
141
 
143
142
  if ( ! this.trackTimestamp || this.isDisposed ) {
144
143
 
@@ -146,7 +145,7 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
146
145
 
147
146
  }
148
147
 
149
- const baseOffset = this.queryOffsets.get( renderContext.id );
148
+ const baseOffset = this.queryOffsets.get( uid );
150
149
  if ( baseOffset == null ) {
151
150
 
152
151
  return;
@@ -168,7 +167,7 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
168
167
 
169
168
  } catch ( error ) {
170
169
 
171
- console.error( 'Error in endQuery:', error );
170
+ error( 'Error in endQuery:', error );
172
171
  // Reset state on error
173
172
  this.queryStates.set( baseOffset, 'inactive' );
174
173
  this.activeQuery = null;
@@ -196,30 +195,60 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
196
195
  try {
197
196
 
198
197
  // Wait for all ended queries to complete
199
- const resolvePromises = [];
198
+ const resolvePromises = new Map();
200
199
 
201
- for ( const [ baseOffset, state ] of this.queryStates ) {
200
+ for ( const [ uid, baseOffset ] of this.queryOffsets ) {
201
+
202
+ const state = this.queryStates.get( baseOffset );
202
203
 
203
204
  if ( state === 'ended' ) {
204
205
 
205
206
  const query = this.queries[ baseOffset ];
206
- resolvePromises.push( this.resolveQuery( query ) );
207
+ resolvePromises.set( uid, this.resolveQuery( query ) );
207
208
 
208
209
  }
209
210
 
210
211
  }
211
212
 
212
- if ( resolvePromises.length === 0 ) {
213
+ if ( resolvePromises.size === 0 ) {
213
214
 
214
215
  return this.lastValue;
215
216
 
216
217
  }
217
218
 
218
- const results = await Promise.all( resolvePromises );
219
- const totalDuration = results.reduce( ( acc, val ) => acc + val, 0 );
219
+ //
220
+
221
+ const framesDuration = {};
222
+
223
+ const frames = [];
224
+
225
+ for ( const [ uid, promise ] of resolvePromises ) {
226
+
227
+ const match = uid.match( /^(.*):f(\d+)$/ );
228
+ const frame = parseInt( match[ 2 ] );
229
+
230
+ if ( frames.includes( frame ) === false ) {
231
+
232
+ frames.push( frame );
233
+
234
+ }
235
+
236
+ if ( framesDuration[ frame ] === undefined ) framesDuration[ frame ] = 0;
237
+
238
+ const duration = await promise;
239
+
240
+ this.timestamps.set( uid, duration );
241
+
242
+ framesDuration[ frame ] += duration;
243
+
244
+ }
245
+
246
+ // Return the total duration of the last frame
247
+ const totalDuration = framesDuration[ frames[ frames.length - 1 ] ];
220
248
 
221
249
  // Store the last valid result
222
250
  this.lastValue = totalDuration;
251
+ this.frames = frames;
223
252
 
224
253
  // Reset states
225
254
  this.currentQueryIndex = 0;
@@ -231,7 +260,7 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
231
260
 
232
261
  } catch ( error ) {
233
262
 
234
- console.error( 'Error resolving queries:', error );
263
+ error( 'Error resolving queries:', error );
235
264
  return this.lastValue;
236
265
 
237
266
  } finally {
@@ -319,7 +348,7 @@ class WebGLTimestampQueryPool extends TimestampQueryPool {
319
348
 
320
349
  } catch ( error ) {
321
350
 
322
- console.error( 'Error checking query:', error );
351
+ error( 'Error checking query:', error );
323
352
  resolve( this.lastValue );
324
353
 
325
354
  }
@@ -1,4 +1,4 @@
1
- import { RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT5_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT1_Format, RGB_S3TC_DXT1_Format, DepthFormat, DepthStencilFormat, RedFormat, RGBFormat, RGBAFormat, AlphaFormat, RedIntegerFormat, RGFormat, RGIntegerFormat, RGBAIntegerFormat, HalfFloatType, FloatType, UnsignedIntType, IntType, UnsignedShortType, ShortType, ByteType, UnsignedInt248Type, UnsignedInt5999Type, UnsignedShort5551Type, UnsignedShort4444Type, UnsignedByteType, RGBA_BPTC_Format, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, RED_GREEN_RGTC2_Format, SIGNED_RED_GREEN_RGTC2_Format, SRGBTransfer, NoColorSpace } from '../../../constants.js';
1
+ import { RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT5_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT1_Format, RGB_S3TC_DXT1_Format, DepthFormat, DepthStencilFormat, RedFormat, RGBFormat, RGBAFormat, AlphaFormat, RedIntegerFormat, RGFormat, RGIntegerFormat, RGBAIntegerFormat, HalfFloatType, FloatType, UnsignedIntType, IntType, UnsignedShortType, ShortType, ByteType, UnsignedInt248Type, UnsignedInt5999Type, UnsignedShort5551Type, UnsignedShort4444Type, UnsignedByteType, RGBA_BPTC_Format, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, RED_GREEN_RGTC2_Format, SIGNED_RED_GREEN_RGTC2_Format, SRGBTransfer, NoColorSpace, UnsignedInt101111Type } from '../../../constants.js';
2
2
  import { ColorManagement } from '../../../math/ColorManagement.js';
3
3
 
4
4
  /**
@@ -60,6 +60,7 @@ class WebGLUtils {
60
60
  if ( p === UnsignedShort4444Type ) return gl.UNSIGNED_SHORT_4_4_4_4;
61
61
  if ( p === UnsignedShort5551Type ) return gl.UNSIGNED_SHORT_5_5_5_1;
62
62
  if ( p === UnsignedInt5999Type ) return gl.UNSIGNED_INT_5_9_9_9_REV;
63
+ if ( p === UnsignedInt101111Type ) return gl.UNSIGNED_INT_10F_11F_11F_REV;
63
64
 
64
65
  if ( p === ByteType ) return gl.BYTE;
65
66
  if ( p === ShortType ) return gl.SHORT;
@@ -231,7 +232,7 @@ class WebGLUtils {
231
232
 
232
233
  if ( extension !== null ) {
233
234
 
234
- if ( p === RGBA_BPTC_Format ) return extension.COMPRESSED_RED_RGTC1_EXT;
235
+ if ( p === RED_RGTC1_Format ) return extension.COMPRESSED_RED_RGTC1_EXT;
235
236
  if ( p === SIGNED_RED_RGTC1_Format ) return extension.COMPRESSED_SIGNED_RED_RGTC1_EXT;
236
237
  if ( p === RED_GREEN_RGTC2_Format ) return extension.COMPRESSED_RED_GREEN_RGTC2_EXT;
237
238
  if ( p === SIGNED_RED_GREEN_RGTC2_Format ) return extension.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT;