vc-spaces365-threejs 0.180.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 (1120) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +86 -0
  3. package/build/three.cjs +77750 -0
  4. package/build/three.core.js +58846 -0
  5. package/build/three.core.min.js +6 -0
  6. package/build/three.module.js +18484 -0
  7. package/build/three.module.min.js +6 -0
  8. package/build/three.tsl.js +636 -0
  9. package/build/three.tsl.min.js +6 -0
  10. package/build/three.webgpu.js +77332 -0
  11. package/build/three.webgpu.min.js +6 -0
  12. package/build/three.webgpu.nodes.js +77103 -0
  13. package/build/three.webgpu.nodes.min.js +6 -0
  14. package/examples/fonts/LICENSE +13 -0
  15. package/examples/fonts/README.md +11 -0
  16. package/examples/fonts/droid/NOTICE +190 -0
  17. package/examples/fonts/droid/README.txt +18 -0
  18. package/examples/fonts/droid/droid_sans_bold.typeface.json +1 -0
  19. package/examples/fonts/droid/droid_sans_mono_regular.typeface.json +1 -0
  20. package/examples/fonts/droid/droid_sans_regular.typeface.json +1 -0
  21. package/examples/fonts/droid/droid_serif_bold.typeface.json +1 -0
  22. package/examples/fonts/droid/droid_serif_regular.typeface.json +1 -0
  23. package/examples/fonts/gentilis_bold.typeface.json +1 -0
  24. package/examples/fonts/gentilis_regular.typeface.json +1 -0
  25. package/examples/fonts/helvetiker_bold.typeface.json +1 -0
  26. package/examples/fonts/helvetiker_regular.typeface.json +1 -0
  27. package/examples/fonts/optimer_bold.typeface.json +1 -0
  28. package/examples/fonts/optimer_regular.typeface.json +1 -0
  29. package/examples/fonts/ttf/README.md +9 -0
  30. package/examples/fonts/ttf/kenpixel.ttf +0 -0
  31. package/examples/jsm/Addons.js +285 -0
  32. package/examples/jsm/animation/AnimationClipCreator.js +168 -0
  33. package/examples/jsm/animation/CCDIKSolver.js +591 -0
  34. package/examples/jsm/capabilities/WebGL.js +113 -0
  35. package/examples/jsm/capabilities/WebGPU.js +59 -0
  36. package/examples/jsm/controls/ArcballControls.js +3536 -0
  37. package/examples/jsm/controls/DragControls.js +452 -0
  38. package/examples/jsm/controls/FirstPersonControls.js +447 -0
  39. package/examples/jsm/controls/FlyControls.js +380 -0
  40. package/examples/jsm/controls/MapControls.js +62 -0
  41. package/examples/jsm/controls/OrbitControls.js +1860 -0
  42. package/examples/jsm/controls/PointerLockControls.js +264 -0
  43. package/examples/jsm/controls/TrackballControls.js +1001 -0
  44. package/examples/jsm/controls/TransformControls.js +1918 -0
  45. package/examples/jsm/csm/CSM.js +597 -0
  46. package/examples/jsm/csm/CSMFrustum.js +209 -0
  47. package/examples/jsm/csm/CSMHelper.js +243 -0
  48. package/examples/jsm/csm/CSMShader.js +307 -0
  49. package/examples/jsm/csm/CSMShadowNode.js +599 -0
  50. package/examples/jsm/curves/CurveExtras.js +694 -0
  51. package/examples/jsm/curves/NURBSCurve.js +155 -0
  52. package/examples/jsm/curves/NURBSSurface.js +98 -0
  53. package/examples/jsm/curves/NURBSUtils.js +532 -0
  54. package/examples/jsm/curves/NURBSVolume.js +82 -0
  55. package/examples/jsm/effects/AnaglyphEffect.js +179 -0
  56. package/examples/jsm/effects/AsciiEffect.js +310 -0
  57. package/examples/jsm/effects/OutlineEffect.js +489 -0
  58. package/examples/jsm/effects/ParallaxBarrierEffect.js +155 -0
  59. package/examples/jsm/effects/StereoEffect.js +91 -0
  60. package/examples/jsm/environments/DebugEnvironment.js +102 -0
  61. package/examples/jsm/environments/RoomEnvironment.js +182 -0
  62. package/examples/jsm/exporters/DRACOExporter.js +311 -0
  63. package/examples/jsm/exporters/EXRExporter.js +618 -0
  64. package/examples/jsm/exporters/GLTFExporter.js +3595 -0
  65. package/examples/jsm/exporters/KTX2Exporter.js +347 -0
  66. package/examples/jsm/exporters/OBJExporter.js +308 -0
  67. package/examples/jsm/exporters/PLYExporter.js +562 -0
  68. package/examples/jsm/exporters/STLExporter.js +221 -0
  69. package/examples/jsm/exporters/USDZExporter.js +1228 -0
  70. package/examples/jsm/geometries/BoxLineGeometry.js +92 -0
  71. package/examples/jsm/geometries/ConvexGeometry.js +72 -0
  72. package/examples/jsm/geometries/DecalGeometry.js +420 -0
  73. package/examples/jsm/geometries/ParametricFunctions.js +100 -0
  74. package/examples/jsm/geometries/ParametricGeometry.js +172 -0
  75. package/examples/jsm/geometries/RoundedBoxGeometry.js +216 -0
  76. package/examples/jsm/geometries/TeapotGeometry.js +689 -0
  77. package/examples/jsm/geometries/TextGeometry.js +83 -0
  78. package/examples/jsm/helpers/LightProbeHelper.js +165 -0
  79. package/examples/jsm/helpers/LightProbeHelperGPU.js +102 -0
  80. package/examples/jsm/helpers/OctreeHelper.js +109 -0
  81. package/examples/jsm/helpers/PositionalAudioHelper.js +169 -0
  82. package/examples/jsm/helpers/RapierHelper.js +59 -0
  83. package/examples/jsm/helpers/RectAreaLightHelper.js +118 -0
  84. package/examples/jsm/helpers/TextureHelper.js +265 -0
  85. package/examples/jsm/helpers/TextureHelperGPU.js +214 -0
  86. package/examples/jsm/helpers/VertexNormalsHelper.js +155 -0
  87. package/examples/jsm/helpers/VertexTangentsHelper.js +133 -0
  88. package/examples/jsm/helpers/ViewHelper.js +422 -0
  89. package/examples/jsm/interactive/HTMLMesh.js +605 -0
  90. package/examples/jsm/interactive/InteractiveGroup.js +224 -0
  91. package/examples/jsm/interactive/SelectionBox.js +294 -0
  92. package/examples/jsm/interactive/SelectionHelper.js +150 -0
  93. package/examples/jsm/libs/ammo.wasm.js +822 -0
  94. package/examples/jsm/libs/ammo.wasm.wasm +0 -0
  95. package/examples/jsm/libs/basis/README.md +46 -0
  96. package/examples/jsm/libs/basis/basis_transcoder.js +19 -0
  97. package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
  98. package/examples/jsm/libs/chevrotain.module.min.js +141 -0
  99. package/examples/jsm/libs/demuxer_mp4.js +109 -0
  100. package/examples/jsm/libs/draco/README.md +32 -0
  101. package/examples/jsm/libs/draco/draco_decoder.js +34 -0
  102. package/examples/jsm/libs/draco/draco_decoder.wasm +0 -0
  103. package/examples/jsm/libs/draco/draco_encoder.js +33 -0
  104. package/examples/jsm/libs/draco/draco_wasm_wrapper.js +117 -0
  105. package/examples/jsm/libs/draco/gltf/draco_decoder.js +33 -0
  106. package/examples/jsm/libs/draco/gltf/draco_decoder.wasm +0 -0
  107. package/examples/jsm/libs/draco/gltf/draco_encoder.js +33 -0
  108. package/examples/jsm/libs/draco/gltf/draco_wasm_wrapper.js +116 -0
  109. package/examples/jsm/libs/ecsy.module.js +1792 -0
  110. package/examples/jsm/libs/fflate.module.js +2672 -0
  111. package/examples/jsm/libs/ktx-parse.module.js +1 -0
  112. package/examples/jsm/libs/lil-gui.module.min.js +8 -0
  113. package/examples/jsm/libs/lottie_canvas.module.js +14849 -0
  114. package/examples/jsm/libs/meshopt_decoder.module.js +195 -0
  115. package/examples/jsm/libs/mikktspace.module.js +128 -0
  116. package/examples/jsm/libs/motion-controllers.module.js +397 -0
  117. package/examples/jsm/libs/opentype.module.js +14506 -0
  118. package/examples/jsm/libs/potpack.module.js +125 -0
  119. package/examples/jsm/libs/rhino3dm/rhino3dm.js +21 -0
  120. package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +16 -0
  121. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  122. package/examples/jsm/libs/stats.module.js +167 -0
  123. package/examples/jsm/libs/surfaceNet.js +201 -0
  124. package/examples/jsm/libs/tween.module.js +876 -0
  125. package/examples/jsm/libs/utif.module.js +1665 -0
  126. package/examples/jsm/libs/zstddec.module.js +1 -0
  127. package/examples/jsm/lighting/TiledLighting.js +42 -0
  128. package/examples/jsm/lights/LightProbeGenerator.js +337 -0
  129. package/examples/jsm/lights/RectAreaLightTexturesLib.js +127 -0
  130. package/examples/jsm/lights/RectAreaLightUniformsLib.js +40 -0
  131. package/examples/jsm/lines/Line2.js +56 -0
  132. package/examples/jsm/lines/LineGeometry.js +157 -0
  133. package/examples/jsm/lines/LineMaterial.js +697 -0
  134. package/examples/jsm/lines/LineSegments2.js +426 -0
  135. package/examples/jsm/lines/LineSegmentsGeometry.js +298 -0
  136. package/examples/jsm/lines/Wireframe.js +108 -0
  137. package/examples/jsm/lines/WireframeGeometry2.js +49 -0
  138. package/examples/jsm/lines/webgpu/Line2.js +46 -0
  139. package/examples/jsm/lines/webgpu/LineSegments2.js +411 -0
  140. package/examples/jsm/lines/webgpu/Wireframe.js +86 -0
  141. package/examples/jsm/loaders/3DMLoader.js +1835 -0
  142. package/examples/jsm/loaders/3MFLoader.js +1621 -0
  143. package/examples/jsm/loaders/AMFLoader.js +541 -0
  144. package/examples/jsm/loaders/BVHLoader.js +484 -0
  145. package/examples/jsm/loaders/ColladaLoader.js +4155 -0
  146. package/examples/jsm/loaders/DDSLoader.js +385 -0
  147. package/examples/jsm/loaders/DRACOLoader.js +688 -0
  148. package/examples/jsm/loaders/EXRLoader.js +2784 -0
  149. package/examples/jsm/loaders/FBXLoader.js +4382 -0
  150. package/examples/jsm/loaders/FontLoader.js +242 -0
  151. package/examples/jsm/loaders/GCodeLoader.js +292 -0
  152. package/examples/jsm/loaders/GLTFLoader.js +4890 -0
  153. package/examples/jsm/loaders/HDRCubeTextureLoader.js +164 -0
  154. package/examples/jsm/loaders/HDRLoader.js +486 -0
  155. package/examples/jsm/loaders/IESLoader.js +379 -0
  156. package/examples/jsm/loaders/KMZLoader.js +163 -0
  157. package/examples/jsm/loaders/KTX2Loader.js +1228 -0
  158. package/examples/jsm/loaders/KTXLoader.js +197 -0
  159. package/examples/jsm/loaders/LDrawLoader.js +2519 -0
  160. package/examples/jsm/loaders/LUT3dlLoader.js +205 -0
  161. package/examples/jsm/loaders/LUTCubeLoader.js +190 -0
  162. package/examples/jsm/loaders/LUTImageLoader.js +190 -0
  163. package/examples/jsm/loaders/LWOLoader.js +1079 -0
  164. package/examples/jsm/loaders/LottieLoader.js +130 -0
  165. package/examples/jsm/loaders/MD2Loader.js +435 -0
  166. package/examples/jsm/loaders/MDDLoader.js +147 -0
  167. package/examples/jsm/loaders/MTLLoader.js +593 -0
  168. package/examples/jsm/loaders/MaterialXLoader.js +1087 -0
  169. package/examples/jsm/loaders/NRRDLoader.js +718 -0
  170. package/examples/jsm/loaders/OBJLoader.js +955 -0
  171. package/examples/jsm/loaders/PCDLoader.js +618 -0
  172. package/examples/jsm/loaders/PDBLoader.js +272 -0
  173. package/examples/jsm/loaders/PLYLoader.js +805 -0
  174. package/examples/jsm/loaders/PVRLoader.js +270 -0
  175. package/examples/jsm/loaders/RGBELoader.js +18 -0
  176. package/examples/jsm/loaders/STLLoader.js +421 -0
  177. package/examples/jsm/loaders/SVGLoader.js +3267 -0
  178. package/examples/jsm/loaders/TDSLoader.js +1144 -0
  179. package/examples/jsm/loaders/TGALoader.js +540 -0
  180. package/examples/jsm/loaders/TIFFLoader.js +59 -0
  181. package/examples/jsm/loaders/TTFLoader.js +261 -0
  182. package/examples/jsm/loaders/USDLoader.js +219 -0
  183. package/examples/jsm/loaders/USDZLoader.js +16 -0
  184. package/examples/jsm/loaders/UltraHDRLoader.js +630 -0
  185. package/examples/jsm/loaders/VOXLoader.js +376 -0
  186. package/examples/jsm/loaders/VRMLLoader.js +3569 -0
  187. package/examples/jsm/loaders/VTKLoader.js +1276 -0
  188. package/examples/jsm/loaders/XYZLoader.js +143 -0
  189. package/examples/jsm/loaders/lwo/IFFParser.js +1217 -0
  190. package/examples/jsm/loaders/lwo/LWO2Parser.js +414 -0
  191. package/examples/jsm/loaders/lwo/LWO3Parser.js +373 -0
  192. package/examples/jsm/loaders/usd/USDAParser.js +741 -0
  193. package/examples/jsm/loaders/usd/USDCParser.js +17 -0
  194. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +183 -0
  195. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +154 -0
  196. package/examples/jsm/materials/MeshGouraudMaterial.js +434 -0
  197. package/examples/jsm/materials/MeshPostProcessingMaterial.js +167 -0
  198. package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  199. package/examples/jsm/math/Capsule.js +159 -0
  200. package/examples/jsm/math/ColorConverter.js +58 -0
  201. package/examples/jsm/math/ColorSpaces.js +147 -0
  202. package/examples/jsm/math/ConvexHull.js +1695 -0
  203. package/examples/jsm/math/ImprovedNoise.js +88 -0
  204. package/examples/jsm/math/Lut.js +317 -0
  205. package/examples/jsm/math/MeshSurfaceSampler.js +315 -0
  206. package/examples/jsm/math/OBB.js +535 -0
  207. package/examples/jsm/math/Octree.js +692 -0
  208. package/examples/jsm/math/SimplexNoise.js +470 -0
  209. package/examples/jsm/misc/ConvexObjectBreaker.js +539 -0
  210. package/examples/jsm/misc/GPUComputationRenderer.js +506 -0
  211. package/examples/jsm/misc/Gyroscope.js +78 -0
  212. package/examples/jsm/misc/MD2Character.js +391 -0
  213. package/examples/jsm/misc/MD2CharacterComplex.js +740 -0
  214. package/examples/jsm/misc/MorphAnimMesh.js +119 -0
  215. package/examples/jsm/misc/MorphBlendMesh.js +425 -0
  216. package/examples/jsm/misc/ProgressiveLightMap.js +370 -0
  217. package/examples/jsm/misc/ProgressiveLightMapGPU.js +322 -0
  218. package/examples/jsm/misc/RollerCoaster.js +623 -0
  219. package/examples/jsm/misc/TubePainter.js +256 -0
  220. package/examples/jsm/misc/Volume.js +521 -0
  221. package/examples/jsm/misc/VolumeSlice.js +276 -0
  222. package/examples/jsm/modifiers/CurveModifier.js +374 -0
  223. package/examples/jsm/modifiers/CurveModifierGPU.js +256 -0
  224. package/examples/jsm/modifiers/EdgeSplitModifier.js +299 -0
  225. package/examples/jsm/modifiers/SimplifyModifier.js +632 -0
  226. package/examples/jsm/modifiers/TessellateModifier.js +340 -0
  227. package/examples/jsm/objects/GroundedSkybox.js +69 -0
  228. package/examples/jsm/objects/Lensflare.js +489 -0
  229. package/examples/jsm/objects/LensflareMesh.js +376 -0
  230. package/examples/jsm/objects/MarchingCubes.js +1261 -0
  231. package/examples/jsm/objects/Reflector.js +338 -0
  232. package/examples/jsm/objects/ReflectorForSSRPass.js +393 -0
  233. package/examples/jsm/objects/Refractor.js +389 -0
  234. package/examples/jsm/objects/ShadowMesh.js +130 -0
  235. package/examples/jsm/objects/Sky.js +237 -0
  236. package/examples/jsm/objects/SkyMesh.js +243 -0
  237. package/examples/jsm/objects/Water.js +373 -0
  238. package/examples/jsm/objects/Water2.js +401 -0
  239. package/examples/jsm/objects/Water2Mesh.js +199 -0
  240. package/examples/jsm/objects/WaterMesh.js +196 -0
  241. package/examples/jsm/offscreen/jank.js +45 -0
  242. package/examples/jsm/offscreen/offscreen.js +8 -0
  243. package/examples/jsm/offscreen/scene.js +86 -0
  244. package/examples/jsm/physics/AmmoPhysics.js +354 -0
  245. package/examples/jsm/physics/JoltPhysics.js +330 -0
  246. package/examples/jsm/physics/RapierPhysics.js +432 -0
  247. package/examples/jsm/postprocessing/AfterimagePass.js +185 -0
  248. package/examples/jsm/postprocessing/BloomPass.js +274 -0
  249. package/examples/jsm/postprocessing/BokehPass.js +218 -0
  250. package/examples/jsm/postprocessing/ClearPass.js +97 -0
  251. package/examples/jsm/postprocessing/CubeTexturePass.js +146 -0
  252. package/examples/jsm/postprocessing/DotScreenPass.js +114 -0
  253. package/examples/jsm/postprocessing/EffectComposer.js +363 -0
  254. package/examples/jsm/postprocessing/FXAAPass.js +40 -0
  255. package/examples/jsm/postprocessing/FilmPass.js +113 -0
  256. package/examples/jsm/postprocessing/GTAOPass.js +727 -0
  257. package/examples/jsm/postprocessing/GlitchPass.js +177 -0
  258. package/examples/jsm/postprocessing/HalftonePass.js +134 -0
  259. package/examples/jsm/postprocessing/LUTPass.js +138 -0
  260. package/examples/jsm/postprocessing/MaskPass.js +195 -0
  261. package/examples/jsm/postprocessing/OutlinePass.js +776 -0
  262. package/examples/jsm/postprocessing/OutputPass.js +139 -0
  263. package/examples/jsm/postprocessing/Pass.js +191 -0
  264. package/examples/jsm/postprocessing/RenderPass.js +183 -0
  265. package/examples/jsm/postprocessing/RenderPixelatedPass.js +314 -0
  266. package/examples/jsm/postprocessing/RenderTransitionPass.js +267 -0
  267. package/examples/jsm/postprocessing/SAOPass.js +407 -0
  268. package/examples/jsm/postprocessing/SMAAPass.js +230 -0
  269. package/examples/jsm/postprocessing/SSAARenderPass.js +313 -0
  270. package/examples/jsm/postprocessing/SSAOPass.js +527 -0
  271. package/examples/jsm/postprocessing/SSRPass.js +856 -0
  272. package/examples/jsm/postprocessing/SavePass.js +132 -0
  273. package/examples/jsm/postprocessing/ShaderPass.js +135 -0
  274. package/examples/jsm/postprocessing/TAARenderPass.js +243 -0
  275. package/examples/jsm/postprocessing/TexturePass.js +131 -0
  276. package/examples/jsm/postprocessing/UnrealBloomPass.js +492 -0
  277. package/examples/jsm/renderers/CSS2DRenderer.js +317 -0
  278. package/examples/jsm/renderers/CSS3DRenderer.js +453 -0
  279. package/examples/jsm/renderers/Projector.js +936 -0
  280. package/examples/jsm/renderers/SVGRenderer.js +685 -0
  281. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +96 -0
  282. package/examples/jsm/shaders/AfterimageShader.js +63 -0
  283. package/examples/jsm/shaders/BasicShader.js +36 -0
  284. package/examples/jsm/shaders/BleachBypassShader.js +68 -0
  285. package/examples/jsm/shaders/BlendShader.js +56 -0
  286. package/examples/jsm/shaders/BokehShader.js +151 -0
  287. package/examples/jsm/shaders/BokehShader2.js +404 -0
  288. package/examples/jsm/shaders/BrightnessContrastShader.js +62 -0
  289. package/examples/jsm/shaders/ColorCorrectionShader.js +59 -0
  290. package/examples/jsm/shaders/ColorifyShader.js +57 -0
  291. package/examples/jsm/shaders/ConvolutionShader.js +74 -0
  292. package/examples/jsm/shaders/CopyShader.js +52 -0
  293. package/examples/jsm/shaders/DOFMipMapShader.js +63 -0
  294. package/examples/jsm/shaders/DepthLimitedBlurShader.js +180 -0
  295. package/examples/jsm/shaders/DigitalGlitch.js +104 -0
  296. package/examples/jsm/shaders/DotScreenShader.js +75 -0
  297. package/examples/jsm/shaders/ExposureShader.js +51 -0
  298. package/examples/jsm/shaders/FXAAShader.js +298 -0
  299. package/examples/jsm/shaders/FilmShader.js +72 -0
  300. package/examples/jsm/shaders/FocusShader.js +94 -0
  301. package/examples/jsm/shaders/FreiChenShader.js +103 -0
  302. package/examples/jsm/shaders/GTAOShader.js +421 -0
  303. package/examples/jsm/shaders/GammaCorrectionShader.js +52 -0
  304. package/examples/jsm/shaders/GodRaysShader.js +333 -0
  305. package/examples/jsm/shaders/HalftoneShader.js +321 -0
  306. package/examples/jsm/shaders/HorizontalBlurShader.js +68 -0
  307. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +70 -0
  308. package/examples/jsm/shaders/HueSaturationShader.js +74 -0
  309. package/examples/jsm/shaders/KaleidoShader.js +65 -0
  310. package/examples/jsm/shaders/LuminosityHighPassShader.js +68 -0
  311. package/examples/jsm/shaders/LuminosityShader.js +54 -0
  312. package/examples/jsm/shaders/MirrorShader.js +62 -0
  313. package/examples/jsm/shaders/NormalMapShader.js +60 -0
  314. package/examples/jsm/shaders/OutputShader.js +103 -0
  315. package/examples/jsm/shaders/PoissonDenoiseShader.js +235 -0
  316. package/examples/jsm/shaders/RGBShiftShader.js +61 -0
  317. package/examples/jsm/shaders/SAOShader.js +188 -0
  318. package/examples/jsm/shaders/SMAAShader.js +489 -0
  319. package/examples/jsm/shaders/SSAOShader.js +321 -0
  320. package/examples/jsm/shaders/SSRShader.js +395 -0
  321. package/examples/jsm/shaders/SepiaShader.js +57 -0
  322. package/examples/jsm/shaders/SobelOperatorShader.js +98 -0
  323. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +95 -0
  324. package/examples/jsm/shaders/TechnicolorShader.js +51 -0
  325. package/examples/jsm/shaders/ToonShader.js +349 -0
  326. package/examples/jsm/shaders/TriangleBlurShader.js +79 -0
  327. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +62 -0
  328. package/examples/jsm/shaders/VelocityShader.js +137 -0
  329. package/examples/jsm/shaders/VerticalBlurShader.js +66 -0
  330. package/examples/jsm/shaders/VerticalTiltShiftShader.js +70 -0
  331. package/examples/jsm/shaders/VignetteShader.js +56 -0
  332. package/examples/jsm/shaders/VolumeShader.js +298 -0
  333. package/examples/jsm/shaders/WaterRefractionShader.js +106 -0
  334. package/examples/jsm/textures/FlakesTexture.js +54 -0
  335. package/examples/jsm/textures/IESTexture.js +101 -0
  336. package/examples/jsm/transpiler/AST.js +631 -0
  337. package/examples/jsm/transpiler/GLSLDecoder.js +1171 -0
  338. package/examples/jsm/transpiler/Linker.js +327 -0
  339. package/examples/jsm/transpiler/ShaderToyDecoder.js +49 -0
  340. package/examples/jsm/transpiler/TSLEncoder.js +933 -0
  341. package/examples/jsm/transpiler/Transpiler.js +67 -0
  342. package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  343. package/examples/jsm/transpiler/WGSLEncoder.js +812 -0
  344. package/examples/jsm/tsl/display/AfterImageNode.js +242 -0
  345. package/examples/jsm/tsl/display/AnaglyphPassNode.js +107 -0
  346. package/examples/jsm/tsl/display/AnamorphicNode.js +281 -0
  347. package/examples/jsm/tsl/display/BleachBypass.js +33 -0
  348. package/examples/jsm/tsl/display/BloomNode.js +520 -0
  349. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
  350. package/examples/jsm/tsl/display/DenoiseNode.js +332 -0
  351. package/examples/jsm/tsl/display/DepthOfFieldNode.js +547 -0
  352. package/examples/jsm/tsl/display/DotScreenNode.js +104 -0
  353. package/examples/jsm/tsl/display/FXAANode.js +365 -0
  354. package/examples/jsm/tsl/display/FilmNode.js +101 -0
  355. package/examples/jsm/tsl/display/GTAONode.js +530 -0
  356. package/examples/jsm/tsl/display/GaussianBlurNode.js +378 -0
  357. package/examples/jsm/tsl/display/LensflareNode.js +279 -0
  358. package/examples/jsm/tsl/display/Lut3DNode.js +109 -0
  359. package/examples/jsm/tsl/display/MotionBlur.js +33 -0
  360. package/examples/jsm/tsl/display/OutlineNode.js +751 -0
  361. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +89 -0
  362. package/examples/jsm/tsl/display/PixelationPassNode.js +334 -0
  363. package/examples/jsm/tsl/display/RGBShiftNode.js +96 -0
  364. package/examples/jsm/tsl/display/SMAANode.js +768 -0
  365. package/examples/jsm/tsl/display/SSAAPassNode.js +358 -0
  366. package/examples/jsm/tsl/display/SSGINode.js +650 -0
  367. package/examples/jsm/tsl/display/SSRNode.js +654 -0
  368. package/examples/jsm/tsl/display/Sepia.js +24 -0
  369. package/examples/jsm/tsl/display/SobelOperatorNode.js +168 -0
  370. package/examples/jsm/tsl/display/StereoCompositePassNode.js +185 -0
  371. package/examples/jsm/tsl/display/StereoPassNode.js +120 -0
  372. package/examples/jsm/tsl/display/TRAANode.js +461 -0
  373. package/examples/jsm/tsl/display/TransitionNode.js +141 -0
  374. package/examples/jsm/tsl/display/boxBlur.js +64 -0
  375. package/examples/jsm/tsl/display/hashBlur.js +53 -0
  376. package/examples/jsm/tsl/lighting/TiledLightsNode.js +422 -0
  377. package/examples/jsm/tsl/math/Bayer.js +34 -0
  378. package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
  379. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
  380. package/examples/jsm/tsl/utils/Raymarching.js +70 -0
  381. package/examples/jsm/utils/BufferGeometryUtils.js +1435 -0
  382. package/examples/jsm/utils/CameraUtils.js +82 -0
  383. package/examples/jsm/utils/GeometryCompressionUtils.js +547 -0
  384. package/examples/jsm/utils/GeometryUtils.js +226 -0
  385. package/examples/jsm/utils/LDrawUtils.js +211 -0
  386. package/examples/jsm/utils/SceneOptimizer.js +458 -0
  387. package/examples/jsm/utils/SceneUtils.js +363 -0
  388. package/examples/jsm/utils/ShadowMapViewer.js +230 -0
  389. package/examples/jsm/utils/ShadowMapViewerGPU.js +233 -0
  390. package/examples/jsm/utils/SkeletonUtils.js +490 -0
  391. package/examples/jsm/utils/SortUtils.js +175 -0
  392. package/examples/jsm/utils/UVsDebug.js +173 -0
  393. package/examples/jsm/utils/WebGLTextureUtils.js +115 -0
  394. package/examples/jsm/utils/WebGPUTextureUtils.js +81 -0
  395. package/examples/jsm/utils/WorkerPool.js +167 -0
  396. package/examples/jsm/webxr/ARButton.js +251 -0
  397. package/examples/jsm/webxr/OculusHandModel.js +194 -0
  398. package/examples/jsm/webxr/OculusHandPointerModel.js +539 -0
  399. package/examples/jsm/webxr/Text2D.js +52 -0
  400. package/examples/jsm/webxr/VRButton.js +264 -0
  401. package/examples/jsm/webxr/XRButton.js +246 -0
  402. package/examples/jsm/webxr/XRControllerModelFactory.js +403 -0
  403. package/examples/jsm/webxr/XREstimatedLight.js +254 -0
  404. package/examples/jsm/webxr/XRHandMeshModel.js +151 -0
  405. package/examples/jsm/webxr/XRHandModelFactory.js +197 -0
  406. package/examples/jsm/webxr/XRHandPrimitiveModel.js +147 -0
  407. package/examples/jsm/webxr/XRPlanes.js +118 -0
  408. package/package.json +134 -0
  409. package/src/Three.Core.js +185 -0
  410. package/src/Three.Legacy.js +0 -0
  411. package/src/Three.TSL.js +629 -0
  412. package/src/Three.WebGPU.Nodes.js +24 -0
  413. package/src/Three.WebGPU.js +26 -0
  414. package/src/Three.js +9 -0
  415. package/src/animation/AnimationAction.js +932 -0
  416. package/src/animation/AnimationClip.js +628 -0
  417. package/src/animation/AnimationMixer.js +854 -0
  418. package/src/animation/AnimationObjectGroup.js +411 -0
  419. package/src/animation/AnimationUtils.js +506 -0
  420. package/src/animation/KeyframeTrack.js +597 -0
  421. package/src/animation/PropertyBinding.js +794 -0
  422. package/src/animation/PropertyMixer.js +385 -0
  423. package/src/animation/tracks/BooleanKeyframeTrack.js +55 -0
  424. package/src/animation/tracks/ColorKeyframeTrack.js +36 -0
  425. package/src/animation/tracks/NumberKeyframeTrack.js +36 -0
  426. package/src/animation/tracks/QuaternionKeyframeTrack.js +51 -0
  427. package/src/animation/tracks/StringKeyframeTrack.js +55 -0
  428. package/src/animation/tracks/VectorKeyframeTrack.js +36 -0
  429. package/src/audio/Audio.js +778 -0
  430. package/src/audio/AudioAnalyser.js +97 -0
  431. package/src/audio/AudioContext.js +40 -0
  432. package/src/audio/AudioListener.js +216 -0
  433. package/src/audio/PositionalAudio.js +253 -0
  434. package/src/cameras/ArrayCamera.js +54 -0
  435. package/src/cameras/Camera.js +130 -0
  436. package/src/cameras/CubeCamera.js +239 -0
  437. package/src/cameras/OrthographicCamera.js +245 -0
  438. package/src/cameras/PerspectiveCamera.js +407 -0
  439. package/src/cameras/StereoCamera.js +146 -0
  440. package/src/constants.js +1675 -0
  441. package/src/core/BufferAttribute.js +1044 -0
  442. package/src/core/BufferGeometry.js +1446 -0
  443. package/src/core/Clock.js +128 -0
  444. package/src/core/EventDispatcher.js +131 -0
  445. package/src/core/GLBufferAttribute.js +171 -0
  446. package/src/core/InstancedBufferAttribute.js +68 -0
  447. package/src/core/InstancedBufferGeometry.js +60 -0
  448. package/src/core/InstancedInterleavedBuffer.js +74 -0
  449. package/src/core/InterleavedBuffer.js +291 -0
  450. package/src/core/InterleavedBufferAttribute.js +549 -0
  451. package/src/core/Layers.js +121 -0
  452. package/src/core/Object3D.js +1619 -0
  453. package/src/core/Raycaster.js +262 -0
  454. package/src/core/RenderTarget.js +392 -0
  455. package/src/core/RenderTarget3D.js +48 -0
  456. package/src/core/Timer.js +184 -0
  457. package/src/core/Uniform.js +46 -0
  458. package/src/core/UniformsGroup.js +180 -0
  459. package/src/extras/Controls.js +120 -0
  460. package/src/extras/DataUtils.js +217 -0
  461. package/src/extras/Earcut.js +22 -0
  462. package/src/extras/ImageUtils.js +137 -0
  463. package/src/extras/PMREMGenerator.js +966 -0
  464. package/src/extras/ShapeUtils.js +114 -0
  465. package/src/extras/TextureUtils.js +293 -0
  466. package/src/extras/core/Curve.js +517 -0
  467. package/src/extras/core/CurvePath.js +296 -0
  468. package/src/extras/core/Interpolations.js +105 -0
  469. package/src/extras/core/Path.js +329 -0
  470. package/src/extras/core/Shape.js +165 -0
  471. package/src/extras/core/ShapePath.js +367 -0
  472. package/src/extras/curves/ArcCurve.js +39 -0
  473. package/src/extras/curves/CatmullRomCurve3.js +326 -0
  474. package/src/extras/curves/CubicBezierCurve.js +145 -0
  475. package/src/extras/curves/CubicBezierCurve3.js +129 -0
  476. package/src/extras/curves/Curves.js +10 -0
  477. package/src/extras/curves/EllipseCurve.js +258 -0
  478. package/src/extras/curves/LineCurve.js +128 -0
  479. package/src/extras/curves/LineCurve3.js +128 -0
  480. package/src/extras/curves/QuadraticBezierCurve.js +133 -0
  481. package/src/extras/curves/QuadraticBezierCurve3.js +118 -0
  482. package/src/extras/curves/SplineCurve.js +145 -0
  483. package/src/extras/lib/earcut.js +685 -0
  484. package/src/geometries/BoxGeometry.js +218 -0
  485. package/src/geometries/CapsuleGeometry.js +217 -0
  486. package/src/geometries/CircleGeometry.js +141 -0
  487. package/src/geometries/ConeGeometry.js +69 -0
  488. package/src/geometries/CylinderGeometry.js +332 -0
  489. package/src/geometries/DodecahedronGeometry.js +98 -0
  490. package/src/geometries/EdgesGeometry.js +180 -0
  491. package/src/geometries/ExtrudeGeometry.js +909 -0
  492. package/src/geometries/Geometries.js +21 -0
  493. package/src/geometries/IcosahedronGeometry.js +74 -0
  494. package/src/geometries/LatheGeometry.js +229 -0
  495. package/src/geometries/OctahedronGeometry.js +69 -0
  496. package/src/geometries/PlaneGeometry.js +132 -0
  497. package/src/geometries/PolyhedronGeometry.js +348 -0
  498. package/src/geometries/RingGeometry.js +164 -0
  499. package/src/geometries/ShapeGeometry.js +232 -0
  500. package/src/geometries/SphereGeometry.js +174 -0
  501. package/src/geometries/TetrahedronGeometry.js +66 -0
  502. package/src/geometries/TorusGeometry.js +155 -0
  503. package/src/geometries/TorusKnotGeometry.js +205 -0
  504. package/src/geometries/TubeGeometry.js +252 -0
  505. package/src/geometries/WireframeGeometry.js +179 -0
  506. package/src/helpers/ArrowHelper.js +171 -0
  507. package/src/helpers/AxesHelper.js +96 -0
  508. package/src/helpers/Box3Helper.js +83 -0
  509. package/src/helpers/BoxHelper.js +149 -0
  510. package/src/helpers/CameraHelper.js +342 -0
  511. package/src/helpers/DirectionalLightHelper.js +145 -0
  512. package/src/helpers/GridHelper.js +82 -0
  513. package/src/helpers/HemisphereLightHelper.js +127 -0
  514. package/src/helpers/PlaneHelper.js +96 -0
  515. package/src/helpers/PointLightHelper.js +135 -0
  516. package/src/helpers/PolarGridHelper.js +126 -0
  517. package/src/helpers/SkeletonHelper.js +194 -0
  518. package/src/helpers/SpotLightHelper.js +151 -0
  519. package/src/lights/AmbientLight.js +42 -0
  520. package/src/lights/DirectionalLight.js +100 -0
  521. package/src/lights/DirectionalLightShadow.js +31 -0
  522. package/src/lights/HemisphereLight.js +66 -0
  523. package/src/lights/Light.js +95 -0
  524. package/src/lights/LightProbe.js +90 -0
  525. package/src/lights/LightShadow.js +338 -0
  526. package/src/lights/PointLight.js +116 -0
  527. package/src/lights/PointLightShadow.js +117 -0
  528. package/src/lights/RectAreaLight.js +115 -0
  529. package/src/lights/SpotLight.js +173 -0
  530. package/src/lights/SpotLightShadow.js +80 -0
  531. package/src/lights/webgpu/IESSpotLight.js +46 -0
  532. package/src/lights/webgpu/ProjectorLight.js +46 -0
  533. package/src/loaders/AnimationLoader.js +98 -0
  534. package/src/loaders/AudioLoader.js +98 -0
  535. package/src/loaders/BufferGeometryLoader.js +242 -0
  536. package/src/loaders/Cache.js +87 -0
  537. package/src/loaders/CompressedTextureLoader.js +167 -0
  538. package/src/loaders/CubeTextureLoader.js +103 -0
  539. package/src/loaders/DataTextureLoader.js +172 -0
  540. package/src/loaders/FileLoader.js +368 -0
  541. package/src/loaders/IESLoader.js +327 -0
  542. package/src/loaders/ImageBitmapLoader.js +220 -0
  543. package/src/loaders/ImageLoader.js +168 -0
  544. package/src/loaders/Loader.js +216 -0
  545. package/src/loaders/LoaderUtils.js +59 -0
  546. package/src/loaders/LoadingManager.js +307 -0
  547. package/src/loaders/MaterialLoader.js +438 -0
  548. package/src/loaders/ObjectLoader.js +1264 -0
  549. package/src/loaders/TextureLoader.js +74 -0
  550. package/src/loaders/nodes/NodeLoader.js +194 -0
  551. package/src/loaders/nodes/NodeMaterialLoader.js +108 -0
  552. package/src/loaders/nodes/NodeObjectLoader.js +151 -0
  553. package/src/materials/LineBasicMaterial.js +122 -0
  554. package/src/materials/LineDashedMaterial.js +86 -0
  555. package/src/materials/Material.js +1015 -0
  556. package/src/materials/Materials.js +39 -0
  557. package/src/materials/MeshBasicMaterial.js +249 -0
  558. package/src/materials/MeshDepthMaterial.js +147 -0
  559. package/src/materials/MeshDistanceMaterial.js +119 -0
  560. package/src/materials/MeshLambertMaterial.js +392 -0
  561. package/src/materials/MeshMatcapMaterial.js +223 -0
  562. package/src/materials/MeshNormalMaterial.js +174 -0
  563. package/src/materials/MeshPhongMaterial.js +411 -0
  564. package/src/materials/MeshPhysicalMaterial.js +535 -0
  565. package/src/materials/MeshStandardMaterial.js +424 -0
  566. package/src/materials/MeshToonMaterial.js +320 -0
  567. package/src/materials/PointsMaterial.js +139 -0
  568. package/src/materials/RawShaderMaterial.js +42 -0
  569. package/src/materials/ShaderMaterial.js +394 -0
  570. package/src/materials/ShadowMaterial.js +91 -0
  571. package/src/materials/SpriteMaterial.js +136 -0
  572. package/src/materials/nodes/Line2NodeMaterial.js +542 -0
  573. package/src/materials/nodes/LineBasicNodeMaterial.js +46 -0
  574. package/src/materials/nodes/LineDashedNodeMaterial.js +132 -0
  575. package/src/materials/nodes/MeshBasicNodeMaterial.js +134 -0
  576. package/src/materials/nodes/MeshLambertNodeMaterial.js +82 -0
  577. package/src/materials/nodes/MeshMatcapNodeMaterial.js +77 -0
  578. package/src/materials/nodes/MeshNormalNodeMaterial.js +67 -0
  579. package/src/materials/nodes/MeshPhongNodeMaterial.js +141 -0
  580. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +518 -0
  581. package/src/materials/nodes/MeshSSSNodeMaterial.js +175 -0
  582. package/src/materials/nodes/MeshStandardNodeMaterial.js +186 -0
  583. package/src/materials/nodes/MeshToonNodeMaterial.js +66 -0
  584. package/src/materials/nodes/NodeMaterial.js +1271 -0
  585. package/src/materials/nodes/NodeMaterials.js +21 -0
  586. package/src/materials/nodes/PointsNodeMaterial.js +211 -0
  587. package/src/materials/nodes/ShadowNodeMaterial.js +76 -0
  588. package/src/materials/nodes/SpriteNodeMaterial.js +186 -0
  589. package/src/materials/nodes/VolumeNodeMaterial.js +81 -0
  590. package/src/materials/nodes/manager/NodeMaterialObserver.js +612 -0
  591. package/src/math/Box2.js +381 -0
  592. package/src/math/Box3.js +805 -0
  593. package/src/math/Color.js +967 -0
  594. package/src/math/ColorManagement.js +215 -0
  595. package/src/math/Cylindrical.js +120 -0
  596. package/src/math/Euler.js +449 -0
  597. package/src/math/Frustum.js +285 -0
  598. package/src/math/FrustumArray.js +258 -0
  599. package/src/math/Interpolant.js +320 -0
  600. package/src/math/Line3.js +336 -0
  601. package/src/math/MathUtils.js +751 -0
  602. package/src/math/Matrix2.js +124 -0
  603. package/src/math/Matrix3.js +613 -0
  604. package/src/math/Matrix4.js +1301 -0
  605. package/src/math/Plane.js +367 -0
  606. package/src/math/Quaternion.js +943 -0
  607. package/src/math/Ray.js +655 -0
  608. package/src/math/Sphere.js +420 -0
  609. package/src/math/Spherical.js +147 -0
  610. package/src/math/SphericalHarmonics3.js +341 -0
  611. package/src/math/Triangle.js +539 -0
  612. package/src/math/Vector2.js +866 -0
  613. package/src/math/Vector3.js +1261 -0
  614. package/src/math/Vector4.js +1063 -0
  615. package/src/math/interpolants/CubicInterpolant.js +159 -0
  616. package/src/math/interpolants/DiscreteInterpolant.js +34 -0
  617. package/src/math/interpolants/LinearInterpolant.js +51 -0
  618. package/src/math/interpolants/QuaternionLinearInterpolant.js +48 -0
  619. package/src/nodes/Nodes.js +148 -0
  620. package/src/nodes/TSL.js +173 -0
  621. package/src/nodes/accessors/AccessorsUtils.js +53 -0
  622. package/src/nodes/accessors/Arrays.js +68 -0
  623. package/src/nodes/accessors/BatchNode.js +163 -0
  624. package/src/nodes/accessors/Bitangent.js +82 -0
  625. package/src/nodes/accessors/BufferAttributeNode.js +340 -0
  626. package/src/nodes/accessors/BufferNode.js +101 -0
  627. package/src/nodes/accessors/BuiltinNode.js +63 -0
  628. package/src/nodes/accessors/Camera.js +282 -0
  629. package/src/nodes/accessors/ClippingNode.js +255 -0
  630. package/src/nodes/accessors/CubeTextureNode.js +190 -0
  631. package/src/nodes/accessors/InstanceNode.js +244 -0
  632. package/src/nodes/accessors/InstancedMeshNode.js +50 -0
  633. package/src/nodes/accessors/Lights.js +129 -0
  634. package/src/nodes/accessors/MaterialNode.js +775 -0
  635. package/src/nodes/accessors/MaterialProperties.js +59 -0
  636. package/src/nodes/accessors/MaterialReferenceNode.js +85 -0
  637. package/src/nodes/accessors/ModelNode.js +184 -0
  638. package/src/nodes/accessors/ModelViewProjectionNode.js +13 -0
  639. package/src/nodes/accessors/MorphNode.js +310 -0
  640. package/src/nodes/accessors/Normal.js +243 -0
  641. package/src/nodes/accessors/Object3DNode.js +268 -0
  642. package/src/nodes/accessors/PointUVNode.js +55 -0
  643. package/src/nodes/accessors/Position.js +74 -0
  644. package/src/nodes/accessors/ReferenceBaseNode.js +357 -0
  645. package/src/nodes/accessors/ReferenceNode.js +424 -0
  646. package/src/nodes/accessors/ReflectVector.js +36 -0
  647. package/src/nodes/accessors/RendererReferenceNode.js +79 -0
  648. package/src/nodes/accessors/SceneNode.js +145 -0
  649. package/src/nodes/accessors/SkinningNode.js +327 -0
  650. package/src/nodes/accessors/StorageBufferNode.js +416 -0
  651. package/src/nodes/accessors/StorageTextureNode.js +242 -0
  652. package/src/nodes/accessors/Tangent.js +70 -0
  653. package/src/nodes/accessors/TangentUtils.js +46 -0
  654. package/src/nodes/accessors/Texture3DNode.js +199 -0
  655. package/src/nodes/accessors/TextureBicubic.js +92 -0
  656. package/src/nodes/accessors/TextureNode.js +894 -0
  657. package/src/nodes/accessors/TextureSizeNode.js +77 -0
  658. package/src/nodes/accessors/UV.js +11 -0
  659. package/src/nodes/accessors/UniformArrayNode.js +348 -0
  660. package/src/nodes/accessors/UserDataNode.js +77 -0
  661. package/src/nodes/accessors/VelocityNode.js +224 -0
  662. package/src/nodes/accessors/VertexColorNode.js +110 -0
  663. package/src/nodes/code/CodeNode.js +181 -0
  664. package/src/nodes/code/ExpressionNode.js +68 -0
  665. package/src/nodes/code/FunctionCallNode.js +187 -0
  666. package/src/nodes/code/FunctionNode.js +183 -0
  667. package/src/nodes/code/ScriptableNode.js +726 -0
  668. package/src/nodes/code/ScriptableValueNode.js +253 -0
  669. package/src/nodes/core/ArrayNode.js +154 -0
  670. package/src/nodes/core/AssignNode.js +202 -0
  671. package/src/nodes/core/AttributeNode.js +168 -0
  672. package/src/nodes/core/BypassNode.js +93 -0
  673. package/src/nodes/core/CacheNode.js +100 -0
  674. package/src/nodes/core/ConstNode.js +67 -0
  675. package/src/nodes/core/ContextNode.js +190 -0
  676. package/src/nodes/core/IndexNode.js +164 -0
  677. package/src/nodes/core/InputNode.js +136 -0
  678. package/src/nodes/core/LightingModel.js +77 -0
  679. package/src/nodes/core/MRTNode.js +150 -0
  680. package/src/nodes/core/Node.js +959 -0
  681. package/src/nodes/core/NodeAttribute.js +53 -0
  682. package/src/nodes/core/NodeBuilder.js +2968 -0
  683. package/src/nodes/core/NodeCache.js +75 -0
  684. package/src/nodes/core/NodeCode.js +46 -0
  685. package/src/nodes/core/NodeFrame.js +306 -0
  686. package/src/nodes/core/NodeFunction.js +69 -0
  687. package/src/nodes/core/NodeFunctionInput.js +61 -0
  688. package/src/nodes/core/NodeParser.js +23 -0
  689. package/src/nodes/core/NodeUniform.js +91 -0
  690. package/src/nodes/core/NodeUtils.js +480 -0
  691. package/src/nodes/core/NodeVar.js +60 -0
  692. package/src/nodes/core/NodeVarying.js +63 -0
  693. package/src/nodes/core/OutputStructNode.js +103 -0
  694. package/src/nodes/core/ParameterNode.js +94 -0
  695. package/src/nodes/core/PropertyNode.js +344 -0
  696. package/src/nodes/core/StackNode.js +376 -0
  697. package/src/nodes/core/StructNode.js +120 -0
  698. package/src/nodes/core/StructType.js +13 -0
  699. package/src/nodes/core/StructTypeNode.js +154 -0
  700. package/src/nodes/core/SubBuildNode.js +89 -0
  701. package/src/nodes/core/TempNode.js +88 -0
  702. package/src/nodes/core/UniformGroupNode.js +137 -0
  703. package/src/nodes/core/UniformNode.js +243 -0
  704. package/src/nodes/core/VarNode.js +284 -0
  705. package/src/nodes/core/VaryingNode.js +227 -0
  706. package/src/nodes/core/constants.js +68 -0
  707. package/src/nodes/display/BlendModes.js +235 -0
  708. package/src/nodes/display/BumpMapNode.js +117 -0
  709. package/src/nodes/display/ColorAdjustment.js +141 -0
  710. package/src/nodes/display/ColorSpaceFunctions.js +54 -0
  711. package/src/nodes/display/ColorSpaceNode.js +164 -0
  712. package/src/nodes/display/FrontFacingNode.js +102 -0
  713. package/src/nodes/display/NormalMapNode.js +118 -0
  714. package/src/nodes/display/PassNode.js +905 -0
  715. package/src/nodes/display/PosterizeNode.js +65 -0
  716. package/src/nodes/display/RenderOutputNode.js +124 -0
  717. package/src/nodes/display/ScreenNode.js +290 -0
  718. package/src/nodes/display/ToneMappingFunctions.js +242 -0
  719. package/src/nodes/display/ToneMappingNode.js +121 -0
  720. package/src/nodes/display/ToonOutlinePassNode.js +183 -0
  721. package/src/nodes/display/ViewportDepthNode.js +294 -0
  722. package/src/nodes/display/ViewportDepthTextureNode.js +67 -0
  723. package/src/nodes/display/ViewportSharedTextureNode.js +73 -0
  724. package/src/nodes/display/ViewportTextureNode.js +228 -0
  725. package/src/nodes/fog/Fog.js +114 -0
  726. package/src/nodes/functions/BSDF/BRDF_GGX.js +55 -0
  727. package/src/nodes/functions/BSDF/BRDF_Lambert.js +9 -0
  728. package/src/nodes/functions/BSDF/BRDF_Sheen.js +57 -0
  729. package/src/nodes/functions/BSDF/DFGApprox.js +30 -0
  730. package/src/nodes/functions/BSDF/D_GGX.js +23 -0
  731. package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +28 -0
  732. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +13 -0
  733. package/src/nodes/functions/BSDF/F_Schlick.js +16 -0
  734. package/src/nodes/functions/BSDF/LTC.js +175 -0
  735. package/src/nodes/functions/BSDF/Schlick_to_F0.js +21 -0
  736. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +26 -0
  737. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +29 -0
  738. package/src/nodes/functions/BasicLightingModel.js +100 -0
  739. package/src/nodes/functions/PhongLightingModel.js +99 -0
  740. package/src/nodes/functions/PhysicalLightingModel.js +796 -0
  741. package/src/nodes/functions/ShadowMaskModel.js +58 -0
  742. package/src/nodes/functions/ToonLightingModel.js +70 -0
  743. package/src/nodes/functions/VolumetricLightingModel.js +183 -0
  744. package/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
  745. package/src/nodes/functions/material/getGeometryRoughness.js +19 -0
  746. package/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
  747. package/src/nodes/functions/material/getRoughness.js +18 -0
  748. package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
  749. package/src/nodes/geometry/RangeNode.js +172 -0
  750. package/src/nodes/gpgpu/AtomicFunctionNode.js +274 -0
  751. package/src/nodes/gpgpu/BarrierNode.js +89 -0
  752. package/src/nodes/gpgpu/ComputeBuiltinNode.js +228 -0
  753. package/src/nodes/gpgpu/ComputeNode.js +273 -0
  754. package/src/nodes/gpgpu/SubgroupFunctionNode.js +430 -0
  755. package/src/nodes/gpgpu/WorkgroupInfoNode.js +234 -0
  756. package/src/nodes/lighting/AONode.js +45 -0
  757. package/src/nodes/lighting/AmbientLightNode.js +35 -0
  758. package/src/nodes/lighting/AnalyticLightNode.js +256 -0
  759. package/src/nodes/lighting/BasicEnvironmentNode.js +49 -0
  760. package/src/nodes/lighting/BasicLightMapNode.js +49 -0
  761. package/src/nodes/lighting/DirectionalLightNode.js +39 -0
  762. package/src/nodes/lighting/EnvironmentNode.js +153 -0
  763. package/src/nodes/lighting/HemisphereLightNode.js +87 -0
  764. package/src/nodes/lighting/IESSpotLightNode.js +49 -0
  765. package/src/nodes/lighting/IrradianceNode.js +44 -0
  766. package/src/nodes/lighting/LightProbeNode.js +73 -0
  767. package/src/nodes/lighting/LightUtils.js +25 -0
  768. package/src/nodes/lighting/LightingContextNode.js +115 -0
  769. package/src/nodes/lighting/LightingNode.js +36 -0
  770. package/src/nodes/lighting/LightsNode.js +455 -0
  771. package/src/nodes/lighting/PointLightNode.js +102 -0
  772. package/src/nodes/lighting/PointShadowNode.js +306 -0
  773. package/src/nodes/lighting/ProjectorLightNode.js +91 -0
  774. package/src/nodes/lighting/RectAreaLightNode.js +133 -0
  775. package/src/nodes/lighting/ShadowBaseNode.js +81 -0
  776. package/src/nodes/lighting/ShadowFilterNode.js +274 -0
  777. package/src/nodes/lighting/ShadowNode.js +745 -0
  778. package/src/nodes/lighting/SpotLightNode.js +168 -0
  779. package/src/nodes/materialx/DISCLAIMER.md +199 -0
  780. package/src/nodes/materialx/MaterialXNodes.js +197 -0
  781. package/src/nodes/materialx/lib/mx_hsv.js +127 -0
  782. package/src/nodes/materialx/lib/mx_noise.js +1491 -0
  783. package/src/nodes/materialx/lib/mx_transform_color.js +23 -0
  784. package/src/nodes/math/BitcastNode.js +156 -0
  785. package/src/nodes/math/ConditionalNode.js +245 -0
  786. package/src/nodes/math/Hash.js +21 -0
  787. package/src/nodes/math/MathNode.js +1167 -0
  788. package/src/nodes/math/MathUtils.js +54 -0
  789. package/src/nodes/math/OperatorNode.js +751 -0
  790. package/src/nodes/math/TriNoise3D.js +71 -0
  791. package/src/nodes/parsers/GLSLNodeFunction.js +168 -0
  792. package/src/nodes/parsers/GLSLNodeParser.js +25 -0
  793. package/src/nodes/pmrem/PMREMNode.js +397 -0
  794. package/src/nodes/pmrem/PMREMUtils.js +288 -0
  795. package/src/nodes/procedural/Checker.js +22 -0
  796. package/src/nodes/shapes/Shapes.js +33 -0
  797. package/src/nodes/tsl/TSLBase.js +35 -0
  798. package/src/nodes/tsl/TSLCore.js +1209 -0
  799. package/src/nodes/utils/ArrayElementNode.js +77 -0
  800. package/src/nodes/utils/ConvertNode.js +100 -0
  801. package/src/nodes/utils/CubeMapNode.js +237 -0
  802. package/src/nodes/utils/DebugNode.js +83 -0
  803. package/src/nodes/utils/Discard.js +24 -0
  804. package/src/nodes/utils/EquirectUV.js +27 -0
  805. package/src/nodes/utils/EventNode.js +83 -0
  806. package/src/nodes/utils/FlipNode.js +106 -0
  807. package/src/nodes/utils/FunctionOverloadingNode.js +152 -0
  808. package/src/nodes/utils/JoinNode.js +117 -0
  809. package/src/nodes/utils/LoopNode.js +354 -0
  810. package/src/nodes/utils/MatcapUV.js +22 -0
  811. package/src/nodes/utils/MaxMipLevelNode.js +103 -0
  812. package/src/nodes/utils/MemberNode.js +120 -0
  813. package/src/nodes/utils/Oscillators.js +41 -0
  814. package/src/nodes/utils/Packing.js +21 -0
  815. package/src/nodes/utils/PostProcessingUtils.js +95 -0
  816. package/src/nodes/utils/RTTNode.js +279 -0
  817. package/src/nodes/utils/ReflectorNode.js +623 -0
  818. package/src/nodes/utils/RemapNode.js +125 -0
  819. package/src/nodes/utils/RotateNode.js +103 -0
  820. package/src/nodes/utils/SampleNode.js +91 -0
  821. package/src/nodes/utils/SetNode.js +108 -0
  822. package/src/nodes/utils/SplitNode.js +179 -0
  823. package/src/nodes/utils/SpriteSheetUVNode.js +90 -0
  824. package/src/nodes/utils/SpriteUtils.js +63 -0
  825. package/src/nodes/utils/StorageArrayElementNode.js +143 -0
  826. package/src/nodes/utils/Timer.js +26 -0
  827. package/src/nodes/utils/TriplanarTextures.js +65 -0
  828. package/src/nodes/utils/UVUtils.js +39 -0
  829. package/src/nodes/utils/ViewportUtils.js +26 -0
  830. package/src/objects/BatchedMesh.js +1654 -0
  831. package/src/objects/Bone.js +41 -0
  832. package/src/objects/ClippingGroup.js +68 -0
  833. package/src/objects/Group.js +41 -0
  834. package/src/objects/InstancedMesh.js +395 -0
  835. package/src/objects/LOD.js +329 -0
  836. package/src/objects/Line.js +329 -0
  837. package/src/objects/LineLoop.js +37 -0
  838. package/src/objects/LineSegments.js +74 -0
  839. package/src/objects/Mesh.js +496 -0
  840. package/src/objects/Points.js +228 -0
  841. package/src/objects/Skeleton.js +383 -0
  842. package/src/objects/SkinnedMesh.js +352 -0
  843. package/src/objects/Sprite.js +245 -0
  844. package/src/renderers/WebGL3DRenderTarget.js +48 -0
  845. package/src/renderers/WebGLArrayRenderTarget.js +48 -0
  846. package/src/renderers/WebGLCubeRenderTarget.js +182 -0
  847. package/src/renderers/WebGLRenderTarget.js +34 -0
  848. package/src/renderers/WebGLRenderer.js +3508 -0
  849. package/src/renderers/common/Animation.js +147 -0
  850. package/src/renderers/common/Attributes.js +118 -0
  851. package/src/renderers/common/Backend.js +685 -0
  852. package/src/renderers/common/Background.js +212 -0
  853. package/src/renderers/common/BindGroup.js +61 -0
  854. package/src/renderers/common/Binding.js +60 -0
  855. package/src/renderers/common/Bindings.js +343 -0
  856. package/src/renderers/common/Buffer.js +87 -0
  857. package/src/renderers/common/BufferUtils.js +58 -0
  858. package/src/renderers/common/BundleGroup.js +83 -0
  859. package/src/renderers/common/ChainMap.js +98 -0
  860. package/src/renderers/common/ClippingContext.js +262 -0
  861. package/src/renderers/common/Color4.js +77 -0
  862. package/src/renderers/common/ComputePipeline.js +41 -0
  863. package/src/renderers/common/Constants.js +15 -0
  864. package/src/renderers/common/CubeRenderTarget.js +103 -0
  865. package/src/renderers/common/DataMap.js +90 -0
  866. package/src/renderers/common/Geometries.js +344 -0
  867. package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
  868. package/src/renderers/common/Info.js +172 -0
  869. package/src/renderers/common/Lighting.js +73 -0
  870. package/src/renderers/common/Pipeline.js +35 -0
  871. package/src/renderers/common/Pipelines.js +465 -0
  872. package/src/renderers/common/PostProcessing.js +245 -0
  873. package/src/renderers/common/ProgrammableStage.js +78 -0
  874. package/src/renderers/common/QuadMesh.js +106 -0
  875. package/src/renderers/common/RenderBundle.js +24 -0
  876. package/src/renderers/common/RenderBundles.js +67 -0
  877. package/src/renderers/common/RenderContext.js +265 -0
  878. package/src/renderers/common/RenderContexts.js +116 -0
  879. package/src/renderers/common/RenderList.js +400 -0
  880. package/src/renderers/common/RenderLists.js +77 -0
  881. package/src/renderers/common/RenderObject.js +901 -0
  882. package/src/renderers/common/RenderObjects.js +202 -0
  883. package/src/renderers/common/RenderPipeline.js +40 -0
  884. package/src/renderers/common/Renderer.js +3125 -0
  885. package/src/renderers/common/RendererUtils.js +191 -0
  886. package/src/renderers/common/SampledTexture.js +144 -0
  887. package/src/renderers/common/Sampler.js +139 -0
  888. package/src/renderers/common/Storage3DTexture.js +100 -0
  889. package/src/renderers/common/StorageArrayTexture.js +84 -0
  890. package/src/renderers/common/StorageBuffer.js +41 -0
  891. package/src/renderers/common/StorageBufferAttribute.js +46 -0
  892. package/src/renderers/common/StorageInstancedBufferAttribute.js +46 -0
  893. package/src/renderers/common/StorageTexture.js +78 -0
  894. package/src/renderers/common/Textures.js +491 -0
  895. package/src/renderers/common/TimestampQueryPool.js +99 -0
  896. package/src/renderers/common/Uniform.js +367 -0
  897. package/src/renderers/common/UniformBuffer.js +34 -0
  898. package/src/renderers/common/UniformsGroup.js +487 -0
  899. package/src/renderers/common/XRManager.js +1676 -0
  900. package/src/renderers/common/XRRenderTarget.js +91 -0
  901. package/src/renderers/common/extras/PMREMGenerator.js +946 -0
  902. package/src/renderers/common/nodes/NodeBuilderState.js +152 -0
  903. package/src/renderers/common/nodes/NodeLibrary.js +196 -0
  904. package/src/renderers/common/nodes/NodeSampledTexture.js +140 -0
  905. package/src/renderers/common/nodes/NodeSampler.js +50 -0
  906. package/src/renderers/common/nodes/NodeStorageBuffer.js +61 -0
  907. package/src/renderers/common/nodes/NodeUniform.js +418 -0
  908. package/src/renderers/common/nodes/NodeUniformBuffer.js +53 -0
  909. package/src/renderers/common/nodes/NodeUniformsGroup.js +51 -0
  910. package/src/renderers/common/nodes/Nodes.js +819 -0
  911. package/src/renderers/shaders/ShaderChunk/alphahash_fragment.glsl.js +7 -0
  912. package/src/renderers/shaders/ShaderChunk/alphahash_pars_fragment.glsl.js +68 -0
  913. package/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl.js +7 -0
  914. package/src/renderers/shaders/ShaderChunk/alphamap_pars_fragment.glsl.js +7 -0
  915. package/src/renderers/shaders/ShaderChunk/alphatest_fragment.glsl.js +16 -0
  916. package/src/renderers/shaders/ShaderChunk/alphatest_pars_fragment.glsl.js +5 -0
  917. package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +26 -0
  918. package/src/renderers/shaders/ShaderChunk/aomap_pars_fragment.glsl.js +8 -0
  919. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +49 -0
  920. package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +5 -0
  921. package/src/renderers/shaders/ShaderChunk/begin_vertex.glsl.js +9 -0
  922. package/src/renderers/shaders/ShaderChunk/beginnormal_vertex.glsl.js +9 -0
  923. package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +33 -0
  924. package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +43 -0
  925. package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_begin.glsl.js +7 -0
  926. package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +10 -0
  927. package/src/renderers/shaders/ShaderChunk/clearcoat_pars_fragment.glsl.js +21 -0
  928. package/src/renderers/shaders/ShaderChunk/clipping_planes_fragment.glsl.js +78 -0
  929. package/src/renderers/shaders/ShaderChunk/clipping_planes_pars_fragment.glsl.js +9 -0
  930. package/src/renderers/shaders/ShaderChunk/clipping_planes_pars_vertex.glsl.js +7 -0
  931. package/src/renderers/shaders/ShaderChunk/clipping_planes_vertex.glsl.js +7 -0
  932. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +11 -0
  933. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +11 -0
  934. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +11 -0
  935. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +31 -0
  936. package/src/renderers/shaders/ShaderChunk/colorspace_fragment.glsl.js +3 -0
  937. package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +15 -0
  938. package/src/renderers/shaders/ShaderChunk/common.glsl.js +137 -0
  939. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +186 -0
  940. package/src/renderers/shaders/ShaderChunk/default_fragment.glsl.js +5 -0
  941. package/src/renderers/shaders/ShaderChunk/default_vertex.glsl.js +5 -0
  942. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +63 -0
  943. package/src/renderers/shaders/ShaderChunk/displacementmap_pars_vertex.glsl.js +9 -0
  944. package/src/renderers/shaders/ShaderChunk/displacementmap_vertex.glsl.js +7 -0
  945. package/src/renderers/shaders/ShaderChunk/dithering_fragment.glsl.js +7 -0
  946. package/src/renderers/shaders/ShaderChunk/dithering_pars_fragment.glsl.js +20 -0
  947. package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +17 -0
  948. package/src/renderers/shaders/ShaderChunk/emissivemap_pars_fragment.glsl.js +7 -0
  949. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +15 -0
  950. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +62 -0
  951. package/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl.js +21 -0
  952. package/src/renderers/shaders/ShaderChunk/envmap_pars_vertex.glsl.js +22 -0
  953. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +69 -0
  954. package/src/renderers/shaders/ShaderChunk/envmap_vertex.glsl.js +37 -0
  955. package/src/renderers/shaders/ShaderChunk/fog_fragment.glsl.js +17 -0
  956. package/src/renderers/shaders/ShaderChunk/fog_pars_fragment.glsl.js +19 -0
  957. package/src/renderers/shaders/ShaderChunk/fog_pars_vertex.glsl.js +7 -0
  958. package/src/renderers/shaders/ShaderChunk/fog_vertex.glsl.js +7 -0
  959. package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +27 -0
  960. package/src/renderers/shaders/ShaderChunk/iridescence_fragment.glsl.js +120 -0
  961. package/src/renderers/shaders/ShaderChunk/iridescence_pars_fragment.glsl.js +14 -0
  962. package/src/renderers/shaders/ShaderChunk/lightmap_pars_fragment.glsl.js +8 -0
  963. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +209 -0
  964. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +13 -0
  965. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +40 -0
  966. package/src/renderers/shaders/ShaderChunk/lights_lambert_fragment.glsl.js +5 -0
  967. package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +28 -0
  968. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +254 -0
  969. package/src/renderers/shaders/ShaderChunk/lights_phong_fragment.glsl.js +7 -0
  970. package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +32 -0
  971. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +157 -0
  972. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +563 -0
  973. package/src/renderers/shaders/ShaderChunk/lights_toon_fragment.glsl.js +4 -0
  974. package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +26 -0
  975. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +9 -0
  976. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +9 -0
  977. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +8 -0
  978. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +8 -0
  979. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +17 -0
  980. package/src/renderers/shaders/ShaderChunk/map_pars_fragment.glsl.js +7 -0
  981. package/src/renderers/shaders/ShaderChunk/map_particle_fragment.glsl.js +27 -0
  982. package/src/renderers/shaders/ShaderChunk/map_particle_pars_fragment.glsl.js +27 -0
  983. package/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js +12 -0
  984. package/src/renderers/shaders/ShaderChunk/metalnessmap_pars_fragment.glsl.js +7 -0
  985. package/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +24 -0
  986. package/src/renderers/shaders/ShaderChunk/morphinstance_vertex.glsl.js +14 -0
  987. package/src/renderers/shaders/ShaderChunk/morphnormal_vertex.glsl.js +16 -0
  988. package/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js +26 -0
  989. package/src/renderers/shaders/ShaderChunk/morphtarget_vertex.glsl.js +16 -0
  990. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +76 -0
  991. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +33 -0
  992. package/src/renderers/shaders/ShaderChunk/normal_pars_fragment.glsl.js +14 -0
  993. package/src/renderers/shaders/ShaderChunk/normal_pars_vertex.glsl.js +14 -0
  994. package/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js +14 -0
  995. package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +43 -0
  996. package/src/renderers/shaders/ShaderChunk/opaque_fragment.glsl.js +11 -0
  997. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +100 -0
  998. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +8 -0
  999. package/src/renderers/shaders/ShaderChunk/project_vertex.glsl.js +19 -0
  1000. package/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js +12 -0
  1001. package/src/renderers/shaders/ShaderChunk/roughnessmap_pars_fragment.glsl.js +7 -0
  1002. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +337 -0
  1003. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +71 -0
  1004. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +68 -0
  1005. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +66 -0
  1006. package/src/renderers/shaders/ShaderChunk/skinbase_vertex.glsl.js +10 -0
  1007. package/src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl.js +25 -0
  1008. package/src/renderers/shaders/ShaderChunk/skinning_vertex.glsl.js +15 -0
  1009. package/src/renderers/shaders/ShaderChunk/skinnormal_vertex.glsl.js +20 -0
  1010. package/src/renderers/shaders/ShaderChunk/specularmap_fragment.glsl.js +14 -0
  1011. package/src/renderers/shaders/ShaderChunk/specularmap_pars_fragment.glsl.js +7 -0
  1012. package/src/renderers/shaders/ShaderChunk/tonemapping_fragment.glsl.js +7 -0
  1013. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +200 -0
  1014. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +36 -0
  1015. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +235 -0
  1016. package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +119 -0
  1017. package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +145 -0
  1018. package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +122 -0
  1019. package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +21 -0
  1020. package/src/renderers/shaders/ShaderChunk.js +270 -0
  1021. package/src/renderers/shaders/ShaderLib/background.glsl.js +40 -0
  1022. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +63 -0
  1023. package/src/renderers/shaders/ShaderLib/cube.glsl.js +36 -0
  1024. package/src/renderers/shaders/ShaderLib/depth.glsl.js +114 -0
  1025. package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +78 -0
  1026. package/src/renderers/shaders/ShaderLib/equirect.glsl.js +35 -0
  1027. package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +76 -0
  1028. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +116 -0
  1029. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +125 -0
  1030. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +112 -0
  1031. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +87 -0
  1032. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +127 -0
  1033. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +229 -0
  1034. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +119 -0
  1035. package/src/renderers/shaders/ShaderLib/points.glsl.js +87 -0
  1036. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +58 -0
  1037. package/src/renderers/shaders/ShaderLib/sprite.glsl.js +79 -0
  1038. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +53 -0
  1039. package/src/renderers/shaders/ShaderLib.js +361 -0
  1040. package/src/renderers/shaders/UniformsLib.js +235 -0
  1041. package/src/renderers/shaders/UniformsUtils.js +112 -0
  1042. package/src/renderers/webgl/WebGLAnimation.js +53 -0
  1043. package/src/renderers/webgl/WebGLAttributes.js +237 -0
  1044. package/src/renderers/webgl/WebGLBackground.js +303 -0
  1045. package/src/renderers/webgl/WebGLBindingStates.js +594 -0
  1046. package/src/renderers/webgl/WebGLBufferRenderer.js +89 -0
  1047. package/src/renderers/webgl/WebGLCapabilities.js +145 -0
  1048. package/src/renderers/webgl/WebGLClipping.js +171 -0
  1049. package/src/renderers/webgl/WebGLCubeMaps.js +99 -0
  1050. package/src/renderers/webgl/WebGLCubeUVMaps.js +134 -0
  1051. package/src/renderers/webgl/WebGLExtensions.js +84 -0
  1052. package/src/renderers/webgl/WebGLGeometries.js +183 -0
  1053. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +100 -0
  1054. package/src/renderers/webgl/WebGLInfo.js +73 -0
  1055. package/src/renderers/webgl/WebGLLights.js +571 -0
  1056. package/src/renderers/webgl/WebGLMaterials.js +591 -0
  1057. package/src/renderers/webgl/WebGLMorphtargets.js +168 -0
  1058. package/src/renderers/webgl/WebGLObjects.js +92 -0
  1059. package/src/renderers/webgl/WebGLProgram.js +1091 -0
  1060. package/src/renderers/webgl/WebGLPrograms.js +667 -0
  1061. package/src/renderers/webgl/WebGLProperties.js +55 -0
  1062. package/src/renderers/webgl/WebGLRenderLists.js +238 -0
  1063. package/src/renderers/webgl/WebGLRenderStates.js +116 -0
  1064. package/src/renderers/webgl/WebGLShader.js +12 -0
  1065. package/src/renderers/webgl/WebGLShaderCache.js +124 -0
  1066. package/src/renderers/webgl/WebGLShadowMap.js +436 -0
  1067. package/src/renderers/webgl/WebGLState.js +1332 -0
  1068. package/src/renderers/webgl/WebGLTextures.js +2342 -0
  1069. package/src/renderers/webgl/WebGLUniforms.js +1166 -0
  1070. package/src/renderers/webgl/WebGLUniformsGroups.js +394 -0
  1071. package/src/renderers/webgl/WebGLUtils.js +213 -0
  1072. package/src/renderers/webgl-fallback/WebGLBackend.js +2633 -0
  1073. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +140 -0
  1074. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +1517 -0
  1075. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +325 -0
  1076. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +64 -0
  1077. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +14 -0
  1078. package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +83 -0
  1079. package/src/renderers/webgl-fallback/utils/WebGLState.js +1144 -0
  1080. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +1304 -0
  1081. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +366 -0
  1082. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +313 -0
  1083. package/src/renderers/webgpu/WebGPUBackend.js +2456 -0
  1084. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +69 -0
  1085. package/src/renderers/webgpu/WebGPURenderer.js +106 -0
  1086. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +66 -0
  1087. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +100 -0
  1088. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +2248 -0
  1089. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +187 -0
  1090. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +25 -0
  1091. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +449 -0
  1092. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +484 -0
  1093. package/src/renderers/webgpu/utils/WebGPUConstants.js +339 -0
  1094. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +781 -0
  1095. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +439 -0
  1096. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1505 -0
  1097. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +287 -0
  1098. package/src/renderers/webgpu/utils/WebGPUUtils.js +227 -0
  1099. package/src/renderers/webxr/WebXRController.js +428 -0
  1100. package/src/renderers/webxr/WebXRDepthSensing.js +155 -0
  1101. package/src/renderers/webxr/WebXRManager.js +1103 -0
  1102. package/src/scenes/Fog.js +98 -0
  1103. package/src/scenes/FogExp2.js +86 -0
  1104. package/src/scenes/Scene.js +165 -0
  1105. package/src/textures/CanvasTexture.js +45 -0
  1106. package/src/textures/CompressedArrayTexture.js +89 -0
  1107. package/src/textures/CompressedCubeTexture.js +48 -0
  1108. package/src/textures/CompressedTexture.js +86 -0
  1109. package/src/textures/CubeTexture.js +81 -0
  1110. package/src/textures/Data3DTexture.js +112 -0
  1111. package/src/textures/DataArrayTexture.js +134 -0
  1112. package/src/textures/DataTexture.js +87 -0
  1113. package/src/textures/DepthTexture.js +104 -0
  1114. package/src/textures/ExternalTexture.js +56 -0
  1115. package/src/textures/FramebufferTexture.js +85 -0
  1116. package/src/textures/Source.js +230 -0
  1117. package/src/textures/Texture.js +801 -0
  1118. package/src/textures/VideoFrameTexture.js +72 -0
  1119. package/src/textures/VideoTexture.js +125 -0
  1120. package/src/utils.js +216 -0
