@driftengine/core 4.8.2 → 4.8.4

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 (259) hide show
  1. package/CHANGELOG.json +127 -0
  2. package/README.md +1 -1
  3. package/dist/geometry/meshConcat.js +2 -0
  4. package/dist/index.d.ts +11 -4
  5. package/dist/index.js +22 -1
  6. package/dist/math/scalar.js +1 -1
  7. package/dist/render/anisotropicLobe.d.ts +7 -0
  8. package/dist/render/anisotropicLobe.js +33 -0
  9. package/dist/render/backend/api.d.ts +41 -4
  10. package/dist/render/backend/materialChanges.d.ts +7 -2
  11. package/dist/render/backend/materialChanges.js +8 -3
  12. package/dist/render/backend/select.js +8 -0
  13. package/dist/render/backend/webgl2/clothTextures.d.ts +27 -0
  14. package/dist/render/backend/webgl2/clothTextures.js +93 -0
  15. package/dist/render/backend/webgl2/renderer.d.ts +159 -3
  16. package/dist/render/backend/webgl2/renderer.js +662 -80
  17. package/dist/render/backend/webgl2/skinScatter.d.ts +50 -0
  18. package/dist/render/backend/webgl2/skinScatter.js +256 -0
  19. package/dist/render/backend/webgpu/buffers.d.ts +25 -11
  20. package/dist/render/backend/webgpu/buffers.js +98 -49
  21. package/dist/render/backend/webgpu/causticsPass.js +2 -1
  22. package/dist/render/backend/webgpu/clothSolvePack.d.ts +27 -0
  23. package/dist/render/backend/webgpu/clothSolvePack.js +129 -0
  24. package/dist/render/backend/webgpu/clothTextures.d.ts +68 -0
  25. package/dist/render/backend/webgpu/clothTextures.js +145 -0
  26. package/dist/render/backend/webgpu/compressedUpload.d.ts +18 -0
  27. package/dist/render/backend/webgpu/compressedUpload.js +38 -0
  28. package/dist/render/backend/webgpu/computeHost.d.ts +21 -0
  29. package/dist/render/backend/webgpu/computeHost.js +5 -0
  30. package/dist/render/backend/webgpu/depthPass.d.ts +29 -9
  31. package/dist/render/backend/webgpu/depthPass.js +43 -12
  32. package/dist/render/backend/webgpu/drawCommand.js +6 -2
  33. package/dist/render/backend/webgpu/filmPass.js +2 -1
  34. package/dist/render/backend/webgpu/flatPass.d.ts +43 -4
  35. package/dist/render/backend/webgpu/flatPass.js +111 -13
  36. package/dist/render/backend/webgpu/gpuSkinnedCloth.d.ts +74 -0
  37. package/dist/render/backend/webgpu/gpuSkinnedCloth.js +452 -0
  38. package/dist/render/backend/webgpu/linePass.js +2 -1
  39. package/dist/render/backend/webgpu/motionPass.d.ts +20 -0
  40. package/dist/render/backend/webgpu/motionPass.js +106 -9
  41. package/dist/render/backend/webgpu/panelPass.js +2 -1
  42. package/dist/render/backend/webgpu/particlePass.js +2 -1
  43. package/dist/render/backend/webgpu/plumePass.js +2 -1
  44. package/dist/render/backend/webgpu/postPass.d.ts +15 -3
  45. package/dist/render/backend/webgpu/postPass.js +25 -8
  46. package/dist/render/backend/webgpu/renderer.d.ts +123 -6
  47. package/dist/render/backend/webgpu/renderer.js +534 -58
  48. package/dist/render/backend/webgpu/sdfTextPass.js +2 -1
  49. package/dist/render/backend/webgpu/shaders/clothSolve.wgsl.d.ts +33 -0
  50. package/dist/render/backend/webgpu/shaders/clothSolve.wgsl.js +469 -0
  51. package/dist/render/backend/webgpu/skinScatterPass.d.ts +51 -0
  52. package/dist/render/backend/webgpu/skinScatterPass.js +253 -0
  53. package/dist/render/backend/webgpu/surfaceTexturePass.d.ts +4 -1
  54. package/dist/render/backend/webgpu/surfaceTexturePass.js +37 -12
  55. package/dist/render/backend/webgpu/textPass.js +2 -1
  56. package/dist/render/backend/webgpu/waterPass.js +2 -1
  57. package/dist/render/backend/webgpu/windStreakPass.js +2 -1
  58. package/dist/render/boltBatch.js +2 -1
  59. package/dist/render/causticsRenderer.js +2 -1
  60. package/dist/render/clothBindingData.d.ts +41 -0
  61. package/dist/render/clothBindingData.js +72 -0
  62. package/dist/render/clothPlacement.d.ts +25 -0
  63. package/dist/render/clothPlacement.js +85 -0
  64. package/dist/render/compressedSource.d.ts +66 -0
  65. package/dist/render/compressedSource.js +138 -0
  66. package/dist/render/cutoutCaster.d.ts +5 -1
  67. package/dist/render/cutoutCaster.js +6 -0
  68. package/dist/render/cutoutDither.d.ts +51 -0
  69. package/dist/render/cutoutDither.js +90 -0
  70. package/dist/render/decalPass.js +2 -1
  71. package/dist/render/eyeRefraction.d.ts +35 -0
  72. package/dist/render/eyeRefraction.js +40 -0
  73. package/dist/render/glCompressed.d.ts +27 -0
  74. package/dist/render/glCompressed.js +53 -0
  75. package/dist/render/globalMediumPass.js +3 -2
  76. package/dist/render/hairLobes.d.ts +70 -0
  77. package/dist/render/hairLobes.js +120 -0
  78. package/dist/render/lightBudget.d.ts +22 -0
  79. package/dist/render/lightBudget.js +22 -0
  80. package/dist/render/lineBatch.js +5 -1
  81. package/dist/render/mesh.d.ts +7 -0
  82. package/dist/render/mesh.js +24 -0
  83. package/dist/render/oitPass.js +2 -1
  84. package/dist/render/particleBatch.js +3 -2
  85. package/dist/render/particlePool.d.ts +6 -2
  86. package/dist/render/plumeRenderer.js +3 -2
  87. package/dist/render/recon/motionVectors.d.ts +4 -2
  88. package/dist/render/recon/motionVectors.js +6 -3
  89. package/dist/render/renderQuality.d.ts +29 -2
  90. package/dist/render/renderQuality.js +5 -0
  91. package/dist/render/rendererHarness.js +4 -0
  92. package/dist/render/sceneCoverage.d.ts +54 -0
  93. package/dist/render/sceneCoverage.js +72 -0
  94. package/dist/render/sceneTarget.d.ts +12 -0
  95. package/dist/render/sceneTarget.js +14 -0
  96. package/dist/render/sdfTextRenderer.js +2 -1
  97. package/dist/render/shaders/clothBinding.d.ts +22 -0
  98. package/dist/render/shaders/clothBinding.js +80 -0
  99. package/dist/render/shaders/depth.js +45 -8
  100. package/dist/render/shaders/flat/anisotropic.d.ts +15 -0
  101. package/dist/render/shaders/flat/anisotropic.js +68 -0
  102. package/dist/render/shaders/flat/eye.d.ts +1 -0
  103. package/dist/render/shaders/flat/eye.js +81 -0
  104. package/dist/render/shaders/flat/hair.d.ts +1 -0
  105. package/dist/render/shaders/flat/hair.js +101 -0
  106. package/dist/render/shaders/flat/index.js +42 -3
  107. package/dist/render/shaders/flat/main.d.ts +1 -1
  108. package/dist/render/shaders/flat/main.js +113 -17
  109. package/dist/render/shaders/flat/models.d.ts +14 -0
  110. package/dist/render/shaders/flat/models.js +273 -0
  111. package/dist/render/shaders/flat/preamble.js +26 -24
  112. package/dist/render/shaders/flat/skin.d.ts +1 -0
  113. package/dist/render/shaders/flat/skin.js +114 -0
  114. package/dist/render/shaders/generated/depth.wgsl.d.ts +66 -24
  115. package/dist/render/shaders/generated/depth.wgsl.js +66 -24
  116. package/dist/render/shaders/generated/flat.wgsl.d.ts +1815 -1704
  117. package/dist/render/shaders/generated/flat.wgsl.js +1853 -1742
  118. package/dist/render/shaders/generated/line.wgsl.d.ts +1 -1
  119. package/dist/render/shaders/generated/line.wgsl.js +1 -1
  120. package/dist/render/shaders/generated/particle.wgsl.d.ts +3 -3
  121. package/dist/render/shaders/generated/particle.wgsl.js +3 -3
  122. package/dist/render/shaders/generated/rush.wgsl.d.ts +1 -1
  123. package/dist/render/shaders/generated/rush.wgsl.js +1 -1
  124. package/dist/render/shaders/generated/sdfText.wgsl.d.ts +1 -1
  125. package/dist/render/shaders/generated/sdfText.wgsl.js +1 -1
  126. package/dist/render/shaders/generated/skinBlur.wgsl.d.ts +48 -0
  127. package/dist/render/shaders/generated/skinBlur.wgsl.js +54 -0
  128. package/dist/render/shaders/generated/temporalResolve.wgsl.d.ts +1 -1
  129. package/dist/render/shaders/generated/temporalResolve.wgsl.js +1 -1
  130. package/dist/render/shaders/line.d.ts +1 -1
  131. package/dist/render/shaders/outputTransform.d.ts +14 -1
  132. package/dist/render/shaders/outputTransform.js +23 -1
  133. package/dist/render/shaders/particle.d.ts +3 -3
  134. package/dist/render/shaders/recon/motion.wgsl.d.ts +1 -1
  135. package/dist/render/shaders/recon/motion.wgsl.js +102 -0
  136. package/dist/render/shaders/recon/resolve.wgsl.js +15 -1
  137. package/dist/render/shaders/rush.js +13 -2
  138. package/dist/render/shaders/sdfText.d.ts +1 -1
  139. package/dist/render/shaders/skinBlur.d.ts +1 -0
  140. package/dist/render/shaders/skinBlur.js +103 -0
  141. package/dist/render/shaders/skinning.d.ts +3 -1
  142. package/dist/render/shaders/skinning.js +31 -4
  143. package/dist/render/shaders/temporalResolve.js +12 -5
  144. package/dist/render/shadowCasters.d.ts +13 -1
  145. package/dist/render/skinBlur.d.ts +41 -0
  146. package/dist/render/skinBlur.js +49 -0
  147. package/dist/render/skinScatter.d.ts +67 -0
  148. package/dist/render/skinScatter.js +80 -0
  149. package/dist/render/skinnedClothRun.d.ts +26 -0
  150. package/dist/render/skinnedClothRun.js +84 -0
  151. package/dist/render/ssrPass.js +2 -1
  152. package/dist/render/surfaceModel.d.ts +129 -0
  153. package/dist/render/surfaceModel.js +152 -0
  154. package/dist/render/surfaceTexture.d.ts +55 -4
  155. package/dist/render/surfaceTexture.js +60 -46
  156. package/dist/render/textRenderer.js +2 -1
  157. package/dist/render/vertexDefaults.js +8 -0
  158. package/dist/render/waterRenderer.js +2 -1
  159. package/dist/render/windStreakRenderer.js +2 -1
  160. package/package.json +6 -6
  161. package/src/geometry/meshConcat.ts +2 -0
  162. package/src/index.ts +53 -1
  163. package/src/math/scalar.ts +1 -1
  164. package/src/render/anisotropicLobe.ts +41 -0
  165. package/src/render/backend/api.ts +52 -3
  166. package/src/render/backend/materialChanges.ts +8 -3
  167. package/src/render/backend/select.ts +8 -0
  168. package/src/render/backend/webgl2/clothTextures.ts +120 -0
  169. package/src/render/backend/webgl2/renderer.ts +750 -80
  170. package/src/render/backend/webgl2/skinScatter.ts +309 -0
  171. package/src/render/backend/webgpu/buffers.ts +137 -63
  172. package/src/render/backend/webgpu/causticsPass.ts +2 -1
  173. package/src/render/backend/webgpu/clothSolvePack.ts +161 -0
  174. package/src/render/backend/webgpu/clothTextures.ts +194 -0
  175. package/src/render/backend/webgpu/compressedUpload.ts +65 -0
  176. package/src/render/backend/webgpu/computeHost.ts +25 -0
  177. package/src/render/backend/webgpu/depthPass.ts +43 -10
  178. package/src/render/backend/webgpu/drawCommand.ts +6 -2
  179. package/src/render/backend/webgpu/filmPass.ts +2 -1
  180. package/src/render/backend/webgpu/flatPass.ts +147 -8
  181. package/src/render/backend/webgpu/gpuSkinnedCloth.ts +502 -0
  182. package/src/render/backend/webgpu/linePass.ts +2 -1
  183. package/src/render/backend/webgpu/motionPass.ts +128 -9
  184. package/src/render/backend/webgpu/panelPass.ts +2 -1
  185. package/src/render/backend/webgpu/particlePass.ts +2 -1
  186. package/src/render/backend/webgpu/plumePass.ts +2 -1
  187. package/src/render/backend/webgpu/postPass.ts +25 -6
  188. package/src/render/backend/webgpu/renderer.ts +701 -52
  189. package/src/render/backend/webgpu/sdfTextPass.ts +2 -1
  190. package/src/render/backend/webgpu/shaders/clothSolve.wgsl.ts +470 -0
  191. package/src/render/backend/webgpu/skinScatterPass.ts +309 -0
  192. package/src/render/backend/webgpu/surfaceTexturePass.ts +42 -12
  193. package/src/render/backend/webgpu/textPass.ts +2 -1
  194. package/src/render/backend/webgpu/waterPass.ts +2 -1
  195. package/src/render/backend/webgpu/windStreakPass.ts +2 -1
  196. package/src/render/boltBatch.ts +2 -1
  197. package/src/render/causticsRenderer.ts +2 -1
  198. package/src/render/clothBindingData.ts +89 -0
  199. package/src/render/clothPlacement.ts +114 -0
  200. package/src/render/compressedSource.ts +198 -0
  201. package/src/render/cutoutCaster.ts +20 -2
  202. package/src/render/cutoutDither.ts +99 -0
  203. package/src/render/decalPass.ts +2 -1
  204. package/src/render/eyeRefraction.ts +72 -0
  205. package/src/render/glCompressed.ts +86 -0
  206. package/src/render/globalMediumPass.ts +3 -2
  207. package/src/render/hairLobes.ts +188 -0
  208. package/src/render/lightBudget.ts +25 -0
  209. package/src/render/lineBatch.ts +3 -1
  210. package/src/render/mesh.ts +23 -0
  211. package/src/render/oitPass.ts +2 -1
  212. package/src/render/particleBatch.ts +3 -2
  213. package/src/render/particlePool.ts +6 -2
  214. package/src/render/plumeRenderer.ts +3 -2
  215. package/src/render/recon/motionVectors.ts +6 -3
  216. package/src/render/renderQuality.ts +37 -2
  217. package/src/render/rendererHarness.ts +4 -0
  218. package/src/render/sceneCoverage.ts +78 -0
  219. package/src/render/sceneTarget.ts +21 -0
  220. package/src/render/sdfTextRenderer.ts +2 -1
  221. package/src/render/shaders/clothBinding.ts +81 -0
  222. package/src/render/shaders/depth.ts +45 -8
  223. package/src/render/shaders/flat/anisotropic.ts +68 -0
  224. package/src/render/shaders/flat/eye.ts +82 -0
  225. package/src/render/shaders/flat/hair.ts +102 -0
  226. package/src/render/shaders/flat/index.ts +42 -3
  227. package/src/render/shaders/flat/main.ts +113 -17
  228. package/src/render/shaders/flat/models.ts +286 -0
  229. package/src/render/shaders/flat/preamble.ts +26 -24
  230. package/src/render/shaders/flat/skin.ts +116 -0
  231. package/src/render/shaders/generated/depth.wgsl.ts +66 -24
  232. package/src/render/shaders/generated/flat.wgsl.ts +1853 -1742
  233. package/src/render/shaders/generated/line.wgsl.ts +1 -1
  234. package/src/render/shaders/generated/particle.wgsl.ts +3 -3
  235. package/src/render/shaders/generated/rush.wgsl.ts +1 -1
  236. package/src/render/shaders/generated/sdfText.wgsl.ts +1 -1
  237. package/src/render/shaders/generated/skinBlur.wgsl.ts +56 -0
  238. package/src/render/shaders/generated/temporalResolve.wgsl.ts +1 -1
  239. package/src/render/shaders/outputTransform.ts +24 -1
  240. package/src/render/shaders/recon/motion.wgsl.ts +102 -0
  241. package/src/render/shaders/recon/resolve.wgsl.ts +15 -1
  242. package/src/render/shaders/rush.ts +13 -2
  243. package/src/render/shaders/skinBlur.ts +105 -0
  244. package/src/render/shaders/skinning.ts +31 -4
  245. package/src/render/shaders/temporalResolve.ts +12 -5
  246. package/src/render/shadowCasters.ts +13 -0
  247. package/src/render/skinBlur.ts +53 -0
  248. package/src/render/skinScatter.ts +92 -0
  249. package/src/render/skinnedClothRun.ts +128 -0
  250. package/src/render/ssrPass.ts +2 -1
  251. package/src/render/surfaceModel.ts +274 -0
  252. package/src/render/surfaceTexture.ts +134 -63
  253. package/src/render/textRenderer.ts +2 -1
  254. package/src/render/vertexDefaults.ts +8 -0
  255. package/src/render/waterRenderer.ts +2 -1
  256. package/src/render/windStreakRenderer.ts +2 -1
  257. package/dist/math/exact.d.ts +0 -76
  258. package/dist/math/exact.js +0 -327
  259. package/src/math/exact.ts +0 -340
