super-three 0.171.0 → 0.173.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (455) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/build/three.cjs +594 -427
  4. package/build/three.core.js +515 -81
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +79 -350
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +20 -7
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +29362 -3427
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +29361 -3427
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +0 -5
  15. package/examples/jsm/animation/CCDIKSolver.js +9 -7
  16. package/examples/jsm/capabilities/WebGPU.js +1 -1
  17. package/examples/jsm/controls/ArcballControls.js +48 -37
  18. package/examples/jsm/controls/OrbitControls.js +5 -4
  19. package/examples/jsm/csm/CSMShadowNode.js +16 -11
  20. package/examples/jsm/curves/NURBSCurve.js +1 -1
  21. package/examples/jsm/curves/NURBSUtils.js +3 -0
  22. package/examples/jsm/effects/OutlineEffect.js +1 -1
  23. package/examples/jsm/exporters/GLTFExporter.js +34 -29
  24. package/examples/jsm/exporters/KTX2Exporter.js +1 -1
  25. package/examples/jsm/exporters/PLYExporter.js +2 -2
  26. package/examples/jsm/geometries/TextGeometry.js +1 -12
  27. package/examples/jsm/helpers/TextureHelperGPU.js +15 -5
  28. package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
  29. package/examples/jsm/interactive/InteractiveGroup.js +108 -51
  30. package/examples/jsm/libs/demuxer_mp4.js +109 -0
  31. package/examples/jsm/lights/LightProbeGenerator.js +3 -3
  32. package/examples/jsm/lines/webgpu/LineSegments2.js +15 -6
  33. package/examples/jsm/loaders/3MFLoader.js +6 -3
  34. package/examples/jsm/loaders/BVHLoader.js +1 -1
  35. package/examples/jsm/loaders/ColladaLoader.js +5 -5
  36. package/examples/jsm/loaders/DDSLoader.js +42 -0
  37. package/examples/jsm/loaders/GCodeLoader.js +4 -2
  38. package/examples/jsm/loaders/GLTFLoader.js +22 -4
  39. package/examples/jsm/loaders/KTX2Loader.js +6 -1
  40. package/examples/jsm/loaders/KTXLoader.js +4 -4
  41. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  42. package/examples/jsm/loaders/LottieLoader.js +1 -1
  43. package/examples/jsm/loaders/MTLLoader.js +1 -0
  44. package/examples/jsm/loaders/NRRDLoader.js +1 -1
  45. package/examples/jsm/loaders/PLYLoader.js +7 -7
  46. package/examples/jsm/loaders/PVRLoader.js +1 -1
  47. package/examples/jsm/loaders/SVGLoader.js +2 -2
  48. package/examples/jsm/loaders/TDSLoader.js +1 -2
  49. package/examples/jsm/loaders/VRMLLoader.js +7 -7
  50. package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
  51. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +1 -1
  52. package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
  53. package/examples/jsm/math/ConvexHull.js +1 -1
  54. package/examples/jsm/math/OBB.js +17 -0
  55. package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
  56. package/examples/jsm/misc/ProgressiveLightMap.js +4 -3
  57. package/examples/jsm/misc/ProgressiveLightMapGPU.js +14 -13
  58. package/examples/jsm/misc/Volume.js +27 -17
  59. package/examples/jsm/misc/VolumeSlice.js +7 -5
  60. package/examples/jsm/modifiers/CurveModifier.js +10 -8
  61. package/examples/jsm/modifiers/CurveModifierGPU.js +9 -7
  62. package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
  63. package/examples/jsm/objects/GroundedSkybox.js +4 -4
  64. package/examples/jsm/objects/Sky.js +2 -2
  65. package/examples/jsm/objects/SkyMesh.js +3 -3
  66. package/examples/jsm/objects/Water2.js +1 -1
  67. package/examples/jsm/objects/Water2Mesh.js +2 -2
  68. package/examples/jsm/objects/WaterMesh.js +29 -24
  69. package/examples/jsm/physics/JoltPhysics.js +7 -7
  70. package/examples/jsm/physics/RapierPhysics.js +4 -4
  71. package/examples/jsm/postprocessing/BloomPass.js +2 -2
  72. package/examples/jsm/postprocessing/EffectComposer.js +1 -2
  73. package/examples/jsm/postprocessing/OutlinePass.js +4 -4
  74. package/examples/jsm/postprocessing/OutputPass.js +2 -0
  75. package/examples/jsm/postprocessing/SAOPass.js +1 -2
  76. package/examples/jsm/postprocessing/SMAAPass.js +1 -3
  77. package/examples/jsm/postprocessing/SSAOPass.js +2 -4
  78. package/examples/jsm/postprocessing/SSRPass.js +2 -4
  79. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
  80. package/examples/jsm/renderers/SVGRenderer.js +6 -4
  81. package/examples/jsm/shaders/BokehShader2.js +1 -1
  82. package/examples/jsm/shaders/GodRaysShader.js +3 -3
  83. package/examples/jsm/shaders/OutputShader.js +5 -1
  84. package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
  85. package/examples/jsm/transpiler/GLSLDecoder.js +2 -2
  86. package/examples/jsm/transpiler/TSLEncoder.js +2 -0
  87. package/examples/jsm/tsl/display/AfterImageNode.js +93 -4
  88. package/examples/jsm/tsl/display/AnaglyphPassNode.js +46 -2
  89. package/examples/jsm/tsl/display/AnamorphicNode.js +118 -5
  90. package/examples/jsm/tsl/display/BleachBypass.js +10 -0
  91. package/examples/jsm/tsl/display/BloomNode.js +233 -26
  92. package/examples/jsm/tsl/display/DenoiseNode.js +141 -25
  93. package/examples/jsm/tsl/display/DepthOfFieldNode.js +80 -1
  94. package/examples/jsm/tsl/display/DotScreenNode.js +50 -5
  95. package/examples/jsm/tsl/display/FXAANode.js +52 -3
  96. package/examples/jsm/tsl/display/FilmNode.js +47 -1
  97. package/examples/jsm/tsl/display/GTAONode.js +210 -14
  98. package/examples/jsm/tsl/display/GaussianBlurNode.js +152 -8
  99. package/examples/jsm/tsl/display/LensflareNode.js +131 -13
  100. package/examples/jsm/tsl/display/Lut3DNode.js +55 -1
  101. package/examples/jsm/tsl/display/MotionBlur.js +12 -2
  102. package/examples/jsm/tsl/display/OutlineNode.js +343 -26
  103. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +36 -2
  104. package/examples/jsm/tsl/display/PixelationPassNode.js +142 -9
  105. package/examples/jsm/tsl/display/RGBShiftNode.js +49 -2
  106. package/examples/jsm/tsl/display/SMAANode.js +187 -46
  107. package/examples/jsm/tsl/display/SSAAPassNode.js +110 -25
  108. package/examples/jsm/tsl/display/SSRNode.js +194 -21
  109. package/examples/jsm/tsl/display/Sepia.js +9 -0
  110. package/examples/jsm/tsl/display/SobelOperatorNode.js +54 -4
  111. package/examples/jsm/tsl/display/StereoCompositePassNode.js +79 -3
  112. package/examples/jsm/tsl/display/StereoPassNode.js +41 -3
  113. package/examples/jsm/tsl/display/TRAAPassNode.js +116 -21
  114. package/examples/jsm/tsl/display/TransitionNode.js +71 -6
  115. package/examples/jsm/tsl/display/hashBlur.js +14 -3
  116. package/examples/jsm/tsl/lighting/TiledLightsNode.js +40 -34
  117. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  118. package/examples/jsm/utils/CameraUtils.js +4 -1
  119. package/examples/jsm/utils/GeometryUtils.js +22 -19
  120. package/examples/jsm/utils/SceneUtils.js +2 -2
  121. package/examples/jsm/webxr/XRControllerModelFactory.js +6 -1
  122. package/examples/jsm/webxr/XREstimatedLight.js +1 -1
  123. package/package.json +8 -3
  124. package/src/Three.Core.js +4 -0
  125. package/src/Three.Legacy.js +0 -21
  126. package/src/Three.TSL.js +18 -5
  127. package/src/Three.WebGPU.Nodes.js +2 -2
  128. package/src/Three.WebGPU.js +2 -2
  129. package/src/animation/PropertyBinding.js +2 -2
  130. package/src/cameras/ArrayCamera.js +1 -0
  131. package/src/cameras/PerspectiveCamera.js +18 -2
  132. package/src/constants.js +6 -1
  133. package/src/core/BufferAttribute.js +4 -0
  134. package/src/core/EventDispatcher.js +8 -6
  135. package/src/core/RenderTarget.js +18 -0
  136. package/src/core/RenderTarget3D.js +22 -0
  137. package/src/core/RenderTargetArray.js +22 -0
  138. package/src/extras/Earcut.js +1 -1
  139. package/src/extras/ImageUtils.js +1 -11
  140. package/src/extras/PMREMGenerator.js +20 -0
  141. package/src/extras/TextureUtils.js +6 -0
  142. package/src/helpers/CameraHelper.js +16 -13
  143. package/src/loaders/nodes/NodeLoader.js +59 -0
  144. package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
  145. package/src/loaders/nodes/NodeObjectLoader.js +61 -0
  146. package/src/materials/nodes/Line2NodeMaterial.js +128 -34
  147. package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
  148. package/src/materials/nodes/LineDashedNodeMaterial.js +78 -5
  149. package/src/materials/nodes/MeshBasicNodeMaterial.js +56 -0
  150. package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
  151. package/src/materials/nodes/MeshMatcapNodeMaterial.js +22 -2
  152. package/src/materials/nodes/MeshNormalNodeMaterial.js +21 -2
  153. package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
  154. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +269 -0
  155. package/src/materials/nodes/MeshSSSNodeMaterial.js +97 -6
  156. package/src/materials/nodes/MeshStandardNodeMaterial.js +78 -0
  157. package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
  158. package/src/materials/nodes/NodeMaterial.js +476 -23
  159. package/src/materials/nodes/NodeMaterials.js +0 -1
  160. package/src/materials/nodes/PointsNodeMaterial.js +121 -10
  161. package/src/materials/nodes/ShadowNodeMaterial.js +29 -0
  162. package/src/materials/nodes/SpriteNodeMaterial.js +78 -20
  163. package/src/materials/nodes/VolumeNodeMaterial.js +80 -4
  164. package/src/materials/nodes/manager/NodeMaterialObserver.js +95 -0
  165. package/src/nodes/Nodes.js +5 -6
  166. package/src/nodes/TSL.js +6 -3
  167. package/src/nodes/accessors/AccessorsUtils.js +27 -0
  168. package/src/nodes/accessors/Arrays.js +47 -6
  169. package/src/nodes/accessors/BatchNode.js +42 -6
  170. package/src/nodes/accessors/Bitangent.js +37 -0
  171. package/src/nodes/accessors/BufferAttributeNode.js +178 -5
  172. package/src/nodes/accessors/BufferNode.js +63 -0
  173. package/src/nodes/accessors/BuiltinNode.js +38 -0
  174. package/src/nodes/accessors/Camera.js +113 -3
  175. package/src/nodes/accessors/ClippingNode.js +71 -2
  176. package/src/nodes/accessors/CubeTextureNode.js +64 -0
  177. package/src/nodes/accessors/InstanceNode.js +85 -2
  178. package/src/nodes/accessors/InstancedMeshNode.js +28 -3
  179. package/src/nodes/accessors/Lights.js +50 -1
  180. package/src/nodes/accessors/MaterialNode.js +306 -12
  181. package/src/nodes/accessors/MaterialProperties.js +7 -0
  182. package/src/nodes/accessors/MaterialReferenceNode.js +53 -13
  183. package/src/nodes/accessors/ModelNode.js +100 -5
  184. package/src/nodes/accessors/ModelViewProjectionNode.js +10 -38
  185. package/src/nodes/accessors/MorphNode.js +48 -4
  186. package/src/nodes/accessors/Normal.js +65 -5
  187. package/src/nodes/accessors/Object3DNode.js +101 -1
  188. package/src/nodes/accessors/PointUVNode.js +26 -0
  189. package/src/nodes/accessors/Position.js +56 -7
  190. package/src/nodes/accessors/ReferenceBaseNode.js +186 -0
  191. package/src/nodes/accessors/ReferenceNode.js +201 -2
  192. package/src/nodes/accessors/ReflectVector.js +24 -0
  193. package/src/nodes/accessors/RendererReferenceNode.js +46 -1
  194. package/src/nodes/accessors/SceneNode.js +54 -0
  195. package/src/nodes/accessors/SkinningNode.js +127 -1
  196. package/src/nodes/accessors/StorageBufferNode.js +209 -8
  197. package/src/nodes/accessors/StorageTextureNode.js +118 -0
  198. package/src/nodes/accessors/Tangent.js +38 -2
  199. package/src/nodes/accessors/Texture3DNode.js +91 -7
  200. package/src/nodes/accessors/TextureBicubic.js +12 -2
  201. package/src/nodes/accessors/TextureNode.js +316 -10
  202. package/src/nodes/accessors/TextureSizeNode.js +42 -0
  203. package/src/nodes/accessors/UV.js +10 -1
  204. package/src/nodes/accessors/UniformArrayNode.js +231 -25
  205. package/src/nodes/accessors/UserDataNode.js +46 -0
  206. package/src/nodes/accessors/VelocityNode.js +80 -0
  207. package/src/nodes/accessors/VertexColorNode.js +39 -2
  208. package/src/nodes/code/CodeNode.js +95 -1
  209. package/src/nodes/code/ExpressionNode.js +28 -0
  210. package/src/nodes/code/FunctionCallNode.js +37 -0
  211. package/src/nodes/code/FunctionNode.js +45 -0
  212. package/src/nodes/code/ScriptableNode.js +223 -1
  213. package/src/nodes/code/ScriptableValueNode.js +85 -1
  214. package/src/nodes/core/ArrayNode.js +125 -0
  215. package/src/nodes/core/AssignNode.js +48 -2
  216. package/src/nodes/core/AttributeNode.js +43 -0
  217. package/src/nodes/core/BypassNode.js +47 -2
  218. package/src/nodes/core/CacheNode.js +53 -2
  219. package/src/nodes/core/ConstNode.js +32 -0
  220. package/src/nodes/core/ContextNode.js +65 -0
  221. package/src/nodes/core/IndexNode.js +68 -7
  222. package/src/nodes/core/InputNode.js +48 -0
  223. package/src/nodes/core/LightingModel.js +60 -0
  224. package/src/nodes/core/MRTNode.js +66 -0
  225. package/src/nodes/core/Node.js +350 -12
  226. package/src/nodes/core/NodeAttribute.js +38 -0
  227. package/src/nodes/core/NodeBuilder.js +1166 -26
  228. package/src/nodes/core/NodeCache.js +41 -2
  229. package/src/nodes/core/NodeCode.js +31 -0
  230. package/src/nodes/core/NodeFrame.js +123 -2
  231. package/src/nodes/core/NodeFunction.js +46 -0
  232. package/src/nodes/core/NodeFunctionInput.js +44 -0
  233. package/src/nodes/core/NodeParser.js +11 -0
  234. package/src/nodes/core/NodeUniform.js +52 -0
  235. package/src/nodes/core/NodeUtils.js +152 -1
  236. package/src/nodes/core/NodeVar.js +47 -1
  237. package/src/nodes/core/NodeVarying.js +28 -0
  238. package/src/nodes/core/OutputStructNode.js +51 -10
  239. package/src/nodes/core/ParameterNode.js +28 -0
  240. package/src/nodes/core/PropertyNode.js +232 -0
  241. package/src/nodes/core/StackNode.js +98 -1
  242. package/src/nodes/core/StructNode.js +121 -0
  243. package/src/nodes/core/StructType.js +13 -0
  244. package/src/nodes/core/StructTypeNode.js +105 -6
  245. package/src/nodes/core/TempNode.js +31 -5
  246. package/src/nodes/core/UniformGroupNode.js +82 -7
  247. package/src/nodes/core/UniformNode.js +66 -0
  248. package/src/nodes/core/VarNode.js +146 -7
  249. package/src/nodes/core/VaryingNode.js +100 -3
  250. package/src/nodes/core/constants.js +36 -0
  251. package/src/nodes/display/BlendModes.js +88 -1
  252. package/src/nodes/display/BumpMapNode.js +37 -0
  253. package/src/nodes/display/ColorAdjustment.js +53 -11
  254. package/src/nodes/display/ColorSpaceFunctions.js +16 -0
  255. package/src/nodes/display/ColorSpaceNode.js +82 -0
  256. package/src/nodes/display/FrontFacingNode.js +29 -0
  257. package/src/nodes/display/NormalMapNode.js +43 -0
  258. package/src/nodes/display/PassNode.js +300 -7
  259. package/src/nodes/display/PosterizeNode.js +33 -0
  260. package/src/nodes/display/RenderOutputNode.js +66 -1
  261. package/src/nodes/display/ScreenNode.js +96 -0
  262. package/src/nodes/display/ToneMappingFunctions.js +58 -10
  263. package/src/nodes/display/ToneMappingNode.js +55 -2
  264. package/src/nodes/display/ToonOutlinePassNode.js +73 -0
  265. package/src/nodes/display/ViewportDepthNode.js +122 -8
  266. package/src/nodes/display/ViewportDepthTextureNode.js +23 -0
  267. package/src/nodes/display/ViewportSharedTextureNode.js +23 -0
  268. package/src/nodes/display/ViewportTextureNode.js +57 -0
  269. package/src/nodes/fog/Fog.js +110 -0
  270. package/src/nodes/functions/BasicLightingModel.js +24 -0
  271. package/src/nodes/functions/PhongLightingModel.js +34 -2
  272. package/src/nodes/functions/PhysicalLightingModel.js +167 -8
  273. package/src/nodes/functions/ShadowMaskModel.js +23 -0
  274. package/src/nodes/functions/ToonLightingModel.js +20 -0
  275. package/src/nodes/functions/material/getAlphaHashThreshold.js +1 -3
  276. package/src/nodes/functions/material/getParallaxCorrectNormal.js +16 -1
  277. package/src/nodes/geometry/RangeNode.js +54 -2
  278. package/src/nodes/gpgpu/AtomicFunctionNode.js +174 -2
  279. package/src/nodes/gpgpu/BarrierNode.js +47 -0
  280. package/src/nodes/gpgpu/ComputeBuiltinNode.js +134 -0
  281. package/src/nodes/gpgpu/ComputeNode.js +106 -2
  282. package/src/nodes/gpgpu/WorkgroupInfoNode.js +115 -6
  283. package/src/nodes/lighting/AONode.js +18 -0
  284. package/src/nodes/lighting/AmbientLightNode.js +10 -0
  285. package/src/nodes/lighting/AnalyticLightNode.js +97 -2
  286. package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
  287. package/src/nodes/lighting/BasicLightMapNode.js +17 -0
  288. package/src/nodes/lighting/DirectionalLightNode.js +10 -0
  289. package/src/nodes/lighting/EnvironmentNode.js +18 -0
  290. package/src/nodes/lighting/HemisphereLightNode.js +31 -0
  291. package/src/nodes/lighting/IESSpotLightNode.js +11 -0
  292. package/src/nodes/lighting/IrradianceNode.js +17 -0
  293. package/src/nodes/lighting/LightProbeNode.js +20 -0
  294. package/src/nodes/lighting/LightUtils.js +12 -0
  295. package/src/nodes/lighting/LightingContextNode.js +48 -0
  296. package/src/nodes/lighting/LightingNode.js +15 -6
  297. package/src/nodes/lighting/LightsNode.js +132 -1
  298. package/src/nodes/lighting/PointLightNode.js +32 -1
  299. package/src/nodes/lighting/PointShadowNode.js +54 -1
  300. package/src/nodes/lighting/RectAreaLightNode.js +44 -6
  301. package/src/nodes/lighting/ShadowBaseNode.js +93 -0
  302. package/src/nodes/lighting/ShadowNode.js +241 -35
  303. package/src/nodes/lighting/SpotLightNode.js +43 -0
  304. package/src/nodes/math/ConditionalNode.js +78 -4
  305. package/src/nodes/math/Hash.js +9 -0
  306. package/src/nodes/math/MathNode.js +627 -11
  307. package/src/nodes/math/MathUtils.js +45 -1
  308. package/src/nodes/math/OperatorNode.js +329 -18
  309. package/src/nodes/math/TriNoise3D.js +18 -7
  310. package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
  311. package/src/nodes/parsers/GLSLNodeParser.js +11 -0
  312. package/src/nodes/pmrem/PMREMNode.js +133 -0
  313. package/src/nodes/pmrem/PMREMUtils.js +2 -2
  314. package/src/nodes/procedural/Checker.js +9 -0
  315. package/src/nodes/shapes/Shapes.js +33 -0
  316. package/src/nodes/tsl/TSLBase.js +3 -2
  317. package/src/nodes/tsl/TSLCore.js +22 -2
  318. package/src/nodes/utils/ArrayElementNode.js +39 -3
  319. package/src/nodes/utils/ConvertNode.js +31 -0
  320. package/src/nodes/utils/CubeMapNode.js +78 -0
  321. package/src/nodes/utils/Discard.js +16 -0
  322. package/src/nodes/utils/EquirectUVNode.js +31 -1
  323. package/src/nodes/utils/FlipNode.js +38 -0
  324. package/src/nodes/utils/FunctionOverloadingNode.js +53 -1
  325. package/src/nodes/utils/JoinNode.js +25 -0
  326. package/src/nodes/utils/LoopNode.js +82 -2
  327. package/src/nodes/utils/MatcapUVNode.js +17 -0
  328. package/src/nodes/utils/MaxMipLevelNode.js +49 -0
  329. package/src/nodes/utils/MemberNode.js +68 -0
  330. package/src/nodes/utils/Oscillators.js +33 -0
  331. package/src/nodes/utils/Packing.js +17 -0
  332. package/src/nodes/utils/PostProcessingUtils.js +28 -23
  333. package/src/nodes/utils/RTTNode.js +123 -2
  334. package/src/nodes/utils/ReflectorNode.js +174 -4
  335. package/src/nodes/utils/RemapNode.js +79 -0
  336. package/src/nodes/utils/RotateNode.js +41 -0
  337. package/src/nodes/utils/SetNode.js +44 -1
  338. package/src/nodes/utils/SplitNode.js +55 -3
  339. package/src/nodes/utils/SpriteSheetUVNode.js +46 -0
  340. package/src/nodes/utils/SpriteUtils.js +17 -0
  341. package/src/nodes/utils/StorageArrayElementNode.js +54 -0
  342. package/src/nodes/utils/Timer.js +40 -0
  343. package/src/nodes/utils/TriplanarTexturesNode.js +84 -0
  344. package/src/nodes/utils/UVUtils.js +20 -0
  345. package/src/nodes/utils/ViewportUtils.js +13 -0
  346. package/src/objects/BatchedMesh.js +2 -3
  347. package/src/objects/ClippingGroup.js +49 -0
  348. package/src/objects/Line.js +6 -6
  349. package/src/renderers/WebGLRenderer.js +30 -4
  350. package/src/renderers/common/Animation.js +85 -0
  351. package/src/renderers/common/Attributes.js +36 -0
  352. package/src/renderers/common/Backend.js +502 -44
  353. package/src/renderers/common/Background.js +48 -1
  354. package/src/renderers/common/BindGroup.js +43 -0
  355. package/src/renderers/common/Binding.js +35 -0
  356. package/src/renderers/common/Bindings.js +93 -1
  357. package/src/renderers/common/Buffer.js +49 -0
  358. package/src/renderers/common/BufferUtils.js +27 -0
  359. package/src/renderers/common/BundleGroup.js +57 -0
  360. package/src/renderers/common/ChainMap.js +45 -6
  361. package/src/renderers/common/ClippingContext.js +108 -15
  362. package/src/renderers/common/Color4.js +40 -0
  363. package/src/renderers/common/ComputePipeline.js +24 -0
  364. package/src/renderers/common/CubeRenderTarget.js +13 -0
  365. package/src/renderers/common/DataMap.js +37 -1
  366. package/src/renderers/common/Geometries.js +91 -14
  367. package/src/renderers/common/IndirectStorageBufferAttribute.js +25 -2
  368. package/src/renderers/common/Info.js +78 -35
  369. package/src/renderers/common/Lighting.js +34 -6
  370. package/src/renderers/common/Pipeline.js +22 -0
  371. package/src/renderers/common/Pipelines.js +148 -5
  372. package/src/renderers/common/PostProcessing.js +99 -11
  373. package/src/renderers/common/ProgrammableStage.js +60 -2
  374. package/src/renderers/common/QuadMesh.js +54 -5
  375. package/src/renderers/common/RenderBundle.js +14 -8
  376. package/src/renderers/common/RenderBundles.js +39 -10
  377. package/src/renderers/common/RenderContext.js +201 -2
  378. package/src/renderers/common/RenderContexts.js +59 -6
  379. package/src/renderers/common/RenderList.js +178 -0
  380. package/src/renderers/common/RenderLists.js +40 -3
  381. package/src/renderers/common/RenderObject.js +400 -17
  382. package/src/renderers/common/RenderObjects.js +103 -7
  383. package/src/renderers/common/RenderPipeline.js +24 -0
  384. package/src/renderers/common/Renderer.js +1170 -86
  385. package/src/renderers/common/RendererUtils.js +193 -0
  386. package/src/renderers/common/SampledTexture.js +120 -0
  387. package/src/renderers/common/Sampler.js +30 -0
  388. package/src/renderers/common/StorageBuffer.js +24 -0
  389. package/src/renderers/common/StorageBufferAttribute.js +31 -2
  390. package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
  391. package/src/renderers/common/StorageTexture.js +38 -0
  392. package/src/renderers/common/Textures.js +97 -7
  393. package/src/renderers/common/TimestampQueryPool.js +39 -0
  394. package/src/renderers/common/Uniform.js +225 -3
  395. package/src/renderers/common/UniformBuffer.js +19 -0
  396. package/src/renderers/common/UniformsGroup.js +141 -2
  397. package/src/renderers/common/XRManager.js +1193 -0
  398. package/src/renderers/common/XRRenderTarget.js +74 -0
  399. package/src/renderers/common/extras/PMREMGenerator.js +76 -10
  400. package/src/renderers/common/nodes/NodeBuilderState.js +99 -5
  401. package/src/renderers/common/nodes/NodeLibrary.js +89 -0
  402. package/src/renderers/common/nodes/NodeSampledTexture.js +90 -2
  403. package/src/renderers/common/nodes/NodeSampler.js +28 -0
  404. package/src/renderers/common/nodes/NodeStorageBuffer.js +35 -0
  405. package/src/renderers/common/nodes/NodeUniform.js +243 -2
  406. package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
  407. package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
  408. package/src/renderers/common/nodes/Nodes.js +352 -78
  409. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
  410. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
  411. package/src/renderers/webgl/WebGLBackground.js +4 -0
  412. package/src/renderers/webgl-fallback/WebGLBackend.js +819 -116
  413. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +347 -18
  414. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +58 -1
  415. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
  416. package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
  417. package/src/renderers/webgl-fallback/utils/WebGLState.js +323 -11
  418. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +168 -22
  419. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +359 -0
  420. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
  421. package/src/renderers/webgpu/WebGPUBackend.js +578 -164
  422. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +36 -0
  423. package/src/renderers/webgpu/WebGPURenderer.js +36 -0
  424. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +20 -8
  425. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +21 -8
  426. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +674 -52
  427. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +17 -0
  428. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  429. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +95 -14
  430. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +94 -1
  431. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +102 -3
  432. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +98 -1
  433. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +262 -18
  434. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +274 -0
  435. package/src/renderers/webgpu/utils/WebGPUUtils.js +116 -4
  436. package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
  437. package/src/renderers/webxr/WebXRManager.js +19 -2
  438. package/src/textures/Data3DTexture.js +2 -2
  439. package/src/textures/Texture.js +4 -0
  440. package/src/textures/VideoFrameTexture.js +35 -0
  441. package/examples/jsm/animation/MMDAnimationHelper.js +0 -1209
  442. package/examples/jsm/animation/MMDPhysics.js +0 -1408
  443. package/examples/jsm/exporters/MMDExporter.js +0 -223
  444. package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -176
  445. package/examples/jsm/libs/mmdparser.module.js +0 -11530
  446. package/examples/jsm/loaders/MMDLoader.js +0 -2298
  447. package/examples/jsm/objects/InstancedPoints.js +0 -19
  448. package/examples/jsm/shaders/MMDToonShader.js +0 -134
  449. package/src/materials/nodes/InstancedPointsNodeMaterial.js +0 -156
  450. package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -24
  451. package/src/nodes/core/UniformGroup.js +0 -13
  452. package/src/nodes/fog/FogExp2Node.js +0 -35
  453. package/src/nodes/fog/FogNode.js +0 -50
  454. package/src/nodes/fog/FogRangeNode.js +0 -36
  455. package/src/renderers/common/PostProcessingUtils.js +0 -86
