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
@@ -9,7 +9,6 @@ import { NoColorSpace, ByteType, ShortType, RGBAIntegerFormat, RGBIntegerFormat,
9
9
  import { DataTexture } from '../../../textures/DataTexture.js';
10
10
 
11
11
  const glslMethods = {
12
- atan2: 'atan',
13
12
  textureDimensions: 'textureSize',
14
13
  equals: 'equal'
15
14
  };
@@ -46,39 +45,109 @@ precision highp isampler2DArray;
46
45
  precision lowp sampler2DShadow;
47
46
  `;
48
47
 
48
+ /**
49
+ * A node builder targeting GLSL.
50
+ *
51
+ * This module generates GLSL shader code from node materials and also
52
+ * generates the respective bindings and vertex buffer definitions. These
53
+ * data are later used by the renderer to create render and compute pipelines
54
+ * for render objects.
55
+ *
56
+ * @augments NodeBuilder
57
+ */
49
58
  class GLSLNodeBuilder extends NodeBuilder {
50
59
 
60
+ /**
61
+ * Constructs a new GLSL node builder renderer.
62
+ *
63
+ * @param {Object3D} object - The 3D object.
64
+ * @param {Renderer} renderer - The renderer.
65
+ */
51
66
  constructor( object, renderer ) {
52
67
 
53
68
  super( object, renderer, new GLSLNodeParser() );
54
69
 
70
+ /**
71
+ * A dictionary holds for each shader stage ('vertex', 'fragment', 'compute')
72
+ * another dictionary which manages UBOs per group ('render','frame','object').
73
+ *
74
+ * @type {Object<String,Object<String,NodeUniformsGroup>>}
75
+ */
55
76
  this.uniformGroups = {};
77
+
78
+ /**
79
+ * An array that holds objects defining the varying and attribute data in
80
+ * context of Transform Feedback.
81
+ *
82
+ * @type {Object<String,Map<String,Object>>}
83
+ */
56
84
  this.transforms = [];
85
+
86
+ /**
87
+ * A dictionary that holds for each shader stage a Map of used extensions.
88
+ *
89
+ * @type {Object<String,Map<String,Object>>}
90
+ */
57
91
  this.extensions = {};
92
+
93
+ /**
94
+ * A dictionary that holds for each shader stage an Array of used builtins.
95
+ *
96
+ * @type {Object<String,Array<String>>}
97
+ */
58
98
  this.builtins = { vertex: [], fragment: [], compute: [] };
59
99
 
100
+ /**
101
+ * Whether comparison in shader code are generated with methods or not.
102
+ *
103
+ * @type {Boolean}
104
+ * @default true
105
+ */
60
106
  this.useComparisonMethod = true;
61
107
 
62
108
  }
63
109
 
110
+ /**
111
+ * Checks if the given texture requires a manual conversion to the working color space.
112
+ *
113
+ * @param {Texture} texture - The texture to check.
114
+ * @return {Boolean} Whether the given texture requires a conversion to working color space or not.
115
+ */
64
116
  needsToWorkingColorSpace( texture ) {
65
117
 
66
118
  return texture.isVideoTexture === true && texture.colorSpace !== NoColorSpace;
67
119
 
68
120
  }
69
121
 
122
+ /**
123
+ * Returns the native shader method name for a given generic name.
124
+ *
125
+ * @param {String} method - The method name to resolve.
126
+ * @return {String} The resolved GLSL method name.
127
+ */
70
128
  getMethod( method ) {
71
129
 
72
130
  return glslMethods[ method ] || method;
73
131
 
74
132
  }
75
133
 
134
+ /**
135
+ * Returns the output struct name. Not relevant for GLSL.
136
+ *
137
+ * @return {String}
138
+ */
76
139
  getOutputStructName() {
77
140
 
78
141
  return '';
79
142
 
80
143
  }
81
144
 
145
+ /**
146
+ * Builds the given shader node.
147
+ *
148
+ * @param {ShaderNodeInternal} shaderNode - The shader node.
149
+ * @return {String} The GLSL function code.
150
+ */
82
151
  buildFunctionCode( shaderNode ) {
83
152
 
84
153
  const layout = shaderNode.layout;
@@ -109,6 +178,12 @@ ${ flowData.code }
109
178
 
110
179
  }
111
180
 
181
+ /**
182
+ * Setups the Pixel Buffer Object (PBO) for the given storage
183
+ * buffer node.
184
+ *
185
+ * @param {StorageBufferNode} storageBufferNode - The storage buffer node.
186
+ */
112
187
  setupPBO( storageBufferNode ) {
113
188
 
114
189
  const attribute = storageBufferNode.value;
@@ -177,6 +252,13 @@ ${ flowData.code }
177
252
 
178
253
  }
179
254
 
255
+ /**
256
+ * Returns a GLSL snippet that represents the property name of the given node.
257
+ *
258
+ * @param {Node} node - The node.
259
+ * @param {String} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.
260
+ * @return {String} The property name.
261
+ */
180
262
  getPropertyName( node, shaderStage = this.shaderStage ) {
181
263
 
182
264
  if ( node.isNodeUniform && node.node.isTextureNode !== true && node.node.isBufferNode !== true ) {
@@ -189,6 +271,13 @@ ${ flowData.code }
189
271
 
190
272
  }
191
273
 
274
+ /**
275
+ * Setups the Pixel Buffer Object (PBO) for the given storage
276
+ * buffer node.
277
+ *
278
+ * @param {StorageArrayElementNode} storageArrayElementNode - The storage array element node.
279
+ * @return {String} The property name.
280
+ */
192
281
  generatePBO( storageArrayElementNode ) {
193
282
 
194
283
  const { node, indexNode } = storageArrayElementNode;
@@ -271,6 +360,16 @@ ${ flowData.code }
271
360
 
272
361
  }
273
362
 
363
+ /**
364
+ * Generates the GLSL snippet that reads a single texel from a texture without sampling or filtering.
365
+ *
366
+ * @param {Texture} texture - The texture.
367
+ * @param {String} textureProperty - The name of the texture uniform in the shader.
368
+ * @param {String} uvIndexSnippet - A GLSL snippet that represents texture coordinates used for sampling.
369
+ * @param {String?} depthSnippet - A GLSL snippet that represents the 0-based texture array index to sample.
370
+ * @param {String} [levelSnippet='0u'] - A GLSL snippet that represents the mip level, with level 0 containing a full size version of the texture.
371
+ * @return {String} The GLSL snippet.
372
+ */
274
373
  generateTextureLoad( texture, textureProperty, uvIndexSnippet, depthSnippet, levelSnippet = '0' ) {
275
374
 
276
375
  if ( depthSnippet ) {
@@ -285,6 +384,15 @@ ${ flowData.code }
285
384
 
286
385
  }
287
386
 
387
+ /**
388
+ * Generates the GLSL snippet for sampling/loading the given texture.
389
+ *
390
+ * @param {Texture} texture - The texture.
391
+ * @param {String} textureProperty - The name of the texture uniform in the shader.
392
+ * @param {String} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
393
+ * @param {String?} depthSnippet - A GLSL snippet that represents the 0-based texture array index to sample.
394
+ * @return {String} The GLSL snippet.
395
+ */
288
396
  generateTexture( texture, textureProperty, uvSnippet, depthSnippet ) {
289
397
 
290
398
  if ( texture.isDepthTexture ) {
@@ -301,24 +409,63 @@ ${ flowData.code }
301
409
 
302
410
  }
303
411
 
412
+ /**
413
+ * Generates the GLSL snippet when sampling textures with explicit mip level.
414
+ *
415
+ * @param {Texture} texture - The texture.
416
+ * @param {String} textureProperty - The name of the texture uniform in the shader.
417
+ * @param {String} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
418
+ * @param {String} levelSnippet - A GLSL snippet that represents the mip level, with level 0 containing a full size version of the texture.
419
+ * @return {String} The GLSL snippet.
420
+ */
304
421
  generateTextureLevel( texture, textureProperty, uvSnippet, levelSnippet ) {
305
422
 
306
423
  return `textureLod( ${ textureProperty }, ${ uvSnippet }, ${ levelSnippet } )`;
307
424
 
308
425
  }
309
426
 
427
+ /**
428
+ * Generates the GLSL snippet when sampling textures with a bias to the mip level.
429
+ *
430
+ * @param {Texture} texture - The texture.
431
+ * @param {String} textureProperty - The name of the texture uniform in the shader.
432
+ * @param {String} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
433
+ * @param {String} biasSnippet - A GLSL snippet that represents the bias to apply to the mip level before sampling.
434
+ * @return {String} The GLSL snippet.
435
+ */
310
436
  generateTextureBias( texture, textureProperty, uvSnippet, biasSnippet ) {
311
437
 
312
438
  return `texture( ${ textureProperty }, ${ uvSnippet }, ${ biasSnippet } )`;
313
439
 
314
440
  }
315
441
 
442
+ /**
443
+ * Generates the GLSL snippet for sampling/loading the given texture using explicit gradients.
444
+ *
445
+ * @param {Texture} texture - The texture.
446
+ * @param {String} textureProperty - The name of the texture uniform in the shader.
447
+ * @param {String} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
448
+ * @param {Array<String>} gradSnippet - An array holding both gradient GLSL snippets.
449
+ * @return {String} The GLSL snippet.
450
+ */
316
451
  generateTextureGrad( texture, textureProperty, uvSnippet, gradSnippet ) {
317
452
 
318
453
  return `textureGrad( ${ textureProperty }, ${ uvSnippet }, ${ gradSnippet[ 0 ] }, ${ gradSnippet[ 1 ] } )`;
319
454
 
320
455
  }
321
456
 
457
+ /**
458
+ * Generates the GLSL snippet for sampling a depth texture and comparing the sampled depth values
459
+ * against a reference value.
460
+ *
461
+ * @param {Texture} texture - The texture.
462
+ * @param {String} textureProperty - The name of the texture uniform in the shader.
463
+ * @param {String} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
464
+ * @param {String} compareSnippet - A GLSL snippet that represents the reference value.
465
+ * @param {String?} depthSnippet - A GLSL snippet that represents 0-based texture array index to sample.
466
+ * @param {String} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.
467
+ * @return {String} The GLSL snippet.
468
+ */
322
469
  generateTextureCompare( texture, textureProperty, uvSnippet, compareSnippet, depthSnippet, shaderStage = this.shaderStage ) {
323
470
 
324
471
  if ( shaderStage === 'fragment' ) {
@@ -333,6 +480,12 @@ ${ flowData.code }
333
480
 
334
481
  }
335
482
 
483
+ /**
484
+ * Returns the variables of the given shader stage as a GLSL string.
485
+ *
486
+ * @param {String} shaderStage - The shader stage.
487
+ * @return {String} The GLSL snippet that defines the variables.
488
+ */
336
489
  getVars( shaderStage ) {
337
490
 
338
491
  const snippets = [];
@@ -343,7 +496,7 @@ ${ flowData.code }
343
496
 
344
497
  for ( const variable of vars ) {
345
498
 
346
- snippets.push( `${ this.getVar( variable.type, variable.name ) };` );
499
+ snippets.push( `${ this.getVar( variable.type, variable.name, variable.count ) };` );
347
500
 
348
501
  }
349
502
 
@@ -353,6 +506,12 @@ ${ flowData.code }
353
506
 
354
507
  }
355
508
 
509
+ /**
510
+ * Returns the uniforms of the given shader stage as a GLSL string.
511
+ *
512
+ * @param {String} shaderStage - The shader stage.
513
+ * @return {String} The GLSL snippet that defines the uniforms.
514
+ */
356
515
  getUniforms( shaderStage ) {
357
516
 
358
517
  const uniforms = this.uniforms[ shaderStage ];
@@ -470,6 +629,12 @@ ${ flowData.code }
470
629
 
471
630
  }
472
631
 
632
+ /**
633
+ * Returns the type for a given buffer attribute.
634
+ *
635
+ * @param {BufferAttribute} attribute - The buffer attribute.
636
+ * @return {String} The type.
637
+ */
473
638
  getTypeFromAttribute( attribute ) {
474
639
 
475
640
  let nodeType = super.getTypeFromAttribute( attribute );
@@ -494,6 +659,12 @@ ${ flowData.code }
494
659
 
495
660
  }
496
661
 
662
+ /**
663
+ * Returns the shader attributes of the given shader stage as a GLSL string.
664
+ *
665
+ * @param {String} shaderStage - The shader stage.
666
+ * @return {String} The GLSL snippet that defines the shader attributes.
667
+ */
497
668
  getAttributes( shaderStage ) {
498
669
 
499
670
  let snippet = '';
@@ -516,15 +687,19 @@ ${ flowData.code }
516
687
 
517
688
  }
518
689
 
690
+ /**
691
+ * Returns the members of the given struct type node as a GLSL string.
692
+ *
693
+ * @param {StructTypeNode} struct - The struct type node.
694
+ * @return {String} The GLSL snippet that defines the struct members.
695
+ */
519
696
  getStructMembers( struct ) {
520
697
 
521
698
  const snippets = [];
522
- const members = struct.getMemberTypes();
523
699
 
524
- for ( let i = 0; i < members.length; i ++ ) {
700
+ for ( const member of struct.members ) {
525
701
 
526
- const member = members[ i ];
527
- snippets.push( `layout( location = ${i} ) out ${ member} m${i};` );
702
+ snippets.push( `\t${ member.type } ${ member.name };` );
528
703
 
529
704
  }
530
705
 
@@ -532,33 +707,57 @@ ${ flowData.code }
532
707
 
533
708
  }
534
709
 
710
+ /**
711
+ * Returns the structs of the given shader stage as a GLSL string.
712
+ *
713
+ * @param {String} shaderStage - The shader stage.
714
+ * @return {String} The GLSL snippet that defines the structs.
715
+ */
535
716
  getStructs( shaderStage ) {
536
717
 
537
718
  const snippets = [];
538
719
  const structs = this.structs[ shaderStage ];
539
720
 
540
- if ( structs.length === 0 ) {
721
+ const outputSnippet = [];
541
722
 
542
- return 'layout( location = 0 ) out vec4 fragColor;\n';
723
+ for ( const struct of structs ) {
543
724
 
544
- }
725
+ if ( struct.output ) {
726
+
727
+ for ( const member of struct.members ) {
728
+
729
+ outputSnippet.push( `layout( location = ${ member.index } ) out ${ member.type } ${ member.name };` );
730
+
731
+ }
732
+
733
+ } else {
734
+
735
+ let snippet = 'struct ' + struct.name + ' {\n';
736
+ snippet += this.getStructMembers( struct );
737
+ snippet += '\n};\n';
738
+
739
+ snippets.push( snippet );
545
740
 
546
- for ( let index = 0, length = structs.length; index < length; index ++ ) {
741
+ }
547
742
 
548
- const struct = structs[ index ];
743
+ }
549
744
 
550
- let snippet = '\n';
551
- snippet += this.getStructMembers( struct );
552
- snippet += '\n';
745
+ if ( outputSnippet.length === 0 ) {
553
746
 
554
- snippets.push( snippet );
747
+ outputSnippet.push( 'layout( location = 0 ) out vec4 fragColor;' );
555
748
 
556
749
  }
557
750
 
558
- return snippets.join( '\n\n' );
751
+ return '\n' + outputSnippet.join( '\n' ) + '\n\n' + snippets.join( '\n' );
559
752
 
560
753
  }
561
754
 
755
+ /**
756
+ * Returns the varyings of the given shader stage as a GLSL string.
757
+ *
758
+ * @param {String} shaderStage - The shader stage.
759
+ * @return {String} The GLSL snippet that defines the varyings.
760
+ */
562
761
  getVaryings( shaderStage ) {
563
762
 
564
763
  let snippet = '';
@@ -570,10 +769,20 @@ ${ flowData.code }
570
769
  for ( const varying of varyings ) {
571
770
 
572
771
  if ( shaderStage === 'compute' ) varying.needsInterpolation = true;
772
+
573
773
  const type = this.getType( varying.type );
574
- const flat = type.includes( 'int' ) || type.includes( 'uv' ) || type.includes( 'iv' ) ? 'flat ' : '';
575
774
 
576
- snippet += `${flat}${varying.needsInterpolation ? 'out' : '/*out*/'} ${type} ${varying.name};\n`;
775
+ if ( varying.needsInterpolation ) {
776
+
777
+ const flat = type.includes( 'int' ) || type.includes( 'uv' ) || type.includes( 'iv' ) ? 'flat ' : '';
778
+
779
+ snippet += `${flat} out ${type} ${varying.name};\n`;
780
+
781
+ } else {
782
+
783
+ snippet += `${type} ${varying.name};\n`; // generate variable (no varying required)
784
+
785
+ }
577
786
 
578
787
  }
579
788
 
@@ -604,18 +813,33 @@ ${ flowData.code }
604
813
 
605
814
  }
606
815
 
816
+ /**
817
+ * Returns the vertex index builtin.
818
+ *
819
+ * @return {String} The vertex index.
820
+ */
607
821
  getVertexIndex() {
608
822
 
609
823
  return 'uint( gl_VertexID )';
610
824
 
611
825
  }
612
826
 
827
+ /**
828
+ * Returns the instance index builtin.
829
+ *
830
+ * @return {String} The instance index.
831
+ */
613
832
  getInstanceIndex() {
614
833
 
615
834
  return 'uint( gl_InstanceID )';
616
835
 
617
836
  }
618
837
 
838
+ /**
839
+ * Returns the invocation local index builtin.
840
+ *
841
+ * @return {String} The invocation local index.
842
+ */
619
843
  getInvocationLocalIndex() {
620
844
 
621
845
  const workgroupSize = this.object.workgroupSize;
@@ -626,6 +850,11 @@ ${ flowData.code }
626
850
 
627
851
  }
628
852
 
853
+ /**
854
+ * Returns the draw index builtin.
855
+ *
856
+ * @return {String?} The drawIndex shader string. Returns `null` if `WEBGL_multi_draw` isn't supported by the device.
857
+ */
629
858
  getDrawIndex() {
630
859
 
631
860
  const extensions = this.renderer.backend.extensions;
@@ -640,24 +869,46 @@ ${ flowData.code }
640
869
 
641
870
  }
642
871
 
872
+ /**
873
+ * Returns the front facing builtin.
874
+ *
875
+ * @return {String} The front facing builtin.
876
+ */
643
877
  getFrontFacing() {
644
878
 
645
879
  return 'gl_FrontFacing';
646
880
 
647
881
  }
648
882
 
883
+ /**
884
+ * Returns the frag coord builtin.
885
+ *
886
+ * @return {String} The frag coord builtin.
887
+ */
649
888
  getFragCoord() {
650
889
 
651
890
  return 'gl_FragCoord.xy';
652
891
 
653
892
  }
654
893
 
894
+ /**
895
+ * Returns the frag depth builtin.
896
+ *
897
+ * @return {String} The frag depth builtin.
898
+ */
655
899
  getFragDepth() {
656
900
 
657
901
  return 'gl_FragDepth';
658
902
 
659
903
  }
660
904
 
905
+ /**
906
+ * Enables the given extension.
907
+ *
908
+ * @param {String} name - The extension name.
909
+ * @param {String} behavior - The extension behavior.
910
+ * @param {String} [shaderStage=this.shaderStage] - The shader stage.
911
+ */
661
912
  enableExtension( name, behavior, shaderStage = this.shaderStage ) {
662
913
 
663
914
  const map = this.extensions[ shaderStage ] || ( this.extensions[ shaderStage ] = new Map() );
@@ -673,6 +924,12 @@ ${ flowData.code }
673
924
 
674
925
  }
675
926
 
927
+ /**
928
+ * Returns the enabled extensions of the given shader stage as a GLSL string.
929
+ *
930
+ * @param {String} shaderStage - The shader stage.
931
+ * @return {String} The GLSL snippet that defines the enabled extensions.
932
+ */
676
933
  getExtensions( shaderStage ) {
677
934
 
678
935
  const snippets = [];
@@ -706,12 +963,23 @@ ${ flowData.code }
706
963
 
707
964
  }
708
965
 
966
+ /**
967
+ * Returns the clip distances builtin.
968
+ *
969
+ * @return {String} The clip distances builtin.
970
+ */
709
971
  getClipDistance() {
710
972
 
711
973
  return 'gl_ClipDistance';
712
974
 
713
975
  }
714
976
 
977
+ /**
978
+ * Whether the requested feature is available or not.
979
+ *
980
+ * @param {String} name - The requested feature.
981
+ * @return {Boolean} Whether the requested feature is supported or not.
982
+ */
715
983
  isAvailable( name ) {
716
984
 
717
985
  let result = supports[ name ];
@@ -755,12 +1023,22 @@ ${ flowData.code }
755
1023
 
756
1024
  }
757
1025
 
1026
+ /**
1027
+ * Whether to flip texture data along its vertical axis or not.
1028
+ *
1029
+ * @return {Boolean} Returns always `true` in context of GLSL.
1030
+ */
758
1031
  isFlipY() {
759
1032
 
760
1033
  return true;
761
1034
 
762
1035
  }
763
1036
 
1037
+ /**
1038
+ * Enables hardware clipping.
1039
+ *
1040
+ * @param {String} planeCount - The clipping plane count.
1041
+ */
764
1042
  enableHardwareClipping( planeCount ) {
765
1043
 
766
1044
  this.enableExtension( 'GL_ANGLE_clip_cull_distance', 'require' );
@@ -769,12 +1047,24 @@ ${ flowData.code }
769
1047
 
770
1048
  }
771
1049
 
1050
+ /**
1051
+ * Registers a transform in context of Transform Feedback.
1052
+ *
1053
+ * @param {String} varyingName - The varying name.
1054
+ * @param {AttributeNode} attributeNode - The attribute node.
1055
+ */
772
1056
  registerTransform( varyingName, attributeNode ) {
773
1057
 
774
1058
  this.transforms.push( { varyingName, attributeNode } );
775
1059
 
776
1060
  }
777
1061
 
1062
+ /**
1063
+ * Returns the transforms of the given shader stage as a GLSL string.
1064
+ *
1065
+ * @param {String} shaderStage - The shader stage.
1066
+ * @return {String} The GLSL snippet that defines the transforms.
1067
+ */
778
1068
  getTransforms( /* shaderStage */ ) {
779
1069
 
780
1070
  const transforms = this.transforms;
@@ -795,6 +1085,14 @@ ${ flowData.code }
795
1085
 
796
1086
  }
797
1087
 
1088
+ /**
1089
+ * Returns a GLSL struct based on the given name and variables.
1090
+ *
1091
+ * @private
1092
+ * @param {String} name - The struct name.
1093
+ * @param {String} vars - The struct variables.
1094
+ * @return {String} The GLSL snippet representing a struct.
1095
+ */
798
1096
  _getGLSLUniformStruct( name, vars ) {
799
1097
 
800
1098
  return `
@@ -804,6 +1102,13 @@ ${vars}
804
1102
 
805
1103
  }