@@ -33,6 +33,8 @@ import type { WorldLightFieldOptions } from '../../driftLight/worldLightField.ts
33
33
  * Beyond this the velocity is shortened and the direction kept.
34
34
  */
35
35
  import type { RendererApi } from '../api.ts';
36
+ import type { ClothBindingData } from '../../clothBindingData.ts';
37
+ import { GlClothBinding, GlClothParticles } from './clothTextures.ts';
36
38
  import type { ProbeBakeOptions } from '../../reflectionProbe.ts';
37
39
  import type { ProbeGridOptions } from '../../probeGrid.ts';
38
40
  import type { AreaLightBuffer, AreaLightSource } from '../../areaLights.ts';
@@ -45,6 +47,7 @@ import type { IncrementalMesh } from '../../mesh.ts';
45
47
  import type { MeshData } from '../../mesh.ts';
46
48
  import type { MeshOptions } from '../api.ts';
47
49
  import { SurfaceTexture } from '../../surfaceTexture.ts';
50
+ import type { CompressedTextureFormat, SurfaceSource } from '../../compressedSource.ts';
48
51
  import type { SurfaceMaterial, SurfaceTextureOptions } from '../../surfaceTexture.ts';
49
52
  import { PlumeRenderer } from '../../plumeRenderer.ts';