@@ -0,0 +1,3125 @@
1
+ import Animation from './Animation.js';
2
+ import RenderObjects from './RenderObjects.js';
3
+ import Attributes from './Attributes.js';
4
+ import Geometries from './Geometries.js';
5
+ import Info from './Info.js';
6
+ import Pipelines from './Pipelines.js';
7
+ import Bindings from './Bindings.js';
8
+ import RenderLists from './RenderLists.js';
9
+ import RenderContexts from './RenderContexts.js';
10
+ import Textures from './Textures.js';
11
+ import Background from './Background.js';
12
+ import Nodes from './nodes/Nodes.js';
13
+ import Color4 from './Color4.js';
14
+ import ClippingContext from './ClippingContext.js';
15
+ import QuadMesh from './QuadMesh.js';
16
+ import RenderBundles from './RenderBundles.js';
17
+ import NodeLibrary from './nodes/NodeLibrary.js';
18
+ import Lighting from './Lighting.js';
19
+ import XRManager from './XRManager.js';
20
+
21
+ import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
22
+
23
+ import { Scene } from '../../scenes/Scene.js';
24
+ import { ColorManagement } from '../../math/ColorManagement.js';
25
+ import { Frustum } from '../../math/Frustum.js';
26
+ import { FrustumArray } from '../../math/FrustumArray.js';
27
+ import { Matrix4 } from '../../math/Matrix4.js';
28
+ import { Vector2 } from '../../math/Vector2.js';
29
+ import { Vector4 } from '../../math/Vector4.js';
30
+ import { RenderTarget } from '../../core/RenderTarget.js';
31
+ import { DoubleSide, BackSide, FrontSide, SRGBColorSpace, NoToneMapping, LinearFilter, HalfFloatType, RGBAFormat, PCFShadowMap } from '../../constants.js';
32
+
33
+ import { float, vec3, vec4 } from '../../nodes/tsl/TSLCore.js';
34
+ import { reference } from '../../nodes/accessors/ReferenceNode.js';
35
+ import { highpModelNormalViewMatrix, highpModelViewMatrix } from '../../nodes/accessors/ModelNode.js';
36
+ import { error, warn } from '../../utils.js';
37
+
38
+ const _scene = /*@__PURE__*/ new Scene();
39
+ const _drawingBufferSize = /*@__PURE__*/ new Vector2();
40
+ const _screen = /*@__PURE__*/ new Vector4();
41
+ const _frustum = /*@__PURE__*/ new Frustum();
42
+ const _frustumArray = /*@__PURE__*/ new FrustumArray();
43
+
44
+ const _projScreenMatrix = /*@__PURE__*/ new Matrix4();
45
+ const _vector4 = /*@__PURE__*/ new Vector4();
46
+
47
+ /**
48
+ * Base class for renderers.
49
+ */
50
+ class Renderer {
51
+
52
+ /**
53
+ * Renderer options.
54
+ *
55
+ * @typedef {Object} Renderer~Options
56
+ * @property {boolean} [logarithmicDepthBuffer=false] - Whether logarithmic depth buffer is enabled or not.
57
+ * @property {boolean} [alpha=true] - Whether the default framebuffer (which represents the final contents of the canvas) should be transparent or opaque.
58
+ * @property {boolean} [depth=true] - Whether the default framebuffer should have a depth buffer or not.
59
+ * @property {boolean} [stencil=false] - Whether the default framebuffer should have a stencil buffer or not.
60
+ * @property {boolean} [antialias=false] - Whether MSAA as the default anti-aliasing should be enabled or not.
61
+ * @property {number} [samples=0] - When `antialias` is `true`, `4` samples are used by default. This parameter can set to any other integer value than 0
62
+ * to overwrite the default.
63
+ * @property {?Function} [getFallback=null] - This callback function can be used to provide a fallback backend, if the primary backend can't be targeted.
64
+ * @property {number} [colorBufferType=HalfFloatType] - Defines the type of color buffers. The default `HalfFloatType` is recommend for best
65
+ * quality. To save memory and bandwidth, `UnsignedByteType` might be used. This will reduce rendering quality though.
66
+ * @property {boolean} [multiview=false] - If set to `true`, the renderer will use multiview during WebXR rendering if supported.
67
+ */
68
+
69
+ /**
70
+ * Constructs a new renderer.
71
+ *
72
+ * @param {Backend} backend - The backend the renderer is targeting (e.g. WebGPU or WebGL 2).
73
+ * @param {Renderer~Options} [parameters] - The configuration parameter.
74
+
75
+ */
76
+ constructor( backend, parameters = {} ) {
77
+
78
+ /**
79
+ * This flag can be used for type testing.
80
+ *
81
+ * @type {boolean}
82
+ * @readonly
83
+ * @default true
84
+ */
85
+ this.isRenderer = true;
86
+
87
+ //
88
+
89
+ const {
90
+ logarithmicDepthBuffer = false,
91
+ alpha = true,
92
+ depth = true,
93
+ stencil = false,
94
+ antialias = false,
95
+ samples = 0,
96
+ getFallback = null,
97
+ colorBufferType = HalfFloatType,
98
+ multiview = false
99
+ } = parameters;
100
+
101
+ /**
102
+ * A reference to the canvas element the renderer is drawing to.
103
+ * This value of this property will automatically be created by
104
+ * the renderer.
105
+ *
106
+ * @type {HTMLCanvasElement|OffscreenCanvas}
107
+ */
108
+ this.domElement = backend.getDomElement();
109
+
110
+ /**
111
+ * A reference to the current backend.
112
+ *
113
+ * @type {Backend}
114
+ */
115
+ this.backend = backend;
116
+
117
+ /**
118
+ * The number of MSAA samples.
119
+ *
120
+ * @type {number}
121
+ * @default 0
122
+ */
123
+ this.samples = samples || ( antialias === true ) ? 4 : 0;
124
+
125
+ /**
126
+ * Whether the renderer should automatically clear the current rendering target
127
+ * before execute a `render()` call. The target can be the canvas (default framebuffer)
128
+ * or the current bound render target (custom framebuffer).
129
+ *
130
+ * @type {boolean}
131
+ * @default true
132
+ */
133
+ this.autoClear = true;
134
+
135
+ /**
136
+ * When `autoClear` is set to `true`, this property defines whether the renderer
137
+ * should clear the color buffer.
138
+ *
139
+ * @type {boolean}
140
+ * @default true
141
+ */
142
+ this.autoClearColor = true;
143
+
144
+ /**
145
+ * When `autoClear` is set to `true`, this property defines whether the renderer
146
+ * should clear the depth buffer.
147
+ *
148
+ * @type {boolean}
149
+ * @default true
150
+ */
151
+ this.autoClearDepth = true;
152
+
153
+ /**
154
+ * When `autoClear` is set to `true`, this property defines whether the renderer
155
+ * should clear the stencil buffer.
156
+ *
157
+ * @type {boolean}
158
+ * @default true
159
+ */
160
+ this.autoClearStencil = true;
161
+
162
+ /**
163
+ * Whether the default framebuffer should be transparent or opaque.
164
+ *
165
+ * @type {boolean}
166
+ * @default true
167
+ */
168
+ this.alpha = alpha;
169
+
170
+ /**
171
+ * Whether logarithmic depth buffer is enabled or not.
172
+ *
173
+ * @type {boolean}
174
+ * @default false
175
+ */
176
+ this.logarithmicDepthBuffer = logarithmicDepthBuffer;
177
+
178
+ /**
179
+ * Defines the output color space of the renderer.
180
+ *
181
+ * @type {string}
182
+ * @default SRGBColorSpace
183
+ */
184
+ this.outputColorSpace = SRGBColorSpace;
185
+
186
+ /**
187
+ * Defines the tone mapping of the renderer.
188
+ *
189
+ * @type {number}
190
+ * @default NoToneMapping
191
+ */
192
+ this.toneMapping = NoToneMapping;
193
+
194
+ /**
195
+ * Defines the tone mapping exposure.
196
+ *
197
+ * @type {number}
198
+ * @default 1
199
+ */
200
+ this.toneMappingExposure = 1.0;
201
+
202
+ /**
203
+ * Whether the renderer should sort its render lists or not.
204
+ *
205
+ * Note: Sorting is used to attempt to properly render objects that have some degree of transparency.
206
+ * By definition, sorting objects may not work in all cases. Depending on the needs of application,
207
+ * it may be necessary to turn off sorting and use other methods to deal with transparency rendering
208
+ * e.g. manually determining each object's rendering order.
209
+ *
210
+ * @type {boolean}
211
+ * @default true
212
+ */
213
+ this.sortObjects = true;
214
+
215
+ /**
216
+ * Whether the default framebuffer should have a depth buffer or not.
217
+ *
218
+ * @type {boolean}
219
+ * @default true
220
+ */
221
+ this.depth = depth;
222
+
223
+ /**
224
+ * Whether the default framebuffer should have a stencil buffer or not.
225
+ *
226
+ * @type {boolean}
227
+ * @default false
228
+ */
229
+ this.stencil = stencil;
230
+
231
+ /**
232
+ * Holds a series of statistical information about the GPU memory
233
+ * and the rendering process. Useful for debugging and monitoring.
234
+ *
235
+ * @type {Info}
236
+ */
237
+ this.info = new Info();
238
+
239
+ /**
240
+ * Stores override nodes for specific transformations or calculations.
241
+ * These nodes can be used to replace default behavior in the rendering pipeline.
242
+ *
243
+ * @type {Object}
244
+ * @property {?Node} modelViewMatrix - An override node for the model-view matrix.
245
+ * @property {?Node} modelNormalViewMatrix - An override node for the model normal view matrix.
246
+ */
247
+ this.overrideNodes = {
248
+ modelViewMatrix: null,
249
+ modelNormalViewMatrix: null
250
+ };
251
+
252
+ /**
253
+ * The node library defines how certain library objects like materials, lights
254
+ * or tone mapping functions are mapped to node types. This is required since
255
+ * although instances of classes like `MeshBasicMaterial` or `PointLight` can
256
+ * be part of the scene graph, they are internally represented as nodes for
257
+ * further processing.
258
+ *
259
+ * @type {NodeLibrary}
260
+ */
261
+ this.library = new NodeLibrary();
262
+
263
+ /**
264
+ * A map-like data structure for managing lights.
265
+ *
266
+ * @type {Lighting}
267
+ */
268
+ this.lighting = new Lighting();
269
+
270
+ // internals
271
+
272
+ /**
273
+ * This callback function can be used to provide a fallback backend, if the primary backend can't be targeted.
274
+ *
275
+ * @private
276
+ * @type {?Function}
277
+ */
278
+ this._getFallback = getFallback;
279
+
280
+ /**
281
+ * The renderer's pixel ratio.
282
+ *
283
+ * @private
284
+ * @type {number}
285
+ * @default 1
286
+ */
287
+ this._pixelRatio = 1;
288
+
289
+ /**
290
+ * The width of the renderer's default framebuffer in logical pixel unit.
291
+ *
292
+ * @private
293
+ * @type {number}
294
+ */
295
+ this._width = this.domElement.width;
296
+
297
+ /**
298
+ * The height of the renderer's default framebuffer in logical pixel unit.
299
+ *
300
+ * @private
301
+ * @type {number}
302
+ */
303
+ this._height = this.domElement.height;
304
+
305
+ /**
306
+ * The viewport of the renderer in logical pixel unit.
307
+ *
308
+ * @private
309
+ * @type {Vector4}
310
+ */
311
+ this._viewport = new Vector4( 0, 0, this._width, this._height );
312
+
313
+ /**
314
+ * The scissor rectangle of the renderer in logical pixel unit.
315
+ *
316
+ * @private
317
+ * @type {Vector4}
318
+ */
319
+ this._scissor = new Vector4( 0, 0, this._width, this._height );
320
+
321
+ /**
322
+ * Whether the scissor test should be enabled or not.
323
+ *
324
+ * @private
325
+ * @type {boolean}
326
+ */
327
+ this._scissorTest = false;
328
+
329
+ /**
330
+ * A reference to a renderer module for managing shader attributes.
331
+ *
332
+ * @private
333
+ * @type {?Attributes}
334
+ * @default null
335
+ */
336
+ this._attributes = null;
337
+
338
+ /**
339
+ * A reference to a renderer module for managing geometries.
340
+ *
341
+ * @private
342
+ * @type {?Geometries}
343
+ * @default null
344
+ */
345
+ this._geometries = null;
346
+
347
+ /**
348
+ * A reference to a renderer module for managing node related logic.
349
+ *
350
+ * @private
351
+ * @type {?Nodes}
352
+ * @default null
353
+ */
354
+ this._nodes = null;
355
+
356
+ /**
357
+ * A reference to a renderer module for managing the internal animation loop.
358
+ *
359
+ * @private
360
+ * @type {?Animation}
361
+ * @default null
362
+ */
363
+ this._animation = null;
364
+
365
+ /**
366
+ * A reference to a renderer module for managing shader program bindings.
367
+ *
368
+ * @private
369
+ * @type {?Bindings}
370
+ * @default null
371
+ */
372
+ this._bindings = null;
373
+
374
+ /**
375
+ * A reference to a renderer module for managing render objects.
376
+ *
377
+ * @private
378
+ * @type {?RenderObjects}
379
+ * @default null
380
+ */
381
+ this._objects = null;
382
+
383
+ /**
384
+ * A reference to a renderer module for managing render and compute pipelines.
385
+ *
386
+ * @private
387
+ * @type {?Pipelines}
388
+ * @default null
389
+ */
390
+ this._pipelines = null;
391
+
392
+ /**
393
+ * A reference to a renderer module for managing render bundles.
394
+ *
395
+ * @private
396
+ * @type {?RenderBundles}
397
+ * @default null
398
+ */
399
+ this._bundles = null;
400
+
401
+ /**
402
+ * A reference to a renderer module for managing render lists.
403
+ *
404
+ * @private
405
+ * @type {?RenderLists}
406
+ * @default null
407
+ */
408
+ this._renderLists = null;
409
+
410
+ /**
411
+ * A reference to a renderer module for managing render contexts.
412
+ *
413
+ * @private
414
+ * @type {?RenderContexts}
415
+ * @default null
416
+ */
417
+ this._renderContexts = null;
418
+
419
+ /**
420
+ * A reference to a renderer module for managing textures.
421
+ *
422
+ * @private
423
+ * @type {?Textures}
424
+ * @default null
425
+ */
426
+ this._textures = null;
427
+
428
+ /**
429
+ * A reference to a renderer module for backgrounds.
430
+ *
431
+ * @private
432
+ * @type {?Background}
433
+ * @default null
434
+ */
435
+ this._background = null;
436
+
437
+ /**
438
+ * This fullscreen quad is used for internal render passes
439
+ * like the tone mapping and color space output pass.
440
+ *
441
+ * @private
442
+ * @type {QuadMesh}
443
+ */
444
+ this._quad = new QuadMesh( new NodeMaterial() );
445
+ this._quad.material.name = 'Renderer_output';
446
+
447
+ /**
448
+ * A reference to the current render context.
449
+ *
450
+ * @private
451
+ * @type {?RenderContext}
452
+ * @default null
453
+ */
454
+ this._currentRenderContext = null;
455
+
456
+ /**
457
+ * A custom sort function for the opaque render list.
458
+ *
459
+ * @private
460
+ * @type {?Function}
461
+ * @default null
462
+ */
463
+ this._opaqueSort = null;
464
+
465
+ /**
466
+ * A custom sort function for the transparent render list.
467
+ *
468
+ * @private
469
+ * @type {?Function}
470
+ * @default null
471
+ */
472
+ this._transparentSort = null;
473
+
474
+ /**
475
+ * The framebuffer target.
476
+ *
477
+ * @private
478
+ * @type {?RenderTarget}
479
+ * @default null
480
+ */
481
+ this._frameBufferTarget = null;
482
+
483
+ const alphaClear = this.alpha === true ? 0 : 1;
484
+
485
+ /**
486
+ * The clear color value.
487
+ *
488
+ * @private
489
+ * @type {Color4}
490
+ */
491
+ this._clearColor = new Color4( 0, 0, 0, alphaClear );
492
+
493
+ /**
494
+ * The clear depth value.
495
+ *
496
+ * @private
497
+ * @type {number}
498
+ * @default 1
499
+ */
500
+ this._clearDepth = 1;
501
+
502
+ /**
503
+ * The clear stencil value.
504
+ *
505
+ * @private
506
+ * @type {number}
507
+ * @default 0
508
+ */
509
+ this._clearStencil = 0;
510
+
511
+ /**
512
+ * The current render target.
513
+ *
514
+ * @private
515
+ * @type {?RenderTarget}
516
+ * @default null
517
+ */
518
+ this._renderTarget = null;
519
+
520
+ /**
521
+ * The active cube face.
522
+ *
523
+ * @private
524
+ * @type {number}
525
+ * @default 0
526
+ */
527
+ this._activeCubeFace = 0;
528
+
529
+ /**
530
+ * The active mipmap level.
531
+ *
532
+ * @private
533
+ * @type {number}
534
+ * @default 0
535
+ */
536
+ this._activeMipmapLevel = 0;
537
+
538
+ /**
539
+ * The current output render target.
540
+ *
541
+ * @private
542
+ * @type {?RenderTarget}
543
+ * @default null
544
+ */
545
+ this._outputRenderTarget = null;
546
+
547
+ /**
548
+ * The MRT setting.
549
+ *
550
+ * @private
551
+ * @type {?MRTNode}
552
+ * @default null
553
+ */
554
+ this._mrt = null;
555
+
556
+ /**
557
+ * This function defines how a render object is going
558
+ * to be rendered.
559
+ *
560
+ * @private
561
+ * @type {?Function}
562
+ * @default null
563
+ */
564
+ this._renderObjectFunction = null;
565
+
566
+ /**
567
+ * Used to keep track of the current render object function.
568
+ *
569
+ * @private
570
+ * @type {?Function}
571
+ * @default null
572
+ */
573
+ this._currentRenderObjectFunction = null;
574
+
575
+ /**
576
+ * Used to keep track of the current render bundle.
577
+ *
578
+ * @private
579
+ * @type {?RenderBundle}
580
+ * @default null
581
+ */
582
+ this._currentRenderBundle = null;
583
+
584
+ /**
585
+ * Next to `_renderObjectFunction()`, this function provides another hook
586
+ * for influencing the render process of a render object. It is meant for internal
587
+ * use and only relevant for `compileAsync()` right now. Instead of using
588
+ * the default logic of `_renderObjectDirect()` which actually draws the render object,
589
+ * a different function might be used which performs no draw but just the node
590
+ * and pipeline updates.
591
+ *
592
+ * @private
593
+ * @type {?Function}
594
+ * @default null
595
+ */
596
+ this._handleObjectFunction = this._renderObjectDirect;
597
+
598
+ /**
599
+ * Indicates whether the device has been lost or not. In WebGL terms, the device
600
+ * lost is considered as a context lost. When this is set to `true`, rendering
601
+ * isn't possible anymore.
602
+ *
603
+ * @private
604
+ * @type {boolean}
605
+ * @default false
606
+ */
607
+ this._isDeviceLost = false;
608
+
609
+ /**
610
+ * A callback function that defines what should happen when a device/context lost occurs.
611
+ *
612
+ * @type {Function}
613
+ */
614
+ this.onDeviceLost = this._onDeviceLost;
615
+
616
+ /**
617
+ * Defines the type of color buffers. The default `HalfFloatType` is recommend for
618
+ * best quality. To save memory and bandwidth, `UnsignedByteType` might be used.
619
+ * This will reduce rendering quality though.
620
+ *
621
+ * @private
622
+ * @type {number}
623
+ * @default HalfFloatType
624
+ */
625
+ this._colorBufferType = colorBufferType;
626
+
627
+ /**
628
+ * Whether the renderer has been initialized or not.
629
+ *
630
+ * @private
631
+ * @type {boolean}
632
+ * @default false
633
+ */
634
+ this._initialized = false;
635
+
636
+ /**
637
+ * A reference to the promise which initializes the renderer.
638
+ *
639
+ * @private
640
+ * @type {?Promise<this>}
641
+ * @default null
642
+ */
643
+ this._initPromise = null;
644
+
645
+ /**
646
+ * An array of compilation promises which are used in `compileAsync()`.
647
+ *
648
+ * @private
649
+ * @type {?Array<Promise>}
650
+ * @default null
651
+ */
652
+ this._compilationPromises = null;
653
+
654
+ /**
655
+ * Whether the renderer should render transparent render objects or not.
656
+ *
657
+ * @type {boolean}
658
+ * @default true
659
+ */
660
+ this.transparent = true;
661
+
662
+ /**
663
+ * Whether the renderer should render opaque render objects or not.
664
+ *
665
+ * @type {boolean}
666
+ * @default true
667
+ */
668
+ this.opaque = true;
669
+
670
+ /**
671
+ * Shadow map configuration
672
+ * @typedef {Object} ShadowMapConfig
673
+ * @property {boolean} enabled - Whether to globally enable shadows or not.
674
+ * @property {number} type - The shadow map type.
675
+ */
676
+
677
+ /**
678
+ * The renderer's shadow configuration.
679
+ *
680
+ * @type {ShadowMapConfig}
681
+ */
682
+ this.shadowMap = {
683
+ enabled: false,
684
+ type: PCFShadowMap
685
+ };
686
+
687
+ /**
688
+ * XR configuration.
689
+ * @typedef {Object} XRConfig
690
+ * @property {boolean} enabled - Whether to globally enable XR or not.
691
+ */
692
+
693
+ /**
694
+ * The renderer's XR manager.
695
+ *
696
+ * @type {XRManager}
697
+ */
698
+ this.xr = new XRManager( this, multiview );
699
+
700
+ /**
701
+ * Debug configuration.
702
+ * @typedef {Object} DebugConfig
703
+ * @property {boolean} checkShaderErrors - Whether shader errors should be checked or not.
704
+ * @property {?Function} onShaderError - A callback function that is executed when a shader error happens. Only supported with WebGL 2 right now.
705
+ * @property {Function} getShaderAsync - Allows the get the raw shader code for the given scene, camera and 3D object.
706
+ */
707
+
708
+ /**
709
+ * The renderer's debug configuration.
710
+ *
711
+ * @type {DebugConfig}
712
+ */
713
+ this.debug = {
714
+ checkShaderErrors: true,
715
+ onShaderError: null,
716
+ getShaderAsync: async ( scene, camera, object ) => {
717
+
718
+ await this.compileAsync( scene, camera );
719
+
720
+ const renderList = this._renderLists.get( scene, camera );
721
+ const renderContext = this._renderContexts.get( scene, camera, this._renderTarget );
722
+
723
+ const material = scene.overrideMaterial || object.material;
724
+
725
+ const renderObject = this._objects.get( object, material, scene, camera, renderList.lightsNode, renderContext, renderContext.clippingContext );
726
+
727
+ const { fragmentShader, vertexShader } = renderObject.getNodeBuilderState();
728
+
729
+ return { fragmentShader, vertexShader };
730
+
731
+ }
732
+ };
733
+
734
+ }
735
+
736
+ /**
737
+ * Initializes the renderer so it is ready for usage.
738
+ *
739
+ * @async
740
+ * @return {Promise<this>} A Promise that resolves when the renderer has been initialized.
741
+ */
742
+ async init() {
743
+
744
+ if ( this._initialized ) {
745
+
746
+ throw new Error( 'Renderer: Backend has already been initialized.' );
747
+
748
+ }
749
+
750
+ if ( this._initPromise !== null ) {
751
+
752
+ return this._initPromise;
753
+
754
+ }
755
+
756
+ this._initPromise = new Promise( async ( resolve, reject ) => {
757
+
758
+ let backend = this.backend;
759
+
760
+ try {
761
+
762
+ await backend.init( this );
763
+
764
+ } catch ( error ) {
765
+
766
+ if ( this._getFallback !== null ) {
767
+
768
+ // try the fallback
769
+
770
+ try {
771
+
772
+ this.backend = backend = this._getFallback( error );
773
+ await backend.init( this );
774
+
775
+ } catch ( error ) {
776
+
777
+ reject( error );
778
+ return;
779
+
780
+ }
781
+
782
+ } else {
783
+
784
+ reject( error );
785
+ return;
786
+
787
+ }
788
+
789
+ }
790
+
791
+ this._nodes = new Nodes( this, backend );
792
+ this._animation = new Animation( this._nodes, this.info );
793
+ this._attributes = new Attributes( backend );
794
+ this._background = new Background( this, this._nodes );
795
+ this._geometries = new Geometries( this._attributes, this.info );
796
+ this._textures = new Textures( this, backend, this.info );
797
+ this._pipelines = new Pipelines( backend, this._nodes );
798
+ this._bindings = new Bindings( backend, this._nodes, this._textures, this._attributes, this._pipelines, this.info );
799
+ this._objects = new RenderObjects( this, this._nodes, this._geometries, this._pipelines, this._bindings, this.info );
800
+ this._renderLists = new RenderLists( this.lighting );
801
+ this._bundles = new RenderBundles();
802
+ this._renderContexts = new RenderContexts();
803
+
804
+ //
805
+
806
+ this._animation.start();
807
+ this._initialized = true;
808
+
809
+ resolve( this );
810
+
811
+ } );
812
+
813
+ return this._initPromise;
814
+
815
+ }
816
+
817
+ /**
818
+ * The coordinate system of the renderer. The value of this property
819
+ * depends on the selected backend. Either `THREE.WebGLCoordinateSystem` or
820
+ * `THREE.WebGPUCoordinateSystem`.
821
+ *
822
+ * @readonly
823
+ * @type {number}
824
+ */
825
+ get coordinateSystem() {
826
+
827
+ return this.backend.coordinateSystem;
828
+
829
+ }
830
+
831
+ /**
832
+ * Compiles all materials in the given scene. This can be useful to avoid a
833
+ * phenomenon which is called "shader compilation stutter", which occurs when
834
+ * rendering an object with a new shader for the first time.
835
+ *
836
+ * If you want to add a 3D object to an existing scene, use the third optional
837
+ * parameter for applying the target scene. Note that the (target) scene's lighting
838
+ * and environment must be configured before calling this method.
839
+ *
840
+ * @async
841
+ * @param {Object3D} scene - The scene or 3D object to precompile.
842
+ * @param {Camera} camera - The camera that is used to render the scene.
843
+ * @param {?Scene} targetScene - If the first argument is a 3D object, this parameter must represent the scene the 3D object is going to be added.
844
+ * @return {Promise<Array|undefined>} A Promise that resolves when the compile has been finished.
845
+ */
846
+ async compileAsync( scene, camera, targetScene = null ) {
847
+
848
+ if ( this._isDeviceLost === true ) return;
849
+
850
+ if ( this._initialized === false ) await this.init();
851
+
852
+ // preserve render tree
853
+
854
+ const nodeFrame = this._nodes.nodeFrame;
855
+
856
+ const previousRenderId = nodeFrame.renderId;
857
+ const previousRenderContext = this._currentRenderContext;
858
+ const previousRenderObjectFunction = this._currentRenderObjectFunction;
859
+ const previousCompilationPromises = this._compilationPromises;
860
+
861
+ //
862
+
863
+ const sceneRef = ( scene.isScene === true ) ? scene : _scene;
864
+
865
+ if ( targetScene === null ) targetScene = scene;
866
+
867
+ const renderTarget = this._renderTarget;
868
+ const renderContext = this._renderContexts.get( targetScene, camera, renderTarget );
869
+ const activeMipmapLevel = this._activeMipmapLevel;
870
+
871
+ const compilationPromises = [];
872
+
873
+ this._currentRenderContext = renderContext;
874
+ this._currentRenderObjectFunction = this.renderObject;
875
+
876
+ this._handleObjectFunction = this._createObjectPipeline;
877
+
878
+ this._compilationPromises = compilationPromises;
879
+
880
+ nodeFrame.renderId ++;
881
+
882
+ //
883
+
884
+ nodeFrame.update();
885
+
886
+ //
887
+
888
+ renderContext.depth = this.depth;
889
+ renderContext.stencil = this.stencil;
890
+
891
+ if ( ! renderContext.clippingContext ) renderContext.clippingContext = new ClippingContext();
892
+ renderContext.clippingContext.updateGlobal( sceneRef, camera );
893
+
894
+ //
895
+
896
+ sceneRef.onBeforeRender( this, scene, camera, renderTarget );
897
+
898
+ //
899
+
900
+ const renderList = this._renderLists.get( scene, camera );
901
+ renderList.begin();
902
+
903
+ this._projectObject( scene, camera, 0, renderList, renderContext.clippingContext );
904
+
905
+ // include lights from target scene
906
+ if ( targetScene !== scene ) {
907
+
908
+ targetScene.traverseVisible( function ( object ) {
909
+
910
+ if ( object.isLight && object.layers.test( camera.layers ) ) {
911
+
912
+ renderList.pushLight( object );
913
+
914
+ }
915
+
916
+ } );
917
+
918
+ }
919
+
920
+ renderList.finish();
921
+
922
+ //
923
+
924
+ if ( renderTarget !== null ) {
925
+
926
+ this._textures.updateRenderTarget( renderTarget, activeMipmapLevel );
927
+
928
+ const renderTargetData = this._textures.get( renderTarget );
929
+
930
+ renderContext.textures = renderTargetData.textures;
931
+ renderContext.depthTexture = renderTargetData.depthTexture;
932
+
933
+ } else {
934
+
935
+ renderContext.textures = null;
936
+ renderContext.depthTexture = null;
937
+
938
+ }
939
+
940
+ //
941
+
942
+ this._background.update( sceneRef, renderList, renderContext );
943
+
944
+ // process render lists
945
+
946
+ const opaqueObjects = renderList.opaque;
947
+ const transparentObjects = renderList.transparent;
948
+ const transparentDoublePassObjects = renderList.transparentDoublePass;
949
+ const lightsNode = renderList.lightsNode;
950
+
951
+ if ( this.opaque === true && opaqueObjects.length > 0 ) this._renderObjects( opaqueObjects, camera, sceneRef, lightsNode );
952
+ if ( this.transparent === true && transparentObjects.length > 0 ) this._renderTransparents( transparentObjects, transparentDoublePassObjects, camera, sceneRef, lightsNode );
953
+
954
+ // restore render tree
955
+
956
+ nodeFrame.renderId = previousRenderId;
957
+
958
+ this._currentRenderContext = previousRenderContext;
959
+ this._currentRenderObjectFunction = previousRenderObjectFunction;
960
+ this._compilationPromises = previousCompilationPromises;
961
+
962
+ this._handleObjectFunction = this._renderObjectDirect;
963
+
964
+ // wait for all promises setup by backends awaiting compilation/linking/pipeline creation to complete
965
+
966
+ await Promise.all( compilationPromises );
967
+
968
+ }
969
+
970
+ /**
971
+ * Renders the scene in an async fashion.
972
+ *
973
+ * @async
974
+ * @param {Object3D} scene - The scene or 3D object to render.
975
+ * @param {Camera} camera - The camera.
976
+ * @return {Promise} A Promise that resolves when the render has been finished.
977
+ */
978
+ async renderAsync( scene, camera ) {
979
+
980
+ if ( this._initialized === false ) await this.init();
981
+
982
+ this._renderScene( scene, camera );
983
+
984
+ }
985
+
986
+ /**
987
+ * Can be used to synchronize CPU operations with GPU tasks. So when this method is called,
988
+ * the CPU waits for the GPU to complete its operation (e.g. a compute task).
989
+ *
990
+ * @async
991
+ * @return {Promise} A Promise that resolves when synchronization has been finished.
992
+ */
993
+ async waitForGPU() {
994
+
995
+ await this.backend.waitForGPU();
996
+
997
+ }
998
+
999
+ /**
1000
+ * Enables or disables high precision for model-view and normal-view matrices.
1001
+ * When enabled, will use CPU 64-bit precision for higher precision instead of GPU 32-bit for higher performance.
1002
+ *
1003
+ * NOTE: 64-bit precision is not compatible with `InstancedMesh` and `SkinnedMesh`.
1004
+ *
1005
+ * @param {boolean} value - Whether to enable or disable high precision.
1006
+ * @type {boolean}
1007
+ */
1008
+ set highPrecision( value ) {
1009
+
1010
+ if ( value === true ) {
1011
+
1012
+ this.overrideNodes.modelViewMatrix = highpModelViewMatrix;
1013
+ this.overrideNodes.modelNormalViewMatrix = highpModelNormalViewMatrix;
1014
+
1015
+ } else if ( this.highPrecision ) {
1016
+
1017
+ this.overrideNodes.modelViewMatrix = null;
1018
+ this.overrideNodes.modelNormalViewMatrix = null;
1019
+
1020
+ }
1021
+
1022
+ }
1023
+
1024
+ /**
1025
+ * Returns whether high precision is enabled or not.
1026
+ *
1027
+ * @return {boolean} Whether high precision is enabled or not.
1028
+ * @type {boolean}
1029
+ */
1030
+ get highPrecision() {
1031
+
1032
+ return this.overrideNodes.modelViewMatrix === highpModelViewMatrix && this.overrideNodes.modelNormalViewMatrix === highpModelNormalViewMatrix;
1033
+
1034
+ }
1035
+
1036
+ /**
1037
+ * Sets the given MRT configuration.
1038
+ *
1039
+ * @param {MRTNode} mrt - The MRT node to set.
1040
+ * @return {Renderer} A reference to this renderer.
1041
+ */
1042
+ setMRT( mrt ) {
1043
+
1044
+ this._mrt = mrt;
1045
+
1046
+ return this;
1047
+
1048
+ }
1049
+
1050
+ /**
1051
+ * Returns the MRT configuration.
1052
+ *
1053
+ * @return {MRTNode} The MRT configuration.
1054
+ */
1055
+ getMRT() {
1056
+
1057
+ return this._mrt;
1058
+
1059
+ }
1060
+
1061
+ /**
1062
+ * Returns the color buffer type.
1063
+ *
1064
+ * @return {number} The color buffer type.
1065
+ */
1066
+ getColorBufferType() {
1067
+
1068
+ return this._colorBufferType;
1069
+
1070
+ }
1071
+
1072
+ /**
1073
+ * Default implementation of the device lost callback.
1074
+ *
1075
+ * @private
1076
+ * @param {Object} info - Information about the context lost.
1077
+ */
1078
+ _onDeviceLost( info ) {
1079
+
1080
+ let errorMessage = `THREE.WebGPURenderer: ${info.api} Device Lost:\n\nMessage: ${info.message}`;
1081
+
1082
+ if ( info.reason ) {
1083
+
1084
+ errorMessage += `\nReason: ${info.reason}`;
1085
+
1086
+ }
1087
+
1088
+ error( errorMessage );
1089
+
1090
+ this._isDeviceLost = true;
1091
+
1092
+ }
1093
+
1094
+ /**
1095
+ * Renders the given render bundle.
1096
+ *
1097
+ * @private
1098
+ * @param {Object} bundle - Render bundle data.
1099
+ * @param {Scene} sceneRef - The scene the render bundle belongs to.
1100
+ * @param {LightsNode} lightsNode - The lights node.
1101
+ */
1102
+ _renderBundle( bundle, sceneRef, lightsNode ) {
1103
+
1104
+ const { bundleGroup, camera, renderList } = bundle;
1105
+
1106
+ const renderContext = this._currentRenderContext;
1107
+
1108
+ //
1109
+
1110
+ const renderBundle = this._bundles.get( bundleGroup, camera );
1111
+ const renderBundleData = this.backend.get( renderBundle );
1112
+
1113
+ if ( renderBundleData.renderContexts === undefined ) renderBundleData.renderContexts = new Set();
1114
+
1115
+ //
1116
+
1117
+ const needsUpdate = bundleGroup.version !== renderBundleData.version;
1118
+ const renderBundleNeedsUpdate = renderBundleData.renderContexts.has( renderContext ) === false || needsUpdate;
1119
+
1120
+ renderBundleData.renderContexts.add( renderContext );
1121
+
1122
+ if ( renderBundleNeedsUpdate ) {
1123
+
1124
+ this.backend.beginBundle( renderContext );
1125
+
1126
+ if ( renderBundleData.renderObjects === undefined || needsUpdate ) {
1127
+
1128
+ renderBundleData.renderObjects = [];
1129
+
1130
+ }
1131
+
1132
+ this._currentRenderBundle = renderBundle;
1133
+
1134
+ const {
1135
+ transparentDoublePass: transparentDoublePassObjects,
1136
+ transparent: transparentObjects,
1137
+ opaque: opaqueObjects
1138
+ } = renderList;
1139
+
1140
+ if ( this.opaque === true && opaqueObjects.length > 0 ) this._renderObjects( opaqueObjects, camera, sceneRef, lightsNode );
1141
+ if ( this.transparent === true && transparentObjects.length > 0 ) this._renderTransparents( transparentObjects, transparentDoublePassObjects, camera, sceneRef, lightsNode );
1142
+
1143
+ this._currentRenderBundle = null;
1144
+
1145
+ //
1146
+
1147
+ this.backend.finishBundle( renderContext, renderBundle );
1148
+
1149
+ renderBundleData.version = bundleGroup.version;
1150
+
1151
+ } else {
1152
+
1153
+ const { renderObjects } = renderBundleData;
1154
+
1155
+ for ( let i = 0, l = renderObjects.length; i < l; i ++ ) {
1156
+
1157
+ const renderObject = renderObjects[ i ];
1158
+
1159
+ if ( this._nodes.needsRefresh( renderObject ) ) {
1160
+
1161
+ this._nodes.updateBefore( renderObject );
1162
+
1163
+ this._nodes.updateForRender( renderObject );
1164
+ this._bindings.updateForRender( renderObject );
1165
+
1166
+ this._nodes.updateAfter( renderObject );
1167
+
1168
+ }
1169
+
1170
+ }
1171
+
1172
+ }
1173
+
1174
+ this.backend.addBundle( renderContext, renderBundle );
1175
+
1176
+ }
1177
+
1178
+ /**
1179
+ * Renders the scene or 3D object with the given camera. This method can only be called
1180
+ * if the renderer has been initialized.
1181
+ *
1182
+ * The target of the method is the default framebuffer (meaning the canvas)
1183
+ * or alternatively a render target when specified via `setRenderTarget()`.
1184
+ *
1185
+ * @param {Object3D} scene - The scene or 3D object to render.
1186
+ * @param {Camera} camera - The camera to render the scene with.
1187
+ * @return {?Promise} A Promise that resolve when the scene has been rendered.
1188
+ * Only returned when the renderer has not been initialized.
1189
+ */
1190
+ render( scene, camera ) {
1191
+
1192
+ if ( this._initialized === false ) {
1193
+
1194
+ warn( 'Renderer: .render() called before the backend is initialized. Try using .renderAsync() instead.' );
1195
+
1196
+ return this.renderAsync( scene, camera );
1197
+
1198
+ }
1199
+
1200
+ this._renderScene( scene, camera );
1201
+
1202
+ }
1203
+
1204
+ /**
1205
+ * Returns an internal render target which is used when computing the output tone mapping
1206
+ * and color space conversion. Unlike in `WebGLRenderer`, this is done in a separate render
1207
+ * pass and not inline to achieve more correct results.
1208
+ *
1209
+ * @private
1210
+ * @return {?RenderTarget} The render target. The method returns `null` if no output conversion should be applied.
1211
+ */
1212
+ _getFrameBufferTarget() {
1213
+
1214
+ const { currentToneMapping, currentColorSpace } = this;
1215
+
1216
+ const useToneMapping = currentToneMapping !== NoToneMapping;
1217
+ const useColorSpace = currentColorSpace !== ColorManagement.workingColorSpace;
1218
+
1219
+ if ( useToneMapping === false && useColorSpace === false ) return null;
1220
+
1221
+ const { width, height } = this.getDrawingBufferSize( _drawingBufferSize );
1222
+ const { depth, stencil } = this;
1223
+
1224
+ let frameBufferTarget = this._frameBufferTarget;
1225
+
1226
+ if ( frameBufferTarget === null ) {
1227
+
1228
+ frameBufferTarget = new RenderTarget( width, height, {
1229
+ depthBuffer: depth,
1230
+ stencilBuffer: stencil,
1231
+ type: this._colorBufferType,
1232
+ format: RGBAFormat,
1233
+ colorSpace: ColorManagement.workingColorSpace,
1234
+ generateMipmaps: false,
1235
+ minFilter: LinearFilter,
1236
+ magFilter: LinearFilter,
1237
+ samples: this.samples
1238
+ } );
1239
+
1240
+ frameBufferTarget.isPostProcessingRenderTarget = true;
1241
+
1242
+ this._frameBufferTarget = frameBufferTarget;
1243
+
1244
+ }
1245
+
1246
+ const outputRenderTarget = this.getOutputRenderTarget();
1247
+
1248
+ frameBufferTarget.depthBuffer = depth;
1249
+ frameBufferTarget.stencilBuffer = stencil;
1250
+ if ( outputRenderTarget !== null ) {
1251
+
1252
+ frameBufferTarget.setSize( outputRenderTarget.width, outputRenderTarget.height, outputRenderTarget.depth );
1253
+
1254
+ } else {
1255
+
1256
+ frameBufferTarget.setSize( width, height, 1 );
1257
+
1258
+ }
1259
+
1260
+ frameBufferTarget.viewport.copy( this._viewport );
1261
+ frameBufferTarget.scissor.copy( this._scissor );
1262
+ frameBufferTarget.viewport.multiplyScalar( this._pixelRatio );
1263
+ frameBufferTarget.scissor.multiplyScalar( this._pixelRatio );
1264
+ frameBufferTarget.scissorTest = this._scissorTest;
1265
+ frameBufferTarget.multiview = outputRenderTarget !== null ? outputRenderTarget.multiview : false;
1266
+ frameBufferTarget.resolveDepthBuffer = outputRenderTarget !== null ? outputRenderTarget.resolveDepthBuffer : true;
1267
+ frameBufferTarget._autoAllocateDepthBuffer = outputRenderTarget !== null ? outputRenderTarget._autoAllocateDepthBuffer : false;
1268
+
1269
+ return frameBufferTarget;
1270
+
1271
+ }
1272
+
1273
+ /**
1274
+ * Renders the scene or 3D object with the given camera.
1275
+ *
1276
+ * @private
1277
+ * @param {Object3D} scene - The scene or 3D object to render.
1278
+ * @param {Camera} camera - The camera to render the scene with.
1279
+ * @param {boolean} [useFrameBufferTarget=true] - Whether to use a framebuffer target or not.
1280
+ * @return {RenderContext} The current render context.
1281
+ */
1282
+ _renderScene( scene, camera, useFrameBufferTarget = true ) {
1283
+
1284
+ if ( this._isDeviceLost === true ) return;
1285
+
1286
+ const frameBufferTarget = useFrameBufferTarget ? this._getFrameBufferTarget() : null;
1287
+
1288
+ // preserve render tree
1289
+
1290
+ const nodeFrame = this._nodes.nodeFrame;
1291
+
1292
+ const previousRenderId = nodeFrame.renderId;
1293
+ const previousRenderContext = this._currentRenderContext;
1294
+ const previousRenderObjectFunction = this._currentRenderObjectFunction;
1295
+
1296
+ //
1297
+
1298
+ const sceneRef = ( scene.isScene === true ) ? scene : _scene;
1299
+
1300
+ const outputRenderTarget = this._renderTarget || this._outputRenderTarget;
1301
+
1302
+ const activeCubeFace = this._activeCubeFace;
1303
+ const activeMipmapLevel = this._activeMipmapLevel;
1304
+
1305
+ //
1306
+
1307
+ let renderTarget;
1308
+
1309
+ if ( frameBufferTarget !== null ) {
1310
+
1311
+ renderTarget = frameBufferTarget;
1312
+
1313
+ this.setRenderTarget( renderTarget );
1314
+
1315
+ } else {
1316
+
1317
+ renderTarget = outputRenderTarget;
1318
+
1319
+ }
1320
+
1321
+ //
1322
+
1323
+ const renderContext = this._renderContexts.get( scene, camera, renderTarget );
1324
+
1325
+ this._currentRenderContext = renderContext;
1326
+ this._currentRenderObjectFunction = this._renderObjectFunction || this.renderObject;
1327
+
1328
+ //
1329
+
1330
+ this.info.calls ++;
1331
+ this.info.render.calls ++;
1332
+ this.info.render.frameCalls ++;
1333
+
1334
+ nodeFrame.renderId = this.info.calls;
1335
+
1336
+ //
1337
+
1338
+ const coordinateSystem = this.coordinateSystem;
1339
+ const xr = this.xr;
1340
+
1341
+ if ( camera.coordinateSystem !== coordinateSystem && xr.isPresenting === false ) {
1342
+
1343
+ camera.coordinateSystem = coordinateSystem;
1344
+ camera.updateProjectionMatrix();
1345
+
1346
+ if ( camera.isArrayCamera ) {
1347
+
1348
+ for ( const subCamera of camera.cameras ) {
1349
+
1350
+ subCamera.coordinateSystem = coordinateSystem;
1351
+ subCamera.updateProjectionMatrix();
1352
+
1353
+ }
1354
+
1355
+ }
1356
+
1357
+ }
1358
+
1359
+ //
1360
+
1361
+ if ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();
1362
+
1363
+ if ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();
1364
+
1365
+ if ( xr.enabled === true && xr.isPresenting === true ) {
1366
+
1367
+ if ( xr.cameraAutoUpdate === true ) xr.updateCamera( camera );
1368
+ camera = xr.getCamera(); // use XR camera for rendering
1369
+
1370
+ }
1371
+
1372
+ //
1373
+
1374
+ let viewport = this._viewport;
1375
+ let scissor = this._scissor;
1376
+ let pixelRatio = this._pixelRatio;
1377
+
1378
+ if ( renderTarget !== null ) {
1379
+
1380
+ viewport = renderTarget.viewport;
1381
+ scissor = renderTarget.scissor;
1382
+ pixelRatio = 1;
1383
+
1384
+ }
1385
+
1386
+ this.getDrawingBufferSize( _drawingBufferSize );
1387
+
1388
+ _screen.set( 0, 0, _drawingBufferSize.width, _drawingBufferSize.height );
1389
+
1390
+ const minDepth = ( viewport.minDepth === undefined ) ? 0 : viewport.minDepth;
1391
+ const maxDepth = ( viewport.maxDepth === undefined ) ? 1 : viewport.maxDepth;
1392
+
1393
+ renderContext.viewportValue.copy( viewport ).multiplyScalar( pixelRatio ).floor();
1394
+ renderContext.viewportValue.width >>= activeMipmapLevel;
1395
+ renderContext.viewportValue.height >>= activeMipmapLevel;
1396
+ renderContext.viewportValue.minDepth = minDepth;
1397
+ renderContext.viewportValue.maxDepth = maxDepth;
1398
+ renderContext.viewport = renderContext.viewportValue.equals( _screen ) === false;
1399
+
1400
+ renderContext.scissorValue.copy( scissor ).multiplyScalar( pixelRatio ).floor();
1401
+ renderContext.scissor = this._scissorTest && renderContext.scissorValue.equals( _screen ) === false;
1402
+ renderContext.scissorValue.width >>= activeMipmapLevel;
1403
+ renderContext.scissorValue.height >>= activeMipmapLevel;
1404
+
1405
+ if ( ! renderContext.clippingContext ) renderContext.clippingContext = new ClippingContext();
1406
+ renderContext.clippingContext.updateGlobal( sceneRef, camera );
1407
+
1408
+ //
1409
+
1410
+ sceneRef.onBeforeRender( this, scene, camera, renderTarget );
1411
+
1412
+ //
1413
+
1414
+ const frustum = camera.isArrayCamera ? _frustumArray : _frustum;
1415
+
1416
+ if ( ! camera.isArrayCamera ) {
1417
+
1418
+ _projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );
1419
+ frustum.setFromProjectionMatrix( _projScreenMatrix, camera.coordinateSystem, camera.reversedDepth );
1420
+
1421
+ }
1422
+
1423
+ const renderList = this._renderLists.get( scene, camera );
1424
+ renderList.begin();
1425
+
1426
+ this._projectObject( scene, camera, 0, renderList, renderContext.clippingContext );
1427
+
1428
+ renderList.finish();
1429
+
1430
+ if ( this.sortObjects === true ) {
1431
+
1432
+ renderList.sort( this._opaqueSort, this._transparentSort );
1433
+
1434
+ }
1435
+
1436
+ //
1437
+
1438
+ if ( renderTarget !== null ) {
1439
+
1440
+ this._textures.updateRenderTarget( renderTarget, activeMipmapLevel );
1441
+
1442
+ const renderTargetData = this._textures.get( renderTarget );
1443
+
1444
+ renderContext.textures = renderTargetData.textures;
1445
+ renderContext.depthTexture = renderTargetData.depthTexture;
1446
+ renderContext.width = renderTargetData.width;
1447
+ renderContext.height = renderTargetData.height;
1448
+ renderContext.renderTarget = renderTarget;
1449
+ renderContext.depth = renderTarget.depthBuffer;
1450
+ renderContext.stencil = renderTarget.stencilBuffer;
1451
+
1452
+ } else {
1453
+
1454
+ renderContext.textures = null;
1455
+ renderContext.depthTexture = null;
1456
+ renderContext.width = _drawingBufferSize.width;
1457
+ renderContext.height = _drawingBufferSize.height;
1458
+ renderContext.depth = this.depth;
1459
+ renderContext.stencil = this.stencil;
1460
+
1461
+ }
1462
+
1463
+ renderContext.width >>= activeMipmapLevel;
1464
+ renderContext.height >>= activeMipmapLevel;
1465
+ renderContext.activeCubeFace = activeCubeFace;
1466
+ renderContext.activeMipmapLevel = activeMipmapLevel;
1467
+ renderContext.occlusionQueryCount = renderList.occlusionQueryCount;
1468
+
1469
+ //
1470
+
1471
+ renderContext.scissorValue.max( _vector4.set( 0, 0, 0, 0 ) );
1472
+
1473
+ if ( renderContext.scissorValue.x + renderContext.scissorValue.width > renderContext.width ) {
1474
+
1475
+ renderContext.scissorValue.width = Math.max( renderContext.width - renderContext.scissorValue.x, 0 );
1476
+
1477
+ }
1478
+
1479
+ if ( renderContext.scissorValue.y + renderContext.scissorValue.height > renderContext.height ) {
1480
+
1481
+ renderContext.scissorValue.height = Math.max( renderContext.height - renderContext.scissorValue.y, 0 );
1482
+
1483
+ }
1484
+
1485
+ //
1486
+
1487
+ this._background.update( sceneRef, renderList, renderContext );
1488
+
1489
+ //
1490
+
1491
+ renderContext.camera = camera;
1492
+ this.backend.beginRender( renderContext );
1493
+
1494
+ // process render lists
1495
+
1496
+ const {
1497
+ bundles,
1498
+ lightsNode,
1499
+ transparentDoublePass: transparentDoublePassObjects,
1500
+ transparent: transparentObjects,
1501
+ opaque: opaqueObjects
1502
+ } = renderList;
1503
+
1504
+ if ( bundles.length > 0 ) this._renderBundles( bundles, sceneRef, lightsNode );
1505
+ if ( this.opaque === true && opaqueObjects.length > 0 ) this._renderObjects( opaqueObjects, camera, sceneRef, lightsNode );
1506
+ if ( this.transparent === true && transparentObjects.length > 0 ) this._renderTransparents( transparentObjects, transparentDoublePassObjects, camera, sceneRef, lightsNode );
1507
+
1508
+ // finish render pass
1509
+
1510
+ this.backend.finishRender( renderContext );
1511
+
1512
+ // restore render tree
1513
+
1514
+ nodeFrame.renderId = previousRenderId;
1515
+
1516
+ this._currentRenderContext = previousRenderContext;
1517
+ this._currentRenderObjectFunction = previousRenderObjectFunction;
1518
+
1519
+ //
1520
+
1521
+ if ( frameBufferTarget !== null ) {
1522
+
1523
+ this.setRenderTarget( outputRenderTarget, activeCubeFace, activeMipmapLevel );
1524
+
1525
+ this._renderOutput( renderTarget );
1526
+
1527
+ }
1528
+
1529
+ //
1530
+
1531
+ sceneRef.onAfterRender( this, scene, camera, renderTarget );
1532
+
1533
+ //
1534
+
1535
+ return renderContext;
1536
+
1537
+ }
1538
+
1539
+ _setXRLayerSize( width, height ) {
1540
+
1541
+ this._width = width;
1542
+ this._height = height;
1543
+
1544
+ this.setViewport( 0, 0, width, height );
1545
+
1546
+ }
1547
+
1548
+ /**
1549
+ * The output pass performs tone mapping and color space conversion.
1550
+ *
1551
+ * @private
1552
+ * @param {RenderTarget} renderTarget - The current render target.
1553
+ */
1554
+ _renderOutput( renderTarget ) {
1555
+
1556
+ const quad = this._quad;
1557
+
1558
+ if ( this._nodes.hasOutputChange( renderTarget.texture ) ) {
1559
+
1560
+ quad.material.fragmentNode = this._nodes.getOutputNode( renderTarget.texture );
1561
+ quad.material.needsUpdate = true;
1562
+
1563
+ }
1564
+
1565
+ // a clear operation clears the intermediate renderTarget texture, but should not update the screen canvas.
1566
+
1567
+ const currentAutoClear = this.autoClear;
1568
+ const currentXR = this.xr.enabled;
1569
+
1570
+ this.autoClear = false;
1571
+ this.xr.enabled = false;
1572
+
1573
+ this._renderScene( quad, quad.camera, false );
1574
+
1575
+ this.autoClear = currentAutoClear;
1576
+ this.xr.enabled = currentXR;
1577
+
1578
+
1579
+ }
1580
+
1581
+ /**
1582
+ * Returns the maximum available anisotropy for texture filtering.
1583
+ *
1584
+ * @return {number} The maximum available anisotropy.
1585
+ */
1586
+ getMaxAnisotropy() {
1587
+
1588
+ return this.backend.getMaxAnisotropy();
1589
+
1590
+ }
1591
+
1592
+ /**
1593
+ * Returns the active cube face.
1594
+ *
1595
+ * @return {number} The active cube face.
1596
+ */
1597
+ getActiveCubeFace() {
1598
+
1599
+ return this._activeCubeFace;
1600
+
1601
+ }
1602
+
1603
+ /**
1604
+ * Returns the active mipmap level.
1605
+ *
1606
+ * @return {number} The active mipmap level.
1607
+ */
1608
+ getActiveMipmapLevel() {
1609
+
1610
+ return this._activeMipmapLevel;
1611
+
1612
+ }
1613
+
1614
+ /**
1615
+ * Applications are advised to always define the animation loop
1616
+ * with this method and not manually with `requestAnimationFrame()`
1617
+ * for best compatibility.
1618
+ *
1619
+ * @async
1620
+ * @param {?onAnimationCallback} callback - The application's animation loop.
1621
+ * @return {Promise} A Promise that resolves when the set has been executed.
1622
+ */
1623
+ async setAnimationLoop( callback ) {
1624
+
1625
+ if ( this._initialized === false ) await this.init();
1626
+
1627
+ this._animation.setAnimationLoop( callback );
1628
+
1629
+ }
1630
+
1631
+ /**
1632
+ * Can be used to transfer buffer data from a storage buffer attribute
1633
+ * from the GPU to the CPU in context of compute shaders.
1634
+ *
1635
+ * @async
1636
+ * @param {StorageBufferAttribute} attribute - The storage buffer attribute.
1637
+ * @return {Promise<ArrayBuffer>} A promise that resolves with the buffer data when the data are ready.
1638
+ */
1639
+ async getArrayBufferAsync( attribute ) {
1640
+
1641
+ return await this.backend.getArrayBufferAsync( attribute );
1642
+
1643
+ }
1644
+
1645
+ /**
1646
+ * Returns the rendering context.
1647
+ *
1648
+ * @return {GPUCanvasContext|WebGL2RenderingContext} The rendering context.
1649
+ */
1650
+ getContext() {
1651
+
1652
+ return this.backend.getContext();
1653
+
1654
+ }
1655
+
1656
+ /**
1657
+ * Returns the pixel ratio.
1658
+ *
1659
+ * @return {number} The pixel ratio.
1660
+ */
1661
+ getPixelRatio() {
1662
+
1663
+ return this._pixelRatio;
1664
+
1665
+ }
1666
+
1667
+ /**
1668
+ * Returns the drawing buffer size in physical pixels. This method honors the pixel ratio.
1669
+ *
1670
+ * @param {Vector2} target - The method writes the result in this target object.
1671
+ * @return {Vector2} The drawing buffer size.
1672
+ */
1673
+ getDrawingBufferSize( target ) {
1674
+
1675
+ return target.set( this._width * this._pixelRatio, this._height * this._pixelRatio ).floor();
1676
+
1677
+ }
1678
+
1679
+ /**
1680
+ * Returns the renderer's size in logical pixels. This method does not honor the pixel ratio.
1681
+ *
1682
+ * @param {Vector2} target - The method writes the result in this target object.
1683
+ * @return {Vector2} The renderer's size in logical pixels.
1684
+ */
1685
+ getSize( target ) {
1686
+
1687
+ return target.set( this._width, this._height );
1688
+
1689
+ }
1690
+
1691
+ /**
1692
+ * Sets the given pixel ratio and resizes the canvas if necessary.
1693
+ *
1694
+ * @param {number} [value=1] - The pixel ratio.
1695
+ */
1696
+ setPixelRatio( value = 1 ) {
1697
+
1698
+ if ( this._pixelRatio === value ) return;
1699
+
1700
+ this._pixelRatio = value;
1701
+
1702
+ this.setSize( this._width, this._height, false );
1703
+
1704
+ }
1705
+
1706
+ /**
1707
+ * This method allows to define the drawing buffer size by specifying
1708
+ * width, height and pixel ratio all at once. The size of the drawing
1709
+ * buffer is computed with this formula:
1710
+ * ```js
1711
+ * size.x = width * pixelRatio;
1712
+ * size.y = height * pixelRatio;
1713
+ * ```
1714
+ *
1715
+ * @param {number} width - The width in logical pixels.
1716
+ * @param {number} height - The height in logical pixels.
1717
+ * @param {number} pixelRatio - The pixel ratio.
1718
+ */
1719
+ setDrawingBufferSize( width, height, pixelRatio ) {
1720
+
1721
+ // Renderer can't be resized while presenting in XR.
1722
+ if ( this.xr && this.xr.isPresenting ) return;
1723
+
1724
+ this._width = width;
1725
+ this._height = height;
1726
+
1727
+ this._pixelRatio = pixelRatio;
1728
+
1729
+ this.domElement.width = Math.floor( width * pixelRatio );
1730
+ this.domElement.height = Math.floor( height * pixelRatio );
1731
+
1732
+ this.setViewport( 0, 0, width, height );
1733
+
1734
+ if ( this._initialized ) this.backend.updateSize();
1735
+
1736
+ }
1737
+
1738
+ /**
1739
+ * Sets the size of the renderer.
1740
+ *
1741
+ * @param {number} width - The width in logical pixels.
1742
+ * @param {number} height - The height in logical pixels.
1743
+ * @param {boolean} [updateStyle=true] - Whether to update the `style` attribute of the canvas or not.
1744
+ */
1745
+ setSize( width, height, updateStyle = true ) {
1746
+
1747
+ // Renderer can't be resized while presenting in XR.
1748
+ if ( this.xr && this.xr.isPresenting ) return;
1749
+
1750
+ this._width = width;
1751
+ this._height = height;
1752
+
1753
+ this.domElement.width = Math.floor( width * this._pixelRatio );
1754
+ this.domElement.height = Math.floor( height * this._pixelRatio );
1755
+
1756
+ if ( updateStyle === true ) {
1757
+
1758
+ this.domElement.style.width = width + 'px';
1759
+ this.domElement.style.height = height + 'px';
1760
+
1761
+ }
1762
+
1763
+ this.setViewport( 0, 0, width, height );
1764
+
1765
+ if ( this._initialized ) this.backend.updateSize();
1766
+
1767
+ }
1768
+
1769
+ /**
1770
+ * Defines a manual sort function for the opaque render list.
1771
+ * Pass `null` to use the default sort.
1772
+ *
1773
+ * @param {Function} method - The sort function.
1774
+ */
1775
+ setOpaqueSort( method ) {
1776
+
1777
+ this._opaqueSort = method;
1778
+
1779
+ }
1780
+
1781
+ /**
1782
+ * Defines a manual sort function for the transparent render list.
1783
+ * Pass `null` to use the default sort.
1784
+ *
1785
+ * @param {Function} method - The sort function.
1786
+ */
1787
+ setTransparentSort( method ) {
1788
+
1789
+ this._transparentSort = method;
1790
+
1791
+ }
1792
+
1793
+ /**
1794
+ * Returns the scissor rectangle.
1795
+ *
1796
+ * @param {Vector4} target - The method writes the result in this target object.
1797
+ * @return {Vector4} The scissor rectangle.
1798
+ */
1799
+ getScissor( target ) {
1800
+
1801
+ const scissor = this._scissor;
1802
+
1803
+ target.x = scissor.x;
1804
+ target.y = scissor.y;
1805
+ target.width = scissor.width;
1806
+ target.height = scissor.height;
1807
+
1808
+ return target;
1809
+
1810
+ }
1811
+
1812
+ /**
1813
+ * Defines the scissor rectangle.
1814
+ *
1815
+ * @param {number | Vector4} x - The horizontal coordinate for the lower left corner of the box in logical pixel unit.
1816
+ * Instead of passing four arguments, the method also works with a single four-dimensional vector.
1817
+ * @param {number} y - The vertical coordinate for the lower left corner of the box in logical pixel unit.
1818
+ * @param {number} width - The width of the scissor box in logical pixel unit.
1819
+ * @param {number} height - The height of the scissor box in logical pixel unit.
1820
+ */
1821
+ setScissor( x, y, width, height ) {
1822
+
1823
+ const scissor = this._scissor;
1824
+
1825
+ if ( x.isVector4 ) {
1826
+
1827
+ scissor.copy( x );
1828
+
1829
+ } else {
1830
+
1831
+ scissor.set( x, y, width, height );
1832
+
1833
+ }
1834
+
1835
+ }
1836
+
1837
+ /**
1838
+ * Returns the scissor test value.
1839
+ *
1840
+ * @return {boolean} Whether the scissor test should be enabled or not.
1841
+ */
1842
+ getScissorTest() {
1843
+
1844
+ return this._scissorTest;
1845
+
1846
+ }
1847
+
1848
+ /**
1849
+ * Defines the scissor test.
1850
+ *
1851
+ * @param {boolean} boolean - Whether the scissor test should be enabled or not.
1852
+ */
1853
+ setScissorTest( boolean ) {
1854
+
1855
+ this._scissorTest = boolean;
1856
+
1857
+ this.backend.setScissorTest( boolean );
1858
+
1859
+ }
1860
+
1861
+ /**
1862
+ * Returns the viewport definition.
1863
+ *
1864
+ * @param {Vector4} target - The method writes the result in this target object.
1865
+ * @return {Vector4} The viewport definition.
1866
+ */
1867
+ getViewport( target ) {
1868
+
1869
+ return target.copy( this._viewport );
1870
+
1871
+ }
1872
+
1873
+ /**
1874
+ * Defines the viewport.
1875
+ *
1876
+ * @param {number | Vector4} x - The horizontal coordinate for the lower left corner of the viewport origin in logical pixel unit.
1877
+ * @param {number} y - The vertical coordinate for the lower left corner of the viewport origin in logical pixel unit.
1878
+ * @param {number} width - The width of the viewport in logical pixel unit.
1879
+ * @param {number} height - The height of the viewport in logical pixel unit.
1880
+ * @param {number} minDepth - The minimum depth value of the viewport. WebGPU only.
1881
+ * @param {number} maxDepth - The maximum depth value of the viewport. WebGPU only.
1882
+ */
1883
+ setViewport( x, y, width, height, minDepth = 0, maxDepth = 1 ) {
1884
+
1885
+ const viewport = this._viewport;
1886
+
1887
+ if ( x.isVector4 ) {
1888
+
1889
+ viewport.copy( x );
1890
+
1891
+ } else {
1892
+
1893
+ viewport.set( x, y, width, height );
1894
+
1895
+ }
1896
+
1897
+ viewport.minDepth = minDepth;
1898
+ viewport.maxDepth = maxDepth;
1899
+
1900
+ }
1901
+
1902
+ /**
1903
+ * Returns the clear color.
1904
+ *
1905
+ * @param {Color} target - The method writes the result in this target object.
1906
+ * @return {Color} The clear color.
1907
+ */
1908
+ getClearColor( target ) {
1909
+
1910
+ return target.copy( this._clearColor );
1911
+
1912
+ }
1913
+
1914
+ /**
1915
+ * Defines the clear color and optionally the clear alpha.
1916
+ *
1917
+ * @param {Color} color - The clear color.
1918
+ * @param {number} [alpha=1] - The clear alpha.
1919
+ */
1920
+ setClearColor( color, alpha = 1 ) {
1921
+
1922
+ this._clearColor.set( color );
1923
+ this._clearColor.a = alpha;
1924
+
1925
+ }
1926
+
1927
+ /**
1928
+ * Returns the clear alpha.
1929
+ *
1930
+ * @return {number} The clear alpha.
1931
+ */
1932
+ getClearAlpha() {
1933
+
1934
+ return this._clearColor.a;
1935
+
1936
+ }
1937
+
1938
+ /**
1939
+ * Defines the clear alpha.
1940
+ *
1941
+ * @param {number} alpha - The clear alpha.
1942
+ */
1943
+ setClearAlpha( alpha ) {
1944
+
1945
+ this._clearColor.a = alpha;
1946
+
1947
+ }
1948
+
1949
+ /**
1950
+ * Returns the clear depth.
1951
+ *
1952
+ * @return {number} The clear depth.
1953
+ */
1954
+ getClearDepth() {
1955
+
1956
+ return this._clearDepth;
1957
+
1958
+ }
1959
+
1960
+ /**
1961
+ * Defines the clear depth.
1962
+ *
1963
+ * @param {number} depth - The clear depth.
1964
+ */
1965
+ setClearDepth( depth ) {
1966
+
1967
+ this._clearDepth = depth;
1968
+
1969
+ }
1970
+
1971
+ /**
1972
+ * Returns the clear stencil.
1973
+ *
1974
+ * @return {number} The clear stencil.
1975
+ */
1976
+ getClearStencil() {
1977
+
1978
+ return this._clearStencil;
1979
+
1980
+ }
1981
+
1982
+ /**
1983
+ * Defines the clear stencil.
1984
+ *
1985
+ * @param {number} stencil - The clear stencil.
1986
+ */
1987
+ setClearStencil( stencil ) {
1988
+
1989
+ this._clearStencil = stencil;
1990
+
1991
+ }
1992
+
1993
+ /**
1994
+ * This method performs an occlusion query for the given 3D object.
1995
+ * It returns `true` if the given 3D object is fully occluded by other
1996
+ * 3D objects in the scene.
1997
+ *
1998
+ * @param {Object3D} object - The 3D object to test.
1999
+ * @return {boolean} Whether the 3D object is fully occluded or not.
2000
+ */
2001
+ isOccluded( object ) {
2002
+
2003
+ const renderContext = this._currentRenderContext;
2004
+
2005
+ return renderContext && this.backend.isOccluded( renderContext, object );
2006
+
2007
+ }
2008
+
2009
+ /**
2010
+ * Performs a manual clear operation. This method ignores `autoClear` properties.
2011
+ *
2012
+ * @param {boolean} [color=true] - Whether the color buffer should be cleared or not.
2013
+ * @param {boolean} [depth=true] - Whether the depth buffer should be cleared or not.
2014
+ * @param {boolean} [stencil=true] - Whether the stencil buffer should be cleared or not.
2015
+ * @return {Promise} A Promise that resolves when the clear operation has been executed.
2016
+ * Only returned when the renderer has not been initialized.
2017
+ */
2018
+ clear( color = true, depth = true, stencil = true ) {
2019
+
2020
+ if ( this._initialized === false ) {
2021
+
2022
+ warn( 'Renderer: .clear() called before the backend is initialized. Try using .clearAsync() instead.' );
2023
+
2024
+ return this.clearAsync( color, depth, stencil );
2025
+
2026
+ }
2027
+
2028
+ const renderTarget = this._renderTarget || this._getFrameBufferTarget();
2029
+
2030
+ let renderContext = null;
2031
+
2032
+ if ( renderTarget !== null ) {
2033
+
2034
+ this._textures.updateRenderTarget( renderTarget );
2035
+
2036
+ const renderTargetData = this._textures.get( renderTarget );
2037
+
2038
+ renderContext = this._renderContexts.getForClear( renderTarget );
2039
+ renderContext.textures = renderTargetData.textures;
2040
+ renderContext.depthTexture = renderTargetData.depthTexture;
2041
+ renderContext.width = renderTargetData.width;
2042
+ renderContext.height = renderTargetData.height;
2043
+ renderContext.renderTarget = renderTarget;
2044
+ renderContext.depth = renderTarget.depthBuffer;
2045
+ renderContext.stencil = renderTarget.stencilBuffer;
2046
+ // #30329
2047
+ renderContext.clearColorValue = this.backend.getClearColor();
2048
+ renderContext.activeCubeFace = this.getActiveCubeFace();
2049
+ renderContext.activeMipmapLevel = this.getActiveMipmapLevel();
2050
+
2051
+ }
2052
+
2053
+ this.backend.clear( color, depth, stencil, renderContext );
2054
+
2055
+ if ( renderTarget !== null && this._renderTarget === null ) {
2056
+
2057
+ this._renderOutput( renderTarget );
2058
+
2059
+ }
2060
+
2061
+ }
2062
+
2063
+ /**
2064
+ * Performs a manual clear operation of the color buffer. This method ignores `autoClear` properties.
2065
+ *
2066
+ * @return {Promise} A Promise that resolves when the clear operation has been executed.
2067
+ * Only returned when the renderer has not been initialized.
2068
+ */
2069
+ clearColor() {
2070
+
2071
+ return this.clear( true, false, false );
2072
+
2073
+ }
2074
+
2075
+ /**
2076
+ * Performs a manual clear operation of the depth buffer. This method ignores `autoClear` properties.
2077
+ *
2078
+ * @return {Promise} A Promise that resolves when the clear operation has been executed.
2079
+ * Only returned when the renderer has not been initialized.
2080
+ */
2081
+ clearDepth() {
2082
+
2083
+ return this.clear( false, true, false );
2084
+
2085
+ }
2086
+
2087
+ /**
2088
+ * Performs a manual clear operation of the stencil buffer. This method ignores `autoClear` properties.
2089
+ *
2090
+ * @return {Promise} A Promise that resolves when the clear operation has been executed.
2091
+ * Only returned when the renderer has not been initialized.
2092
+ */
2093
+ clearStencil() {
2094
+
2095
+ return this.clear( false, false, true );
2096
+
2097
+ }
2098
+
2099
+ /**
2100
+ * Async version of {@link Renderer#clear}.
2101
+ *
2102
+ * @async
2103
+ * @param {boolean} [color=true] - Whether the color buffer should be cleared or not.
2104
+ * @param {boolean} [depth=true] - Whether the depth buffer should be cleared or not.
2105
+ * @param {boolean} [stencil=true] - Whether the stencil buffer should be cleared or not.
2106
+ * @return {Promise} A Promise that resolves when the clear operation has been executed.
2107
+ */
2108
+ async clearAsync( color = true, depth = true, stencil = true ) {
2109
+
2110
+ if ( this._initialized === false ) await this.init();
2111
+
2112
+ this.clear( color, depth, stencil );
2113
+
2114
+ }
2115
+
2116
+ /**
2117
+ * Async version of {@link Renderer#clearColor}.
2118
+ *
2119
+ * @async
2120
+ * @return {Promise} A Promise that resolves when the clear operation has been executed.
2121
+ */
2122
+ async clearColorAsync() {
2123
+
2124
+ this.clearAsync( true, false, false );
2125
+
2126
+ }
2127
+
2128
+ /**
2129
+ * Async version of {@link Renderer#clearDepth}.
2130
+ *
2131
+ * @async
2132
+ * @return {Promise} A Promise that resolves when the clear operation has been executed.
2133
+ */
2134
+ async clearDepthAsync() {
2135
+
2136
+ this.clearAsync( false, true, false );
2137
+
2138
+ }
2139
+
2140
+ /**
2141
+ * Async version of {@link Renderer#clearStencil}.
2142
+ *
2143
+ * @async
2144
+ * @return {Promise} A Promise that resolves when the clear operation has been executed.
2145
+ */
2146
+ async clearStencilAsync() {
2147
+
2148
+ this.clearAsync( false, false, true );
2149
+
2150
+ }
2151
+
2152
+ /**
2153
+ * The current tone mapping of the renderer. When not producing screen output,
2154
+ * the tone mapping is always `NoToneMapping`.
2155
+ *
2156
+ * @type {number}
2157
+ */
2158
+ get currentToneMapping() {
2159
+
2160
+ return this.isOutputTarget ? this.toneMapping : NoToneMapping;
2161
+
2162
+ }
2163
+
2164
+ /**
2165
+ * The current color space of the renderer. When not producing screen output,
2166
+ * the color space is always the working color space.
2167
+ *
2168
+ * @type {string}
2169
+ */
2170
+ get currentColorSpace() {
2171
+
2172
+ return this.isOutputTarget ? this.outputColorSpace : ColorManagement.workingColorSpace;
2173
+
2174
+ }
2175
+
2176
+ /**
2177
+ * Returns `true` if the rendering settings are set to screen output.
2178
+ *
2179
+ * @returns {boolean} True if the current render target is the same of output render target or `null`, otherwise false.
2180
+ */
2181
+ get isOutputTarget() {
2182
+
2183
+ return this._renderTarget === this._outputRenderTarget || this._renderTarget === null;
2184
+
2185
+ }
2186
+
2187
+ /**
2188
+ * Frees all internal resources of the renderer. Call this method if the renderer
2189
+ * is no longer in use by your app.
2190
+ */
2191
+ dispose() {
2192
+
2193
+ if ( this._initialized === true ) {
2194
+
2195
+ this.info.dispose();
2196
+ this.backend.dispose();
2197
+
2198
+ this._animation.dispose();
2199
+ this._objects.dispose();
2200
+ this._pipelines.dispose();
2201
+ this._nodes.dispose();
2202
+ this._bindings.dispose();
2203
+ this._renderLists.dispose();
2204
+ this._renderContexts.dispose();
2205
+ this._textures.dispose();
2206
+
2207
+ if ( this._frameBufferTarget !== null ) this._frameBufferTarget.dispose();
2208
+
2209
+ Object.values( this.backend.timestampQueryPool ).forEach( queryPool => {
2210
+
2211
+ if ( queryPool !== null ) queryPool.dispose();
2212
+
2213
+ } );
2214
+
2215
+ }
2216
+
2217
+ this.setRenderTarget( null );
2218
+ this.setAnimationLoop( null );
2219
+
2220
+ }
2221
+
2222
+ /**
2223
+ * Sets the given render target. Calling this method means the renderer does not
2224
+ * target the default framebuffer (meaning the canvas) anymore but a custom framebuffer.
2225
+ * Use `null` as the first argument to reset the state.
2226
+ *
2227
+ * @param {?RenderTarget} renderTarget - The render target to set.
2228
+ * @param {number} [activeCubeFace=0] - The active cube face.
2229
+ * @param {number} [activeMipmapLevel=0] - The active mipmap level.
2230
+ */
2231
+ setRenderTarget( renderTarget, activeCubeFace = 0, activeMipmapLevel = 0 ) {
2232
+
2233
+ this._renderTarget = renderTarget;
2234
+ this._activeCubeFace = activeCubeFace;
2235
+ this._activeMipmapLevel = activeMipmapLevel;
2236
+
2237
+ }
2238
+
2239
+ /**
2240
+ * Returns the current render target.
2241
+ *
2242
+ * @return {?RenderTarget} The render target. Returns `null` if no render target is set.
2243
+ */
2244
+ getRenderTarget() {
2245
+
2246
+ return this._renderTarget;
2247
+
2248
+ }
2249
+
2250
+ /**
2251
+ * Sets the output render target for the renderer.
2252
+ *
2253
+ * @param {Object} renderTarget - The render target to set as the output target.
2254
+ */
2255
+ setOutputRenderTarget( renderTarget ) {
2256
+
2257
+ this._outputRenderTarget = renderTarget;
2258
+
2259
+ }
2260
+
2261
+ /**
2262
+ * Returns the current output target.
2263
+ *
2264
+ * @return {?RenderTarget} The current output render target. Returns `null` if no output target is set.
2265
+ */
2266
+ getOutputRenderTarget() {
2267
+
2268
+ return this._outputRenderTarget;
2269
+
2270
+ }
2271
+
2272
+ /**
2273
+ * Resets the renderer to the initial state before WebXR started.
2274
+ *
2275
+ */
2276
+ _resetXRState() {
2277
+
2278
+ this.backend.setXRTarget( null );
2279
+ this.setOutputRenderTarget( null );
2280
+ this.setRenderTarget( null );
2281
+
2282
+ this._frameBufferTarget.dispose();
2283
+ this._frameBufferTarget = null;
2284
+
2285
+ }
2286
+
2287
+ /**
2288
+ * Callback for {@link Renderer#setRenderObjectFunction}.
2289
+ *
2290
+ * @callback renderObjectFunction
2291
+ * @param {Object3D} object - The 3D object.
2292
+ * @param {Scene} scene - The scene the 3D object belongs to.
2293
+ * @param {Camera} camera - The camera the object should be rendered with.
2294
+ * @param {BufferGeometry} geometry - The object's geometry.
2295
+ * @param {Material} material - The object's material.
2296
+ * @param {?Object} group - Only relevant for objects using multiple materials. This represents a group entry from the respective `BufferGeometry`.
2297
+ * @param {LightsNode} lightsNode - The current lights node.
2298
+ * @param {ClippingContext} clippingContext - The clipping context.
2299
+ * @param {?string} [passId=null] - An optional ID for identifying the pass.
2300
+ */
2301
+
2302
+ /**
2303
+ * Sets the given render object function. Calling this method overwrites the default implementation
2304
+ * which is {@link Renderer#renderObject}. Defining a custom function can be useful
2305
+ * if you want to modify the way objects are rendered. For example you can define things like "every
2306
+ * object that has material of a certain type should perform a pre-pass with a special overwrite material".
2307
+ * The custom function must always call `renderObject()` in its implementation.
2308
+ *
2309
+ * Use `null` as the first argument to reset the state.
2310
+ *
2311
+ * @param {?renderObjectFunction} renderObjectFunction - The render object function.
2312
+ */
2313
+ setRenderObjectFunction( renderObjectFunction ) {
2314
+
2315
+ this._renderObjectFunction = renderObjectFunction;
2316
+
2317
+ }
2318
+
2319
+ /**
2320
+ * Returns the current render object function.
2321
+ *
2322
+ * @return {?Function} The current render object function. Returns `null` if no function is set.
2323
+ */
2324
+ getRenderObjectFunction() {
2325
+
2326
+ return this._renderObjectFunction;
2327
+
2328
+ }
2329
+
2330
+ /**
2331
+ * Execute a single or an array of compute nodes. This method can only be called
2332
+ * if the renderer has been initialized.
2333
+ *
2334
+ * @param {Node|Array<Node>} computeNodes - The compute node(s).
2335
+ * @param {?(Array<number>|number)} [dispatchSizeOrCount=null] - Array with [ x, y, z ] values for dispatch or a single number for the count.
2336
+ * @return {Promise|undefined} A Promise that resolve when the compute has finished. Only returned when the renderer has not been initialized.
2337
+ */
2338
+ compute( computeNodes, dispatchSizeOrCount = null ) {
2339
+
2340
+ if ( this._isDeviceLost === true ) return;
2341
+
2342
+ if ( this._initialized === false ) {
2343
+
2344
+ warn( 'Renderer: .compute() called before the backend is initialized. Try using .computeAsync() instead.' );
2345
+
2346
+ return this.computeAsync( computeNodes );
2347
+
2348
+ }
2349
+
2350
+ //
2351
+
2352
+ const nodeFrame = this._nodes.nodeFrame;
2353
+
2354
+ const previousRenderId = nodeFrame.renderId;
2355
+
2356
+ //
2357
+
2358
+ this.info.calls ++;
2359
+ this.info.compute.calls ++;
2360
+ this.info.compute.frameCalls ++;
2361
+
2362
+ nodeFrame.renderId = this.info.calls;
2363
+
2364
+ //
2365
+
2366
+ const backend = this.backend;
2367
+ const pipelines = this._pipelines;
2368
+ const bindings = this._bindings;
2369
+ const nodes = this._nodes;
2370
+
2371
+ const computeList = Array.isArray( computeNodes ) ? computeNodes : [ computeNodes ];
2372
+
2373
+ if ( computeList[ 0 ] === undefined || computeList[ 0 ].isComputeNode !== true ) {
2374
+
2375
+ throw new Error( 'THREE.Renderer: .compute() expects a ComputeNode.' );
2376
+
2377
+ }
2378
+
2379
+ backend.beginCompute( computeNodes );
2380
+
2381
+ for ( const computeNode of computeList ) {
2382
+
2383
+ // onInit
2384
+
2385
+ if ( pipelines.has( computeNode ) === false ) {
2386
+
2387
+ const dispose = () => {
2388
+
2389
+ computeNode.removeEventListener( 'dispose', dispose );
2390
+
2391
+ pipelines.delete( computeNode );
2392
+ bindings.deleteForCompute( computeNode );
2393
+ nodes.delete( computeNode );
2394
+
2395
+ };
2396
+
2397
+ computeNode.addEventListener( 'dispose', dispose );
2398
+
2399
+ //
2400
+
2401
+ const onInitFn = computeNode.onInitFunction;
2402
+
2403
+ if ( onInitFn !== null ) {
2404
+
2405
+ onInitFn.call( computeNode, { renderer: this } );
2406
+
2407
+ }
2408
+
2409
+ }
2410
+
2411
+ nodes.updateForCompute( computeNode );
2412
+ bindings.updateForCompute( computeNode );
2413
+
2414
+ const computeBindings = bindings.getForCompute( computeNode );
2415
+ const computePipeline = pipelines.getForCompute( computeNode, computeBindings );
2416
+
2417
+ backend.compute( computeNodes, computeNode, computeBindings, computePipeline, dispatchSizeOrCount );
2418
+
2419
+ }
2420
+
2421
+ backend.finishCompute( computeNodes );
2422
+
2423
+ //
2424
+
2425
+ nodeFrame.renderId = previousRenderId;
2426
+
2427
+ }
2428
+
2429
+ /**
2430
+ * Execute a single or an array of compute nodes.
2431
+ *
2432
+ * @async
2433
+ * @param {Node|Array<Node>} computeNodes - The compute node(s).
2434
+ * @param {?(Array<number>|number)} [dispatchSizeOrCount=null] - Array with [ x, y, z ] values for dispatch or a single number for the count.
2435
+ * @return {Promise} A Promise that resolve when the compute has finished.
2436
+ */
2437
+ async computeAsync( computeNodes, dispatchSizeOrCount = null ) {
2438
+
2439
+ if ( this._initialized === false ) await this.init();
2440
+
2441
+ this.compute( computeNodes, dispatchSizeOrCount );
2442
+
2443
+ }
2444
+
2445
+ /**
2446
+ * Checks if the given feature is supported by the selected backend.
2447
+ *
2448
+ * @async
2449
+ * @param {string} name - The feature's name.
2450
+ * @return {Promise<boolean>} A Promise that resolves with a bool that indicates whether the feature is supported or not.
2451
+ */
2452
+ async hasFeatureAsync( name ) {
2453
+
2454
+ if ( this._initialized === false ) await this.init();
2455
+
2456
+ return this.backend.hasFeature( name );
2457
+
2458
+ }
2459
+
2460
+ async resolveTimestampsAsync( type = 'render' ) {
2461
+
2462
+ if ( this._initialized === false ) await this.init();
2463
+
2464
+ return this.backend.resolveTimestampsAsync( type );
2465
+
2466
+ }
2467
+
2468
+ /**
2469
+ * Checks if the given feature is supported by the selected backend. If the
2470
+ * renderer has not been initialized, this method always returns `false`.
2471
+ *
2472
+ * @param {string} name - The feature's name.
2473
+ * @return {boolean} Whether the feature is supported or not.
2474
+ */
2475
+ hasFeature( name ) {
2476
+
2477
+ if ( this._initialized === false ) {
2478
+
2479
+ warn( 'Renderer: .hasFeature() called before the backend is initialized. Try using .hasFeatureAsync() instead.' );
2480
+
2481
+ return false;
2482
+
2483
+ }
2484
+
2485
+ return this.backend.hasFeature( name );
2486
+
2487
+ }
2488
+
2489
+ /**
2490
+ * Returns `true` when the renderer has been initialized.
2491
+ *
2492
+ * @return {boolean} Whether the renderer has been initialized or not.
2493
+ */
2494
+ hasInitialized() {
2495
+
2496
+ return this._initialized;
2497
+
2498
+ }
2499
+
2500
+ /**
2501
+ * Initializes the given textures. Useful for preloading a texture rather than waiting until first render
2502
+ * (which can cause noticeable lags due to decode and GPU upload overhead).
2503
+ *
2504
+ * @async
2505
+ * @param {Texture} texture - The texture.
2506
+ * @return {Promise} A Promise that resolves when the texture has been initialized.
2507
+ */
2508
+ async initTextureAsync( texture ) {
2509
+
2510
+ if ( this._initialized === false ) await this.init();
2511
+
2512
+ this._textures.updateTexture( texture );
2513
+
2514
+ }
2515
+
2516
+ /**
2517
+ * Initializes the given texture. Useful for preloading a texture rather than waiting until first render
2518
+ * (which can cause noticeable lags due to decode and GPU upload overhead).
2519
+ *
2520
+ * This method can only be used if the renderer has been initialized.
2521
+ *
2522
+ * @param {Texture} texture - The texture.
2523
+ */
2524
+ initTexture( texture ) {
2525
+
2526
+ if ( this._initialized === false ) {
2527
+
2528
+ warn( 'Renderer: .initTexture() called before the backend is initialized. Try using .initTextureAsync() instead.' );
2529
+
2530
+ }
2531
+
2532
+ this._textures.updateTexture( texture );
2533
+
2534
+ }
2535
+
2536
+ /**
2537
+ * Copies the current bound framebuffer into the given texture.
2538
+ *
2539
+ * @param {FramebufferTexture} framebufferTexture - The texture.
2540
+ * @param {?(Vector2|Vector4)} [rectangle=null] - A two or four dimensional vector that defines the rectangular portion of the framebuffer that should be copied.
2541
+ */
2542
+ copyFramebufferToTexture( framebufferTexture, rectangle = null ) {
2543
+
2544
+ if ( rectangle !== null ) {
2545
+
2546
+ if ( rectangle.isVector2 ) {
2547
+
2548
+ rectangle = _vector4.set( rectangle.x, rectangle.y, framebufferTexture.image.width, framebufferTexture.image.height ).floor();
2549
+
2550
+ } else if ( rectangle.isVector4 ) {
2551
+
2552
+ rectangle = _vector4.copy( rectangle ).floor();
2553
+
2554
+ } else {
2555
+
2556
+ error( 'Renderer.copyFramebufferToTexture: Invalid rectangle.' );
2557
+
2558
+ return;
2559
+
2560
+ }
2561
+
2562
+ } else {
2563
+
2564
+ rectangle = _vector4.set( 0, 0, framebufferTexture.image.width, framebufferTexture.image.height );
2565
+
2566
+ }
2567
+
2568
+ //
2569
+
2570
+ let renderContext = this._currentRenderContext;
2571
+ let renderTarget;
2572
+
2573
+ if ( renderContext !== null ) {
2574
+
2575
+ renderTarget = renderContext.renderTarget;
2576
+
2577
+ } else {
2578
+
2579
+ renderTarget = this._renderTarget || this._getFrameBufferTarget();
2580
+
2581
+ if ( renderTarget !== null ) {
2582
+
2583
+ this._textures.updateRenderTarget( renderTarget );
2584
+
2585
+ renderContext = this._textures.get( renderTarget );
2586
+
2587
+ }
2588
+
2589
+ }
2590
+
2591
+ //
2592
+
2593
+ this._textures.updateTexture( framebufferTexture, { renderTarget } );
2594
+
2595
+ this.backend.copyFramebufferToTexture( framebufferTexture, renderContext, rectangle );
2596
+
2597
+ }
2598
+
2599
+ /**
2600
+ * Copies data of the given source texture into a destination texture.
2601
+ *
2602
+ * @param {Texture} srcTexture - The source texture.
2603
+ * @param {Texture} dstTexture - The destination texture.
2604
+ * @param {Box2|Box3} [srcRegion=null] - A bounding box which describes the source region. Can be two or three-dimensional.
2605
+ * @param {Vector2|Vector3} [dstPosition=null] - A vector that represents the origin of the destination region. Can be two or three-dimensional.
2606
+ * @param {number} [srcLevel=0] - The source mip level to copy from.
2607
+ * @param {number} [dstLevel=0] - The destination mip level to copy to.
2608
+ */
2609
+ copyTextureToTexture( srcTexture, dstTexture, srcRegion = null, dstPosition = null, srcLevel = 0, dstLevel = 0 ) {
2610
+
2611
+ this._textures.updateTexture( srcTexture );
2612
+ this._textures.updateTexture( dstTexture );
2613
+
2614
+ this.backend.copyTextureToTexture( srcTexture, dstTexture, srcRegion, dstPosition, srcLevel, dstLevel );
2615
+
2616
+ }
2617
+
2618
+ /**
2619
+ * Reads pixel data from the given render target.
2620
+ *
2621
+ * @async
2622
+ * @param {RenderTarget} renderTarget - The render target to read from.
2623
+ * @param {number} x - The `x` coordinate of the copy region's origin.
2624
+ * @param {number} y - The `y` coordinate of the copy region's origin.
2625
+ * @param {number} width - The width of the copy region.
2626
+ * @param {number} height - The height of the copy region.
2627
+ * @param {number} [textureIndex=0] - The texture index of a MRT render target.
2628
+ * @param {number} [faceIndex=0] - The active cube face index.
2629
+ * @return {Promise<TypedArray>} A Promise that resolves when the read has been finished. The resolve provides the read data as a typed array.
2630
+ */
2631
+ async readRenderTargetPixelsAsync( renderTarget, x, y, width, height, textureIndex = 0, faceIndex = 0 ) {
2632
+
2633
+ return this.backend.copyTextureToBuffer( renderTarget.textures[ textureIndex ], x, y, width, height, faceIndex );
2634
+
2635
+ }
2636
+
2637
+ /**
2638
+ * Analyzes the given 3D object's hierarchy and builds render lists from the
2639
+ * processed hierarchy.
2640
+ *
2641
+ * @param {Object3D} object - The 3D object to process (usually a scene).
2642
+ * @param {Camera} camera - The camera the object is rendered with.
2643
+ * @param {number} groupOrder - The group order is derived from the `renderOrder` of groups and is used to group 3D objects within groups.
2644
+ * @param {RenderList} renderList - The current render list.
2645
+ * @param {ClippingContext} clippingContext - The current clipping context.
2646
+ */
2647
+ _projectObject( object, camera, groupOrder, renderList, clippingContext ) {
2648
+
2649
+ if ( object.visible === false ) return;
2650
+
2651
+ const visible = object.layers.test( camera.layers );
2652
+
2653
+ if ( visible ) {
2654
+
2655
+ if ( object.isGroup ) {
2656
+
2657
+ groupOrder = object.renderOrder;
2658
+
2659
+ if ( object.isClippingGroup && object.enabled ) clippingContext = clippingContext.getGroupContext( object );
2660
+
2661
+ } else if ( object.isLOD ) {
2662
+
2663
+ if ( object.autoUpdate === true ) object.update( camera );
2664
+
2665
+ } else if ( object.isLight ) {
2666
+
2667
+ renderList.pushLight( object );
2668
+
2669
+ } else if ( object.isSprite ) {
2670
+
2671
+ const frustum = camera.isArrayCamera ? _frustumArray : _frustum;
2672
+
2673
+ if ( ! object.frustumCulled || frustum.intersectsSprite( object, camera ) ) {
2674
+
2675
+ if ( this.sortObjects === true ) {
2676
+
2677
+ _vector4.setFromMatrixPosition( object.matrixWorld ).applyMatrix4( _projScreenMatrix );
2678
+
2679
+ }
2680
+
2681
+ const { geometry, material } = object;
2682
+
2683
+ if ( material.visible ) {
2684
+
2685
+ renderList.push( object, geometry, material, groupOrder, _vector4.z, null, clippingContext );
2686
+
2687
+ }
2688
+
2689
+ }
2690
+
2691
+ } else if ( object.isLineLoop ) {
2692
+
2693
+ error( 'Renderer: Objects of type THREE.LineLoop are not supported. Please use THREE.Line or THREE.LineSegments.' );
2694
+
2695
+ } else if ( object.isMesh || object.isLine || object.isPoints ) {
2696
+
2697
+ const frustum = camera.isArrayCamera ? _frustumArray : _frustum;
2698
+
2699
+ if ( ! object.frustumCulled || frustum.intersectsObject( object, camera ) ) {
2700
+
2701
+ const { geometry, material } = object;
2702
+
2703
+ if ( this.sortObjects === true ) {
2704
+
2705
+ if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();
2706
+
2707
+ _vector4
2708
+ .copy( geometry.boundingSphere.center )
2709
+ .applyMatrix4( object.matrixWorld )
2710
+ .applyMatrix4( _projScreenMatrix );
2711
+
2712
+ }
2713
+
2714
+ if ( Array.isArray( material ) ) {
2715
+
2716
+ const groups = geometry.groups;
2717
+
2718
+ for ( let i = 0, l = groups.length; i < l; i ++ ) {
2719
+
2720
+ const group = groups[ i ];
2721
+ const groupMaterial = material[ group.materialIndex ];
2722
+
2723
+ if ( groupMaterial && groupMaterial.visible ) {
2724
+
2725
+ renderList.push( object, geometry, groupMaterial, groupOrder, _vector4.z, group, clippingContext );
2726
+
2727
+ }
2728
+
2729
+ }
2730
+
2731
+ } else if ( material.visible ) {
2732
+
2733
+ renderList.push( object, geometry, material, groupOrder, _vector4.z, null, clippingContext );
2734
+
2735
+ }
2736
+
2737
+ }
2738
+
2739
+ }
2740
+
2741
+ }
2742
+
2743
+ if ( object.isBundleGroup === true && this.backend.beginBundle !== undefined ) {
2744
+
2745
+ const baseRenderList = renderList;
2746
+
2747
+ // replace render list
2748
+ renderList = this._renderLists.get( object, camera );
2749
+
2750
+ renderList.begin();
2751
+
2752
+ baseRenderList.pushBundle( {
2753
+ bundleGroup: object,
2754
+ camera,
2755
+ renderList,
2756
+ } );
2757
+
2758
+ renderList.finish();
2759
+
2760
+ }
2761
+
2762
+ const children = object.children;
2763
+
2764
+ for ( let i = 0, l = children.length; i < l; i ++ ) {
2765
+
2766
+ this._projectObject( children[ i ], camera, groupOrder, renderList, clippingContext );
2767
+
2768
+ }
2769
+
2770
+ }
2771
+
2772
+ /**
2773
+ * Renders the given render bundles.
2774
+ *
2775
+ * @private
2776
+ * @param {Array<Object>} bundles - Array with render bundle data.
2777
+ * @param {Scene} sceneRef - The scene the render bundles belong to.
2778
+ * @param {LightsNode} lightsNode - The current lights node.
2779
+ */
2780
+ _renderBundles( bundles, sceneRef, lightsNode ) {
2781
+
2782
+ for ( const bundle of bundles ) {
2783
+
2784
+ this._renderBundle( bundle, sceneRef, lightsNode );
2785
+
2786
+ }
2787
+
2788
+ }
2789
+
2790
+ /**
2791
+ * Renders the transparent objects from the given render lists.
2792
+ *
2793
+ * @private
2794
+ * @param {Array<Object>} renderList - The transparent render list.
2795
+ * @param {Array<Object>} doublePassList - The list of transparent objects which require a double pass (e.g. because of transmission).
2796
+ * @param {Camera} camera - The camera the render list should be rendered with.
2797
+ * @param {Scene} scene - The scene the render list belongs to.
2798
+ * @param {LightsNode} lightsNode - The current lights node.
2799
+ */
2800
+ _renderTransparents( renderList, doublePassList, camera, scene, lightsNode ) {
2801
+
2802
+ if ( doublePassList.length > 0 ) {
2803
+
2804
+ // render back side
2805
+
2806
+ for ( const { material } of doublePassList ) {
2807
+
2808
+ material.side = BackSide;
2809
+
2810
+ }
2811
+
2812
+ this._renderObjects( doublePassList, camera, scene, lightsNode, 'backSide' );
2813
+
2814
+ // render front side
2815
+
2816
+ for ( const { material } of doublePassList ) {
2817
+
2818
+ material.side = FrontSide;
2819
+
2820
+ }
2821
+
2822
+ this._renderObjects( renderList, camera, scene, lightsNode );
2823
+
2824
+ // restore
2825
+
2826
+ for ( const { material } of doublePassList ) {
2827
+
2828
+ material.side = DoubleSide;
2829
+
2830
+ }
2831
+
2832
+ } else {
2833
+
2834
+ this._renderObjects( renderList, camera, scene, lightsNode );
2835
+
2836
+ }
2837
+
2838
+ }
2839
+
2840
+ /**
2841
+ * Renders the objects from the given render list.
2842
+ *
2843
+ * @private
2844
+ * @param {Array<Object>} renderList - The render list.
2845
+ * @param {Camera} camera - The camera the render list should be rendered with.
2846
+ * @param {Scene} scene - The scene the render list belongs to.
2847
+ * @param {LightsNode} lightsNode - The current lights node.
2848
+ * @param {?string} [passId=null] - An optional ID for identifying the pass.
2849
+ */
2850
+ _renderObjects( renderList, camera, scene, lightsNode, passId = null ) {
2851
+
2852
+ for ( let i = 0, il = renderList.length; i < il; i ++ ) {
2853
+
2854
+ const { object, geometry, material, group, clippingContext } = renderList[ i ];
2855
+
2856
+ this._currentRenderObjectFunction( object, scene, camera, geometry, material, group, lightsNode, clippingContext, passId );
2857
+
2858
+ }
2859
+
2860
+ }
2861
+
2862
+ /**
2863
+ * This method represents the default render object function that manages the render lifecycle
2864
+ * of the object.
2865
+ *
2866
+ * @param {Object3D} object - The 3D object.
2867
+ * @param {Scene} scene - The scene the 3D object belongs to.
2868
+ * @param {Camera} camera - The camera the object should be rendered with.
2869
+ * @param {BufferGeometry} geometry - The object's geometry.
2870
+ * @param {Material} material - The object's material.
2871
+ * @param {?Object} group - Only relevant for objects using multiple materials. This represents a group entry from the respective `BufferGeometry`.
2872
+ * @param {LightsNode} lightsNode - The current lights node.
2873
+ * @param {?ClippingContext} clippingContext - The clipping context.
2874
+ * @param {?string} [passId=null] - An optional ID for identifying the pass.
2875
+ */
2876
+ renderObject( object, scene, camera, geometry, material, group, lightsNode, clippingContext = null, passId = null ) {
2877
+
2878
+ let overridePositionNode;
2879
+ let overrideColorNode;
2880
+ let overrideDepthNode;
2881
+
2882
+ //
2883
+
2884
+ object.onBeforeRender( this, scene, camera, geometry, material, group );
2885
+
2886
+ //
2887
+
2888
+ if ( material.allowOverride === true && scene.overrideMaterial !== null ) {
2889
+
2890
+ const overrideMaterial = scene.overrideMaterial;
2891
+
2892
+ if ( material.positionNode && material.positionNode.isNode ) {
2893
+
2894
+ overridePositionNode = overrideMaterial.positionNode;
2895
+ overrideMaterial.positionNode = material.positionNode;
2896
+
2897
+ }
2898
+
2899
+ overrideMaterial.alphaTest = material.alphaTest;
2900
+ overrideMaterial.alphaMap = material.alphaMap;
2901
+ overrideMaterial.transparent = material.transparent || material.transmission > 0;
2902
+
2903
+ if ( overrideMaterial.isShadowPassMaterial ) {
2904
+
2905
+ overrideMaterial.side = material.shadowSide === null ? material.side : material.shadowSide;
2906
+
2907
+ const hasMap = material.map !== null;
2908
+ const hasColorNode = material.colorNode && material.colorNode.isNode;
2909
+ const hasCastShadowNode = material.castShadowNode && material.castShadowNode.isNode;
2910
+
2911
+ if ( hasMap || hasColorNode || hasCastShadowNode ) {
2912
+
2913
+ overrideColorNode = overrideMaterial.colorNode;
2914
+
2915
+ let shadowRGB;
2916
+ let shadowAlpha;
2917
+
2918
+ if ( hasCastShadowNode ) {
2919
+
2920
+ shadowRGB = material.castShadowNode.rgb;
2921
+ shadowAlpha = material.castShadowNode.a;
2922
+
2923
+ } else {
2924
+
2925
+ shadowRGB = vec3( 0 );
2926
+ shadowAlpha = float( 1 );
2927
+
2928
+ }
2929
+
2930
+ if ( hasMap ) {
2931
+
2932
+ shadowAlpha = shadowAlpha.mul( reference( 'map', 'texture', material ).a );
2933
+
2934
+ }
2935
+
2936
+ if ( hasColorNode ) {
2937
+
2938
+ shadowAlpha = shadowAlpha.mul( material.colorNode.a );
2939
+
2940
+ }
2941
+
2942
+ overrideMaterial.colorNode = vec4( shadowRGB, shadowAlpha );
2943
+
2944
+ }
2945
+
2946
+ if ( material.depthNode && material.depthNode.isNode ) {
2947
+
2948
+ overrideDepthNode = overrideMaterial.depthNode;
2949
+ overrideMaterial.depthNode = material.depthNode;
2950
+
2951
+ }
2952
+
2953
+ if ( material.castShadowPositionNode && material.castShadowPositionNode.isNode ) {
2954
+
2955
+ overridePositionNode = overrideMaterial.positionNode;
2956
+ overrideMaterial.positionNode = material.castShadowPositionNode;
2957
+
2958
+ }
2959
+
2960
+ }
2961
+
2962
+ material = overrideMaterial;
2963
+
2964
+ }
2965
+
2966
+ //
2967
+
2968
+ if ( material.transparent === true && material.side === DoubleSide && material.forceSinglePass === false ) {
2969
+
2970
+ material.side = BackSide;
2971
+ this._handleObjectFunction( object, material, scene, camera, lightsNode, group, clippingContext, 'backSide' ); // create backSide pass id
2972
+
2973
+ material.side = FrontSide;
2974
+ this._handleObjectFunction( object, material, scene, camera, lightsNode, group, clippingContext, passId ); // use default pass id
2975
+
2976
+ material.side = DoubleSide;
2977
+
2978
+ } else {
2979
+
2980
+ this._handleObjectFunction( object, material, scene, camera, lightsNode, group, clippingContext, passId );
2981
+
2982
+ }
2983
+
2984
+ //
2985
+
2986
+ if ( overridePositionNode !== undefined ) {
2987
+
2988
+ scene.overrideMaterial.positionNode = overridePositionNode;
2989
+
2990
+ }
2991
+
2992
+ if ( overrideDepthNode !== undefined ) {
2993
+
2994
+ scene.overrideMaterial.depthNode = overrideDepthNode;
2995
+
2996
+ }
2997
+
2998
+ if ( overrideColorNode !== undefined ) {
2999
+
3000
+ scene.overrideMaterial.colorNode = overrideColorNode;
3001
+
3002
+ }
3003
+
3004
+ //
3005
+
3006
+ object.onAfterRender( this, scene, camera, geometry, material, group );
3007
+
3008
+ }
3009
+
3010
+ /**
3011
+ * This method represents the default `_handleObjectFunction` implementation which creates
3012
+ * a render object from the given data and performs the draw command with the selected backend.
3013
+ *
3014
+ * @private
3015
+ * @param {Object3D} object - The 3D object.
3016
+ * @param {Material} material - The object's material.
3017
+ * @param {Scene} scene - The scene the 3D object belongs to.
3018
+ * @param {Camera} camera - The camera the object should be rendered with.
3019
+ * @param {LightsNode} lightsNode - The current lights node.
3020
+ * @param {?{start: number, count: number}} group - Only relevant for objects using multiple materials. This represents a group entry from the respective `BufferGeometry`.
3021
+ * @param {ClippingContext} clippingContext - The clipping context.
3022
+ * @param {string} [passId] - An optional ID for identifying the pass.
3023
+ */
3024
+ _renderObjectDirect( object, material, scene, camera, lightsNode, group, clippingContext, passId ) {
3025
+
3026
+ const renderObject = this._objects.get( object, material, scene, camera, lightsNode, this._currentRenderContext, clippingContext, passId );
3027
+ renderObject.drawRange = object.geometry.drawRange;
3028
+ renderObject.group = group;
3029
+
3030
+ //
3031
+
3032
+ const needsRefresh = this._nodes.needsRefresh( renderObject );
3033
+
3034
+ if ( needsRefresh ) {
3035
+
3036
+ this._nodes.updateBefore( renderObject );
3037
+
3038
+ this._geometries.updateForRender( renderObject );
3039
+
3040
+ this._nodes.updateForRender( renderObject );
3041
+ this._bindings.updateForRender( renderObject );
3042
+
3043
+ }
3044
+
3045
+ this._pipelines.updateForRender( renderObject );
3046
+
3047
+ //
3048
+
3049
+ if ( this._currentRenderBundle !== null ) {
3050
+
3051
+ const renderBundleData = this.backend.get( this._currentRenderBundle );
3052
+
3053
+ renderBundleData.renderObjects.push( renderObject );
3054
+
3055
+ renderObject.bundle = this._currentRenderBundle.bundleGroup;
3056
+
3057
+ }
3058
+
3059
+ this.backend.draw( renderObject, this.info );
3060
+
3061
+ if ( needsRefresh ) this._nodes.updateAfter( renderObject );
3062
+
3063
+ }
3064
+
3065
+ /**
3066
+ * A different implementation for `_handleObjectFunction` which only makes sure the object is ready for rendering.
3067
+ * Used in `compileAsync()`.
3068
+ *
3069
+ * @private
3070
+ * @param {Object3D} object - The 3D object.
3071
+ * @param {Material} material - The object's material.
3072
+ * @param {Scene} scene - The scene the 3D object belongs to.
3073
+ * @param {Camera} camera - The camera the object should be rendered with.
3074
+ * @param {LightsNode} lightsNode - The current lights node.
3075
+ * @param {?{start: number, count: number}} group - Only relevant for objects using multiple materials. This represents a group entry from the respective `BufferGeometry`.
3076
+ * @param {ClippingContext} clippingContext - The clipping context.
3077
+ * @param {string} [passId] - An optional ID for identifying the pass.
3078
+ */
3079
+ _createObjectPipeline( object, material, scene, camera, lightsNode, group, clippingContext, passId ) {
3080
+
3081
+ const renderObject = this._objects.get( object, material, scene, camera, lightsNode, this._currentRenderContext, clippingContext, passId );
3082
+ renderObject.drawRange = object.geometry.drawRange;
3083
+ renderObject.group = group;
3084
+
3085
+ //
3086
+
3087
+ this._nodes.updateBefore( renderObject );
3088
+
3089
+ this._geometries.updateForRender( renderObject );
3090
+
3091
+ this._nodes.updateForRender( renderObject );
3092
+ this._bindings.updateForRender( renderObject );
3093
+
3094
+ this._pipelines.getForRender( renderObject, this._compilationPromises );
3095
+
3096
+ this._nodes.updateAfter( renderObject );
3097
+
3098
+ }
3099
+
3100
+ /**
3101
+ * Alias for `compileAsync()`.
3102
+ *
3103
+ * @method
3104
+ * @param {Object3D} scene - The scene or 3D object to precompile.
3105
+ * @param {Camera} camera - The camera that is used to render the scene.
3106
+ * @param {Scene} targetScene - If the first argument is a 3D object, this parameter must represent the scene the 3D object is going to be added.
3107
+ * @return {function(Object3D, Camera, ?Scene): Promise|undefined} A Promise that resolves when the compile has been finished.
3108
+ */
3109
+ get compile() {
3110
+
3111
+ return this.compileAsync;
3112
+
3113
+ }
3114
+
3115
+ }
3116
+
3117
+ /**
3118
+ * Animation loop parameter of `renderer.setAnimationLoop()`.
3119
+ *
3120
+ * @callback onAnimationCallback
3121
+ * @param {DOMHighResTimeStamp} time - A timestamp indicating the end time of the previous frame's rendering.
3122
+ * @param {XRFrame} [frame] - A reference to the current XR frame. Only relevant when using XR rendering.
3123
+ */
3124
+
3125
+ export default Renderer;