@@ -6,17 +6,47 @@ import {
6
6
  OneMinusSrcColorFactor, OneMinusSrcAlphaFactor, OneMinusDstColorFactor, OneMinusDstAlphaFactor,
7
7
  NeverDepth, AlwaysDepth, LessDepth, LessEqualDepth, EqualDepth, GreaterEqualDepth, GreaterDepth, NotEqualDepth
8
8
  } from '../../../constants.js';
9
-
10
- let initialized = false, equationToGL, factorToGL;
11
-
9
+ import { Vector4 } from '../../../math/Vector4.js';
10
+
11
+ let equationToGL, factorToGL;
12
+
13
+ /**
14
+ * A WebGL 2 backend utility module for managing the WebGL state.
15
+ *
16
+ * The major goal of this module is to reduce the number of state changes
17
+ * by caching the WEbGL state with a series of variables. In this way, the
18
+ * renderer only executes state change commands when necessary which
19
+ * improves the overall performance.
20
+ *
21
+ * @private
22
+ */
12
23
  class WebGLState {
13
24
 
25
+ /**
26
+ * Constructs a new utility object.
27
+ *
28
+ * @param {WebGLBackend} backend - The WebGL 2 backend.
29
+ */
14
30
  constructor( backend ) {
15
31
 
32
+ /**
33
+ * A reference to the WebGL 2 backend.
34
+ *
35
+ * @type {WebGLBackend}
36
+ */
16
37
  this.backend = backend;
17
38
 
39
+ /**
40
+ * A reference to the rendering context.
41
+ *
42
+ * @type {WebGL2RenderingContext}
43
+ */
18
44
  this.gl = this.backend.gl;
19
45
 
46
+ // Below properties are intended to cache
47
+ // the WebGL state and are not explicitly
48
+ // documented for convenience reasons.
49
+
20
50
  this.enabled = {};
21
51
  this.currentFlipSided = null;
22
52
  this.currentCullFace = null;
@@ -51,17 +81,19 @@ class WebGLState {
51
81
  this.currentBoundTextures = {};
52
82
  this.currentBoundBufferBases = {};
53
83
 
54
- if ( initialized === false ) {
55
84
 
56
- this._init( this.gl );
57
-
58
- initialized = true;
59
-
60
- }
85
+ this._init();
61
86
 
62
87
  }
63
88
 
64
- _init( gl ) {
89
+ /**
90
+ * Inits the state of the utility.
91
+ *
92
+ * @private
93
+ */
94
+ _init() {
95
+
96
+ const gl = this.gl;
65
97
 
66
98
  // Store only WebGL constants here.
67
99
 
@@ -85,8 +117,24 @@ class WebGLState {
85
117
  [ OneMinusDstAlphaFactor ]: gl.ONE_MINUS_DST_ALPHA
86
118
  };
87
119
 
120
+ const scissorParam = gl.getParameter( gl.SCISSOR_BOX );
121
+ const viewportParam = gl.getParameter( gl.VIEWPORT );
122
+
123
+ this.currentScissor = new Vector4().fromArray( scissorParam );
124
+ this.currentViewport = new Vector4().fromArray( viewportParam );
125
+
126
+ this._tempVec4 = new Vector4();
127
+
88
128
  }
89
129
 
130
+ /**
131
+ * Enables the given WebGL capability.
132
+ *
133
+ * This method caches the capability state so
134
+ * `gl.enable()` is only called when necessary.
135
+ *
136
+ * @param {GLenum} id - The capability to enable.
137
+ */
90
138
  enable( id ) {
91
139
 
92
140
  const { enabled } = this;
@@ -100,6 +148,14 @@ class WebGLState {
100
148
 
101
149
  }
102
150
 
151
+ /**
152
+ * Disables the given WebGL capability.
153
+ *
154
+ * This method caches the capability state so
155
+ * `gl.disable()` is only called when necessary.
156
+ *
157
+ * @param {GLenum} id - The capability to enable.
158
+ */
103
159
  disable( id ) {
104
160
 
105
161
  const { enabled } = this;
@@ -113,6 +169,15 @@ class WebGLState {
113
169
 
114
170
  }
115
171
 
172
+ /**
173
+ * Specifies whether polygons are front- or back-facing
174
+ * by setting the winding orientation.
175
+ *
176
+ * This method caches the state so `gl.frontFace()` is only
177
+ * called when necessary.
178
+ *
179
+ * @param {Boolean} flipSided - Whether triangles flipped their sides or not.
180
+ */
116
181
  setFlipSided( flipSided ) {
117
182
 
118
183
  if ( this.currentFlipSided !== flipSided ) {
@@ -135,6 +200,15 @@ class WebGLState {
135
200
 
136
201
  }
137
202
 
203
+ /**
204
+ * Specifies whether or not front- and/or back-facing
205
+ * polygons can be culled.
206
+ *
207
+ * This method caches the state so `gl.cullFace()` is only
208
+ * called when necessary.
209
+ *
210
+ * @param {Number} cullFace - Defines which polygons are candidates for culling.
211
+ */
138
212
  setCullFace( cullFace ) {
139
213
 
140
214
  const { gl } = this;
@@ -171,6 +245,14 @@ class WebGLState {
171
245
 
172
246
  }
173
247
 
248
+ /**
249
+ * Specifies the width of line primitives.
250
+ *
251
+ * This method caches the state so `gl.lineWidth()` is only
252
+ * called when necessary.
253
+ *
254
+ * @param {Number} width - The line width.
255
+ */
174
256
  setLineWidth( width ) {
175
257
 
176
258
  const { currentLineWidth, gl } = this;
@@ -185,7 +267,21 @@ class WebGLState {
185
267
 
186
268
  }
187
269
 
188
-
270
+ /**
271
+ * Defines the blending.
272
+ *
273
+ * This method caches the state so `gl.blendEquation()`, `gl.blendEquationSeparate()`,
274
+ * `gl.blendFunc()` and `gl.blendFuncSeparate()` are only called when necessary.
275
+ *
276
+ * @param {Number} blending - The blending type.
277
+ * @param {Number} blendEquation - The blending equation.
278
+ * @param {Number} blendSrc - Only relevant for custom blending. The RGB source blending factor.
279
+ * @param {Number} blendDst - Only relevant for custom blending. The RGB destination blending factor.
280
+ * @param {Number} blendEquationAlpha - Only relevant for custom blending. The blending equation for alpha.
281
+ * @param {Number} blendSrcAlpha - Only relevant for custom blending. The alpha source blending factor.
282
+ * @param {Number} blendDstAlpha - Only relevant for custom blending. The alpha destination blending factor.
283
+ * @param {Boolean} premultipliedAlpha - Whether premultiplied alpha is enabled or not.
284
+ */
189
285
  setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) {
190
286
 
191
287
  const { gl } = this;
@@ -322,6 +418,15 @@ class WebGLState {
322
418
 
323
419
  }
324
420
 
421
+ /**
422
+ * Specifies whether colors can be written when rendering
423
+ * into a framebuffer or not.
424
+ *
425
+ * This method caches the state so `gl.colorMask()` is only
426
+ * called when necessary.
427
+ *
428
+ * @param {Boolean} colorMask - The color mask.
429
+ */
325
430
  setColorMask( colorMask ) {
326
431
 
327
432
  if ( this.currentColorMask !== colorMask ) {
@@ -333,6 +438,11 @@ class WebGLState {
333
438
 
334
439
  }
335
440
 
441
+ /**
442
+ * Specifies whether the depth test is enabled or not.
443
+ *
444
+ * @param {Boolean} depthTest - Whether the depth test is enabled or not.
445
+ */
336
446
  setDepthTest( depthTest ) {
337
447
 
338
448
  const { gl } = this;
@@ -349,6 +459,15 @@ class WebGLState {
349
459
 
350
460
  }
351
461
 
462
+ /**
463
+ * Specifies whether depth values can be written when rendering
464
+ * into a framebuffer or not.
465
+ *
466
+ * This method caches the state so `gl.depthMask()` is only
467
+ * called when necessary.
468
+ *
469
+ * @param {Boolean} depthMask - The depth mask.
470
+ */
352
471
  setDepthMask( depthMask ) {
353
472
 
354
473
  if ( this.currentDepthMask !== depthMask ) {
@@ -360,6 +479,14 @@ class WebGLState {
360
479
 
361
480
  }
362
481
 
482
+ /**
483
+ * Specifies the depth compare function.
484
+ *
485
+ * This method caches the state so `gl.depthFunc()` is only
486
+ * called when necessary.
487
+ *
488
+ * @param {Number} depthFunc - The depth compare function.
489
+ */
363
490
  setDepthFunc( depthFunc ) {
364
491
 
365
492
  if ( this.currentDepthFunc !== depthFunc ) {
@@ -420,6 +547,80 @@ class WebGLState {
420
547
 
421
548
  }
422
549
 
550
+ /**
551
+ * Specifies the viewport.
552
+ *
553
+ * @param {Number} x - The x-coordinate of the lower left corner of the viewport.
554
+ * @param {Number} y - The y-coordinate of the lower left corner of the viewport.
555
+ * @param {Number} width - The width of the viewport.
556
+ * @param {Number} height - The height of the viewport.
557
+ *
558
+ */
559
+ scissor( x, y, width, height ) {
560
+
561
+ const scissor = this._tempVec4.set( x, y, width, height );
562
+
563
+ if ( this.currentScissor.equals( scissor ) === false ) {
564
+
565
+ const { gl } = this;
566
+
567
+ gl.scissor( scissor.x, scissor.y, scissor.z, scissor.w );
568
+ this.currentScissor.copy( scissor );
569
+
570
+ }
571
+
572
+ }
573
+
574
+ /**
575
+ * Specifies the viewport.
576
+ *
577
+ * @param {Number} x - The x-coordinate of the lower left corner of the viewport.
578
+ * @param {Number} y - The y-coordinate of the lower left corner of the viewport.
579
+ * @param {Number} width - The width of the viewport.
580
+ * @param {Number} height - The height of the viewport.
581
+ *
582
+ */
583
+ viewport( x, y, width, height ) {
584
+
585
+ const viewport = this._tempVec4.set( x, y, width, height );
586
+
587
+ if ( this.currentViewport.equals( viewport ) === false ) {
588
+
589
+ const { gl } = this;
590
+
591
+ gl.viewport( viewport.x, viewport.y, viewport.z, viewport.w );
592
+ this.currentViewport.copy( viewport );
593
+
594
+ }
595
+
596
+ }
597
+
598
+ /**
599
+ * Defines the scissor test.
600
+ *
601
+ * @param {Boolean} boolean - Whether the scissor test should be enabled or not.
602
+ */
603
+ setScissorTest( boolean ) {
604
+
605
+ const gl = this.gl;
606
+
607
+ if ( boolean ) {
608
+
609
+ gl.enable( gl.SCISSOR_TEST );
610
+
611
+ } else {
612
+
613
+ gl.disable( gl.SCISSOR_TEST );
614
+
615
+ }
616
+
617
+ }
618
+
619
+ /**
620
+ * Specifies whether the stencil test is enabled or not.
621
+ *
622
+ * @param {Boolean} stencilTest - Whether the stencil test is enabled or not.
623
+ */
423
624
  setStencilTest( stencilTest ) {
424
625
 
425
626
  const { gl } = this;
@@ -436,6 +637,15 @@ class WebGLState {
436
637
 
437
638
  }
438
639
 
640
+ /**
641
+ * Specifies whether stencil values can be written when rendering
642
+ * into a framebuffer or not.
643
+ *
644
+ * This method caches the state so `gl.stencilMask()` is only
645
+ * called when necessary.
646
+ *
647
+ * @param {Boolean} stencilMask - The stencil mask.
648
+ */
439
649
  setStencilMask( stencilMask ) {
440
650
 
441
651
  if ( this.currentStencilMask !== stencilMask ) {
@@ -447,6 +657,16 @@ class WebGLState {
447
657
 
448
658
  }
449
659
 
660
+ /**
661
+ * Specifies whether the stencil test functions.
662
+ *
663
+ * This method caches the state so `gl.stencilFunc()` is only
664
+ * called when necessary.
665
+ *
666
+ * @param {Number} stencilFunc - The stencil compare function.
667
+ * @param {Number} stencilRef - The reference value for the stencil test.
668
+ * @param {Number} stencilMask - A bit-wise mask that is used to AND the reference value and the stored stencil value when the test is done.
669
+ */
450
670
  setStencilFunc( stencilFunc, stencilRef, stencilMask ) {
451
671
 
452
672
  if ( this.currentStencilFunc !== stencilFunc ||
@@ -463,6 +683,17 @@ class WebGLState {
463
683
 
464
684
  }
465
685
 
686
+ /**
687
+ * Specifies whether the stencil test operation.
688
+ *
689
+ * This method caches the state so `gl.stencilOp()` is only
690
+ * called when necessary.
691
+ *
692
+ * @param {Number} stencilFail - The function to use when the stencil test fails.
693
+ * @param {Number} stencilZFail - The function to use when the stencil test passes, but the depth test fail.
694
+ * @param {Number} stencilZPass - The function to use when both the stencil test and the depth test pass,
695
+ * or when the stencil test passes and there is no depth buffer or depth testing is disabled.
696
+ */
466
697
  setStencilOp( stencilFail, stencilZFail, stencilZPass ) {
467
698
 
468
699
  if ( this.currentStencilFail !== stencilFail ||
@@ -479,6 +710,13 @@ class WebGLState {
479
710
 
480
711
  }
481
712
 
713
+ /**
714
+ * Configures the WebGL state for the given material.
715
+ *
716
+ * @param {Material} material - The material to configure the state for.
717
+ * @param {Number} frontFaceCW - Whether the front faces are counter-clockwise or not.
718
+ * @param {Number} hardwareClippingPlanes - The number of hardware clipping planes.
719
+ */
482
720
  setMaterial( material, frontFaceCW, hardwareClippingPlanes ) {
483
721
 
484
722
  const { gl } = this;
@@ -543,6 +781,16 @@ class WebGLState {
543
781
 
544
782
  }
545
783
 
784
+ /**
785
+ * Specifies the polygon offset.
786
+ *
787
+ * This method caches the state so `gl.polygonOffset()` is only
788
+ * called when necessary.
789
+ *
790
+ * @param {Boolean} polygonOffset - Whether polygon offset is enabled or not.
791
+ * @param {Number} factor - The scale factor for the variable depth offset for each polygon.
792
+ * @param {Number} units - The multiplier by which an implementation-specific value is multiplied with to create a constant depth offset.
793
+ */
546
794
  setPolygonOffset( polygonOffset, factor, units ) {
547
795
 
548
796
  const { gl } = this;
@@ -568,6 +816,15 @@ class WebGLState {
568
816
 
569
817
  }
570
818
 
819
+ /**
820
+ * Defines the usage of the given WebGL program.
821
+ *
822
+ * This method caches the state so `gl.useProgram()` is only
823
+ * called when necessary.
824
+ *
825
+ * @param {WebGLProgram} program - The WebGL program to use.
826
+ * @return {Boolean} Whether a program change has been executed or not.
827
+ */
571
828
  useProgram( program ) {
572
829
 
573
830
  if ( this.currentProgram !== program ) {
@@ -587,6 +844,16 @@ class WebGLState {
587
844
  // framebuffer
588
845
 
589
846
 
847
+ /**
848
+ * Binds the given framebuffer.
849
+ *
850
+ * This method caches the state so `gl.bindFramebuffer()` is only
851
+ * called when necessary.
852
+ *
853
+ * @param {Number} target - The binding point (target).
854
+ * @param {WebGLFramebuffer} framebuffer - The WebGL framebuffer to bind.
855
+ * @return {Boolean} Whether a bind has been executed or not.
856
+ */
590
857
  bindFramebuffer( target, framebuffer ) {
591
858
 
592
859
  const { gl, currentBoundFramebuffers } = this;
@@ -619,6 +886,16 @@ class WebGLState {
619
886
 
620
887
  }
621
888
 
889
+ /**
890
+ * Defines draw buffers to which fragment colors are written into.
891
+ * Configures the MRT setup of custom framebuffers.
892
+ *
893
+ * This method caches the state so `gl.drawBuffers()` is only
894
+ * called when necessary.
895
+ *
896
+ * @param {RenderContext} renderContext - The render context.
897
+ * @param {WebGLFramebuffer} framebuffer - The WebGL framebuffer.
898
+ */
622
899
  drawBuffers( renderContext, framebuffer ) {
623
900
 
624
901
  const { gl } = this;
@@ -679,6 +956,14 @@ class WebGLState {
679
956
 
680
957
  // texture
681
958
 
959
+ /**
960
+ * Makes the given texture unit active.
961
+ *
962
+ * This method caches the state so `gl.activeTexture()` is only
963
+ * called when necessary.
964
+ *
965
+ * @param {Number} webglSlot - The texture unit to make active.
966
+ */
682
967
  activeTexture( webglSlot ) {
683
968
 
684
969
  const { gl, currentTextureSlot, maxTextures } = this;
@@ -694,6 +979,16 @@ class WebGLState {
694
979
 
695
980
  }
696
981
 
982
+ /**
983
+ * Binds the given WebGL texture to a target.
984
+ *
985
+ * This method caches the state so `gl.bindTexture()` is only
986
+ * called when necessary.
987
+ *
988
+ * @param {Number} webglType - The binding point (target).
989
+ * @param {WebGLTexture} webglTexture - The WebGL texture to bind.
990
+ * @param {Number} webglSlot - The texture.
991
+ */
697
992
  bindTexture( webglType, webglTexture, webglSlot ) {
698
993
 
699
994
  const { gl, currentTextureSlot, currentBoundTextures, maxTextures } = this;
@@ -739,6 +1034,17 @@ class WebGLState {
739
1034
 
740
1035
  }
741
1036
 
1037
+ /**
1038
+ * Binds a given WebGL buffer to a given binding point (target) at a given index.
1039
+ *
1040
+ * This method caches the state so `gl.bindBufferBase()` is only
1041
+ * called when necessary.
1042
+ *
1043
+ * @param {Number} target - The target for the bind operation.
1044
+ * @param {Number} index - The index of the target.
1045
+ * @param {WebGLBuffer} buffer - The WebGL buffer.
1046
+ * @return {Boolean} Whether a bind has been executed or not.
1047
+ */
742
1048
  bindBufferBase( target, index, buffer ) {
743
1049
 
744
1050
  const { gl } = this;
@@ -759,6 +1065,12 @@ class WebGLState {
759
1065
  }
760
1066
 
761
1067
 
1068
+ /**
1069
+ * Unbinds the current bound texture.
1070
+ *
1071
+ * This method caches the state so `gl.bindTexture()` is only
1072
+ * called when necessary.
1073
+ */
762
1074
  unbindTexture() {
763
1075
 
764
1076
  const { gl, currentTextureSlot, currentBoundTextures } = this;