super-three 0.181.0 → 0.184.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 (539) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +13152 -11354
  4. package/build/three.core.js +12319 -11539
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +1808 -781
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +27 -13
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +10523 -6263
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +10484 -6262
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +11 -3
  15. package/examples/jsm/animation/CCDIKSolver.js +7 -3
  16. package/examples/jsm/controls/ArcballControls.js +7 -4
  17. package/examples/jsm/controls/DragControls.js +2 -2
  18. package/examples/jsm/controls/FirstPersonControls.js +58 -54
  19. package/examples/jsm/controls/FlyControls.js +4 -0
  20. package/examples/jsm/controls/MapControls.js +55 -1
  21. package/examples/jsm/controls/OrbitControls.js +111 -8
  22. package/examples/jsm/controls/TrackballControls.js +8 -8
  23. package/examples/jsm/controls/TransformControls.js +34 -2
  24. package/examples/jsm/csm/CSM.js +2 -1
  25. package/examples/jsm/csm/CSMShadowNode.js +6 -2
  26. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  27. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  28. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  29. package/examples/jsm/exporters/EXRExporter.js +1 -1
  30. package/examples/jsm/exporters/GLTFExporter.js +152 -9
  31. package/examples/jsm/exporters/USDZExporter.js +22 -3
  32. package/examples/jsm/geometries/DecalGeometry.js +1 -1
  33. package/examples/jsm/geometries/TextGeometry.js +18 -0
  34. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  35. package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
  36. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  37. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  38. package/examples/jsm/helpers/ViewHelper.js +67 -8
  39. package/examples/jsm/inspector/Extension.js +13 -0
  40. package/examples/jsm/inspector/Inspector.js +203 -88
  41. package/examples/jsm/inspector/RendererInspector.js +14 -4
  42. package/examples/jsm/inspector/extensions/extensions.json +6 -0
  43. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
  44. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
  45. package/examples/jsm/inspector/tabs/Console.js +41 -7
  46. package/examples/jsm/inspector/tabs/Memory.js +128 -0
  47. package/examples/jsm/inspector/tabs/Parameters.js +51 -3
  48. package/examples/jsm/inspector/tabs/Performance.js +4 -4
  49. package/examples/jsm/inspector/tabs/Settings.js +264 -0
  50. package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
  51. package/examples/jsm/inspector/tabs/Viewer.js +107 -5
  52. package/examples/jsm/inspector/ui/Graph.js +2 -2
  53. package/examples/jsm/inspector/ui/List.js +1 -1
  54. package/examples/jsm/inspector/ui/Profiler.js +1936 -34
  55. package/examples/jsm/inspector/ui/Style.js +1044 -31
  56. package/examples/jsm/inspector/ui/Tab.js +222 -3
  57. package/examples/jsm/inspector/ui/Values.js +55 -2
  58. package/examples/jsm/inspector/ui/utils.js +13 -0
  59. package/examples/jsm/interaction/InteractionManager.js +226 -0
  60. package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
  61. package/examples/jsm/lighting/DynamicLighting.js +82 -0
  62. package/examples/jsm/lighting/LightProbeGrid.js +651 -0
  63. package/examples/jsm/lines/LineMaterial.js +7 -1
  64. package/examples/jsm/loaders/3DMLoader.js +5 -4
  65. package/examples/jsm/loaders/3MFLoader.js +2 -2
  66. package/examples/jsm/loaders/AMFLoader.js +2 -2
  67. package/examples/jsm/loaders/ColladaLoader.js +24 -4026
  68. package/examples/jsm/loaders/DRACOLoader.js +5 -5
  69. package/examples/jsm/loaders/EXRLoader.js +687 -48
  70. package/examples/jsm/loaders/FBXLoader.js +235 -37
  71. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  72. package/examples/jsm/loaders/GLTFLoader.js +146 -178
  73. package/examples/jsm/loaders/HDRLoader.js +1 -2
  74. package/examples/jsm/loaders/KMZLoader.js +5 -5
  75. package/examples/jsm/loaders/KTX2Loader.js +27 -5
  76. package/examples/jsm/loaders/LDrawLoader.js +41 -50
  77. package/examples/jsm/loaders/LWOLoader.js +7 -39
  78. package/examples/jsm/loaders/NRRDLoader.js +2 -2
  79. package/examples/jsm/loaders/PCDLoader.js +4 -2
  80. package/examples/jsm/loaders/SVGLoader.js +2 -2
  81. package/examples/jsm/loaders/TDSLoader.js +0 -2
  82. package/examples/jsm/loaders/TGALoader.js +0 -2
  83. package/examples/jsm/loaders/USDLoader.js +100 -40
  84. package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
  85. package/examples/jsm/loaders/VOXLoader.js +660 -117
  86. package/examples/jsm/loaders/VRMLLoader.js +79 -2
  87. package/examples/jsm/loaders/VTKLoader.js +42 -25
  88. package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
  89. package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
  90. package/examples/jsm/loaders/usd/USDAParser.js +450 -363
  91. package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
  92. package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
  93. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  94. package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
  95. package/examples/jsm/math/Octree.js +131 -1
  96. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  97. package/examples/jsm/misc/RollerCoaster.js +42 -4
  98. package/examples/jsm/misc/Volume.js +0 -1
  99. package/examples/jsm/misc/VolumeSlice.js +0 -1
  100. package/examples/jsm/modifiers/TessellateModifier.js +1 -1
  101. package/examples/jsm/objects/LensflareMesh.js +1 -1
  102. package/examples/jsm/objects/Reflector.js +73 -25
  103. package/examples/jsm/objects/Sky.js +90 -6
  104. package/examples/jsm/objects/SkyMesh.js +150 -16
  105. package/examples/jsm/objects/Water.js +4 -3
  106. package/examples/jsm/objects/Water2.js +5 -3
  107. package/examples/jsm/objects/WaterMesh.js +5 -7
  108. package/examples/jsm/physics/AmmoPhysics.js +12 -7
  109. package/examples/jsm/physics/JoltPhysics.js +10 -6
  110. package/examples/jsm/physics/RapierPhysics.js +9 -5
  111. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  112. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  113. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  114. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  115. package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
  116. package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
  117. package/examples/jsm/renderers/Projector.js +246 -28
  118. package/examples/jsm/renderers/SVGRenderer.js +174 -60
  119. package/examples/jsm/shaders/GTAOShader.js +19 -6
  120. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  121. package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
  122. package/examples/jsm/shaders/SAOShader.js +17 -4
  123. package/examples/jsm/shaders/SSAOShader.js +11 -1
  124. package/examples/jsm/shaders/SSRShader.js +6 -5
  125. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
  126. package/examples/jsm/shaders/VignetteShader.js +1 -1
  127. package/examples/jsm/transpiler/AST.js +44 -0
  128. package/examples/jsm/transpiler/GLSLDecoder.js +63 -6
  129. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  130. package/examples/jsm/transpiler/TSLEncoder.js +46 -3
  131. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  132. package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
  133. package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
  134. package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
  135. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  136. package/examples/jsm/tsl/display/AnamorphicNode.js +12 -1
  137. package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
  138. package/examples/jsm/tsl/display/BloomNode.js +16 -6
  139. package/examples/jsm/tsl/display/CRT.js +150 -0
  140. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
  141. package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
  142. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
  143. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  144. package/examples/jsm/tsl/display/FSR1Node.js +477 -0
  145. package/examples/jsm/tsl/display/FXAANode.js +2 -2
  146. package/examples/jsm/tsl/display/GTAONode.js +6 -4
  147. package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
  148. package/examples/jsm/tsl/display/GodraysNode.js +615 -0
  149. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  150. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  151. package/examples/jsm/tsl/display/OutlineNode.js +69 -19
  152. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  153. package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
  154. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  155. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  156. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  157. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  158. package/examples/jsm/tsl/display/SSGINode.js +8 -24
  159. package/examples/jsm/tsl/display/SSRNode.js +8 -8
  160. package/examples/jsm/tsl/display/SSSNode.js +6 -4
  161. package/examples/jsm/tsl/display/Shape.js +29 -0
  162. package/examples/jsm/tsl/display/SharpenNode.js +283 -0
  163. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  164. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  165. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  166. package/examples/jsm/tsl/display/TAAUNode.js +835 -0
  167. package/examples/jsm/tsl/display/TRAANode.js +315 -126
  168. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  169. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  170. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  171. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
  172. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
  173. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
  174. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
  175. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
  176. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
  177. package/examples/jsm/tsl/math/Bayer.js +53 -3
  178. package/examples/jsm/utils/BufferGeometryUtils.js +2 -3
  179. package/examples/jsm/utils/ColorUtils.js +76 -0
  180. package/examples/jsm/utils/LDrawUtils.js +1 -1
  181. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  182. package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
  183. package/examples/jsm/utils/SkeletonUtils.js +14 -8
  184. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  185. package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
  186. package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
  187. package/package.json +24 -30
  188. package/src/Three.Core.js +3 -1
  189. package/src/Three.TSL.js +25 -11
  190. package/src/Three.WebGPU.Nodes.js +5 -0
  191. package/src/Three.WebGPU.js +9 -0
  192. package/src/Three.js +1 -0
  193. package/src/animation/AnimationAction.js +12 -2
  194. package/src/animation/AnimationClip.js +1 -1
  195. package/src/animation/AnimationMixer.js +6 -0
  196. package/src/animation/AnimationUtils.js +1 -12
  197. package/src/animation/KeyframeTrack.js +47 -8
  198. package/src/animation/PropertyMixer.js +4 -4
  199. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  200. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  201. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  202. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  203. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  204. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  205. package/src/audio/Audio.js +1 -1
  206. package/src/audio/AudioContext.js +2 -2
  207. package/src/audio/AudioListener.js +5 -3
  208. package/src/cameras/Camera.js +32 -2
  209. package/src/cameras/CubeCamera.js +20 -0
  210. package/src/constants.js +90 -5
  211. package/src/core/BufferAttribute.js +13 -1
  212. package/src/core/BufferGeometry.js +14 -2
  213. package/src/core/Clock.js +7 -0
  214. package/src/core/Object3D.js +52 -4
  215. package/src/core/Raycaster.js +2 -2
  216. package/src/core/RenderTarget.js +4 -4
  217. package/src/extras/PMREMGenerator.js +7 -18
  218. package/src/extras/TextureUtils.js +5 -1
  219. package/src/extras/curves/CatmullRomCurve3.js +3 -2
  220. package/src/geometries/ExtrudeGeometry.js +2 -2
  221. package/src/geometries/PolyhedronGeometry.js +1 -1
  222. package/src/geometries/TorusGeometry.js +8 -3
  223. package/src/helpers/CameraHelper.js +3 -0
  224. package/src/helpers/DirectionalLightHelper.js +4 -1
  225. package/src/helpers/HemisphereLightHelper.js +3 -0
  226. package/src/helpers/PointLightHelper.js +1 -25
  227. package/src/helpers/SpotLightHelper.js +3 -0
  228. package/src/lights/DirectionalLight.js +13 -0
  229. package/src/lights/HemisphereLight.js +10 -0
  230. package/src/lights/Light.js +1 -11
  231. package/src/lights/LightProbe.js +0 -15
  232. package/src/lights/LightShadow.js +15 -6
  233. package/src/lights/PointLight.js +15 -0
  234. package/src/lights/PointLightShadow.js +0 -86
  235. package/src/lights/SpotLight.js +22 -1
  236. package/src/lights/webgpu/IESSpotLight.js +2 -1
  237. package/src/loaders/AudioLoader.js +11 -1
  238. package/src/loaders/Cache.js +28 -0
  239. package/src/loaders/DataTextureLoader.js +6 -4
  240. package/src/loaders/FileLoader.js +2 -3
  241. package/src/loaders/ImageBitmapLoader.js +12 -9
  242. package/src/loaders/Loader.js +6 -0
  243. package/src/loaders/MaterialLoader.js +3 -2
  244. package/src/loaders/ObjectLoader.js +46 -6
  245. package/src/loaders/nodes/NodeLoader.js +2 -2
  246. package/src/loaders/nodes/NodeObjectLoader.js +18 -0
  247. package/src/materials/Material.js +2 -0
  248. package/src/materials/MeshLambertMaterial.js +9 -0
  249. package/src/materials/MeshPhongMaterial.js +9 -0
  250. package/src/materials/MeshToonMaterial.js +1 -1
  251. package/src/materials/ShaderMaterial.js +20 -1
  252. package/src/materials/nodes/Line2NodeMaterial.js +34 -7
  253. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
  254. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
  255. package/src/materials/nodes/NodeMaterial.js +45 -25
  256. package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -86
  257. package/src/math/Line3.js +6 -5
  258. package/src/math/MathUtils.js +10 -10
  259. package/src/math/Matrix2.js +13 -9
  260. package/src/math/Matrix3.js +13 -9
  261. package/src/math/Matrix4.js +87 -74
  262. package/src/math/Plane.js +4 -3
  263. package/src/math/Quaternion.js +3 -29
  264. package/src/math/Sphere.js +1 -1
  265. package/src/math/Triangle.js +1 -1
  266. package/src/math/Vector2.js +11 -7
  267. package/src/math/Vector3.js +15 -13
  268. package/src/math/Vector4.js +13 -9
  269. package/src/math/interpolants/BezierInterpolant.js +108 -0
  270. package/src/nodes/Nodes.js +86 -68
  271. package/src/nodes/TSL.js +7 -7
  272. package/src/nodes/accessors/Arrays.js +1 -1
  273. package/src/nodes/accessors/BatchNode.js +10 -10
  274. package/src/nodes/accessors/Bitangent.js +5 -5
  275. package/src/nodes/accessors/BufferAttributeNode.js +107 -15
  276. package/src/nodes/accessors/BufferNode.js +29 -2
  277. package/src/nodes/accessors/Camera.js +149 -28
  278. package/src/nodes/accessors/ClippingNode.js +4 -4
  279. package/src/nodes/accessors/CubeTextureNode.js +27 -2
  280. package/src/nodes/accessors/InstanceNode.js +148 -43
  281. package/src/nodes/accessors/MaterialNode.js +9 -1
  282. package/src/nodes/accessors/MaterialProperties.js +2 -5
  283. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  284. package/src/nodes/accessors/ModelNode.js +1 -1
  285. package/src/nodes/accessors/Normal.js +11 -11
  286. package/src/nodes/accessors/Object3DNode.js +1 -1
  287. package/src/nodes/accessors/Position.js +34 -2
  288. package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
  289. package/src/nodes/accessors/ReferenceNode.js +8 -8
  290. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  291. package/src/nodes/accessors/SceneProperties.js +47 -0
  292. package/src/nodes/accessors/SkinningNode.js +27 -26
  293. package/src/nodes/accessors/StorageBufferNode.js +14 -25
  294. package/src/nodes/accessors/StorageTextureNode.js +40 -9
  295. package/src/nodes/accessors/Tangent.js +4 -14
  296. package/src/nodes/accessors/Texture3DNode.js +32 -35
  297. package/src/nodes/accessors/TextureNode.js +67 -23
  298. package/src/nodes/accessors/UniformArrayNode.js +6 -4
  299. package/src/nodes/accessors/UserDataNode.js +1 -2
  300. package/src/nodes/accessors/VertexColorNode.js +1 -2
  301. package/src/nodes/code/FunctionCallNode.js +1 -1
  302. package/src/nodes/code/FunctionNode.js +2 -3
  303. package/src/nodes/core/ArrayNode.js +21 -2
  304. package/src/nodes/core/AssignNode.js +3 -3
  305. package/src/nodes/core/AttributeNode.js +3 -3
  306. package/src/nodes/core/BypassNode.js +1 -1
  307. package/src/nodes/core/ContextNode.js +104 -5
  308. package/src/nodes/core/IndexNode.js +2 -1
  309. package/src/nodes/core/InputNode.js +1 -1
  310. package/src/nodes/core/InspectorNode.js +1 -1
  311. package/src/nodes/core/IsolateNode.js +1 -1
  312. package/src/nodes/core/MRTNode.js +48 -2
  313. package/src/nodes/core/Node.js +112 -15
  314. package/src/nodes/core/NodeBuilder.js +284 -66
  315. package/src/nodes/core/NodeError.js +28 -0
  316. package/src/nodes/core/NodeFrame.js +12 -4
  317. package/src/nodes/core/NodeUtils.js +11 -9
  318. package/src/nodes/core/OutputStructNode.js +12 -10
  319. package/src/nodes/core/ParameterNode.js +4 -4
  320. package/src/nodes/core/PropertyNode.js +19 -3
  321. package/src/nodes/core/StackNode.js +66 -17
  322. package/src/nodes/core/StackTrace.js +139 -0
  323. package/src/nodes/core/StructNode.js +17 -3
  324. package/src/nodes/core/StructTypeNode.js +12 -18
  325. package/src/nodes/core/SubBuildNode.js +2 -2
  326. package/src/nodes/core/UniformGroupNode.js +36 -6
  327. package/src/nodes/core/UniformNode.js +21 -5
  328. package/src/nodes/core/VarNode.js +48 -23
  329. package/src/nodes/core/VaryingNode.js +2 -19
  330. package/src/nodes/display/BlendModes.js +0 -64
  331. package/src/nodes/display/ColorAdjustment.js +17 -0
  332. package/src/nodes/display/ColorSpaceNode.js +3 -3
  333. package/src/nodes/display/NormalMapNode.js +39 -4
  334. package/src/nodes/display/PassNode.js +125 -16
  335. package/src/nodes/display/RenderOutputNode.js +7 -7
  336. package/src/nodes/display/ScreenNode.js +4 -2
  337. package/src/nodes/display/ToneMappingNode.js +1 -1
  338. package/src/nodes/display/ToonOutlinePassNode.js +2 -2
  339. package/src/nodes/display/ViewportDepthNode.js +52 -4
  340. package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
  341. package/src/nodes/display/ViewportTextureNode.js +39 -11
  342. package/src/nodes/fog/Fog.js +18 -35
  343. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
  344. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  345. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  346. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  347. package/src/nodes/functions/PhysicalLightingModel.js +126 -45
  348. package/src/nodes/geometry/RangeNode.js +5 -3
  349. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  350. package/src/nodes/gpgpu/BarrierNode.js +9 -0
  351. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
  352. package/src/nodes/gpgpu/ComputeNode.js +74 -48
  353. package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
  354. package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
  355. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  356. package/src/nodes/lighting/EnvironmentNode.js +28 -3
  357. package/src/nodes/lighting/LightsNode.js +7 -28
  358. package/src/nodes/lighting/PointShadowNode.js +162 -149
  359. package/src/nodes/lighting/ShadowFilterNode.js +53 -65
  360. package/src/nodes/lighting/ShadowNode.js +120 -42
  361. package/src/nodes/math/BitcastNode.js +1 -1
  362. package/src/nodes/math/BitcountNode.js +433 -0
  363. package/src/nodes/math/ConditionalNode.js +3 -3
  364. package/src/nodes/math/MathNode.js +76 -41
  365. package/src/nodes/math/OperatorNode.js +3 -2
  366. package/src/nodes/math/PackFloatNode.js +98 -0
  367. package/src/nodes/math/UnpackFloatNode.js +96 -0
  368. package/src/nodes/pmrem/PMREMNode.js +1 -1
  369. package/src/nodes/pmrem/PMREMUtils.js +9 -15
  370. package/src/nodes/tsl/TSLBase.js +1 -1
  371. package/src/nodes/tsl/TSLCore.js +38 -17
  372. package/src/nodes/utils/ArrayElementNode.js +14 -1
  373. package/src/nodes/utils/ConvertNode.js +1 -1
  374. package/src/nodes/utils/DebugNode.js +12 -12
  375. package/src/nodes/utils/EventNode.js +31 -2
  376. package/src/nodes/utils/FlipNode.js +1 -1
  377. package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
  378. package/src/nodes/utils/JoinNode.js +3 -3
  379. package/src/nodes/utils/LoopNode.js +1 -1
  380. package/src/nodes/utils/MemberNode.js +2 -2
  381. package/src/nodes/utils/Packing.js +13 -1
  382. package/src/nodes/utils/PostProcessingUtils.js +33 -1
  383. package/src/nodes/utils/RTTNode.js +1 -1
  384. package/src/nodes/utils/ReflectorNode.js +3 -4
  385. package/src/nodes/utils/Remap.js +48 -0
  386. package/src/nodes/utils/RotateNode.js +1 -1
  387. package/src/nodes/utils/SampleNode.js +1 -1
  388. package/src/nodes/utils/SetNode.js +1 -1
  389. package/src/nodes/utils/SplitNode.js +1 -1
  390. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  391. package/src/nodes/utils/UVUtils.js +28 -0
  392. package/src/objects/BatchedMesh.js +44 -16
  393. package/src/objects/InstancedMesh.js +30 -3
  394. package/src/objects/Line.js +1 -1
  395. package/src/objects/Mesh.js +1 -1
  396. package/src/objects/Points.js +1 -1
  397. package/src/objects/Skeleton.js +9 -0
  398. package/src/objects/SkinnedMesh.js +26 -9
  399. package/src/renderers/WebGLRenderer.js +329 -145
  400. package/src/renderers/common/Animation.js +3 -3
  401. package/src/renderers/common/Attributes.js +15 -1
  402. package/src/renderers/common/Backend.js +29 -8
  403. package/src/renderers/common/Background.js +26 -13
  404. package/src/renderers/common/BindGroup.js +1 -16
  405. package/src/renderers/common/Binding.js +11 -0
  406. package/src/renderers/common/Bindings.js +29 -14
  407. package/src/renderers/common/BlendMode.js +143 -0
  408. package/src/renderers/common/Buffer.js +40 -0
  409. package/src/renderers/common/BundleGroup.js +1 -1
  410. package/src/renderers/common/ChainMap.js +30 -6
  411. package/src/renderers/common/ComputePipeline.js +1 -1
  412. package/src/renderers/common/CubeRenderTarget.js +51 -7
  413. package/src/renderers/common/Geometries.js +29 -3
  414. package/src/renderers/common/Info.js +333 -4
  415. package/src/renderers/common/InspectorBase.js +6 -1
  416. package/src/renderers/common/Lighting.js +5 -21
  417. package/src/renderers/common/Pipelines.js +40 -7
  418. package/src/renderers/common/PostProcessing.js +8 -206
  419. package/src/renderers/common/ReadbackBuffer.js +78 -0
  420. package/src/renderers/common/RenderBundle.js +3 -1
  421. package/src/renderers/common/RenderBundles.js +7 -3
  422. package/src/renderers/common/RenderContext.js +16 -0
  423. package/src/renderers/common/RenderContexts.js +33 -49
  424. package/src/renderers/common/RenderLists.js +2 -1
  425. package/src/renderers/common/RenderObject.js +17 -5
  426. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  427. package/src/renderers/common/RenderObjects.js +21 -5
  428. package/src/renderers/common/RenderPipeline.js +232 -17
  429. package/src/renderers/common/Renderer.js +481 -117
  430. package/src/renderers/common/Sampler.js +4 -4
  431. package/src/renderers/common/StorageBuffer.js +13 -1
  432. package/src/renderers/common/Textures.js +89 -4
  433. package/src/renderers/common/TimestampQueryPool.js +5 -3
  434. package/src/renderers/common/Uniform.js +8 -0
  435. package/src/renderers/common/UniformsGroup.js +62 -1
  436. package/src/renderers/common/XRManager.js +37 -29
  437. package/src/renderers/common/extras/PMREMGenerator.js +25 -23
  438. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  439. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +242 -99
  440. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  441. package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
  442. package/src/renderers/shaders/DFGLUTData.js +19 -34
  443. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  444. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  445. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  446. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  447. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  448. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  449. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
  450. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
  451. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
  452. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  453. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  454. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
  455. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  456. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
  457. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
  458. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  459. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
  460. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
  461. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
  462. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  463. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  464. package/src/renderers/shaders/ShaderChunk.js +5 -3
  465. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
  466. package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
  467. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
  468. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  469. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  470. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  471. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  472. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  473. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  474. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  475. package/src/renderers/shaders/ShaderLib.js +7 -6
  476. package/src/renderers/shaders/UniformsLib.js +7 -5
  477. package/src/renderers/shaders/UniformsUtils.js +27 -5
  478. package/src/renderers/webgl/WebGLAnimation.js +2 -1
  479. package/src/renderers/webgl/WebGLBackground.js +15 -15
  480. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  481. package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
  482. package/src/renderers/webgl/WebGLCapabilities.js +9 -4
  483. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  484. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  485. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
  486. package/src/renderers/webgl/WebGLLights.js +18 -1
  487. package/src/renderers/webgl/WebGLMaterials.js +24 -13
  488. package/src/renderers/webgl/WebGLObjects.js +3 -1
  489. package/src/renderers/webgl/WebGLOutput.js +270 -0
  490. package/src/renderers/webgl/WebGLProgram.js +49 -109
  491. package/src/renderers/webgl/WebGLPrograms.js +63 -51
  492. package/src/renderers/webgl/WebGLRenderLists.js +15 -0
  493. package/src/renderers/webgl/WebGLRenderStates.js +13 -2
  494. package/src/renderers/webgl/WebGLShadowMap.js +188 -24
  495. package/src/renderers/webgl/WebGLState.js +75 -37
  496. package/src/renderers/webgl/WebGLTextures.js +215 -54
  497. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  498. package/src/renderers/webgl/WebGLUniformsGroups.js +19 -0
  499. package/src/renderers/webgl/WebGLUtils.js +6 -2
  500. package/src/renderers/webgl-fallback/WebGLBackend.js +253 -82
  501. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
  502. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +173 -74
  503. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
  504. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
  505. package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
  506. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +68 -53
  507. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
  508. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
  509. package/src/renderers/webgpu/WebGPUBackend.js +260 -140
  510. package/src/renderers/webgpu/WebGPURenderer.js +2 -1
  511. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +366 -90
  512. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +107 -34
  513. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
  514. package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
  515. package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
  516. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
  517. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
  518. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +156 -59
  519. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
  520. package/src/renderers/webgpu/utils/WebGPUUtils.js +33 -11
  521. package/src/renderers/webxr/WebXRController.js +12 -0
  522. package/src/renderers/webxr/WebXRManager.js +4 -2
  523. package/src/textures/CubeDepthTexture.js +76 -0
  524. package/src/textures/HTMLTexture.js +74 -0
  525. package/src/textures/Source.js +2 -2
  526. package/src/textures/Texture.js +16 -5
  527. package/src/utils.js +280 -3
  528. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  529. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  530. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  531. package/src/nodes/accessors/SceneNode.js +0 -145
  532. package/src/nodes/code/ScriptableNode.js +0 -726
  533. package/src/nodes/code/ScriptableValueNode.js +0 -253
  534. package/src/nodes/display/PosterizeNode.js +0 -65
  535. package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
  536. package/src/nodes/utils/RemapNode.js +0 -125
  537. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  538. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  539. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -11,8 +11,8 @@ import WebGLCapabilities from './utils/WebGLCapabilities.js';
