@driftengine/core 3.61.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 (955) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +9 -0
  3. package/README.md +9 -0
  4. package/dist/behavior/behaviorTree.d.ts +140 -0
  5. package/dist/behavior/behaviorTree.js +289 -0
  6. package/dist/build/shaderComments.d.ts +64 -0
  7. package/dist/build/shaderComments.js +0 -0
  8. package/dist/cinematic/player.d.ts +80 -0
  9. package/dist/cinematic/player.js +184 -0
  10. package/dist/cinematic/script.d.ts +63 -0
  11. package/dist/cinematic/script.js +141 -0
  12. package/dist/core/bootGate.d.ts +37 -0
  13. package/dist/core/bootGate.js +47 -0
  14. package/dist/core/loadTracker.d.ts +78 -0
  15. package/dist/core/loadTracker.js +106 -0
  16. package/dist/core/loop.d.ts +118 -0
  17. package/dist/core/loop.js +84 -0
  18. package/dist/core/messageQueue.d.ts +61 -0
  19. package/dist/core/messageQueue.js +104 -0
  20. package/dist/core/onceSet.d.ts +27 -0
  21. package/dist/core/onceSet.js +62 -0
  22. package/dist/core/preferences.d.ts +47 -0
  23. package/dist/core/preferences.js +140 -0
  24. package/dist/core/remoteSave.d.ts +154 -0
  25. package/dist/core/remoteSave.js +249 -0
  26. package/dist/core/rng.d.ts +64 -0
  27. package/dist/core/rng.js +72 -0
  28. package/dist/core/stepBudget.d.ts +91 -0
  29. package/dist/core/stepBudget.js +105 -0
  30. package/dist/core/storage.d.ts +52 -0
  31. package/dist/core/storage.js +85 -0
  32. package/dist/core/tickTrace.d.ts +72 -0
  33. package/dist/core/tickTrace.js +102 -0
  34. package/dist/core/timeCurve.d.ts +83 -0
  35. package/dist/core/timeCurve.js +107 -0
  36. package/dist/core/withDefaults.d.ts +21 -0
  37. package/dist/core/withDefaults.js +29 -0
  38. package/dist/dev/contactProbe.d.ts +41 -0
  39. package/dist/dev/contactProbe.js +58 -0
  40. package/dist/dev/fpsMeter.d.ts +45 -0
  41. package/dist/dev/fpsMeter.js +86 -0
  42. package/dist/environment/celestialClock.d.ts +141 -0
  43. package/dist/environment/celestialClock.js +262 -0
  44. package/dist/geometry/decal.d.ts +61 -0
  45. package/dist/geometry/decal.js +178 -0
  46. package/dist/geometry/filmPatch.d.ts +35 -0
  47. package/dist/geometry/filmPatch.js +112 -0
  48. package/dist/geometry/growable.d.ts +70 -0
  49. package/dist/geometry/growable.js +167 -0
  50. package/dist/geometry/lightVolume.d.ts +76 -0
  51. package/dist/geometry/lightVolume.js +65 -0
  52. package/dist/geometry/meshBuilder.d.ts +426 -0
  53. package/dist/geometry/meshBuilder.js +1184 -0
  54. package/dist/geometry/pixelFont.d.ts +59 -0
  55. package/dist/geometry/pixelFont.js +179 -0
  56. package/dist/geometry/ribbon.d.ts +101 -0
  57. package/dist/geometry/ribbon.js +546 -0
  58. package/dist/geometry/shellFill.d.ts +101 -0
  59. package/dist/geometry/shellFill.js +203 -0
  60. package/dist/geometry/spline.d.ts +162 -0
  61. package/dist/geometry/spline.js +527 -0
  62. package/dist/geometry/tangents.d.ts +30 -0
  63. package/dist/geometry/tangents.js +142 -0
  64. package/dist/geometry/textMesh.d.ts +51 -0
  65. package/dist/geometry/textMesh.js +57 -0
  66. package/dist/geometry/treeBuilder.d.ts +37 -0
  67. package/dist/geometry/treeBuilder.js +56 -0
  68. package/dist/host/display.d.ts +135 -0
  69. package/dist/host/display.js +114 -0
  70. package/dist/host/files.d.ts +25 -0
  71. package/dist/host/files.js +44 -0
  72. package/dist/host/lifecycle.d.ts +45 -0
  73. package/dist/host/lifecycle.js +28 -0
  74. package/dist/host/platformServices.d.ts +23 -0
  75. package/dist/host/platformServices.js +1 -0
  76. package/dist/host/screen.d.ts +49 -0
  77. package/dist/host/screen.js +90 -0
  78. package/dist/index.d.ts +289 -0
  79. package/dist/index.js +320 -0
  80. package/dist/input/actionMap.d.ts +181 -0
  81. package/dist/input/actionMap.js +314 -0
  82. package/dist/input/activeDevice.d.ts +55 -0
  83. package/dist/input/activeDevice.js +83 -0
  84. package/dist/input/gamepadIdentity.d.ts +43 -0
  85. package/dist/input/gamepadIdentity.js +108 -0
  86. package/dist/input/gamepadMapping.d.ts +56 -0
  87. package/dist/input/gamepadMapping.js +91 -0
  88. package/dist/input/input.d.ts +281 -0
  89. package/dist/input/input.js +703 -0
  90. package/dist/input/inputHarness.d.ts +42 -0
  91. package/dist/input/inputHarness.js +193 -0
  92. package/dist/input/rightGesture.d.ts +57 -0
  93. package/dist/input/rightGesture.js +49 -0
  94. package/dist/input/rumble.d.ts +71 -0
  95. package/dist/input/rumble.js +119 -0
  96. package/dist/input/touchControls.d.ts +138 -0
  97. package/dist/input/touchControls.js +352 -0
  98. package/dist/input/typingTarget.d.ts +6 -0
  99. package/dist/input/typingTarget.js +27 -0
  100. package/dist/math/bounds.d.ts +61 -0
  101. package/dist/math/bounds.js +121 -0
  102. package/dist/math/color.d.ts +8 -0
  103. package/dist/math/color.js +35 -0
  104. package/dist/math/exact.d.ts +66 -0
  105. package/dist/math/exact.js +262 -0
  106. package/dist/math/frustum.d.ts +44 -0
  107. package/dist/math/frustum.js +90 -0
  108. package/dist/math/intersect.d.ts +76 -0
  109. package/dist/math/intersect.js +185 -0
  110. package/dist/math/scalar.d.ts +51 -0
  111. package/dist/math/scalar.js +99 -0
  112. package/dist/math/spring.d.ts +59 -0
  113. package/dist/math/spring.js +88 -0
  114. package/dist/nav/navGraph.d.ts +71 -0
  115. package/dist/nav/navGraph.js +111 -0
  116. package/dist/nav/navPath.d.ts +93 -0
  117. package/dist/nav/navPath.js +162 -0
  118. package/dist/nav/navSearch.d.ts +74 -0
  119. package/dist/nav/navSearch.js +198 -0
  120. package/dist/physics/boxSurface.d.ts +48 -0
  121. package/dist/physics/boxSurface.js +73 -0
  122. package/dist/physics/colliderSurface.d.ts +46 -0
  123. package/dist/physics/colliderSurface.js +146 -0
  124. package/dist/physics/compositeSurface.d.ts +33 -0
  125. package/dist/physics/compositeSurface.js +108 -0
  126. package/dist/physics/heightSurface.d.ts +103 -0
  127. package/dist/physics/heightSurface.js +153 -0
  128. package/dist/physics/ribbonSurface.d.ts +239 -0
  129. package/dist/physics/ribbonSurface.js +522 -0
  130. package/dist/render/ambientOcclusionPass.d.ts +53 -0
  131. package/dist/render/ambientOcclusionPass.js +179 -0
  132. package/dist/render/areaLights.d.ts +116 -0
  133. package/dist/render/areaLights.js +91 -0
  134. package/dist/render/areaShadowSet.d.ts +184 -0
  135. package/dist/render/areaShadowSet.js +277 -0
  136. package/dist/render/atmosphere.d.ts +94 -0
  137. package/dist/render/atmosphere.js +91 -0
  138. package/dist/render/backend/api.d.ts +496 -0
  139. package/dist/render/backend/api.js +1 -0
  140. package/dist/render/backend/budget.d.ts +82 -0
  141. package/dist/render/backend/budget.js +99 -0
  142. package/dist/render/backend/createRenderer.d.ts +135 -0
  143. package/dist/render/backend/createRenderer.js +201 -0
  144. package/dist/render/backend/deadline.d.ts +24 -0
  145. package/dist/render/backend/deadline.js +38 -0
  146. package/dist/render/backend/probe.d.ts +30 -0
  147. package/dist/render/backend/probe.js +129 -0
  148. package/dist/render/backend/select.d.ts +70 -0
  149. package/dist/render/backend/select.js +249 -0
  150. package/dist/render/backend/timer.d.ts +50 -0
  151. package/dist/render/backend/timer.js +1 -0
  152. package/dist/render/backend/webgl2/instanced.d.ts +21 -0
  153. package/dist/render/backend/webgl2/instanced.js +42 -0
  154. package/dist/render/backend/webgl2/morphTexture.d.ts +21 -0
  155. package/dist/render/backend/webgl2/morphTexture.js +55 -0
  156. package/dist/render/backend/webgl2/renderer.d.ts +3027 -0
  157. package/dist/render/backend/webgl2/renderer.js +6041 -0
  158. package/dist/render/backend/webgl2/skinPaletteTexture.d.ts +32 -0
  159. package/dist/render/backend/webgl2/skinPaletteTexture.js +68 -0
  160. package/dist/render/backend/webgpu/boltPass.d.ts +42 -0
  161. package/dist/render/backend/webgpu/boltPass.js +160 -0
  162. package/dist/render/backend/webgpu/buffers.d.ts +159 -0
  163. package/dist/render/backend/webgpu/buffers.js +402 -0
  164. package/dist/render/backend/webgpu/causticsPass.d.ts +36 -0
  165. package/dist/render/backend/webgpu/causticsPass.js +138 -0
  166. package/dist/render/backend/webgpu/clusterBinner.d.ts +51 -0
  167. package/dist/render/backend/webgpu/clusterBinner.js +206 -0
  168. package/dist/render/backend/webgpu/depthPass.d.ts +114 -0
  169. package/dist/render/backend/webgpu/depthPass.js +228 -0
  170. package/dist/render/backend/webgpu/device.d.ts +52 -0
  171. package/dist/render/backend/webgpu/device.js +121 -0
  172. package/dist/render/backend/webgpu/drawCommand.d.ts +43 -0
  173. package/dist/render/backend/webgpu/drawCommand.js +54 -0
  174. package/dist/render/backend/webgpu/environmentTexels.d.ts +28 -0
  175. package/dist/render/backend/webgpu/environmentTexels.js +79 -0
  176. package/dist/render/backend/webgpu/filmPass.d.ts +29 -0
  177. package/dist/render/backend/webgpu/filmPass.js +97 -0
  178. package/dist/render/backend/webgpu/flatPass.d.ts +213 -0
  179. package/dist/render/backend/webgpu/flatPass.js +482 -0
  180. package/dist/render/backend/webgpu/flockPass.d.ts +34 -0
  181. package/dist/render/backend/webgpu/flockPass.js +129 -0
  182. package/dist/render/backend/webgpu/gpuTimestamps.d.ts +94 -0
  183. package/dist/render/backend/webgpu/gpuTimestamps.js +213 -0
  184. package/dist/render/backend/webgpu/insetPass.d.ts +19 -0
  185. package/dist/render/backend/webgpu/insetPass.js +108 -0
  186. package/dist/render/backend/webgpu/instanced.d.ts +27 -0
  187. package/dist/render/backend/webgpu/instanced.js +49 -0
  188. package/dist/render/backend/webgpu/lightVolumePass.d.ts +75 -0
  189. package/dist/render/backend/webgpu/lightVolumePass.js +154 -0
  190. package/dist/render/backend/webgpu/linePass.d.ts +90 -0
  191. package/dist/render/backend/webgpu/linePass.js +220 -0
  192. package/dist/render/backend/webgpu/morphTexture.d.ts +18 -0
  193. package/dist/render/backend/webgpu/morphTexture.js +51 -0
  194. package/dist/render/backend/webgpu/panelPass.d.ts +37 -0
  195. package/dist/render/backend/webgpu/panelPass.js +114 -0
  196. package/dist/render/backend/webgpu/particlePass.d.ts +89 -0
  197. package/dist/render/backend/webgpu/particlePass.js +280 -0
  198. package/dist/render/backend/webgpu/pipelineCache.d.ts +93 -0
  199. package/dist/render/backend/webgpu/pipelineCache.js +140 -0
  200. package/dist/render/backend/webgpu/plumePass.d.ts +69 -0
  201. package/dist/render/backend/webgpu/plumePass.js +213 -0
  202. package/dist/render/backend/webgpu/pointShadowPass.d.ts +88 -0
  203. package/dist/render/backend/webgpu/pointShadowPass.js +280 -0
  204. package/dist/render/backend/webgpu/postPass.d.ts +342 -0
  205. package/dist/render/backend/webgpu/postPass.js +366 -0
  206. package/dist/render/backend/webgpu/probePass.d.ts +108 -0
  207. package/dist/render/backend/webgpu/probePass.js +188 -0
  208. package/dist/render/backend/webgpu/reflectionPass.d.ts +29 -0
  209. package/dist/render/backend/webgpu/reflectionPass.js +87 -0
  210. package/dist/render/backend/webgpu/renderer.d.ts +3082 -0
  211. package/dist/render/backend/webgpu/renderer.js +10911 -0
  212. package/dist/render/backend/webgpu/scatterPass.d.ts +95 -0
  213. package/dist/render/backend/webgpu/scatterPass.js +266 -0
  214. package/dist/render/backend/webgpu/sdfTextPass.d.ts +86 -0
  215. package/dist/render/backend/webgpu/sdfTextPass.js +190 -0
  216. package/dist/render/backend/webgpu/shaderModules.d.ts +9 -0
  217. package/dist/render/backend/webgpu/shaderModules.js +45 -0
  218. package/dist/render/backend/webgpu/shaders/clusterBin.wgsl.d.ts +23 -0
  219. package/dist/render/backend/webgpu/shaders/clusterBin.wgsl.js +208 -0
  220. package/dist/render/backend/webgpu/skinPaletteRing.d.ts +67 -0
  221. package/dist/render/backend/webgpu/skinPaletteRing.js +97 -0
  222. package/dist/render/backend/webgpu/skinPaletteTexture.d.ts +17 -0
  223. package/dist/render/backend/webgpu/skinPaletteTexture.js +68 -0
  224. package/dist/render/backend/webgpu/skyPass.d.ts +102 -0
  225. package/dist/render/backend/webgpu/skyPass.js +70 -0
  226. package/dist/render/backend/webgpu/surfaceTexturePass.d.ts +41 -0
  227. package/dist/render/backend/webgpu/surfaceTexturePass.js +228 -0
  228. package/dist/render/backend/webgpu/textPass.d.ts +73 -0
  229. package/dist/render/backend/webgpu/textPass.js +190 -0
  230. package/dist/render/backend/webgpu/uniformRing.d.ts +133 -0
  231. package/dist/render/backend/webgpu/uniformRing.js +208 -0
  232. package/dist/render/backend/webgpu/waterPass.d.ts +73 -0
  233. package/dist/render/backend/webgpu/waterPass.js +160 -0
  234. package/dist/render/backend/webgpu/windStreakPass.d.ts +46 -0
  235. package/dist/render/backend/webgpu/windStreakPass.js +153 -0
  236. package/dist/render/billboard.d.ts +27 -0
  237. package/dist/render/billboard.js +79 -0
  238. package/dist/render/bloomChain.d.ts +66 -0
  239. package/dist/render/bloomChain.js +83 -0
  240. package/dist/render/bloomPass.d.ts +54 -0
  241. package/dist/render/bloomPass.js +219 -0
  242. package/dist/render/boltBatch.d.ts +39 -0
  243. package/dist/render/boltBatch.js +121 -0
  244. package/dist/render/boltPool.d.ts +135 -0
  245. package/dist/render/boltPool.js +259 -0
  246. package/dist/render/boom.d.ts +46 -0
  247. package/dist/render/boom.js +81 -0
  248. package/dist/render/camera.d.ts +119 -0
  249. package/dist/render/camera.js +304 -0
  250. package/dist/render/causticsRenderer.d.ts +63 -0
  251. package/dist/render/causticsRenderer.js +119 -0
  252. package/dist/render/cinematicCamera.d.ts +102 -0
  253. package/dist/render/cinematicCamera.js +227 -0
  254. package/dist/render/clusteredLights.d.ts +260 -0
  255. package/dist/render/clusteredLights.js +479 -0
  256. package/dist/render/colourGrade.d.ts +62 -0
  257. package/dist/render/colourGrade.js +91 -0
  258. package/dist/render/compute.d.ts +74 -0
  259. package/dist/render/compute.js +8 -0
  260. package/dist/render/contextLoss.d.ts +32 -0
  261. package/dist/render/contextLoss.js +46 -0
  262. package/dist/render/debugLines.d.ts +75 -0
  263. package/dist/render/debugLines.js +281 -0
  264. package/dist/render/decalPass.d.ts +34 -0
  265. package/dist/render/decalPass.js +103 -0
  266. package/dist/render/decalProjector.d.ts +140 -0
  267. package/dist/render/decalProjector.js +282 -0
  268. package/dist/render/decalQueue.d.ts +53 -0
  269. package/dist/render/decalQueue.js +87 -0
  270. package/dist/render/depthConvention.d.ts +314 -0
  271. package/dist/render/depthConvention.js +346 -0
  272. package/dist/render/drawingBuffer.d.ts +52 -0
  273. package/dist/render/drawingBuffer.js +67 -0
  274. package/dist/render/emptyTexture.d.ts +60 -0
  275. package/dist/render/emptyTexture.js +103 -0
  276. package/dist/render/envProbeArray.d.ts +85 -0
  277. package/dist/render/envProbeArray.js +164 -0
  278. package/dist/render/equirectToCube.d.ts +54 -0
  279. package/dist/render/equirectToCube.js +123 -0
  280. package/dist/render/flockGeometry.d.ts +23 -0
  281. package/dist/render/flockGeometry.js +43 -0
  282. package/dist/render/flockRenderer.d.ts +37 -0
  283. package/dist/render/flockRenderer.js +70 -0
  284. package/dist/render/frame/arena.d.ts +32 -0
  285. package/dist/render/frame/arena.js +65 -0
  286. package/dist/render/frame/index.d.ts +18 -0
  287. package/dist/render/frame/index.js +4 -0
  288. package/dist/render/frame/replay.d.ts +34 -0
  289. package/dist/render/frame/replay.js +48 -0
  290. package/dist/render/frame/resources.d.ts +25 -0
  291. package/dist/render/frame/resources.js +55 -0
  292. package/dist/render/frame/schedule.d.ts +37 -0
  293. package/dist/render/frame/schedule.js +61 -0
  294. package/dist/render/frameView.d.ts +19 -0
  295. package/dist/render/frameView.js +1 -0
  296. package/dist/render/gizmo.d.ts +236 -0
  297. package/dist/render/gizmo.js +727 -0
  298. package/dist/render/globalMedium.d.ts +124 -0
  299. package/dist/render/globalMedium.js +100 -0
  300. package/dist/render/globalMediumPass.d.ts +101 -0
  301. package/dist/render/globalMediumPass.js +250 -0
  302. package/dist/render/gpuCapability.d.ts +111 -0
  303. package/dist/render/gpuCapability.js +194 -0
  304. package/dist/render/gpuTimer.d.ts +87 -0
  305. package/dist/render/gpuTimer.js +145 -0
  306. package/dist/render/halfFloat.d.ts +4 -0
  307. package/dist/render/halfFloat.js +38 -0
  308. package/dist/render/handleRegistry.d.ts +54 -0
  309. package/dist/render/handleRegistry.js +84 -0
  310. package/dist/render/iesProfile.d.ts +64 -0
  311. package/dist/render/iesProfile.js +179 -0
  312. package/dist/render/imageTexels.d.ts +50 -0
  313. package/dist/render/imageTexels.js +91 -0
  314. package/dist/render/instancedMesh.d.ts +48 -0
  315. package/dist/render/instancedMesh.js +127 -0
  316. package/dist/render/instances.d.ts +69 -0
  317. package/dist/render/instances.js +52 -0
  318. package/dist/render/lightBudget.d.ts +397 -0
  319. package/dist/render/lightBudget.js +524 -0
  320. package/dist/render/lightMatrix.d.ts +3 -0
  321. package/dist/render/lightMatrix.js +45 -0
  322. package/dist/render/lightVolumeDraw.d.ts +132 -0
  323. package/dist/render/lightVolumeDraw.js +181 -0
  324. package/dist/render/lineBatch.d.ts +60 -0
  325. package/dist/render/lineBatch.js +160 -0
  326. package/dist/render/linePoints.d.ts +33 -0
  327. package/dist/render/linePoints.js +46 -0
  328. package/dist/render/livePointShadowSet.d.ts +72 -0
  329. package/dist/render/livePointShadowSet.js +258 -0
  330. package/dist/render/lod.d.ts +35 -0
  331. package/dist/render/lod.js +65 -0
  332. package/dist/render/mesh.d.ts +177 -0
  333. package/dist/render/mesh.js +466 -0
  334. package/dist/render/occlusion.d.ts +81 -0
  335. package/dist/render/occlusion.js +378 -0
  336. package/dist/render/oitPass.d.ts +67 -0
  337. package/dist/render/oitPass.js +213 -0
  338. package/dist/render/orderIndependent.d.ts +92 -0
  339. package/dist/render/orderIndependent.js +108 -0
  340. package/dist/render/particleBatch.d.ts +140 -0
  341. package/dist/render/particleBatch.js +186 -0
  342. package/dist/render/particleMaterial.d.ts +54 -0
  343. package/dist/render/particleMaterial.js +42 -0
  344. package/dist/render/particlePool.d.ts +124 -0
  345. package/dist/render/particlePool.js +182 -0
  346. package/dist/render/pass.d.ts +195 -0
  347. package/dist/render/pass.js +9 -0
  348. package/dist/render/passTarget.d.ts +86 -0
  349. package/dist/render/passTarget.js +121 -0
  350. package/dist/render/pickable.d.ts +31 -0
  351. package/dist/render/pickable.js +172 -0
  352. package/dist/render/planarReflection.d.ts +59 -0
  353. package/dist/render/planarReflection.js +194 -0
  354. package/dist/render/planarReflectionDraw.d.ts +31 -0
  355. package/dist/render/planarReflectionDraw.js +65 -0
  356. package/dist/render/plumeGeometry.d.ts +25 -0
  357. package/dist/render/plumeGeometry.js +61 -0
  358. package/dist/render/plumeMaterial.d.ts +31 -0
  359. package/dist/render/plumeMaterial.js +64 -0
  360. package/dist/render/plumeRenderer.d.ts +96 -0
  361. package/dist/render/plumeRenderer.js +185 -0
  362. package/dist/render/pointLightSelection.d.ts +175 -0
  363. package/dist/render/pointLightSelection.js +301 -0
  364. package/dist/render/pointShadowArray.d.ts +95 -0
  365. package/dist/render/pointShadowArray.js +219 -0
  366. package/dist/render/pointShadowBudget.d.ts +118 -0
  367. package/dist/render/pointShadowBudget.js +221 -0
  368. package/dist/render/pointShadowImage.d.ts +265 -0
  369. package/dist/render/pointShadowImage.js +339 -0
  370. package/dist/render/pointShadowMap.d.ts +93 -0
  371. package/dist/render/pointShadowMap.js +167 -0
  372. package/dist/render/pointShadowSystem.d.ts +195 -0
  373. package/dist/render/pointShadowSystem.js +336 -0
  374. package/dist/render/prefilterEnvMap.d.ts +124 -0
  375. package/dist/render/prefilterEnvMap.js +146 -0
  376. package/dist/render/prefilterPass.d.ts +44 -0
  377. package/dist/render/prefilterPass.js +98 -0
  378. package/dist/render/probeGrid.d.ts +122 -0
  379. package/dist/render/probeGrid.js +174 -0
  380. package/dist/render/rainField.d.ts +99 -0
  381. package/dist/render/rainField.js +168 -0
  382. package/dist/render/reflectionProbe.d.ts +188 -0
  383. package/dist/render/reflectionProbe.js +437 -0
  384. package/dist/render/renderQuality.d.ts +699 -0
  385. package/dist/render/renderQuality.js +293 -0
  386. package/dist/render/rendererHarness.d.ts +39 -0
  387. package/dist/render/rendererHarness.js +185 -0
  388. package/dist/render/resolutionGovernor.d.ts +107 -0
  389. package/dist/render/resolutionGovernor.js +144 -0
  390. package/dist/render/scatterDeform.d.ts +17 -0
  391. package/dist/render/scatterDeform.js +46 -0
  392. package/dist/render/sceneTarget.d.ts +288 -0
  393. package/dist/render/sceneTarget.js +856 -0
  394. package/dist/render/screenSpaceReflection.d.ts +233 -0
  395. package/dist/render/screenSpaceReflection.js +415 -0
  396. package/dist/render/sdfFont.d.ts +77 -0
  397. package/dist/render/sdfFont.js +86 -0
  398. package/dist/render/sdfTextLayout.d.ts +46 -0
  399. package/dist/render/sdfTextLayout.js +145 -0
  400. package/dist/render/sdfTextRenderer.d.ts +75 -0
  401. package/dist/render/sdfTextRenderer.js +194 -0
  402. package/dist/render/seaState.d.ts +25 -0
  403. package/dist/render/seaState.js +34 -0
  404. package/dist/render/segmentQuads.d.ts +29 -0
  405. package/dist/render/segmentQuads.js +75 -0
  406. package/dist/render/shader.d.ts +5 -0
  407. package/dist/render/shader.js +172 -0
  408. package/dist/render/shaders/ambientOcclusion.d.ts +45 -0
  409. package/dist/render/shaders/ambientOcclusion.js +352 -0
  410. package/dist/render/shaders/arcane.d.ts +19 -0
  411. package/dist/render/shaders/arcane.js +102 -0
  412. package/dist/render/shaders/bloom.d.ts +70 -0
  413. package/dist/render/shaders/bloom.js +227 -0
  414. package/dist/render/shaders/bolt.d.ts +17 -0
  415. package/dist/render/shaders/bolt.js +161 -0
  416. package/dist/render/shaders/caustics.d.ts +38 -0
  417. package/dist/render/shaders/caustics.js +167 -0
  418. package/dist/render/shaders/conditionals.d.ts +21 -0
  419. package/dist/render/shaders/conditionals.js +55 -0
  420. package/dist/render/shaders/decalProject.d.ts +25 -0
  421. package/dist/render/shaders/decalProject.js +125 -0
  422. package/dist/render/shaders/depth.d.ts +14 -0
  423. package/dist/render/shaders/depth.js +114 -0
  424. package/dist/render/shaders/depthOfField.d.ts +41 -0
  425. package/dist/render/shaders/depthOfField.js +139 -0
  426. package/dist/render/shaders/film.d.ts +15 -0
  427. package/dist/render/shaders/film.js +283 -0
  428. package/dist/render/shaders/fire.d.ts +12 -0
  429. package/dist/render/shaders/fire.js +178 -0
  430. package/dist/render/shaders/flat/directionalShadow.d.ts +1 -0
  431. package/dist/render/shaders/flat/directionalShadow.js +195 -0
  432. package/dist/render/shaders/flat/index.d.ts +135 -0
  433. package/dist/render/shaders/flat/index.js +387 -0
  434. package/dist/render/shaders/flat/lobes.d.ts +1 -0
  435. package/dist/render/shaders/flat/lobes.js +398 -0
  436. package/dist/render/shaders/flat/main.d.ts +2 -0
  437. package/dist/render/shaders/flat/main.js +1630 -0
  438. package/dist/render/shaders/flat/pointShadow.d.ts +1 -0
  439. package/dist/render/shaders/flat/pointShadow.js +322 -0
  440. package/dist/render/shaders/flat/preamble.d.ts +15 -0
  441. package/dist/render/shaders/flat/preamble.js +864 -0
  442. package/dist/render/shaders/flat/probeGrid.d.ts +21 -0
  443. package/dist/render/shaders/flat/probeGrid.js +151 -0
  444. package/dist/render/shaders/flat/surface.d.ts +2 -0
  445. package/dist/render/shaders/flat/surface.js +40 -0
  446. package/dist/render/shaders/flock.d.ts +11 -0
  447. package/dist/render/shaders/flock.js +102 -0
  448. package/dist/render/shaders/fog.d.ts +37 -0
  449. package/dist/render/shaders/fog.js +98 -0
  450. package/dist/render/shaders/fullscreen.d.ts +16 -0
  451. package/dist/render/shaders/fullscreen.js +27 -0
  452. package/dist/render/shaders/generated/ambientOcclusion.wgsl.d.ts +65 -0
  453. package/dist/render/shaders/generated/ambientOcclusion.wgsl.js +71 -0
  454. package/dist/render/shaders/generated/arcane.wgsl.d.ts +90 -0
  455. package/dist/render/shaders/generated/arcane.wgsl.js +96 -0
  456. package/dist/render/shaders/generated/bloom.wgsl.d.ts +69 -0
  457. package/dist/render/shaders/generated/bloom.wgsl.js +75 -0
  458. package/dist/render/shaders/generated/bolt.wgsl.d.ts +118 -0
  459. package/dist/render/shaders/generated/bolt.wgsl.js +124 -0
  460. package/dist/render/shaders/generated/caustics.wgsl.d.ts +118 -0
  461. package/dist/render/shaders/generated/caustics.wgsl.js +124 -0
  462. package/dist/render/shaders/generated/decalProject.wgsl.d.ts +61 -0
  463. package/dist/render/shaders/generated/decalProject.wgsl.js +67 -0
  464. package/dist/render/shaders/generated/depth.wgsl.d.ts +131 -0
  465. package/dist/render/shaders/generated/depth.wgsl.js +137 -0
  466. package/dist/render/shaders/generated/film.wgsl.d.ts +134 -0
  467. package/dist/render/shaders/generated/film.wgsl.js +140 -0
  468. package/dist/render/shaders/generated/fire.wgsl.d.ts +128 -0
  469. package/dist/render/shaders/generated/fire.wgsl.js +134 -0
  470. package/dist/render/shaders/generated/flat.wgsl.d.ts +9163 -0
  471. package/dist/render/shaders/generated/flat.wgsl.js +9192 -0
  472. package/dist/render/shaders/generated/flock.wgsl.d.ts +73 -0
  473. package/dist/render/shaders/generated/flock.wgsl.js +79 -0
  474. package/dist/render/shaders/generated/fullscreen.wgsl.d.ts +12 -0
  475. package/dist/render/shaders/generated/fullscreen.wgsl.js +18 -0
  476. package/dist/render/shaders/generated/globalMedium.wgsl.d.ts +130 -0
  477. package/dist/render/shaders/generated/globalMedium.wgsl.js +136 -0
  478. package/dist/render/shaders/generated/lightVolume.wgsl.d.ts +230 -0
  479. package/dist/render/shaders/generated/lightVolume.wgsl.js +239 -0
  480. package/dist/render/shaders/generated/line.wgsl.d.ts +128 -0
  481. package/dist/render/shaders/generated/line.wgsl.js +134 -0
  482. package/dist/render/shaders/generated/octahedralResolve.wgsl.d.ts +51 -0
  483. package/dist/render/shaders/generated/octahedralResolve.wgsl.js +57 -0
  484. package/dist/render/shaders/generated/oitResolve.wgsl.d.ts +23 -0
  485. package/dist/render/shaders/generated/oitResolve.wgsl.js +29 -0
  486. package/dist/render/shaders/generated/panel.wgsl.d.ts +48 -0
  487. package/dist/render/shaders/generated/panel.wgsl.js +54 -0
  488. package/dist/render/shaders/generated/particle.wgsl.d.ts +332 -0
  489. package/dist/render/shaders/generated/particle.wgsl.js +338 -0
  490. package/dist/render/shaders/generated/prefilter.wgsl.d.ts +61 -0
  491. package/dist/render/shaders/generated/prefilter.wgsl.js +67 -0
  492. package/dist/render/shaders/generated/rush.wgsl.d.ts +131 -0
  493. package/dist/render/shaders/generated/rush.wgsl.js +137 -0
  494. package/dist/render/shaders/generated/scatter.wgsl.d.ts +195 -0
  495. package/dist/render/shaders/generated/scatter.wgsl.js +201 -0
  496. package/dist/render/shaders/generated/sdfText.wgsl.d.ts +69 -0
  497. package/dist/render/shaders/generated/sdfText.wgsl.js +75 -0
  498. package/dist/render/shaders/generated/sky.wgsl.d.ts +100 -0
  499. package/dist/render/shaders/generated/sky.wgsl.js +106 -0
  500. package/dist/render/shaders/generated/smoke.wgsl.d.ts +85 -0
  501. package/dist/render/shaders/generated/smoke.wgsl.js +91 -0
  502. package/dist/render/shaders/generated/ssrResolve.wgsl.d.ts +18 -0
  503. package/dist/render/shaders/generated/ssrResolve.wgsl.js +24 -0
  504. package/dist/render/shaders/generated/ssrTrace.wgsl.d.ts +86 -0
  505. package/dist/render/shaders/generated/ssrTrace.wgsl.js +92 -0
  506. package/dist/render/shaders/generated/temporalResolve.wgsl.d.ts +46 -0
  507. package/dist/render/shaders/generated/temporalResolve.wgsl.js +52 -0
  508. package/dist/render/shaders/generated/text.wgsl.d.ts +98 -0
  509. package/dist/render/shaders/generated/text.wgsl.js +104 -0
  510. package/dist/render/shaders/generated/water.wgsl.d.ts +247 -0
  511. package/dist/render/shaders/generated/water.wgsl.js +253 -0
  512. package/dist/render/shaders/generated/windStreaks.wgsl.d.ts +73 -0
  513. package/dist/render/shaders/generated/windStreaks.wgsl.js +79 -0
  514. package/dist/render/shaders/gerstner.d.ts +21 -0
  515. package/dist/render/shaders/gerstner.js +110 -0
  516. package/dist/render/shaders/globalMedium.d.ts +56 -0
  517. package/dist/render/shaders/globalMedium.js +393 -0
  518. package/dist/render/shaders/lightVolume.d.ts +61 -0
  519. package/dist/render/shaders/lightVolume.js +527 -0
  520. package/dist/render/shaders/line.d.ts +18 -0
  521. package/dist/render/shaders/line.js +122 -0
  522. package/dist/render/shaders/morph.d.ts +26 -0
  523. package/dist/render/shaders/morph.js +61 -0
  524. package/dist/render/shaders/octahedral.d.ts +76 -0
  525. package/dist/render/shaders/octahedral.js +161 -0
  526. package/dist/render/shaders/octahedralResolve.d.ts +25 -0
  527. package/dist/render/shaders/octahedralResolve.js +81 -0
  528. package/dist/render/shaders/oitResolve.d.ts +17 -0
  529. package/dist/render/shaders/oitResolve.js +42 -0
  530. package/dist/render/shaders/outputTransform.d.ts +37 -0
  531. package/dist/render/shaders/outputTransform.js +106 -0
  532. package/dist/render/shaders/panel.d.ts +17 -0
  533. package/dist/render/shaders/panel.js +50 -0
  534. package/dist/render/shaders/particle.d.ts +82 -0
  535. package/dist/render/shaders/particle.js +431 -0
  536. package/dist/render/shaders/prefilter.d.ts +37 -0
  537. package/dist/render/shaders/prefilter.js +276 -0
  538. package/dist/render/shaders/rush.d.ts +21 -0
  539. package/dist/render/shaders/rush.js +355 -0
  540. package/dist/render/shaders/scatter.d.ts +14 -0
  541. package/dist/render/shaders/scatter.js +206 -0
  542. package/dist/render/shaders/sdfText.d.ts +9 -0
  543. package/dist/render/shaders/sdfText.js +65 -0
  544. package/dist/render/shaders/skinning.d.ts +17 -0
  545. package/dist/render/shaders/skinning.js +59 -0
  546. package/dist/render/shaders/sky.d.ts +10 -0
  547. package/dist/render/shaders/sky.js +242 -0
  548. package/dist/render/shaders/smoke.d.ts +8 -0
  549. package/dist/render/shaders/smoke.js +88 -0
  550. package/dist/render/shaders/ssrResolve.d.ts +15 -0
  551. package/dist/render/shaders/ssrResolve.js +28 -0
  552. package/dist/render/shaders/ssrTrace.d.ts +22 -0
  553. package/dist/render/shaders/ssrTrace.js +230 -0
  554. package/dist/render/shaders/tangentFrame.d.ts +17 -0
  555. package/dist/render/shaders/tangentFrame.js +70 -0
  556. package/dist/render/shaders/temporalResolve.d.ts +1 -0
  557. package/dist/render/shaders/temporalResolve.js +150 -0
  558. package/dist/render/shaders/text.d.ts +17 -0
  559. package/dist/render/shaders/text.js +155 -0
  560. package/dist/render/shaders/vertexChannel.d.ts +39 -0
  561. package/dist/render/shaders/vertexChannel.js +69 -0
  562. package/dist/render/shaders/water.d.ts +18 -0
  563. package/dist/render/shaders/water.js +354 -0
  564. package/dist/render/shaders/windStreaks.d.ts +14 -0
  565. package/dist/render/shaders/windStreaks.js +129 -0
  566. package/dist/render/shadowCasters.d.ts +107 -0
  567. package/dist/render/shadowCasters.js +1 -0
  568. package/dist/render/shadowMap.d.ts +10 -0
  569. package/dist/render/shadowMap.js +80 -0
  570. package/dist/render/shotPlacement.d.ts +80 -0
  571. package/dist/render/shotPlacement.js +183 -0
  572. package/dist/render/skinPalette.d.ts +90 -0
  573. package/dist/render/skinPalette.js +136 -0
  574. package/dist/render/ssrPass.d.ts +59 -0
  575. package/dist/render/ssrPass.js +196 -0
  576. package/dist/render/surfaceSheet.d.ts +52 -0
  577. package/dist/render/surfaceSheet.js +99 -0
  578. package/dist/render/surfaceTexture.d.ts +197 -0
  579. package/dist/render/surfaceTexture.js +116 -0
  580. package/dist/render/temporalAa.d.ts +104 -0
  581. package/dist/render/temporalAa.js +194 -0
  582. package/dist/render/temporalPass.d.ts +54 -0
  583. package/dist/render/temporalPass.js +135 -0
  584. package/dist/render/textLayout.d.ts +88 -0
  585. package/dist/render/textLayout.js +201 -0
  586. package/dist/render/textRenderer.d.ts +32 -0
  587. package/dist/render/textRenderer.js +176 -0
  588. package/dist/render/thirdPersonCamera.d.ts +272 -0
  589. package/dist/render/thirdPersonCamera.js +479 -0
  590. package/dist/render/trample.d.ts +57 -0
  591. package/dist/render/trample.js +134 -0
  592. package/dist/render/translucentQueue.d.ts +76 -0
  593. package/dist/render/translucentQueue.js +90 -0
  594. package/dist/render/uniformVectorBudget.d.ts +105 -0
  595. package/dist/render/uniformVectorBudget.js +201 -0
  596. package/dist/render/uploadStep.d.ts +14 -0
  597. package/dist/render/uploadStep.js +14 -0
  598. package/dist/render/vertexDefaults.d.ts +48 -0
  599. package/dist/render/vertexDefaults.js +111 -0
  600. package/dist/render/visibility.d.ts +22 -0
  601. package/dist/render/visibility.js +47 -0
  602. package/dist/render/waterDraw.d.ts +57 -0
  603. package/dist/render/waterDraw.js +102 -0
  604. package/dist/render/waterGrid.d.ts +62 -0
  605. package/dist/render/waterGrid.js +151 -0
  606. package/dist/render/waterRenderer.d.ts +163 -0
  607. package/dist/render/waterRenderer.js +165 -0
  608. package/dist/render/wind.d.ts +45 -0
  609. package/dist/render/wind.js +32 -0
  610. package/dist/render/windField.d.ts +34 -0
  611. package/dist/render/windField.js +13 -0
  612. package/dist/render/windStreakDraw.d.ts +73 -0
  613. package/dist/render/windStreakDraw.js +86 -0
  614. package/dist/render/windStreakRenderer.d.ts +37 -0
  615. package/dist/render/windStreakRenderer.js +86 -0
  616. package/dist/scene/node.d.ts +128 -0
  617. package/dist/scene/node.js +319 -0
  618. package/dist/scene/visit.d.ts +38 -0
  619. package/dist/scene/visit.js +43 -0
  620. package/dist/ui/clipMime.d.ts +46 -0
  621. package/dist/ui/clipMime.js +88 -0
  622. package/dist/ui/exportTarget.d.ts +305 -0
  623. package/dist/ui/exportTarget.js +368 -0
  624. package/dist/ui/frameOverlay.d.ts +59 -0
  625. package/dist/ui/frameOverlay.js +76 -0
  626. package/dist/ui/framePacer.d.ts +142 -0
  627. package/dist/ui/framePacer.js +284 -0
  628. package/dist/ui/frameRecorder.d.ts +188 -0
  629. package/dist/ui/frameRecorder.js +221 -0
  630. package/dist/ui/fullscreen.d.ts +72 -0
  631. package/dist/ui/fullscreen.js +92 -0
  632. package/dist/ui/pixelCursor.d.ts +28 -0
  633. package/dist/ui/pixelCursor.js +66 -0
  634. package/dist/ui/splash.d.ts +86 -0
  635. package/dist/ui/splash.js +300 -0
  636. package/dist/ui/stillFrame.d.ts +22 -0
  637. package/dist/ui/stillFrame.js +40 -0
  638. package/package.json +60 -0
  639. package/src/behavior/behaviorTree.ts +346 -0
  640. package/src/build/shaderComments.ts +0 -0
  641. package/src/cinematic/player.ts +209 -0
  642. package/src/cinematic/script.ts +231 -0
  643. package/src/core/bootGate.ts +49 -0
  644. package/src/core/loadTracker.ts +144 -0
  645. package/src/core/loop.ts +211 -0
  646. package/src/core/messageQueue.ts +145 -0
  647. package/src/core/onceSet.ts +65 -0
  648. package/src/core/preferences.ts +177 -0
  649. package/src/core/remoteSave.ts +347 -0
  650. package/src/core/rng.ts +101 -0
  651. package/src/core/stepBudget.ts +136 -0
  652. package/src/core/storage.ts +114 -0
  653. package/src/core/tickTrace.ts +129 -0
  654. package/src/core/timeCurve.ts +175 -0
  655. package/src/core/withDefaults.ts +28 -0
  656. package/src/dev/contactProbe.ts +115 -0
  657. package/src/dev/fpsMeter.ts +101 -0
  658. package/src/environment/celestialClock.ts +385 -0
  659. package/src/geometry/decal.ts +260 -0
  660. package/src/geometry/filmPatch.ts +158 -0
  661. package/src/geometry/growable.ts +165 -0
  662. package/src/geometry/lightVolume.ts +161 -0
  663. package/src/geometry/meshBuilder.ts +1397 -0
  664. package/src/geometry/pixelFont.ts +189 -0
  665. package/src/geometry/ribbon.ts +790 -0
  666. package/src/geometry/shellFill.ts +265 -0
  667. package/src/geometry/spline.ts +659 -0
  668. package/src/geometry/tangents.ts +173 -0
  669. package/src/geometry/textMesh.ts +96 -0
  670. package/src/geometry/treeBuilder.ts +114 -0
  671. package/src/host/display.ts +180 -0
  672. package/src/host/files.ts +77 -0
  673. package/src/host/lifecycle.ts +63 -0
  674. package/src/host/platformServices.ts +23 -0
  675. package/src/host/screen.ts +134 -0
  676. package/src/index.ts +730 -0
  677. package/src/input/actionMap.ts +377 -0
  678. package/src/input/activeDevice.ts +86 -0
  679. package/src/input/gamepadIdentity.ts +131 -0
  680. package/src/input/gamepadMapping.ts +121 -0
  681. package/src/input/input.ts +872 -0
  682. package/src/input/inputHarness.ts +226 -0
  683. package/src/input/rightGesture.ts +76 -0
  684. package/src/input/rumble.ts +138 -0
  685. package/src/input/touchControls.ts +451 -0
  686. package/src/input/typingTarget.ts +26 -0
  687. package/src/math/bounds.ts +153 -0
  688. package/src/math/color.ts +37 -0
  689. package/src/math/exact.ts +274 -0
  690. package/src/math/frustum.ts +115 -0
  691. package/src/math/intersect.ts +228 -0
  692. package/src/math/scalar.ts +109 -0
  693. package/src/math/spring.ts +106 -0
  694. package/src/nav/navGraph.ts +168 -0
  695. package/src/nav/navPath.ts +217 -0
  696. package/src/nav/navSearch.ts +200 -0
  697. package/src/physics/boxSurface.ts +96 -0
  698. package/src/physics/colliderSurface.ts +213 -0
  699. package/src/physics/compositeSurface.ts +111 -0
  700. package/src/physics/heightSurface.ts +234 -0
  701. package/src/physics/ribbonSurface.ts +642 -0
  702. package/src/render/ambientOcclusionPass.ts +200 -0
  703. package/src/render/areaLights.ts +194 -0
  704. package/src/render/areaShadowSet.ts +405 -0
  705. package/src/render/atmosphere.ts +186 -0
  706. package/src/render/backend/api.ts +802 -0
  707. package/src/render/backend/budget.ts +139 -0
  708. package/src/render/backend/createRenderer.ts +343 -0
  709. package/src/render/backend/deadline.ts +37 -0
  710. package/src/render/backend/probe.ts +152 -0
  711. package/src/render/backend/select.ts +288 -0
  712. package/src/render/backend/timer.ts +59 -0
  713. package/src/render/backend/webgl2/instanced.ts +46 -0
  714. package/src/render/backend/webgl2/morphTexture.ts +58 -0
  715. package/src/render/backend/webgl2/renderer.ts +7484 -0
  716. package/src/render/backend/webgl2/skinPaletteTexture.ts +70 -0
  717. package/src/render/backend/webgpu/boltPass.ts +205 -0
  718. package/src/render/backend/webgpu/buffers.ts +553 -0
  719. package/src/render/backend/webgpu/causticsPass.ts +174 -0
  720. package/src/render/backend/webgpu/clusterBinner.ts +259 -0
  721. package/src/render/backend/webgpu/depthPass.ts +261 -0
  722. package/src/render/backend/webgpu/device.ts +148 -0
  723. package/src/render/backend/webgpu/drawCommand.ts +79 -0
  724. package/src/render/backend/webgpu/environmentTexels.ts +96 -0
  725. package/src/render/backend/webgpu/filmPass.ts +123 -0
  726. package/src/render/backend/webgpu/flatPass.ts +635 -0
  727. package/src/render/backend/webgpu/flockPass.ts +163 -0
  728. package/src/render/backend/webgpu/gpuTimestamps.ts +255 -0
  729. package/src/render/backend/webgpu/insetPass.ts +123 -0
  730. package/src/render/backend/webgpu/instanced.ts +55 -0
  731. package/src/render/backend/webgpu/lightVolumePass.ts +203 -0
  732. package/src/render/backend/webgpu/linePass.ts +270 -0
  733. package/src/render/backend/webgpu/morphTexture.ts +61 -0
  734. package/src/render/backend/webgpu/panelPass.ts +138 -0
  735. package/src/render/backend/webgpu/particlePass.ts +370 -0
  736. package/src/render/backend/webgpu/pipelineCache.ts +152 -0
  737. package/src/render/backend/webgpu/plumePass.ts +292 -0
  738. package/src/render/backend/webgpu/pointShadowPass.ts +368 -0
  739. package/src/render/backend/webgpu/postPass.ts +470 -0
  740. package/src/render/backend/webgpu/probePass.ts +218 -0
  741. package/src/render/backend/webgpu/reflectionPass.ts +137 -0
  742. package/src/render/backend/webgpu/renderer.ts +13004 -0
  743. package/src/render/backend/webgpu/scatterPass.ts +354 -0
  744. package/src/render/backend/webgpu/sdfTextPass.ts +220 -0
  745. package/src/render/backend/webgpu/shaderModules.ts +49 -0
  746. package/src/render/backend/webgpu/shaders/clusterBin.wgsl.ts +219 -0
  747. package/src/render/backend/webgpu/skinPaletteRing.ts +105 -0
  748. package/src/render/backend/webgpu/skinPaletteTexture.ts +79 -0
  749. package/src/render/backend/webgpu/skyPass.ts +85 -0
  750. package/src/render/backend/webgpu/surfaceTexturePass.ts +257 -0
  751. package/src/render/backend/webgpu/textPass.ts +224 -0
  752. package/src/render/backend/webgpu/uniformRing.ts +228 -0
  753. package/src/render/backend/webgpu/waterPass.ts +211 -0
  754. package/src/render/backend/webgpu/windStreakPass.ts +196 -0
  755. package/src/render/billboard.ts +108 -0
  756. package/src/render/bloomChain.ts +101 -0
  757. package/src/render/bloomPass.ts +256 -0
  758. package/src/render/boltBatch.ts +141 -0
  759. package/src/render/boltPool.ts +360 -0
  760. package/src/render/boom.ts +123 -0
  761. package/src/render/camera.ts +348 -0
  762. package/src/render/causticsRenderer.ts +171 -0
  763. package/src/render/cinematicCamera.ts +278 -0
  764. package/src/render/clusteredLights.ts +598 -0
  765. package/src/render/colourGrade.ts +109 -0
  766. package/src/render/compute.ts +83 -0
  767. package/src/render/contextLoss.ts +50 -0
  768. package/src/render/debugLines.ts +411 -0
  769. package/src/render/decalPass.ts +124 -0
  770. package/src/render/decalProjector.ts +390 -0
  771. package/src/render/decalQueue.ts +110 -0
  772. package/src/render/depthConvention.ts +383 -0
  773. package/src/render/drawingBuffer.ts +89 -0
  774. package/src/render/emptyTexture.ts +130 -0
  775. package/src/render/envProbeArray.ts +201 -0
  776. package/src/render/equirectToCube.ts +160 -0
  777. package/src/render/flockGeometry.ts +53 -0
  778. package/src/render/flockRenderer.ts +111 -0
  779. package/src/render/frame/arena.ts +93 -0
  780. package/src/render/frame/index.ts +29 -0
  781. package/src/render/frame/replay.ts +50 -0
  782. package/src/render/frame/resources.ts +61 -0
  783. package/src/render/frame/schedule.ts +85 -0
  784. package/src/render/frameView.ts +20 -0
  785. package/src/render/gizmo.ts +923 -0
  786. package/src/render/globalMedium.ts +154 -0
  787. package/src/render/globalMediumPass.ts +323 -0
  788. package/src/render/gpuCapability.ts +244 -0
  789. package/src/render/gpuTimer.ts +182 -0
  790. package/src/render/halfFloat.ts +39 -0
  791. package/src/render/handleRegistry.ts +96 -0
  792. package/src/render/iesProfile.ts +215 -0
  793. package/src/render/imageTexels.ts +109 -0
  794. package/src/render/instancedMesh.ts +187 -0
  795. package/src/render/instances.ts +92 -0
  796. package/src/render/lightBudget.ts +655 -0
  797. package/src/render/lightMatrix.ts +69 -0
  798. package/src/render/lightVolumeDraw.ts +216 -0
  799. package/src/render/lineBatch.ts +180 -0
  800. package/src/render/linePoints.ts +61 -0
  801. package/src/render/livePointShadowSet.ts +285 -0
  802. package/src/render/lod.ts +86 -0
  803. package/src/render/mesh.ts +536 -0
  804. package/src/render/occlusion.ts +406 -0
  805. package/src/render/oitPass.ts +230 -0
  806. package/src/render/orderIndependent.ts +136 -0
  807. package/src/render/particleBatch.ts +299 -0
  808. package/src/render/particleMaterial.ts +84 -0
  809. package/src/render/particlePool.ts +291 -0
  810. package/src/render/pass.ts +203 -0
  811. package/src/render/passTarget.ts +225 -0
  812. package/src/render/pickable.ts +222 -0
  813. package/src/render/planarReflection.ts +233 -0
  814. package/src/render/planarReflectionDraw.ts +87 -0
  815. package/src/render/plumeGeometry.ts +75 -0
  816. package/src/render/plumeMaterial.ts +99 -0
  817. package/src/render/plumeRenderer.ts +272 -0
  818. package/src/render/pointLightSelection.ts +447 -0
  819. package/src/render/pointShadowArray.ts +276 -0
  820. package/src/render/pointShadowBudget.ts +305 -0
  821. package/src/render/pointShadowImage.ts +470 -0
  822. package/src/render/pointShadowMap.ts +228 -0
  823. package/src/render/pointShadowSystem.ts +408 -0
  824. package/src/render/prefilterEnvMap.ts +162 -0
  825. package/src/render/prefilterPass.ts +115 -0
  826. package/src/render/probeGrid.ts +248 -0
  827. package/src/render/rainField.ts +240 -0
  828. package/src/render/reflectionProbe.ts +530 -0
  829. package/src/render/renderQuality.ts +1054 -0
  830. package/src/render/rendererHarness.ts +214 -0
  831. package/src/render/resolutionGovernor.ts +189 -0
  832. package/src/render/scatterDeform.ts +72 -0
  833. package/src/render/sceneTarget.ts +1032 -0
  834. package/src/render/screenSpaceReflection.ts +524 -0
  835. package/src/render/sdfFont.ts +157 -0
  836. package/src/render/sdfTextLayout.ts +206 -0
  837. package/src/render/sdfTextRenderer.ts +233 -0
  838. package/src/render/seaState.ts +55 -0
  839. package/src/render/segmentQuads.ts +92 -0
  840. package/src/render/shader.ts +190 -0
  841. package/src/render/shaders/ambientOcclusion.ts +354 -0
  842. package/src/render/shaders/arcane.ts +103 -0
  843. package/src/render/shaders/bloom.ts +232 -0
  844. package/src/render/shaders/bolt.ts +164 -0
  845. package/src/render/shaders/caustics.ts +169 -0
  846. package/src/render/shaders/conditionals.ts +58 -0
  847. package/src/render/shaders/decalProject.ts +127 -0
  848. package/src/render/shaders/depth.ts +131 -0
  849. package/src/render/shaders/depthOfField.ts +141 -0
  850. package/src/render/shaders/film.ts +285 -0
  851. package/src/render/shaders/fire.ts +180 -0
  852. package/src/render/shaders/flat/directionalShadow.ts +196 -0
  853. package/src/render/shaders/flat/index.ts +502 -0
  854. package/src/render/shaders/flat/lobes.ts +399 -0
  855. package/src/render/shaders/flat/main.ts +1631 -0
  856. package/src/render/shaders/flat/pointShadow.ts +323 -0
  857. package/src/render/shaders/flat/preamble.ts +875 -0
  858. package/src/render/shaders/flat/probeGrid.ts +152 -0
  859. package/src/render/shaders/flat/surface.ts +41 -0
  860. package/src/render/shaders/flock.ts +103 -0
  861. package/src/render/shaders/fog.ts +99 -0
  862. package/src/render/shaders/fullscreen.ts +28 -0
  863. package/src/render/shaders/generated/ambientOcclusion.wgsl.ts +74 -0
  864. package/src/render/shaders/generated/arcane.wgsl.ts +98 -0
  865. package/src/render/shaders/generated/bloom.wgsl.ts +79 -0
  866. package/src/render/shaders/generated/bolt.wgsl.ts +127 -0
  867. package/src/render/shaders/generated/caustics.wgsl.ts +127 -0
  868. package/src/render/shaders/generated/decalProject.wgsl.ts +69 -0
  869. package/src/render/shaders/generated/depth.wgsl.ts +142 -0
  870. package/src/render/shaders/generated/film.wgsl.ts +143 -0
  871. package/src/render/shaders/generated/fire.wgsl.ts +137 -0
  872. package/src/render/shaders/generated/flat.wgsl.ts +9195 -0
  873. package/src/render/shaders/generated/flock.wgsl.ts +82 -0
  874. package/src/render/shaders/generated/fullscreen.wgsl.ts +20 -0
  875. package/src/render/shaders/generated/globalMedium.wgsl.ts +139 -0
  876. package/src/render/shaders/generated/lightVolume.wgsl.ts +242 -0
  877. package/src/render/shaders/generated/line.wgsl.ts +137 -0
  878. package/src/render/shaders/generated/octahedralResolve.wgsl.ts +60 -0
  879. package/src/render/shaders/generated/oitResolve.wgsl.ts +31 -0
  880. package/src/render/shaders/generated/panel.wgsl.ts +57 -0
  881. package/src/render/shaders/generated/particle.wgsl.ts +343 -0
  882. package/src/render/shaders/generated/prefilter.wgsl.ts +69 -0
  883. package/src/render/shaders/generated/rush.wgsl.ts +139 -0
  884. package/src/render/shaders/generated/scatter.wgsl.ts +205 -0
  885. package/src/render/shaders/generated/sdfText.wgsl.ts +78 -0
  886. package/src/render/shaders/generated/sky.wgsl.ts +109 -0
  887. package/src/render/shaders/generated/smoke.wgsl.ts +93 -0
  888. package/src/render/shaders/generated/ssrResolve.wgsl.ts +26 -0
  889. package/src/render/shaders/generated/ssrTrace.wgsl.ts +94 -0
  890. package/src/render/shaders/generated/temporalResolve.wgsl.ts +54 -0
  891. package/src/render/shaders/generated/text.wgsl.ts +107 -0
  892. package/src/render/shaders/generated/water.wgsl.ts +256 -0
  893. package/src/render/shaders/generated/windStreaks.wgsl.ts +82 -0
  894. package/src/render/shaders/gerstner.ts +110 -0
  895. package/src/render/shaders/globalMedium.ts +396 -0
  896. package/src/render/shaders/lightVolume.ts +546 -0
  897. package/src/render/shaders/line.ts +125 -0
  898. package/src/render/shaders/morph.ts +62 -0
  899. package/src/render/shaders/octahedral.ts +170 -0
  900. package/src/render/shaders/octahedralResolve.ts +83 -0
  901. package/src/render/shaders/oitResolve.ts +42 -0
  902. package/src/render/shaders/outputTransform.ts +107 -0
  903. package/src/render/shaders/panel.ts +51 -0
  904. package/src/render/shaders/particle.ts +438 -0
  905. package/src/render/shaders/prefilter.ts +278 -0
  906. package/src/render/shaders/rush.ts +357 -0
  907. package/src/render/shaders/scatter.ts +211 -0
  908. package/src/render/shaders/sdfText.ts +68 -0
  909. package/src/render/shaders/skinning.ts +59 -0
  910. package/src/render/shaders/sky.ts +243 -0
  911. package/src/render/shaders/smoke.ts +89 -0
  912. package/src/render/shaders/ssrResolve.ts +28 -0
  913. package/src/render/shaders/ssrTrace.ts +233 -0
  914. package/src/render/shaders/tangentFrame.ts +70 -0
  915. package/src/render/shaders/temporalResolve.ts +151 -0
  916. package/src/render/shaders/text.ts +156 -0
  917. package/src/render/shaders/vertexChannel.ts +71 -0
  918. package/src/render/shaders/water.ts +356 -0
  919. package/src/render/shaders/windStreaks.ts +130 -0
  920. package/src/render/shadowCasters.ts +124 -0
  921. package/src/render/shadowMap.ts +89 -0
  922. package/src/render/shotPlacement.ts +266 -0
  923. package/src/render/skinPalette.ts +157 -0
  924. package/src/render/ssrPass.ts +241 -0
  925. package/src/render/surfaceSheet.ts +158 -0
  926. package/src/render/surfaceTexture.ts +310 -0
  927. package/src/render/temporalAa.ts +221 -0
  928. package/src/render/temporalPass.ts +153 -0
  929. package/src/render/textLayout.ts +239 -0
  930. package/src/render/textRenderer.ts +201 -0
  931. package/src/render/thirdPersonCamera.ts +578 -0
  932. package/src/render/trample.ts +140 -0
  933. package/src/render/translucentQueue.ts +161 -0
  934. package/src/render/uniformVectorBudget.ts +246 -0
  935. package/src/render/uploadStep.ts +14 -0
  936. package/src/render/vertexDefaults.ts +115 -0
  937. package/src/render/visibility.ts +56 -0
  938. package/src/render/waterDraw.ts +167 -0
  939. package/src/render/waterGrid.ts +180 -0
  940. package/src/render/waterRenderer.ts +352 -0
  941. package/src/render/wind.ts +79 -0
  942. package/src/render/windField.ts +50 -0
  943. package/src/render/windStreakDraw.ts +131 -0
  944. package/src/render/windStreakRenderer.ts +130 -0
  945. package/src/scene/node.ts +336 -0
  946. package/src/scene/visit.ts +82 -0
  947. package/src/ui/clipMime.ts +109 -0
  948. package/src/ui/exportTarget.ts +491 -0
  949. package/src/ui/frameOverlay.ts +159 -0
  950. package/src/ui/framePacer.ts +351 -0
  951. package/src/ui/frameRecorder.ts +333 -0
  952. package/src/ui/fullscreen.ts +113 -0
  953. package/src/ui/pixelCursor.ts +99 -0
  954. package/src/ui/splash.ts +347 -0
  955. package/src/ui/stillFrame.ts +44 -0
