@lampdotdev/lamp 0.0.0-stage → 0.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (464) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +357 -2
  3. package/Resources/Devices/roku.json +410 -0
  4. package/Resources/Devices/xbox-one.json +367 -0
  5. package/Resources/GameKit/NOTICE.md +63 -0
  6. package/Resources/GameKit/apple/LampPage.swift +1646 -0
  7. package/Resources/GameKit/apple/LampPlayer.swift +46 -0
  8. package/Resources/GameKit/apple/LampWebApp.swift +63 -0
  9. package/Resources/GameKit/apple/LampWebGame.swift +87 -0
  10. package/Resources/GameKit/apple/Native.swift +12 -0
  11. package/Resources/GameKit/build.sh +55 -0
  12. package/Resources/GameKit/lamp_game.h +116 -0
  13. package/Resources/GameKit/lamp_host.h +19 -0
  14. package/Resources/GameKit/lamp_kit.cpp +61 -0
  15. package/Resources/GameKit/lamp_sound.cpp +455 -0
  16. package/Resources/GameKit/lamp_xbox.cpp +374 -0
  17. package/Resources/GameKit/libraries/HandmadeMath.h +3940 -0
  18. package/Resources/GameKit/libraries/cgltf.h +7240 -0
  19. package/Resources/GameKit/libraries/dr_mp3.h +5430 -0
  20. package/Resources/GameKit/libraries/dr_wav.h +9209 -0
  21. package/Resources/GameKit/libraries/sokol_debugtext.h +4754 -0
  22. package/Resources/GameKit/libraries/sokol_gfx.h +29558 -0
  23. package/Resources/GameKit/libraries/sokol_gl.h +4538 -0
  24. package/Resources/GameKit/libraries/sokol_log.h +335 -0
  25. package/Resources/GameKit/libraries/sokol_shape.h +1531 -0
  26. package/Resources/GameKit/libraries/stb_image.h +7988 -0
  27. package/Resources/GameKit/libraries/stb_vorbis.c +5584 -0
  28. package/Resources/GameKit/scaffold/Game/game.cpp +142 -0
  29. package/Resources/GameKit/scaffold/Game/scene.glsl +49 -0
  30. package/Resources/GameKit/scaffold-web/Web/game.js +31 -0
  31. package/Resources/GameKit/scaffold-web/Web/index.html +13 -0
  32. package/Resources/GameKit/scaffold-web/Web/making.js +33 -0
  33. package/Resources/GameKit/scaffold-web/Web/world.js +33 -0
  34. package/Resources/GameKit/web/lamp-game.js +3036 -0
  35. package/Resources/GameKit/web/lamp-phaser.js +128 -0
  36. package/Resources/WebHost/App.exe +0 -0
  37. package/Resources/WebHost/Microsoft.Web.WebView2.Core.dll +0 -0
  38. package/Resources/WebHost/WebView2-LICENSE.txt +27 -0
  39. package/Resources/WebHost/lamp_controllers.h +1506 -0
  40. package/Resources/WebHost/lamp_web_host.cpp +1173 -0
  41. package/Resources/WebLibraries/earlier.txt +318 -0
  42. package/Resources/WebLibraries/phaser/LICENSE.md +20 -0
  43. package/Resources/WebLibraries/phaser/NOTICE.md +2 -0
  44. package/Resources/WebLibraries/phaser/phaser.esm.min.js +1 -0
  45. package/Resources/WebLibraries/qrcode/LICENSE +21 -0
  46. package/Resources/WebLibraries/qrcode/NOTICE.md +4 -0
  47. package/Resources/WebLibraries/qrcode/qrcode.js +2297 -0
  48. package/Resources/WebLibraries/rapier/LICENSE +201 -0
  49. package/Resources/WebLibraries/rapier/NOTICE.md +3 -0
  50. package/Resources/WebLibraries/rapier/rapier.js +2 -0
  51. package/Resources/WebLibraries/three/LICENSE +21 -0
  52. package/Resources/WebLibraries/three/NOTICE.md +4 -0
  53. package/Resources/WebLibraries/three/addons/animation/AnimationClipCreator.js +168 -0
  54. package/Resources/WebLibraries/three/addons/animation/CCDIKSolver.js +607 -0
  55. package/Resources/WebLibraries/three/addons/controls/ArcballControls.js +3543 -0
  56. package/Resources/WebLibraries/three/addons/controls/DragControls.js +452 -0
  57. package/Resources/WebLibraries/three/addons/controls/FirstPersonControls.js +512 -0
  58. package/Resources/WebLibraries/three/addons/controls/FlyControls.js +384 -0
  59. package/Resources/WebLibraries/three/addons/controls/MapControls.js +116 -0
  60. package/Resources/WebLibraries/three/addons/controls/OrbitControls.js +1985 -0
  61. package/Resources/WebLibraries/three/addons/controls/PointerLockControls.js +264 -0
  62. package/Resources/WebLibraries/three/addons/controls/TrackballControls.js +1106 -0
  63. package/Resources/WebLibraries/three/addons/controls/TransformControls.js +2003 -0
  64. package/Resources/WebLibraries/three/addons/curves/CurveExtras.js +694 -0
  65. package/Resources/WebLibraries/three/addons/curves/NURBSCurve.js +169 -0
  66. package/Resources/WebLibraries/three/addons/curves/NURBSSurface.js +98 -0
  67. package/Resources/WebLibraries/three/addons/curves/NURBSUtils.js +532 -0
  68. package/Resources/WebLibraries/three/addons/curves/NURBSVolume.js +82 -0
  69. package/Resources/WebLibraries/three/addons/effects/AnaglyphEffect.js +274 -0
  70. package/Resources/WebLibraries/three/addons/effects/AsciiEffect.js +323 -0
  71. package/Resources/WebLibraries/three/addons/effects/OutlineEffect.js +489 -0
  72. package/Resources/WebLibraries/three/addons/effects/ParallaxBarrierEffect.js +155 -0
  73. package/Resources/WebLibraries/three/addons/effects/StereoEffect.js +91 -0
  74. package/Resources/WebLibraries/three/addons/environments/ColorEnvironment.js +59 -0
  75. package/Resources/WebLibraries/three/addons/environments/DebugEnvironment.js +102 -0
  76. package/Resources/WebLibraries/three/addons/environments/RoomEnvironment.js +185 -0
  77. package/Resources/WebLibraries/three/addons/geometries/BoxLineGeometry.js +92 -0
  78. package/Resources/WebLibraries/three/addons/geometries/ConvexGeometry.js +72 -0
  79. package/Resources/WebLibraries/three/addons/geometries/DecalGeometry.js +420 -0
  80. package/Resources/WebLibraries/three/addons/geometries/LoftGeometry.js +355 -0
  81. package/Resources/WebLibraries/three/addons/geometries/ParametricFunctions.js +100 -0
  82. package/Resources/WebLibraries/three/addons/geometries/ParametricGeometry.js +172 -0
  83. package/Resources/WebLibraries/three/addons/geometries/RoundedBoxGeometry.js +216 -0
  84. package/Resources/WebLibraries/three/addons/geometries/TeapotGeometry.js +689 -0
  85. package/Resources/WebLibraries/three/addons/geometries/TextGeometry.js +102 -0
  86. package/Resources/WebLibraries/three/addons/helpers/AnimationPathHelper.js +302 -0
  87. package/Resources/WebLibraries/three/addons/helpers/LightProbeGridHelper.js +166 -0
  88. package/Resources/WebLibraries/three/addons/helpers/LightProbeGridHelperWebGL.js +221 -0
  89. package/Resources/WebLibraries/three/addons/helpers/LightProbeHelper.js +166 -0
  90. package/Resources/WebLibraries/three/addons/helpers/LightProbeHelperGPU.js +102 -0
  91. package/Resources/WebLibraries/three/addons/helpers/OctreeHelper.js +109 -0
  92. package/Resources/WebLibraries/three/addons/helpers/PositionalAudioHelper.js +169 -0
  93. package/Resources/WebLibraries/three/addons/helpers/RapierHelper.js +59 -0
  94. package/Resources/WebLibraries/three/addons/helpers/RectAreaLightHelper.js +118 -0
  95. package/Resources/WebLibraries/three/addons/helpers/TextureHelper.js +265 -0
  96. package/Resources/WebLibraries/three/addons/helpers/TextureHelperGPU.js +214 -0
  97. package/Resources/WebLibraries/three/addons/helpers/VertexNormalsHelper.js +155 -0
  98. package/Resources/WebLibraries/three/addons/helpers/VertexTangentsHelper.js +133 -0
  99. package/Resources/WebLibraries/three/addons/helpers/ViewHelper.js +529 -0
  100. package/Resources/WebLibraries/three/addons/interactive/HTMLMesh.js +617 -0
  101. package/Resources/WebLibraries/three/addons/interactive/InteractiveGroup.js +224 -0
  102. package/Resources/WebLibraries/three/addons/interactive/SelectionBox.js +324 -0
  103. package/Resources/WebLibraries/three/addons/interactive/SelectionHelper.js +150 -0
  104. package/Resources/WebLibraries/three/addons/libs/fflate.module.js +2699 -0
  105. package/Resources/WebLibraries/three/addons/libs/lil-gui.module.min.js +8 -0
  106. package/Resources/WebLibraries/three/addons/libs/meshopt_decoder.module.js +196 -0
  107. package/Resources/WebLibraries/three/addons/libs/potpack.module.js +125 -0
  108. package/Resources/WebLibraries/three/addons/libs/stats.module.js +167 -0
  109. package/Resources/WebLibraries/three/addons/libs/tween.module.js +876 -0
  110. package/Resources/WebLibraries/three/addons/lighting/ClusteredLighting.js +153 -0
  111. package/Resources/WebLibraries/three/addons/lighting/DynamicLighting.js +82 -0
  112. package/Resources/WebLibraries/three/addons/lighting/LightMapper.js +295 -0
  113. package/Resources/WebLibraries/three/addons/lighting/LightProbeGrid.js +923 -0
  114. package/Resources/WebLibraries/three/addons/lighting/LightProbeGridUtils.js +107 -0
  115. package/Resources/WebLibraries/three/addons/lighting/LightProbeGridWebGL.js +846 -0
  116. package/Resources/WebLibraries/three/addons/lighting/vxgi/VXGIConeTracer.js +243 -0
  117. package/Resources/WebLibraries/three/addons/lighting/vxgi/VXGIIrradiance.js +43 -0
  118. package/Resources/WebLibraries/three/addons/lighting/vxgi/VXGINode.js +617 -0
  119. package/Resources/WebLibraries/three/addons/lighting/vxgi/VXGISceneCollector.js +793 -0
  120. package/Resources/WebLibraries/three/addons/lighting/vxgi/VXGIVolume.js +1440 -0
  121. package/Resources/WebLibraries/three/addons/lights/LightProbeGenerator.js +337 -0
  122. package/Resources/WebLibraries/three/addons/lights/RectAreaLightTexturesLib.js +127 -0
  123. package/Resources/WebLibraries/three/addons/lights/RectAreaLightUniformsLib.js +40 -0
  124. package/Resources/WebLibraries/three/addons/lights/SunLight.js +100 -0
  125. package/Resources/WebLibraries/three/addons/lights/SunLightNode.js +56 -0
  126. package/Resources/WebLibraries/three/addons/lights/SunLightShadow.js +319 -0
  127. package/Resources/WebLibraries/three/addons/lights/SunShadowNode.js +312 -0
  128. package/Resources/WebLibraries/three/addons/lines/Line2.js +56 -0
  129. package/Resources/WebLibraries/three/addons/lines/LineGeometry.js +157 -0
  130. package/Resources/WebLibraries/three/addons/lines/LineMaterial.js +742 -0
  131. package/Resources/WebLibraries/three/addons/lines/LineSegments2.js +434 -0
  132. package/Resources/WebLibraries/three/addons/lines/LineSegmentsGeometry.js +298 -0
  133. package/Resources/WebLibraries/three/addons/lines/Wireframe.js +108 -0
  134. package/Resources/WebLibraries/three/addons/lines/WireframeGeometry2.js +49 -0
  135. package/Resources/WebLibraries/three/addons/lines/webgpu/Line2.js +46 -0
  136. package/Resources/WebLibraries/three/addons/lines/webgpu/LineSegments2.js +419 -0
  137. package/Resources/WebLibraries/three/addons/lines/webgpu/Wireframe.js +86 -0
  138. package/Resources/WebLibraries/three/addons/loaders/EXRLoader.js +3411 -0
  139. package/Resources/WebLibraries/three/addons/loaders/FBXLoader.js +4660 -0
  140. package/Resources/WebLibraries/three/addons/loaders/FontLoader.js +262 -0
  141. package/Resources/WebLibraries/three/addons/loaders/GLTFLoader.js +5006 -0
  142. package/Resources/WebLibraries/three/addons/loaders/HDRLoader.js +463 -0
  143. package/Resources/WebLibraries/three/addons/loaders/MTLLoader.js +601 -0
  144. package/Resources/WebLibraries/three/addons/loaders/OBJLoader.js +961 -0
  145. package/Resources/WebLibraries/three/addons/loaders/PLYLoader.js +992 -0
  146. package/Resources/WebLibraries/three/addons/loaders/RGBELoader.js +18 -0
  147. package/Resources/WebLibraries/three/addons/loaders/STLLoader.js +423 -0
  148. package/Resources/WebLibraries/three/addons/loaders/SVGLoader.js +3297 -0
  149. package/Resources/WebLibraries/three/addons/loaders/TGALoader.js +539 -0
  150. package/Resources/WebLibraries/three/addons/loaders/UltraHDRLoader.js +757 -0
  151. package/Resources/WebLibraries/three/addons/math/Capsule.js +159 -0
  152. package/Resources/WebLibraries/three/addons/math/ColorConverter.js +62 -0
  153. package/Resources/WebLibraries/three/addons/math/ColorSpaces.js +147 -0
  154. package/Resources/WebLibraries/three/addons/math/ConvexHull.js +1695 -0
  155. package/Resources/WebLibraries/three/addons/math/ImprovedNoise.js +88 -0
  156. package/Resources/WebLibraries/three/addons/math/Lut.js +317 -0
  157. package/Resources/WebLibraries/three/addons/math/MeshSurfaceSampler.js +315 -0
  158. package/Resources/WebLibraries/three/addons/math/OBB.js +535 -0
  159. package/Resources/WebLibraries/three/addons/math/Octree.js +825 -0
  160. package/Resources/WebLibraries/three/addons/math/SimplexNoise.js +470 -0
  161. package/Resources/WebLibraries/three/addons/misc/ConvexObjectBreaker.js +539 -0
  162. package/Resources/WebLibraries/three/addons/misc/GPUComputationRenderer.js +508 -0
  163. package/Resources/WebLibraries/three/addons/misc/Gyroscope.js +78 -0
  164. package/Resources/WebLibraries/three/addons/misc/MorphAnimMesh.js +119 -0
  165. package/Resources/WebLibraries/three/addons/misc/MorphBlendMesh.js +425 -0
  166. package/Resources/WebLibraries/three/addons/misc/ProgressiveLightMap.js +370 -0
  167. package/Resources/WebLibraries/three/addons/misc/ProgressiveLightMapGPU.js +322 -0
  168. package/Resources/WebLibraries/three/addons/misc/RollerCoaster.js +661 -0
  169. package/Resources/WebLibraries/three/addons/misc/Sculptor.js +1679 -0
  170. package/Resources/WebLibraries/three/addons/misc/SculptorMesh.js +1504 -0
  171. package/Resources/WebLibraries/three/addons/misc/SculptorTools.js +1180 -0
  172. package/Resources/WebLibraries/three/addons/misc/SculptorUtils.js +345 -0
  173. package/Resources/WebLibraries/three/addons/misc/TileCreasedNormalsPlugin.js +270 -0
  174. package/Resources/WebLibraries/three/addons/misc/TubePainter.js +611 -0
  175. package/Resources/WebLibraries/three/addons/misc/Volume.js +520 -0
  176. package/Resources/WebLibraries/three/addons/misc/VolumeSlice.js +275 -0
  177. package/Resources/WebLibraries/three/addons/modifiers/CurveModifier.js +374 -0
  178. package/Resources/WebLibraries/three/addons/modifiers/CurveModifierGPU.js +256 -0
  179. package/Resources/WebLibraries/three/addons/modifiers/EdgeSplitModifier.js +299 -0
  180. package/Resources/WebLibraries/three/addons/modifiers/TessellateModifier.js +340 -0
  181. package/Resources/WebLibraries/three/addons/objects/GroundedSkybox.js +69 -0
  182. package/Resources/WebLibraries/three/addons/objects/Lensflare.js +489 -0
  183. package/Resources/WebLibraries/three/addons/objects/LensflareMesh.js +376 -0
  184. package/Resources/WebLibraries/three/addons/objects/MarchingCubes.js +1261 -0
  185. package/Resources/WebLibraries/three/addons/objects/Reflector.js +390 -0
  186. package/Resources/WebLibraries/three/addons/objects/ReflectorForSSRPass.js +393 -0
  187. package/Resources/WebLibraries/three/addons/objects/Refractor.js +389 -0
  188. package/Resources/WebLibraries/three/addons/objects/ShadowMesh.js +130 -0
  189. package/Resources/WebLibraries/three/addons/objects/Sky.js +342 -0
  190. package/Resources/WebLibraries/three/addons/objects/SkyMesh.js +403 -0
  191. package/Resources/WebLibraries/three/addons/objects/Water.js +374 -0
  192. package/Resources/WebLibraries/three/addons/objects/Water2.js +403 -0
  193. package/Resources/WebLibraries/three/addons/objects/Water2Mesh.js +199 -0
  194. package/Resources/WebLibraries/three/addons/objects/WaterMesh.js +194 -0
  195. package/Resources/WebLibraries/three/addons/postprocessing/AfterimagePass.js +187 -0
  196. package/Resources/WebLibraries/three/addons/postprocessing/BloomPass.js +274 -0
  197. package/Resources/WebLibraries/three/addons/postprocessing/BokehPass.js +218 -0
  198. package/Resources/WebLibraries/three/addons/postprocessing/ClearPass.js +97 -0
  199. package/Resources/WebLibraries/three/addons/postprocessing/CubeTexturePass.js +146 -0
  200. package/Resources/WebLibraries/three/addons/postprocessing/DotScreenPass.js +114 -0
  201. package/Resources/WebLibraries/three/addons/postprocessing/EffectComposer.js +365 -0
  202. package/Resources/WebLibraries/three/addons/postprocessing/FXAAPass.js +40 -0
  203. package/Resources/WebLibraries/three/addons/postprocessing/FilmPass.js +113 -0
  204. package/Resources/WebLibraries/three/addons/postprocessing/GTAOPass.js +735 -0
  205. package/Resources/WebLibraries/three/addons/postprocessing/GlitchPass.js +177 -0
  206. package/Resources/WebLibraries/three/addons/postprocessing/HalftonePass.js +134 -0
  207. package/Resources/WebLibraries/three/addons/postprocessing/LUTPass.js +138 -0
  208. package/Resources/WebLibraries/three/addons/postprocessing/MaskPass.js +195 -0
  209. package/Resources/WebLibraries/three/addons/postprocessing/OutlinePass.js +776 -0
  210. package/Resources/WebLibraries/three/addons/postprocessing/OutputPass.js +148 -0
  211. package/Resources/WebLibraries/three/addons/postprocessing/Pass.js +191 -0
  212. package/Resources/WebLibraries/three/addons/postprocessing/RenderPass.js +193 -0
  213. package/Resources/WebLibraries/three/addons/postprocessing/RenderPixelatedPass.js +314 -0
  214. package/Resources/WebLibraries/three/addons/postprocessing/RenderTransitionPass.js +267 -0
  215. package/Resources/WebLibraries/three/addons/postprocessing/SAOPass.js +407 -0
  216. package/Resources/WebLibraries/three/addons/postprocessing/SMAAPass.js +230 -0
  217. package/Resources/WebLibraries/three/addons/postprocessing/SSAARenderPass.js +313 -0
  218. package/Resources/WebLibraries/three/addons/postprocessing/SSAOPass.js +527 -0
  219. package/Resources/WebLibraries/three/addons/postprocessing/SSRPass.js +858 -0
  220. package/Resources/WebLibraries/three/addons/postprocessing/SavePass.js +132 -0
  221. package/Resources/WebLibraries/three/addons/postprocessing/ShaderPass.js +135 -0
  222. package/Resources/WebLibraries/three/addons/postprocessing/TAARenderPass.js +243 -0
  223. package/Resources/WebLibraries/three/addons/postprocessing/TexturePass.js +131 -0
  224. package/Resources/WebLibraries/three/addons/postprocessing/UnrealBloomPass.js +541 -0
  225. package/Resources/WebLibraries/three/addons/shaders/ACESFilmicToneMappingShader.js +96 -0
  226. package/Resources/WebLibraries/three/addons/shaders/AfterimageShader.js +63 -0
  227. package/Resources/WebLibraries/three/addons/shaders/BasicShader.js +36 -0
  228. package/Resources/WebLibraries/three/addons/shaders/BleachBypassShader.js +68 -0
  229. package/Resources/WebLibraries/three/addons/shaders/BlendShader.js +56 -0
  230. package/Resources/WebLibraries/three/addons/shaders/BokehShader.js +151 -0
  231. package/Resources/WebLibraries/three/addons/shaders/BokehShader2.js +404 -0
  232. package/Resources/WebLibraries/three/addons/shaders/BrightnessContrastShader.js +62 -0
  233. package/Resources/WebLibraries/three/addons/shaders/ColorCorrectionShader.js +59 -0
  234. package/Resources/WebLibraries/three/addons/shaders/ColorifyShader.js +57 -0
  235. package/Resources/WebLibraries/three/addons/shaders/ConvolutionShader.js +74 -0
  236. package/Resources/WebLibraries/three/addons/shaders/CopyShader.js +52 -0
  237. package/Resources/WebLibraries/three/addons/shaders/DOFMipMapShader.js +63 -0
  238. package/Resources/WebLibraries/three/addons/shaders/DepthLimitedBlurShader.js +183 -0
  239. package/Resources/WebLibraries/three/addons/shaders/DigitalGlitch.js +104 -0
  240. package/Resources/WebLibraries/three/addons/shaders/DotScreenShader.js +75 -0
  241. package/Resources/WebLibraries/three/addons/shaders/ExposureShader.js +51 -0
  242. package/Resources/WebLibraries/three/addons/shaders/FXAAShader.js +298 -0
  243. package/Resources/WebLibraries/three/addons/shaders/FilmShader.js +73 -0
  244. package/Resources/WebLibraries/three/addons/shaders/FocusShader.js +94 -0
  245. package/Resources/WebLibraries/three/addons/shaders/FreiChenShader.js +103 -0
  246. package/Resources/WebLibraries/three/addons/shaders/GTAOShader.js +437 -0
  247. package/Resources/WebLibraries/three/addons/shaders/GammaCorrectionShader.js +52 -0
  248. package/Resources/WebLibraries/three/addons/shaders/HalftoneShader.js +332 -0
  249. package/Resources/WebLibraries/three/addons/shaders/HorizontalBlurShader.js +68 -0
  250. package/Resources/WebLibraries/three/addons/shaders/HorizontalTiltShiftShader.js +70 -0
  251. package/Resources/WebLibraries/three/addons/shaders/HueSaturationShader.js +74 -0
  252. package/Resources/WebLibraries/three/addons/shaders/KaleidoShader.js +65 -0
  253. package/Resources/WebLibraries/three/addons/shaders/LuminosityHighPassShader.js +68 -0
  254. package/Resources/WebLibraries/three/addons/shaders/LuminosityShader.js +54 -0
  255. package/Resources/WebLibraries/three/addons/shaders/MirrorShader.js +62 -0
  256. package/Resources/WebLibraries/three/addons/shaders/NormalMapShader.js +60 -0
  257. package/Resources/WebLibraries/three/addons/shaders/OutputShader.js +103 -0
  258. package/Resources/WebLibraries/three/addons/shaders/PoissonDenoiseShader.js +230 -0
  259. package/Resources/WebLibraries/three/addons/shaders/RGBShiftShader.js +61 -0
  260. package/Resources/WebLibraries/three/addons/shaders/SAOShader.js +201 -0
  261. package/Resources/WebLibraries/three/addons/shaders/SMAAShader.js +489 -0
  262. package/Resources/WebLibraries/three/addons/shaders/SSAOShader.js +331 -0
  263. package/Resources/WebLibraries/three/addons/shaders/SSRShader.js +396 -0
  264. package/Resources/WebLibraries/three/addons/shaders/SepiaShader.js +57 -0
  265. package/Resources/WebLibraries/three/addons/shaders/SobelOperatorShader.js +98 -0
  266. package/Resources/WebLibraries/three/addons/shaders/SubsurfaceScatteringShader.js +95 -0
  267. package/Resources/WebLibraries/three/addons/shaders/TechnicolorShader.js +51 -0
  268. package/Resources/WebLibraries/three/addons/shaders/ToonShader.js +349 -0
  269. package/Resources/WebLibraries/three/addons/shaders/TriangleBlurShader.js +79 -0
  270. package/Resources/WebLibraries/three/addons/shaders/UnpackDepthRGBAShader.js +60 -0
  271. package/Resources/WebLibraries/three/addons/shaders/VelocityShader.js +137 -0
  272. package/Resources/WebLibraries/three/addons/shaders/VerticalBlurShader.js +66 -0
  273. package/Resources/WebLibraries/three/addons/shaders/VerticalTiltShiftShader.js +70 -0
  274. package/Resources/WebLibraries/three/addons/shaders/VignetteShader.js +56 -0
  275. package/Resources/WebLibraries/three/addons/shaders/VolumeShader.js +285 -0
  276. package/Resources/WebLibraries/three/addons/shaders/WaterRefractionShader.js +106 -0
  277. package/Resources/WebLibraries/three/addons/textures/FlakesTexture.js +54 -0
  278. package/Resources/WebLibraries/three/addons/tsl/WebGLNodesHandler.js +607 -0
  279. package/Resources/WebLibraries/three/addons/tsl/display/AfterImageNode.js +256 -0
  280. package/Resources/WebLibraries/three/addons/tsl/display/AnaglyphPassNode.js +550 -0
  281. package/Resources/WebLibraries/three/addons/tsl/display/BilateralBlurNode.js +377 -0
  282. package/Resources/WebLibraries/three/addons/tsl/display/BleachBypass.js +33 -0
  283. package/Resources/WebLibraries/three/addons/tsl/display/BloomNode.js +599 -0
  284. package/Resources/WebLibraries/three/addons/tsl/display/CRT.js +150 -0
  285. package/Resources/WebLibraries/three/addons/tsl/display/ChromaticAberrationNode.js +163 -0
  286. package/Resources/WebLibraries/three/addons/tsl/display/DenoiseNode.js +354 -0
  287. package/Resources/WebLibraries/three/addons/tsl/display/DepthOfFieldNode.js +572 -0
  288. package/Resources/WebLibraries/three/addons/tsl/display/DotScreenNode.js +104 -0
  289. package/Resources/WebLibraries/three/addons/tsl/display/FSR1Node.js +481 -0
  290. package/Resources/WebLibraries/three/addons/tsl/display/FXAANode.js +357 -0
  291. package/Resources/WebLibraries/three/addons/tsl/display/FilmNode.js +101 -0
  292. package/Resources/WebLibraries/three/addons/tsl/display/GTAONode.js +727 -0
  293. package/Resources/WebLibraries/three/addons/tsl/display/GaussianBlurNode.js +412 -0
  294. package/Resources/WebLibraries/three/addons/tsl/display/GodraysNode.js +604 -0
  295. package/Resources/WebLibraries/three/addons/tsl/display/ImportanceSampledEnvironment.js +564 -0
  296. package/Resources/WebLibraries/three/addons/tsl/display/LensflareNode.js +282 -0
  297. package/Resources/WebLibraries/three/addons/tsl/display/Lut3DNode.js +109 -0
  298. package/Resources/WebLibraries/three/addons/tsl/display/MotionBlur.js +33 -0
  299. package/Resources/WebLibraries/three/addons/tsl/display/OITPassNode.js +341 -0
  300. package/Resources/WebLibraries/three/addons/tsl/display/OutlineNode.js +916 -0
  301. package/Resources/WebLibraries/three/addons/tsl/display/ParallaxBarrierPassNode.js +90 -0
  302. package/Resources/WebLibraries/three/addons/tsl/display/PixelationPassNode.js +227 -0
  303. package/Resources/WebLibraries/three/addons/tsl/display/RGBShiftNode.js +96 -0
  304. package/Resources/WebLibraries/three/addons/tsl/display/RecurrentDenoiseNode.js +812 -0
  305. package/Resources/WebLibraries/three/addons/tsl/display/RetroPassNode.js +263 -0
  306. package/Resources/WebLibraries/three/addons/tsl/display/SMAANode.js +729 -0
  307. package/Resources/WebLibraries/three/addons/tsl/display/SSAAPassNode.js +344 -0
  308. package/Resources/WebLibraries/three/addons/tsl/display/SSAONode.js +422 -0
  309. package/Resources/WebLibraries/three/addons/tsl/display/SSGINode.js +698 -0
  310. package/Resources/WebLibraries/three/addons/tsl/display/SSRNode.js +1430 -0
  311. package/Resources/WebLibraries/three/addons/tsl/display/SSSNode.js +479 -0
  312. package/Resources/WebLibraries/three/addons/tsl/display/Sepia.js +24 -0
  313. package/Resources/WebLibraries/three/addons/tsl/display/Shape.js +29 -0
  314. package/Resources/WebLibraries/three/addons/tsl/display/SharpenNode.js +284 -0
  315. package/Resources/WebLibraries/three/addons/tsl/display/SobelOperatorNode.js +168 -0
  316. package/Resources/WebLibraries/three/addons/tsl/display/StereoCompositePassNode.js +190 -0
  317. package/Resources/WebLibraries/three/addons/tsl/display/StereoPassNode.js +117 -0
  318. package/Resources/WebLibraries/three/addons/tsl/display/TAAUNode.js +700 -0
  319. package/Resources/WebLibraries/three/addons/tsl/display/TRAANode.js +609 -0
  320. package/Resources/WebLibraries/three/addons/tsl/display/TemporalReprojectNode.js +1024 -0
  321. package/Resources/WebLibraries/three/addons/tsl/display/TransitionNode.js +141 -0
  322. package/Resources/WebLibraries/three/addons/tsl/display/boxBlur.js +65 -0
  323. package/Resources/WebLibraries/three/addons/tsl/display/depthAwareBlend.js +80 -0
  324. package/Resources/WebLibraries/three/addons/tsl/display/depthAwareBlur.js +63 -0
  325. package/Resources/WebLibraries/three/addons/tsl/display/hashBlur.js +55 -0
  326. package/Resources/WebLibraries/three/addons/tsl/display/lensDirt.js +30 -0
  327. package/Resources/WebLibraries/three/addons/tsl/display/radialBlur.js +68 -0
  328. package/Resources/WebLibraries/three/addons/tsl/lighting/ClusteredLightsNode.js +994 -0
  329. package/Resources/WebLibraries/three/addons/tsl/lighting/DynamicLightsNode.js +201 -0
  330. package/Resources/WebLibraries/three/addons/tsl/lighting/LightProbeGridNode.js +183 -0
  331. package/Resources/WebLibraries/three/addons/tsl/lighting/data/AmbientLightDataNode.js +67 -0
  332. package/Resources/WebLibraries/three/addons/tsl/lighting/data/DirectionalLightDataNode.js +117 -0
  333. package/Resources/WebLibraries/three/addons/tsl/lighting/data/HemisphereLightDataNode.js +105 -0
  334. package/Resources/WebLibraries/three/addons/tsl/lighting/data/PointLightDataNode.js +140 -0
  335. package/Resources/WebLibraries/three/addons/tsl/lighting/data/SpotLightDataNode.js +167 -0
  336. package/Resources/WebLibraries/three/addons/tsl/math/Bayer.js +84 -0
  337. package/Resources/WebLibraries/three/addons/tsl/math/curlNoise.js +107 -0
  338. package/Resources/WebLibraries/three/addons/tsl/math/voronoiNoise.js +112 -0
  339. package/Resources/WebLibraries/three/addons/tsl/shadows/TileShadowNode.js +542 -0
  340. package/Resources/WebLibraries/three/addons/tsl/shadows/TileShadowNodeHelper.js +212 -0
  341. package/Resources/WebLibraries/three/addons/tsl/utils/GroundedSkybox.js +62 -0
  342. package/Resources/WebLibraries/three/addons/tsl/utils/RNoise.js +51 -0
  343. package/Resources/WebLibraries/three/addons/tsl/utils/Raymarching.js +70 -0
  344. package/Resources/WebLibraries/three/addons/tsl/utils/SoftParticles.js +53 -0
  345. package/Resources/WebLibraries/three/addons/tsl/utils/SpecularHelpers.js +302 -0
  346. package/Resources/WebLibraries/three/addons/tsl/utils/TAAUtils.js +184 -0
  347. package/Resources/WebLibraries/three/addons/utils/BufferGeometryUtils.js +1523 -0
  348. package/Resources/WebLibraries/three/addons/utils/CameraUtils.js +82 -0
  349. package/Resources/WebLibraries/three/addons/utils/ColorUtils.js +76 -0
  350. package/Resources/WebLibraries/three/addons/utils/GaussianSplatUtils.js +229 -0
  351. package/Resources/WebLibraries/three/addons/utils/GeometryCompressionUtils.js +547 -0
  352. package/Resources/WebLibraries/three/addons/utils/GeometryUtils.js +226 -0
  353. package/Resources/WebLibraries/three/addons/utils/LDrawUtils.js +211 -0
  354. package/Resources/WebLibraries/three/addons/utils/SceneOptimizer.js +459 -0
  355. package/Resources/WebLibraries/three/addons/utils/SceneUtils.js +363 -0
  356. package/Resources/WebLibraries/three/addons/utils/ShadowMapViewer.js +244 -0
  357. package/Resources/WebLibraries/three/addons/utils/ShadowMapViewerGPU.js +233 -0
  358. package/Resources/WebLibraries/three/addons/utils/SkeletonUtils.js +496 -0
  359. package/Resources/WebLibraries/three/addons/utils/SortUtils.js +175 -0
  360. package/Resources/WebLibraries/three/addons/utils/UVsDebug.js +173 -0
  361. package/Resources/WebLibraries/three/addons/utils/WebGLTextureUtils.js +115 -0
  362. package/Resources/WebLibraries/three/addons/utils/WebGPUTextureUtils.js +81 -0
  363. package/Resources/WebLibraries/three/addons/utils/WorkerPool.js +167 -0
  364. package/Resources/WebLibraries/three/addons/utils/unwrapUVs.js +865 -0
  365. package/Resources/WebLibraries/three/three.core.js +61162 -0
  366. package/Resources/WebLibraries/three/three.module.js +19537 -0
  367. package/Resources/WebLibraries/three/three.tsl.js +41903 -0
  368. package/Resources/WebLibraries/three/three.webgpu.js +53714 -0
  369. package/Resources/skills/2d-game/SKILL.md +305 -0
  370. package/Resources/skills/3d-game/SKILL.md +274 -0
  371. package/Resources/skills/accounts/SKILL.md +41 -0
  372. package/Resources/skills/android-design/SKILL.md +159 -0
  373. package/Resources/skills/app-ai/SKILL.md +154 -0
  374. package/Resources/skills/app-intents/SKILL.md +31 -0
  375. package/Resources/skills/app-kinds/SKILL.md +122 -0
  376. package/Resources/skills/apple-watch/SKILL.md +43 -0
  377. package/Resources/skills/assets/SKILL.md +183 -0
  378. package/Resources/skills/building-blocks/SKILL.md +97 -0
  379. package/Resources/skills/device-control/SKILL.md +56 -0
  380. package/Resources/skills/device-integrations/SKILL.md +278 -0
  381. package/Resources/skills/finder-files/SKILL.md +19 -0
  382. package/Resources/skills/game/SKILL.md +414 -0
  383. package/Resources/skills/game-3d/SKILL.md +12 -0
  384. package/Resources/skills/game-art/SKILL.md +11 -0
  385. package/Resources/skills/game-feel/SKILL.md +13 -0
  386. package/Resources/skills/game-levels/SKILL.md +12 -0
  387. package/Resources/skills/game-live/SKILL.md +12 -0
  388. package/Resources/skills/game-physics/SKILL.md +13 -0
  389. package/Resources/skills/game-playtest/SKILL.md +26 -0
  390. package/Resources/skills/game-ui/SKILL.md +278 -0
  391. package/Resources/skills/github-projects/SKILL.md +59 -0
  392. package/Resources/skills/icloud-sync/SKILL.md +30 -0
  393. package/Resources/skills/iphone-hardware/SKILL.md +57 -0
  394. package/Resources/skills/iphone-widgets/SKILL.md +53 -0
  395. package/Resources/skills/lg-developer-mode/SKILL.md +152 -0
  396. package/Resources/skills/mac-widgets/SKILL.md +60 -0
  397. package/Resources/skills/maps/SKILL.md +8 -0
  398. package/Resources/skills/menu-bar/SKILL.md +36 -0
  399. package/Resources/skills/more-apps/SKILL.md +53 -0
  400. package/Resources/skills/phone-controllers/SKILL.md +79 -0
  401. package/Resources/skills/phone-pages/SKILL.md +173 -0
  402. package/Resources/skills/roku-developer-mode/SKILL.md +106 -0
  403. package/Resources/skills/scene-3d/SKILL.md +27 -0
  404. package/Resources/skills/scripting/SKILL.md +17 -0
  405. package/Resources/skills/share-extension/SKILL.md +22 -0
  406. package/Resources/skills/tv-design/SKILL.md +72 -0
  407. package/Resources/skills/web-app/SKILL.md +136 -0
  408. package/Resources/skills/web-game/SKILL.md +95 -0
  409. package/Resources/skills/web-or-native/SKILL.md +103 -0
  410. package/Resources/skills/wish-links/SKILL.md +156 -0
  411. package/THIRD_PARTY_NOTICES.md +170 -0
  412. package/cli/android.mjs +941 -0
  413. package/cli/browser.mjs +268 -0
  414. package/cli/calls.mjs +390 -0
  415. package/cli/dev.mjs +773 -0
  416. package/cli/devices.mjs +984 -0
  417. package/cli/lamp.mjs +1016 -0
  418. package/cli/lampapp.mjs +332 -0
  419. package/cli/lamps/android-host/LampPageGateway.kt +345 -0
  420. package/cli/lamps/android-host/app/build.gradle.kts +40 -0
  421. package/cli/lamps/android-host/build.gradle.kts +4 -0
  422. package/cli/lamps/android-host/game/AndroidManifest.xml +33 -0
  423. package/cli/lamps/android-host/game/MainActivity.kt +173 -0
  424. package/cli/lamps/android-host/gradle/libs.versions.toml +39 -0
  425. package/cli/lamps/android-host/gradle.properties +8 -0
  426. package/cli/lamps/android-host/page/AndroidManifest.xml +35 -0
  427. package/cli/lamps/android-host/page/MainActivity.kt +193 -0
  428. package/cli/lamps/android-host/settings.gradle.kts +30 -0
  429. package/cli/lamps/android-host/tools.json +43 -0
  430. package/cli/lamps/lamp-controllers.js +2 -0
  431. package/cli/lamps/lamp-for-games.js +6863 -0
  432. package/cli/lamps/lamp.js +7023 -0
  433. package/cli/lamps/mac-starter/.lamp/meta.json +1 -0
  434. package/cli/lamps/mac-starter/APP.md +12 -0
  435. package/cli/lamps/mac-starter/Package.swift +8 -0
  436. package/cli/lamps/mac-starter/Sources/App.swift +11 -0
  437. package/cli/lamps/mac-starter/Sources/ContentView.swift +17 -0
  438. package/cli/lamps/mac-starter/Sources/LampSupport.swift +18097 -0
  439. package/cli/lamps/mac-starter/build.sh +336 -0
  440. package/cli/lamps/mac-starter/gitignore +3 -0
  441. package/cli/lamps/mac-starter/lamp-starter.json +6 -0
  442. package/cli/lamps/web-starter/APP.md +8 -0
  443. package/cli/lamps/web-starter/app.js +1 -0
  444. package/cli/lamps/web-starter/index.html +17 -0
  445. package/cli/lamps/web-starter/lamp-starter.json +5 -0
  446. package/cli/lamps/web-starter/lamp.js +7023 -0
  447. package/cli/lamps/web-starter/style.css +25 -0
  448. package/cli/link.mjs +138 -0
  449. package/cli/mac.mjs +621 -0
  450. package/cli/mdns.mjs +205 -0
  451. package/cli/msix.mjs +413 -0
  452. package/cli/network.mjs +209 -0
  453. package/cli/outside.mjs +140 -0
  454. package/cli/page.js +165 -0
  455. package/cli/place.mjs +298 -0
  456. package/cli/png.mjs +184 -0
  457. package/cli/share.mjs +202 -0
  458. package/cli/skill/SKILL.md +255 -0
  459. package/cli/skills.mjs +71 -0
  460. package/cli/state.mjs +173 -0
  461. package/cli/update.mjs +57 -0
  462. package/package.json +20 -4
  463. package/site/lib/quota.js +59 -0
  464. package/site/lib/shared-wishes.js +996 -0