11
11
  import { GLFeatureName } from './utils/WebGLConstants.js';
12
12
  import { WebGLBufferRenderer } from './WebGLBufferRenderer.js';
13
13
 
14
- import { warnOnce, warn, error } from '../../utils.js';
15
- import { WebGLCoordinateSystem, TimestampQuery } from '../../constants.js';
14
+ import { isTypedArray, warnOnce, warn, error } from '../../utils.js';
15
+ import { WebGLCoordinateSystem, TimestampQuery, Compatibility } from '../../constants.js';
16
16
  import WebGLTimestampQueryPool from './utils/WebGLTimestampQueryPool.js';
17
17
 
18
18
  /**
@@ -28,6 +28,7 @@ class WebGLBackend extends Backend {
28
28
  *
29
29
  * @typedef {Object} WebGLBackend~Options
30
30
  * @property {boolean} [logarithmicDepthBuffer=false] - Whether logarithmic depth buffer is enabled or not.
31
+ * @property {boolean} [reversedDepthBuffer=false] - Whether reversed depth buffer is enabled or not.
31
32
  * @property {boolean} [alpha=true] - Whether the default framebuffer (which represents the final contents of the canvas) should be transparent or opaque.
32
33
  * @property {boolean} [depth=true] - Whether the default framebuffer should have a depth buffer or not.
33
34
  * @property {boolean} [stencil=false] - Whether the default framebuffer should have a stencil buffer or not.
@@ -184,7 +185,6 @@ class WebGLBackend extends Backend {
184
185
  */
