@playdrop/playdrop-cli 0.3.5-build.1 → 0.3.8-build.2

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 (1288) hide show
  1. package/config/client-meta.json +5 -5
  2. package/dist/apps/upload.js +1 -0
  3. package/dist/catalogue.d.ts +7 -0
  4. package/dist/catalogue.js +70 -33
  5. package/dist/commands/create.js +129 -70
  6. package/dist/commands/createRemixContent.d.ts +3 -0
  7. package/dist/commands/createRemixContent.js +310 -0
  8. package/dist/commands/generation.d.ts +0 -1
  9. package/dist/commands/generation.js +0 -18
  10. package/dist/commands/init.js +3 -3
  11. package/dist/commands/upload.js +11 -0
  12. package/dist/index.js +17 -4
  13. package/node_modules/@playdrop/ai-client/dist/index.d.ts +1 -1
  14. package/node_modules/@playdrop/ai-client/dist/index.d.ts.map +1 -1
  15. package/node_modules/@playdrop/ai-client/dist/index.js +1 -1
  16. package/node_modules/@playdrop/api-client/dist/client.d.ts +8 -2
  17. package/node_modules/@playdrop/api-client/dist/client.d.ts.map +1 -1
  18. package/node_modules/@playdrop/api-client/dist/client.js +2 -0
  19. package/node_modules/@playdrop/api-client/dist/domains/apps.d.ts +3 -2
  20. package/node_modules/@playdrop/api-client/dist/domains/apps.d.ts.map +1 -1
  21. package/node_modules/@playdrop/api-client/dist/domains/apps.js +24 -2
  22. package/node_modules/@playdrop/api-client/dist/domains/asset-packs.d.ts +3 -1
  23. package/node_modules/@playdrop/api-client/dist/domains/asset-packs.d.ts.map +1 -1
  24. package/node_modules/@playdrop/api-client/dist/domains/asset-packs.js +19 -1
  25. package/node_modules/@playdrop/api-client/dist/domains/assets.d.ts +3 -1
  26. package/node_modules/@playdrop/api-client/dist/domains/assets.d.ts.map +1 -1
  27. package/node_modules/@playdrop/api-client/dist/domains/assets.js +19 -1
  28. package/node_modules/@playdrop/api-client/dist/index.d.ts +3 -0
  29. package/node_modules/@playdrop/api-client/dist/index.d.ts.map +1 -1
  30. package/node_modules/@playdrop/api-client/dist/index.js +9 -0
  31. package/node_modules/@playdrop/config/client-meta.json +5 -5
  32. package/node_modules/@playdrop/types/dist/api.d.ts +22 -1
  33. package/node_modules/@playdrop/types/dist/api.d.ts.map +1 -1
  34. package/node_modules/@playdrop/types/dist/asset-pack.d.ts +1 -0
  35. package/node_modules/@playdrop/types/dist/asset-pack.d.ts.map +1 -1
  36. package/node_modules/@playdrop/types/dist/asset.d.ts +27 -0
  37. package/node_modules/@playdrop/types/dist/asset.d.ts.map +1 -1
  38. package/node_modules/@playdrop/types/dist/graph.d.ts +21 -0
  39. package/node_modules/@playdrop/types/dist/graph.d.ts.map +1 -1
  40. package/node_modules/@playdrop/types/dist/graph.js +66 -0
  41. package/node_modules/@playdrop/types/dist/version.d.ts +1 -0
  42. package/node_modules/@playdrop/types/dist/version.d.ts.map +1 -1
  43. package/node_modules/@playdrop/vox-three/dist/src/index.d.ts +1 -0
  44. package/node_modules/@playdrop/vox-three/dist/src/index.js +18 -0
  45. package/node_modules/@playdrop/vox-three/dist/src/index.js.map +1 -0
  46. package/node_modules/@playdrop/vox-three/dist/src/vox.d.ts +25 -0
  47. package/node_modules/@playdrop/vox-three/dist/src/vox.js +425 -0
  48. package/node_modules/@playdrop/vox-three/dist/src/vox.js.map +1 -0
  49. package/node_modules/@playdrop/vox-three/dist/test/vox.test.d.ts +1 -0
  50. package/node_modules/@playdrop/vox-three/dist/test/vox.test.js +79 -0
  51. package/node_modules/@playdrop/vox-three/dist/test/vox.test.js.map +1 -0
  52. package/node_modules/@playdrop/vox-three/package.json +25 -0
  53. package/node_modules/three/LICENSE +1 -1
  54. package/node_modules/three/README.md +7 -7
  55. package/node_modules/three/build/three.cjs +49655 -25499
  56. package/node_modules/three/build/three.core.js +58952 -0
  57. package/node_modules/three/build/three.core.min.js +6 -0
  58. package/node_modules/three/build/three.module.js +11162 -45962
  59. package/node_modules/three/build/three.module.min.js +2 -2
  60. package/node_modules/three/build/three.tsl.js +640 -0
  61. package/node_modules/three/build/three.tsl.min.js +6 -0
  62. package/node_modules/three/build/three.webgpu.js +79685 -0
  63. package/node_modules/three/build/three.webgpu.min.js +6 -0
  64. package/node_modules/three/build/three.webgpu.nodes.js +79456 -0
  65. package/node_modules/three/build/three.webgpu.nodes.min.js +6 -0
  66. package/node_modules/three/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  67. package/node_modules/three/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  68. package/node_modules/three/examples/jsm/Addons.js +8 -18
  69. package/node_modules/three/examples/jsm/animation/AnimationClipCreator.js +59 -7
  70. package/node_modules/three/examples/jsm/animation/CCDIKSolver.js +154 -45
  71. package/node_modules/three/examples/jsm/capabilities/WebGL.js +28 -23
  72. package/node_modules/three/examples/jsm/capabilities/WebGPU.js +19 -17
  73. package/node_modules/three/examples/jsm/controls/ArcballControls.js +636 -324
  74. package/node_modules/three/examples/jsm/controls/DragControls.js +332 -101
  75. package/node_modules/three/examples/jsm/controls/FirstPersonControls.js +291 -169
  76. package/node_modules/three/examples/jsm/controls/FlyControls.js +245 -191
  77. package/node_modules/three/examples/jsm/controls/MapControls.js +43 -9
  78. package/node_modules/three/examples/jsm/controls/OrbitControls.js +1156 -802
  79. package/node_modules/three/examples/jsm/controls/PointerLockControls.js +137 -35
  80. package/node_modules/three/examples/jsm/controls/TrackballControls.js +629 -456
  81. package/node_modules/three/examples/jsm/controls/TransformControls.js +442 -97
  82. package/node_modules/three/examples/jsm/csm/CSM.js +230 -17
  83. package/node_modules/three/examples/jsm/csm/CSMFrustum.js +61 -4
  84. package/node_modules/three/examples/jsm/csm/CSMHelper.js +50 -0
  85. package/node_modules/three/examples/jsm/csm/CSMShader.js +17 -5
  86. package/node_modules/three/examples/jsm/csm/CSMShadowNode.js +599 -0
  87. package/node_modules/three/examples/jsm/curves/CurveExtras.js +303 -31
  88. package/node_modules/three/examples/jsm/curves/NURBSCurve.js +91 -16
  89. package/node_modules/three/examples/jsm/curves/NURBSSurface.js +52 -6
  90. package/node_modules/three/examples/jsm/curves/NURBSUtils.js +102 -112
  91. package/node_modules/three/examples/jsm/curves/NURBSVolume.js +24 -4
  92. package/node_modules/three/examples/jsm/effects/AnaglyphEffect.js +39 -14
  93. package/node_modules/three/examples/jsm/effects/AsciiEffect.js +69 -22
  94. package/node_modules/three/examples/jsm/effects/OutlineEffect.js +61 -111
  95. package/node_modules/three/examples/jsm/effects/ParallaxBarrierEffect.js +48 -12
  96. package/node_modules/three/examples/jsm/effects/StereoEffect.js +37 -1
  97. package/node_modules/three/examples/jsm/environments/DebugEnvironment.js +50 -0
  98. package/node_modules/three/examples/jsm/environments/RoomEnvironment.js +82 -48
  99. package/node_modules/three/examples/jsm/exporters/DRACOExporter.js +59 -15
  100. package/node_modules/three/examples/jsm/exporters/EXRExporter.js +58 -19
  101. package/node_modules/three/examples/jsm/exporters/GLTFExporter.js +460 -174
  102. package/node_modules/three/examples/jsm/exporters/KTX2Exporter.js +80 -25
  103. package/node_modules/three/examples/jsm/exporters/OBJExporter.js +25 -1
  104. package/node_modules/three/examples/jsm/exporters/PLYExporter.js +51 -17
  105. package/node_modules/three/examples/jsm/exporters/STLExporter.js +27 -5
  106. package/node_modules/three/examples/jsm/exporters/USDZExporter.js +783 -268
  107. package/node_modules/three/examples/jsm/geometries/BoxLineGeometry.js +23 -0
  108. package/node_modules/three/examples/jsm/geometries/ConvexGeometry.js +19 -0
  109. package/node_modules/three/examples/jsm/geometries/DecalGeometry.js +94 -30
  110. package/node_modules/three/examples/jsm/geometries/ParametricFunctions.js +100 -0
  111. package/node_modules/three/examples/jsm/geometries/ParametricGeometry.js +38 -5
  112. package/node_modules/three/examples/jsm/geometries/RoundedBoxGeometry.js +68 -7
  113. package/node_modules/three/examples/jsm/geometries/TeapotGeometry.js +23 -38
  114. package/node_modules/three/examples/jsm/geometries/TextGeometry.js +48 -21
  115. package/node_modules/three/examples/jsm/gpgpu/BitonicSort.js +715 -0
  116. package/node_modules/three/examples/jsm/helpers/LightProbeHelper.js +79 -44
  117. package/node_modules/three/examples/jsm/helpers/LightProbeHelperGPU.js +102 -0
  118. package/node_modules/three/examples/jsm/helpers/OctreeHelper.js +36 -0
  119. package/node_modules/three/examples/jsm/helpers/PositionalAudioHelper.js +60 -0
  120. package/node_modules/three/examples/jsm/helpers/RapierHelper.js +59 -0
  121. package/node_modules/three/examples/jsm/helpers/RectAreaLightHelper.js +36 -3
  122. package/node_modules/three/examples/jsm/helpers/TextureHelper.js +28 -0
  123. package/node_modules/three/examples/jsm/helpers/TextureHelperGPU.js +214 -0
  124. package/node_modules/three/examples/jsm/helpers/VertexNormalsHelper.js +61 -2
  125. package/node_modules/three/examples/jsm/helpers/VertexTangentsHelper.js +47 -2
  126. package/node_modules/three/examples/jsm/helpers/ViewHelper.js +192 -65
  127. package/node_modules/three/examples/jsm/inspector/Inspector.js +427 -0
  128. package/node_modules/three/examples/jsm/inspector/RendererInspector.js +415 -0
  129. package/node_modules/three/examples/jsm/inspector/tabs/Console.js +204 -0
  130. package/node_modules/three/examples/jsm/inspector/tabs/Parameters.js +332 -0
  131. package/node_modules/three/examples/jsm/inspector/tabs/Performance.js +268 -0
  132. package/node_modules/three/examples/jsm/inspector/tabs/Viewer.js +166 -0
  133. package/node_modules/three/examples/jsm/inspector/ui/Graph.js +95 -0
  134. package/node_modules/three/examples/jsm/inspector/ui/Item.js +170 -0
  135. package/node_modules/three/examples/jsm/inspector/ui/List.js +75 -0
  136. package/node_modules/three/examples/jsm/inspector/ui/Profiler.js +170 -0
  137. package/node_modules/three/examples/jsm/inspector/ui/Style.js +654 -0
  138. package/node_modules/three/examples/jsm/inspector/ui/Tab.js +46 -0
  139. package/node_modules/three/examples/jsm/inspector/ui/Values.js +423 -0
  140. package/node_modules/three/examples/jsm/inspector/ui/utils.js +56 -0
  141. package/node_modules/three/examples/jsm/interactive/HTMLMesh.js +50 -21
  142. package/node_modules/three/examples/jsm/interactive/InteractiveGroup.js +170 -62
  143. package/node_modules/three/examples/jsm/interactive/SelectionBox.js +106 -9
  144. package/node_modules/three/examples/jsm/interactive/SelectionHelper.js +76 -30
  145. package/node_modules/three/examples/jsm/libs/basis/basis_transcoder.js +8 -10
  146. package/node_modules/three/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
  147. package/node_modules/three/examples/jsm/libs/demuxer_mp4.js +109 -0
  148. package/node_modules/three/examples/jsm/libs/draco/README.md +2 -2
  149. package/node_modules/three/examples/jsm/libs/fflate.module.js +694 -496
  150. package/node_modules/three/examples/jsm/libs/ktx-parse.module.js +1 -1
  151. package/node_modules/three/examples/jsm/libs/meshopt_decoder.module.js +75 -58
  152. package/node_modules/three/examples/jsm/libs/motion-controllers.module.js +1 -1
  153. package/node_modules/three/examples/jsm/libs/rhino3dm/rhino3dm.js +1 -8723
  154. package/node_modules/three/examples/jsm/libs/rhino3dm/rhino3dm.module.js +1 -8734
  155. package/node_modules/three/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  156. package/node_modules/three/examples/jsm/libs/tween.module.js +32 -14
  157. package/node_modules/three/examples/jsm/lighting/TiledLighting.js +42 -0
  158. package/node_modules/three/examples/jsm/lights/LightProbeGenerator.js +65 -14
  159. package/node_modules/three/examples/jsm/lights/RectAreaLightTexturesLib.js +127 -0
  160. package/node_modules/three/examples/jsm/lights/RectAreaLightUniformsLib.js +20 -59
  161. package/node_modules/three/examples/jsm/lines/Line2.js +41 -4
  162. package/node_modules/three/examples/jsm/lines/LineGeometry.js +80 -2
  163. package/node_modules/three/examples/jsm/lines/LineMaterial.js +100 -22
  164. package/node_modules/three/examples/jsm/lines/LineSegments2.js +69 -4
  165. package/node_modules/three/examples/jsm/lines/LineSegmentsGeometry.js +65 -8
  166. package/node_modules/three/examples/jsm/lines/Wireframe.js +58 -6
  167. package/node_modules/three/examples/jsm/lines/WireframeGeometry2.js +27 -2
  168. package/node_modules/three/examples/jsm/lines/webgpu/Line2.js +46 -0
  169. package/node_modules/three/examples/jsm/lines/webgpu/LineSegments2.js +411 -0
  170. package/node_modules/three/examples/jsm/lines/webgpu/Wireframe.js +86 -0
  171. package/node_modules/three/examples/jsm/loaders/3DMLoader.js +86 -23
  172. package/node_modules/three/examples/jsm/loaders/3MFLoader.js +148 -5
  173. package/node_modules/three/examples/jsm/loaders/AMFLoader.js +32 -12
  174. package/node_modules/three/examples/jsm/loaders/BVHLoader.js +59 -12
  175. package/node_modules/three/examples/jsm/loaders/ColladaLoader.js +51 -12
  176. package/node_modules/three/examples/jsm/loaders/DDSLoader.js +68 -1
  177. package/node_modules/three/examples/jsm/loaders/DRACOLoader.js +149 -23
  178. package/node_modules/three/examples/jsm/loaders/EXRLoader.js +584 -109
  179. package/node_modules/three/examples/jsm/loaders/FBXLoader.js +165 -97
  180. package/node_modules/three/examples/jsm/loaders/FontLoader.js +83 -6
  181. package/node_modules/three/examples/jsm/loaders/GCodeLoader.js +37 -6
  182. package/node_modules/three/examples/jsm/loaders/GLTFLoader.js +337 -108
  183. package/node_modules/three/examples/jsm/loaders/HDRCubeTextureLoader.js +52 -3
  184. package/node_modules/three/examples/jsm/loaders/HDRLoader.js +486 -0
  185. package/node_modules/three/examples/jsm/loaders/IESLoader.js +42 -0
  186. package/node_modules/three/examples/jsm/loaders/KMZLoader.js +33 -0
  187. package/node_modules/three/examples/jsm/loaders/KTX2Loader.js +441 -138
  188. package/node_modules/three/examples/jsm/loaders/KTXLoader.js +31 -10
  189. package/node_modules/three/examples/jsm/loaders/LDrawLoader.js +194 -145
  190. package/node_modules/three/examples/jsm/loaders/LUT3dlLoader.js +47 -25
  191. package/node_modules/three/examples/jsm/loaders/LUTCubeLoader.js +46 -23
  192. package/node_modules/three/examples/jsm/loaders/LUTImageLoader.js +79 -52
  193. package/node_modules/three/examples/jsm/loaders/LWOLoader.js +47 -20
  194. package/node_modules/three/examples/jsm/loaders/LottieLoader.js +54 -1
  195. package/node_modules/three/examples/jsm/loaders/MD2Loader.js +37 -1
  196. package/node_modules/three/examples/jsm/loaders/MDDLoader.js +57 -12
  197. package/node_modules/three/examples/jsm/loaders/MTLLoader.js +61 -35
  198. package/node_modules/three/examples/jsm/loaders/MaterialXLoader.js +291 -39
  199. package/node_modules/three/examples/jsm/loaders/NRRDLoader.js +38 -6
  200. package/node_modules/three/examples/jsm/loaders/OBJLoader.js +54 -4
  201. package/node_modules/three/examples/jsm/loaders/PCDLoader.js +183 -32
  202. package/node_modules/three/examples/jsm/loaders/PDBLoader.js +44 -4
  203. package/node_modules/three/examples/jsm/loaders/PLYLoader.js +78 -44
  204. package/node_modules/three/examples/jsm/loaders/PVRLoader.js +25 -6
  205. package/node_modules/three/examples/jsm/loaders/RGBELoader.js +6 -438
  206. package/node_modules/three/examples/jsm/loaders/STLLoader.js +51 -40
  207. package/node_modules/three/examples/jsm/loaders/SVGLoader.js +118 -24
  208. package/node_modules/three/examples/jsm/loaders/TDSLoader.js +92 -72
  209. package/node_modules/three/examples/jsm/loaders/TGALoader.js +23 -0
  210. package/node_modules/three/examples/jsm/loaders/TIFFLoader.js +23 -0
  211. package/node_modules/three/examples/jsm/loaders/TTFLoader.js +50 -3
  212. package/node_modules/three/examples/jsm/loaders/USDLoader.js +219 -0
  213. package/node_modules/three/examples/jsm/loaders/USDZLoader.js +4 -810
  214. package/node_modules/three/examples/jsm/loaders/UltraHDRLoader.js +630 -0
  215. package/node_modules/three/examples/jsm/loaders/VOXLoader.js +67 -2
  216. package/node_modules/three/examples/jsm/loaders/VRMLLoader.js +57 -21
  217. package/node_modules/three/examples/jsm/loaders/VTKLoader.js +119 -6
  218. package/node_modules/three/examples/jsm/loaders/XYZLoader.js +39 -2
  219. package/node_modules/three/examples/jsm/loaders/lwo/IFFParser.js +81 -78
  220. package/node_modules/three/examples/jsm/loaders/usd/USDAParser.js +741 -0
  221. package/node_modules/three/examples/jsm/loaders/usd/USDCParser.js +17 -0
  222. package/node_modules/three/examples/jsm/materials/LDrawConditionalLineMaterial.js +183 -0
  223. package/node_modules/three/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +154 -0
  224. package/node_modules/three/examples/jsm/materials/MeshGouraudMaterial.js +9 -1
  225. package/node_modules/three/examples/jsm/materials/MeshPostProcessingMaterial.js +25 -2
  226. package/node_modules/three/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  227. package/node_modules/three/examples/jsm/math/Capsule.js +91 -14
  228. package/node_modules/three/examples/jsm/math/ColorConverter.js +22 -0
  229. package/node_modules/three/examples/jsm/math/ColorSpaces.js +147 -0
  230. package/node_modules/three/examples/jsm/math/ConvexHull.js +517 -93
  231. package/node_modules/three/examples/jsm/math/ImprovedNoise.js +32 -15
  232. package/node_modules/three/examples/jsm/math/Lut.js +113 -0
  233. package/node_modules/three/examples/jsm/math/MeshSurfaceSampler.js +78 -13
  234. package/node_modules/three/examples/jsm/math/OBB.js +141 -29
  235. package/node_modules/three/examples/jsm/math/Octree.js +177 -25
  236. package/node_modules/three/examples/jsm/math/SimplexNoise.js +68 -42
  237. package/node_modules/three/examples/jsm/misc/ConvexObjectBreaker.js +45 -25
  238. package/node_modules/three/examples/jsm/misc/GPUComputationRenderer.js +105 -45
  239. package/node_modules/three/examples/jsm/misc/Gyroscope.js +12 -0
  240. package/node_modules/three/examples/jsm/misc/MD2Character.js +117 -2
  241. package/node_modules/three/examples/jsm/misc/MD2CharacterComplex.js +175 -11
  242. package/node_modules/three/examples/jsm/misc/MorphAnimMesh.js +44 -0
  243. package/node_modules/three/examples/jsm/misc/MorphBlendMesh.js +103 -0
  244. package/node_modules/three/examples/jsm/misc/ProgressiveLightMap.js +101 -54
  245. package/node_modules/three/examples/jsm/misc/ProgressiveLightMapGPU.js +322 -0
  246. package/node_modules/three/examples/jsm/misc/RollerCoaster.js +57 -0
  247. package/node_modules/three/examples/jsm/misc/TubePainter.js +437 -40
  248. package/node_modules/three/examples/jsm/misc/Volume.js +123 -75
  249. package/node_modules/three/examples/jsm/misc/VolumeSlice.js +95 -48
  250. package/node_modules/three/examples/jsm/modifiers/CurveModifier.js +77 -47
  251. package/node_modules/three/examples/jsm/modifiers/CurveModifierGPU.js +256 -0
  252. package/node_modules/three/examples/jsm/modifiers/EdgeSplitModifier.js +20 -0
  253. package/node_modules/three/examples/jsm/modifiers/SimplifyModifier.js +26 -11
  254. package/node_modules/three/examples/jsm/modifiers/TessellateModifier.js +35 -2
  255. package/node_modules/three/examples/jsm/objects/GroundedSkybox.js +25 -6
  256. package/node_modules/three/examples/jsm/objects/Lensflare.js +96 -4
  257. package/node_modules/three/examples/jsm/objects/LensflareMesh.js +376 -0
  258. package/node_modules/three/examples/jsm/objects/MarchingCubes.js +90 -5
  259. package/node_modules/three/examples/jsm/objects/Reflector.js +76 -2
  260. package/node_modules/three/examples/jsm/objects/ReflectorForSSRPass.js +41 -0
  261. package/node_modules/three/examples/jsm/objects/Refractor.js +62 -0
  262. package/node_modules/three/examples/jsm/objects/ShadowMesh.js +54 -4
  263. package/node_modules/three/examples/jsm/objects/Sky.js +30 -12
  264. package/node_modules/three/examples/jsm/objects/SkyMesh.js +243 -0
  265. package/node_modules/three/examples/jsm/objects/Water.js +45 -5
  266. package/node_modules/three/examples/jsm/objects/Water2.js +44 -4
  267. package/node_modules/three/examples/jsm/objects/Water2Mesh.js +199 -0
  268. package/node_modules/three/examples/jsm/objects/WaterMesh.js +196 -0
  269. package/node_modules/three/examples/jsm/physics/AmmoPhysics.js +48 -0
  270. package/node_modules/three/examples/jsm/physics/JoltPhysics.js +330 -0
  271. package/node_modules/three/examples/jsm/physics/RapierPhysics.js +231 -19
  272. package/node_modules/three/examples/jsm/postprocessing/AfterimagePass.js +110 -29
  273. package/node_modules/three/examples/jsm/postprocessing/BloomPass.js +128 -26
  274. package/node_modules/three/examples/jsm/postprocessing/BokehPass.js +99 -22
  275. package/node_modules/three/examples/jsm/postprocessing/ClearPass.js +54 -3
  276. package/node_modules/three/examples/jsm/postprocessing/CubeTexturePass.js +82 -21
  277. package/node_modules/three/examples/jsm/postprocessing/DotScreenPass.js +59 -10
  278. package/node_modules/three/examples/jsm/postprocessing/EffectComposer.js +135 -3
  279. package/node_modules/three/examples/jsm/postprocessing/FXAAPass.js +40 -0
  280. package/node_modules/three/examples/jsm/postprocessing/FilmPass.js +54 -5
  281. package/node_modules/three/examples/jsm/postprocessing/GTAOPass.js +202 -57
  282. package/node_modules/three/examples/jsm/postprocessing/GlitchPass.js +86 -37
  283. package/node_modules/three/examples/jsm/postprocessing/HalftonePass.js +65 -10
  284. package/node_modules/three/examples/jsm/postprocessing/LUTPass.js +43 -79
  285. package/node_modules/three/examples/jsm/postprocessing/MaskPass.js +91 -0
  286. package/node_modules/three/examples/jsm/postprocessing/OutlinePass.js +277 -155
  287. package/node_modules/three/examples/jsm/postprocessing/OutputPass.js +58 -14
  288. package/node_modules/three/examples/jsm/postprocessing/Pass.js +100 -4
  289. package/node_modules/three/examples/jsm/postprocessing/RenderPass.js +85 -1
  290. package/node_modules/three/examples/jsm/postprocessing/RenderPixelatedPass.js +124 -45
  291. package/node_modules/three/examples/jsm/postprocessing/RenderTransitionPass.js +267 -0
  292. package/node_modules/three/examples/jsm/postprocessing/SAOPass.js +128 -56
  293. package/node_modules/three/examples/jsm/postprocessing/SMAAPass.js +106 -75
  294. package/node_modules/three/examples/jsm/postprocessing/SSAARenderPass.js +120 -35
  295. package/node_modules/three/examples/jsm/postprocessing/SSAOPass.js +174 -67
  296. package/node_modules/three/examples/jsm/postprocessing/SSRPass.js +268 -53
  297. package/node_modules/three/examples/jsm/postprocessing/SavePass.js +69 -16
  298. package/node_modules/three/examples/jsm/postprocessing/ShaderPass.js +65 -7
  299. package/node_modules/three/examples/jsm/postprocessing/TAARenderPass.js +79 -24
  300. package/node_modules/three/examples/jsm/postprocessing/TexturePass.js +72 -8
  301. package/node_modules/three/examples/jsm/postprocessing/UnrealBloomPass.js +125 -46
  302. package/node_modules/three/examples/jsm/renderers/CSS2DRenderer.js +122 -9
  303. package/node_modules/three/examples/jsm/renderers/CSS3DRenderer.js +133 -8
  304. package/node_modules/three/examples/jsm/renderers/Projector.js +20 -2
  305. package/node_modules/three/examples/jsm/renderers/SVGRenderer.js +134 -5
  306. package/node_modules/three/examples/jsm/shaders/ACESFilmicToneMappingShader.js +12 -5
  307. package/node_modules/three/examples/jsm/shaders/AfterimageShader.js +8 -3
  308. package/node_modules/three/examples/jsm/shaders/BasicShader.js +8 -1
  309. package/node_modules/three/examples/jsm/shaders/BleachBypassShader.js +11 -5
  310. package/node_modules/three/examples/jsm/shaders/BlendShader.js +8 -1
  311. package/node_modules/three/examples/jsm/shaders/BokehShader.js +9 -3
  312. package/node_modules/three/examples/jsm/shaders/BokehShader2.js +11 -4
  313. package/node_modules/three/examples/jsm/shaders/BrightnessContrastShader.js +10 -4
  314. package/node_modules/three/examples/jsm/shaders/ColorCorrectionShader.js +8 -1
  315. package/node_modules/three/examples/jsm/shaders/ColorifyShader.js +9 -3
  316. package/node_modules/three/examples/jsm/shaders/ConvolutionShader.js +9 -38
  317. package/node_modules/three/examples/jsm/shaders/CopyShader.js +8 -1
  318. package/node_modules/three/examples/jsm/shaders/DOFMipMapShader.js +10 -3
  319. package/node_modules/three/examples/jsm/shaders/DepthLimitedBlurShader.js +10 -1
  320. package/node_modules/three/examples/jsm/shaders/DigitalGlitch.js +10 -7
  321. package/node_modules/three/examples/jsm/shaders/DotScreenShader.js +8 -3
  322. package/node_modules/three/examples/jsm/shaders/ExposureShader.js +8 -1
  323. package/node_modules/three/examples/jsm/shaders/FXAAShader.js +243 -233
  324. package/node_modules/three/examples/jsm/shaders/FilmShader.js +13 -0
  325. package/node_modules/three/examples/jsm/shaders/FocusShader.js +8 -3
  326. package/node_modules/three/examples/jsm/shaders/FreiChenShader.js +10 -3
  327. package/node_modules/three/examples/jsm/shaders/GTAOShader.js +37 -40
  328. package/node_modules/three/examples/jsm/shaders/GammaCorrectionShader.js +11 -2
  329. package/node_modules/three/examples/jsm/shaders/GodRaysShader.js +20 -8
  330. package/node_modules/three/examples/jsm/shaders/HalftoneShader.js +13 -4
  331. package/node_modules/three/examples/jsm/shaders/HorizontalBlurShader.js +12 -3
  332. package/node_modules/three/examples/jsm/shaders/HorizontalTiltShiftShader.js +9 -2
  333. package/node_modules/three/examples/jsm/shaders/HueSaturationShader.js +10 -3
  334. package/node_modules/three/examples/jsm/shaders/KaleidoShader.js +11 -4
  335. package/node_modules/three/examples/jsm/shaders/LuminosityHighPassShader.js +9 -7
  336. package/node_modules/three/examples/jsm/shaders/LuminosityShader.js +8 -2
  337. package/node_modules/three/examples/jsm/shaders/MirrorShader.js +10 -4
  338. package/node_modules/three/examples/jsm/shaders/NormalMapShader.js +7 -2
  339. package/node_modules/three/examples/jsm/shaders/OutputShader.js +24 -2
  340. package/node_modules/three/examples/jsm/shaders/PoissonDenoiseShader.js +24 -15
  341. package/node_modules/three/examples/jsm/shaders/RGBShiftShader.js +8 -1
  342. package/node_modules/three/examples/jsm/shaders/SAOShader.js +10 -1
  343. package/node_modules/three/examples/jsm/shaders/SMAAShader.js +24 -1
  344. package/node_modules/three/examples/jsm/shaders/SSAOShader.js +26 -5
  345. package/node_modules/three/examples/jsm/shaders/SSRShader.js +26 -1
  346. package/node_modules/three/examples/jsm/shaders/SepiaShader.js +8 -3
  347. package/node_modules/three/examples/jsm/shaders/SobelOperatorShader.js +9 -3
  348. package/node_modules/three/examples/jsm/shaders/SubsurfaceScatteringShader.js +13 -8
  349. package/node_modules/three/examples/jsm/shaders/TechnicolorShader.js +10 -4
  350. package/node_modules/three/examples/jsm/shaders/ToonShader.js +29 -6
  351. package/node_modules/three/examples/jsm/shaders/TriangleBlurShader.js +9 -4
  352. package/node_modules/three/examples/jsm/shaders/UnpackDepthRGBAShader.js +19 -4
  353. package/node_modules/three/examples/jsm/shaders/VelocityShader.js +8 -1
  354. package/node_modules/three/examples/jsm/shaders/VerticalBlurShader.js +9 -2
  355. package/node_modules/three/examples/jsm/shaders/VerticalTiltShiftShader.js +8 -1
  356. package/node_modules/three/examples/jsm/shaders/VignetteShader.js +8 -3
  357. package/node_modules/three/examples/jsm/shaders/VolumeShader.js +11 -2
  358. package/node_modules/three/examples/jsm/shaders/WaterRefractionShader.js +11 -0
  359. package/node_modules/three/examples/jsm/textures/FlakesTexture.js +14 -0
  360. package/node_modules/three/examples/jsm/transpiler/AST.js +392 -31
  361. package/node_modules/three/examples/jsm/transpiler/GLSLDecoder.js +366 -136
  362. package/node_modules/three/examples/jsm/transpiler/Linker.js +327 -0
  363. package/node_modules/three/examples/jsm/transpiler/ShaderToyDecoder.js +3 -3
  364. package/node_modules/three/examples/jsm/transpiler/TSLEncoder.js +336 -111
  365. package/node_modules/three/examples/jsm/transpiler/Transpiler.js +50 -1
  366. package/node_modules/three/examples/jsm/transpiler/TranspilerUtils.js +29 -0
  367. package/node_modules/three/examples/jsm/transpiler/WGSLEncoder.js +812 -0
  368. package/node_modules/three/examples/jsm/tsl/display/AfterImageNode.js +244 -0
  369. package/node_modules/three/examples/jsm/tsl/display/AnaglyphPassNode.js +107 -0
  370. package/node_modules/three/examples/jsm/tsl/display/AnamorphicNode.js +282 -0
  371. package/node_modules/three/examples/jsm/tsl/display/BleachBypass.js +33 -0
  372. package/node_modules/three/examples/jsm/tsl/display/BloomNode.js +524 -0
  373. package/node_modules/three/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
  374. package/node_modules/three/examples/jsm/tsl/display/DenoiseNode.js +334 -0
  375. package/node_modules/three/examples/jsm/tsl/display/DepthOfFieldNode.js +554 -0
  376. package/node_modules/three/examples/jsm/tsl/display/DotScreenNode.js +104 -0
  377. package/node_modules/three/examples/jsm/tsl/display/FXAANode.js +365 -0
  378. package/node_modules/three/examples/jsm/tsl/display/FilmNode.js +101 -0
  379. package/node_modules/three/examples/jsm/tsl/display/GTAONode.js +570 -0
  380. package/node_modules/three/examples/jsm/tsl/display/GaussianBlurNode.js +380 -0
  381. package/node_modules/three/examples/jsm/tsl/display/LensflareNode.js +279 -0
  382. package/node_modules/three/examples/jsm/tsl/display/Lut3DNode.js +109 -0
  383. package/node_modules/three/examples/jsm/tsl/display/MotionBlur.js +33 -0
  384. package/node_modules/three/examples/jsm/tsl/display/OutlineNode.js +762 -0
  385. package/node_modules/three/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +89 -0
  386. package/node_modules/three/examples/jsm/tsl/display/PixelationPassNode.js +334 -0
  387. package/node_modules/three/examples/jsm/tsl/display/RGBShiftNode.js +96 -0
  388. package/node_modules/three/examples/jsm/tsl/display/SMAANode.js +768 -0
  389. package/node_modules/three/examples/jsm/tsl/display/SSAAPassNode.js +358 -0
  390. package/node_modules/three/examples/jsm/tsl/display/SSGINode.js +654 -0
  391. package/node_modules/three/examples/jsm/tsl/display/SSRNode.js +656 -0
  392. package/node_modules/three/examples/jsm/tsl/display/SSSNode.js +488 -0
  393. package/node_modules/three/examples/jsm/tsl/display/Sepia.js +24 -0
  394. package/node_modules/three/examples/jsm/tsl/display/SobelOperatorNode.js +168 -0
  395. package/node_modules/three/examples/jsm/tsl/display/StereoCompositePassNode.js +185 -0
  396. package/node_modules/three/examples/jsm/tsl/display/StereoPassNode.js +120 -0
  397. package/node_modules/three/examples/jsm/tsl/display/TRAANode.js +578 -0
  398. package/node_modules/three/examples/jsm/tsl/display/TransitionNode.js +141 -0
  399. package/node_modules/three/examples/jsm/tsl/display/boxBlur.js +65 -0
  400. package/node_modules/three/examples/jsm/tsl/display/hashBlur.js +54 -0
  401. package/node_modules/three/examples/jsm/tsl/lighting/TiledLightsNode.js +442 -0
  402. package/node_modules/three/examples/jsm/tsl/math/Bayer.js +34 -0
  403. package/node_modules/three/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
  404. package/node_modules/three/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
  405. package/node_modules/three/examples/jsm/tsl/utils/Raymarching.js +70 -0
  406. package/node_modules/three/examples/jsm/utils/BufferGeometryUtils.js +109 -45
  407. package/node_modules/three/examples/jsm/utils/CameraUtils.js +15 -6
  408. package/node_modules/three/examples/jsm/utils/GeometryCompressionUtils.js +54 -146
  409. package/node_modules/three/examples/jsm/utils/GeometryUtils.js +32 -27
  410. package/node_modules/three/examples/jsm/utils/LDrawUtils.js +13 -4
  411. package/node_modules/three/examples/jsm/utils/SceneOptimizer.js +458 -0
  412. package/node_modules/three/examples/jsm/utils/SceneUtils.js +112 -3
  413. package/node_modules/three/examples/jsm/utils/ShadowMapViewer.js +51 -31
  414. package/node_modules/three/examples/jsm/utils/ShadowMapViewerGPU.js +233 -0
  415. package/node_modules/three/examples/jsm/utils/SkeletonUtils.js +145 -68
  416. package/node_modules/three/examples/jsm/utils/SortUtils.js +23 -8
  417. package/node_modules/three/examples/jsm/utils/UVsDebug.js +12 -4
  418. package/node_modules/three/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +19 -2
  419. package/node_modules/three/examples/jsm/utils/WebGPUTextureUtils.js +81 -0
  420. package/node_modules/three/examples/jsm/utils/WorkerPool.js +67 -2
  421. package/node_modules/three/examples/jsm/webxr/ARButton.js +19 -0
  422. package/node_modules/three/examples/jsm/webxr/OculusHandModel.js +87 -2
  423. package/node_modules/three/examples/jsm/webxr/OculusHandPointerModel.js +148 -22
  424. package/node_modules/three/examples/jsm/webxr/Text2D.js +20 -6
  425. package/node_modules/three/examples/jsm/webxr/VRButton.js +44 -5
  426. package/node_modules/three/examples/jsm/webxr/XRButton.js +23 -1
  427. package/node_modules/three/examples/jsm/webxr/XRControllerModelFactory.js +103 -4
  428. package/node_modules/three/examples/jsm/webxr/XREstimatedLight.js +35 -4
  429. package/node_modules/three/examples/jsm/webxr/XRHandMeshModel.js +37 -0
  430. package/node_modules/three/examples/jsm/webxr/XRHandModelFactory.js +101 -9
  431. package/node_modules/three/examples/jsm/webxr/XRHandPrimitiveModel.js +44 -0
  432. package/node_modules/three/examples/jsm/webxr/XRPlanes.js +18 -0
  433. package/node_modules/three/package.json +25 -20
  434. package/node_modules/three/src/Three.Core.js +185 -0
  435. package/node_modules/three/src/Three.Legacy.js +0 -1
  436. package/node_modules/three/src/Three.TSL.js +633 -0
  437. package/node_modules/three/src/Three.WebGPU.Nodes.js +26 -0
  438. package/node_modules/three/src/Three.WebGPU.js +28 -0
  439. package/node_modules/three/src/Three.js +1 -176
  440. package/node_modules/three/src/animation/AnimationAction.js +262 -30
  441. package/node_modules/three/src/animation/AnimationClip.js +164 -9
  442. package/node_modules/three/src/animation/AnimationMixer.js +99 -15
  443. package/node_modules/three/src/animation/AnimationObjectGroup.js +45 -21
  444. package/node_modules/three/src/animation/AnimationUtils.js +169 -19
  445. package/node_modules/three/src/animation/KeyframeTrack.js +151 -16
  446. package/node_modules/three/src/animation/PropertyBinding.js +91 -16
  447. package/node_modules/three/src/animation/PropertyMixer.js +72 -5
  448. package/node_modules/three/src/animation/tracks/BooleanKeyframeTrack.js +42 -6
  449. package/node_modules/three/src/animation/tracks/ColorKeyframeTrack.js +26 -5
  450. package/node_modules/three/src/animation/tracks/NumberKeyframeTrack.js +26 -2
  451. package/node_modules/three/src/animation/tracks/QuaternionKeyframeTrack.js +31 -3
  452. package/node_modules/three/src/animation/tracks/StringKeyframeTrack.js +42 -2
  453. package/node_modules/three/src/animation/tracks/VectorKeyframeTrack.js +26 -2
  454. package/node_modules/three/src/audio/Audio.js +388 -10
  455. package/node_modules/three/src/audio/AudioAnalyser.js +58 -1
  456. package/node_modules/three/src/audio/AudioContext.js +15 -0
  457. package/node_modules/three/src/audio/AudioListener.js +89 -10
  458. package/node_modules/three/src/audio/PositionalAudio.js +107 -0
  459. package/node_modules/three/src/cameras/ArrayCamera.js +37 -0
  460. package/node_modules/three/src/cameras/Camera.js +61 -0
  461. package/node_modules/three/src/cameras/CubeCamera.js +66 -0
  462. package/node_modules/three/src/cameras/OrthographicCamera.js +110 -1
  463. package/node_modules/three/src/cameras/PerspectiveCamera.js +174 -35
  464. package/node_modules/three/src/cameras/StereoCamera.js +48 -2
  465. package/node_modules/three/src/constants.js +1477 -18
  466. package/node_modules/three/src/core/BufferAttribute.js +417 -23
  467. package/node_modules/three/src/core/BufferGeometry.js +416 -49
  468. package/node_modules/three/src/core/Clock.js +62 -8
  469. package/node_modules/three/src/core/EventDispatcher.js +52 -8
  470. package/node_modules/three/src/core/GLBufferAttribute.js +113 -2
  471. package/node_modules/three/src/core/InstancedBufferAttribute.js +29 -0
  472. package/node_modules/three/src/core/InstancedBufferGeometry.js +20 -0
  473. package/node_modules/three/src/core/InstancedInterleavedBuffer.js +26 -0
  474. package/node_modules/three/src/core/InterleavedBuffer.js +141 -16
  475. package/node_modules/three/src/core/InterleavedBufferAttribute.js +200 -2
  476. package/node_modules/three/src/core/Layers.js +71 -10
  477. package/node_modules/three/src/core/Object3D.js +665 -54
  478. package/node_modules/three/src/core/Raycaster.js +160 -8
  479. package/node_modules/three/src/core/RenderTarget.js +297 -36
  480. package/node_modules/three/src/core/RenderTarget3D.js +48 -0
  481. package/node_modules/three/src/core/Timer.js +184 -0
  482. package/node_modules/three/src/core/Uniform.js +29 -0
  483. package/node_modules/three/src/core/UniformsGroup.js +84 -2
  484. package/node_modules/three/src/extras/Controls.js +120 -0
  485. package/node_modules/three/src/extras/DataUtils.js +50 -9
  486. package/node_modules/three/src/extras/Earcut.js +18 -779
  487. package/node_modules/three/src/extras/ImageUtils.js +22 -14
  488. package/node_modules/three/src/extras/PMREMGenerator.js +329 -64
  489. package/node_modules/three/src/extras/ShapeUtils.js +24 -2
  490. package/node_modules/three/src/extras/TextureUtils.js +293 -0
  491. package/node_modules/three/src/extras/core/Curve.js +156 -55
  492. package/node_modules/three/src/extras/core/CurvePath.js +63 -22
  493. package/node_modules/three/src/extras/core/Interpolations.js +34 -2
  494. package/node_modules/three/src/extras/core/Path.js +134 -1
  495. package/node_modules/three/src/extras/core/Shape.js +66 -3
  496. package/node_modules/three/src/extras/core/ShapePath.js +80 -4
  497. package/node_modules/three/src/extras/curves/ArcCurve.js +22 -0
  498. package/node_modules/three/src/extras/curves/CatmullRomCurve3.js +89 -18
  499. package/node_modules/three/src/extras/curves/CubicBezierCurve.js +67 -0
  500. package/node_modules/three/src/extras/curves/CubicBezierCurve3.js +50 -0
  501. package/node_modules/three/src/extras/curves/EllipseCurve.js +104 -2
  502. package/node_modules/three/src/extras/curves/LineCurve.js +36 -0
  503. package/node_modules/three/src/extras/curves/LineCurve3.js +36 -0
  504. package/node_modules/three/src/extras/curves/QuadraticBezierCurve.js +59 -0
  505. package/node_modules/three/src/extras/curves/QuadraticBezierCurve3.js +43 -0
  506. package/node_modules/three/src/extras/curves/SplineCurve.js +48 -0
  507. package/node_modules/three/src/extras/lib/earcut.js +685 -0
  508. package/node_modules/three/src/geometries/BoxGeometry.js +39 -0
  509. package/node_modules/three/src/geometries/CapsuleGeometry.js +196 -11
  510. package/node_modules/three/src/geometries/CircleGeometry.js +41 -0
  511. package/node_modules/three/src/geometries/ConeGeometry.js +39 -0
  512. package/node_modules/three/src/geometries/CylinderGeometry.js +51 -4
  513. package/node_modules/three/src/geometries/DodecahedronGeometry.js +33 -0
  514. package/node_modules/three/src/geometries/EdgesGeometry.js +30 -2
  515. package/node_modules/three/src/geometries/ExtrudeGeometry.js +146 -50
  516. package/node_modules/three/src/geometries/IcosahedronGeometry.js +33 -0
  517. package/node_modules/three/src/geometries/LatheGeometry.js +44 -3
  518. package/node_modules/three/src/geometries/OctahedronGeometry.js +33 -0
  519. package/node_modules/three/src/geometries/PlaneGeometry.js +35 -0
  520. package/node_modules/three/src/geometries/PolyhedronGeometry.js +29 -0
  521. package/node_modules/three/src/geometries/RingGeometry.js +37 -0
  522. package/node_modules/three/src/geometries/ShapeGeometry.js +38 -0
  523. package/node_modules/three/src/geometries/SphereGeometry.js +38 -0
  524. package/node_modules/three/src/geometries/TetrahedronGeometry.js +33 -0
  525. package/node_modules/three/src/geometries/TorusGeometry.js +36 -0
  526. package/node_modules/three/src/geometries/TorusKnotGeometry.js +39 -0
  527. package/node_modules/three/src/geometries/TubeGeometry.js +50 -0
  528. package/node_modules/three/src/geometries/WireframeGeometry.js +32 -0
  529. package/node_modules/three/src/helpers/ArrowHelper.js +62 -5
  530. package/node_modules/three/src/helpers/AxesHelper.js +28 -0
  531. package/node_modules/three/src/helpers/Box3Helper.js +28 -0
  532. package/node_modules/three/src/helpers/BoxHelper.js +43 -7
  533. package/node_modules/three/src/helpers/CameraHelper.js +100 -27
  534. package/node_modules/three/src/helpers/DirectionalLightHelper.js +52 -0
  535. package/node_modules/three/src/helpers/GridHelper.js +26 -0
  536. package/node_modules/three/src/helpers/HemisphereLightHelper.js +39 -0
  537. package/node_modules/three/src/helpers/PlaneHelper.js +33 -0
  538. package/node_modules/three/src/helpers/PointLightHelper.js +43 -0
  539. package/node_modules/three/src/helpers/PolarGridHelper.js +30 -0
  540. package/node_modules/three/src/helpers/SkeletonHelper.js +73 -7
  541. package/node_modules/three/src/helpers/SpotLightHelper.js +58 -1
  542. package/node_modules/three/src/lights/AmbientLight.js +25 -0
  543. package/node_modules/three/src/lights/DirectionalLight.js +57 -0
  544. package/node_modules/three/src/lights/DirectionalLightShadow.js +15 -0
  545. package/node_modules/three/src/lights/HemisphereLight.js +32 -0
  546. package/node_modules/three/src/lights/Light.js +37 -0
  547. package/node_modules/three/src/lights/LightProbe.js +43 -0
  548. package/node_modules/three/src/lights/LightShadow.js +198 -7
  549. package/node_modules/three/src/lights/PointLight.js +59 -0
  550. package/node_modules/three/src/lights/PointLightShadow.js +22 -1
  551. package/node_modules/three/src/lights/RectAreaLight.js +59 -0
  552. package/node_modules/three/src/lights/SpotLight.js +102 -0
  553. package/node_modules/three/src/lights/SpotLightShadow.js +33 -3
  554. package/node_modules/three/src/lights/webgpu/IESSpotLight.js +46 -0
  555. package/node_modules/three/src/lights/webgpu/ProjectorLight.js +46 -0
  556. package/node_modules/three/src/loaders/AnimationLoader.js +34 -2
  557. package/node_modules/three/src/loaders/AudioLoader.js +34 -2
  558. package/node_modules/three/src/loaders/BufferGeometryLoader.js +38 -13
  559. package/node_modules/three/src/loaders/Cache.js +47 -2
  560. package/node_modules/three/src/loaders/CompressedTextureLoader.js +36 -3
  561. package/node_modules/three/src/loaders/CubeTextureLoader.js +45 -0
  562. package/node_modules/three/src/loaders/DataTextureLoader.js +45 -8
  563. package/node_modules/three/src/loaders/FileLoader.js +90 -6
  564. package/node_modules/three/src/loaders/ImageBitmapLoader.js +108 -11
  565. package/node_modules/three/src/loaders/ImageLoader.js +85 -8
  566. package/node_modules/three/src/loaders/Loader.js +144 -0
  567. package/node_modules/three/src/loaders/LoaderUtils.js +18 -34
  568. package/node_modules/three/src/loaders/LoadingManager.js +187 -0
  569. package/node_modules/three/src/loaders/MaterialLoader.js +70 -4
  570. package/node_modules/three/src/loaders/ObjectLoader.js +146 -30
  571. package/node_modules/three/src/loaders/TextureLoader.js +33 -0
  572. package/node_modules/three/src/loaders/nodes/NodeLoader.js +194 -0
  573. package/node_modules/three/src/loaders/nodes/NodeMaterialLoader.js +108 -0
  574. package/node_modules/three/src/loaders/nodes/NodeObjectLoader.js +151 -0
  575. package/node_modules/three/src/materials/LineBasicMaterial.js +74 -1
  576. package/node_modules/three/src/materials/LineDashedMaterial.js +52 -1
  577. package/node_modules/three/src/materials/Material.js +504 -11
  578. package/node_modules/three/src/materials/MeshBasicMaterial.js +172 -3
  579. package/node_modules/three/src/materials/MeshDepthMaterial.js +94 -0
  580. package/node_modules/three/src/materials/MeshDistanceMaterial.js +76 -0
  581. package/node_modules/three/src/materials/MeshLambertMaterial.js +278 -1
  582. package/node_modules/three/src/materials/MeshMatcapMaterial.js +164 -0
  583. package/node_modules/three/src/materials/MeshNormalMaterial.js +114 -0
  584. package/node_modules/three/src/materials/MeshPhongMaterial.js +293 -1
  585. package/node_modules/three/src/materials/MeshPhysicalMaterial.js +316 -4
  586. package/node_modules/three/src/materials/MeshStandardMaterial.js +304 -3
  587. package/node_modules/three/src/materials/MeshToonMaterial.js +219 -0
  588. package/node_modules/three/src/materials/PointsMaterial.js +89 -0
  589. package/node_modules/three/src/materials/RawShaderMaterial.js +25 -0
  590. package/node_modules/three/src/materials/ShaderMaterial.js +215 -10
  591. package/node_modules/three/src/materials/ShadowMaterial.js +54 -0
  592. package/node_modules/three/src/materials/SpriteMaterial.js +82 -0
  593. package/node_modules/three/{examples/jsm/nodes/materials → src/materials/nodes}/Line2NodeMaterial.js +206 -100
  594. package/node_modules/three/src/materials/nodes/LineBasicNodeMaterial.js +46 -0
  595. package/node_modules/three/src/materials/nodes/LineDashedNodeMaterial.js +132 -0
  596. package/node_modules/three/src/materials/nodes/MeshBasicNodeMaterial.js +134 -0
  597. package/node_modules/three/src/materials/nodes/MeshLambertNodeMaterial.js +82 -0
  598. package/node_modules/three/src/materials/nodes/MeshMatcapNodeMaterial.js +77 -0
  599. package/node_modules/three/src/materials/nodes/MeshNormalNodeMaterial.js +67 -0
  600. package/node_modules/three/src/materials/nodes/MeshPhongNodeMaterial.js +141 -0
  601. package/node_modules/three/src/materials/nodes/MeshPhysicalNodeMaterial.js +518 -0
  602. package/node_modules/three/src/materials/nodes/MeshSSSNodeMaterial.js +175 -0
  603. package/node_modules/three/src/materials/nodes/MeshStandardNodeMaterial.js +186 -0
  604. package/node_modules/three/src/materials/nodes/MeshToonNodeMaterial.js +66 -0
  605. package/node_modules/three/src/materials/nodes/NodeMaterial.js +1310 -0
  606. package/node_modules/three/{examples/jsm/nodes/materials/Materials.js → src/materials/nodes/NodeMaterials.js} +7 -2
  607. package/node_modules/three/src/materials/nodes/PointsNodeMaterial.js +211 -0
  608. package/node_modules/three/src/materials/nodes/ShadowNodeMaterial.js +76 -0
  609. package/node_modules/three/src/materials/nodes/SpriteNodeMaterial.js +186 -0
  610. package/node_modules/three/src/materials/nodes/VolumeNodeMaterial.js +81 -0
  611. package/node_modules/three/src/materials/nodes/manager/NodeMaterialObserver.js +613 -0
  612. package/node_modules/three/src/math/Box2.js +181 -4
  613. package/node_modules/three/src/math/Box3.js +277 -6
  614. package/node_modules/three/src/math/Color.js +355 -11
  615. package/node_modules/three/src/math/ColorManagement.js +161 -85
  616. package/node_modules/three/src/math/Cylindrical.js +65 -6
  617. package/node_modules/three/src/math/Euler.js +139 -5
  618. package/node_modules/three/src/math/Frustum.js +108 -9
  619. package/node_modules/three/src/math/FrustumArray.js +258 -0
  620. package/node_modules/three/src/math/Interpolant.js +87 -8
  621. package/node_modules/three/src/math/Line3.js +223 -2
  622. package/node_modules/three/src/math/MathUtils.js +408 -20
  623. package/node_modules/three/src/math/Matrix2.js +124 -0
  624. package/node_modules/three/src/math/Matrix3.js +229 -4
  625. package/node_modules/three/src/math/Matrix4.js +416 -30
  626. package/node_modules/three/src/math/Plane.js +164 -2
  627. package/node_modules/three/src/math/Quaternion.js +345 -86
  628. package/node_modules/three/src/math/Ray.js +162 -0
  629. package/node_modules/three/src/math/Sphere.js +175 -0
  630. package/node_modules/three/src/math/Spherical.js +74 -13
  631. package/node_modules/three/src/math/SphericalHarmonics3.js +112 -14
  632. package/node_modules/three/src/math/Triangle.js +230 -2
  633. package/node_modules/three/src/math/Vector2.js +396 -10
  634. package/node_modules/three/src/math/Vector3.js +557 -20
  635. package/node_modules/three/src/math/Vector4.js +428 -9
  636. package/node_modules/three/src/math/interpolants/CubicInterpolant.js +10 -1
  637. package/node_modules/three/src/math/interpolants/DiscreteInterpolant.js +10 -2
  638. package/node_modules/three/src/math/interpolants/LinearInterpolant.js +13 -0
  639. package/node_modules/three/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
  640. package/node_modules/three/src/nodes/Nodes.js +148 -0
  641. package/node_modules/three/src/nodes/TSL.js +173 -0
  642. package/node_modules/three/src/nodes/accessors/AccessorsUtils.js +53 -0
  643. package/node_modules/three/src/nodes/accessors/Arrays.js +68 -0
  644. package/node_modules/three/src/nodes/accessors/BatchNode.js +163 -0
  645. package/node_modules/three/src/nodes/accessors/Bitangent.js +82 -0
  646. package/node_modules/three/src/nodes/accessors/BufferAttributeNode.js +340 -0
  647. package/node_modules/three/src/nodes/accessors/BufferNode.js +101 -0
  648. package/node_modules/three/src/nodes/accessors/BuiltinNode.js +63 -0
  649. package/node_modules/three/src/nodes/accessors/Camera.js +282 -0
  650. package/node_modules/three/src/nodes/accessors/ClippingNode.js +255 -0
  651. package/node_modules/three/src/nodes/accessors/CubeTextureNode.js +190 -0
  652. package/node_modules/three/src/nodes/accessors/InstanceNode.js +244 -0
  653. package/node_modules/three/src/nodes/accessors/InstancedMeshNode.js +50 -0
  654. package/node_modules/three/src/nodes/accessors/Lights.js +139 -0
  655. package/node_modules/three/src/nodes/accessors/MaterialNode.js +775 -0
  656. package/node_modules/three/src/nodes/accessors/MaterialProperties.js +59 -0
  657. package/node_modules/three/src/nodes/accessors/MaterialReferenceNode.js +85 -0
  658. package/node_modules/three/src/nodes/accessors/ModelNode.js +184 -0
  659. package/node_modules/three/src/nodes/accessors/ModelViewProjectionNode.js +13 -0
  660. package/node_modules/three/{examples/jsm → src}/nodes/accessors/MorphNode.js +122 -57
  661. package/node_modules/three/src/nodes/accessors/Normal.js +243 -0
  662. package/node_modules/three/src/nodes/accessors/Object3DNode.js +268 -0
  663. package/node_modules/three/src/nodes/accessors/PointUVNode.js +55 -0
  664. package/node_modules/three/src/nodes/accessors/Position.js +90 -0
  665. package/node_modules/three/src/nodes/accessors/ReferenceBaseNode.js +357 -0
  666. package/node_modules/three/src/nodes/accessors/ReferenceNode.js +424 -0
  667. package/node_modules/three/src/nodes/accessors/ReflectVector.js +36 -0
  668. package/node_modules/three/src/nodes/accessors/RendererReferenceNode.js +79 -0
  669. package/node_modules/three/src/nodes/accessors/SceneNode.js +145 -0
  670. package/node_modules/three/src/nodes/accessors/SkinningNode.js +327 -0
  671. package/node_modules/three/src/nodes/accessors/StorageBufferNode.js +416 -0
  672. package/node_modules/three/src/nodes/accessors/StorageTextureNode.js +264 -0
  673. package/node_modules/three/src/nodes/accessors/Tangent.js +70 -0
  674. package/node_modules/three/src/nodes/accessors/TangentUtils.js +46 -0
  675. package/node_modules/three/src/nodes/accessors/Texture3DNode.js +199 -0
  676. package/node_modules/three/{examples/jsm/nodes/accessors/TextureBicubicNode.js → src/nodes/accessors/TextureBicubic.js} +28 -30
  677. package/node_modules/three/src/nodes/accessors/TextureNode.js +927 -0
  678. package/node_modules/three/src/nodes/accessors/TextureSizeNode.js +77 -0
  679. package/node_modules/three/src/nodes/accessors/UV.js +11 -0
  680. package/node_modules/three/src/nodes/accessors/UniformArrayNode.js +348 -0
  681. package/node_modules/three/src/nodes/accessors/UserDataNode.js +77 -0
  682. package/node_modules/three/src/nodes/accessors/VelocityNode.js +224 -0
  683. package/node_modules/three/src/nodes/accessors/VertexColorNode.js +110 -0
  684. package/node_modules/three/src/nodes/code/CodeNode.js +181 -0
  685. package/node_modules/three/src/nodes/code/ExpressionNode.js +68 -0
  686. package/node_modules/three/src/nodes/code/FunctionCallNode.js +187 -0
  687. package/node_modules/three/src/nodes/code/FunctionNode.js +183 -0
  688. package/node_modules/three/{examples/jsm → src}/nodes/code/ScriptableNode.js +253 -15
  689. package/node_modules/three/{examples/jsm → src}/nodes/code/ScriptableValueNode.js +95 -9
  690. package/node_modules/three/src/nodes/core/ArrayNode.js +155 -0
  691. package/node_modules/three/src/nodes/core/AssignNode.js +202 -0
  692. package/node_modules/three/src/nodes/core/AttributeNode.js +168 -0
  693. package/node_modules/three/src/nodes/core/BypassNode.js +93 -0
  694. package/node_modules/three/src/nodes/core/ConstNode.js +67 -0
  695. package/node_modules/three/src/nodes/core/ContextNode.js +184 -0
  696. package/node_modules/three/src/nodes/core/IndexNode.js +164 -0
  697. package/node_modules/three/src/nodes/core/InputNode.js +136 -0
  698. package/node_modules/three/src/nodes/core/InspectorNode.js +128 -0
  699. package/node_modules/three/src/nodes/core/IsolateNode.js +133 -0
  700. package/node_modules/three/src/nodes/core/LightingModel.js +77 -0
  701. package/node_modules/three/src/nodes/core/MRTNode.js +150 -0
  702. package/node_modules/three/src/nodes/core/Node.js +1083 -0
  703. package/node_modules/three/src/nodes/core/NodeAttribute.js +53 -0
  704. package/node_modules/three/src/nodes/core/NodeBuilder.js +3081 -0
  705. package/node_modules/three/src/nodes/core/NodeCache.js +75 -0
  706. package/node_modules/three/src/nodes/core/NodeCode.js +46 -0
  707. package/node_modules/three/src/nodes/core/NodeFrame.js +306 -0
  708. package/node_modules/three/src/nodes/core/NodeFunction.js +69 -0
  709. package/node_modules/three/src/nodes/core/NodeFunctionInput.js +61 -0
  710. package/node_modules/three/src/nodes/core/NodeParser.js +23 -0
  711. package/node_modules/three/src/nodes/core/NodeUniform.js +91 -0
  712. package/node_modules/three/src/nodes/core/NodeUtils.js +406 -0
  713. package/node_modules/three/src/nodes/core/NodeVar.js +60 -0
  714. package/node_modules/three/src/nodes/core/NodeVarying.js +63 -0
  715. package/node_modules/three/src/nodes/core/OutputStructNode.js +103 -0
  716. package/node_modules/three/src/nodes/core/ParameterNode.js +94 -0
  717. package/node_modules/three/src/nodes/core/PropertyNode.js +351 -0
  718. package/node_modules/three/src/nodes/core/StackNode.js +377 -0
  719. package/node_modules/three/src/nodes/core/StructNode.js +120 -0
  720. package/node_modules/three/src/nodes/core/StructType.js +13 -0
  721. package/node_modules/three/src/nodes/core/StructTypeNode.js +154 -0
  722. package/node_modules/three/src/nodes/core/SubBuildNode.js +89 -0
  723. package/node_modules/three/src/nodes/core/TempNode.js +88 -0
  724. package/node_modules/three/src/nodes/core/UniformGroupNode.js +137 -0
  725. package/node_modules/three/src/nodes/core/UniformNode.js +243 -0
  726. package/node_modules/three/src/nodes/core/VarNode.js +342 -0
  727. package/node_modules/three/src/nodes/core/VaryingNode.js +227 -0
  728. package/node_modules/three/src/nodes/core/constants.js +68 -0
  729. package/node_modules/three/src/nodes/display/BlendModes.js +235 -0
  730. package/node_modules/three/src/nodes/display/BumpMapNode.js +117 -0
  731. package/node_modules/three/src/nodes/display/ColorAdjustment.js +141 -0
  732. package/node_modules/three/src/nodes/display/ColorSpaceFunctions.js +54 -0
  733. package/node_modules/three/src/nodes/display/ColorSpaceNode.js +164 -0
  734. package/node_modules/three/src/nodes/display/FrontFacingNode.js +102 -0
  735. package/node_modules/three/src/nodes/display/NormalMapNode.js +118 -0
  736. package/node_modules/three/src/nodes/display/PassNode.js +946 -0
  737. package/node_modules/three/src/nodes/display/PosterizeNode.js +65 -0
  738. package/node_modules/three/src/nodes/display/RenderOutputNode.js +150 -0
  739. package/node_modules/three/src/nodes/display/ScreenNode.js +290 -0
  740. package/node_modules/three/src/nodes/display/ToneMappingFunctions.js +242 -0
  741. package/node_modules/three/src/nodes/display/ToneMappingNode.js +147 -0
  742. package/node_modules/three/src/nodes/display/ToonOutlinePassNode.js +191 -0
  743. package/node_modules/three/src/nodes/display/ViewportDepthNode.js +294 -0
  744. package/node_modules/three/src/nodes/display/ViewportDepthTextureNode.js +67 -0
  745. package/node_modules/three/src/nodes/display/ViewportSharedTextureNode.js +73 -0
  746. package/node_modules/three/src/nodes/display/ViewportTextureNode.js +228 -0
  747. package/node_modules/three/src/nodes/fog/Fog.js +114 -0
  748. package/node_modules/three/src/nodes/functions/BSDF/BRDF_GGX.js +55 -0
  749. package/node_modules/three/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  750. package/node_modules/three/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
  751. package/node_modules/three/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Sheen.js +9 -9
  752. package/node_modules/three/src/nodes/functions/BSDF/DFGApprox.js +71 -0
  753. package/node_modules/three/{examples/jsm → src}/nodes/functions/BSDF/D_GGX.js +2 -2
  754. package/node_modules/three/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +28 -0
  755. package/node_modules/three/{examples/jsm → src}/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  756. package/node_modules/three/{examples/jsm → src}/nodes/functions/BSDF/F_Schlick.js +2 -2
  757. package/node_modules/three/src/nodes/functions/BSDF/LTC.js +175 -0
  758. package/node_modules/three/{examples/jsm → src}/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
  759. package/node_modules/three/{examples/jsm → src}/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -4
  760. package/node_modules/three/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +29 -0
  761. package/node_modules/three/src/nodes/functions/BasicLightingModel.js +100 -0
  762. package/node_modules/three/src/nodes/functions/PhongLightingModel.js +99 -0
  763. package/node_modules/three/src/nodes/functions/PhysicalLightingModel.js +797 -0
  764. package/node_modules/three/src/nodes/functions/ShadowMaskModel.js +58 -0
  765. package/node_modules/three/src/nodes/functions/ToonLightingModel.js +70 -0
  766. package/node_modules/three/src/nodes/functions/VolumetricLightingModel.js +183 -0
  767. package/node_modules/three/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
  768. package/node_modules/three/src/nodes/functions/material/getGeometryRoughness.js +19 -0
  769. package/node_modules/three/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
  770. package/node_modules/three/{examples/jsm → src}/nodes/functions/material/getRoughness.js +2 -2
  771. package/node_modules/three/src/nodes/functions/material/getShIrradianceAt.js +28 -0
  772. package/node_modules/three/src/nodes/geometry/RangeNode.js +208 -0
  773. package/node_modules/three/src/nodes/gpgpu/AtomicFunctionNode.js +274 -0
  774. package/node_modules/three/src/nodes/gpgpu/BarrierNode.js +89 -0
  775. package/node_modules/three/src/nodes/gpgpu/ComputeBuiltinNode.js +228 -0
  776. package/node_modules/three/src/nodes/gpgpu/ComputeNode.js +284 -0
  777. package/node_modules/three/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
  778. package/node_modules/three/src/nodes/gpgpu/WorkgroupInfoNode.js +234 -0
  779. package/node_modules/three/src/nodes/lighting/AONode.js +45 -0
  780. package/node_modules/three/{examples/jsm → src}/nodes/lighting/AmbientLightNode.js +16 -8
  781. package/node_modules/three/src/nodes/lighting/AnalyticLightNode.js +256 -0
  782. package/node_modules/three/src/nodes/lighting/BasicEnvironmentNode.js +49 -0
  783. package/node_modules/three/src/nodes/lighting/BasicLightMapNode.js +49 -0
  784. package/node_modules/three/src/nodes/lighting/DirectionalLightNode.js +39 -0
  785. package/node_modules/three/src/nodes/lighting/EnvironmentNode.js +153 -0
  786. package/node_modules/three/src/nodes/lighting/HemisphereLightNode.js +87 -0
  787. package/node_modules/three/{examples/jsm → src}/nodes/lighting/IESSpotLightNode.js +20 -10
  788. package/node_modules/three/src/nodes/lighting/IrradianceNode.js +44 -0
  789. package/node_modules/three/src/nodes/lighting/LightProbeNode.js +73 -0
  790. package/node_modules/three/src/nodes/lighting/LightUtils.js +25 -0
  791. package/node_modules/three/src/nodes/lighting/LightingContextNode.js +115 -0
  792. package/node_modules/three/src/nodes/lighting/LightingNode.js +36 -0
  793. package/node_modules/three/src/nodes/lighting/LightsNode.js +453 -0
  794. package/node_modules/three/src/nodes/lighting/PointLightNode.js +102 -0
  795. package/node_modules/three/src/nodes/lighting/PointShadowNode.js +312 -0
  796. package/node_modules/three/src/nodes/lighting/ProjectorLightNode.js +91 -0
  797. package/node_modules/three/src/nodes/lighting/RectAreaLightNode.js +133 -0
  798. package/node_modules/three/src/nodes/lighting/ShadowBaseNode.js +81 -0
  799. package/node_modules/three/src/nodes/lighting/ShadowFilterNode.js +276 -0
  800. package/node_modules/three/src/nodes/lighting/ShadowNode.js +811 -0
  801. package/node_modules/three/src/nodes/lighting/SpotLightNode.js +168 -0
  802. package/node_modules/three/src/nodes/materialx/MaterialXNodes.js +197 -0
  803. package/node_modules/three/{examples/jsm → src}/nodes/materialx/lib/mx_hsv.js +43 -46
  804. package/node_modules/three/{examples/jsm → src}/nodes/materialx/lib/mx_noise.js +625 -564
  805. package/node_modules/three/{examples/jsm → src}/nodes/materialx/lib/mx_transform_color.js +3 -9
  806. package/node_modules/three/src/nodes/math/BitcastNode.js +156 -0
  807. package/node_modules/three/src/nodes/math/ConditionalNode.js +245 -0
  808. package/node_modules/three/src/nodes/math/Hash.js +21 -0
  809. package/node_modules/three/src/nodes/math/MathNode.js +1167 -0
  810. package/node_modules/three/src/nodes/math/MathUtils.js +54 -0
  811. package/node_modules/three/src/nodes/math/OperatorNode.js +751 -0
  812. package/node_modules/three/{examples/jsm → src}/nodes/math/TriNoise3D.js +34 -34
  813. package/node_modules/three/{examples/jsm → src}/nodes/parsers/GLSLNodeFunction.js +23 -7
  814. package/node_modules/three/{examples/jsm → src}/nodes/parsers/GLSLNodeParser.js +11 -0
  815. package/node_modules/three/src/nodes/pmrem/PMREMNode.js +397 -0
  816. package/node_modules/three/src/nodes/pmrem/PMREMUtils.js +403 -0
  817. package/node_modules/three/src/nodes/procedural/Checker.js +22 -0
  818. package/node_modules/three/src/nodes/shapes/Shapes.js +33 -0
  819. package/node_modules/three/src/nodes/tsl/TSLBase.js +36 -0
  820. package/node_modules/three/src/nodes/tsl/TSLCore.js +1229 -0
  821. package/node_modules/three/src/nodes/utils/ArrayElementNode.js +77 -0
  822. package/node_modules/three/src/nodes/utils/ConvertNode.js +100 -0
  823. package/node_modules/three/src/nodes/utils/CubeMapNode.js +237 -0
  824. package/node_modules/three/src/nodes/utils/DebugNode.js +83 -0
  825. package/node_modules/three/src/nodes/utils/Discard.js +24 -0
  826. package/node_modules/three/src/nodes/utils/EquirectUV.js +27 -0
  827. package/node_modules/three/src/nodes/utils/EventNode.js +119 -0
  828. package/node_modules/three/src/nodes/utils/FlipNode.js +106 -0
  829. package/node_modules/three/src/nodes/utils/FunctionOverloadingNode.js +170 -0
  830. package/node_modules/three/src/nodes/utils/JoinNode.js +117 -0
  831. package/node_modules/three/src/nodes/utils/LoopNode.js +349 -0
  832. package/node_modules/three/src/nodes/utils/MatcapUV.js +22 -0
  833. package/node_modules/three/src/nodes/utils/MaxMipLevelNode.js +103 -0
  834. package/node_modules/three/src/nodes/utils/MemberNode.js +120 -0
  835. package/node_modules/three/src/nodes/utils/Oscillators.js +41 -0
  836. package/node_modules/three/src/nodes/utils/Packing.js +21 -0
  837. package/node_modules/three/src/nodes/utils/PostProcessingUtils.js +122 -0
  838. package/node_modules/three/src/nodes/utils/RTTNode.js +289 -0
  839. package/node_modules/three/src/nodes/utils/ReflectorNode.js +630 -0
  840. package/node_modules/three/src/nodes/utils/RemapNode.js +125 -0
  841. package/node_modules/three/{examples/jsm → src}/nodes/utils/RotateNode.js +48 -13
  842. package/node_modules/three/src/nodes/utils/SampleNode.js +91 -0
  843. package/node_modules/three/{examples/jsm → src}/nodes/utils/SetNode.js +50 -4
  844. package/node_modules/three/{examples/jsm → src}/nodes/utils/SplitNode.js +73 -6
  845. package/node_modules/three/src/nodes/utils/SpriteSheetUVNode.js +90 -0
  846. package/node_modules/three/src/nodes/utils/SpriteUtils.js +63 -0
  847. package/node_modules/three/src/nodes/utils/StorageArrayElementNode.js +143 -0
  848. package/node_modules/three/src/nodes/utils/Timer.js +26 -0
  849. package/node_modules/three/src/nodes/utils/TriplanarTextures.js +65 -0
  850. package/node_modules/three/src/nodes/utils/UVUtils.js +39 -0
  851. package/node_modules/three/src/nodes/utils/ViewportUtils.js +26 -0
  852. package/node_modules/three/src/objects/BatchedMesh.js +940 -305
  853. package/node_modules/three/src/objects/Bone.js +24 -0
  854. package/node_modules/three/src/objects/ClippingGroup.js +68 -0
  855. package/node_modules/three/src/objects/Group.js +24 -0
  856. package/node_modules/three/src/objects/InstancedMesh.js +182 -1
  857. package/node_modules/three/src/objects/LOD.js +120 -5
  858. package/node_modules/three/src/objects/Line.js +151 -44
  859. package/node_modules/three/src/objects/LineLoop.js +20 -0
  860. package/node_modules/three/src/objects/LineSegments.js +20 -1
  861. package/node_modules/three/src/objects/Mesh.js +91 -24
  862. package/node_modules/three/src/objects/Points.js +62 -0
  863. package/node_modules/three/src/objects/Skeleton.js +111 -5
  864. package/node_modules/three/src/objects/SkinnedMesh.js +102 -6
  865. package/node_modules/three/src/objects/Sprite.js +65 -1
  866. package/node_modules/three/src/renderers/WebGL3DRenderTarget.js +26 -0
  867. package/node_modules/three/src/renderers/WebGLArrayRenderTarget.js +26 -0
  868. package/node_modules/three/src/renderers/WebGLCubeRenderTarget.js +42 -15
  869. package/node_modules/three/src/renderers/WebGLRenderTarget.js +19 -0
  870. package/node_modules/three/src/renderers/WebGLRenderer.js +1222 -318
  871. package/node_modules/three/src/renderers/common/Animation.js +159 -0
  872. package/node_modules/three/{examples/jsm → src}/renderers/common/Attributes.js +45 -2
  873. package/node_modules/three/src/renderers/common/Backend.js +748 -0
  874. package/node_modules/three/src/renderers/common/Background.js +212 -0
  875. package/node_modules/three/src/renderers/common/BindGroup.js +61 -0
  876. package/node_modules/three/src/renderers/common/Binding.js +60 -0
  877. package/node_modules/three/src/renderers/common/Bindings.js +379 -0
  878. package/node_modules/three/src/renderers/common/Buffer.js +87 -0
  879. package/node_modules/three/src/renderers/common/BufferUtils.js +58 -0
  880. package/node_modules/three/src/renderers/common/BundleGroup.js +83 -0
  881. package/node_modules/three/src/renderers/common/CanvasTarget.js +341 -0
  882. package/node_modules/three/src/renderers/common/ChainMap.js +98 -0
  883. package/node_modules/three/src/renderers/common/ClippingContext.js +262 -0
  884. package/node_modules/three/src/renderers/common/Color4.js +77 -0
  885. package/node_modules/three/src/renderers/common/ComputePipeline.js +41 -0
  886. package/node_modules/three/{examples/jsm → src}/renderers/common/Constants.js +2 -1
  887. package/node_modules/three/{examples/jsm → src}/renderers/common/CubeRenderTarget.js +43 -5
  888. package/node_modules/three/src/renderers/common/DataMap.js +90 -0
  889. package/node_modules/three/src/renderers/common/Geometries.js +370 -0
  890. package/node_modules/three/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
  891. package/node_modules/three/src/renderers/common/Info.js +172 -0
  892. package/node_modules/three/src/renderers/common/InspectorBase.js +146 -0
  893. package/node_modules/three/src/renderers/common/Lighting.js +73 -0
  894. package/node_modules/three/src/renderers/common/Pipeline.js +35 -0
  895. package/node_modules/three/{examples/jsm → src}/renderers/common/Pipelines.js +150 -7
  896. package/node_modules/three/src/renderers/common/PostProcessing.js +226 -0
  897. package/node_modules/three/src/renderers/common/ProgrammableStage.js +78 -0
  898. package/node_modules/three/src/renderers/common/QuadMesh.js +112 -0
  899. package/node_modules/three/src/renderers/common/RenderBundle.js +24 -0
  900. package/node_modules/three/src/renderers/common/RenderBundles.js +67 -0
  901. package/node_modules/three/src/renderers/common/RenderContext.js +265 -0
  902. package/node_modules/three/src/renderers/common/RenderContexts.js +116 -0
  903. package/node_modules/three/src/renderers/common/RenderList.js +404 -0
  904. package/node_modules/three/src/renderers/common/RenderLists.js +77 -0
  905. package/node_modules/three/src/renderers/common/RenderObject.js +903 -0
  906. package/node_modules/three/src/renderers/common/RenderObjects.js +202 -0
  907. package/node_modules/three/src/renderers/common/RenderPipeline.js +40 -0
  908. package/node_modules/three/src/renderers/common/Renderer.js +3290 -0
  909. package/node_modules/three/src/renderers/common/RendererUtils.js +200 -0
  910. package/node_modules/three/src/renderers/common/SampledTexture.js +152 -0
  911. package/node_modules/three/src/renderers/common/Sampler.js +165 -0
  912. package/node_modules/three/src/renderers/common/Storage3DTexture.js +100 -0
  913. package/node_modules/three/src/renderers/common/StorageArrayTexture.js +84 -0
  914. package/node_modules/three/src/renderers/common/StorageBuffer.js +41 -0
  915. package/node_modules/three/src/renderers/common/StorageBufferAttribute.js +46 -0
  916. package/node_modules/three/src/renderers/common/StorageInstancedBufferAttribute.js +46 -0
  917. package/node_modules/three/src/renderers/common/StorageTexture.js +86 -0
  918. package/node_modules/three/src/renderers/common/Textures.js +544 -0
  919. package/node_modules/three/src/renderers/common/TimestampQueryPool.js +161 -0
  920. package/node_modules/three/src/renderers/common/Uniform.js +367 -0
  921. package/node_modules/three/src/renderers/common/UniformBuffer.js +34 -0
  922. package/node_modules/three/src/renderers/common/UniformsGroup.js +487 -0
  923. package/node_modules/three/src/renderers/common/XRManager.js +1676 -0
  924. package/node_modules/three/src/renderers/common/XRRenderTarget.js +91 -0
  925. package/node_modules/three/src/renderers/common/extras/PMREMGenerator.js +1034 -0
  926. package/node_modules/three/src/renderers/common/nodes/NodeBuilderState.js +152 -0
  927. package/node_modules/three/src/renderers/common/nodes/NodeLibrary.js +196 -0
  928. package/node_modules/three/src/renderers/common/nodes/NodeSampledTexture.js +140 -0
  929. package/node_modules/three/src/renderers/common/nodes/NodeSampler.js +62 -0
  930. package/node_modules/three/src/renderers/common/nodes/NodeStorageBuffer.js +61 -0
  931. package/node_modules/three/src/renderers/common/nodes/NodeUniform.js +418 -0
  932. package/node_modules/three/src/renderers/common/nodes/NodeUniformBuffer.js +53 -0
  933. package/node_modules/three/src/renderers/common/nodes/NodeUniformsGroup.js +51 -0
  934. package/node_modules/three/src/renderers/common/nodes/Nodes.js +840 -0
  935. package/node_modules/three/src/renderers/shaders/DFGLUTData.js +64 -0
  936. package/node_modules/three/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +31 -1
  937. package/node_modules/three/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +1 -1
  938. package/node_modules/three/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -1
  939. package/node_modules/three/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +9 -1
  940. package/node_modules/three/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -33
  941. package/node_modules/three/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -22
  942. package/node_modules/three/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
  943. package/node_modules/three/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +2 -1
  944. package/node_modules/three/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +1 -1
  945. package/node_modules/three/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +3 -3
  946. package/node_modules/three/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +3 -3
  947. package/node_modules/three/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +8 -22
  948. package/node_modules/three/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +6 -0
  949. package/node_modules/three/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +55 -20
  950. package/node_modules/three/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +2 -2
  951. package/node_modules/three/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  952. package/node_modules/three/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +3 -11
  953. package/node_modules/three/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +3 -17
  954. package/node_modules/three/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +3 -3
  955. package/node_modules/three/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js +1 -1
  956. package/node_modules/three/src/renderers/shaders/ShaderChunk/morphinstance_vertex.glsl.js +14 -0
  957. package/node_modules/three/src/renderers/shaders/ShaderChunk/morphnormal_vertex.glsl.js +3 -14
  958. package/node_modules/three/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js +12 -24
  959. package/node_modules/three/src/renderers/shaders/ShaderChunk/morphtarget_vertex.glsl.js +3 -23
  960. package/node_modules/three/src/renderers/shaders/ShaderChunk/packing.glsl.js +45 -13
  961. package/node_modules/three/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
  962. package/node_modules/three/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +59 -36
  963. package/node_modules/three/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +3 -0
  964. package/node_modules/three/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +3 -3
  965. package/node_modules/three/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +33 -2
  966. package/node_modules/three/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  967. package/node_modules/three/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +47 -13
  968. package/node_modules/three/src/renderers/shaders/ShaderChunk.js +2 -2
  969. package/node_modules/three/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
  970. package/node_modules/three/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +3 -2
  971. package/node_modules/three/src/renderers/shaders/ShaderLib/depth.glsl.js +21 -2
  972. package/node_modules/three/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
  973. package/node_modules/three/src/renderers/shaders/ShaderLib/linedashed.glsl.js +1 -0
  974. package/node_modules/three/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +1 -0
  975. package/node_modules/three/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +1 -0
  976. package/node_modules/three/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +1 -0
  977. package/node_modules/three/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -0
  978. package/node_modules/three/src/renderers/shaders/ShaderLib/meshphong.glsl.js +1 -0
  979. package/node_modules/three/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +5 -0
  980. package/node_modules/three/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +1 -0
  981. package/node_modules/three/src/renderers/shaders/ShaderLib/points.glsl.js +1 -0
  982. package/node_modules/three/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -0
  983. package/node_modules/three/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
  984. package/node_modules/three/src/renderers/shaders/ShaderLib.js +4 -2
  985. package/node_modules/three/src/renderers/shaders/UniformsLib.js +6 -4
  986. package/node_modules/three/src/renderers/shaders/UniformsUtils.js +31 -3
  987. package/node_modules/three/src/renderers/webgl/WebGLAttributes.js +46 -38
  988. package/node_modules/three/src/renderers/webgl/WebGLBackground.js +69 -5
  989. package/node_modules/three/src/renderers/webgl/WebGLBindingStates.js +14 -51
  990. package/node_modules/three/src/renderers/webgl/WebGLBufferRenderer.js +19 -22
  991. package/node_modules/three/src/renderers/webgl/WebGLCapabilities.js +39 -14
  992. package/node_modules/three/src/renderers/webgl/WebGLCubeUVMaps.js +10 -6
  993. package/node_modules/three/src/renderers/webgl/WebGLExtensions.js +8 -44
  994. package/node_modules/three/src/renderers/webgl/WebGLGeometries.js +0 -28
  995. package/node_modules/three/src/renderers/webgl/WebGLIndexedBufferRenderer.js +19 -21
  996. package/node_modules/three/src/renderers/webgl/WebGLInfo.js +3 -1
  997. package/node_modules/three/src/renderers/webgl/WebGLLights.js +21 -44
  998. package/node_modules/three/src/renderers/webgl/WebGLMaterials.js +33 -9
  999. package/node_modules/three/src/renderers/webgl/WebGLMorphtargets.js +78 -210
  1000. package/node_modules/three/src/renderers/webgl/WebGLProgram.js +103 -121
  1001. package/node_modules/three/src/renderers/webgl/WebGLPrograms.js +32 -26
  1002. package/node_modules/three/src/renderers/webgl/WebGLProperties.js +7 -0
  1003. package/node_modules/three/src/renderers/webgl/WebGLRenderStates.js +15 -9
  1004. package/node_modules/three/src/renderers/webgl/WebGLShadowMap.js +41 -29
  1005. package/node_modules/three/src/renderers/webgl/WebGLState.js +104 -100
  1006. package/node_modules/three/src/renderers/webgl/WebGLTextures.js +567 -408
  1007. package/node_modules/three/src/renderers/webgl/WebGLUniforms.js +12 -2
  1008. package/node_modules/three/src/renderers/webgl/WebGLUniformsGroups.js +13 -11
  1009. package/node_modules/three/src/renderers/webgl/WebGLUtils.js +11 -81
  1010. package/node_modules/three/src/renderers/webgl-fallback/WebGLBackend.js +2612 -0
  1011. package/node_modules/three/src/renderers/webgl-fallback/WebGLBufferRenderer.js +140 -0
  1012. package/node_modules/three/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +1577 -0
  1013. package/node_modules/three/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLAttributeUtils.js +76 -3
  1014. package/node_modules/three/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +64 -0
  1015. package/node_modules/three/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLConstants.js +5 -3
  1016. package/node_modules/three/src/renderers/webgl-fallback/utils/WebGLExtensions.js +83 -0
  1017. package/node_modules/three/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLState.js +427 -21
  1018. package/node_modules/three/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +1309 -0
  1019. package/node_modules/three/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +396 -0
  1020. package/node_modules/three/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLUtils.js +72 -43
  1021. package/node_modules/three/src/renderers/webgpu/WebGPUBackend.js +2482 -0
  1022. package/node_modules/three/src/renderers/webgpu/WebGPURenderer.Nodes.js +69 -0
  1023. package/node_modules/three/src/renderers/webgpu/WebGPURenderer.js +106 -0
  1024. package/node_modules/three/src/renderers/webgpu/nodes/BasicNodeLibrary.js +66 -0
  1025. package/node_modules/three/src/renderers/webgpu/nodes/StandardNodeLibrary.js +100 -0
  1026. package/node_modules/three/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +2247 -0
  1027. package/node_modules/three/src/renderers/webgpu/nodes/WGSLNodeFunction.js +187 -0
  1028. package/node_modules/three/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  1029. package/node_modules/three/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +449 -0
  1030. package/node_modules/three/src/renderers/webgpu/utils/WebGPUBindingUtils.js +485 -0
  1031. package/node_modules/three/{examples/jsm → src}/renderers/webgpu/utils/WebGPUConstants.js +24 -4
  1032. package/node_modules/three/{examples/jsm → src}/renderers/webgpu/utils/WebGPUPipelineUtils.js +289 -72
  1033. package/node_modules/three/{examples/jsm → src}/renderers/webgpu/utils/WebGPUTexturePassUtils.js +160 -8
  1034. package/node_modules/three/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1576 -0
  1035. package/node_modules/three/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +310 -0
  1036. package/node_modules/three/src/renderers/webgpu/utils/WebGPUUtils.js +247 -0
  1037. package/node_modules/three/src/renderers/webxr/WebXRController.js +87 -2
  1038. package/node_modules/three/src/renderers/webxr/WebXRDepthSensing.js +63 -13
  1039. package/node_modules/three/src/renderers/webxr/WebXRManager.js +323 -44
  1040. package/node_modules/three/src/scenes/Fog.js +60 -0
  1041. package/node_modules/three/src/scenes/FogExp2.js +51 -0
  1042. package/node_modules/three/src/scenes/Scene.js +103 -1
  1043. package/node_modules/three/src/textures/CanvasTexture.js +28 -0
  1044. package/node_modules/three/src/textures/CompressedArrayTexture.js +71 -0
  1045. package/node_modules/three/src/textures/CompressedCubeTexture.js +29 -0
  1046. package/node_modules/three/src/textures/CompressedTexture.js +64 -6
  1047. package/node_modules/three/src/textures/CubeTexture.js +52 -4
  1048. package/node_modules/three/src/textures/Data3DTexture.js +79 -2
  1049. package/node_modules/three/src/textures/DataArrayTexture.js +107 -0
  1050. package/node_modules/three/src/textures/DataTexture.js +65 -0
  1051. package/node_modules/three/src/textures/DepthTexture.js +59 -13
  1052. package/node_modules/three/src/textures/ExternalTexture.js +56 -0
  1053. package/node_modules/three/src/textures/FramebufferTexture.js +62 -0
  1054. package/node_modules/three/src/textures/Source.js +106 -4
  1055. package/node_modules/three/src/textures/Texture.js +490 -27
  1056. package/node_modules/three/src/textures/VideoFrameTexture.js +72 -0
  1057. package/node_modules/three/src/textures/VideoTexture.js +78 -6
  1058. package/node_modules/three/src/utils.js +128 -3
  1059. package/package.json +3 -2
  1060. package/node_modules/three/examples/jsm/animation/MMDAnimationHelper.js +0 -1207
  1061. package/node_modules/three/examples/jsm/animation/MMDPhysics.js +0 -1406
  1062. package/node_modules/three/examples/jsm/cameras/CinematicCamera.js +0 -208
  1063. package/node_modules/three/examples/jsm/effects/PeppersGhostEffect.js +0 -153
  1064. package/node_modules/three/examples/jsm/exporters/MMDExporter.js +0 -217
  1065. package/node_modules/three/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
  1066. package/node_modules/three/examples/jsm/geometries/ParametricGeometries.js +0 -254
  1067. package/node_modules/three/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
  1068. package/node_modules/three/examples/jsm/libs/mmdparser.module.js +0 -11530
  1069. package/node_modules/three/examples/jsm/lights/IESSpotLight.js +0 -25
  1070. package/node_modules/three/examples/jsm/loaders/LogLuvLoader.js +0 -606
  1071. package/node_modules/three/examples/jsm/loaders/MMDLoader.js +0 -2276
  1072. package/node_modules/three/examples/jsm/loaders/RGBMLoader.js +0 -1065
  1073. package/node_modules/three/examples/jsm/loaders/TiltLoader.js +0 -520
  1074. package/node_modules/three/examples/jsm/misc/Timer.js +0 -128
  1075. package/node_modules/three/examples/jsm/nodes/Nodes.js +0 -193
  1076. package/node_modules/three/examples/jsm/nodes/accessors/BitangentNode.js +0 -89
  1077. package/node_modules/three/examples/jsm/nodes/accessors/BufferAttributeNode.js +0 -127
  1078. package/node_modules/three/examples/jsm/nodes/accessors/BufferNode.js +0 -30
  1079. package/node_modules/three/examples/jsm/nodes/accessors/CameraNode.js +0 -119
  1080. package/node_modules/three/examples/jsm/nodes/accessors/CubeTextureNode.js +0 -61
  1081. package/node_modules/three/examples/jsm/nodes/accessors/InstanceNode.js +0 -71
  1082. package/node_modules/three/examples/jsm/nodes/accessors/InstancedPointsMaterialNode.js +0 -21
  1083. package/node_modules/three/examples/jsm/nodes/accessors/MaterialNode.js +0 -314
  1084. package/node_modules/three/examples/jsm/nodes/accessors/MaterialReferenceNode.js +0 -51
  1085. package/node_modules/three/examples/jsm/nodes/accessors/ModelNode.js +0 -33
  1086. package/node_modules/three/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +0 -39
  1087. package/node_modules/three/examples/jsm/nodes/accessors/NormalNode.js +0 -96
  1088. package/node_modules/three/examples/jsm/nodes/accessors/Object3DNode.js +0 -150
  1089. package/node_modules/three/examples/jsm/nodes/accessors/PointUVNode.js +0 -26
  1090. package/node_modules/three/examples/jsm/nodes/accessors/PositionNode.js +0 -104
  1091. package/node_modules/three/examples/jsm/nodes/accessors/ReferenceNode.js +0 -102
  1092. package/node_modules/three/examples/jsm/nodes/accessors/ReflectVectorNode.js +0 -35
  1093. package/node_modules/three/examples/jsm/nodes/accessors/SceneNode.js +0 -52
  1094. package/node_modules/three/examples/jsm/nodes/accessors/SkinningNode.js +0 -103
  1095. package/node_modules/three/examples/jsm/nodes/accessors/StorageBufferNode.js +0 -54
  1096. package/node_modules/three/examples/jsm/nodes/accessors/TangentNode.js +0 -103
  1097. package/node_modules/three/examples/jsm/nodes/accessors/TextureNode.js +0 -367
  1098. package/node_modules/three/examples/jsm/nodes/accessors/TextureSizeNode.js +0 -35
  1099. package/node_modules/three/examples/jsm/nodes/accessors/TextureStoreNode.js +0 -82
  1100. package/node_modules/three/examples/jsm/nodes/accessors/UVNode.js +0 -47
  1101. package/node_modules/three/examples/jsm/nodes/accessors/UserDataNode.js +0 -29
  1102. package/node_modules/three/examples/jsm/nodes/accessors/VertexColorNode.js +0 -70
  1103. package/node_modules/three/examples/jsm/nodes/code/CodeNode.js +0 -78
  1104. package/node_modules/three/examples/jsm/nodes/code/ExpressionNode.js +0 -37
  1105. package/node_modules/three/examples/jsm/nodes/code/FunctionCallNode.js +0 -96
  1106. package/node_modules/three/examples/jsm/nodes/code/FunctionNode.js +0 -138
  1107. package/node_modules/three/examples/jsm/nodes/core/ArrayUniformNode.js +0 -26
  1108. package/node_modules/three/examples/jsm/nodes/core/AssignNode.js +0 -72
  1109. package/node_modules/three/examples/jsm/nodes/core/AttributeNode.js +0 -108
  1110. package/node_modules/three/examples/jsm/nodes/core/BypassNode.js +0 -45
  1111. package/node_modules/three/examples/jsm/nodes/core/CacheNode.js +0 -49
  1112. package/node_modules/three/examples/jsm/nodes/core/ConstNode.js +0 -32
  1113. package/node_modules/three/examples/jsm/nodes/core/ContextNode.js +0 -61
  1114. package/node_modules/three/examples/jsm/nodes/core/IndexNode.js +0 -66
  1115. package/node_modules/three/examples/jsm/nodes/core/InputNode.js +0 -83
  1116. package/node_modules/three/examples/jsm/nodes/core/LightingModel.js +0 -17
  1117. package/node_modules/three/examples/jsm/nodes/core/Node.js +0 -483
  1118. package/node_modules/three/examples/jsm/nodes/core/NodeAttribute.js +0 -15
  1119. package/node_modules/three/examples/jsm/nodes/core/NodeBuilder.js +0 -1256
  1120. package/node_modules/three/examples/jsm/nodes/core/NodeCache.js +0 -26
  1121. package/node_modules/three/examples/jsm/nodes/core/NodeCode.js +0 -15
  1122. package/node_modules/three/examples/jsm/nodes/core/NodeFrame.js +0 -143
  1123. package/node_modules/three/examples/jsm/nodes/core/NodeFunction.js +0 -22
  1124. package/node_modules/three/examples/jsm/nodes/core/NodeFunctionInput.js +0 -17
  1125. package/node_modules/three/examples/jsm/nodes/core/NodeKeywords.js +0 -80
  1126. package/node_modules/three/examples/jsm/nodes/core/NodeParser.js +0 -11
  1127. package/node_modules/three/examples/jsm/nodes/core/NodeUniform.js +0 -40
  1128. package/node_modules/three/examples/jsm/nodes/core/NodeUtils.js +0 -210
  1129. package/node_modules/three/examples/jsm/nodes/core/NodeVar.js +0 -14
  1130. package/node_modules/three/examples/jsm/nodes/core/NodeVarying.js +0 -17
  1131. package/node_modules/three/examples/jsm/nodes/core/OutputStructNode.js +0 -62
  1132. package/node_modules/three/examples/jsm/nodes/core/ParameterNode.js +0 -33
  1133. package/node_modules/three/examples/jsm/nodes/core/PropertyNode.js +0 -72
  1134. package/node_modules/three/examples/jsm/nodes/core/StackNode.js +0 -89
  1135. package/node_modules/three/examples/jsm/nodes/core/StructTypeNode.js +0 -24
  1136. package/node_modules/three/examples/jsm/nodes/core/TempNode.js +0 -58
  1137. package/node_modules/three/examples/jsm/nodes/core/UniformGroup.js +0 -13
  1138. package/node_modules/three/examples/jsm/nodes/core/UniformGroupNode.js +0 -36
  1139. package/node_modules/three/examples/jsm/nodes/core/UniformNode.js +0 -80
  1140. package/node_modules/three/examples/jsm/nodes/core/VarNode.js +0 -60
  1141. package/node_modules/three/examples/jsm/nodes/core/VaryingNode.js +0 -65
  1142. package/node_modules/three/examples/jsm/nodes/core/constants.js +0 -28
  1143. package/node_modules/three/examples/jsm/nodes/display/AfterImageNode.js +0 -148
  1144. package/node_modules/three/examples/jsm/nodes/display/AnamorphicNode.js +0 -148
  1145. package/node_modules/three/examples/jsm/nodes/display/BlendModeNode.js +0 -99
  1146. package/node_modules/three/examples/jsm/nodes/display/BumpMapNode.js +0 -99
  1147. package/node_modules/three/examples/jsm/nodes/display/ColorAdjustmentNode.js +0 -99
  1148. package/node_modules/three/examples/jsm/nodes/display/ColorSpaceNode.js +0 -108
  1149. package/node_modules/three/examples/jsm/nodes/display/FrontFacingNode.js +0 -27
  1150. package/node_modules/three/examples/jsm/nodes/display/GaussianBlurNode.js +0 -190
  1151. package/node_modules/three/examples/jsm/nodes/display/NormalMapNode.js +0 -108
  1152. package/node_modules/three/examples/jsm/nodes/display/PassNode.js +0 -183
  1153. package/node_modules/three/examples/jsm/nodes/display/PosterizeNode.js +0 -32
  1154. package/node_modules/three/examples/jsm/nodes/display/ToneMappingNode.js +0 -184
  1155. package/node_modules/three/examples/jsm/nodes/display/ViewportDepthNode.js +0 -97
  1156. package/node_modules/three/examples/jsm/nodes/display/ViewportDepthTextureNode.js +0 -31
  1157. package/node_modules/three/examples/jsm/nodes/display/ViewportNode.js +0 -134
  1158. package/node_modules/three/examples/jsm/nodes/display/ViewportSharedTextureNode.js +0 -31
  1159. package/node_modules/three/examples/jsm/nodes/display/ViewportTextureNode.js +0 -75
  1160. package/node_modules/three/examples/jsm/nodes/fog/FogExp2Node.js +0 -35
  1161. package/node_modules/three/examples/jsm/nodes/fog/FogNode.js +0 -38
  1162. package/node_modules/three/examples/jsm/nodes/fog/FogRangeNode.js +0 -34
  1163. package/node_modules/three/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +0 -40
  1164. package/node_modules/three/examples/jsm/nodes/functions/BSDF/DFGApprox.js +0 -30
  1165. package/node_modules/three/examples/jsm/nodes/functions/PhongLightingModel.js +0 -67
  1166. package/node_modules/three/examples/jsm/nodes/functions/PhysicalLightingModel.js +0 -393
  1167. package/node_modules/three/examples/jsm/nodes/functions/material/getGeometryRoughness.js +0 -13
  1168. package/node_modules/three/examples/jsm/nodes/geometry/RangeNode.js +0 -104
  1169. package/node_modules/three/examples/jsm/nodes/gpgpu/ComputeNode.js +0 -85
  1170. package/node_modules/three/examples/jsm/nodes/lighting/AONode.js +0 -27
  1171. package/node_modules/three/examples/jsm/nodes/lighting/AnalyticLightNode.js +0 -241
  1172. package/node_modules/three/examples/jsm/nodes/lighting/DirectionalLightNode.js +0 -40
  1173. package/node_modules/three/examples/jsm/nodes/lighting/EnvironmentNode.js +0 -181
  1174. package/node_modules/three/examples/jsm/nodes/lighting/HemisphereLightNode.js +0 -55
  1175. package/node_modules/three/examples/jsm/nodes/lighting/LightNode.js +0 -57
  1176. package/node_modules/three/examples/jsm/nodes/lighting/LightUtils.js +0 -17
  1177. package/node_modules/three/examples/jsm/nodes/lighting/LightingContextNode.js +0 -66
  1178. package/node_modules/three/examples/jsm/nodes/lighting/LightingNode.js +0 -21
  1179. package/node_modules/three/examples/jsm/nodes/lighting/LightsNode.js +0 -188
  1180. package/node_modules/three/examples/jsm/nodes/lighting/PointLightNode.js +0 -68
  1181. package/node_modules/three/examples/jsm/nodes/lighting/SpotLightNode.js +0 -89
  1182. package/node_modules/three/examples/jsm/nodes/loaders/NodeLoader.js +0 -108
  1183. package/node_modules/three/examples/jsm/nodes/loaders/NodeMaterialLoader.js +0 -59
  1184. package/node_modules/three/examples/jsm/nodes/loaders/NodeObjectLoader.js +0 -70
  1185. package/node_modules/three/examples/jsm/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
  1186. package/node_modules/three/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +0 -28
  1187. package/node_modules/three/examples/jsm/nodes/materials/LineDashedNodeMaterial.js +0 -54
  1188. package/node_modules/three/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +0 -28
  1189. package/node_modules/three/examples/jsm/nodes/materials/MeshLambertNodeMaterial.js +0 -34
  1190. package/node_modules/three/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +0 -40
  1191. package/node_modules/three/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +0 -65
  1192. package/node_modules/three/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +0 -155
  1193. package/node_modules/three/examples/jsm/nodes/materials/MeshSSSNodeMaterial.js +0 -84
  1194. package/node_modules/three/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +0 -80
  1195. package/node_modules/three/examples/jsm/nodes/materials/NodeMaterial.js +0 -570
  1196. package/node_modules/three/examples/jsm/nodes/materials/PointsNodeMaterial.js +0 -39
  1197. package/node_modules/three/examples/jsm/nodes/materials/SpriteNodeMaterial.js +0 -90
  1198. package/node_modules/three/examples/jsm/nodes/materialx/MaterialXNodes.js +0 -68
  1199. package/node_modules/three/examples/jsm/nodes/math/CondNode.js +0 -86
  1200. package/node_modules/three/examples/jsm/nodes/math/HashNode.js +0 -34
  1201. package/node_modules/three/examples/jsm/nodes/math/MathNode.js +0 -371
  1202. package/node_modules/three/examples/jsm/nodes/math/MathUtils.js +0 -15
  1203. package/node_modules/three/examples/jsm/nodes/math/OperatorNode.js +0 -274
  1204. package/node_modules/three/examples/jsm/nodes/procedural/CheckerNode.js +0 -42
  1205. package/node_modules/three/examples/jsm/nodes/shadernode/ShaderNode.js +0 -634
  1206. package/node_modules/three/examples/jsm/nodes/utils/ArrayElementNode.js +0 -41
  1207. package/node_modules/three/examples/jsm/nodes/utils/ConvertNode.js +0 -65
  1208. package/node_modules/three/examples/jsm/nodes/utils/DiscardNode.js +0 -27
  1209. package/node_modules/three/examples/jsm/nodes/utils/EquirectUVNode.js +0 -33
  1210. package/node_modules/three/examples/jsm/nodes/utils/FunctionOverloadingNode.js +0 -95
  1211. package/node_modules/three/examples/jsm/nodes/utils/JoinNode.js +0 -61
  1212. package/node_modules/three/examples/jsm/nodes/utils/LoopNode.js +0 -198
  1213. package/node_modules/three/examples/jsm/nodes/utils/MatcapUVNode.js +0 -30
  1214. package/node_modules/three/examples/jsm/nodes/utils/MaxMipLevelNode.js +0 -46
  1215. package/node_modules/three/examples/jsm/nodes/utils/OscNode.js +0 -81
  1216. package/node_modules/three/examples/jsm/nodes/utils/PackingNode.js +0 -55
  1217. package/node_modules/three/examples/jsm/nodes/utils/ReflectorNode.js +0 -227
  1218. package/node_modules/three/examples/jsm/nodes/utils/RemapNode.js +0 -42
  1219. package/node_modules/three/examples/jsm/nodes/utils/RotateUVNode.js +0 -35
  1220. package/node_modules/three/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +0 -37
  1221. package/node_modules/three/examples/jsm/nodes/utils/SpriteSheetUVNode.js +0 -41
  1222. package/node_modules/three/examples/jsm/nodes/utils/TimerNode.js +0 -94
  1223. package/node_modules/three/examples/jsm/nodes/utils/TriplanarTexturesNode.js +0 -62
  1224. package/node_modules/three/examples/jsm/objects/InstancedPoints.js +0 -21
  1225. package/node_modules/three/examples/jsm/objects/QuadMesh.js +0 -66
  1226. package/node_modules/three/examples/jsm/renderers/common/Animation.js +0 -47
  1227. package/node_modules/three/examples/jsm/renderers/common/Backend.js +0 -195
  1228. package/node_modules/three/examples/jsm/renderers/common/Background.js +0 -134
  1229. package/node_modules/three/examples/jsm/renderers/common/Binding.js +0 -25
  1230. package/node_modules/three/examples/jsm/renderers/common/Bindings.js +0 -173
  1231. package/node_modules/three/examples/jsm/renderers/common/Buffer.js +0 -38
  1232. package/node_modules/three/examples/jsm/renderers/common/BufferUtils.js +0 -33
  1233. package/node_modules/three/examples/jsm/renderers/common/ChainMap.js +0 -89
  1234. package/node_modules/three/examples/jsm/renderers/common/Color4.js +0 -37
  1235. package/node_modules/three/examples/jsm/renderers/common/ComputePipeline.js +0 -17
  1236. package/node_modules/three/examples/jsm/renderers/common/DataMap.js +0 -54
  1237. package/node_modules/three/examples/jsm/renderers/common/Geometries.js +0 -215
  1238. package/node_modules/three/examples/jsm/renderers/common/Info.js +0 -107
  1239. package/node_modules/three/examples/jsm/renderers/common/Pipeline.js +0 -13
  1240. package/node_modules/three/examples/jsm/renderers/common/PostProcessing.js +0 -25
  1241. package/node_modules/three/examples/jsm/renderers/common/ProgrammableStage.js +0 -20
  1242. package/node_modules/three/examples/jsm/renderers/common/RenderContext.js +0 -41
  1243. package/node_modules/three/examples/jsm/renderers/common/RenderContexts.js +0 -74
  1244. package/node_modules/three/examples/jsm/renderers/common/RenderList.js +0 -186
  1245. package/node_modules/three/examples/jsm/renderers/common/RenderLists.js +0 -38
  1246. package/node_modules/three/examples/jsm/renderers/common/RenderObject.js +0 -178
  1247. package/node_modules/three/examples/jsm/renderers/common/RenderObjects.js +0 -91
  1248. package/node_modules/three/examples/jsm/renderers/common/RenderPipeline.js +0 -16
  1249. package/node_modules/three/examples/jsm/renderers/common/Renderer.js +0 -1247
  1250. package/node_modules/three/examples/jsm/renderers/common/SampledTexture.js +0 -83
  1251. package/node_modules/three/examples/jsm/renderers/common/Sampler.js +0 -18
  1252. package/node_modules/three/examples/jsm/renderers/common/StorageBuffer.js +0 -17
  1253. package/node_modules/three/examples/jsm/renderers/common/StorageBufferAttribute.js +0 -17
  1254. package/node_modules/three/examples/jsm/renderers/common/StorageTexture.js +0 -20
  1255. package/node_modules/three/examples/jsm/renderers/common/Textures.js +0 -354
  1256. package/node_modules/three/examples/jsm/renderers/common/Uniform.js +0 -140
  1257. package/node_modules/three/examples/jsm/renderers/common/UniformBuffer.js +0 -15
  1258. package/node_modules/three/examples/jsm/renderers/common/UniformsGroup.js +0 -299
  1259. package/node_modules/three/examples/jsm/renderers/common/nodes/NodeBuilderState.js +0 -44
  1260. package/node_modules/three/examples/jsm/renderers/common/nodes/NodeSampledTexture.js +0 -49
  1261. package/node_modules/three/examples/jsm/renderers/common/nodes/NodeSampler.js +0 -15
  1262. package/node_modules/three/examples/jsm/renderers/common/nodes/NodeUniform.js +0 -135
  1263. package/node_modules/three/examples/jsm/renderers/common/nodes/NodeUniformsGroup.js +0 -44
  1264. package/node_modules/three/examples/jsm/renderers/common/nodes/Nodes.js +0 -495
  1265. package/node_modules/three/examples/jsm/renderers/webgl/WebGLBackend.js +0 -1362
  1266. package/node_modules/three/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +0 -679
  1267. package/node_modules/three/examples/jsm/renderers/webgl/utils/WebGLCapabilities.js +0 -36
  1268. package/node_modules/three/examples/jsm/renderers/webgl/utils/WebGLExtensions.js +0 -36
  1269. package/node_modules/three/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +0 -647
  1270. package/node_modules/three/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +0 -320
  1271. package/node_modules/three/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +0 -26
  1272. package/node_modules/three/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +0 -794
  1273. package/node_modules/three/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +0 -51
  1274. package/node_modules/three/examples/jsm/renderers/webgpu/WebGPUBackend.js +0 -1321
  1275. package/node_modules/three/examples/jsm/renderers/webgpu/WebGPURenderer.js +0 -53
  1276. package/node_modules/three/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +0 -1103
  1277. package/node_modules/three/examples/jsm/renderers/webgpu/nodes/WGSLNodeFunction.js +0 -104
  1278. package/node_modules/three/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +0 -287
  1279. package/node_modules/three/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +0 -244
  1280. package/node_modules/three/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +0 -1040
  1281. package/node_modules/three/examples/jsm/renderers/webgpu/utils/WebGPUUtils.js +0 -93
  1282. package/node_modules/three/examples/jsm/shaders/MMDToonShader.js +0 -134
  1283. package/node_modules/three/examples/jsm/utils/GPUStatsPanel.js +0 -128
  1284. package/node_modules/three/examples/jsm/utils/PackedPhongMaterial.js +0 -178
  1285. package/node_modules/three/src/renderers/WebGL1Renderer.js +0 -7
  1286. package/node_modules/three/src/renderers/WebGLMultipleRenderTargets.js +0 -82
  1287. package/node_modules/three/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +0 -10
  1288. /package/node_modules/three/{examples/jsm → src}/nodes/materialx/DISCLAIMER.md +0 -0
