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
@@ -3,27 +3,93 @@ import { vec4, renderOutput } from '../../nodes/TSL.js';
3
3
  import { LinearSRGBColorSpace, NoToneMapping } from '../../constants.js';
4
4
  import QuadMesh from '../../renderers/common/QuadMesh.js';
5
5
 
6
- const _material = /*@__PURE__*/ new NodeMaterial();
7
- const _quadMesh = /*@__PURE__*/ new QuadMesh( _material );
8
-
6
+ /**
7
+ * This module is responsible to manage the post processing setups in apps.
8
+ * You usually create a single instance of this class and use it to define
9
+ * the output of your post processing effect chain.
10
+ * ```js
11
+ * const postProcessing = new PostProcessing( renderer );
12
+ *
13
+ * const scenePass = pass( scene, camera );
14
+ *
15
+ * postProcessing.outputNode = scenePass;
16
+ * ```
17
+ */
9
18
  class PostProcessing {
10
19
 
20
+ /**
21
+ * Constructs a new post processing management module.
22
+ *
23
+ * @param {Renderer} renderer - A reference to the renderer.
24
+ * @param {Node<vec4>} outputNode - An optional output node.
25
+ */
11
26
  constructor( renderer, outputNode = vec4( 0, 0, 1, 1 ) ) {
12
27
 
28
+ /**
29
+ * A reference to the renderer.
30
+ *
31
+ * @type {Renderer}
32
+ */
13
33
  this.renderer = renderer;
34
+
35
+ /**
36
+ * A node which defines the final output of the post
37
+ * processing. This is usually the last node in a chain
38
+ * of effect nodes.
39
+ *
40
+ * @type {Node<vec4>}
41
+ */
14
42
  this.outputNode = outputNode;
15
43
 
44
+ /**
45
+ * Whether the default output tone mapping and color
46
+ * space transformation should be enabled or not.
47
+ *
48
+ * It is enabled by default by it must be disabled when
49
+ * effects must be executed after tone mapping and color
50
+ * space conversion. A typical example is FXAA which
51
+ * requires sRGB input.
52
+ *
53
+ * When set to `false`, the app must control the output
54
+ * transformation with `RenderOutputNode`.
55
+ *
56
+ * ```js
57
+ * const outputPass = renderOutput( scenePass );
58
+ * ```
59
+ *
60
+ * @type {Boolean}
61
+ */
16
62
  this.outputColorTransform = true;
17
63
 
64
+ /**
65
+ * Must be set to `true` when the output node changes.
66
+ *
67
+ * @type {Node<vec4>}
68
+ */
18
69
  this.needsUpdate = true;
19
70
 
20
- _material.name = 'PostProcessing';
71
+ const material = new NodeMaterial();
72
+ material.name = 'PostProcessing';
73
+
74
+ /**
75
+ * The full screen quad that is used to render
76
+ * the effects.
77
+ *
78
+ * @private
79
+ * @type {QuadMesh}
80
+ */
81
+ this._quadMesh = new QuadMesh( material );
21
82
 
22
83
  }
23
84
 
85
+ /**
86
+ * When `PostProcessing` is used to apply post processing effects,
87
+ * the application must use this version of `render()` inside
88
+ * its animation loop (not the one from the renderer).
89
+ */
24
90
  render() {
25
91
 
26
- this.update();
92
+ this._update();
27
93
 
28
94
  const renderer = this.renderer;
29
95
 
@@ -35,7 +101,7 @@ class PostProcessing {
35
101
 
36
102
  //
37
103
 
38
- _quadMesh.render( renderer );
104
+ this._quadMesh.render( renderer );
39
105
 
40
106
  //
41
107
 
@@ -44,7 +110,21 @@ class PostProcessing {
44
110
 
45
111
  }
46
112
 
47
- update() {
113
+ /**
114
+ * Frees internal resources.
115
+ */
116
+ dispose() {
117
+
118
+ this._quadMesh.material.dispose();
119
+
120
+ }
121
+
122
+ /**
123
+ * Updates the state of the module.
124
+ *
125
+ * @private
126
+ */
127
+ _update() {
48
128
 
49
129
  if ( this.needsUpdate === true ) {
50
130
 
@@ -53,8 +133,8 @@ class PostProcessing {
53
133
  const toneMapping = renderer.toneMapping;
54
134
  const outputColorSpace = renderer.outputColorSpace;
55
135
 
56
- _quadMesh.material.fragmentNode = this.outputColorTransform === true ? renderOutput( this.outputNode, toneMapping, outputColorSpace ) : this.outputNode.context( { toneMapping, outputColorSpace } );
57
- _quadMesh.material.needsUpdate = true;
136
+ this._quadMesh.material.fragmentNode = this.outputColorTransform === true ? renderOutput( this.outputNode, toneMapping, outputColorSpace ) : this.outputNode.context( { toneMapping, outputColorSpace } );
137
+ this._quadMesh.material.needsUpdate = true;
58
138
 
59
139
  this.needsUpdate = false;
60
140
 
@@ -62,9 +142,17 @@ class PostProcessing {
62
142
 
63
143
  }
64
144
 
145
+ /**
146
+ * When `PostProcessing` is used to apply post processing effects,
147
+ * the application must use this version of `renderAsync()` inside
148
+ * its animation loop (not the one from the renderer).
149
+ *
150
+ * @async
151
+ * @return {Promise} A Promise that resolves when the render has been finished.
152
+ */
65
153
  async renderAsync() {
66
154
 
67
- this.update();
155
+ this._update();
68
156
 
69
157
  const renderer = this.renderer;
70
158
 
@@ -76,7 +164,7 @@ class PostProcessing {
76
164
 
77
165
  //
78
166
 
79
- await _quadMesh.renderAsync( renderer );
167
+ await this._quadMesh.renderAsync( renderer );
80
168
 
81
169
  //
82
170
 
@@ -1,16 +1,74 @@
1
1
  let _id = 0;
2
2
 
3
+ /**
4
+ * Class for representing programmable stages which are vertex,
5
+ * fragment or compute shaders. Unlike fixed-function states (like blending),
6
+ * they represent the programmable part of a pipeline.
7
+ *
8
+ * @private
9
+ */
3
10
  class ProgrammableStage {
4
11
 
5
- constructor( code, type, transforms = null, attributes = null ) {
12
+ /**
13
+ * Constructs a new programmable stage.
14
+ *
15
+ * @param {String} code - The shader code.
16
+ * @param {('vertex'|'fragment'|'compute')} stage - The type of stage.
17
+ * @param {String} name - The name of the shader.
18
+ * @param {Array<Object>?} [transforms=null] - The transforms (only relevant for compute stages with WebGL 2 which uses Transform Feedback).
19
+ * @param {Array<Object>?} [attributes=null] - The attributes (only relevant for compute stages with WebGL 2 which uses Transform Feedback).
20
+ */
21
+ constructor( code, stage, name, transforms = null, attributes = null ) {
6
22
 
23
+ /**
24
+ * The id of the programmable stage.
25
+ *
26
+ * @type {Number}
27
+ */
7
28
  this.id = _id ++;
8
29
 
30
+ /**
31
+ * The shader code.
32
+ *
33
+ * @type {String}
34
+ */
9
35
  this.code = code;
10
- this.stage = type;
36
+
37
+ /**
38
+ * The type of stage.
39
+ *
40
+ * @type {String}
41
+ */
42
+ this.stage = stage;
43
+
44
+ /**
45
+ * The name of the stage.
46
+ * This is used for debugging purposes.
47
+ *
48
+ * @type {String}
49
+ */
50
+ this.name = name;
51
+
52
+ /**
53
+ * The transforms (only relevant for compute stages with WebGL 2 which uses Transform Feedback).
54
+ *
55
+ * @type {Array<Object>?}
56
+ */
11
57
  this.transforms = transforms;
58
+
59
+ /**
60
+ * The attributes (only relevant for compute stages with WebGL 2 which uses Transform Feedback).
61
+ *
62
+ * @type {Array<Object>?}
63
+ */
12
64
  this.attributes = attributes;
13
65
 
66
+ /**
67
+ * How often the programmable stage is currently in use.
68
+ *
69
+ * @type {Number}
70
+ * @default 0
71
+ */
14
72
  this.usedTimes = 0;
15
73
 
16
74
  }
@@ -3,14 +3,23 @@ import { Float32BufferAttribute } from '../../core/BufferAttribute.js';
3
3
  import { Mesh } from '../../objects/Mesh.js';
4
4
  import { OrthographicCamera } from '../../cameras/OrthographicCamera.js';
5
5
 
6
- // Helper for passes that need to fill the viewport with a single quad.
7
-
8
6
  const _camera = /*@__PURE__*/ new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );
9
7
 
10
- // https://github.com/mrdoob/three.js/pull/21358
11
-
8
+ /**
9
+ * The purpose of this special geometry is to fill the entire viewport with a single triangle.
10
+ *
11
+ * Reference: {@link https://github.com/mrdoob/three.js/pull/21358}
12
+ *
13
+ * @private
14
+ * @augments BufferGeometry
15
+ */
12
16
  class QuadGeometry extends BufferGeometry {
13
17
 
18
+ /**
19
+ * Constructs a new quad geometry.
20
+ *
21
+ * @param {Boolean} [flipY=false] - Whether the uv coordinates should be flipped along the vertical axis or not.
22
+ */
14
23
  constructor( flipY = false ) {
15
24
 
16
25
  super();
@@ -26,24 +35,64 @@ class QuadGeometry extends BufferGeometry {
26
35
 
27
36
  const _geometry = /*@__PURE__*/ new QuadGeometry();
28
37
 
38
+
39
+ /**
40
+ * This module is a helper for passes which need to render a full
41
+ * screen effect which is quite common in context of post processing.
42
+ *
43
+ * The intended usage is to reuse a single quad mesh for rendering
44
+ * subsequent passes by just reassigning the `material` reference.
45
+ *
46
+ * @augments Mesh
47
+ */
29
48
  class QuadMesh extends Mesh {
30
49
 
50
+ /**
51
+ * Constructs a new quad mesh.
52
+ *
53
+ * @param {Material?} [material=null] - The material to render the quad mesh with.
54
+ */
31
55
  constructor( material = null ) {
32
56
 
33
57
  super( _geometry, material );
34
58
 
59
+ /**
60
+ * The camera to render the quad mesh with.
61
+ *
62
+ * @type {OrthographicCamera}
63
+ * @readonly
64
+ */
35
65
  this.camera = _camera;
36
66
 
67
+ /**
68
+ * This flag can be used for type testing.
69
+ *
70
+ * @type {Boolean}
71
+ * @readonly
72
+ * @default true
73
+ */
37
74
  this.isQuadMesh = true;
38
75
 
39
76
  }
40
77
 
41
- renderAsync( renderer ) {
78
+ /**
79
+ * Async version of `render()`.
80
+ *
81
+ * @async
82
+ * @param {Renderer} renderer - The renderer.
83
+ * @return {Promise} A Promise that resolves when the render has been finished.
84
+ */
85
+ async renderAsync( renderer ) {
42
86
 
43
87
  return renderer.renderAsync( this, _camera );
44
88
 
45
89
  }
46
90
 
91
+ /**
92
+ * Renders the quad mesh
93
+ *
94
+ * @param {Renderer} renderer - The renderer.
95
+ */
47
96
  render( renderer ) {
48
97
 
49
98
  renderer.render( this, _camera );
@@ -1,18 +1,24 @@
1
+ /**
2
+ * This module is used to represent render bundles inside the renderer
3
+ * for further processing.
4
+ *
5
+ * @private
6
+ */
1
7
  class RenderBundle {
2
8
 
3
- constructor( scene, camera ) {
9
+ /**
10
+ * Constructs a new bundle group.
11
+ *
12
+ * @param {BundleGroup} bundleGroup - The bundle group.
13
+ * @param {Camera} camera - The camera the bundle group is rendered with.
14
+ */
15
+ constructor( bundleGroup, camera ) {
4
16
 
5
- this.scene = scene;
17
+ this.bundleGroup = bundleGroup;
6
18
  this.camera = camera;
7
19
 
8
20
  }
9
21
 
10
- clone() {
11
-
12
- return Object.assign( new this.constructor(), this );
13
-
14
- }
15
-
16
22
  }
17
23
 
18
24
  export default RenderBundle;
@@ -1,35 +1,64 @@
1
1
  import ChainMap from './ChainMap.js';
2
2
  import RenderBundle from './RenderBundle.js';
3
3
 
4
+ const _chainKeys = [];
5
+
6
+ /**
7
+ * This renderer module manages render bundles.
8
+ *
9
+ * @private
10
+ */
4
11
  class RenderBundles {
5
12
 
13
+ /**
14
+ * Constructs a new render bundle management component.
15
+ */
6
16
  constructor() {
7
17
 
8
- this.lists = new ChainMap();
18
+ /**
19
+ * A chain map for maintaining the render bundles.
20
+ *
21
+ * @type {ChainMap}
22
+ */
23
+ this.bundles = new ChainMap();
9
24
 
10
25
  }
11
26
 
12
- get( scene, camera ) {
27
+ /**
28
+ * Returns a render bundle for the given bundle group and camera.
29
+ *
30
+ * @param {BundleGroup} bundleGroup - The bundle group.
31
+ * @param {Camera} camera - The camera the bundle group is rendered with.
32
+ * @return {RenderBundle} The render bundle.
33
+ */
34
+ get( bundleGroup, camera ) {
35
+
36
+ const bundles = this.bundles;
13
37
 
14
- const lists = this.lists;
15
- const keys = [ scene, camera ];
38
+ _chainKeys[ 0 ] = bundleGroup;
39
+ _chainKeys[ 1 ] = camera;
16
40
 
17
- let list = lists.get( keys );
41
+ let bundle = bundles.get( _chainKeys );
18
42
 
19
- if ( list === undefined ) {
43
+ if ( bundle === undefined ) {
20
44
 
21
- list = new RenderBundle( scene, camera );
22
- lists.set( keys, list );
45
+ bundle = new RenderBundle( bundleGroup, camera );
46
+ bundles.set( _chainKeys, bundle );
23
47
 
24
48
  }
25
49
 
26
- return list;
50
+ _chainKeys.length = 0;
51
+
52
+ return bundle;
27
53
 
28
54
  }
29
55
 
56
+ /**
57
+ * Frees all internal resources.
58
+ */
30
59
  dispose() {
31
60
 
32
- this.lists = new ChainMap();
61
+ this.bundles = new ChainMap();
33
62
 
34
63
  }
35
64
 
@@ -1,44 +1,235 @@
1
1
  import { Vector4 } from '../../math/Vector4.js';
2
2
  import { hashArray } from '../../nodes/core/NodeUtils.js';
3
3
 
4
- let id = 0;
4
+ let _id = 0;
5
5
 
6
+ /**
7
+ * Any render or compute command is executed in a specific context that defines
8
+ * the state of the renderer and its backend. Typical examples for such context
9
+ * data are the current clear values or data from the active framebuffer. This
10
+ * module is used to represent these contexts as objects.
11
+ *
12
+ * @private
13
+ */
6
14
  class RenderContext {
7
15
 
16
+ /**
17
+ * Constructs a new render context.
18
+ */
8
19
  constructor() {
9
20
 
10
- this.id = id ++;
21
+ /**
22
+ * The context's ID.
23
+ *
24
+ * @type {Number}
25
+ */
26
+ this.id = _id ++;
11
27
 
28
+ /**
29
+ * Whether the current active framebuffer has a color attachment.
30
+ *
31
+ * @type {Boolean}
32
+ * @default true
33
+ */
12
34
  this.color = true;
35
+
36
+ /**
37
+ * Whether the color attachment should be cleared or not.
38
+ *
39
+ * @type {Boolean}
40
+ * @default true
41
+ */
13
42
  this.clearColor = true;
43
+
44
+ /**
45
+ * The clear color value.
46
+ *
47
+ * @type {Object}
48
+ * @default true
49
+ */
14
50
  this.clearColorValue = { r: 0, g: 0, b: 0, a: 1 };
15
51
 
52
+ /**
53
+ * Whether the current active framebuffer has a depth attachment.
54
+ *
55
+ * @type {Boolean}
56
+ * @default true
57
+ */
16
58
  this.depth = true;
59
+
60
+ /**
61
+ * Whether the depth attachment should be cleared or not.
62
+ *
63
+ * @type {Boolean}
64
+ * @default true
65
+ */
17
66
  this.clearDepth = true;
67
+
68
+ /**
69
+ * The clear depth value.
70
+ *
71
+ * @type {Number}
72
+ * @default 1
73
+ */
18
74
  this.clearDepthValue = 1;
19
75
 
76
+ /**
77
+ * Whether the current active framebuffer has a stencil attachment.
78
+ *
79
+ * @type {Boolean}
80
+ * @default false
81
+ */
20
82
  this.stencil = false;
83
+
84
+ /**
85
+ * Whether the stencil attachment should be cleared or not.
86
+ *
87
+ * @type {Boolean}
88
+ * @default true
89
+ */
21
90
  this.clearStencil = true;
91
+
92
+ /**
93
+ * The clear stencil value.
94
+ *
95
+ * @type {Number}
96
+ * @default 1
97
+ */
22
98
  this.clearStencilValue = 1;
23
99
 
100
+ /**
101
+ * By default the viewport encloses the entire framebuffer If a smaller
102
+ * viewport is manually defined, this property is to `true` by the renderer.
103
+ *
104
+ * @type {Boolean}
105
+ * @default false
106
+ */
24
107
  this.viewport = false;
108
+
109
+ /**
110
+ * The viewport value. This value is in physical pixels meaning it incorporates
111
+ * the renderer's pixel ratio. The viewport property of render targets or
112
+ * the renderer is in logical pixels.
113
+ *
114
+ * @type {Vector4}
115
+ */
25
116
  this.viewportValue = new Vector4();
26
117
 
118
+ /**
119
+ * When the scissor test is active and scissor rectangle smaller than the
120
+ * framebuffers dimensions, this property is to `true` by the renderer.
121
+ *
122
+ * @type {Boolean}
123
+ * @default false
124
+ */
27
125
  this.scissor = false;
126
+
127
+ /**
128
+ * The scissor rectangle.
129
+ *
130
+ * @type {Vector4}
131
+ */
28
132
  this.scissorValue = new Vector4();
29
133
 
134
+ /**
135
+ * The active render target.
136
+ *
137
+ * @type {RenderTarget?}
138
+ * @default null
139
+ */
140
+ this.renderTarget = null;
141
+
142
+ /**
143
+ * The textures of the active render target.
144
+ * `null` when no render target is set.
145
+ *
146
+ * @type {Array<Texture>?}
147
+ * @default null
148
+ */
30
149
  this.textures = null;
150
+
151
+ /**
152
+ * The depth texture of the active render target.
153
+ * `null` when no render target is set.
154
+ *
155
+ * @type {DepthTexture?}
156
+ * @default null
157
+ */
31
158
  this.depthTexture = null;
159
+
160
+ /**
161
+ * The active cube face.
162
+ *
163
+ * @type {Number}
164
+ * @default 0
165
+ */
32
166
  this.activeCubeFace = 0;
167
+
168
+ /**
169
+ * The active mipmap level.
170
+ *
171
+ * @type {Number}
172
+ * @default 0
173
+ */
174
+ this.activeMipmapLevel = 0;
175
+
176
+ /**
177
+ * The number of MSAA samples. This value is always `1` when
178
+ * MSAA isn't used.
179
+ *
180
+ * @type {Number}
181
+ * @default 1
182
+ */
33
183
  this.sampleCount = 1;
34
184
 
185
+ /**
186
+ * The active render target's width in physical pixels.
187
+ *
188
+ * @type {Number}
189
+ * @default 0
190
+ */
35
191
  this.width = 0;
192
+
193
+ /**
194
+ * The active render target's height in physical pixels.
195
+ *
196
+ * @type {Number}
197
+ * @default 0
198
+ */
36
199
  this.height = 0;
37
200
 
201
+ /**
202
+ * The occlusion query count.
203
+ *
204
+ * @type {Number}
205
+ * @default 0
206
+ */
207
+ this.occlusionQueryCount = 0;
208
+
209
+ /**
210
+ * The current clipping context.
211
+ *
212
+ * @type {ClippingContext?}
213
+ * @default null
214
+ */
215
+ this.clippingContext = null;
216
+
217
+ /**
218
+ * This flag can be used for type testing.
219
+ *
220
+ * @type {Boolean}
221
+ * @readonly
222
+ * @default true
223
+ */
38
224
  this.isRenderContext = true;
39
225
 
40
226
  }
41
227
 
228
+ /**
229
+ * Returns the cache key of this render context.
230
+ *
231
+ * @return {Number} The cache key.
232
+ */
42
233
  getCacheKey() {
43
234
 
44
235
  return getCacheKey( this );
@@ -47,6 +238,14 @@ class RenderContext {
47
238
 
48
239
  }
49
240
 
241
+ /**
242
+ * Computes a cache key for the given render context. This key
243
+ * should identify the render target state so it is possible to
244
+ * configure the correct attachments in the respective backend.
245
+ *
246
+ * @param {RenderContext} renderContext - The render context.
247
+ * @return {Number} The cache key.
248
+ */
50
249
  export function getCacheKey( renderContext ) {
51
250
 
52
251
  const { textures, activeCubeFace } = renderContext;