185
186
  this._knownBindings = new WeakSet();
186
187
 
187
-
188
188
  /**
189
189
  * Whether the device supports framebuffers invalidation or not.
190
190
  *
@@ -265,9 +265,33 @@ class WebGLBackend extends Backend {
265
265
  this.extensions.get( 'WEBGL_render_shared_exponent' );
266
266
  this.extensions.get( 'WEBGL_multi_draw' );
267
267
  this.extensions.get( 'OVR_multiview2' );
268
+ this.extensions.get( 'EXT_clip_control' );
268
269
 
269
270
  this.disjoint = this.extensions.get( 'EXT_disjoint_timer_query_webgl2' );
270
271
  this.parallel = this.extensions.get( 'KHR_parallel_shader_compile' );
272
+ this.drawBuffersIndexedExt = this.extensions.get( 'OES_draw_buffers_indexed' );
273
+
274
+ if ( parameters.reversedDepthBuffer ) {
275
+
276
+ if ( this.extensions.has( 'EXT_clip_control' ) ) {
277
+
278
+ renderer.reversedDepthBuffer = true;
279
+
280
+ } else {
281
+
282
+ warn( 'WebGPURenderer: Unable to use reversed depth buffer due to missing EXT_clip_control extension. Fallback to default depth buffer.' );
283
+
284
+ renderer.reversedDepthBuffer = false;
285
+
286
+ }
287
+
288
+ }
289
+
290
+ if ( renderer.reversedDepthBuffer ) {
291
+
292
+ this.state.setReversedDepth( true );
293
+
294
+ }
271
295
 
272
296
  }
273
297
 
@@ -285,15 +309,20 @@ class WebGLBackend extends Backend {
285
309
 
286
310
  /**
287
311
  * This method performs a readback operation by moving buffer data from
288
- * a storage buffer attribute from the GPU to the CPU.
312
+ * a storage buffer attribute from the GPU to the CPU. ReadbackBuffer can
313
+ * be used to retain and reuse handles to the intermediate buffers and prevent
314
+ * new allocation.
289
315
  *
290
316
  * @async
291
- * @param {StorageBufferAttribute} attribute - The storage buffer attribute.
292
- * @return {Promise<ArrayBuffer>} A promise that resolves with the buffer data when the data are ready.
317
+ * @param {BufferAttribute} attribute - The storage buffer attribute to read frm.
318
+ * @param {ReadbackBuffer|ArrayBuffer} target - The storage buffer attribute.
319
+ * @param {number} offset - The storage buffer attribute.
320
+ * @param {number} count - The offset from which to start reading the
321
+ * @return {Promise<ArrayBuffer|ReadbackBuffer>} A promise that resolves with the buffer data when the data are ready.
293
322
  */