@@ -0,0 +1,314 @@
1
+ /**
2
+ * Which way depth runs, in one place, because it is a decision every pass has to agree with.
3
+ *
4
+ * **Reversed-Z with a float depth attachment.** Clip space depth is mapped so the near plane is
5
+ * 1 and the far plane is 0, the compare is `greater` rather than `less`, and the buffer is cleared
6
+ * to 0 instead of 1. It is not a preference: a conventional buffer spends its precision
7
+ * hyperbolically, resolving about `z² / (near · 2^bits)` at distance `z`, so the near plane is the
8
+ * only control there is and every consumer ends up pushing it out and then pushing decals off
9
+ * surfaces to compensate.
10
+ *
11
+ * **What it buys, in the arithmetic that motivated it.** A float's exponent gives its resolution
12
+ * where the values are small, and reversed-Z puts *far* at zero — so the hyperbolic loss and the
13
+ * floating-point gain very nearly cancel and precision becomes roughly uniform with distance.
14
+ * A consumer measured what its absence costs: a street plate's letters held 7.5 mm proud of a 6 mm
15
+ * plate and a sign 15 mm proud of its board, neither a thickness anybody chose, and a near plane
16
+ * settled at 0.25 for a first-person camera that wanted 0.05 — 1.6x of precision surrendered
17
+ * permanently, because dropping it to 0.15 made every decal in the world blink.
18
+ *
19
+ * **This is the cure for a near-coincident seam and deliberately not for a coincident one.**
20
+ * `webgl2/renderer.ts` records taking a reversed-Z conversion off the table once, and that
21
+ * reasoning stands where it was written: two *exactly* coplanar surfaces have equal depth in exact
22
+ * arithmetic and no format separates equal numbers, which is what `POLYGON_OFFSET_FILL` is for.
23
+ * What reversed-Z fixes is the other case — surfaces a fraction of a millimetre apart, which a
24
+ * conventional buffer cannot tell apart past about forty metres and this one can.
25
+ *
26
+ * **Shadows are not reversed and that is deliberate.** The directional cascades are orthographic,
27
+ * where depth is already linear and a float buffer gains nothing, and the point shadows write with
28
+ * `always`. Converting them would mean flipping every comparison in the shadow shaders for no
29
+ * precision at all, so `SHADOW_FORMAT` and its passes keep the conventional sense and this module
30
+ * says nothing about them.
31
+ */
32
+ /**
33
+ * True while the engine renders its scene depth reversed.
34
+ *
35
+ * **It is `true`, on both backends, and this is what it took.** Nine attempts. The eight that
36
+ * failed were not wrong about the conversion — the compares, clears, clip corrections and formats
37
+ * were right early — they were wrong about *where to look*, and the note below on the instrument
38
+ * is the most reusable thing on this page.
39
+ *
40
+ * **What it is gated at.** Each backend against its own conventional output, at zero tolerance,
41
+ * across every published scene on a real GPU: **WebGL2's worst frame 7,348 pixels of 921,600** and
42
+ * **WebGPU's 11,832**, most a few hundred or none, and all of it seams resolving the other way,
43
+ * which is the improvement. The two backends against *each other* come to 443,035 pixels on their
44
+ * worst scene reversed against 443,039 conventional, so the conversion costs four pixels of the
45
+ * ordinary disagreement between two independent implementations of an animated scene, in the
46
+ * direction of agreeing slightly better.
47
+ *
48
+ * **`npm run wgsl` is part of changing anything here.** WebGPU draws from generated WGSL, so a
49
+ * GLSL change left unregenerated keeps the old expression compiled in and the gate measures the
50
+ * previous shader.
51
+ *
52
+ * ## The instrument
53
+ *
54
+ * **Compare the two backends against each other, not each against its own conventional baseline.**
55
+ * Five attempts read an ambiguous number because a diff against a baseline can say *that*
56
+ * something changed and never *which side is wrong*. Two independent implementations that agree
57
+ * conventionally and stop agreeing reversed localise the fault to one of them. Always take the
58
+ * conventional pair as the control in the same run: it is not zero, and reading a reversed number
59
+ * without it is what made several earlier measurements unreadable.
60
+ *
61
+ * **Then bisect the shader with a constant-output probe**, and neutralise terms one at a time. The
62
+ * last three defects were each found by forcing one factor to a constant and watching the two
63
+ * backends fall into agreement. `flat/main.ts` has exactly one `outColor` assignment and it is the
64
+ * last line of the shader, so a probe inserted earlier is overwritten and reads as "this feature
65
+ * is not active" — verify any probe by forcing magenta first and confirming the gate moves.
66
+ *
67
+ * ## The four defects, all of them WebGL2's, none of them in the depth conversion
68
+ *
69
+ * 1. **The lit shader was handed a range-corrected light matrix.** `shadowFactor` projects with
70
+ * `uLightViewProj` and then does `p = p * 0.5 + 0.5` on all three axes, and `GL_SHADOW_REMAP`
71
+ * performs that same range change in the matrix. Both applied put every receiver depth in
72
+ * `[0.5, 1]` against a map holding `[0, 1]`. `webgpu/renderer.ts` had this right and says so.
73
+ * 2. **Point-shadow face matrices were never range-corrected at all.** `EXT_clip_control` is
74
+ * context state, so a face matrix still emitting OpenGL's `[-1, 1]` loses everything below zero
75
+ * and half of every face is clipped away.
76
+ * 3. **`bakeOne` had no depth bracket.** `bakeAreaOne` put the conventional compare and clear back
77
+ * for the length of an area light's bake; the ordinary lamp path, which is nearly every point
78
+ * shadow a scene has, ran under the frame's own `GEQUAL` against a scratch cleared to 0 while
79
+ * writing depths from a matrix that is deliberately not reversed. Both paths go through
80
+ * `bakePointShadow` now, unconditionally, so there is no branch left to forget.
81
+ * 4. **Three shadow matrices shared one scratch buffer**, so whichever ran last rewrote the
82
+ * others, and `beginShadowPass` uploaded the raw matrix while holding the corrected one.
83
+ *
84
+ * Every one of them was invisible conventionally, and none of them looks like a depth bug: a wrong
85
+ * shadow map does not draw broken, it draws *dark*. That is why the scene read as a lighting
86
+ * regression for eight attempts and why bisecting the lit expression is what finally named them.
87
+ *
88
+ * **The trap, recorded because it cost a whole attempt.** Reversed depth measured *more
89
+ * view-stable* than conventional on both scenes across two nearby frames, which reads as evidence
90
+ * that the difference is the improvement. It is not: both scenes animate, so most of that is
91
+ * motion. Do not stop at the stability number.
92
+ *
93
+ * **Candidates eliminated by measurement along the way**, so nobody pays for them twice: ambient
94
+ * occlusion and its far-plane guards, `drawScatter` and `drawSdfText`, `POLYGON_OFFSET_FILL` and
95
+ * the offset sign, environment irradiance, depth of field, and the directional cascade's bracket
96
+ * and range, which were correct before any of this started.
97
+ *
98
+ * Everything else in this module is live and correct in both senses, and every consumer reads it
99
+ * instead of a constant of its own.
100
+ */
101
+ export declare const REVERSED_DEPTH = true;
102
+ /** What a scene depth attachment is cleared to: the far plane. */
103
+ export declare const DEPTH_CLEAR: number;
104
+ /** The WebGPU compare for "nearer than what is there". */
105
+ export declare const DEPTH_COMPARE: GPUCompareFunction;
106
+ /**
107
+ * The same, admitting equality.
108
+ *
109
+ * The sky draws with this so it fills exactly the pixels nothing else claimed, and text with it so
110
+ * a glyph coplanar with its quad is not dropped.
111
+ */
112
+ export declare const DEPTH_COMPARE_EQUAL: GPUCompareFunction;
113
+ /**
114
+ * The scene depth format.
115
+ *
116
+ * **Float is half of reversed-Z and the half that is easy to forget.** Reversing a 24-bit unorm
117
+ * buffer moves the precision around and does not create any; the gain comes from a float's
118
+ * exponent having room near zero, which is where reversing puts the far plane.
119
+ */
120
+ export declare const DEPTH_FORMAT: GPUTextureFormat;
121
+ /**
122
+ * Turn a depth read out of the buffer back into the `[0, 1]` a conventional one would have held.
123
+ *
124
+ * For anything that reconstructs a position or a distance from stored depth and was written
125
+ * against the conventional sense. One place, so a pass that forgets it is a pass that looks wrong
126
+ * rather than one that quietly disagrees with its neighbour.
127
+ */
128
+ export declare function conventionalDepth(stored: number): number;
129
+ /**
130
+ * The GLSL that turns a sampled scene depth back into OpenGL's `[-1, 1]` clip z.
131
+ *
132
+ * **One expression, interpolated, because four shaders had written it out by hand.** Ambient
133
+ * occlusion twice, the camera blur's reprojection and depth of field each carried
134
+ * `depth * 2.0 - 1.0`, which is the inverse of the conventional mapping and the wrong inverse of
135
+ * the reversed one. A reversed buffer stores `0.5 - 0.5z`, so recovering z is `1 - 2 * stored`,
136
+ * and a pass that keeps the old form does not fail loudly — it reprojects to slightly the wrong
137
+ * place, which is what the renderer's own reprojection test caught when this landed.
138
+ *
139
+ * `%s` is the name of the depth variable at the call site.
140
+ */
141
+ export declare function glslSceneDepthToNdc(depth: string): string;
142
+ /**
143
+ * The clip-space z of the far plane, as GLSL, for geometry that writes a fixed depth.
144
+ *
145
+ * **The sky is the whole reason this exists.** It is a full-screen triangle written straight into
146
+ * clip space with `z = w`, which is the far plane conventionally and the *near* plane once depth
147
+ * is reversed — so a reversed engine whose sky still says 1.0 paints the sky over the entire
148
+ * world. That is what the pixel gate caught the first time this landed: every scene changed, most
149
+ * of the frame, and the largest was 743,669 pixels of 921,600.
150
+ */
151
+ export declare function glslFarDepth(): string;
152
+ /**
153
+ * The WebGL2 depth compare for "nearer than what is there", and the one that admits equality.
154
+ *
155
+ * Taken as functions of the context because these are GL enums and this module must not import a
156
+ * backend. The pair mirrors `DEPTH_COMPARE` and `DEPTH_COMPARE_EQUAL` exactly, so the two backends
157
+ * cannot end up testing depth in opposite directions.
158
+ */
159
+ export declare function glDepthFunc(gl: WebGL2RenderingContext): number;
160
+ export declare function glDepthFuncEqual(gl: WebGL2RenderingContext): number;
161
+ /** The conventional pair, for the shadow passes, which are deliberately not reversed. */
162
+ export declare function glShadowDepthFunc(gl: WebGL2RenderingContext): number;
163
+ /**
164
+ * What a shadow pass clears its depth to, and it travels with the compare above.
165
+ *
166
+ * Separate from `DEPTH_CLEAR` because a shadow pass does not follow the frame: it renders from a
167
+ * light matrix this module deliberately leaves conventional, so far is 1 there whatever the scene
168
+ * is doing. Stated as its own constant so the pair cannot be half-applied — which is exactly how a
169
+ * point-light bake ended up clearing to the scene's far plane and comparing with the scene's sense
170
+ * against depths written the other way.
171
+ */
172
+ export declare const SHADOW_DEPTH_CLEAR = 1;
173
+ /**
174
+ * Which way a polygon offset has to push to bring a coplanar overlay forward.
175
+ *
176
+ * **The sign flips with the compare and forgetting it is silent.** `POLYGON_OFFSET_FILL` adds to
177
+ * depth; under `LESS` nearer is smaller, so an overlay is pulled forward with a negative offset,
178
+ * and under `GREATER` nearer is larger and the same nudge pushes it *behind* the surface it is
179
+ * meant to sit on. The symptom is a marking that disappears into the road rather than a marking
180
+ * that fights, which reads as a missing draw call.
181
+ */
182
+ export declare const DEPTH_OFFSET_SIGN: number;
183
+ /**
184
+ * How much depth one overlay layer is worth, and how much of it follows the slope.
185
+ *
186
+ * Two numbers so that the two backends offset a coplanar surface by the *same* amount: WebGL2
187
+ * hands them to `gl.polygonOffset` around a draw and WebGPU bakes them into a pipeline as
188
+ * `depthBias` and `depthBiasSlopeScale`, and a layer that means one thing on one backend and
189
+ * something else on the other is a difference no test compares and a photograph shows.
190
+ *
191
+ * **The slope term is not zero, and it was zero here until a measurement said otherwise.** The
192
+ * argument for zero is good and it is wrong: a declared overlay is coplanar with what it decorates
193
+ * from every angle, so a constant nudge ought to be the whole of what it needs, and a slope term
194
+ * ought to mean a kerb stands further off its slab as the camera turns. What that reasoning misses
195
+ * is that the offset is applied in *depth*, and how much depth one pixel spans grows without bound
196
+ * as a surface turns edge-on — so a constant that clears the fight head-on clears none of it at a
197
+ * grazing angle.
198
+ *
199
+ * Measured, on a blended quad coplanar with the panel it decorates, counting the pixels of the
200
+ * decal that survive: **WebGL2 clears it at layer 1 either way, and WebGPU with a slope of 0 keeps
201
+ * 1,178 pixels of 1,237 at layer 1 and needs layer 2 to reach 1,237.** With the slope, both
202
+ * backends read 1,237 at layer 1. Two backends given the same number and drawing two pictures is
203
+ * the defect; the slope is what makes a declared layer mean one thing.
204
+ *
205
+ * **The sign is the units' sign and not the opposite of it**, which cost a capture to find: set to
206
+ * `+1` the slope fights the constant and pushes the overlay *away*, and the decal disappeared
207
+ * entirely on both backends — the same symptom the sign note above describes, arriving through the
208
+ * other term.
209
+ *
210
+ * The cost is bounded and was gated rather than argued: **every published scene is 0 of 921,600
211
+ * pixels on both backends** against the release before it.
212
+ */
213
+ export declare const OVERLAY_DEPTH_SLOPE = -1;
214
+ export declare const OVERLAY_DEPTH_UNITS = -2;
215
+ /**
216
+ * Highest depth layer a caller may ask for.
217
+ *
218
+ * A ceiling rather than an open number, because the offset has to stay small enough that a layer
219
+ * cannot be dragged out through geometry it genuinely stands behind. Four is more than any scene
220
+ * has needed: a base surface, the decks that cross it, the trim fused into those, and the
221
+ * markings painted on top.
222
+ */
223
+ export declare const MAX_DEPTH_LAYER = 4;
224
+ /**
225
+ * The depth offset a layer is worth, clamped and signed, for whichever backend is asking.
226
+ *
227
+ * One function because it is one decision. It used to be three lines inlined in `drawMesh` on
228
+ * WebGL2 and nothing at all on WebGPU, where `depthLayer` was accepted and silently ignored —
229
+ * so a consumer that declared which of two fused surfaces should win got the answer on one
230
+ * backend and a per-pixel coin toss on the other, with nothing anywhere saying so.
231
+ *
232
+ * Layer 0 is the base world and takes no offset at all, which is why the units come back as zero
233
+ * for it: a pipeline or a draw that asked for nothing must be identical to one built before this
234
+ * existed.
235
+ */
236
+ export declare function depthOffsetForLayer(layer: number,
237
+ /**
238
+ * Which way depth actually runs for the caller asking.
239
+ *
240
+ * Defaulted to the convention this module declares, and passed explicitly by WebGL2, where it
241
+ * is **not** a compile-time fact: reversed depth there needs `EXT_clip_control`, and a context
242
+ * that was not granted it runs conventional depth whatever this file says. Taking the default
243
+ * on that backend would offset every overlay the wrong way on exactly the machines that fell
244
+ * back — and the symptom, a marking sinking into its road, reads as a missing draw call.
245
+ */
246
+ reversed?: boolean): {
247
+ readonly slope: number;
248
+ readonly units: number;
249
+ };
250
+ /**
251
+ * The remap from the OpenGL clip space every camera matrix is built in to what the depth buffer
252
+ * expects, as a column-major 4x4.
253
+ *
254
+ * **WebGL2 needs this only because `EXT_clip_control` puts its clip z in `[0, 1]`**, which is
255
+ * where reversed-Z wants it and is not where `mat4.perspective` leaves it. It is the same
256
+ * transform WebGPU's `CLIP_CORRECTION` carries, without the Y flip that backend also needs, and
257
+ * it is the identity when depth is conventional and clip control is off — in which case the
258
+ * renderer skips the multiply entirely.
259
+ */
260
+ export declare const GL_DEPTH_REMAP: Float32Array<ArrayBuffer>;
261
+ /**
262
+ * `EXT_clip_control`, which TypeScript's DOM library does not declare yet.
263
+ *
264
+ * Only the two enums and the one entry point this engine uses. Declared here beside the constant
265
+ * that needs it rather than in a types file, so the reason it exists is next to the reason it is
266
+ * called.
267
+ */
268
+ export interface ClipControlExtension {
269
+ readonly LOWER_LEFT_EXT: number;
270
+ readonly ZERO_TO_ONE_EXT: number;
271
+ clipControlEXT(origin: number, depth: number): void;
272
+ }
273
+ /**
274
+ * The WebGL2 internal format and type for a scene depth attachment.
275
+ *
276
+ * **Float is the half of reversed-Z that is easy to forget.** Reversing a 24-bit unorm buffer moves
277
+ * its precision around and creates none; the gain comes from a float's exponent having room near
278
+ * zero, which is where reversing puts the far plane. `DEPTH_COMPONENT32F` is core in WebGL2, so
279
+ * this needs no extension — only the matching `FLOAT` type, since a 32-bit float attachment
280
+ * described as `UNSIGNED_INT` is refused.
281
+ *
282
+ * Shadow maps do not go through here: they are their own format for their own reason, and they are
283
+ * not reversed.
284
+ */
285
+ export declare function glSceneDepthFormat(gl: WebGL2RenderingContext): {
286
+ readonly internalFormat: number;
287
+ readonly type: number;
288
+ };
289
+ /**
290
+ * The GLSL that asks "is this the far plane", for a pass that skips the background.
291
+ *
292
+ * **The guard that inverts, and the one that darkens a scene when it does not.** Ambient occlusion
293
+ * skips a pixel showing nothing — `depth >= 1.0` conventionally — and under reversed depth the far
294
+ * plane is 0.0, so that test never fires and occlusion is computed over the sky. The symptom is a
295
+ * frame that comes out *darker rather than broken*: measured at 320,706 changed pixels of 921,600
296
+ * with the mean luminance falling 18.5 to 15.3 and two thirds of mid-tones moved, which reads as a
297
+ * shading difference and hides among the seams reversed depth is meant to fix.
298
+ *
299
+ * Written as a comparison rather than a constant so the sense and the bound move together: a
300
+ * consumer of this cannot flip one and forget the other.
301
+ */
302
+ export declare function glslIsFarDepth(depth: string): string;
303
+ /**
304
+ * The `[-1, 1]` to `[0, 1]` remap **without** the reversal, for a pass that is not reversed.
305
+ *
306
+ * **Because `EXT_clip_control` is context-wide and a shadow pass is not.** Turning it on puts every
307
+ * clip z in `[0, 1]`, including the shadow passes', whose light matrices are deliberately left
308
+ * conventional — so a light matrix built by `mat4.perspective` or `mat4.ortho` emits `[-1, 1]` and
309
+ * the context throws away everything below zero. Half of every shadow map's range disappears, which
310
+ * does not look like clipping: it looks like the scene is *darker*.
311
+ *
312
+ * So a shadow pass gets this instead of `GL_DEPTH_REMAP`: the same range change, the same sense.
313
+ */
314
+ export declare const GL_SHADOW_REMAP: Float32Array<ArrayBuffer>;
@@ -0,0 +1,346 @@
1
+ /**
2
+ * Which way depth runs, in one place, because it is a decision every pass has to agree with.
3
+ *
4
+ * **Reversed-Z with a float depth attachment.** Clip space depth is mapped so the near plane is
5
+ * 1 and the far plane is 0, the compare is `greater` rather than `less`, and the buffer is cleared
6
+ * to 0 instead of 1. It is not a preference: a conventional buffer spends its precision
7
+ * hyperbolically, resolving about `z² / (near · 2^bits)` at distance `z`, so the near plane is the
8
+ * only control there is and every consumer ends up pushing it out and then pushing decals off
9
+ * surfaces to compensate.
10
+ *
11
+ * **What it buys, in the arithmetic that motivated it.** A float's exponent gives its resolution
12
+ * where the values are small, and reversed-Z puts *far* at zero — so the hyperbolic loss and the
13
+ * floating-point gain very nearly cancel and precision becomes roughly uniform with distance.
14
+ * A consumer measured what its absence costs: a street plate's letters held 7.5 mm proud of a 6 mm
15
+ * plate and a sign 15 mm proud of its board, neither a thickness anybody chose, and a near plane
16
+ * settled at 0.25 for a first-person camera that wanted 0.05 — 1.6x of precision surrendered
17
+ * permanently, because dropping it to 0.15 made every decal in the world blink.
18
+ *
19
+ * **This is the cure for a near-coincident seam and deliberately not for a coincident one.**
20
+ * `webgl2/renderer.ts` records taking a reversed-Z conversion off the table once, and that
21
+ * reasoning stands where it was written: two *exactly* coplanar surfaces have equal depth in exact
22
+ * arithmetic and no format separates equal numbers, which is what `POLYGON_OFFSET_FILL` is for.
23
+ * What reversed-Z fixes is the other case — surfaces a fraction of a millimetre apart, which a
24
+ * conventional buffer cannot tell apart past about forty metres and this one can.
25
+ *
26
+ * **Shadows are not reversed and that is deliberate.** The directional cascades are orthographic,
27
+ * where depth is already linear and a float buffer gains nothing, and the point shadows write with
28
+ * `always`. Converting them would mean flipping every comparison in the shadow shaders for no
29
+ * precision at all, so `SHADOW_FORMAT` and its passes keep the conventional sense and this module
30
+ * says nothing about them.
31
+ */
32
+ /**
33
+ * True while the engine renders its scene depth reversed.
34
+ *
35
+ * **It is `true`, on both backends, and this is what it took.** Nine attempts. The eight that
36
+ * failed were not wrong about the conversion — the compares, clears, clip corrections and formats
37
+ * were right early — they were wrong about *where to look*, and the note below on the instrument
38
+ * is the most reusable thing on this page.
39
+ *
40
+ * **What it is gated at.** Each backend against its own conventional output, at zero tolerance,
41
+ * across every published scene on a real GPU: **WebGL2's worst frame 7,348 pixels of 921,600** and
42
+ * **WebGPU's 11,832**, most a few hundred or none, and all of it seams resolving the other way,
43
+ * which is the improvement. The two backends against *each other* come to 443,035 pixels on their
44
+ * worst scene reversed against 443,039 conventional, so the conversion costs four pixels of the
45
+ * ordinary disagreement between two independent implementations of an animated scene, in the
46
+ * direction of agreeing slightly better.
47
+ *
48
+ * **`npm run wgsl` is part of changing anything here.** WebGPU draws from generated WGSL, so a
49
+ * GLSL change left unregenerated keeps the old expression compiled in and the gate measures the
50
+ * previous shader.
51
+ *
52
+ * ## The instrument
53
+ *
54
+ * **Compare the two backends against each other, not each against its own conventional baseline.**
55
+ * Five attempts read an ambiguous number because a diff against a baseline can say *that*
56
+ * something changed and never *which side is wrong*. Two independent implementations that agree
57
+ * conventionally and stop agreeing reversed localise the fault to one of them. Always take the
58
+ * conventional pair as the control in the same run: it is not zero, and reading a reversed number
59
+ * without it is what made several earlier measurements unreadable.
60
+ *
61
+ * **Then bisect the shader with a constant-output probe**, and neutralise terms one at a time. The
62
+ * last three defects were each found by forcing one factor to a constant and watching the two
63
+ * backends fall into agreement. `flat/main.ts` has exactly one `outColor` assignment and it is the
64
+ * last line of the shader, so a probe inserted earlier is overwritten and reads as "this feature
65
+ * is not active" — verify any probe by forcing magenta first and confirming the gate moves.
66
+ *
67
+ * ## The four defects, all of them WebGL2's, none of them in the depth conversion
68
+ *
69
+ * 1. **The lit shader was handed a range-corrected light matrix.** `shadowFactor` projects with
70
+ * `uLightViewProj` and then does `p = p * 0.5 + 0.5` on all three axes, and `GL_SHADOW_REMAP`
71
+ * performs that same range change in the matrix. Both applied put every receiver depth in
72
+ * `[0.5, 1]` against a map holding `[0, 1]`. `webgpu/renderer.ts` had this right and says so.
73
+ * 2. **Point-shadow face matrices were never range-corrected at all.** `EXT_clip_control` is
74
+ * context state, so a face matrix still emitting OpenGL's `[-1, 1]` loses everything below zero
75
+ * and half of every face is clipped away.
76
+ * 3. **`bakeOne` had no depth bracket.** `bakeAreaOne` put the conventional compare and clear back
77
+ * for the length of an area light's bake; the ordinary lamp path, which is nearly every point
78
+ * shadow a scene has, ran under the frame's own `GEQUAL` against a scratch cleared to 0 while
79
+ * writing depths from a matrix that is deliberately not reversed. Both paths go through
80
+ * `bakePointShadow` now, unconditionally, so there is no branch left to forget.
81
+ * 4. **Three shadow matrices shared one scratch buffer**, so whichever ran last rewrote the
82
+ * others, and `beginShadowPass` uploaded the raw matrix while holding the corrected one.
83
+ *
84
+ * Every one of them was invisible conventionally, and none of them looks like a depth bug: a wrong
85
+ * shadow map does not draw broken, it draws *dark*. That is why the scene read as a lighting
86
+ * regression for eight attempts and why bisecting the lit expression is what finally named them.
87
+ *
88
+ * **The trap, recorded because it cost a whole attempt.** Reversed depth measured *more
89
+ * view-stable* than conventional on both scenes across two nearby frames, which reads as evidence
90
+ * that the difference is the improvement. It is not: both scenes animate, so most of that is
91
+ * motion. Do not stop at the stability number.
92
+ *
93
+ * **Candidates eliminated by measurement along the way**, so nobody pays for them twice: ambient
94
+ * occlusion and its far-plane guards, `drawScatter` and `drawSdfText`, `POLYGON_OFFSET_FILL` and
95
+ * the offset sign, environment irradiance, depth of field, and the directional cascade's bracket
96
+ * and range, which were correct before any of this started.
97
+ *
98
+ * Everything else in this module is live and correct in both senses, and every consumer reads it
99
+ * instead of a constant of its own.
100
+ */
101
+ export const REVERSED_DEPTH = true;
102
+ /** What a scene depth attachment is cleared to: the far plane. */
103
+ export const DEPTH_CLEAR = REVERSED_DEPTH ? 0 : 1;
104
+ /** The WebGPU compare for "nearer than what is there". */
105
+ export const DEPTH_COMPARE = REVERSED_DEPTH ? 'greater' : 'less';
106
+ /**
107
+ * The same, admitting equality.
108
+ *
109
+ * The sky draws with this so it fills exactly the pixels nothing else claimed, and text with it so
110
+ * a glyph coplanar with its quad is not dropped.
111
+ */
112
+ export const DEPTH_COMPARE_EQUAL = REVERSED_DEPTH
113
+ ? 'greater-equal'
114
+ : 'less-equal';
115
+ /**
116
+ * The scene depth format.
117
+ *
118
+ * **Float is half of reversed-Z and the half that is easy to forget.** Reversing a 24-bit unorm
119
+ * buffer moves the precision around and does not create any; the gain comes from a float's
120
+ * exponent having room near zero, which is where reversing puts the far plane.
121
+ */
122
+ export const DEPTH_FORMAT = REVERSED_DEPTH ? 'depth32float' : 'depth24plus';
123
+ /**
124
+ * Turn a depth read out of the buffer back into the `[0, 1]` a conventional one would have held.
125
+ *
126
+ * For anything that reconstructs a position or a distance from stored depth and was written
127
+ * against the conventional sense. One place, so a pass that forgets it is a pass that looks wrong
128
+ * rather than one that quietly disagrees with its neighbour.
129
+ */
130
+ export function conventionalDepth(stored) {
131
+ return REVERSED_DEPTH ? 1 - stored : stored;
132
+ }
133
+ /**
134
+ * The GLSL that turns a sampled scene depth back into OpenGL's `[-1, 1]` clip z.
135
+ *
136
+ * **One expression, interpolated, because four shaders had written it out by hand.** Ambient
137
+ * occlusion twice, the camera blur's reprojection and depth of field each carried
138
+ * `depth * 2.0 - 1.0`, which is the inverse of the conventional mapping and the wrong inverse of
139
+ * the reversed one. A reversed buffer stores `0.5 - 0.5z`, so recovering z is `1 - 2 * stored`,
140
+ * and a pass that keeps the old form does not fail loudly — it reprojects to slightly the wrong
141
+ * place, which is what the renderer's own reprojection test caught when this landed.
142
+ *
143
+ * `%s` is the name of the depth variable at the call site.
144
+ */
145
+ export function glslSceneDepthToNdc(depth) {
146
+ return REVERSED_DEPTH ? `(1.0 - ${depth} * 2.0)` : `(${depth} * 2.0 - 1.0)`;
147
+ }
148
+ /**
149
+ * The clip-space z of the far plane, as GLSL, for geometry that writes a fixed depth.
150
+ *
151
+ * **The sky is the whole reason this exists.** It is a full-screen triangle written straight into
152
+ * clip space with `z = w`, which is the far plane conventionally and the *near* plane once depth
153
+ * is reversed — so a reversed engine whose sky still says 1.0 paints the sky over the entire
154
+ * world. That is what the pixel gate caught the first time this landed: every scene changed, most
155
+ * of the frame, and the largest was 743,669 pixels of 921,600.
156
+ */
157
+ export function glslFarDepth() {
158
+ return REVERSED_DEPTH ? '0.0' : '1.0';
159
+ }
160
+ /**
161
+ * The WebGL2 depth compare for "nearer than what is there", and the one that admits equality.
162
+ *
163
+ * Taken as functions of the context because these are GL enums and this module must not import a
164
+ * backend. The pair mirrors `DEPTH_COMPARE` and `DEPTH_COMPARE_EQUAL` exactly, so the two backends
165
+ * cannot end up testing depth in opposite directions.
166
+ */
167
+ export function glDepthFunc(gl) {
168
+ return REVERSED_DEPTH ? gl.GREATER : gl.LESS;
169
+ }
170
+ export function glDepthFuncEqual(gl) {
171
+ return REVERSED_DEPTH ? gl.GEQUAL : gl.LEQUAL;
172
+ }
173
+ /** The conventional pair, for the shadow passes, which are deliberately not reversed. */
174
+ export function glShadowDepthFunc(gl) {
175
+ return gl.LEQUAL;
176
+ }
177
+ /**
178
+ * What a shadow pass clears its depth to, and it travels with the compare above.
179
+ *
180
+ * Separate from `DEPTH_CLEAR` because a shadow pass does not follow the frame: it renders from a
181
+ * light matrix this module deliberately leaves conventional, so far is 1 there whatever the scene
182
+ * is doing. Stated as its own constant so the pair cannot be half-applied — which is exactly how a
183
+ * point-light bake ended up clearing to the scene's far plane and comparing with the scene's sense
184
+ * against depths written the other way.
185
+ */
186
+ export const SHADOW_DEPTH_CLEAR = 1;
187
+ /**
188
+ * Which way a polygon offset has to push to bring a coplanar overlay forward.
189
+ *
190
+ * **The sign flips with the compare and forgetting it is silent.** `POLYGON_OFFSET_FILL` adds to
191
+ * depth; under `LESS` nearer is smaller, so an overlay is pulled forward with a negative offset,
192
+ * and under `GREATER` nearer is larger and the same nudge pushes it *behind* the surface it is
193
+ * meant to sit on. The symptom is a marking that disappears into the road rather than a marking
194
+ * that fights, which reads as a missing draw call.
195
+ */
196
+ export const DEPTH_OFFSET_SIGN = REVERSED_DEPTH ? -1 : 1;
197
+ /**
198
+ * How much depth one overlay layer is worth, and how much of it follows the slope.
199
+ *
200
+ * Two numbers so that the two backends offset a coplanar surface by the *same* amount: WebGL2
201
+ * hands them to `gl.polygonOffset` around a draw and WebGPU bakes them into a pipeline as
202
+ * `depthBias` and `depthBiasSlopeScale`, and a layer that means one thing on one backend and
203
+ * something else on the other is a difference no test compares and a photograph shows.
204
+ *
205
+ * **The slope term is not zero, and it was zero here until a measurement said otherwise.** The
206
+ * argument for zero is good and it is wrong: a declared overlay is coplanar with what it decorates
207
+ * from every angle, so a constant nudge ought to be the whole of what it needs, and a slope term
208
+ * ought to mean a kerb stands further off its slab as the camera turns. What that reasoning misses
209
+ * is that the offset is applied in *depth*, and how much depth one pixel spans grows without bound
210
+ * as a surface turns edge-on — so a constant that clears the fight head-on clears none of it at a
211
+ * grazing angle.
212
+ *
213
+ * Measured, on a blended quad coplanar with the panel it decorates, counting the pixels of the
214
+ * decal that survive: **WebGL2 clears it at layer 1 either way, and WebGPU with a slope of 0 keeps
215
+ * 1,178 pixels of 1,237 at layer 1 and needs layer 2 to reach 1,237.** With the slope, both
216
+ * backends read 1,237 at layer 1. Two backends given the same number and drawing two pictures is
217
+ * the defect; the slope is what makes a declared layer mean one thing.
218
+ *
219
+ * **The sign is the units' sign and not the opposite of it**, which cost a capture to find: set to
220
+ * `+1` the slope fights the constant and pushes the overlay *away*, and the decal disappeared
221
+ * entirely on both backends — the same symptom the sign note above describes, arriving through the
222
+ * other term.
223
+ *
224
+ * The cost is bounded and was gated rather than argued: **every published scene is 0 of 921,600
225
+ * pixels on both backends** against the release before it.
226
+ */
227
+ export const OVERLAY_DEPTH_SLOPE = -1;
228
+ export const OVERLAY_DEPTH_UNITS = -2;
229
+ /**
230
+ * Highest depth layer a caller may ask for.
231
+ *
232
+ * A ceiling rather than an open number, because the offset has to stay small enough that a layer
233
+ * cannot be dragged out through geometry it genuinely stands behind. Four is more than any scene
234
+ * has needed: a base surface, the decks that cross it, the trim fused into those, and the
235
+ * markings painted on top.
236
+ */
237
+ export const MAX_DEPTH_LAYER = 4;
238
+ /**
239
+ * The depth offset a layer is worth, clamped and signed, for whichever backend is asking.
240
+ *
241
+ * One function because it is one decision. It used to be three lines inlined in `drawMesh` on
242
+ * WebGL2 and nothing at all on WebGPU, where `depthLayer` was accepted and silently ignored —
243
+ * so a consumer that declared which of two fused surfaces should win got the answer on one
244
+ * backend and a per-pixel coin toss on the other, with nothing anywhere saying so.
245
+ *
246
+ * Layer 0 is the base world and takes no offset at all, which is why the units come back as zero
247
+ * for it: a pipeline or a draw that asked for nothing must be identical to one built before this
248
+ * existed.
249
+ */
250
+ export function depthOffsetForLayer(layer,
251
+ /**
252
+ * Which way depth actually runs for the caller asking.
253
+ *
254
+ * Defaulted to the convention this module declares, and passed explicitly by WebGL2, where it
255
+ * is **not** a compile-time fact: reversed depth there needs `EXT_clip_control`, and a context
256
+ * that was not granted it runs conventional depth whatever this file says. Taking the default
257
+ * on that backend would offset every overlay the wrong way on exactly the machines that fell
258
+ * back — and the symptom, a marking sinking into its road, reads as a missing draw call.
259
+ */
260
+ reversed = REVERSED_DEPTH) {
261
+ const clamped = Math.min(Math.max(Math.round(layer), 0), MAX_DEPTH_LAYER);
262
+ if (clamped === 0)
263
+ return { slope: 0, units: 0 };
264
+ const sign = reversed ? -1 : 1;
265
+ return {
266
+ /* `|| 0` because `0 * -1` is `-0`, which equals zero in every arithmetic use and not under
267
+ `Object.is` — so two descriptors alike in every way a GPU can see would compare unequal. */
268
+ slope: OVERLAY_DEPTH_SLOPE * sign || 0,
269
+ units: OVERLAY_DEPTH_UNITS * clamped * sign,
270
+ };
271
+ }
272
+ /**
273
+ * The remap from the OpenGL clip space every camera matrix is built in to what the depth buffer
274
+ * expects, as a column-major 4x4.
275
+ *
276
+ * **WebGL2 needs this only because `EXT_clip_control` puts its clip z in `[0, 1]`**, which is
277
+ * where reversed-Z wants it and is not where `mat4.perspective` leaves it. It is the same
278
+ * transform WebGPU's `CLIP_CORRECTION` carries, without the Y flip that backend also needs, and
279
+ * it is the identity when depth is conventional and clip control is off — in which case the
280
+ * renderer skips the multiply entirely.
281
+ */
282
+ export const GL_DEPTH_REMAP = new Float32Array([
283
+ 1,
284
+ 0,
285
+ 0,
286
+ 0,
287
+ 0,
288
+ 1,
289
+ 0,
290
+ 0,
291
+ 0,
292
+ 0,
293
+ REVERSED_DEPTH ? -0.5 : 0.5,
294
+ 0,
295
+ 0,
296
+ 0,
297
+ 0.5,
298
+ 1,
299
+ ]);
300
+ /**
301
+ * The WebGL2 internal format and type for a scene depth attachment.
302
+ *
303
+ * **Float is the half of reversed-Z that is easy to forget.** Reversing a 24-bit unorm buffer moves
304
+ * its precision around and creates none; the gain comes from a float's exponent having room near
305
+ * zero, which is where reversing puts the far plane. `DEPTH_COMPONENT32F` is core in WebGL2, so
306
+ * this needs no extension — only the matching `FLOAT` type, since a 32-bit float attachment
307
+ * described as `UNSIGNED_INT` is refused.
308
+ *
309
+ * Shadow maps do not go through here: they are their own format for their own reason, and they are
310
+ * not reversed.
311
+ */
312
+ export function glSceneDepthFormat(gl) {
313
+ return REVERSED_DEPTH
314
+ ? { internalFormat: gl.DEPTH_COMPONENT32F, type: gl.FLOAT }
315
+ : { internalFormat: gl.DEPTH_COMPONENT24, type: gl.UNSIGNED_INT };
316
+ }
317
+ /**
318
+ * The GLSL that asks "is this the far plane", for a pass that skips the background.
319
+ *
320
+ * **The guard that inverts, and the one that darkens a scene when it does not.** Ambient occlusion
321
+ * skips a pixel showing nothing — `depth >= 1.0` conventionally — and under reversed depth the far
322
+ * plane is 0.0, so that test never fires and occlusion is computed over the sky. The symptom is a
323
+ * frame that comes out *darker rather than broken*: measured at 320,706 changed pixels of 921,600
324
+ * with the mean luminance falling 18.5 to 15.3 and two thirds of mid-tones moved, which reads as a
325
+ * shading difference and hides among the seams reversed depth is meant to fix.
326
+ *
327
+ * Written as a comparison rather than a constant so the sense and the bound move together: a
328
+ * consumer of this cannot flip one and forget the other.
329
+ */
330
+ export function glslIsFarDepth(depth) {
331
+ return REVERSED_DEPTH ? `(${depth} <= 0.0)` : `(${depth} >= 1.0)`;
332
+ }
333
+ /**
334
+ * The `[-1, 1]` to `[0, 1]` remap **without** the reversal, for a pass that is not reversed.
335
+ *
336
+ * **Because `EXT_clip_control` is context-wide and a shadow pass is not.** Turning it on puts every
337
+ * clip z in `[0, 1]`, including the shadow passes', whose light matrices are deliberately left
338
+ * conventional — so a light matrix built by `mat4.perspective` or `mat4.ortho` emits `[-1, 1]` and
339
+ * the context throws away everything below zero. Half of every shadow map's range disappears, which
340
+ * does not look like clipping: it looks like the scene is *darker*.
341
+ *
342
+ * So a shadow pass gets this instead of `GL_DEPTH_REMAP`: the same range change, the same sense.
343
+ */
344
+ export const GL_SHADOW_REMAP = new Float32Array([
345
+ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 1,
346
+ ]);