50
53
  import type { PlumeOptions, PlumePlacement } from '../../plumeRenderer.ts';
@@ -823,6 +826,17 @@ export declare class WebGL2Renderer implements RendererApi {
823
826
  private flatMorphedUniforms;
824
827
  private flatBothProgram;
825
828
  private flatBothUniforms;
829
+ /**
830
+ * The two skinned variants built with `SKIN_EIGHT` on, for a rig whose vertices name eight
831
+ * joints: compiled the first time such a mesh is created, and only then. See `skinning.ts`.
832
+ */
833
+ private flatSkinned8Program;
834
+ private flatSkinned8Uniforms;
835
+ private flatBoth8Program;
836
+ private flatBoth8Uniforms;
837
+ /** And its shadow caster, so the shadow parts from nothing the body does. */
838
+ private depthSkinned8Program;
839
+ private depthSkinned8Uniforms;
826
840
  /** The morph weights the following draws use, or null for none. */
827
841
  private morphWeights;
828
842
  /**
@@ -856,6 +870,14 @@ export declare class WebGL2Renderer implements RendererApi {
856
870
  * before this existed.
857
871
  */
858
872
  private readonly sceneTarget;
873
+ /**
874
+ * Skin's screen-space scattering, made where the profile asks for it and has a composite to add
875
+ * into, and null otherwise — which is every profile by default. See `GlSkinScatter`.
876
+ */
877
+ private readonly skinScatter;
878
+ /** Whether this frame has spread its skin: once, at its first blended draw or at its end. */
879
+ private skinScattered;
880
+ private readonly skinInverseProjection;
859
881
  /** So the refusal below is once per renderer rather than once per frame. See `setColourGrade`. */
860
882
  private warnedGradeWithoutComposite;
861
883
  /** Scratch for a volume's `uDepthToLocal`. Built per draw and never allocated in the loop. */
@@ -878,6 +900,21 @@ export declare class WebGL2Renderer implements RendererApi {
878
900
  private readonly skinPalette;
879
901
  /** Whether a palette is currently chosen. Distinct from whether one was ever uploaded. */
880
902
  private skinPaletteSet;
903
+ /**
904
+ * Cloth-bound skinned lit programs, keyed `eight|morphed`, compiled when a binding is made for a
905
+ * mesh of that kind; and their casters, keyed by `eight`. See `ensureClothPrograms`.
906
+ */
907
+ private readonly clothFlat;
908
+ private readonly clothDepth;
909
+ /** The cloth the next skinned draws are placed by, or null. See `setCloth`. */
910
+ private cloth;
911
+ /**
912
+ * Each shading model's lit programs, keyed `variant|model` by the vertex variant they pair with,
913
+ * compiled the first time a draw asks for one. See `modelProgram`.
914
+ */
915
+ private readonly modelFlat;
916
+ /** The last palette chosen, which an eye's axis is turned by. See `setSkinPalette`. */
917
+ private paletteData;
881
918
  private readonly emptyTexture2D;
882
919
  /** One glass resolution reused by every draw, so a pane allocates nothing. See `glass.ts`. */
883
920
  private readonly glassScratch;
@@ -936,6 +973,11 @@ export declare class WebGL2Renderer implements RendererApi {
936
973
  private readonly surfaceScene;
937
974
  /** The two halves of `uWriteMode`, kept here because a `vec2` is written whole. */
938
975
  private oitWeight;
976
+ /**
977
+ * How the surfaces drawn next meet the medium: what `setSurfaceFog` set, and `FOG_RECEDE` from
978
+ * each `bindMeshPass`. A translucent draw's own fog is measured against this and puts it back.
979
+ */
980
+ private surfaceFog;
939
981
  private ditherFade;
940
982
  /** Said once, not per frame, where the context cannot give the float target the sum needs. */
941
983
  private oitRefused;
@@ -1298,6 +1340,22 @@ export declare class WebGL2Renderer implements RendererApi {
1298
1340
  private materialHasMaps;
1299
1341
  /** The material last set, so a lit program rebuilt for glass can be given it. */
1300
1342
  private currentMaterial;
1343
+ /**
1344
+ * The frame a dithered cutout's pattern is offset by, advanced at `beginFrame` and wrapped at 64
1345
+ * so the noise's argument stays small. See `cutoutDither.ts`.
1346
+ */
1347
+ private cutoutFrame;
1348
+ /** Scratch for `uCutout`, so a material write allocates nothing. */
1349
+ private readonly cutoutVector;
1350
+ /** The material's model numbers, `uModelParams`, packed by `packModel`. */
1351
+ private readonly modelParams;
1352
+ /** The material's four switches, `uMaterialFlags`: albedo, ORM map, emissive map, two-sided. */
1353
+ private readonly materialFlags;
1354
+ /**
1355
+ * The default framebuffer's sample count, read once, for a frame drawn with no scene target: a
1356
+ * dithered cutout there takes alpha-to-coverage when the canvas itself is multisampled.
1357
+ */
1358
+ private readonly canvasSamples;
1301
1359
  /**
1302
1360
  * The lit stage's switches: what the lit programs were compiled with (`litOn`), and what the
1303
1361
  * profile and the content have asked for since (`litWanted`).
@@ -1729,14 +1787,25 @@ export declare class WebGL2Renderer implements RendererApi {
1729
1787
  * a canvas drawn procedurally at runtime, a decoded bitmap, a video frame — stays
1730
1788
  * the consumer's decision. What it gains is a GPU object with sane sampler state.
1731
1789
  */
1732
- createSurfaceTexture(source: TexImageSource, options?: SurfaceTextureOptions): SurfaceTexture;
1790
+ createSurfaceTexture(source: SurfaceSource, options?: SurfaceTextureOptions): SurfaceTexture;
1791
+ private compressedCache;
1792
+ /**
1793
+ * The BC formats this device takes as blocks, each named with its colour space (`'bc7-srgb'`).
1794
+ *
1795
+ * **Ask before choosing**, because a phone usually answers none: a BC texture handed to
1796
+ * `createSurfaceTexture` where its format is not here is refused by name rather than decoded,
1797
+ * since core ships no decoder. `@driftengine/assets`' loader asks this for every BC texture in a
1798
+ * container and decodes at load where the answer is no. Read from the four extensions WebGL2
1799
+ * spreads BC across; see `glCompressed.ts`.
1800
+ */
1801
+ get compressedFormats(): readonly CompressedTextureFormat[];
1733
1802
  /**
1734
1803
  * Upload several images of one size as the layers of one array, for a merged mesh that names a
1735
1804
  * layer per vertex (`MeshData.layers`). One material binding then covers every image, which is
1736
1805
  * what makes a block wearing forty facades one draw. Every layer must be the same size, and the
1737
1806
  * refusal names the first that is not.
1738
1807
  */
1739
- createSurfaceTextureArray(sources: readonly TexImageSource[], options?: SurfaceTextureOptions): SurfaceTexture;
1808
+ createSurfaceTextureArray(sources: readonly SurfaceSource[], options?: SurfaceTextureOptions): SurfaceTexture;
1740
1809
  /**
1741
1810
  * Replace a surface texture's pixels, keeping the GPU object and its sampler state.
1742
1811
  *
@@ -1777,6 +1846,51 @@ export declare class WebGL2Renderer implements RendererApi {
1777
1846
  * runtime out of core.
1778
1847
  */
1779
1848
  setSkinPalette(palette: Float32Array | null): void;
1849
+ /**
1850
+ * The lit program for one vertex variant shading by a model: the standard program's vertex
1851
+ * stage, and the fragment stage with the model's switch on (`modelBound`). Compiled the first
1852
+ * time a draw asks — a scene that names no model compiles none — and fed the pass and the
1853
+ * material at once, as `ensureClothPrograms` feeds its own.
1854
+ */
1855
+ private modelProgram;
1856
+ /**
1857
+ * An eye's axis in the world for this draw, into its program's `uModelParams`: the material's
1858
+ * own numbers with the axis turned by the draw's model matrix and the eye's joint. See
1859
+ * `eyeAxisInWorld`.
1860
+ */
1861
+ private writeEyeAxis;
1862
+ /**
1863
+ * A mesh's cloth binding: which simulation triangle each of its vertices follows, where on it,
1864
+ * and by how much. See `ClothBindingData`.
1865
+ *
1866
+ * Refused by name for a mesh with no rig — a binding blends a vertex between its skinning and the
1867
+ * cloth — and for one that disagrees with the mesh. Compiles the programs that draw and cast it
1868
+ * here, at creation, so no frame ever waits on a compile.
1869
+ */
1870
+ createClothBinding(mesh: Mesh, data: ClothBindingData): GlClothBinding;
1871
+ /** One character's particles, `count` of them, to be updated every frame. */
1872
+ createClothParticles(count: number): GlClothParticles;
1873
+ /**
1874
+ * This frame's particles, three floats each, world space; last frame's are kept for motion. A
1875
+ * simulation's output, as it is.
1876
+ */
1877
+ updateClothParticles(particles: GlClothParticles, positions: Float32Array): void;
1878
+ /**
1879
+ * Place the following skinned draws by a cloth: `binding` the mesh's, `particles` the
1880
+ * character's. Null for none, which is every draw until this is called. Both or neither, and
1881
+ * the particles must be as many as the binding names.
1882
+ */
1883
+ setCloth(binding: GlClothBinding | null, particles?: GlClothParticles | null): void;
1884
+ disposeClothBinding(binding: GlClothBinding): void;
1885
+ disposeClothParticles(particles: GlClothParticles): void;
1886
+ /**
1887
+ * The cloth-bound lit program and caster for a rig of this kind, once. Fed at once if a pass is
1888
+ * bound, for the reason `ensureVariant` gives: a program compiled after `bindMeshPass` would
1889
+ * otherwise carry every uniform at zero.
1890
+ */
1891
+ private ensureClothPrograms;
1892
+ /** Bind the cloth's three textures to their units and name them to `u`. */
1893
+ private bindCloth;
1780
1894
  /**
1781
1895
  * Choose the morph weights the following `drawMesh` calls deform by, or null for none.
1782
1896
  *
@@ -1786,6 +1900,14 @@ export declare class WebGL2Renderer implements RendererApi {
1786
1900
  */
1787
1901
  setMorphWeights(weights: Float32Array | null): void;
1788
1902
  setMaterial(material: SurfaceMaterial | null): void;
1903
+ /**
1904
+ * How a material's cutout edge is drawn this frame: the material's mode against what the frame can
1905
+ * resolve. A translucent draw tests hard whatever the material says, because a blended draw has
1906
+ * nothing to average a pattern with. See `cutoutDither.ts`.
1907
+ */
1908
+ private cutoutResolveNow;
1909
+ /** The lit pass's `uCutout` for a material this frame, into scratch. See `uCutout`. */
1910
+ private cutoutUniform;
1789
1911
  /**
1790
1912
  * One flat program's view of the current material.
1791
1913
  *
@@ -1808,7 +1930,7 @@ export declare class WebGL2Renderer implements RendererApi {
1808
1930
  * Rebind `SURFACE_TEXTURE_UNIT` to whatever `setSurfaceTexture` last put there.
1809
1931
  *
1810
1932
  * Only `drawSdfText` calls this, after the atlas has finished borrowing the same unit.
1811
- * No uniform is written here — the flat program's `uAlbedo`/`uAlbedoEnabled` were never
1933
+ * No uniform is written here — the flat program's `uAlbedo` and its flag in `uMaterialFlags` were never
1812
1934
  * touched by the text draw and are still correct, since that draw runs its own separate
1813
1935
  * program. What moved is unit 15's actual `WebGLTexture` binding, which is GL state, not
1814
1936
  * program state, and this puts it back to what `currentSurfaceTexture` says it should be.
@@ -1866,6 +1988,22 @@ export declare class WebGL2Renderer implements RendererApi {
1866
1988
  */
1867
1989
  setEnvironmentAmbient(_amount: number): void;
1868
1990
  setSurfaceGrain(amount: number): void;
1991
+ /**
1992
+ * Whether the surfaces drawn next meet the medium: distance fog and the global medium's haze.
1993
+ * True is the default, and what `bindMeshPass` restores.
1994
+ *
1995
+ * **The opaque counterpart of `TranslucentMeshOptions.fog`**, which a translucent draw has had
1996
+ * all along; the shader's per-draw switch was there, and nothing reached it for an ordinary mesh.
1997
+ * What it is for is a medium that darkens one thing and not another — a floor receding into the
1998
+ * distance under figures that must keep their full value however far from the camera they stand.
1999
+ * Material state like `setSurfaceGrain`: instanced and skinned draws read it too, and a
2000
+ * translucent draw's own `fog` is measured against it and puts it back.
2001
+ *
2002
+ * **What it gives up** is the medium's honesty: a surface out of the fog is drawn as though the
2003
+ * air between it and the eye were empty, so it should be a surface the scene means to stand
2004
+ * apart, not one whose distance is the point.
2005
+ */
2006
+ setSurfaceFog(enabled: boolean): void;
1869
2007
  /**
1870
2008
  * One float of material state, into every flat program.
1871
2009
  *
@@ -1876,6 +2014,8 @@ export declare class WebGL2Renderer implements RendererApi {
1876
2014
  * reads, drew what was asked.
1877
2015
  */
1878
2016
  private writeFlatFloat;
2017
+ /** One int of material state, into every flat program, for `writeFlatFloat`'s reason. */
2018
+ private writeFlatInt;
1879
2019
  /**
1880
2020
  * How much of the surfaces drawn next survives a screen-door dither, for crossfading two levels
1881
2021
  * of detail of one thing.
@@ -3288,6 +3428,22 @@ export declare class WebGL2Renderer implements RendererApi {
3288
3428
  * neither read nor advanced.
3289
3429
  */
3290
3430
  _previousModel?: ReadonlyMat4 | Mover | null): void;
3431
+ /**
3432
+ * Whether a skin draw now draws its two halves: the profile asked, the frame has not spread its
3433
+ * skin yet, this is the frame's own picture — not a mirror's or a probe's, nor an overlay after
3434
+ * the frame — and the blur's target can be had.
3435
+ */
3436
+ private skinSplits;
3437
+ /**
3438
+ * Spread the frame's skin and add it back: once, at the first blended draw or at the frame's end.
3439
+ * Called first in every draw WebGPU records as blended — translucent meshes and batches, text,
3440
+ * particles, plumes, wind streaks, bolts, lines, caustics, film — so the two backends add skin at
3441
+ * the same point. The frame's depth is copied for the blur to read, and where it cannot be the
3442
+ * diffuse goes back unspread rather than not at all.
3443
+ */
3444
+ private scatterSkin;
3445
+ /** One draw of a mesh, as `drawMesh` describes, of the half of a skin `half` names. */
3446
+ private drawMeshHalf;
3291
3447
  /**
3292
3448
  * Draw a mesh you can see through, in the same material as everything else by default.
3293
3449
  *