@@ -0,0 +1,2612 @@
1
+ import GLSLNodeBuilder from './nodes/GLSLNodeBuilder.js';
2
+ import Backend from '../common/Backend.js';
3
+ import { getCacheKey } from '../common/RenderContext.js';
4
+
5
+ import WebGLAttributeUtils from './utils/WebGLAttributeUtils.js';
6
+ import WebGLState from './utils/WebGLState.js';
7
+ import WebGLUtils from './utils/WebGLUtils.js';
8
+ import WebGLTextureUtils from './utils/WebGLTextureUtils.js';
9
+ import WebGLExtensions from './utils/WebGLExtensions.js';
10
+ import WebGLCapabilities from './utils/WebGLCapabilities.js';
11
+ import { GLFeatureName } from './utils/WebGLConstants.js';
12
+ import { WebGLBufferRenderer } from './WebGLBufferRenderer.js';
13
+
14
+ import { warnOnce, warn, error } from '../../utils.js';
15
+ import { WebGLCoordinateSystem, TimestampQuery } from '../../constants.js';
16
+ import WebGLTimestampQueryPool from './utils/WebGLTimestampQueryPool.js';
17
+
18
+ /**
19
+ * A backend implementation targeting WebGL 2.
20
+ *
21
+ * @private
22
+ * @augments Backend
23
+ */
24
+ class WebGLBackend extends Backend {
25
+
26
+ /**
27
+ * WebGLBackend options.
28
+ *
29
+ * @typedef {Object} WebGLBackend~Options
30
+ * @property {boolean} [logarithmicDepthBuffer=false] - Whether logarithmic depth buffer is enabled or not.
31
+ * @property {boolean} [alpha=true] - Whether the default framebuffer (which represents the final contents of the canvas) should be transparent or opaque.
32
+ * @property {boolean} [depth=true] - Whether the default framebuffer should have a depth buffer or not.
33
+ * @property {boolean} [stencil=false] - Whether the default framebuffer should have a stencil buffer or not.
34
+ * @property {boolean} [antialias=false] - Whether MSAA as the default anti-aliasing should be enabled or not.
35
+ * @property {number} [samples=0] - When `antialias` is `true`, `4` samples are used by default. Set this parameter to any other integer value than 0 to overwrite the default.
36
+ * @property {boolean} [forceWebGL=false] - If set to `true`, the renderer uses a WebGL 2 backend no matter if WebGPU is supported or not.
37
+ * @property {WebGL2RenderingContext} [context=undefined] - A WebGL 2 rendering context.
38
+ */
39
+
40
+ /**
41
+ * Constructs a new WebGPU backend.
42
+ *
43
+ * @param {WebGLBackend~Options} [parameters] - The configuration parameter.
44
+ */
45
+ constructor( parameters = {} ) {
46
+
47
+ super( parameters );
48
+
49
+ /**
50
+ * This flag can be used for type testing.
51
+ *
52
+ * @type {boolean}
53
+ * @readonly
54
+ * @default true
55
+ */
56
+ this.isWebGLBackend = true;
57
+
58
+ /**
59
+ * A reference to a backend module holding shader attribute-related
60
+ * utility functions.
61
+ *
62
+ * @type {?WebGLAttributeUtils}
63
+ * @default null
64
+ */
65
+ this.attributeUtils = null;
66
+
67
+ /**
68
+ * A reference to a backend module holding extension-related
69
+ * utility functions.
70
+ *
71
+ * @type {?WebGLExtensions}
72
+ * @default null
73
+ */
74
+ this.extensions = null;
75
+
76
+ /**
77
+ * A reference to a backend module holding capability-related
78
+ * utility functions.
79
+ *
80
+ * @type {?WebGLCapabilities}
81
+ * @default null
82
+ */
83
+ this.capabilities = null;
84
+
85
+ /**
86
+ * A reference to a backend module holding texture-related
87
+ * utility functions.
88
+ *
89
+ * @type {?WebGLTextureUtils}
90
+ * @default null
91
+ */
92
+ this.textureUtils = null;
93
+
94
+ /**
95
+ * A reference to a backend module holding renderer-related
96
+ * utility functions.
97
+ *
98
+ * @type {?WebGLBufferRenderer}
99
+ * @default null
100
+ */
101
+ this.bufferRenderer = null;
102
+
103
+ /**
104
+ * A reference to the rendering context.
105
+ *
106
+ * @type {?WebGL2RenderingContext}
107
+ * @default null
108
+ */
109
+ this.gl = null;
110
+
111
+ /**
112
+ * A reference to a backend module holding state-related
113
+ * utility functions.
114
+ *
115
+ * @type {?WebGLState}
116
+ * @default null
117
+ */
118
+ this.state = null;
119
+
120
+ /**
121
+ * A reference to a backend module holding common
122
+ * utility functions.
123
+ *
124
+ * @type {?WebGLUtils}
125
+ * @default null
126
+ */
127
+ this.utils = null;
128
+
129
+ /**
130
+ * Dictionary for caching VAOs.
131
+ *
132
+ * @type {Object<string,WebGLVertexArrayObject>}
133
+ */
134
+ this.vaoCache = {};
135
+
136
+ /**
137
+ * Dictionary for caching transform feedback objects.
138
+ *
139
+ * @type {Object<string,WebGLTransformFeedback>}
140
+ */
141
+ this.transformFeedbackCache = {};
142
+
143
+ /**
144
+ * Controls if `gl.RASTERIZER_DISCARD` should be enabled or not.
145
+ * Only relevant when using compute shaders.
146
+ *
147
+ * @type {boolean}
148
+ * @default false
149
+ */
150
+ this.discard = false;
151
+
152
+ /**
153
+ * A reference to the `EXT_disjoint_timer_query_webgl2` extension. `null` if the
154
+ * device does not support the extension.
155
+ *
156
+ * @type {?EXTDisjointTimerQueryWebGL2}
157
+ * @default null
158
+ */
159
+ this.disjoint = null;
160
+
161
+ /**
162
+ * A reference to the `KHR_parallel_shader_compile` extension. `null` if the
163
+ * device does not support the extension.
164
+ *
165
+ * @type {?KHRParallelShaderCompile}
166
+ * @default null
167
+ */
168
+ this.parallel = null;
169
+
170
+ /**
171
+ * A reference to the current render context.
172
+ *
173
+ * @private
174
+ * @type {RenderContext}
175
+ * @default null
176
+ */
177
+ this._currentContext = null;
178
+
179
+ /**
180
+ * A unique collection of bindings.
181
+ *
182
+ * @private
183
+ * @type {WeakSet<Array<BindGroup>>}
184
+ */
185
+ this._knownBindings = new WeakSet();
186
+
187
+
188
+ /**
189
+ * Whether the device supports framebuffers invalidation or not.
190
+ *
191
+ * @private
192
+ * @type {boolean}
193
+ */
194
+ this._supportsInvalidateFramebuffer = typeof navigator === 'undefined' ? false : /OculusBrowser/g.test( navigator.userAgent );
195
+
196
+ /**
197
+ * The target framebuffer when rendering with
198
+ * the WebXR device API.
199
+ *
200
+ * @private
201
+ * @type {?WebGLFramebuffer}
202
+ * @default null
203
+ */
204
+ this._xrFramebuffer = null;
205
+
206
+ }
207
+
208
+ /**
209
+ * Initializes the backend so it is ready for usage.
210
+ *
211
+ * @param {Renderer} renderer - The renderer.
212
+ */
213
+ init( renderer ) {
214
+
215
+ super.init( renderer );
216
+
217
+ //
218
+
219
+ const parameters = this.parameters;
220
+
221
+ const contextAttributes = {
222
+ antialias: renderer.currentSamples > 0,
223
+ alpha: true, // always true for performance reasons
224
+ depth: renderer.depth,
225
+ stencil: renderer.stencil
226
+ };
227
+
228
+ const glContext = ( parameters.context !== undefined ) ? parameters.context : renderer.domElement.getContext( 'webgl2', contextAttributes );
229
+
230
+ function onContextLost( event ) {
231
+
232
+ event.preventDefault();
233
+
234
+ const contextLossInfo = {
235
+ api: 'WebGL',
236
+ message: event.statusMessage || 'Unknown reason',
237
+ reason: null,
238
+ originalEvent: event
239
+ };
240
+
241
+ renderer.onDeviceLost( contextLossInfo );
242
+
243
+ }
244
+
245
+ this._onContextLost = onContextLost;
246
+
247
+ renderer.domElement.addEventListener( 'webglcontextlost', onContextLost, false );
248
+
249
+ this.gl = glContext;
250
+
251
+ this.extensions = new WebGLExtensions( this );
252
+ this.capabilities = new WebGLCapabilities( this );
253
+ this.attributeUtils = new WebGLAttributeUtils( this );
254
+ this.textureUtils = new WebGLTextureUtils( this );
255
+ this.bufferRenderer = new WebGLBufferRenderer( this );
256
+
257
+ this.state = new WebGLState( this );
258
+ this.utils = new WebGLUtils( this );
259
+
260
+ this.extensions.get( 'EXT_color_buffer_float' );
261
+ this.extensions.get( 'WEBGL_clip_cull_distance' );
262
+ this.extensions.get( 'OES_texture_float_linear' );
263
+ this.extensions.get( 'EXT_color_buffer_half_float' );
264
+ this.extensions.get( 'WEBGL_multisampled_render_to_texture' );
265
+ this.extensions.get( 'WEBGL_render_shared_exponent' );
266
+ this.extensions.get( 'WEBGL_multi_draw' );
267
+ this.extensions.get( 'OVR_multiview2' );
268
+
269
+ this.disjoint = this.extensions.get( 'EXT_disjoint_timer_query_webgl2' );
270
+ this.parallel = this.extensions.get( 'KHR_parallel_shader_compile' );
271
+
272
+ }
273
+
274
+ /**
275
+ * The coordinate system of the backend.
276
+ *
277
+ * @type {number}
278
+ * @readonly
279
+ */
280
+ get coordinateSystem() {
281
+
282
+ return WebGLCoordinateSystem;
283
+
284
+ }
285
+
286
+ /**
287
+ * This method performs a readback operation by moving buffer data from
288
+ * a storage buffer attribute from the GPU to the CPU.
289
+ *
290
+ * @async
291
+ * @param {StorageBufferAttribute} attribute - The storage buffer attribute.
292
+ * @return {Promise<ArrayBuffer>} A promise that resolves with the buffer data when the data are ready.
293
+ */
294
+ async getArrayBufferAsync( attribute ) {
295
+
296
+ return await this.attributeUtils.getArrayBufferAsync( attribute );
297
+
298
+ }
299
+
300
+ /**
301
+ * Ensures the backend is XR compatible.
302
+ *
303
+ * @async
304
+ * @return {Promise} A Promise that resolve when the renderer is XR compatible.
305
+ */
306
+ async makeXRCompatible() {
307
+
308
+ const attributes = this.gl.getContextAttributes();
309
+
310
+ if ( attributes.xrCompatible !== true ) {
311
+
312
+ await this.gl.makeXRCompatible();
313
+
314
+ }
315
+
316
+ }
317
+ /**
318
+ * Sets the XR rendering destination.
319
+ *
320
+ * @param {WebGLFramebuffer} xrFramebuffer - The XR framebuffer.
321
+ */
322
+ setXRTarget( xrFramebuffer ) {
323
+
324
+ this._xrFramebuffer = xrFramebuffer;
325
+
326
+ }
327
+
328
+ /**
329
+ * Configures the given XR render target with external textures.
330
+ *
331
+ * This method is only relevant when using the WebXR Layers API.
332
+ *
333
+ * @param {XRRenderTarget} renderTarget - The XR render target.
334
+ * @param {WebGLTexture} colorTexture - A native color texture.
335
+ * @param {?WebGLTexture} [depthTexture=null] - A native depth texture.
336
+ */
337
+ setXRRenderTargetTextures( renderTarget, colorTexture, depthTexture = null ) {
338
+
339
+ const gl = this.gl;
340
+
341
+ this.set( renderTarget.texture, { textureGPU: colorTexture, glInternalFormat: gl.RGBA8 } ); // see #24698 why RGBA8 and not SRGB8_ALPHA8 is used
342
+
343
+ if ( depthTexture !== null ) {
344
+
345
+ const glInternalFormat = renderTarget.stencilBuffer ? gl.DEPTH24_STENCIL8 : gl.DEPTH_COMPONENT24;
346
+
347
+ this.set( renderTarget.depthTexture, { textureGPU: depthTexture, glInternalFormat: glInternalFormat } );
348
+
349
+ // The multisample_render_to_texture extension doesn't work properly if there
350
+ // are midframe flushes and an external depth texture.
351
+ if ( ( this.extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true ) && renderTarget._autoAllocateDepthBuffer === true && renderTarget.multiview === false ) {
352
+
353
+ warn( 'WebGLBackend: Render-to-texture extension was disabled because an external texture was provided' );
354
+
355
+ }
356
+
357
+ renderTarget._autoAllocateDepthBuffer = false;
358
+
359
+ }
360
+
361
+ }
362
+
363
+ /**
364
+ * Inits a time stamp query for the given render context.
365
+ *
366
+ * @param {string} type - The type of the timestamp query.
367
+ * @param {string} uid - A unique identifier for the timestamp query.
368
+ */
369
+ initTimestampQuery( type, uid ) {
370
+
371
+ if ( ! this.disjoint || ! this.trackTimestamp ) return;
372
+
373
+ if ( ! this.timestampQueryPool[ type ] ) {
374
+
375
+ // TODO: Variable maxQueries?
376
+ this.timestampQueryPool[ type ] = new WebGLTimestampQueryPool( this.gl, type, 2048 );
377
+
378
+ }
379
+
380
+ const timestampQueryPool = this.timestampQueryPool[ type ];
381
+
382
+ const baseOffset = timestampQueryPool.allocateQueriesForContext( uid );
383
+
384
+ if ( baseOffset !== null ) {
385
+
386
+ timestampQueryPool.beginQuery( uid );
387
+
388
+ }
389
+
390
+ }
391
+
392
+ // timestamp utils
393
+
394
+ /**
395
+ * Prepares the timestamp buffer.
396
+ *
397
+ * @param {string} type - The type of the timestamp query.
398
+ * @param {string} uid - A unique identifier for the timestamp query.
399
+ */
400
+ prepareTimestampBuffer( type, uid ) {
401
+
402
+ if ( ! this.disjoint || ! this.trackTimestamp ) return;
403
+
404
+ const timestampQueryPool = this.timestampQueryPool[ type ];
405
+
406
+ timestampQueryPool.endQuery( uid );
407
+
408
+ }
409
+
410
+
411
+ /**
412
+ * Returns the backend's rendering context.
413
+ *
414
+ * @return {WebGL2RenderingContext} The rendering context.
415
+ */
416
+ getContext() {
417
+
418
+ return this.gl;
419
+
420
+ }
421
+
422
+ /**
423
+ * This method is executed at the beginning of a render call and prepares
424
+ * the WebGL state for upcoming render calls
425
+ *
426
+ * @param {RenderContext} renderContext - The render context.
427
+ */
428
+ beginRender( renderContext ) {
429
+
430
+ const { state } = this;
431
+ const renderContextData = this.get( renderContext );
432
+
433
+ //
434
+
435
+ if ( renderContext.viewport ) {
436
+
437
+ this.updateViewport( renderContext );
438
+
439
+ } else {
440
+
441
+ const { width, height } = this.getDrawingBufferSize();
442
+ state.viewport( 0, 0, width, height );
443
+
444
+ }
445
+
446
+ if ( renderContext.scissor ) {
447
+
448
+ const { x, y, width, height } = renderContext.scissorValue;
449
+
450
+ state.scissor( x, renderContext.height - height - y, width, height );
451
+
452
+ }
453
+
454
+ //
455
+
456
+ this.initTimestampQuery( TimestampQuery.RENDER, this.getTimestampUID( renderContext ) );
457
+
458
+ renderContextData.previousContext = this._currentContext;
459
+ this._currentContext = renderContext;
460
+
461
+ this._setFramebuffer( renderContext );
462
+ this.clear( renderContext.clearColor, renderContext.clearDepth, renderContext.clearStencil, renderContext, false );
463
+
464
+ const occlusionQueryCount = renderContext.occlusionQueryCount;
465
+
466
+ if ( occlusionQueryCount > 0 ) {
467
+
468
+ // Get a reference to the array of objects with queries. The renderContextData property
469
+ // can be changed by another render pass before the async reading of all previous queries complete
470
+ renderContextData.currentOcclusionQueries = renderContextData.occlusionQueries;
471
+ renderContextData.currentOcclusionQueryObjects = renderContextData.occlusionQueryObjects;
472
+
473
+ renderContextData.lastOcclusionObject = null;
474
+ renderContextData.occlusionQueries = new Array( occlusionQueryCount );
475
+ renderContextData.occlusionQueryObjects = new Array( occlusionQueryCount );
476
+ renderContextData.occlusionQueryIndex = 0;
477
+
478
+ }
479
+
480
+ }
481
+
482
+ /**
483
+ * This method is executed at the end of a render call and finalizes work
484
+ * after draw calls.
485
+ *
486
+ * @param {RenderContext} renderContext - The render context.
487
+ */
488
+ finishRender( renderContext ) {
489
+
490
+ const { gl, state } = this;
491
+ const renderContextData = this.get( renderContext );
492
+ const previousContext = renderContextData.previousContext;
493
+
494
+ state.resetVertexState();
495
+
496
+ const occlusionQueryCount = renderContext.occlusionQueryCount;
497
+
498
+ if ( occlusionQueryCount > 0 ) {
499
+
500
+ if ( occlusionQueryCount > renderContextData.occlusionQueryIndex ) {
501
+
502
+ gl.endQuery( gl.ANY_SAMPLES_PASSED );
503
+
504
+ }
505
+
506
+ this.resolveOccludedAsync( renderContext );
507
+
508
+ }
509
+
510
+ const textures = renderContext.textures;
511
+
512
+ if ( textures !== null ) {
513
+
514
+ for ( let i = 0; i < textures.length; i ++ ) {
515
+
516
+ const texture = textures[ i ];
517
+
518
+ if ( texture.generateMipmaps ) {
519
+
520
+ this.generateMipmaps( texture );
521
+
522
+ }
523
+
524
+ }
525
+
526
+ }
527
+
528
+ this._currentContext = previousContext;
529
+
530
+ this._resolveRenderTarget( renderContext );
531
+
532
+ if ( previousContext !== null ) {
533
+
534
+ this._setFramebuffer( previousContext );
535
+
536
+ if ( previousContext.viewport ) {
537
+
538
+ this.updateViewport( previousContext );
539
+
540
+ } else {
541
+
542
+ const { width, height } = this.getDrawingBufferSize();
543
+ state.viewport( 0, 0, width, height );
544
+
545
+ }
546
+
547
+ }
548
+
549
+ this.prepareTimestampBuffer( TimestampQuery.RENDER, this.getTimestampUID( renderContext ) );
550
+
551
+ }
552
+
553
+ /**
554
+ * This method processes the result of occlusion queries and writes it
555
+ * into render context data.
556
+ *
557
+ * @async
558
+ * @param {RenderContext} renderContext - The render context.
559
+ */
560
+ resolveOccludedAsync( renderContext ) {
561
+
562
+ const renderContextData = this.get( renderContext );
563
+
564
+ // handle occlusion query results
565
+
566
+ const { currentOcclusionQueries, currentOcclusionQueryObjects } = renderContextData;
567
+
568
+ if ( currentOcclusionQueries && currentOcclusionQueryObjects ) {
569
+
570
+ const occluded = new WeakSet();
571
+ const { gl } = this;
572
+
573
+ renderContextData.currentOcclusionQueryObjects = null;
574
+ renderContextData.currentOcclusionQueries = null;
575
+
576
+ const check = () => {
577
+
578
+ let completed = 0;
579
+
580
+ // check all queries and requeue as appropriate
581
+ for ( let i = 0; i < currentOcclusionQueries.length; i ++ ) {
582
+
583
+ const query = currentOcclusionQueries[ i ];
584
+
585
+ if ( query === null ) continue;
586
+
587
+ if ( gl.getQueryParameter( query, gl.QUERY_RESULT_AVAILABLE ) ) {
588
+
589
+ if ( gl.getQueryParameter( query, gl.QUERY_RESULT ) === 0 ) occluded.add( currentOcclusionQueryObjects[ i ] );
590
+
591
+ currentOcclusionQueries[ i ] = null;
592
+ gl.deleteQuery( query );
593
+
594
+ completed ++;
595
+
596
+ }
597
+
598
+ }
599
+
600
+ if ( completed < currentOcclusionQueries.length ) {
601
+
602
+ requestAnimationFrame( check );
603
+
604
+ } else {
605
+
606
+ renderContextData.occluded = occluded;
607
+
608
+ }
609
+
610
+ };
611
+
612
+ check();
613
+
614
+ }
615
+
616
+ }
617
+
618
+ /**
619
+ * Returns `true` if the given 3D object is fully occluded by other
620
+ * 3D objects in the scene.
621
+ *
622
+ * @param {RenderContext} renderContext - The render context.
623
+ * @param {Object3D} object - The 3D object to test.
624
+ * @return {boolean} Whether the 3D object is fully occluded or not.
625
+ */
626
+ isOccluded( renderContext, object ) {
627
+
628
+ const renderContextData = this.get( renderContext );
629
+
630
+ return renderContextData.occluded && renderContextData.occluded.has( object );
631
+
632
+ }
633
+
634
+ /**
635
+ * Updates the viewport with the values from the given render context.
636
+ *
637
+ * @param {RenderContext} renderContext - The render context.
638
+ */
639
+ updateViewport( renderContext ) {
640
+
641
+ const { state } = this;
642
+ const { x, y, width, height } = renderContext.viewportValue;
643
+
644
+ state.viewport( x, renderContext.height - height - y, width, height );
645
+
646
+ }
647
+
648
+ /**
649
+ * Defines the scissor test.
650
+ *
651
+ * @param {boolean} boolean - Whether the scissor test should be enabled or not.
652
+ */
653
+ setScissorTest( boolean ) {
654
+
655
+ const state = this.state;
656
+
657
+ state.setScissorTest( boolean );
658
+
659
+ }
660
+
661
+ /**
662
+ * Returns the clear color and alpha into a single
663
+ * color object.
664
+ *
665
+ * @return {Color4} The clear color.
666
+ */
667
+ getClearColor() {
668
+
669
+ const clearColor = super.getClearColor();
670
+
671
+ // Since the canvas is always created with alpha: true,
672
+ // WebGL must always premultiply the clear color.
673
+
674
+ clearColor.r *= clearColor.a;
675
+ clearColor.g *= clearColor.a;
676
+ clearColor.b *= clearColor.a;
677
+
678
+ return clearColor;
679
+
680
+ }
681
+
682
+ /**
683
+ * Performs a clear operation.
684
+ *
685
+ * @param {boolean} color - Whether the color buffer should be cleared or not.
686
+ * @param {boolean} depth - Whether the depth buffer should be cleared or not.
687
+ * @param {boolean} stencil - Whether the stencil buffer should be cleared or not.
688
+ * @param {?Object} [descriptor=null] - The render context of the current set render target.
689
+ * @param {boolean} [setFrameBuffer=true] - Controls whether the intermediate framebuffer should be set or not.
690
+ * @param {boolean} [resolveRenderTarget=true] - Controls whether an active render target should be resolved
691
+ * or not. Only relevant for explicit clears.
692
+ */
693
+ clear( color, depth, stencil, descriptor = null, setFrameBuffer = true, resolveRenderTarget = true ) {
694
+
695
+ const { gl, renderer } = this;
696
+
697
+ if ( descriptor === null ) {
698
+
699
+ const clearColor = this.getClearColor();
700
+
701
+ descriptor = {
702
+ textures: null,
703
+ clearColorValue: clearColor
704
+ };
705
+
706
+ }
707
+
708
+ //
709
+
710
+ let clear = 0;
711
+
712
+ if ( color ) clear |= gl.COLOR_BUFFER_BIT;
713
+ if ( depth ) clear |= gl.DEPTH_BUFFER_BIT;
714
+ if ( stencil ) clear |= gl.STENCIL_BUFFER_BIT;
715
+
716
+ if ( clear !== 0 ) {
717
+
718
+ let clearColor;
719
+
720
+ if ( descriptor.clearColorValue ) {
721
+
722
+ clearColor = descriptor.clearColorValue;
723
+
724
+ } else {
725
+
726
+ clearColor = this.getClearColor();
727
+
728
+ }
729
+
730
+ const clearDepth = renderer.getClearDepth();
731
+ const clearStencil = renderer.getClearStencil();
732
+
733
+ if ( depth ) this.state.setDepthMask( true );
734
+
735
+ if ( descriptor.textures === null ) {
736
+
737
+ gl.clearColor( clearColor.r, clearColor.g, clearColor.b, clearColor.a );
738
+ gl.clear( clear );
739
+
740
+ } else {
741
+
742
+ if ( setFrameBuffer ) this._setFramebuffer( descriptor );
743
+
744
+ if ( color ) {
745
+
746
+ for ( let i = 0; i < descriptor.textures.length; i ++ ) {
747
+
748
+ if ( i === 0 ) {
749
+
750
+ gl.clearBufferfv( gl.COLOR, i, [ clearColor.r, clearColor.g, clearColor.b, clearColor.a ] );
751
+
752
+ } else {
753
+
754
+ gl.clearBufferfv( gl.COLOR, i, [ 0, 0, 0, 1 ] );
755
+
756
+ }
757
+
758
+ }
759
+
760
+ }
761
+
762
+ if ( depth && stencil ) {
763
+
764
+ gl.clearBufferfi( gl.DEPTH_STENCIL, 0, clearDepth, clearStencil );
765
+
766
+ } else if ( depth ) {
767
+
768
+ gl.clearBufferfv( gl.DEPTH, 0, [ clearDepth ] );
769
+
770
+ } else if ( stencil ) {
771
+
772
+ gl.clearBufferiv( gl.STENCIL, 0, [ clearStencil ] );
773
+
774
+ }
775
+
776
+ if ( setFrameBuffer && resolveRenderTarget ) this._resolveRenderTarget( descriptor );
777
+
778
+ }
779
+
780
+ }
781
+
782
+ }
783
+
784
+ /**
785
+ * This method is executed at the beginning of a compute call and
786
+ * prepares the state for upcoming compute tasks.
787
+ *
788
+ * @param {Node|Array<Node>} computeGroup - The compute node(s).
789
+ */
790
+ beginCompute( computeGroup ) {
791
+
792
+ const { state, gl } = this;
793
+
794
+ //
795
+
796
+ state.bindFramebuffer( gl.FRAMEBUFFER, null );
797
+ this.initTimestampQuery( TimestampQuery.COMPUTE, this.getTimestampUID( computeGroup ) );
798
+
799
+ }
800
+
801
+ /**
802
+ * Executes a compute command for the given compute node.
803
+ *
804
+ * @param {Node|Array<Node>} computeGroup - The group of compute nodes of a compute call. Can be a single compute node.
805
+ * @param {Node} computeNode - The compute node.
806
+ * @param {Array<BindGroup>} bindings - The bindings.
807
+ * @param {ComputePipeline} pipeline - The compute pipeline.
808
+ * @param {?number} [count=null] - The count of compute invocations. If `null`, the count is determined by the compute node.
809
+ */
810
+ compute( computeGroup, computeNode, bindings, pipeline, count = null ) {
811
+
812
+ const { state, gl } = this;
813
+
814
+ if ( this.discard === false ) {
815
+
816
+ // required here to handle async behaviour of render.compute()
817
+ gl.enable( gl.RASTERIZER_DISCARD );
818
+ this.discard = true;
819
+
820
+ }
821
+
822
+ const { programGPU, transformBuffers, attributes } = this.get( pipeline );
823
+
824
+ const vaoKey = this._getVaoKey( attributes );
825
+
826
+ const vaoGPU = this.vaoCache[ vaoKey ];
827
+
828
+ if ( vaoGPU === undefined ) {
829
+
830
+ this.vaoCache[ vaoKey ] = this._createVao( attributes );
831
+
832
+ } else {
833
+
834
+ state.setVertexState( vaoGPU );
835
+
836
+ }
837
+
838
+ state.useProgram( programGPU );
839
+
840
+ this._bindUniforms( bindings );
841
+
842
+ const transformFeedbackGPU = this._getTransformFeedback( transformBuffers );
843
+
844
+ gl.bindTransformFeedback( gl.TRANSFORM_FEEDBACK, transformFeedbackGPU );
845
+ gl.beginTransformFeedback( gl.POINTS );
846
+
847
+ count = ( count !== null ) ? count : computeNode.count;
848
+
849
+ if ( Array.isArray( count ) ) {
850
+
851
+ warnOnce( 'WebGLBackend.compute(): The count parameter must be a single number, not an array.' );
852
+
853
+ count = count[ 0 ];
854
+
855
+ } else if ( count && typeof count === 'object' && count.isIndirectStorageBufferAttribute ) {
856
+
857
+ warnOnce( 'WebGLBackend.compute(): The count parameter must be a single number, not IndirectStorageBufferAttribute' );
858
+
859
+ count = computeNode.count;
860
+
861
+ }
862
+
863
+ if ( attributes[ 0 ].isStorageInstancedBufferAttribute ) {
864
+
865
+ gl.drawArraysInstanced( gl.POINTS, 0, 1, count );
866
+
867
+ } else {
868
+
869
+ gl.drawArrays( gl.POINTS, 0, count );
870
+
871
+ }
872
+
873
+ gl.endTransformFeedback();
874
+ gl.bindTransformFeedback( gl.TRANSFORM_FEEDBACK, null );
875
+
876
+ // switch active buffers
877
+
878
+ for ( let i = 0; i < transformBuffers.length; i ++ ) {
879
+
880
+ const dualAttributeData = transformBuffers[ i ];
881
+
882
+ if ( dualAttributeData.pbo && this.has( dualAttributeData.pbo ) ) {
883
+
884
+ this.textureUtils.copyBufferToTexture( dualAttributeData.transformBuffer, dualAttributeData.pbo );
885
+
886
+ }
887
+
888
+ dualAttributeData.switchBuffers();
889
+
890
+
891
+ }
892
+
893
+ }
894
+
895
+ /**
896
+ * This method is executed at the end of a compute call and
897
+ * finalizes work after compute tasks.
898
+ *
899
+ * @param {Node|Array<Node>} computeGroup - The compute node(s).
900
+ */
901
+ finishCompute( computeGroup ) {
902
+
903
+ const gl = this.gl;
904
+
905
+ this.discard = false;
906
+
907
+ gl.disable( gl.RASTERIZER_DISCARD );
908
+
909
+ this.prepareTimestampBuffer( TimestampQuery.COMPUTE, this.getTimestampUID( computeGroup ) );
910
+
911
+ if ( this._currentContext ) {
912
+
913
+ this._setFramebuffer( this._currentContext );
914
+
915
+ }
916
+
917
+ }
918
+
919
+ /**
920
+ * Internal to determine if the current render target is a render target array with depth 2D array texture.
921
+ *
922
+ * @param {RenderContext} renderContext - The render context.
923
+ * @return {boolean} Whether the render target is a render target array with depth 2D array texture.
924
+ *
925
+ * @private
926
+ */
927
+ _isRenderCameraDepthArray( renderContext ) {
928
+
929
+ return renderContext.depthTexture && renderContext.depthTexture.isArrayTexture && renderContext.camera.isArrayCamera;
930
+
931
+ }
932
+
933
+ /**
934
+ * Executes a draw command for the given render object.
935
+ *
936
+ * @param {RenderObject} renderObject - The render object to draw.
937
+ * @param {Info} info - Holds a series of statistical information about the GPU memory and the rendering process.
938
+ */
939
+ draw( renderObject/*, info*/ ) {
940
+
941
+ const { object, pipeline, material, context, hardwareClippingPlanes } = renderObject;
942
+ const { programGPU } = this.get( pipeline );
943
+
944
+ const { gl, state } = this;
945
+
946
+ const contextData = this.get( context );
947
+
948
+ const drawParams = renderObject.getDrawParameters();
949
+
950
+ if ( drawParams === null ) return;
951
+
952
+ //
953
+
954
+ this._bindUniforms( renderObject.getBindings() );
955
+
956
+ const frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );
957
+
958
+ state.setMaterial( material, frontFaceCW, hardwareClippingPlanes );
959
+
960
+ state.useProgram( programGPU );
961
+
962
+ // vertex state
963
+
964
+ const attributes = renderObject.getAttributes();
965
+ const attributesData = this.get( attributes );
966
+
967
+ let vaoGPU = attributesData.vaoGPU;
968
+
969
+ if ( vaoGPU === undefined ) {
970
+
971
+ const vaoKey = this._getVaoKey( attributes );
972
+
973
+ vaoGPU = this.vaoCache[ vaoKey ];
974
+
975
+ if ( vaoGPU === undefined ) {
976
+
977
+ vaoGPU = this._createVao( attributes );
978
+
979
+ this.vaoCache[ vaoKey ] = vaoGPU;
980
+ attributesData.vaoGPU = vaoGPU;
981
+
982
+ }
983
+
984
+ }
985
+
986
+ const index = renderObject.getIndex();
987
+ const indexGPU = ( index !== null ) ? this.get( index ).bufferGPU : null;
988
+
989
+ state.setVertexState( vaoGPU, indexGPU );
990
+
991
+ //
992
+
993
+ const lastObject = contextData.lastOcclusionObject;
994
+
995
+ if ( lastObject !== object && lastObject !== undefined ) {
996
+
997
+ if ( lastObject !== null && lastObject.occlusionTest === true ) {
998
+
999
+ gl.endQuery( gl.ANY_SAMPLES_PASSED );
1000
+
1001
+ contextData.occlusionQueryIndex ++;
1002
+
1003
+ }
1004
+
1005
+ if ( object.occlusionTest === true ) {
1006
+
1007
+ const query = gl.createQuery();
1008
+
1009
+ gl.beginQuery( gl.ANY_SAMPLES_PASSED, query );
1010
+
1011
+ contextData.occlusionQueries[ contextData.occlusionQueryIndex ] = query;
1012
+ contextData.occlusionQueryObjects[ contextData.occlusionQueryIndex ] = object;
1013
+
1014
+ }
1015
+
1016
+ contextData.lastOcclusionObject = object;
1017
+
1018
+ }
1019
+
1020
+ //
1021
+ const renderer = this.bufferRenderer;
1022
+
1023
+ if ( object.isPoints ) renderer.mode = gl.POINTS;
1024
+ else if ( object.isLineSegments ) renderer.mode = gl.LINES;
1025
+ else if ( object.isLine ) renderer.mode = gl.LINE_STRIP;
1026
+ else if ( object.isLineLoop ) renderer.mode = gl.LINE_LOOP;
1027
+ else {
1028
+
1029
+ if ( material.wireframe === true ) {
1030
+
1031
+ state.setLineWidth( material.wireframeLinewidth * this.renderer.getPixelRatio() );
1032
+ renderer.mode = gl.LINES;
1033
+
1034
+ } else {
1035
+
1036
+ renderer.mode = gl.TRIANGLES;
1037
+
1038
+ }
1039
+
1040
+ }
1041
+
1042
+ //
1043
+
1044
+ const { vertexCount, instanceCount } = drawParams;
1045
+ let { firstVertex } = drawParams;
1046
+
1047
+ renderer.object = object;
1048
+
1049
+ if ( index !== null ) {
1050
+
1051
+ firstVertex *= index.array.BYTES_PER_ELEMENT;
1052
+
1053
+ const indexData = this.get( index );
1054
+
1055
+ renderer.index = index.count;
1056
+ renderer.type = indexData.type;
1057
+
1058
+ } else {
1059
+
1060
+ renderer.index = 0;
1061
+
1062
+ }
1063
+
1064
+ const draw = () => {
1065
+
1066
+ if ( object.isBatchedMesh ) {
1067
+
1068
+ if ( object._multiDrawInstances !== null ) {
1069
+
1070
+ // @deprecated, r174
1071
+ warnOnce( 'WebGLBackend: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection.' );
1072
+ renderer.renderMultiDrawInstances( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount, object._multiDrawInstances );
1073
+
1074
+ } else if ( ! this.hasFeature( 'WEBGL_multi_draw' ) ) {
1075
+
1076
+ warnOnce( 'WebGLBackend: WEBGL_multi_draw not supported.' );
1077
+
1078
+ } else {
1079
+
1080
+ renderer.renderMultiDraw( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount );
1081
+
1082
+ }
1083
+
1084
+ } else if ( instanceCount > 1 ) {
1085
+
1086
+ renderer.renderInstances( firstVertex, vertexCount, instanceCount );
1087
+
1088
+ } else {
1089
+
1090
+ renderer.render( firstVertex, vertexCount );
1091
+
1092
+ }
1093
+
1094
+ };
1095
+
1096
+ if ( renderObject.camera.isArrayCamera === true && renderObject.camera.cameras.length > 0 && renderObject.camera.isMultiViewCamera === false ) {
1097
+
1098
+ const cameraData = this.get( renderObject.camera );
1099
+ const cameras = renderObject.camera.cameras;
1100
+ const cameraIndex = renderObject.getBindingGroup( 'cameraIndex' ).bindings[ 0 ];
1101
+
1102
+ if ( cameraData.indexesGPU === undefined || cameraData.indexesGPU.length !== cameras.length ) {
1103
+
1104
+ const data = new Uint32Array( [ 0, 0, 0, 0 ] );
1105
+ const indexesGPU = [];
1106
+
1107
+ for ( let i = 0, len = cameras.length; i < len; i ++ ) {
1108
+
1109
+ const bufferGPU = gl.createBuffer();
1110
+
1111
+ data[ 0 ] = i;
1112
+
1113
+ gl.bindBuffer( gl.UNIFORM_BUFFER, bufferGPU );
1114
+ gl.bufferData( gl.UNIFORM_BUFFER, data, gl.STATIC_DRAW );
1115
+
1116
+ indexesGPU.push( bufferGPU );
1117
+
1118
+ }
1119
+
1120
+ cameraData.indexesGPU = indexesGPU; // TODO: Create a global library for this
1121
+
1122
+ }
1123
+
1124
+ const cameraIndexData = this.get( cameraIndex );
1125
+ const pixelRatio = this.renderer.getPixelRatio();
1126
+
1127
+ const renderTarget = this._currentContext.renderTarget;
1128
+ const isRenderCameraDepthArray = this._isRenderCameraDepthArray( this._currentContext );
1129
+ const prevActiveCubeFace = this._currentContext.activeCubeFace;
1130
+
1131
+ if ( isRenderCameraDepthArray ) {
1132
+
1133
+ // Clear the depth texture
1134
+ const textureData = this.get( renderTarget.depthTexture );
1135
+
1136
+ if ( textureData.clearedRenderId !== this.renderer._nodes.nodeFrame.renderId ) {
1137
+
1138
+ textureData.clearedRenderId = this.renderer._nodes.nodeFrame.renderId;
1139
+
1140
+ const { stencilBuffer } = renderTarget;
1141
+
1142
+ for ( let i = 0, len = cameras.length; i < len; i ++ ) {
1143
+
1144
+ this.renderer._activeCubeFace = i;
1145
+ this._currentContext.activeCubeFace = i;
1146
+
1147
+ this._setFramebuffer( this._currentContext );
1148
+ this.clear( false, true, stencilBuffer, this._currentContext, false, false );
1149
+
1150
+ }
1151
+
1152
+ this.renderer._activeCubeFace = prevActiveCubeFace;
1153
+ this._currentContext.activeCubeFace = prevActiveCubeFace;
1154
+
1155
+ }
1156
+
1157
+ }
1158
+
1159
+ for ( let i = 0, len = cameras.length; i < len; i ++ ) {
1160
+
1161
+ const subCamera = cameras[ i ];
1162
+
1163
+ if ( object.layers.test( subCamera.layers ) ) {
1164
+
1165
+ if ( isRenderCameraDepthArray ) {
1166
+
1167
+ // Update the active layer
1168
+ this.renderer._activeCubeFace = i;
1169
+ this._currentContext.activeCubeFace = i;
1170
+
1171
+ this._setFramebuffer( this._currentContext );
1172
+
1173
+ }
1174
+
1175
+ const vp = subCamera.viewport;
1176
+
1177
+ if ( vp !== undefined ) {
1178
+
1179
+ const x = vp.x * pixelRatio;
1180
+ const y = vp.y * pixelRatio;
1181
+ const width = vp.width * pixelRatio;
1182
+ const height = vp.height * pixelRatio;
1183
+
1184
+ state.viewport(
1185
+ Math.floor( x ),
1186
+ Math.floor( renderObject.context.height - height - y ),
1187
+ Math.floor( width ),
1188
+ Math.floor( height )
1189
+ );
1190
+
1191
+ }
1192
+
1193
+ state.bindBufferBase( gl.UNIFORM_BUFFER, cameraIndexData.index, cameraData.indexesGPU[ i ] );
1194
+
1195
+ draw();
1196
+
1197
+ }
1198
+
1199
+ this._currentContext.activeCubeFace = prevActiveCubeFace;
1200
+ this.renderer._activeCubeFace = prevActiveCubeFace;
1201
+
1202
+ }
1203
+
1204
+ } else {
1205
+
1206
+ draw();
1207
+
1208
+ }
1209
+
1210
+ }
1211
+
1212
+ /**
1213
+ * Explain why always null is returned.
1214
+ *
1215
+ * @param {RenderObject} renderObject - The render object.
1216
+ * @return {boolean} Whether the render pipeline requires an update or not.
1217
+ */
1218
+ needsRenderUpdate( /*renderObject*/ ) {
1219
+
1220
+ return false;
1221
+
1222
+ }
1223
+
1224
+ /**
1225
+ * Explain why no cache key is computed.
1226
+ *
1227
+ * @param {RenderObject} renderObject - The render object.
1228
+ * @return {string} The cache key.
1229
+ */
1230
+ getRenderCacheKey( /*renderObject*/ ) {
1231
+
1232
+ return '';
1233
+
1234
+ }
1235
+
1236
+ // textures
1237
+
1238
+ /**
1239
+ * Creates a default texture for the given texture that can be used
1240
+ * as a placeholder until the actual texture is ready for usage.
1241
+ *
1242
+ * @param {Texture} texture - The texture to create a default texture for.
1243
+ */
1244
+ createDefaultTexture( texture ) {
1245
+
1246
+ this.textureUtils.createDefaultTexture( texture );
1247
+
1248
+ }
1249
+
1250
+ /**
1251
+ * Defines a texture on the GPU for the given texture object.
1252
+ *
1253
+ * @param {Texture} texture - The texture.
1254
+ * @param {Object} [options={}] - Optional configuration parameter.
1255
+ */
1256
+ createTexture( texture, options ) {
1257
+
1258
+ this.textureUtils.createTexture( texture, options );
1259
+
1260
+ }
1261
+
1262
+ /**
1263
+ * Uploads the updated texture data to the GPU.
1264
+ *
1265
+ * @param {Texture} texture - The texture.
1266
+ * @param {Object} [options={}] - Optional configuration parameter.
1267
+ */
1268
+ updateTexture( texture, options ) {
1269
+
1270
+ this.textureUtils.updateTexture( texture, options );
1271
+
1272
+ }
1273
+
1274
+ /**
1275
+ * Generates mipmaps for the given texture.
1276
+ *
1277
+ * @param {Texture} texture - The texture.
1278
+ */
1279
+ generateMipmaps( texture ) {
1280
+
1281
+ this.textureUtils.generateMipmaps( texture );
1282
+
1283
+ }
1284
+
1285
+ /**
1286
+ * Destroys the GPU data for the given texture object.
1287
+ *
1288
+ * @param {Texture} texture - The texture.
1289
+ * @param {boolean} [isDefaultTexture=false] - Whether the texture uses a default GPU texture or not.
1290
+ */
1291
+ destroyTexture( texture, isDefaultTexture = false ) {
1292
+
1293
+ this.textureUtils.destroyTexture( texture, isDefaultTexture );
1294
+
1295
+ }
1296
+
1297
+ /**
1298
+ * Returns texture data as a typed array.
1299
+ *
1300
+ * @async
1301
+ * @param {Texture} texture - The texture to copy.
1302
+ * @param {number} x - The x coordinate of the copy origin.
1303
+ * @param {number} y - The y coordinate of the copy origin.
1304
+ * @param {number} width - The width of the copy.
1305
+ * @param {number} height - The height of the copy.
1306
+ * @param {number} faceIndex - The face index.
1307
+ * @return {Promise<TypedArray>} A Promise that resolves with a typed array when the copy operation has finished.
1308
+ */
1309
+ async copyTextureToBuffer( texture, x, y, width, height, faceIndex ) {
1310
+
1311
+ return this.textureUtils.copyTextureToBuffer( texture, x, y, width, height, faceIndex );
1312
+
1313
+ }
1314
+
1315
+ /**
1316
+ * This method does nothing since WebGL 2 has no concept of samplers.
1317
+ *
1318
+ * @param {Texture} texture - The texture to update the sampler for.
1319
+ * @return {string} The current sampler key.
1320
+ */
1321
+ updateSampler( /*texture*/ ) {
1322
+
1323
+ return '';
1324
+
1325
+ }
1326
+
1327
+ // node builder
1328
+
1329
+ /**
1330
+ * Returns a node builder for the given render object.
1331
+ *
1332
+ * @param {RenderObject} object - The render object.
1333
+ * @param {Renderer} renderer - The renderer.
1334
+ * @return {GLSLNodeBuilder} The node builder.
1335
+ */
1336
+ createNodeBuilder( object, renderer ) {
1337
+
1338
+ return new GLSLNodeBuilder( object, renderer );
1339
+
1340
+ }
1341
+
1342
+ // program
1343
+
1344
+ /**
1345
+ * Creates a shader program from the given programmable stage.
1346
+ *
1347
+ * @param {ProgrammableStage} program - The programmable stage.
1348
+ */
1349
+ createProgram( program ) {
1350
+
1351
+ const gl = this.gl;
1352
+ const { stage, code } = program;
1353
+
1354
+ const shader = stage === 'fragment' ? gl.createShader( gl.FRAGMENT_SHADER ) : gl.createShader( gl.VERTEX_SHADER );
1355
+
1356
+ gl.shaderSource( shader, code );
1357
+ gl.compileShader( shader );
1358
+
1359
+ this.set( program, {
1360
+ shaderGPU: shader
1361
+ } );
1362
+
1363
+ }
1364
+
1365
+ /**
1366
+ * Destroys the shader program of the given programmable stage.
1367
+ *
1368
+ * @param {ProgrammableStage} program - The programmable stage.
1369
+ */
1370
+ destroyProgram( program ) {
1371
+
1372
+ this.delete( program );
1373
+
1374
+ }
1375
+
1376
+ /**
1377
+ * Creates a render pipeline for the given render object.
1378
+ *
1379
+ * @param {RenderObject} renderObject - The render object.
1380
+ * @param {Array<Promise>} promises - An array of compilation promises which are used in `compileAsync()`.
1381
+ */
1382
+ createRenderPipeline( renderObject, promises ) {
1383
+
1384
+ const gl = this.gl;
1385
+ const pipeline = renderObject.pipeline;
1386
+
1387
+ // Program
1388
+
1389
+ const { fragmentProgram, vertexProgram } = pipeline;
1390
+
1391
+ const programGPU = gl.createProgram();
1392
+
1393
+ const fragmentShader = this.get( fragmentProgram ).shaderGPU;
1394
+ const vertexShader = this.get( vertexProgram ).shaderGPU;
1395
+
1396
+ gl.attachShader( programGPU, fragmentShader );
1397
+ gl.attachShader( programGPU, vertexShader );
1398
+ gl.linkProgram( programGPU );
1399
+
1400
+ this.set( pipeline, {
1401
+ programGPU,
1402
+ fragmentShader,
1403
+ vertexShader
1404
+ } );
1405
+
1406
+ if ( promises !== null && this.parallel ) {
1407
+
1408
+ const p = new Promise( ( resolve /*, reject*/ ) => {
1409
+
1410
+ const parallel = this.parallel;
1411
+ const checkStatus = () => {
1412
+
1413
+ if ( gl.getProgramParameter( programGPU, parallel.COMPLETION_STATUS_KHR ) ) {
1414
+
1415
+ this._completeCompile( renderObject, pipeline );
1416
+ resolve();
1417
+
1418
+ } else {
1419
+
1420
+ requestAnimationFrame( checkStatus );
1421
+
1422
+ }
1423
+
1424
+ };
1425
+
1426
+ checkStatus();
1427
+
1428
+ } );
1429
+
1430
+ promises.push( p );
1431
+
1432
+ return;
1433
+
1434
+ }
1435
+
1436
+ this._completeCompile( renderObject, pipeline );
1437
+
1438
+ }
1439
+
1440
+ /**
1441
+ * Formats the source code of error messages.
1442
+ *
1443
+ * @private
1444
+ * @param {string} string - The code.
1445
+ * @param {number} errorLine - The error line.
1446
+ * @return {string} The formatted code.
1447
+ */
1448
+ _handleSource( string, errorLine ) {
1449
+
1450
+ const lines = string.split( '\n' );
1451
+ const lines2 = [];
1452
+
1453
+ const from = Math.max( errorLine - 6, 0 );
1454
+ const to = Math.min( errorLine + 6, lines.length );
1455
+
1456
+ for ( let i = from; i < to; i ++ ) {
1457
+
1458
+ const line = i + 1;
1459
+ lines2.push( `${line === errorLine ? '>' : ' '} ${line}: ${lines[ i ]}` );
1460
+
1461
+ }
1462
+
1463
+ return lines2.join( '\n' );
1464
+
1465
+ }
1466
+
1467
+ /**
1468
+ * Gets the shader compilation errors from the info log.
1469
+ *
1470
+ * @private
1471
+ * @param {WebGL2RenderingContext} gl - The rendering context.
1472
+ * @param {WebGLShader} shader - The WebGL shader object.
1473
+ * @param {string} type - The shader type.
1474
+ * @return {string} The shader errors.
1475
+ */
1476
+ _getShaderErrors( gl, shader, type ) {
1477
+
1478
+ const status = gl.getShaderParameter( shader, gl.COMPILE_STATUS );
1479
+
1480
+ const shaderInfoLog = gl.getShaderInfoLog( shader ) || '';
1481
+ const errors = shaderInfoLog.trim();
1482
+
1483
+ if ( status && errors === '' ) return '';
1484
+
1485
+ const errorMatches = /ERROR: 0:(\d+)/.exec( errors );
1486
+ if ( errorMatches ) {
1487
+
1488
+ const errorLine = parseInt( errorMatches[ 1 ] );
1489
+ return type.toUpperCase() + '\n\n' + errors + '\n\n' + this._handleSource( gl.getShaderSource( shader ), errorLine );
1490
+
1491
+ } else {
1492
+
1493
+ return errors;
1494
+
1495
+ }
1496
+
1497
+ }
1498
+
1499
+ /**
1500
+ * Logs shader compilation errors.
1501
+ *
1502
+ * @private
1503
+ * @param {WebGLProgram} programGPU - The WebGL program.
1504
+ * @param {WebGLShader} glFragmentShader - The fragment shader as a native WebGL shader object.
1505
+ * @param {WebGLShader} glVertexShader - The vertex shader as a native WebGL shader object.
1506
+ */
1507
+ _logProgramError( programGPU, glFragmentShader, glVertexShader ) {
1508
+
1509
+ if ( this.renderer.debug.checkShaderErrors ) {
1510
+
1511
+ const gl = this.gl;
1512
+
1513
+ const programInfoLog = gl.getProgramInfoLog( programGPU ) || '';
1514
+ const programLog = programInfoLog.trim();
1515
+
1516
+ if ( gl.getProgramParameter( programGPU, gl.LINK_STATUS ) === false ) {
1517
+
1518
+ if ( typeof this.renderer.debug.onShaderError === 'function' ) {
1519
+
1520
+ this.renderer.debug.onShaderError( gl, programGPU, glVertexShader, glFragmentShader );
1521
+
1522
+ } else {
1523
+
1524
+ // default error reporting
1525
+
1526
+ const vertexErrors = this._getShaderErrors( gl, glVertexShader, 'vertex' );
1527
+ const fragmentErrors = this._getShaderErrors( gl, glFragmentShader, 'fragment' );
1528
+
1529
+ error(
1530
+ 'THREE.WebGLProgram: Shader Error ' + gl.getError() + ' - ' +
1531
+ 'VALIDATE_STATUS ' + gl.getProgramParameter( programGPU, gl.VALIDATE_STATUS ) + '\n\n' +
1532
+ 'Program Info Log: ' + programLog + '\n' +
1533
+ vertexErrors + '\n' +
1534
+ fragmentErrors
1535
+ );
1536
+
1537
+ }
1538
+
1539
+ } else if ( programLog !== '' ) {
1540
+
1541
+ warn( 'WebGLProgram: Program Info Log:', programLog );
1542
+
1543
+ }
1544
+
1545
+ }
1546
+
1547
+ }
1548
+
1549
+ /**
1550
+ * Completes the shader program setup for the given render object.
1551
+ *
1552
+ * @private
1553
+ * @param {RenderObject} renderObject - The render object.
1554
+ * @param {RenderPipeline} pipeline - The render pipeline.
1555
+ */
1556
+ _completeCompile( renderObject, pipeline ) {
1557
+
1558
+ const { state, gl } = this;
1559
+ const pipelineData = this.get( pipeline );
1560
+ const { programGPU, fragmentShader, vertexShader } = pipelineData;
1561
+
1562
+ if ( gl.getProgramParameter( programGPU, gl.LINK_STATUS ) === false ) {
1563
+
1564
+ this._logProgramError( programGPU, fragmentShader, vertexShader );
1565
+
1566
+ }
1567
+
1568
+ state.useProgram( programGPU );
1569
+
1570
+ // Bindings
1571
+
1572
+ const bindings = renderObject.getBindings();
1573
+
1574
+ this._setupBindings( bindings, programGPU );
1575
+
1576
+ //
1577
+
1578
+ this.set( pipeline, {
1579
+ programGPU
1580
+ } );
1581
+
1582
+ }
1583
+
1584
+ /**
1585
+ * Creates a compute pipeline for the given compute node.
1586
+ *
1587
+ * @param {ComputePipeline} computePipeline - The compute pipeline.
1588
+ * @param {Array<BindGroup>} bindings - The bindings.
1589
+ */
1590
+ createComputePipeline( computePipeline, bindings ) {
1591
+
1592
+ const { state, gl } = this;
1593
+
1594
+ // Program
1595
+
1596
+ const fragmentProgram = {
1597
+ stage: 'fragment',
1598
+ code: '#version 300 es\nprecision highp float;\nvoid main() {}'
1599
+ };
1600
+
1601
+ this.createProgram( fragmentProgram );
1602
+
1603
+ const { computeProgram } = computePipeline;
1604
+
1605
+ const programGPU = gl.createProgram();
1606
+
1607
+ const fragmentShader = this.get( fragmentProgram ).shaderGPU;
1608
+ const vertexShader = this.get( computeProgram ).shaderGPU;
1609
+
1610
+ const transforms = computeProgram.transforms;
1611
+
1612
+ const transformVaryingNames = [];
1613
+ const transformAttributeNodes = [];
1614
+
1615
+ for ( let i = 0; i < transforms.length; i ++ ) {
1616
+
1617
+ const transform = transforms[ i ];
1618
+
1619
+ transformVaryingNames.push( transform.varyingName );
1620
+ transformAttributeNodes.push( transform.attributeNode );
1621
+
1622
+ }
1623
+
1624
+ gl.attachShader( programGPU, fragmentShader );
1625
+ gl.attachShader( programGPU, vertexShader );
1626
+
1627
+ gl.transformFeedbackVaryings(
1628
+ programGPU,
1629
+ transformVaryingNames,
1630
+ gl.SEPARATE_ATTRIBS
1631
+ );
1632
+
1633
+ gl.linkProgram( programGPU );
1634
+
1635
+ if ( gl.getProgramParameter( programGPU, gl.LINK_STATUS ) === false ) {
1636
+
1637
+ this._logProgramError( programGPU, fragmentShader, vertexShader );
1638
+
1639
+
1640
+ }
1641
+
1642
+ state.useProgram( programGPU );
1643
+
1644
+ // Bindings
1645
+
1646
+ this._setupBindings( bindings, programGPU );
1647
+
1648
+ const attributeNodes = computeProgram.attributes;
1649
+ const attributes = [];
1650
+ const transformBuffers = [];
1651
+
1652
+ for ( let i = 0; i < attributeNodes.length; i ++ ) {
1653
+
1654
+ const attribute = attributeNodes[ i ].node.attribute;
1655
+
1656
+ attributes.push( attribute );
1657
+
1658
+ if ( ! this.has( attribute ) ) this.attributeUtils.createAttribute( attribute, gl.ARRAY_BUFFER );
1659
+
1660
+ }
1661
+
1662
+ for ( let i = 0; i < transformAttributeNodes.length; i ++ ) {
1663
+
1664
+ const attribute = transformAttributeNodes[ i ].attribute;
1665
+
1666
+ if ( ! this.has( attribute ) ) this.attributeUtils.createAttribute( attribute, gl.ARRAY_BUFFER );
1667
+
1668
+ const attributeData = this.get( attribute );
1669
+
1670
+ transformBuffers.push( attributeData );
1671
+
1672
+ }
1673
+
1674
+ //
1675
+
1676
+ this.set( computePipeline, {
1677
+ programGPU,
1678
+ transformBuffers,
1679
+ attributes
1680
+ } );
1681
+
1682
+ }
1683
+
1684
+ /**
1685
+ * Creates bindings from the given bind group definition.
1686
+ *
1687
+ * @param {BindGroup} bindGroup - The bind group.
1688
+ * @param {Array<BindGroup>} bindings - Array of bind groups.
1689
+ * @param {number} cacheIndex - The cache index.
1690
+ * @param {number} version - The version.
1691
+ */
1692
+ createBindings( bindGroup, bindings /*, cacheIndex, version*/ ) {
1693
+
1694
+ if ( this._knownBindings.has( bindings ) === false ) {
1695
+
1696
+ this._knownBindings.add( bindings );
1697
+
1698
+ let uniformBuffers = 0;
1699
+ let textures = 0;
1700
+
1701
+ for ( const bindGroup of bindings ) {
1702
+
1703
+ this.set( bindGroup, {
1704
+ textures: textures,
1705
+ uniformBuffers: uniformBuffers
1706
+ } );
1707
+
1708
+ for ( const binding of bindGroup.bindings ) {
1709
+
1710
+ if ( binding.isUniformBuffer ) uniformBuffers ++;
1711
+ if ( binding.isSampledTexture ) textures ++;
1712
+
1713
+ }
1714
+
1715
+ }
1716
+
1717
+ }
1718
+
1719
+ this.updateBindings( bindGroup, bindings );
1720
+
1721
+ }
1722
+
1723
+ /**
1724
+ * Updates the given bind group definition.
1725
+ *
1726
+ * @param {BindGroup} bindGroup - The bind group.
1727
+ * @param {Array<BindGroup>} bindings - Array of bind groups.
1728
+ * @param {number} cacheIndex - The cache index.
1729
+ * @param {number} version - The version.
1730
+ */
1731
+ updateBindings( bindGroup /*, bindings, cacheIndex, version*/ ) {
1732
+
1733
+ const { gl } = this;
1734
+
1735
+ const bindGroupData = this.get( bindGroup );
1736
+
1737
+ let i = bindGroupData.uniformBuffers;
1738
+ let t = bindGroupData.textures;
1739
+
1740
+ for ( const binding of bindGroup.bindings ) {
1741
+
1742
+ const map = this.get( binding );
1743
+
1744
+ if ( binding.isUniformsGroup || binding.isUniformBuffer ) {
1745
+
1746
+ const data = binding.buffer;
1747
+ let { bufferGPU } = this.get( data );
1748
+
1749
+ if ( bufferGPU === undefined ) {
1750
+
1751
+ // create
1752
+
1753
+ bufferGPU = gl.createBuffer();
1754
+ gl.bindBuffer( gl.UNIFORM_BUFFER, bufferGPU );
1755
+ gl.bufferData( gl.UNIFORM_BUFFER, data, gl.DYNAMIC_DRAW );
1756
+
1757
+ this.set( data, { bufferGPU } );
1758
+
1759
+ } else {
1760
+
1761
+ // update
1762
+
1763
+ gl.bindBuffer( gl.UNIFORM_BUFFER, bufferGPU );
1764
+ gl.bufferSubData( gl.UNIFORM_BUFFER, 0, data );
1765
+
1766
+ }
1767
+
1768
+ map.index = i ++;
1769
+ map.bufferGPU = bufferGPU;
1770
+
1771
+ this.set( binding, map );
1772
+
1773
+ } else if ( binding.isSampledTexture ) {
1774
+
1775
+ const { textureGPU, glTextureType } = this.get( binding.texture );
1776
+
1777
+ map.index = t ++;
1778
+ map.textureGPU = textureGPU;
1779
+ map.glTextureType = glTextureType;
1780
+
1781
+ this.set( binding, map );
1782
+
1783
+ }
1784
+
1785
+ }
1786
+
1787
+ }
1788
+
1789
+ /**
1790
+ * Updates a buffer binding.
1791
+ *
1792
+ * @param {Buffer} binding - The buffer binding to update.
1793
+ */
1794
+ updateBinding( binding ) {
1795
+
1796
+ const gl = this.gl;
1797
+
1798
+ if ( binding.isUniformsGroup || binding.isUniformBuffer ) {
1799
+
1800
+ const bindingData = this.get( binding );
1801
+ const bufferGPU = bindingData.bufferGPU;
1802
+ const data = binding.buffer;
1803
+
1804
+ gl.bindBuffer( gl.UNIFORM_BUFFER, bufferGPU );
1805
+ gl.bufferData( gl.UNIFORM_BUFFER, data, gl.DYNAMIC_DRAW );
1806
+
1807
+ }
1808
+
1809
+ }
1810
+
1811
+ // attributes
1812
+
1813
+ /**
1814
+ * Creates the GPU buffer of an indexed shader attribute.
1815
+ *
1816
+ * @param {BufferAttribute} attribute - The indexed buffer attribute.
1817
+ */
1818
+ createIndexAttribute( attribute ) {
1819
+
1820
+ const gl = this.gl;
1821
+
1822
+ this.attributeUtils.createAttribute( attribute, gl.ELEMENT_ARRAY_BUFFER );
1823
+
1824
+ }
1825
+
1826
+ /**
1827
+ * Creates the GPU buffer of a shader attribute.
1828
+ *
1829
+ * @param {BufferAttribute} attribute - The buffer attribute.
1830
+ */
1831
+ createAttribute( attribute ) {
1832
+
1833
+ if ( this.has( attribute ) ) return;
1834
+
1835
+ const gl = this.gl;
1836
+
1837
+ this.attributeUtils.createAttribute( attribute, gl.ARRAY_BUFFER );
1838
+
1839
+ }
1840
+
1841
+ /**
1842
+ * Creates the GPU buffer of a storage attribute.
1843
+ *
1844
+ * @param {BufferAttribute} attribute - The buffer attribute.
1845
+ */
1846
+ createStorageAttribute( attribute ) {
1847
+
1848
+ if ( this.has( attribute ) ) return;
1849
+
1850
+ const gl = this.gl;
1851
+
1852
+ this.attributeUtils.createAttribute( attribute, gl.ARRAY_BUFFER );
1853
+
1854
+ }
1855
+
1856
+ /**
1857
+ * Updates the GPU buffer of a shader attribute.
1858
+ *
1859
+ * @param {BufferAttribute} attribute - The buffer attribute to update.
1860
+ */
1861
+ updateAttribute( attribute ) {
1862
+
1863
+ this.attributeUtils.updateAttribute( attribute );
1864
+
1865
+ }
1866
+
1867
+ /**
1868
+ * Destroys the GPU buffer of a shader attribute.
1869
+ *
1870
+ * @param {BufferAttribute} attribute - The buffer attribute to destroy.
1871
+ */
1872
+ destroyAttribute( attribute ) {
1873
+
1874
+ this.attributeUtils.destroyAttribute( attribute );
1875
+
1876
+ }
1877
+
1878
+ /**
1879
+ * Checks if the given feature is supported by the backend.
1880
+ *
1881
+ * @param {string} name - The feature's name.
1882
+ * @return {boolean} Whether the feature is supported or not.
1883
+ */
1884
+ hasFeature( name ) {
1885
+
1886
+ const keysMatching = Object.keys( GLFeatureName ).filter( key => GLFeatureName[ key ] === name );
1887
+
1888
+ const extensions = this.extensions;
1889
+
1890
+ for ( let i = 0; i < keysMatching.length; i ++ ) {
1891
+
1892
+ if ( extensions.has( keysMatching[ i ] ) ) return true;
1893
+
1894
+ }
1895
+
1896
+ return false;
1897
+
1898
+ }
1899
+
1900
+ /**
1901
+ * Returns the maximum anisotropy texture filtering value.
1902
+ *
1903
+ * @return {number} The maximum anisotropy texture filtering value.
1904
+ */
1905
+ getMaxAnisotropy() {
1906
+
1907
+ return this.capabilities.getMaxAnisotropy();
1908
+
1909
+ }
1910
+
1911
+ /**
1912
+ * Copies data of the given source texture to the given destination texture.
1913
+ *
1914
+ * @param {Texture} srcTexture - The source texture.
1915
+ * @param {Texture} dstTexture - The destination texture.
1916
+ * @param {?(Box3|Box2)} [srcRegion=null] - The region of the source texture to copy.
1917
+ * @param {?(Vector2|Vector3)} [dstPosition=null] - The destination position of the copy.
1918
+ * @param {number} [srcLevel=0] - The source mip level to copy from.
1919
+ * @param {number} [dstLevel=0] - The destination mip level to copy to.
1920
+ */
1921
+ copyTextureToTexture( srcTexture, dstTexture, srcRegion = null, dstPosition = null, srcLevel = 0, dstLevel = 0 ) {
1922
+
1923
+ this.textureUtils.copyTextureToTexture( srcTexture, dstTexture, srcRegion, dstPosition, srcLevel, dstLevel );
1924
+
1925
+ }
1926
+
1927
+ /**
1928
+ * Copies the current bound framebuffer to the given texture.
1929
+ *
1930
+ * @param {Texture} texture - The destination texture.
1931
+ * @param {RenderContext} renderContext - The render context.
1932
+ * @param {Vector4} rectangle - A four dimensional vector defining the origin and dimension of the copy.
1933
+ */
1934
+ copyFramebufferToTexture( texture, renderContext, rectangle ) {
1935
+
1936
+ this.textureUtils.copyFramebufferToTexture( texture, renderContext, rectangle );
1937
+
1938
+ }
1939
+
1940
+ /**
1941
+ * Configures the active framebuffer from the given render context.
1942
+ *
1943
+ * @private
1944
+ * @param {RenderContext} descriptor - The render context.
1945
+ */
1946
+ _setFramebuffer( descriptor ) {
1947
+
1948
+ const { gl, state } = this;
1949
+
1950
+ let currentFrameBuffer = null;
1951
+
1952
+ if ( descriptor.textures !== null ) {
1953
+
1954
+ const renderTarget = descriptor.renderTarget;
1955
+ const renderTargetContextData = this.get( renderTarget );
1956
+ const { samples, depthBuffer, stencilBuffer } = renderTarget;
1957
+
1958
+ const isCube = renderTarget.isWebGLCubeRenderTarget === true;
1959
+ const isRenderTarget3D = renderTarget.isRenderTarget3D === true;
1960
+ const isRenderTargetArray = renderTarget.depth > 1;
1961
+ const isXRRenderTarget = renderTarget.isXRRenderTarget === true;
1962
+ const _hasExternalTextures = ( isXRRenderTarget === true && renderTarget._hasExternalTextures === true );
1963
+
1964
+ let msaaFb = renderTargetContextData.msaaFrameBuffer;
1965
+ let depthRenderbuffer = renderTargetContextData.depthRenderbuffer;
1966
+ const multisampledRTTExt = this.extensions.get( 'WEBGL_multisampled_render_to_texture' );
1967
+ const multiviewExt = this.extensions.get( 'OVR_multiview2' );
1968
+ const useMultisampledRTT = this._useMultisampledExtension( renderTarget );
1969
+ const cacheKey = getCacheKey( descriptor );
1970
+
1971
+ let fb;
1972
+
1973
+ if ( isCube ) {
1974
+
1975
+ renderTargetContextData.cubeFramebuffers || ( renderTargetContextData.cubeFramebuffers = {} );
1976
+
1977
+ fb = renderTargetContextData.cubeFramebuffers[ cacheKey ];
1978
+
1979
+ } else if ( isXRRenderTarget && _hasExternalTextures === false ) {
1980
+
1981
+ fb = this._xrFramebuffer;
1982
+
1983
+ } else {
1984
+
1985
+ renderTargetContextData.framebuffers || ( renderTargetContextData.framebuffers = {} );
1986
+
1987
+ fb = renderTargetContextData.framebuffers[ cacheKey ];
1988
+
1989
+ }
1990
+
1991
+ if ( fb === undefined ) {
1992
+
1993
+ fb = gl.createFramebuffer();
1994
+
1995
+ state.bindFramebuffer( gl.FRAMEBUFFER, fb );
1996
+
1997
+ const textures = descriptor.textures;
1998
+ const depthInvalidationArray = [];
1999
+
2000
+ if ( isCube ) {
2001
+
2002
+ renderTargetContextData.cubeFramebuffers[ cacheKey ] = fb;
2003
+
2004
+ const { textureGPU } = this.get( textures[ 0 ] );
2005
+
2006
+ const cubeFace = this.renderer._activeCubeFace;
2007
+ const mipLevel = this.renderer._activeMipmapLevel;
2008
+
2009
+ gl.framebufferTexture2D( gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_CUBE_MAP_POSITIVE_X + cubeFace, textureGPU, mipLevel );
2010
+
2011
+ } else {
2012
+
2013
+ renderTargetContextData.framebuffers[ cacheKey ] = fb;
2014
+
2015
+ for ( let i = 0; i < textures.length; i ++ ) {
2016
+
2017
+ const texture = textures[ i ];
2018
+ const textureData = this.get( texture );
2019
+ textureData.renderTarget = descriptor.renderTarget;
2020
+ textureData.cacheKey = cacheKey; // required for copyTextureToTexture()
2021
+
2022
+ const attachment = gl.COLOR_ATTACHMENT0 + i;
2023
+
2024
+ if ( renderTarget.multiview ) {
2025
+
2026
+ multiviewExt.framebufferTextureMultisampleMultiviewOVR( gl.FRAMEBUFFER, attachment, textureData.textureGPU, 0, samples, 0, 2 );
2027
+
2028
+ } else if ( isRenderTarget3D || isRenderTargetArray ) {
2029
+
2030
+ const layer = this.renderer._activeCubeFace;
2031
+ const mipLevel = this.renderer._activeMipmapLevel;
2032
+
2033
+ gl.framebufferTextureLayer( gl.FRAMEBUFFER, attachment, textureData.textureGPU, mipLevel, layer );
2034
+
2035
+ } else {
2036
+
2037
+ if ( useMultisampledRTT ) {
2038
+
2039
+ multisampledRTTExt.framebufferTexture2DMultisampleEXT( gl.FRAMEBUFFER, attachment, gl.TEXTURE_2D, textureData.textureGPU, 0, samples );
2040
+
2041
+ } else {
2042
+
2043
+ const mipLevel = this.renderer._activeMipmapLevel;
2044
+
2045
+ gl.framebufferTexture2D( gl.FRAMEBUFFER, attachment, gl.TEXTURE_2D, textureData.textureGPU, mipLevel );
2046
+
2047
+ }
2048
+
2049
+ }
2050
+
2051
+ }
2052
+
2053
+ }
2054
+
2055
+ const depthStyle = stencilBuffer ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT;
2056
+
2057
+ if ( renderTarget._autoAllocateDepthBuffer === true ) {
2058
+
2059
+ const renderbuffer = gl.createRenderbuffer();
2060
+ this.textureUtils.setupRenderBufferStorage( renderbuffer, descriptor, 0, useMultisampledRTT );
2061
+ renderTargetContextData.xrDepthRenderbuffer = renderbuffer;
2062
+ depthInvalidationArray.push( stencilBuffer ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT );
2063
+
2064
+ gl.bindRenderbuffer( gl.RENDERBUFFER, renderbuffer );
2065
+ gl.framebufferRenderbuffer( gl.FRAMEBUFFER, depthStyle, gl.RENDERBUFFER, renderbuffer );
2066
+
2067
+
2068
+ } else {
2069
+
2070
+ if ( descriptor.depthTexture !== null ) {
2071
+
2072
+ depthInvalidationArray.push( stencilBuffer ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT );
2073
+
2074
+ const textureData = this.get( descriptor.depthTexture );
2075
+ textureData.renderTarget = descriptor.renderTarget;
2076
+ textureData.cacheKey = cacheKey; // required for copyTextureToTexture()
2077
+
2078
+ if ( renderTarget.multiview ) {
2079
+
2080
+ multiviewExt.framebufferTextureMultisampleMultiviewOVR( gl.FRAMEBUFFER, depthStyle, textureData.textureGPU, 0, samples, 0, 2 );
2081
+
2082
+ } else if ( _hasExternalTextures && useMultisampledRTT ) {
2083
+
2084
+ multisampledRTTExt.framebufferTexture2DMultisampleEXT( gl.FRAMEBUFFER, depthStyle, gl.TEXTURE_2D, textureData.textureGPU, 0, samples );
2085
+
2086
+ } else {
2087
+
2088
+ if ( descriptor.depthTexture.isArrayTexture ) {
2089
+
2090
+ const layer = this.renderer._activeCubeFace;
2091
+
2092
+ gl.framebufferTextureLayer( gl.FRAMEBUFFER, depthStyle, textureData.textureGPU, 0, layer );
2093
+
2094
+ } else {
2095
+
2096
+ gl.framebufferTexture2D( gl.FRAMEBUFFER, depthStyle, gl.TEXTURE_2D, textureData.textureGPU, 0 );
2097
+
2098
+ }
2099
+
2100
+ }
2101
+
2102
+ }
2103
+
2104
+ }
2105
+
2106
+ renderTargetContextData.depthInvalidationArray = depthInvalidationArray;
2107
+
2108
+
2109
+ } else {
2110
+
2111
+ const isRenderCameraDepthArray = this._isRenderCameraDepthArray( descriptor );
2112
+
2113
+ if ( isRenderCameraDepthArray ) {
2114
+
2115
+ state.bindFramebuffer( gl.FRAMEBUFFER, fb );
2116
+
2117
+ const layer = this.renderer._activeCubeFace;
2118
+
2119
+ const depthData = this.get( descriptor.depthTexture );
2120
+ const depthStyle = stencilBuffer ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT;
2121
+ gl.framebufferTextureLayer(
2122
+ gl.FRAMEBUFFER,
2123
+ depthStyle,
2124
+ depthData.textureGPU,
2125
+ 0,
2126
+ layer
2127
+ );
2128
+
2129
+ }
2130
+
2131
+ // rebind external XR textures
2132
+
2133
+ if ( ( isXRRenderTarget || useMultisampledRTT || renderTarget.multiview ) && ( renderTarget._isOpaqueFramebuffer !== true ) ) {
2134
+
2135
+ state.bindFramebuffer( gl.FRAMEBUFFER, fb );
2136
+
2137
+ // rebind color
2138
+
2139
+ const textureData = this.get( descriptor.textures[ 0 ] );
2140
+
2141
+ if ( renderTarget.multiview ) {
2142
+
2143
+ multiviewExt.framebufferTextureMultisampleMultiviewOVR( gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, textureData.textureGPU, 0, samples, 0, 2 );
2144
+
2145
+ } else if ( useMultisampledRTT ) {
2146
+
2147
+ multisampledRTTExt.framebufferTexture2DMultisampleEXT( gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, textureData.textureGPU, 0, samples );
2148
+
2149
+ } else {
2150
+
2151
+ gl.framebufferTexture2D( gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, textureData.textureGPU, 0 );
2152
+
2153
+ }
2154
+
2155
+ // rebind depth
2156
+
2157
+ const depthStyle = stencilBuffer ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT;
2158
+
2159
+ if ( renderTarget._autoAllocateDepthBuffer === true ) {
2160
+
2161
+ const renderbuffer = renderTargetContextData.xrDepthRenderbuffer;
2162
+ gl.bindRenderbuffer( gl.RENDERBUFFER, renderbuffer );
2163
+ gl.framebufferRenderbuffer( gl.FRAMEBUFFER, depthStyle, gl.RENDERBUFFER, renderbuffer );
2164
+
2165
+ } else {
2166
+
2167
+ const textureData = this.get( descriptor.depthTexture );
2168
+
2169
+ if ( renderTarget.multiview ) {
2170
+
2171
+ multiviewExt.framebufferTextureMultisampleMultiviewOVR( gl.FRAMEBUFFER, depthStyle, textureData.textureGPU, 0, samples, 0, 2 );
2172
+
2173
+ } else if ( useMultisampledRTT ) {
2174
+
2175
+ multisampledRTTExt.framebufferTexture2DMultisampleEXT( gl.FRAMEBUFFER, depthStyle, gl.TEXTURE_2D, textureData.textureGPU, 0, samples );
2176
+
2177
+ } else {
2178
+
2179
+ gl.framebufferTexture2D( gl.FRAMEBUFFER, depthStyle, gl.TEXTURE_2D, textureData.textureGPU, 0 );
2180
+
2181
+ }
2182
+
2183
+ }
2184
+
2185
+ }
2186
+
2187
+ }
2188
+
2189
+ if ( samples > 0 && useMultisampledRTT === false && ! renderTarget.multiview ) {
2190
+
2191
+ if ( msaaFb === undefined ) {
2192
+
2193
+ const invalidationArray = [];
2194
+
2195
+ msaaFb = gl.createFramebuffer();
2196
+
2197
+ state.bindFramebuffer( gl.FRAMEBUFFER, msaaFb );
2198
+
2199
+ const msaaRenderbuffers = [];
2200
+
2201
+ const textures = descriptor.textures;
2202
+
2203
+ for ( let i = 0; i < textures.length; i ++ ) {
2204
+
2205
+ msaaRenderbuffers[ i ] = gl.createRenderbuffer();
2206
+
2207
+ gl.bindRenderbuffer( gl.RENDERBUFFER, msaaRenderbuffers[ i ] );
2208
+
2209
+ invalidationArray.push( gl.COLOR_ATTACHMENT0 + i );
2210
+
2211
+ const texture = descriptor.textures[ i ];
2212
+ const textureData = this.get( texture );
2213
+
2214
+ gl.renderbufferStorageMultisample( gl.RENDERBUFFER, samples, textureData.glInternalFormat, descriptor.width, descriptor.height );
2215
+ gl.framebufferRenderbuffer( gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0 + i, gl.RENDERBUFFER, msaaRenderbuffers[ i ] );
2216
+
2217
+
2218
+ }
2219
+
2220
+ gl.bindRenderbuffer( gl.RENDERBUFFER, null );
2221
+
2222
+ renderTargetContextData.msaaFrameBuffer = msaaFb;
2223
+ renderTargetContextData.msaaRenderbuffers = msaaRenderbuffers;
2224
+
2225
+ if ( depthBuffer && depthRenderbuffer === undefined ) {
2226
+
2227
+ depthRenderbuffer = gl.createRenderbuffer();
2228
+ this.textureUtils.setupRenderBufferStorage( depthRenderbuffer, descriptor, samples );
2229
+
2230
+ renderTargetContextData.depthRenderbuffer = depthRenderbuffer;
2231
+
2232
+ const depthStyle = stencilBuffer ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT;
2233
+ invalidationArray.push( depthStyle );
2234
+
2235
+ }
2236
+
2237
+ renderTargetContextData.invalidationArray = invalidationArray;
2238
+
2239
+ }
2240
+
2241
+ currentFrameBuffer = renderTargetContextData.msaaFrameBuffer;
2242
+
2243
+ } else {
2244
+
2245
+ currentFrameBuffer = fb;
2246
+
2247
+ }
2248
+
2249
+ state.drawBuffers( descriptor, fb );
2250
+
2251
+ }
2252
+
2253
+ state.bindFramebuffer( gl.FRAMEBUFFER, currentFrameBuffer );
2254
+
2255
+ }
2256
+
2257
+ /**
2258
+ * Computes the VAO key for the given index and attributes.
2259
+ *
2260
+ * @private
2261
+ * @param {Array<BufferAttribute>} attributes - An array of buffer attributes.
2262
+ * @return {string} The VAO key.
2263
+ */
2264
+ _getVaoKey( attributes ) {
2265
+
2266
+ let key = '';
2267
+
2268
+ for ( let i = 0; i < attributes.length; i ++ ) {
2269
+
2270
+ const attributeData = this.get( attributes[ i ] );
2271
+
2272
+ key += ':' + attributeData.id;
2273
+
2274
+ }
2275
+
2276
+ return key;
2277
+
2278
+ }
2279
+
2280
+ /**
2281
+ * Creates a VAO from the index and attributes.
2282
+ *
2283
+ * @private
2284
+ * @param {Array<BufferAttribute>} attributes - An array of buffer attributes.
2285
+ * @return {Object} The VAO data.
2286
+ */
2287
+ _createVao( attributes ) {
2288
+
2289
+ const { gl } = this;
2290
+
2291
+ const vaoGPU = gl.createVertexArray();
2292
+
2293
+ gl.bindVertexArray( vaoGPU );
2294
+
2295
+ for ( let i = 0; i < attributes.length; i ++ ) {
2296
+
2297
+ const attribute = attributes[ i ];
2298
+ const attributeData = this.get( attribute );
2299
+
2300
+ gl.bindBuffer( gl.ARRAY_BUFFER, attributeData.bufferGPU );
2301
+ gl.enableVertexAttribArray( i );
2302
+
2303
+ let stride, offset;
2304
+
2305
+ if ( attribute.isInterleavedBufferAttribute === true ) {
2306
+
2307
+ stride = attribute.data.stride * attributeData.bytesPerElement;
2308
+ offset = attribute.offset * attributeData.bytesPerElement;
2309
+
2310
+ } else {
2311
+
2312
+ stride = 0;
2313
+ offset = 0;
2314
+
2315
+ }
2316
+
2317
+ if ( attributeData.isInteger ) {
2318
+
2319
+ gl.vertexAttribIPointer( i, attribute.itemSize, attributeData.type, stride, offset );
2320
+
2321
+ } else {
2322
+
2323
+ gl.vertexAttribPointer( i, attribute.itemSize, attributeData.type, attribute.normalized, stride, offset );
2324
+
2325
+ }
2326
+
2327
+ if ( attribute.isInstancedBufferAttribute && ! attribute.isInterleavedBufferAttribute ) {
2328
+
2329
+ gl.vertexAttribDivisor( i, attribute.meshPerAttribute );
2330
+
2331
+ } else if ( attribute.isInterleavedBufferAttribute && attribute.data.isInstancedInterleavedBuffer ) {
2332
+
2333
+ gl.vertexAttribDivisor( i, attribute.data.meshPerAttribute );
2334
+
2335
+ }
2336
+
2337
+ }
2338
+
2339
+ gl.bindBuffer( gl.ARRAY_BUFFER, null );
2340
+
2341
+ return vaoGPU;
2342
+
2343
+ }
2344
+
2345
+ /**
2346
+ * Creates a transform feedback from the given transform buffers.
2347
+ *
2348
+ * @private
2349
+ * @param {Array<DualAttributeData>} transformBuffers - The transform buffers.
2350
+ * @return {WebGLTransformFeedback} The transform feedback.
2351
+ */
2352
+ _getTransformFeedback( transformBuffers ) {
2353
+
2354
+ let key = '';
2355
+
2356
+ for ( let i = 0; i < transformBuffers.length; i ++ ) {
2357
+
2358
+ key += ':' + transformBuffers[ i ].id;
2359
+
2360
+ }
2361
+
2362
+ let transformFeedbackGPU = this.transformFeedbackCache[ key ];
2363
+
2364
+ if ( transformFeedbackGPU !== undefined ) {
2365
+
2366
+ return transformFeedbackGPU;
2367
+
2368
+ }
2369
+
2370
+ const { gl } = this;
2371
+
2372
+ transformFeedbackGPU = gl.createTransformFeedback();
2373
+
2374
+ gl.bindTransformFeedback( gl.TRANSFORM_FEEDBACK, transformFeedbackGPU );
2375
+
2376
+ for ( let i = 0; i < transformBuffers.length; i ++ ) {
2377
+
2378
+ const attributeData = transformBuffers[ i ];
2379
+
2380
+ gl.bindBufferBase( gl.TRANSFORM_FEEDBACK_BUFFER, i, attributeData.transformBuffer );
2381
+
2382
+ }
2383
+
2384
+ gl.bindTransformFeedback( gl.TRANSFORM_FEEDBACK, null );
2385
+
2386
+ this.transformFeedbackCache[ key ] = transformFeedbackGPU;
2387
+
2388
+ return transformFeedbackGPU;
2389
+
2390
+ }
2391
+
2392
+ /**
2393
+ * Setups the given bindings.
2394
+ *
2395
+ * @private
2396
+ * @param {Array<BindGroup>} bindings - The bindings.
2397
+ * @param {WebGLProgram} programGPU - The WebGL program.
2398
+ */
2399
+ _setupBindings( bindings, programGPU ) {
2400
+
2401
+ const gl = this.gl;
2402
+
2403
+ for ( const bindGroup of bindings ) {
2404
+
2405
+ for ( const binding of bindGroup.bindings ) {
2406
+
2407
+ const bindingData = this.get( binding );
2408
+ const index = bindingData.index;
2409
+
2410
+ if ( binding.isUniformsGroup || binding.isUniformBuffer ) {
2411
+
2412
+ const location = gl.getUniformBlockIndex( programGPU, binding.name );
2413
+ gl.uniformBlockBinding( programGPU, location, index );
2414
+
2415
+ } else if ( binding.isSampledTexture ) {
2416
+
2417
+ const location = gl.getUniformLocation( programGPU, binding.name );
2418
+ gl.uniform1i( location, index );
2419
+
2420
+ }
2421
+
2422
+ }
2423
+
2424
+ }
2425
+
2426
+ }
2427
+
2428
+ /**
2429
+ * Binds the given uniforms.
2430
+ *
2431
+ * @private
2432
+ * @param {Array<BindGroup>} bindings - The bindings.
2433
+ */
2434
+ _bindUniforms( bindings ) {
2435
+
2436
+ const { gl, state } = this;
2437
+
2438
+ for ( const bindGroup of bindings ) {
2439
+
2440
+ for ( const binding of bindGroup.bindings ) {
2441
+
2442
+ const bindingData = this.get( binding );
2443
+ const index = bindingData.index;
2444
+
2445
+ if ( binding.isUniformsGroup || binding.isUniformBuffer ) {
2446
+
2447
+ // TODO USE bindBufferRange to group multiple uniform buffers
2448
+ state.bindBufferBase( gl.UNIFORM_BUFFER, index, bindingData.bufferGPU );
2449
+
2450
+ } else if ( binding.isSampledTexture ) {
2451
+
2452
+ state.bindTexture( bindingData.glTextureType, bindingData.textureGPU, gl.TEXTURE0 + index );
2453
+
2454
+ }
2455
+
2456
+ }
2457
+
2458
+ }
2459
+
2460
+ }
2461
+
2462
+ /**
2463
+ * The method ensures multisampled render targets are resolved.
2464
+ *
2465
+ * @private
2466
+ * @param {RenderContext} renderContext - The render context.
2467
+ */
2468
+ _resolveRenderTarget( renderContext ) {
2469
+
2470
+ const { gl, state } = this;
2471
+
2472
+ const renderTarget = renderContext.renderTarget;
2473
+
2474
+ if ( renderContext.textures !== null && renderTarget ) {
2475
+
2476
+ const renderTargetContextData = this.get( renderTarget );
2477
+
2478
+ if ( renderTarget.samples > 0 && this._useMultisampledExtension( renderTarget ) === false ) {
2479
+
2480
+ const fb = renderTargetContextData.framebuffers[ renderContext.getCacheKey() ];
2481
+
2482
+ let mask = gl.COLOR_BUFFER_BIT;
2483
+
2484
+ if ( renderTarget.resolveDepthBuffer ) {
2485
+
2486
+ if ( renderTarget.depthBuffer ) mask |= gl.DEPTH_BUFFER_BIT;
2487
+ if ( renderTarget.stencilBuffer && renderTarget.resolveStencilBuffer ) mask |= gl.STENCIL_BUFFER_BIT;
2488
+
2489
+ }
2490
+
2491
+ const msaaFrameBuffer = renderTargetContextData.msaaFrameBuffer;
2492
+ const msaaRenderbuffers = renderTargetContextData.msaaRenderbuffers;
2493
+
2494
+ const textures = renderContext.textures;
2495
+ const isMRT = textures.length > 1;
2496
+
2497
+ state.bindFramebuffer( gl.READ_FRAMEBUFFER, msaaFrameBuffer );
2498
+ state.bindFramebuffer( gl.DRAW_FRAMEBUFFER, fb );
2499
+
2500
+ if ( isMRT ) {
2501
+
2502
+ // blitFramebuffer() can only copy/resolve the first color attachment of a framebuffer. When using MRT,
2503
+ // the engine temporarily removes all attachments and then configures each attachment for the resolve.
2504
+
2505
+ for ( let i = 0; i < textures.length; i ++ ) {
2506
+
2507
+ gl.framebufferRenderbuffer( gl.READ_FRAMEBUFFER, gl.COLOR_ATTACHMENT0 + i, gl.RENDERBUFFER, null );
2508
+ gl.framebufferTexture2D( gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0 + i, gl.TEXTURE_2D, null, 0 );
2509
+
2510
+ }
2511
+
2512
+ }
2513
+
2514
+ for ( let i = 0; i < textures.length; i ++ ) {
2515
+
2516
+ if ( isMRT ) {
2517
+
2518
+ // configure attachment for resolve
2519
+
2520
+ const { textureGPU } = this.get( textures[ i ] );
2521
+
2522
+ gl.framebufferRenderbuffer( gl.READ_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, msaaRenderbuffers[ i ] );
2523
+ gl.framebufferTexture2D( gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, textureGPU, 0 );
2524
+
2525
+ }
2526
+
2527
+ if ( renderContext.scissor ) {
2528
+
2529
+ const { x, y, width, height } = renderContext.scissorValue;
2530
+
2531
+ const viewY = renderContext.height - height - y;
2532
+
2533
+ gl.blitFramebuffer( x, viewY, x + width, viewY + height, x, viewY, x + width, viewY + height, mask, gl.NEAREST );
2534
+
2535
+ } else {
2536
+
2537
+ gl.blitFramebuffer( 0, 0, renderContext.width, renderContext.height, 0, 0, renderContext.width, renderContext.height, mask, gl.NEAREST );
2538
+
2539
+ }
2540
+
2541
+ }
2542
+
2543
+ if ( isMRT ) {
2544
+
2545
+ // restore attachments
2546
+
2547
+ for ( let i = 0; i < textures.length; i ++ ) {
2548
+
2549
+ const { textureGPU } = this.get( textures[ i ] );
2550
+
2551
+ gl.framebufferRenderbuffer( gl.READ_FRAMEBUFFER, gl.COLOR_ATTACHMENT0 + i, gl.RENDERBUFFER, msaaRenderbuffers[ i ] );
2552
+ gl.framebufferTexture2D( gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0 + i, gl.TEXTURE_2D, textureGPU, 0 );
2553
+
2554
+ }
2555
+
2556
+ }
2557
+
2558
+ if ( this._supportsInvalidateFramebuffer === true ) {
2559
+
2560
+ gl.invalidateFramebuffer( gl.READ_FRAMEBUFFER, renderTargetContextData.invalidationArray );
2561
+
2562
+ }
2563
+
2564
+ } else if ( renderTarget.resolveDepthBuffer === false && renderTargetContextData.framebuffers ) {
2565
+
2566
+ const fb = renderTargetContextData.framebuffers[ renderContext.getCacheKey() ];
2567
+ state.bindFramebuffer( gl.DRAW_FRAMEBUFFER, fb );
2568
+ gl.invalidateFramebuffer( gl.DRAW_FRAMEBUFFER, renderTargetContextData.depthInvalidationArray );
2569
+
2570
+ }
2571
+
2572
+ }
2573
+
2574
+ }
2575
+
2576
+ /**
2577
+ * Returns `true` if the `WEBGL_multisampled_render_to_texture` extension
2578
+ * should be used when MSAA is enabled.
2579
+ *
2580
+ * @private
2581
+ * @param {RenderTarget} renderTarget - The render target that should be multisampled.
2582
+ * @return {boolean} Whether to use the `WEBGL_multisampled_render_to_texture` extension for MSAA or not.
2583
+ */
2584
+ _useMultisampledExtension( renderTarget ) {
2585
+
2586
+ if ( renderTarget.multiview === true ) {
2587
+
2588
+ return true;
2589
+
2590
+ }
2591
+
2592
+ return renderTarget.samples > 0 && this.extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true && renderTarget._autoAllocateDepthBuffer !== false;
2593
+
2594
+ }
2595
+
2596
+ /**
2597
+ * Frees internal resources.
2598
+ */
2599
+ dispose() {
2600
+
2601
+ if ( this.textureUtils !== null ) this.textureUtils.dispose();
2602
+
2603
+ const extension = this.extensions.get( 'WEBGL_lose_context' );
2604
+ if ( extension ) extension.loseContext();
2605
+
2606
+ this.renderer.domElement.removeEventListener( 'webglcontextlost', this._onContextLost );
2607
+
2608
+ }
2609
+
2610
+ }
2611
+
2612
+ export default WebGLBackend;