294
- async getArrayBufferAsync( attribute ) {
323
+ async getArrayBufferAsync( attribute, target = null, offset = 0, count = - 1 ) {
295
324
 
296
- return await this.attributeUtils.getArrayBufferAsync( attribute );
325
+ return await this.attributeUtils.getArrayBufferAsync( attribute, target, offset, count );
297
326
 
298
327
  }
299
328
 
@@ -445,9 +474,12 @@ class WebGLBackend extends Backend {
445
474
 
446
475
  if ( renderContext.scissor ) {
447
476
 
448
- const { x, y, width, height } = renderContext.scissorValue;
477
+ this.updateScissor( renderContext );
449
478
 
450
- state.scissor( x, renderContext.height - height - y, width, height );
479
+ } else {
480
+
481
+ const { width, height } = this.getDrawingBufferSize();
482
+ state.scissor( 0, 0, width, height );
451
483
 
452
484
  }
453
485
 
@@ -544,6 +576,17 @@ class WebGLBackend extends Backend {
544
576
 
545
577
  }
546
578
 
579
+ if ( previousContext.scissor ) {
580
+
581
+ this.updateScissor( previousContext );
582
+
583
+ } else {
584
+
585
+ const { width, height } = this.getDrawingBufferSize();
586
+ state.scissor( 0, 0, width, height );
587
+
588
+ }
589
+
547
590
  }
548
591
 
549
592
  this.prepareTimestampBuffer( TimestampQuery.RENDER, this.getTimestampUID( renderContext ) );
@@ -645,6 +688,20 @@ class WebGLBackend extends Backend {
645
688
 
646
689
  }
647
690
 
691
+ /**
692
+ * Updates the scissor with the values from the given render context.
693
+ *
694
+ * @param {RenderContext} renderContext - The render context.
695
+ */
696
+ updateScissor( renderContext ) {
697
+
698
+ const { state } = this;
699
+ const { x, y, width, height } = renderContext.scissorValue;
700
+
701
+ state.scissor( x, renderContext.height - height - y, width, height );
702
+
703
+ }
704
+
648
705
  /**
649
706
  * Defines the scissor test.
650
707
  *
@@ -814,7 +871,7 @@ class WebGLBackend extends Backend {
814
871
  if ( this.discard === false ) {
815
872
 
816
873
  // required here to handle async behaviour of render.compute()
817
- gl.enable( gl.RASTERIZER_DISCARD );
874
+ state.enable( gl.RASTERIZER_DISCARD );
818
875
  this.discard = true;
819
876
 
820
877
  }
@@ -900,11 +957,11 @@ class WebGLBackend extends Backend {
900
957
  */
901
958
  finishCompute( computeGroup ) {
902
959
 
903
- const gl = this.gl;
960
+ const { state, gl } = this;
904
961
 
905
962
  this.discard = false;
906
963
 
907
- gl.disable( gl.RASTERIZER_DISCARD );
964
+ state.disable( gl.RASTERIZER_DISCARD );
908
965
 
909
966
  this.prepareTimestampBuffer( TimestampQuery.COMPUTE, this.getTimestampUID( computeGroup ) );
910
967
 
@@ -930,6 +987,56 @@ class WebGLBackend extends Backend {
930
987
 
931
988
  }
932
989
 
990
+ /**
991
+ * Internal draw function.
992
+ *
993
+ * @private
994
+ * @param {Object3D} object - The object to render.
995
+ * @param {WebGLBufferRenderer} renderer - The internal renderer.
996
+ * @param {number} firstVertex - The first vertex to render.
997
+ * @param {number} vertexCount - The vertex count.
998
+ * @param {number} instanceCount - The intance count.
999
+ * @param {WebGLProgram} programGPU - The raw WebGL shader program.
1000
+ */
1001
+ _draw( object, renderer, firstVertex, vertexCount, instanceCount, programGPU ) {
1002
+
1003
+ if ( object.isBatchedMesh ) {
1004
+
1005
+ if ( this.hasFeature( 'WEBGL_multi_draw' ) === false ) {
1006
+
1007
+ const { gl } = this;
1008
+
1009
+ const drawIdLocation = gl.getUniformLocation( programGPU, 'nodeUniformDrawId' );
1010
+
1011
+ const starts = object._multiDrawStarts;
1012
+ const counts = object._multiDrawCounts;
1013
+ const drawCount = object._multiDrawCount;
1014
+
1015
+ for ( let i = 0; i < drawCount; i ++ ) {
1016
+
1017
+ gl.uniform1ui( drawIdLocation, i );
1018
+ renderer.render( starts[ i ], counts[ i ] );
1019
+
1020
+ }
1021
+
1022
+ } else {
1023
+
1024
+ renderer.renderMultiDraw( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount );
1025
+
1026
+ }
1027
+
1028
+ } else if ( instanceCount > 1 ) {
1029
+
1030
+ renderer.renderInstances( firstVertex, vertexCount, instanceCount );
1031
+
1032
+ } else {
1033
+
1034
+ renderer.render( firstVertex, vertexCount );
1035
+
1036
+ }
1037
+
1038
+ }
1039
+
933
1040
  /**
934
1041
  * Executes a draw command for the given render object.
935
1042
  *
@@ -957,6 +1064,12 @@ class WebGLBackend extends Backend {
957
1064
 
958
1065
  state.setMaterial( material, frontFaceCW, hardwareClippingPlanes );
959
1066
 
1067
+ if ( context.mrt !== null && context.textures !== null ) {
1068
+
1069
+ state.setMRTBlending( context.textures, context.mrt, material );
1070
+
1071
+ }
1072
+
960
1073
  state.useProgram( programGPU );
961
1074
 
962
1075
  // vertex state
@@ -1061,38 +1174,6 @@ class WebGLBackend extends Backend {
1061
1174
 
1062
1175
  }
1063
1176
 
1064
- const draw = () => {
1065
-
1066
- if ( object.isBatchedMesh ) {
1067
-
1068
- if ( object._multiDrawInstances !== null ) {
1069
-
1070
- // @deprecated, r174
1071
- warnOnce( 'WebGLBackend: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection.' );
1072
- renderer.renderMultiDrawInstances( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount, object._multiDrawInstances );
1073
-
1074
- } else if ( ! this.hasFeature( 'WEBGL_multi_draw' ) ) {
1075
-
1076
- warnOnce( 'WebGLBackend: WEBGL_multi_draw not supported.' );
1077
-
1078
- } else {
1079
-
1080
- renderer.renderMultiDraw( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount );
1081
-
1082
- }
1083
-
1084
- } else if ( instanceCount > 1 ) {
1085
-
1086
- renderer.renderInstances( firstVertex, vertexCount, instanceCount );
1087
-
1088
- } else {
1089
-
1090
- renderer.render( firstVertex, vertexCount );
1091
-
1092
- }
1093
-
1094
- };
1095
-
1096
1177
  if ( renderObject.camera.isArrayCamera === true && renderObject.camera.cameras.length > 0 && renderObject.camera.isMultiViewCamera === false ) {
1097
1178
 
1098
1179
  const cameraData = this.get( renderObject.camera );
@@ -1121,7 +1202,20 @@ class WebGLBackend extends Backend {
1121
1202
 
1122
1203
  }
1123
1204
 
1124
- const cameraIndexData = this.get( cameraIndex );
1205
+ let cameraIndexBufferIndex = 0;
1206
+
1207
+ bindingsSearch: for ( const bindGroup of renderObject.getBindings() ) {
1208
+
1209
+ for ( const binding of bindGroup.bindings ) {
1210
+
1211
+ if ( binding === cameraIndex ) break bindingsSearch;
1212
+
1213
+ if ( binding.isUniformsGroup || binding.isUniformBuffer ) cameraIndexBufferIndex ++;
1214
+
1215
+ }
1216
+
1217
+ }
1218
+
1125
1219
  const pixelRatio = this.renderer.getPixelRatio();
1126
1220
 
1127
1221
  const renderTarget = this._currentContext.renderTarget;
@@ -1190,9 +1284,9 @@ class WebGLBackend extends Backend {
1190
1284
 
1191
1285
  }
1192
1286
 
1193
- state.bindBufferBase( gl.UNIFORM_BUFFER, cameraIndexData.index, cameraData.indexesGPU[ i ] );
1287
+ state.bindBufferBase( gl.UNIFORM_BUFFER, cameraIndexBufferIndex, cameraData.indexesGPU[ i ] );
1194
1288
 
1195
- draw();
1289
+ this._draw( object, renderer, firstVertex, vertexCount, instanceCount, programGPU );
1196
1290
 
1197
1291
  }
1198
1292
 
@@ -1203,7 +1297,7 @@ class WebGLBackend extends Backend {
1203
1297
 
1204
1298
  } else {
1205
1299
 
1206
- draw();
1300
+ this._draw( object, renderer, firstVertex, vertexCount, instanceCount, programGPU );
1207
1301
 
1208
1302
  }
1209
1303
 
@@ -1576,7 +1670,8 @@ class WebGLBackend extends Backend {
1576
1670
  //
1577
1671
 
1578
1672
  this.set( pipeline, {
1579
- programGPU
1673
+ programGPU,
1674
+ pipeline: programGPU
1580
1675
  } );
1581
1676
 
1582
1677
  }
@@ -1732,40 +1827,62 @@ class WebGLBackend extends Backend {
1732
1827
 
1733
1828
  const { gl } = this;
1734
1829
 
1735
- const bindGroupData = this.get( bindGroup );
1736
-
1737
- let i = bindGroupData.uniformBuffers;
1738
- let t = bindGroupData.textures;
1739
-
1740
1830
  for ( const binding of bindGroup.bindings ) {
1741
1831
 
1742
1832
  const map = this.get( binding );
1743
1833
 
1744
1834
  if ( binding.isUniformsGroup || binding.isUniformBuffer ) {
1745
1835
 
1746
- const data = binding.buffer;
1747
- let { bufferGPU } = this.get( data );
1836
+ const array = binding.buffer;
1837
+ let { bufferGPU } = this.get( array );
1748
1838
 
1749
1839
  if ( bufferGPU === undefined ) {
1750
1840
 
1751
1841
  // create
1752
1842
 
1753
1843
  bufferGPU = gl.createBuffer();
1844
+
1754
1845
  gl.bindBuffer( gl.UNIFORM_BUFFER, bufferGPU );
1755
- gl.bufferData( gl.UNIFORM_BUFFER, data, gl.DYNAMIC_DRAW );
1846
+ gl.bufferData( gl.UNIFORM_BUFFER, array.byteLength, gl.DYNAMIC_DRAW );
1756
1847
 
1757
- this.set( data, { bufferGPU } );
1848
+ this.set( array, { bufferGPU } );
1758
1849
 
1759
1850
  } else {
1760
1851
 
1761
- // update
1762
-
1763
1852
  gl.bindBuffer( gl.UNIFORM_BUFFER, bufferGPU );
1764
- gl.bufferSubData( gl.UNIFORM_BUFFER, 0, data );
1765
1853
 
1766
1854
  }
1767
1855
 
1768
- map.index = i ++;
1856
+ // update
1857
+
1858
+ const updateRanges = binding.updateRanges;
1859
+
1860
+ gl.bindBuffer( gl.UNIFORM_BUFFER, bufferGPU );
1861
+
1862
+ if ( updateRanges.length === 0 ) {
1863
+
1864
+ gl.bufferData( gl.UNIFORM_BUFFER, array, gl.DYNAMIC_DRAW );
1865
+
1866
+ } else {
1867
+
1868
+ const isTyped = isTypedArray( array );
1869
+ const byteOffsetFactor = isTyped ? 1 : array.BYTES_PER_ELEMENT;
1870
+
1871
+ for ( let i = 0, l = updateRanges.length; i < l; i ++ ) {
1872
+
1873
+ const range = updateRanges[ i ];
1874
+
1875
+ const dataOffset = range.start * byteOffsetFactor;
1876
+ const size = range.count * byteOffsetFactor;
1877
+
1878
+ const bufferOffset = dataOffset * ( isTyped ? array.BYTES_PER_ELEMENT : 1 ); // bufferOffset is always in bytes
1879
+
1880
+ gl.bufferSubData( gl.UNIFORM_BUFFER, bufferOffset, array, dataOffset, size );
1881
+
1882
+ }
1883
+
1884
+ }
1885
+
1769
1886
  map.bufferGPU = bufferGPU;
1770
1887
 
1771
1888
  this.set( binding, map );
@@ -1774,7 +1891,6 @@ class WebGLBackend extends Backend {
1774
1891
 
1775
1892
  const { textureGPU, glTextureType } = this.get( binding.texture );
1776
1893
 
1777
- map.index = t ++;
1778
1894
  map.textureGPU = textureGPU;
1779
1895
  map.glTextureType = glTextureType;
1780
1896
 
@@ -1799,10 +1915,35 @@ class WebGLBackend extends Backend {
1799
1915
 
1800
1916
  const bindingData = this.get( binding );
1801
1917
  const bufferGPU = bindingData.bufferGPU;
1802
- const data = binding.buffer;
1918
+ const array = binding.buffer;
1919
+
1920
+ const updateRanges = binding.updateRanges;
1803
1921
 
1804
1922
  gl.bindBuffer( gl.UNIFORM_BUFFER, bufferGPU );
1805
- gl.bufferData( gl.UNIFORM_BUFFER, data, gl.DYNAMIC_DRAW );
1923
+
1924
+ if ( updateRanges.length === 0 ) {
1925
+
1926
+ gl.bufferData( gl.UNIFORM_BUFFER, array, gl.DYNAMIC_DRAW );
1927
+
1928
+ } else {
1929
+
1930
+ const isTyped = isTypedArray( array );
1931
+ const byteOffsetFactor = isTyped ? 1 : array.BYTES_PER_ELEMENT;
1932
+
1933
+ for ( let i = 0, l = updateRanges.length; i < l; i ++ ) {
1934
+
1935
+ const range = updateRanges[ i ];
1936
+
1937
+ const dataOffset = range.start * byteOffsetFactor;
1938
+ const size = range.count * byteOffsetFactor;
1939
+
1940
+ const bufferOffset = dataOffset * ( isTyped ? array.BYTES_PER_ELEMENT : 1 ); // bufferOffset is always in bytes
1941
+
1942
+ gl.bufferSubData( gl.UNIFORM_BUFFER, bufferOffset, array, dataOffset, size );
1943
+
1944
+ }
1945
+
1946
+ }
1806
1947
 
1807
1948
  }
1808
1949
 
@@ -1897,17 +2038,6 @@ class WebGLBackend extends Backend {
1897
2038
 
1898
2039
  }
1899
2040
 
1900
- /**
1901
- * Returns the maximum anisotropy texture filtering value.
1902
- *
1903
- * @return {number} The maximum anisotropy texture filtering value.
1904
- */
1905
- getMaxAnisotropy() {
1906
-
1907
- return this.capabilities.getMaxAnisotropy();
1908
-
1909
- }
1910
-
1911
2041
  /**
1912
2042
  * Copies data of the given source texture to the given destination texture.
1913
2043
  *
@@ -1937,6 +2067,35 @@ class WebGLBackend extends Backend {
1937
2067
 
1938
2068
  }
1939
2069
 
2070
+ /**
2071
+ * Checks if the given compatibility is supported by the backend.
2072
+ *
2073
+ * @param {string} name - The compatibility name.
2074
+ * @return {boolean} Whether the compatibility is supported or not.
2075
+ */
2076
+ hasCompatibility( name ) {
2077
+
2078
+ if ( name === Compatibility.TEXTURE_COMPARE ) return true;
2079
+
2080
+ return super.hasCompatibility( name );
2081
+
2082
+ }
2083
+
2084
+ /**
2085
+ * Initializes the render target defined in the given render context.
2086
+ *
2087
+ * @param {RenderContext} renderContext - The render context.
2088
+ */
2089
+ initRenderTarget( renderContext ) {
2090
+
2091
+ const { gl, state } = this;
2092
+
2093
+ this._setFramebuffer( renderContext );
2094
+
2095
+ state.bindFramebuffer( gl.FRAMEBUFFER, null );
2096
+
2097
+ }
2098
+
1940
2099
  /**
1941
2100
  * Configures the active framebuffer from the given render context.
1942
2101
  *
@@ -1955,7 +2114,7 @@ class WebGLBackend extends Backend {
1955
2114
  const renderTargetContextData = this.get( renderTarget );
1956
2115
  const { samples, depthBuffer, stencilBuffer } = renderTarget;
1957
2116
 
1958
- const isCube = renderTarget.isWebGLCubeRenderTarget === true;
2117
+ const isCube = renderTarget.isCubeRenderTarget === true;
1959
2118
  const isRenderTarget3D = renderTarget.isRenderTarget3D === true;
1960
2119
  const isRenderTargetArray = renderTarget.depth > 1;
1961
2120
  const isXRRenderTarget = renderTarget.isXRRenderTarget === true;
@@ -2091,6 +2250,12 @@ class WebGLBackend extends Backend {
2091
2250
 
2092
2251
  gl.framebufferTextureLayer( gl.FRAMEBUFFER, depthStyle, textureData.textureGPU, 0, layer );
2093
2252
 
2253
+ } else if ( descriptor.depthTexture.isCubeTexture ) {
2254
+
2255
+ const cubeFace = this.renderer._activeCubeFace;
2256
+
2257
+ gl.framebufferTexture2D( gl.FRAMEBUFFER, depthStyle, gl.TEXTURE_CUBE_MAP_POSITIVE_X + cubeFace, textureData.textureGPU, 0 );
2258
+
2094
2259
  } else {
2095
2260
 
2096
2261
  gl.framebufferTexture2D( gl.FRAMEBUFFER, depthStyle, gl.TEXTURE_2D, textureData.textureGPU, 0 );
@@ -2400,20 +2565,22 @@ class WebGLBackend extends Backend {
2400
2565
 
2401
2566
  const gl = this.gl;
2402
2567
 
2568
+ let uniformBuffers = 0;
2569
+ let textures = 0;
2570
+
2403
2571
  for ( const bindGroup of bindings ) {
2404
2572
 
2405
2573
  for ( const binding of bindGroup.bindings ) {
2406
2574
 
2407
- const bindingData = this.get( binding );
2408
- const index = bindingData.index;
2409
-
2410
2575
  if ( binding.isUniformsGroup || binding.isUniformBuffer ) {
2411
2576
 
2577
+ const index = uniformBuffers ++;
2412
2578
  const location = gl.getUniformBlockIndex( programGPU, binding.name );
2413
2579
  gl.uniformBlockBinding( programGPU, location, index );
2414
2580
 
2415
2581
  } else if ( binding.isSampledTexture ) {
2416
2582
 
2583
+ const index = textures ++;
2417
2584
  const location = gl.getUniformLocation( programGPU, binding.name );
2418
2585
  gl.uniform1i( location, index );
2419
2586
 
@@ -2435,20 +2602,24 @@ class WebGLBackend extends Backend {
2435
2602
 
2436
2603
  const { gl, state } = this;
2437
2604
 
2605
+ let uniformBuffers = 0;
2606
+ let textures = 0;
2607
+
2438
2608
  for ( const bindGroup of bindings ) {
2439
2609
 
2440
2610
  for ( const binding of bindGroup.bindings ) {
2441
2611
 
2442
2612
  const bindingData = this.get( binding );
2443
- const index = bindingData.index;
2444
2613
 
2445
2614
  if ( binding.isUniformsGroup || binding.isUniformBuffer ) {
2446
2615
 
2616
+ const index = uniformBuffers ++;
2447
2617
  // TODO USE bindBufferRange to group multiple uniform buffers
2448
2618
  state.bindBufferBase( gl.UNIFORM_BUFFER, index, bindingData.bufferGPU );
2449
2619
 
2450
2620
  } else if ( binding.isSampledTexture ) {
2451
2621
 
2622
+ const index = textures ++;
2452
2623
  state.bindTexture( bindingData.glTextureType, bindingData.textureGPU, gl.TEXTURE0 + index );
2453
2624
 
2454
2625
  }
@@ -91,47 +91,6 @@ class WebGLBufferRenderer {
91
91
 
92
92
  }
93
93
 
94
- renderMultiDrawInstances( starts, counts, drawCount, primcount ) {
95
-
96
- const { extensions, mode, object, info } = this;
97
-
98
- if ( drawCount === 0 ) return;
99
-
100
- const extension = extensions.get( 'WEBGL_multi_draw' );
101
-
102
- if ( extension === null ) {
103
-
104
- for ( let i = 0; i < drawCount; i ++ ) {
105
-
106
- this.renderInstances( starts[ i ], counts[ i ], primcount[ i ] );
107
-
108
- }
109
-
110
- } else {
111
-
112
- if ( this.index !== 0 ) {
113
-
114
- extension.multiDrawElementsInstancedWEBGL( mode, counts, 0, this.type, starts, 0, primcount, 0, drawCount );
115
-
116
- } else {
117
-
118
- extension.multiDrawArraysInstancedWEBGL( mode, starts, 0, counts, 0, primcount, 0, drawCount );
119
-
120
- }
121
-
122
- let elementCount = 0;
123
- for ( let i = 0; i < drawCount; i ++ ) {
124
-
125
- elementCount += counts[ i ] * primcount[ i ];
126
-
127
- }
128
-
129
- info.update( object, elementCount, 1 );
130
-
131
- }
132
-
133
- }
134
-
135
94
  //
136
95
 
137
96
  }