806
1104
 
1105
+ /**
1106
+ * Returns a GLSL vertex shader based on the given shader data.
1107
+ *
1108
+ * @private
1109
+ * @param {Object} shaderData - The shader data.
1110
+ * @return {String} The vertex shader.
1111
+ */
807
1112
  _getGLSLVertexCode( shaderData ) {
808
1113
 
809
1114
  return `#version 300 es
@@ -846,6 +1151,13 @@ void main() {
846
1151
 
847
1152
  }
848
1153
 
1154
+ /**
1155
+ * Returns a GLSL fragment shader based on the given shader data.
1156
+ *
1157
+ * @private
1158
+ * @param {Object} shaderData - The shader data.
1159
+ * @return {String} The vertex shader.
1160
+ */
849
1161
  _getGLSLFragmentCode( shaderData ) {
850
1162
 
851
1163
  return `#version 300 es
@@ -864,6 +1176,7 @@ ${shaderData.varyings}
864
1176
  // codes
865
1177
  ${shaderData.codes}
866
1178
 
1179
+ // structs
867
1180
  ${shaderData.structs}
868
1181
 
869
1182
  void main() {
@@ -879,6 +1192,9 @@ void main() {
879
1192
 
880
1193
  }
881
1194
 
1195
+ /**
1196
+ * Controls the code build of the shader stages.
1197
+ */
882
1198
  buildCode() {
883
1199
 
884
1200
  const shadersData = this.material !== null ? { fragment: {}, vertex: {} } : { compute: {} };
@@ -959,6 +1275,19 @@ void main() {
959
1275
 
960
1276
  }
961
1277
 
1278
+ /**
1279
+ * This method is one of the more important ones since it's responsible
1280
+ * for generating a matching binding instance for the given uniform node.
1281
+ *
1282
+ * These bindings are later used in the renderer to create bind groups
1283
+ * and layouts.
1284
+ *
1285
+ * @param {UniformNode} node - The uniform node.
1286
+ * @param {String} type - The node data type.
1287
+ * @param {String} shaderStage - The shader stage.
1288
+ * @param {String?} [name=null] - An optional uniform name.
1289
+ * @return {NodeUniform} The node uniform object.
1290
+ */
962
1291
  getUniformFromNode( node, type, shaderStage, name = null ) {
963
1292
 
964
1293
  const uniformNode = super.getUniformFromNode( node, type, shaderStage, name );