@@ -0,0 +1,846 @@
1
+ import {
2
+ Box3,
3
+ CubeCamera,
4
+ Data3DTexture,
5
+ FloatType,
6
+ HalfFloatType,
7
+ Light,
8
+ LinearFilter,
9
+ MathUtils,
10
+ Mesh,
11
+ NearestFilter,
12
+ OrthographicCamera,
13
+ PlaneGeometry,
14
+ RGBAFormat,
15
+ Scene,
16
+ ShaderMaterial,
17
+ Vector3,
18
+ WebGL3DRenderTarget,
19
+ WebGLCubeRenderTarget,
20
+ WebGLRenderTarget
21
+ } from 'three';
22
+
23
+ import { replaceSunLights, restoreSunLights } from './LightProbeGridUtils.js';
24
+
25
+ // Shared fullscreen-quad scene / camera
26
+ let _scene = null;
27
+ let _camera = null;
28
+ let _mesh = null;
29
+
30
+ // SH projection material (depends on cubemapSize)
31
+ let _shMaterial = null;
32
+ let _lastCubemapSize = 0;
33
+
34
+ // Repack materials (one per output sub-volume / texture index)
35
+ let _repackMaterials = null;
36
+
37
+ // Cached bake resources
38
+ let _cubeRenderTarget = null;
39
+ let _cubeCamera = null;
40
+ let _cachedCubemapSize = 0;
41
+ let _cachedNear = 0;
42
+ let _cachedFar = 0;
43
+
44
+ // Cached batch render target
45
+ let _batchTarget = null;
46
+ let _batchTargetProbes = 0;
47
+
48
+ // Reusable temp objects
49
+ const _position = /*@__PURE__*/ new Vector3();
50
+ const _size = /*@__PURE__*/ new Vector3();
51
+ const _copyRegion = /*@__PURE__*/ new Box3();
52
+
53
+ // Direct-light captures use a black atlas without changing the light layout.
54
+ let _emptyAtlas = null;
55
+
56
+ // Number of padding texels added at each boundary of every sub-volume in the atlas.
57
+ const ATLAS_PADDING = 1;
58
+
59
+ /**
60
+ * A 3D grid of L2 Spherical Harmonic irradiance probes that provides
61
+ * position-dependent diffuse global illumination.
62
+ *
63
+ * Note that this class can only be used with {@link WebGLRenderer}.
64
+ * For {@link WebGPURenderer}, use {@link LightProbeGrid}.
65
+ *
66
+ * All seven packed SH sub-volumes are stored in a **single** RGBA
67
+ * `WebGL3DRenderTarget` using a texture-atlas layout along the Z axis.
68
+ * Each sub-volume occupies `( nz + 2 )` atlas slices: one padding slice at
69
+ * each end (a copy of the nearest edge data slice) to prevent color bleeding
70
+ * when the hardware trilinear filter reads across a sub-volume boundary.
71
+ *
72
+ * Atlas layout (nz = resolution.z, PADDING = 1):
73
+ * ```
74
+ * slice 0 : padding (copy of sub-volume 0, data slice 0)
75
+ * slices 1 … nz : sub-volume 0 data
76
+ * slice nz + 1 : padding (copy of sub-volume 0, data slice nz-1)
77
+ * slice nz + 2 : padding (copy of sub-volume 1, data slice 0)
78
+ * slices nz+3 … 2*nz+2 : sub-volume 1 data
79
+ * …
80
+ * ```
81
+ * Total atlas depth = `7 * ( nz + 2 )`.
82
+ *
83
+ * Baking is fully GPU-resident: cubemap rendering, SH projection, and
84
+ * texture packing all happen on the GPU with zero CPU readback.
85
+ *
86
+ * @three_import import { LightProbeGridWebGL } from 'three/addons/lighting/LightProbeGridWebGL.js';
87
+ */
88
+ class LightProbeGridWebGL extends Light {
89
+
90
+ /**
91
+ * Constructs a new irradiance probe grid.
92
+ *
93
+ * The volume is centered at the object's position. It is split into one cell
94
+ * per probe, with each probe at the center of its cell, so the probes sit half
95
+ * a cell inside the volume.
96
+ *
97
+ * @param {number} [width=1] - Full width of the volume along X.
98
+ * @param {number} [height=1] - Full height of the volume along Y.
99
+ * @param {number} [depth=1] - Full depth of the volume along Z.
100
+ * @param {number} [widthProbes] - Number of probes along X. Defaults to `Math.max( 1, Math.round( width ) )`.
101
+ * @param {number} [heightProbes] - Number of probes along Y. Defaults to `Math.max( 1, Math.round( height ) )`.
102
+ * @param {number} [depthProbes] - Number of probes along Z. Defaults to `Math.max( 1, Math.round( depth ) )`.
103
+ */
104
+ constructor( width = 1, height = 1, depth = 1, widthProbes, heightProbes, depthProbes ) {
105
+
106
+ super( 0xffffff, 1 );
107
+
108
+ /**
109
+ * This flag can be used for type testing.
110
+ *
111
+ * @type {boolean}
112
+ * @readonly
113
+ * @default true
114
+ */
115
+ this.isLightProbeGrid = true;
116
+
117
+ this.type = 'LightProbeGridWebGL';
118
+
119
+ /**
120
+ * The full width of the volume along X.
121
+ *
122
+ * @type {number}
123
+ */
124
+ this.width = width;
125
+
126
+ /**
127
+ * The full height of the volume along Y.
128
+ *
129
+ * @type {number}
130
+ */
131
+ this.height = height;
132
+
133
+ /**
134
+ * The full depth of the volume along Z.
135
+ *
136
+ * @type {number}
137
+ */
138
+ this.depth = depth;
139
+
140
+ /**
141
+ * The number of probes along each axis.
142
+ *
143
+ * @type {Vector3}
144
+ */
145
+ this.resolution = new Vector3(
146
+ widthProbes !== undefined ? widthProbes : Math.max( 1, Math.round( width ) ),
147
+ heightProbes !== undefined ? heightProbes : Math.max( 1, Math.round( height ) ),
148
+ depthProbes !== undefined ? depthProbes : Math.max( 1, Math.round( depth ) )
149
+ );
150
+
151
+ /**
152
+ * The world-space bounding box for the grid. This is the volume the grid
153
+ * lights, with the probes half a cell inside it. Updated automatically
154
+ * by {@link LightProbeGridWebGL#bake}.
155
+ *
156
+ * @type {Box3}
157
+ */
158
+ this.boundingBox = new Box3();
159
+
160
+ /**
161
+ * Where grids overlap, the grid with the highest priority lights the
162
+ * fragment. On ties, the most recently created grid wins.
163
+ *
164
+ * @type {number}
165
+ * @default 0
166
+ */
167
+ this.priority = 0;
168
+
169
+ /**
170
+ * The single RGBA atlas 3D texture storing all seven packed SH sub-volumes.
171
+ *
172
+ * @type {?Data3DTexture}
173
+ * @default null
174
+ */
175
+ this.texture = null;
176
+
177
+ /**
178
+ * Internal render target for GPU-resident baking.
179
+ *
180
+ * @private
181
+ * @type {?WebGL3DRenderTarget}
182
+ * @default null
183
+ */
184
+ this._renderTarget = null;
185
+
186
+ // Indirect captures read a snapshot while the live atlas is updated in place.
187
+ this._bounceTarget = null;
188
+ this._bouncePass = - 1;
189
+
190
+ this.updateBoundingBox();
191
+
192
+ }
193
+
194
+ /**
195
+ * Returns the world-space position of the probe at grid indices (ix, iy, iz).
196
+ *
197
+ * @param {number} ix - X index.
198
+ * @param {number} iy - Y index.
199
+ * @param {number} iz - Z index.
200
+ * @param {Vector3} target - The target vector.
201
+ * @return {Vector3} The world-space position.
202
+ */
203
+ getProbePosition( ix, iy, iz, target ) {
204
+
205
+ const pos = this.position;
206
+ const res = this.resolution;
207
+ const w = this.width, h = this.height, d = this.depth;
208
+
209
+ target.set(
210
+ pos.x - w / 2 + ( ix + 0.5 ) * w / res.x,
211
+ pos.y - h / 2 + ( iy + 0.5 ) * h / res.y,
212
+ pos.z - d / 2 + ( iz + 0.5 ) * d / res.z
213
+ );
214
+
215
+ return target;
216
+
217
+ }
218
+
219
+ /**
220
+ * Updates the world-space bounding box from the current position and size.
221
+ */
222
+ updateBoundingBox() {
223
+
224
+ _size.set( this.width, this.height, this.depth );
225
+ this.boundingBox.setFromCenterAndSize( this.position, _size );
226
+
227
+ }
228
+
229
+ /**
230
+ * Bakes probes by rendering cubemaps at each probe position and
231
+ * projecting to L2 SH. Optionally iterates additional passes to capture
232
+ * indirect bounces: each extra pass samples the previous pass's data as
233
+ * indirect light, so a grid added to the scene before baking accumulates
234
+ * one bounce per extra pass.
235
+ *
236
+ * Use `start` and `count` to bake a range and publish its cells immediately.
237
+ * Indices advance along X, then Z, then Y, filling horizontal layers from bottom
238
+ * to top. For incremental indirect bounces, finish the whole grid for `pass: 0`,
239
+ * then repeat with `pass: 1`, etc. Start each pass at index 0 to snapshot the
240
+ * previous pass before updating its cells.
241
+ *
242
+ * Shadow-casting instances of `SunLight` are temporarily replaced with
243
+ * equivalent directional lights, since their view-fitted shadow cascades
244
+ * cannot be frozen across probe renders.
245
+ *
246
+ * @param {WebGLRenderer} renderer - The renderer.
247
+ * @param {Scene} scene - The scene to render.
248
+ * @param {Object} [options] - Bake options.
249
+ * @param {number} [options.cubemapSize=8] - Resolution of each cubemap face.
250
+ * @param {number} [options.near=0.1] - Near plane for the cube camera.
251
+ * @param {number} [options.far=100] - Far plane for the cube camera.
252
+ * @param {number} [options.bounces=0] - Additional bounce passes. Only available when baking the whole grid.
253
+ * @param {number} [options.start=0] - Index of the first probe to bake.
254
+ * @param {number} [options.count] - Number of probes to bake. Defaults to the remaining probes.
255
+ * @param {number} [options.pass=0] - Starting pass. Zero captures direct light; later passes sample the previous pass. Ranged calls require `bounces: 0`.
256
+ */
257
+ bake( renderer, scene, options = {} ) {
258
+
259
+ const res = this.resolution;
260
+ const totalProbes = res.x * res.y * res.z;
261
+ const {
262
+ bounces = 0,
263
+ start = 0,
264
+ count = totalProbes - start,
265
+ pass: firstPass = 0
266
+ } = options;
267
+ const end = start + count;
268
+
269
+ if ( ! Number.isInteger( start ) || ! Number.isInteger( count ) || start < 0 || count < 0 || end > totalProbes ) {
270
+
271
+ throw new RangeError( 'THREE.LightProbeGridWebGL: Invalid probe range.' );
272
+
273
+ }
274
+
275
+ if ( ! Number.isInteger( firstPass ) || firstPass < 0 || ! Number.isInteger( bounces ) || bounces < 0 ) {
276
+
277
+ throw new RangeError( 'THREE.LightProbeGridWebGL: Pass and bounce counts must be non-negative integers.' );
278
+
279
+ }
280
+
281
+ if ( bounces > 0 && count !== totalProbes ) {
282
+
283
+ throw new RangeError( 'THREE.LightProbeGridWebGL: For ranged baking, use pass instead of bounces.' );
284
+
285
+ }
286
+
287
+ if ( count === 0 ) return;
288
+
289
+ if ( firstPass > 0 && start > 0 && this._bouncePass !== firstPass ) {
290
+
291
+ throw new Error( 'THREE.LightProbeGridWebGL: Start each indirect pass at probe 0.' );
292
+
293
+ }
294
+
295
+ this._ensureTextures();
296
+ this.updateBoundingBox();
297
+ _ensureBakeResources( options );
298
+ _ensureBatchTarget( totalProbes );
299
+ _ensureRepackResources();
300
+
301
+ const currentRenderTarget = renderer.getRenderTarget();
302
+ const currentActiveCubeFace = renderer.getActiveCubeFace();
303
+ const currentActiveMipmapLevel = renderer.getActiveMipmapLevel();
304
+ const currentAutoClear = renderer.autoClear;
305
+ const currentXrEnabled = renderer.xr.enabled;
306
+ const currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;
307
+ const currentMatrixWorldAutoUpdate = scene.matrixWorldAutoUpdate;
308
+ const currentVisible = this.visible;
309
+ const currentTexture = this.texture;
310
+ const renderTarget = this._renderTarget;
311
+ const currentViewport = renderTarget.viewport.clone();
312
+ let replacedSunLights = null;
313
+
314
+ try {
315
+
316
+ this.visible = true;
317
+
318
+ // Scene is static during the bake: update once, disable auto-update.
319
+
320
+ if ( currentMatrixWorldAutoUpdate === true ) {
321
+
322
+ scene.updateMatrixWorld( true );
323
+ scene.matrixWorldAutoUpdate = false;
324
+
325
+ }
326
+
327
+ replacedSunLights = replaceSunLights( scene );
328
+
329
+ // Render shadow maps once, not once per cube face.
330
+
331
+ renderer.shadowMap.autoUpdate = false;
332
+ renderer.shadowMap.needsUpdate = true;
333
+
334
+ for ( let pass = firstPass; pass <= firstPass + bounces; pass ++ ) {
335
+
336
+ this._updateBakeTexture( renderer, pass, start );
337
+ this._captureProbes( renderer, scene, start, end );
338
+ this._repackProbes( renderer, start, end );
339
+
340
+ }
341
+
342
+ } finally {
343
+
344
+ renderTarget.viewport.copy( currentViewport );
345
+ renderer.setRenderTarget( currentRenderTarget, currentActiveCubeFace, currentActiveMipmapLevel );
346
+ renderer.autoClear = currentAutoClear;
347
+ renderer.xr.enabled = currentXrEnabled;
348
+ renderer.shadowMap.autoUpdate = currentShadowAutoUpdate;
349
+
350
+ if ( replacedSunLights !== null ) restoreSunLights( scene, replacedSunLights );
351
+
352
+ scene.matrixWorldAutoUpdate = currentMatrixWorldAutoUpdate;
353
+ this.visible = currentVisible;
354
+ this.texture = currentTexture;
355
+
356
+ }
357
+
358
+ }
359
+
360
+ /**
361
+ * Selects the atlas to sample during capture, snapshotting each indirect pass
362
+ * before its first range overwrites the live atlas.
363
+ *
364
+ * @private
365
+ * @param {WebGLRenderer} renderer - The renderer.
366
+ * @param {number} pass - The bounce pass.
367
+ * @param {number} start - The first probe index.
368
+ */
369
+ _updateBakeTexture( renderer, pass, start ) {
370
+
371
+ if ( pass === 0 ) {
372
+
373
+ this.texture = _emptyAtlas;
374
+ if ( start === 0 ) this._bouncePass = - 1;
375
+ return;
376
+
377
+ }
378
+
379
+ if ( start === 0 ) {
380
+
381
+ const renderTarget = this._renderTarget;
382
+
383
+ if ( this._bounceTarget === null ) this._bounceTarget = renderTarget.clone();
384
+
385
+ renderer.initRenderTarget( renderTarget );
386
+ renderer.initRenderTarget( this._bounceTarget );
387
+ _copyRegion.min.set( 0, 0, 0 );
388
+ _copyRegion.max.set( renderTarget.width, renderTarget.height, renderTarget.depth );
389
+ renderer.copyTextureToTexture( renderTarget.texture, this._bounceTarget.texture, _copyRegion );
390
+ this._bouncePass = pass;
391
+
392
+ }
393
+
394
+ this.texture = this._bounceTarget.texture;
395
+
396
+ }
397
+
398
+ /**
399
+ * Captures cubemaps and projects their SH coefficients into the batch target.
400
+ *
401
+ * @private
402
+ * @param {WebGLRenderer} renderer - The renderer.
403
+ * @param {Scene} scene - The scene to capture.
404
+ * @param {number} start - The first probe index.
405
+ * @param {number} end - The exclusive end probe index.
406
+ */
407
+ _captureProbes( renderer, scene, start, end ) {
408
+
409
+ const { x: nx, y: ny, z: nz } = this.resolution;
410
+ const probesPerLayer = nx * nz;
411
+
412
+ _mesh.material = _shMaterial;
413
+ _shMaterial.uniforms.envMap.value = _cubeRenderTarget.texture;
414
+
415
+ for ( let probeIndex = start; probeIndex < end; probeIndex ++ ) {
416
+
417
+ const ix = probeIndex % nx;
418
+ const iy = Math.floor( probeIndex / probesPerLayer );
419
+ const iz = Math.floor( probeIndex / nx ) % nz;
420
+
421
+ this.getProbePosition( ix, iy, iz, _position );
422
+ _cubeCamera.position.copy( _position );
423
+
424
+ // The cube faces must be cleared per face.
425
+ renderer.autoClear = true;
426
+ _cubeCamera.update( renderer, scene );
427
+
428
+ // Keep batch rows in texture order (X, Y, Z).
429
+ const batchRow = ix + iy * nx + iz * nx * ny;
430
+
431
+ renderer.autoClear = false;
432
+ _batchTarget.viewport.set( 0, batchRow, 9, 1 );
433
+ renderer.setRenderTarget( _batchTarget );
434
+ renderer.render( _scene, _camera );
435
+
436
+ }
437
+
438
+ }
439
+
440
+ /**
441
+ * Packs a probe range into the live atlas, including its boundary padding.
442
+ *
443
+ * @private
444
+ * @param {WebGLRenderer} renderer - The renderer.
445
+ * @param {number} start - The first probe index.
446
+ * @param {number} end - The exclusive end probe index.
447
+ */
448
+ _repackProbes( renderer, start, end ) {
449
+
450
+ const { x: nx, y: ny, z: nz } = this.resolution;
451
+ const probesPerLayer = nx * nz;
452
+ const startY = Math.floor( start / probesPerLayer );
453
+ const endY = Math.floor( end / probesPerLayer );
454
+ const paddedSlices = nz + 2 * ATLAS_PADDING;
455
+ const renderTarget = this._renderTarget;
456
+
457
+ for ( const material of _repackMaterials ) {
458
+
459
+ material.uniforms.batchTexture.value = _batchTarget.texture;
460
+ material.uniforms.resolution.value.copy( this.resolution );
461
+
462
+ }
463
+
464
+ // Map the horizontal bake range to contiguous rows in each Z slice.
465
+ for ( let iz = 0; iz < nz; iz ++ ) {
466
+
467
+ const sliceStart = startY * nx + MathUtils.clamp( start % probesPerLayer - iz * nx, 0, nx );
468
+ const sliceEnd = endY * nx + MathUtils.clamp( end % probesPerLayer - iz * nx, 0, nx );
469
+
470
+ for ( let probeIndex = sliceStart; probeIndex < sliceEnd; ) {
471
+
472
+ const ix = probeIndex % nx;
473
+ const iy = Math.floor( probeIndex / nx );
474
+
475
+ // Coalesce complete rows within a slice into one rectangle.
476
+ const width = Math.min( nx - ix, sliceEnd - probeIndex );
477
+ let height = 1;
478
+
479
+ if ( width === nx ) {
480
+
481
+ height = Math.min( ny - iy, Math.floor( ( sliceEnd - probeIndex ) / nx ) );
482
+
483
+ }
484
+
485
+ renderTarget.viewport.set( ix, iy, width, height );
486
+
487
+ for ( let t = 0; t < 7; t ++ ) {
488
+
489
+ _mesh.material = _repackMaterials[ t ];
490
+ _mesh.material.uniforms.sliceZ.value = iz;
491
+ const base = t * paddedSlices;
492
+
493
+ renderer.setRenderTarget( renderTarget, base + ATLAS_PADDING + iz );
494
+ renderer.render( _scene, _camera );
495
+
496
+ if ( iz === 0 ) {
497
+
498
+ renderer.setRenderTarget( renderTarget, base );
499
+ renderer.render( _scene, _camera );
500
+
501
+ }
502
+
503
+ if ( iz === nz - 1 ) {
504
+
505
+ renderer.setRenderTarget( renderTarget, base + ATLAS_PADDING + nz );
506
+ renderer.render( _scene, _camera );
507
+
508
+ }
509
+
510
+ }
511
+
512
+ probeIndex += width * height;
513
+
514
+ }
515
+
516
+ }
517
+
518
+ }
519
+
520
+ /**
521
+ * Ensures the atlas 3D render target exists with the correct dimensions.
522
+ *
523
+ * @private
524
+ */
525
+ _ensureTextures() {
526
+
527
+ if ( this._renderTarget !== null ) return;
528
+
529
+ const res = this.resolution;
530
+ const nx = res.x, ny = res.y, nz = res.z;
531
+
532
+ // Atlas depth: 7 sub-volumes, each with ATLAS_PADDING slices at both ends
533
+ const atlasDepth = 7 * ( nz + 2 * ATLAS_PADDING );
534
+
535
+ const rt = new WebGL3DRenderTarget( nx, ny, atlasDepth, {
536
+ format: RGBAFormat,
537
+ type: FloatType,
538
+ minFilter: LinearFilter,
539
+ magFilter: LinearFilter,
540
+ generateMipmaps: false,
541
+ depthBuffer: false
542
+ } );
543
+
544
+ this._renderTarget = rt;
545
+ this.texture = rt.texture;
546
+
547
+ }
548
+
549
+ /**
550
+ * Frees GPU resources.
551
+ */
552
+ dispose() {
553
+
554
+ if ( this._bounceTarget !== null ) {
555
+
556
+ this._bounceTarget.dispose();
557
+ this._bounceTarget = null;
558
+ this._bouncePass = - 1;
559
+
560
+ }
561
+
562
+ if ( this._renderTarget !== null ) {
563
+
564
+ this._renderTarget.dispose();
565
+ this._renderTarget = null;
566
+ this.texture = null;
567
+
568
+ }
569
+
570
+ super.dispose();
571
+
572
+ }
573
+
574
+ }
575
+
576
+ // Internal: Ensure the shared fullscreen-quad scene exists
577
+ function _ensureScene() {
578
+
579
+ if ( _scene === null ) {
580
+
581
+ _camera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );
582
+ _mesh = new Mesh( new PlaneGeometry( 2, 2 ) );
583
+ _scene = new Scene();
584
+ _scene.add( _mesh );
585
+
586
+ }
587
+
588
+ }
589
+
590
+ // Internal: Ensure GPU resources for SH projection are created
591
+ function _ensureGPUResources( cubemapSize ) {
592
+
593
+ _ensureScene();
594
+
595
+ // Recreate material when cubemap size changes
596
+ if ( cubemapSize !== _lastCubemapSize ) {
597
+
598
+ if ( _shMaterial !== null ) _shMaterial.dispose();
599
+
600
+ _shMaterial = new ShaderMaterial( {
601
+ precision: 'highp',
602
+ defines: {
603
+ CUBEMAP_SIZE: cubemapSize
604
+ },
605
+ uniforms: {
606
+ envMap: { value: null }
607
+ },
608
+ vertexShader: /* glsl */`
609
+ void main() {
610
+ gl_Position = vec4( position.xy, 0.0, 1.0 );
611
+ }
612
+ `,
613
+ fragmentShader: /* glsl */`
614
+ #include <common>
615
+
616
+ uniform samplerCube envMap;
617
+
618
+ void main() {
619
+
620
+ int coefIndex = int( gl_FragCoord.x );
621
+
622
+ vec3 accum0 = vec3( 0.0 );
623
+ vec3 accum1 = vec3( 0.0 );
624
+ vec3 accum2 = vec3( 0.0 );
625
+ vec3 accum3 = vec3( 0.0 );
626
+ vec3 accum4 = vec3( 0.0 );
627
+ vec3 accum5 = vec3( 0.0 );
628
+ vec3 accum6 = vec3( 0.0 );
629
+ vec3 accum7 = vec3( 0.0 );
630
+ vec3 accum8 = vec3( 0.0 );
631
+ float totalWeight = 0.0;
632
+ float pixelSize = 2.0 / float( CUBEMAP_SIZE );
633
+
634
+ for ( int face = 0; face < 6; face ++ ) {
635
+
636
+ for ( int iy = 0; iy < CUBEMAP_SIZE; iy ++ ) {
637
+
638
+ for ( int ix = 0; ix < CUBEMAP_SIZE; ix ++ ) {
639
+
640
+ // WebGL cubemaps have a left-handed orientation (flip = -1)
641
+ float col = ( float( ix ) + 0.5 ) * pixelSize - 1.0;
642
+ float row = 1.0 - ( float( iy ) + 0.5 ) * pixelSize;
643
+
644
+ vec3 coord;
645
+
646
+ if ( face == 0 ) coord = vec3( 1.0, row, -col );
647
+ else if ( face == 1 ) coord = vec3( -1.0, row, col );
648
+ else if ( face == 2 ) coord = vec3( col, 1.0, -row );
649
+ else if ( face == 3 ) coord = vec3( col, -1.0, row );
650
+ else if ( face == 4 ) coord = vec3( col, row, 1.0 );
651
+ else coord = vec3( -col, row, -1.0 );
652
+
653
+ float lengthSq = dot( coord, coord );
654
+ float weight = 4.0 / ( sqrt( lengthSq ) * lengthSq );
655
+ totalWeight += weight;
656
+
657
+ vec3 dir = normalize( coord );
658
+ vec3 cw = textureCube( envMap, coord ).rgb * weight;
659
+
660
+ // band 0
661
+ accum0 += cw * 0.282095;
662
+
663
+ // band 1
664
+ accum1 += cw * ( 0.488603 * dir.y );
665
+ accum2 += cw * ( 0.488603 * dir.z );
666
+ accum3 += cw * ( 0.488603 * dir.x );
667
+
668
+ // band 2
669
+ accum4 += cw * ( 1.092548 * ( dir.x * dir.y ) );
670
+ accum5 += cw * ( 1.092548 * ( dir.y * dir.z ) );
671
+ accum6 += cw * ( 0.315392 * ( 3.0 * dir.z * dir.z - 1.0 ) );
672
+ accum7 += cw * ( 1.092548 * ( dir.x * dir.z ) );
673
+ accum8 += cw * ( 0.546274 * ( dir.x * dir.x - dir.y * dir.y ) );
674
+
675
+ }
676
+
677
+ }
678
+
679
+ }
680
+
681
+ float norm = 4.0 * PI / totalWeight;
682
+
683
+ vec3 accum;
684
+ if ( coefIndex == 0 ) accum = accum0;
685
+ else if ( coefIndex == 1 ) accum = accum1;
686
+ else if ( coefIndex == 2 ) accum = accum2;
687
+ else if ( coefIndex == 3 ) accum = accum3;
688
+ else if ( coefIndex == 4 ) accum = accum4;
689
+ else if ( coefIndex == 5 ) accum = accum5;
690
+ else if ( coefIndex == 6 ) accum = accum6;
691
+ else if ( coefIndex == 7 ) accum = accum7;
692
+ else accum = accum8;
693
+
694
+ gl_FragColor = vec4( accum * norm, 1.0 );
695
+
696
+ }
697
+ `
698
+ } );
699
+
700
+ _lastCubemapSize = cubemapSize;
701
+
702
+ }
703
+
704
+ }
705
+
706
+ // Internal: Ensure GPU resources for repacking SH into the atlas 3D texture
707
+ function _ensureRepackResources() {
708
+
709
+ if ( _repackMaterials !== null ) return;
710
+
711
+ _ensureScene();
712
+
713
+ // Create 7 materials, one per output texture packing
714
+ // Texture 0: (c0.r, c0.g, c0.b, c1.r)
715
+ // Texture 1: (c1.g, c1.b, c2.r, c2.g)
716
+ // Texture 2: (c2.b, c3.r, c3.g, c3.b)
717
+ // Texture 3: (c4.r, c4.g, c4.b, c5.r)
718
+ // Texture 4: (c5.g, c5.b, c6.r, c6.g)
719
+ // Texture 5: (c6.b, c7.r, c7.g, c7.b)
720
+ // Texture 6: (c8.r, c8.g, c8.b, 0.0)
721
+
722
+ const repackVertexShader = /* glsl */`
723
+ void main() {
724
+ gl_Position = vec4( position.xy, 0.0, 1.0 );
725
+ }
726
+ `;
727
+
728
+ _repackMaterials = [];
729
+
730
+ for ( let t = 0; t < 7; t ++ ) {
731
+
732
+ _repackMaterials[ t ] = new ShaderMaterial( {
733
+ precision: 'highp',
734
+ defines: {
735
+ TEXTURE_INDEX: t
736
+ },
737
+ uniforms: {
738
+ batchTexture: { value: null },
739
+ resolution: { value: new Vector3() },
740
+ sliceZ: { value: 0 }
741
+ },
742
+ vertexShader: repackVertexShader,
743
+ fragmentShader: /* glsl */`
744
+ uniform sampler2D batchTexture;
745
+ uniform vec3 resolution;
746
+ uniform int sliceZ;
747
+
748
+ void main() {
749
+
750
+ int ix = int( gl_FragCoord.x );
751
+ int iy = int( gl_FragCoord.y );
752
+ int iz = sliceZ;
753
+
754
+ int probeIndex = ix + iy * int( resolution.x ) + iz * int( resolution.x ) * int( resolution.y );
755
+
756
+ // Read 9 SH coefficients from the batch texture row
757
+ vec4 c0 = texelFetch( batchTexture, ivec2( 0, probeIndex ), 0 );
758
+ vec4 c1 = texelFetch( batchTexture, ivec2( 1, probeIndex ), 0 );
759
+ vec4 c2 = texelFetch( batchTexture, ivec2( 2, probeIndex ), 0 );
760
+ vec4 c3 = texelFetch( batchTexture, ivec2( 3, probeIndex ), 0 );
761
+ vec4 c4 = texelFetch( batchTexture, ivec2( 4, probeIndex ), 0 );
762
+ vec4 c5 = texelFetch( batchTexture, ivec2( 5, probeIndex ), 0 );
763
+ vec4 c6 = texelFetch( batchTexture, ivec2( 6, probeIndex ), 0 );
764
+ vec4 c7 = texelFetch( batchTexture, ivec2( 7, probeIndex ), 0 );
765
+ vec4 c8 = texelFetch( batchTexture, ivec2( 8, probeIndex ), 0 );
766
+
767
+ // Pack into the output format for this texture index
768
+ #if TEXTURE_INDEX == 0
769
+ gl_FragColor = vec4( c0.rgb, c1.r );
770
+ #elif TEXTURE_INDEX == 1
771
+ gl_FragColor = vec4( c1.gb, c2.rg );
772
+ #elif TEXTURE_INDEX == 2
773
+ gl_FragColor = vec4( c2.b, c3.rgb );
774
+ #elif TEXTURE_INDEX == 3
775
+ gl_FragColor = vec4( c4.rgb, c5.r );
776
+ #elif TEXTURE_INDEX == 4
777
+ gl_FragColor = vec4( c5.gb, c6.rg );
778
+ #elif TEXTURE_INDEX == 5
779
+ gl_FragColor = vec4( c6.b, c7.rgb );
780
+ #else
781
+ gl_FragColor = vec4( c8.rgb, 0.0 );
782
+ #endif
783
+
784
+ }
785
+ `
786
+ } );
787
+
788
+ }
789
+
790
+ }
791
+
792
+ // Internal: Ensure cube render target and camera exist with the right parameters
793
+ function _ensureBakeResources( options ) {
794
+
795
+ if ( _emptyAtlas === null ) {
796
+
797
+ _emptyAtlas = new Data3DTexture( new Uint16Array( 4 ), 1, 1, 1 );
798
+ _emptyAtlas.type = HalfFloatType;
799
+ _emptyAtlas.minFilter = LinearFilter;
800
+ _emptyAtlas.magFilter = LinearFilter;
801
+ _emptyAtlas.needsUpdate = true;
802
+
803
+ }
804
+
805
+ const {
806
+ cubemapSize = 8,
807
+ near = 0.1,
808
+ far = 100
809
+ } = options;
810
+
811
+ if ( _cubeRenderTarget === null || cubemapSize !== _cachedCubemapSize || near !== _cachedNear || far !== _cachedFar ) {
812
+
813
+ if ( _cubeRenderTarget !== null ) _cubeRenderTarget.dispose();
814
+
815
+ _cubeRenderTarget = new WebGLCubeRenderTarget( cubemapSize, { type: HalfFloatType } );
816
+ _cubeCamera = new CubeCamera( near, far, _cubeRenderTarget );
817
+ _cachedCubemapSize = cubemapSize;
818
+ _cachedNear = near;
819
+ _cachedFar = far;
820
+
821
+ }
822
+
823
+ _ensureGPUResources( cubemapSize );
824
+
825
+ }
826
+
827
+ function _ensureBatchTarget( totalProbes ) {
828
+
829
+ if ( _batchTarget === null || _batchTargetProbes !== totalProbes ) {
830
+
831
+ if ( _batchTarget !== null ) _batchTarget.dispose();
832
+
833
+ _batchTarget = new WebGLRenderTarget( 9, totalProbes, {
834
+ type: FloatType,
835
+ minFilter: NearestFilter,
836
+ magFilter: NearestFilter,
837
+ depthBuffer: false
838
+ } );
839
+
840
+ _batchTargetProbes = totalProbes;
841
+
842
+ }
843
+
844
+ }
845
+
846
+ export { LightProbeGridWebGL };