@flighthq/scene3d-wgpu 0.2.1-next.840.857425c

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 (263) hide show
  1. package/dist/anisotropyPbrWgpuMeshMaterialRenderer.d.ts +4 -0
  2. package/dist/anisotropyPbrWgpuMeshMaterialRenderer.d.ts.map +1 -0
  3. package/dist/anisotropyPbrWgpuMeshMaterialRenderer.js +52 -0
  4. package/dist/anisotropyPbrWgpuMeshMaterialRenderer.js.map +1 -0
  5. package/dist/blinnPhongWgpuMeshMaterialRenderer.d.ts +4 -0
  6. package/dist/blinnPhongWgpuMeshMaterialRenderer.d.ts.map +1 -0
  7. package/dist/blinnPhongWgpuMeshMaterialRenderer.js +66 -0
  8. package/dist/blinnPhongWgpuMeshMaterialRenderer.js.map +1 -0
  9. package/dist/clearcoatPbrWgpuMeshMaterialRenderer.d.ts +4 -0
  10. package/dist/clearcoatPbrWgpuMeshMaterialRenderer.d.ts.map +1 -0
  11. package/dist/clearcoatPbrWgpuMeshMaterialRenderer.js +52 -0
  12. package/dist/clearcoatPbrWgpuMeshMaterialRenderer.js.map +1 -0
  13. package/dist/customShaderWgpuMeshMaterialRenderer.d.ts +7 -0
  14. package/dist/customShaderWgpuMeshMaterialRenderer.d.ts.map +1 -0
  15. package/dist/customShaderWgpuMeshMaterialRenderer.js +225 -0
  16. package/dist/customShaderWgpuMeshMaterialRenderer.js.map +1 -0
  17. package/dist/depthWgpuMeshMaterialRenderer.d.ts +4 -0
  18. package/dist/depthWgpuMeshMaterialRenderer.d.ts.map +1 -0
  19. package/dist/depthWgpuMeshMaterialRenderer.js +42 -0
  20. package/dist/depthWgpuMeshMaterialRenderer.js.map +1 -0
  21. package/dist/drawWgpuScene3D.d.ts +4 -0
  22. package/dist/drawWgpuScene3D.d.ts.map +1 -0
  23. package/dist/drawWgpuScene3D.js +171 -0
  24. package/dist/drawWgpuScene3D.js.map +1 -0
  25. package/dist/emissiveWgpuMeshMaterialRenderer.d.ts +4 -0
  26. package/dist/emissiveWgpuMeshMaterialRenderer.d.ts.map +1 -0
  27. package/dist/emissiveWgpuMeshMaterialRenderer.js +51 -0
  28. package/dist/emissiveWgpuMeshMaterialRenderer.js.map +1 -0
  29. package/dist/enableWgpuScene3DCustomShaderGuards.d.ts +5 -0
  30. package/dist/enableWgpuScene3DCustomShaderGuards.d.ts.map +1 -0
  31. package/dist/enableWgpuScene3DCustomShaderGuards.js +56 -0
  32. package/dist/enableWgpuScene3DCustomShaderGuards.js.map +1 -0
  33. package/dist/enableWgpuScene3DForwardLightSelectionGuards.d.ts +4 -0
  34. package/dist/enableWgpuScene3DForwardLightSelectionGuards.d.ts.map +1 -0
  35. package/dist/enableWgpuScene3DForwardLightSelectionGuards.js +17 -0
  36. package/dist/enableWgpuScene3DForwardLightSelectionGuards.js.map +1 -0
  37. package/dist/explainWgpuScene3DForwardLightSelection.d.ts +3 -0
  38. package/dist/explainWgpuScene3DForwardLightSelection.d.ts.map +1 -0
  39. package/dist/explainWgpuScene3DForwardLightSelection.js +18 -0
  40. package/dist/explainWgpuScene3DForwardLightSelection.js.map +1 -0
  41. package/dist/index.d.ts +51 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +51 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/iridescencePbrWgpuMeshMaterialRenderer.d.ts +4 -0
  46. package/dist/iridescencePbrWgpuMeshMaterialRenderer.d.ts.map +1 -0
  47. package/dist/iridescencePbrWgpuMeshMaterialRenderer.js +60 -0
  48. package/dist/iridescencePbrWgpuMeshMaterialRenderer.js.map +1 -0
  49. package/dist/lambertWgpuMeshMaterialRenderer.d.ts +4 -0
  50. package/dist/lambertWgpuMeshMaterialRenderer.d.ts.map +1 -0
  51. package/dist/lambertWgpuMeshMaterialRenderer.js +61 -0
  52. package/dist/lambertWgpuMeshMaterialRenderer.js.map +1 -0
  53. package/dist/matcapWgpuMeshMaterialRenderer.d.ts +4 -0
  54. package/dist/matcapWgpuMeshMaterialRenderer.d.ts.map +1 -0
  55. package/dist/matcapWgpuMeshMaterialRenderer.js +54 -0
  56. package/dist/matcapWgpuMeshMaterialRenderer.js.map +1 -0
  57. package/dist/normalWgpuMeshMaterialRenderer.d.ts +4 -0
  58. package/dist/normalWgpuMeshMaterialRenderer.d.ts.map +1 -0
  59. package/dist/normalWgpuMeshMaterialRenderer.js +47 -0
  60. package/dist/normalWgpuMeshMaterialRenderer.js.map +1 -0
  61. package/dist/phongWgpuMeshMaterialRenderer.d.ts +4 -0
  62. package/dist/phongWgpuMeshMaterialRenderer.d.ts.map +1 -0
  63. package/dist/phongWgpuMeshMaterialRenderer.js +63 -0
  64. package/dist/phongWgpuMeshMaterialRenderer.js.map +1 -0
  65. package/dist/prepareWgpuScene3DForwardLights.d.ts +3 -0
  66. package/dist/prepareWgpuScene3DForwardLights.d.ts.map +1 -0
  67. package/dist/prepareWgpuScene3DForwardLights.js +110 -0
  68. package/dist/prepareWgpuScene3DForwardLights.js.map +1 -0
  69. package/dist/registerStandardPbrWgpuMaterial.d.ts +3 -0
  70. package/dist/registerStandardPbrWgpuMaterial.d.ts.map +1 -0
  71. package/dist/registerStandardPbrWgpuMaterial.js +11 -0
  72. package/dist/registerStandardPbrWgpuMaterial.js.map +1 -0
  73. package/dist/shadedWgpuMeshMaterialRenderer.d.ts +11 -0
  74. package/dist/shadedWgpuMeshMaterialRenderer.d.ts.map +1 -0
  75. package/dist/shadedWgpuMeshMaterialRenderer.js +47 -0
  76. package/dist/shadedWgpuMeshMaterialRenderer.js.map +1 -0
  77. package/dist/sheenPbrWgpuMeshMaterialRenderer.d.ts +4 -0
  78. package/dist/sheenPbrWgpuMeshMaterialRenderer.d.ts.map +1 -0
  79. package/dist/sheenPbrWgpuMeshMaterialRenderer.js +58 -0
  80. package/dist/sheenPbrWgpuMeshMaterialRenderer.js.map +1 -0
  81. package/dist/specularGlossinessPbrWgpuMeshMaterialRenderer.d.ts +4 -0
  82. package/dist/specularGlossinessPbrWgpuMeshMaterialRenderer.d.ts.map +1 -0
  83. package/dist/specularGlossinessPbrWgpuMeshMaterialRenderer.js +126 -0
  84. package/dist/specularGlossinessPbrWgpuMeshMaterialRenderer.js.map +1 -0
  85. package/dist/specularPbrWgpuMeshMaterialRenderer.d.ts +4 -0
  86. package/dist/specularPbrWgpuMeshMaterialRenderer.d.ts.map +1 -0
  87. package/dist/specularPbrWgpuMeshMaterialRenderer.js +65 -0
  88. package/dist/specularPbrWgpuMeshMaterialRenderer.js.map +1 -0
  89. package/dist/standardPbrWgpuMeshMaterialRenderer.d.ts +9 -0
  90. package/dist/standardPbrWgpuMeshMaterialRenderer.d.ts.map +1 -0
  91. package/dist/standardPbrWgpuMeshMaterialRenderer.js +174 -0
  92. package/dist/standardPbrWgpuMeshMaterialRenderer.js.map +1 -0
  93. package/dist/subsurfacePbrWgpuMeshMaterialRenderer.d.ts +4 -0
  94. package/dist/subsurfacePbrWgpuMeshMaterialRenderer.d.ts.map +1 -0
  95. package/dist/subsurfacePbrWgpuMeshMaterialRenderer.js +68 -0
  96. package/dist/subsurfacePbrWgpuMeshMaterialRenderer.js.map +1 -0
  97. package/dist/toonWgpuMeshMaterialRenderer.d.ts +4 -0
  98. package/dist/toonWgpuMeshMaterialRenderer.d.ts.map +1 -0
  99. package/dist/toonWgpuMeshMaterialRenderer.js +71 -0
  100. package/dist/toonWgpuMeshMaterialRenderer.js.map +1 -0
  101. package/dist/transmissionVolumePbrWgpuMeshMaterialRenderer.d.ts +4 -0
  102. package/dist/transmissionVolumePbrWgpuMeshMaterialRenderer.d.ts.map +1 -0
  103. package/dist/transmissionVolumePbrWgpuMeshMaterialRenderer.js +74 -0
  104. package/dist/transmissionVolumePbrWgpuMeshMaterialRenderer.js.map +1 -0
  105. package/dist/unlitWgpuMeshMaterialRenderer.d.ts +4 -0
  106. package/dist/unlitWgpuMeshMaterialRenderer.d.ts.map +1 -0
  107. package/dist/unlitWgpuMeshMaterialRenderer.js +57 -0
  108. package/dist/unlitWgpuMeshMaterialRenderer.js.map +1 -0
  109. package/dist/vertexColorWgpuMeshMaterialRenderer.d.ts +4 -0
  110. package/dist/vertexColorWgpuMeshMaterialRenderer.d.ts.map +1 -0
  111. package/dist/vertexColorWgpuMeshMaterialRenderer.js +55 -0
  112. package/dist/vertexColorWgpuMeshMaterialRenderer.js.map +1 -0
  113. package/dist/wgpuClassicPrelude.d.ts +8 -0
  114. package/dist/wgpuClassicPrelude.d.ts.map +1 -0
  115. package/dist/wgpuClassicPrelude.js +319 -0
  116. package/dist/wgpuClassicPrelude.js.map +1 -0
  117. package/dist/wgpuCustomMaterialAbi.d.ts +3 -0
  118. package/dist/wgpuCustomMaterialAbi.d.ts.map +1 -0
  119. package/dist/wgpuCustomMaterialAbi.js +5 -0
  120. package/dist/wgpuCustomMaterialAbi.js.map +1 -0
  121. package/dist/wgpuDebugPrelude.d.ts +7 -0
  122. package/dist/wgpuDebugPrelude.d.ts.map +1 -0
  123. package/dist/wgpuDebugPrelude.js +133 -0
  124. package/dist/wgpuDebugPrelude.js.map +1 -0
  125. package/dist/wgpuEnvironmentCube.d.ts +4 -0
  126. package/dist/wgpuEnvironmentCube.d.ts.map +1 -0
  127. package/dist/wgpuEnvironmentCube.js +66 -0
  128. package/dist/wgpuEnvironmentCube.js.map +1 -0
  129. package/dist/wgpuEnvironmentIblBake.d.ts +4 -0
  130. package/dist/wgpuEnvironmentIblBake.d.ts.map +1 -0
  131. package/dist/wgpuEnvironmentIblBake.js +458 -0
  132. package/dist/wgpuEnvironmentIblBake.js.map +1 -0
  133. package/dist/wgpuEnvironmentSkybox.d.ts +3 -0
  134. package/dist/wgpuEnvironmentSkybox.d.ts.map +1 -0
  135. package/dist/wgpuEnvironmentSkybox.js +159 -0
  136. package/dist/wgpuEnvironmentSkybox.js.map +1 -0
  137. package/dist/wgpuMatcapPrelude.d.ts +7 -0
  138. package/dist/wgpuMatcapPrelude.d.ts.map +1 -0
  139. package/dist/wgpuMatcapPrelude.js +134 -0
  140. package/dist/wgpuMatcapPrelude.js.map +1 -0
  141. package/dist/wgpuMeshMaterialRegistry.d.ts +5 -0
  142. package/dist/wgpuMeshMaterialRegistry.d.ts.map +1 -0
  143. package/dist/wgpuMeshMaterialRegistry.js +29 -0
  144. package/dist/wgpuMeshMaterialRegistry.js.map +1 -0
  145. package/dist/wgpuMeshPipeline.d.ts +43 -0
  146. package/dist/wgpuMeshPipeline.d.ts.map +1 -0
  147. package/dist/wgpuMeshPipeline.js +1007 -0
  148. package/dist/wgpuMeshPipeline.js.map +1 -0
  149. package/dist/wgpuMeshUpload.d.ts +3 -0
  150. package/dist/wgpuMeshUpload.d.ts.map +1 -0
  151. package/dist/wgpuMeshUpload.js +58 -0
  152. package/dist/wgpuMeshUpload.js.map +1 -0
  153. package/dist/wgpuParticleEmitter3D.d.ts +4 -0
  154. package/dist/wgpuParticleEmitter3D.d.ts.map +1 -0
  155. package/dist/wgpuParticleEmitter3D.js +403 -0
  156. package/dist/wgpuParticleEmitter3D.js.map +1 -0
  157. package/dist/wgpuPbrPipelineCache.d.ts +4 -0
  158. package/dist/wgpuPbrPipelineCache.d.ts.map +1 -0
  159. package/dist/wgpuPbrPipelineCache.js +52 -0
  160. package/dist/wgpuPbrPipelineCache.js.map +1 -0
  161. package/dist/wgpuPbrPrelude.d.ts +7 -0
  162. package/dist/wgpuPbrPrelude.d.ts.map +1 -0
  163. package/dist/wgpuPbrPrelude.js +551 -0
  164. package/dist/wgpuPbrPrelude.js.map +1 -0
  165. package/dist/wgpuScene3DRuntime.d.ts +5 -0
  166. package/dist/wgpuScene3DRuntime.d.ts.map +1 -0
  167. package/dist/wgpuScene3DRuntime.js +81 -0
  168. package/dist/wgpuScene3DRuntime.js.map +1 -0
  169. package/dist/wgpuScene3DTestHelper.d.ts +14 -0
  170. package/dist/wgpuScene3DTestHelper.d.ts.map +1 -0
  171. package/dist/wgpuScene3DTestHelper.js +121 -0
  172. package/dist/wgpuScene3DTestHelper.js.map +1 -0
  173. package/dist/wgpuScene3DTime.d.ts +4 -0
  174. package/dist/wgpuScene3DTime.d.ts.map +1 -0
  175. package/dist/wgpuScene3DTime.js +11 -0
  176. package/dist/wgpuScene3DTime.js.map +1 -0
  177. package/dist/wgpuShadedModifierSnippet.d.ts +4 -0
  178. package/dist/wgpuShadedModifierSnippet.d.ts.map +1 -0
  179. package/dist/wgpuShadedModifierSnippet.js +18 -0
  180. package/dist/wgpuShadedModifierSnippet.js.map +1 -0
  181. package/dist/wgpuShadedPrelude.d.ts +16 -0
  182. package/dist/wgpuShadedPrelude.d.ts.map +1 -0
  183. package/dist/wgpuShadedPrelude.js +625 -0
  184. package/dist/wgpuShadedPrelude.js.map +1 -0
  185. package/dist/wgpuShadowMap.d.ts +4 -0
  186. package/dist/wgpuShadowMap.d.ts.map +1 -0
  187. package/dist/wgpuShadowMap.js +155 -0
  188. package/dist/wgpuShadowMap.js.map +1 -0
  189. package/dist/wgpuSkinPalette.d.ts +7 -0
  190. package/dist/wgpuSkinPalette.d.ts.map +1 -0
  191. package/dist/wgpuSkinPalette.js +173 -0
  192. package/dist/wgpuSkinPalette.js.map +1 -0
  193. package/dist/wgpuToonPrelude.d.ts +8 -0
  194. package/dist/wgpuToonPrelude.d.ts.map +1 -0
  195. package/dist/wgpuToonPrelude.js +192 -0
  196. package/dist/wgpuToonPrelude.js.map +1 -0
  197. package/dist/wgpuUnlitPrelude.d.ts +9 -0
  198. package/dist/wgpuUnlitPrelude.d.ts.map +1 -0
  199. package/dist/wgpuUnlitPrelude.js +142 -0
  200. package/dist/wgpuUnlitPrelude.js.map +1 -0
  201. package/dist/wgpuWireframePrelude.d.ts +6 -0
  202. package/dist/wgpuWireframePrelude.d.ts.map +1 -0
  203. package/dist/wgpuWireframePrelude.js +77 -0
  204. package/dist/wgpuWireframePrelude.js.map +1 -0
  205. package/dist/wgpuWireframeUpload.d.ts +3 -0
  206. package/dist/wgpuWireframeUpload.d.ts.map +1 -0
  207. package/dist/wgpuWireframeUpload.js +68 -0
  208. package/dist/wgpuWireframeUpload.js.map +1 -0
  209. package/dist/wireframeWgpuMeshMaterialRenderer.d.ts +4 -0
  210. package/dist/wireframeWgpuMeshMaterialRenderer.d.ts.map +1 -0
  211. package/dist/wireframeWgpuMeshMaterialRenderer.js +69 -0
  212. package/dist/wireframeWgpuMeshMaterialRenderer.js.map +1 -0
  213. package/package.json +57 -0
  214. package/src/anisotropyPbrWgpuMeshMaterialRenderer.test.ts +90 -0
  215. package/src/blinnPhongWgpuMeshMaterialRenderer.test.ts +82 -0
  216. package/src/clearcoatPbrWgpuMeshMaterialRenderer.test.ts +90 -0
  217. package/src/customShaderWgpuMeshMaterialRenderer.test.ts +207 -0
  218. package/src/depthWgpuMeshMaterialRenderer.test.ts +69 -0
  219. package/src/drawWgpuScene3D.test.ts +247 -0
  220. package/src/emissiveWgpuMeshMaterialRenderer.test.ts +64 -0
  221. package/src/enableWgpuScene3DCustomShaderGuards.test.ts +73 -0
  222. package/src/enableWgpuScene3DForwardLightSelectionGuards.test.ts +39 -0
  223. package/src/explainWgpuScene3DForwardLightSelection.test.ts +15 -0
  224. package/src/iridescencePbrWgpuMeshMaterialRenderer.test.ts +90 -0
  225. package/src/lambertWgpuMeshMaterialRenderer.test.ts +77 -0
  226. package/src/matcapWgpuMeshMaterialRenderer.test.ts +69 -0
  227. package/src/normalWgpuMeshMaterialRenderer.test.ts +69 -0
  228. package/src/phongWgpuMeshMaterialRenderer.test.ts +79 -0
  229. package/src/prepareWgpuScene3DForwardLights.test.ts +84 -0
  230. package/src/registerStandardPbrWgpuMaterial.test.ts +15 -0
  231. package/src/shadedWgpuMeshMaterialRenderer.test.ts +63 -0
  232. package/src/sheenPbrWgpuMeshMaterialRenderer.test.ts +87 -0
  233. package/src/specularGlossinessPbrWgpuMeshMaterialRenderer.test.ts +100 -0
  234. package/src/specularPbrWgpuMeshMaterialRenderer.test.ts +90 -0
  235. package/src/standardPbrWgpuMeshMaterialRenderer.test.ts +172 -0
  236. package/src/subsurfacePbrWgpuMeshMaterialRenderer.test.ts +90 -0
  237. package/src/toonWgpuMeshMaterialRenderer.test.ts +89 -0
  238. package/src/transmissionVolumePbrWgpuMeshMaterialRenderer.test.ts +97 -0
  239. package/src/unlitWgpuMeshMaterialRenderer.test.ts +94 -0
  240. package/src/vertexColorWgpuMeshMaterialRenderer.test.ts +62 -0
  241. package/src/wgpuClassicPrelude.test.ts +176 -0
  242. package/src/wgpuDebugPrelude.test.ts +79 -0
  243. package/src/wgpuEnvironmentCube.test.ts +86 -0
  244. package/src/wgpuEnvironmentIblBake.test.ts +79 -0
  245. package/src/wgpuEnvironmentSkybox.test.ts +56 -0
  246. package/src/wgpuMatcapPrelude.test.ts +70 -0
  247. package/src/wgpuMeshMaterialRegistry.test.ts +55 -0
  248. package/src/wgpuMeshPipeline.test.ts +844 -0
  249. package/src/wgpuMeshUpload.test.ts +177 -0
  250. package/src/wgpuParticleEmitter3D.test.ts +200 -0
  251. package/src/wgpuPbrPipelineCache.test.ts +67 -0
  252. package/src/wgpuPbrPrelude.test.ts +162 -0
  253. package/src/wgpuScene3DRuntime.test.ts +35 -0
  254. package/src/wgpuScene3DTime.test.ts +20 -0
  255. package/src/wgpuShadedModifierSnippet.test.ts +33 -0
  256. package/src/wgpuShadedPrelude.test.ts +394 -0
  257. package/src/wgpuShadowMap.test.ts +169 -0
  258. package/src/wgpuSkinPalette.test.ts +88 -0
  259. package/src/wgpuToonPrelude.test.ts +93 -0
  260. package/src/wgpuUnlitPrelude.test.ts +102 -0
  261. package/src/wgpuWireframePrelude.test.ts +54 -0
  262. package/src/wgpuWireframeUpload.test.ts +36 -0
  263. package/src/wireframeWgpuMeshMaterialRenderer.test.ts +69 -0
@@ -0,0 +1,74 @@
1
+ import { unpackColorToLinear } from '@flighthq/color';
2
+ import { getWgpuRenderStateRuntime } from '@flighthq/render-wgpu';
3
+ import { TransmissionVolumePbrMaterialKind } from '@flighthq/types';
4
+ import { buildWgpuPbrStandardDefineKey, ensureWgpuPbrMaterialBindGroup, getWgpuPbrMaterialScratch, writeWgpuPbrMaterialUniform, writeWgpuPbrStandardBlock, } from './standardPbrWgpuMeshMaterialRenderer';
5
+ import { registerWgpuMeshMaterialRenderer } from './wgpuMeshMaterialRegistry';
6
+ import { beginWgpuMeshDraw, drawWgpuMeshSubset, writeWgpuFrameUniform } from './wgpuMeshPipeline';
7
+ import { ensureWgpuPbrPipeline } from './wgpuPbrPipelineCache';
8
+ // The built-in TransmissionVolume (KHR_materials_transmission + KHR_materials_volume) forward-lit
9
+ // mesh-material renderer for refractive, see-through surfaces (glass, liquid) — the WGSL mirror of
10
+ // transmissionVolumePbrGlMeshMaterialRenderer.
11
+ //
12
+ // APPROXIMATION (not physically refractive yet): a true transmission path needs the Phase-5
13
+ // opaque-scene-color capture pass to sample what lies behind the surface and refract it through the
14
+ // surface IOR, with Beer-Lambert absorption over the volume `thickness`. Until that pass exists, this
15
+ // renderer models transmission cheaply behind `const TRANSMISSION`: it attenuates the fragment's
16
+ // coverage (alpha) by the `transmission` factor so the surface reads as translucent, and tints the lit
17
+ // radiance by `attenuationColor`. The surface is therefore drawn as a tinted, partially transparent lit
18
+ // shell rather than a refracting lens. `thickness`, `attenuationDistance`, and `ior` are accepted on the
19
+ // material but only `transmission`/`attenuationColor` drive the current shader.
20
+ //
21
+ // bind builds the standard define key from `material.standard` + the surface trailer, sets the
22
+ // TRANSMISSION flag, selects/compiles that pipeline variant for the current color format, writes the
23
+ // shared Frame uniform, then writes the base block + the transmission factor / linear-decoded
24
+ // attenuationColor into the one MaterialBlock uniform and binds it at group(2). The transmission/
25
+ // thickness maps are reserved but NOT sampled on wgpu yet (maps deferred). See
26
+ // registerTransmissionVolumePbrWgpuMaterial.
27
+ export const transmissionVolumePbrWgpuMeshMaterialRenderer = {
28
+ bind(state, material, lights, camera) {
29
+ const stateRuntime = getWgpuRenderStateRuntime(state);
30
+ const pass = stateRuntime.renderPass;
31
+ if (pass === null)
32
+ return;
33
+ const transmission = material;
34
+ const standard = transmission !== null ? transmission.standard : null;
35
+ const key = buildWgpuPbrStandardDefineKey(standard, transmission);
36
+ key.transmissionEnabled = true;
37
+ const format = stateRuntime.currentColorFormat ?? state.format;
38
+ const pipeline = ensureWgpuPbrPipeline(state, key, format);
39
+ writeWgpuFrameUniform(state, camera, lights);
40
+ const binding = ensureWgpuPbrMaterialBindGroup(state, pipeline, transmission ?? FALLBACK_MATERIAL, standard);
41
+ const out = getWgpuPbrMaterialScratch();
42
+ writeWgpuPbrStandardBlock(out, standard, transmission !== null ? transmission.alphaCutoff : 0.5);
43
+ out.fill(0, 16);
44
+ // transmission group (floats 44..47): transmission factor, attenuationColor.rgb (linear).
45
+ if (transmission !== null) {
46
+ unpackColorToLinear(_colorScratch, transmission.attenuationColor);
47
+ out[44] = transmission.transmission;
48
+ out[45] = _colorScratch[0];
49
+ out[46] = _colorScratch[1];
50
+ out[47] = _colorScratch[2];
51
+ }
52
+ else {
53
+ out[44] = 0;
54
+ out[45] = 1;
55
+ out[46] = 1;
56
+ out[47] = 1;
57
+ }
58
+ writeWgpuPbrMaterialUniform(state, binding);
59
+ beginWgpuMeshDraw(state, pipeline);
60
+ pass.setBindGroup(2, binding.bindGroup);
61
+ },
62
+ draw(state, proxy, geometry) {
63
+ drawWgpuMeshSubset(state, proxy, geometry);
64
+ },
65
+ };
66
+ // Installs the built-in TransmissionVolume renderer for TransmissionVolumePbrMaterialKind on this
67
+ // state. Opt-in (no top-level side effect): drawScene3D only draws TransmissionVolume subsets once this
68
+ // is called.
69
+ export function registerTransmissionVolumePbrWgpuMaterial(state) {
70
+ registerWgpuMeshMaterialRenderer(state, TransmissionVolumePbrMaterialKind, transmissionVolumePbrWgpuMeshMaterialRenderer);
71
+ }
72
+ const FALLBACK_MATERIAL = {};
73
+ const _colorScratch = [0, 0, 0, 0];
74
+ //# sourceMappingURL=transmissionVolumePbrWgpuMeshMaterialRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transmissionVolumePbrWgpuMeshMaterialRenderer.js","sourceRoot":"","sources":["../src/transmissionVolumePbrWgpuMeshMaterialRenderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { WgpuMeshMaterialRenderer, WgpuRenderState } from '@flighthq/types';
2
+ export declare const unlitWgpuMeshMaterialRenderer: WgpuMeshMaterialRenderer;
3
+ export declare function registerUnlitWgpuMaterial(state: WgpuRenderState): void;
4
+ //# sourceMappingURL=unlitWgpuMeshMaterialRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unlitWgpuMeshMaterialRenderer.d.ts","sourceRoot":"","sources":["../src/unlitWgpuMeshMaterialRenderer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAQV,wBAAwB,EACxB,eAAe,EAEhB,MAAM,iBAAiB,CAAC;AAWzB,eAAO,MAAM,6BAA6B,EAAE,wBAkC3C,CAAC;AAIF,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAEtE"}
@@ -0,0 +1,57 @@
1
+ import { unpackColorToLinear } from '@flighthq/color';
2
+ import { getWgpuRenderStateRuntime } from '@flighthq/render-wgpu';
3
+ import { isVideoTextureFrameReady } from '@flighthq/texture';
4
+ import { UnlitMaterialKind } from '@flighthq/types';
5
+ import { registerWgpuMeshMaterialRenderer } from './wgpuMeshMaterialRegistry';
6
+ import { beginWgpuMeshDraw, drawWgpuMeshSubset, isWgpuTextureReady, writeWgpuFrameUniform } from './wgpuMeshPipeline';
7
+ import { bindWgpuUnlitSurface, bindWgpuUnlitVideoSurface, ensureWgpuUnlitPipeline } from './wgpuUnlitPrelude';
8
+ // The built-in Unlit forward renderer (WgpuMeshMaterialRenderer for UnlitMaterialKind) — the WGSL
9
+ // mirror of unlitGlMeshMaterialRenderer. Lighting-independent flat color: bind selects the unlit
10
+ // pipeline variant for the alpha mode + color format, writes the shared Frame uniform (lights ignored),
11
+ // and binds the linear base color; draw issues the indexed draw. See registerUnlitWgpuMaterial.
12
+ export const unlitWgpuMeshMaterialRenderer = {
13
+ bind(state, material, _lights, camera) {
14
+ const stateRuntime = getWgpuRenderStateRuntime(state);
15
+ const pass = stateRuntime.renderPass;
16
+ if (pass === null)
17
+ return;
18
+ const unlit = material;
19
+ const format = stateRuntime.currentColorFormat ?? state.format;
20
+ const pipeline = ensureWgpuUnlitPipeline(state, defineKeyForMaterial(unlit), format);
21
+ writeWgpuFrameUniform(state, camera, _lights);
22
+ let group;
23
+ if (unlit === null) {
24
+ group = bindWgpuUnlitSurface(state, pipeline, FALLBACK_MATERIAL, WHITE, 1, 0.5, null);
25
+ }
26
+ else {
27
+ unpackColorToLinear(_scratch, unlit.baseColor);
28
+ group =
29
+ unlit.baseColorVideoMap !== null && isVideoTextureFrameReady(unlit.baseColorVideoMap)
30
+ ? bindWgpuUnlitVideoSurface(state, pipeline, unlit, _scratch, 1, unlit.alphaCutoff, unlit.baseColorVideoMap)
31
+ : bindWgpuUnlitSurface(state, pipeline, unlit, _scratch, 1, unlit.alphaCutoff, unlit.baseColorMap);
32
+ }
33
+ beginWgpuMeshDraw(state, pipeline);
34
+ pass.setBindGroup(2, group);
35
+ },
36
+ draw(state, proxy, geometry) {
37
+ drawWgpuMeshSubset(state, proxy, geometry);
38
+ },
39
+ };
40
+ // Registers the built-in Unlit renderer for UnlitMaterialKind on this state. Opt-in (no top-level side
41
+ // effect); call once per WgpuRenderState before drawWgpuScene3D so meshes with UnlitMaterials draw.
42
+ export function registerUnlitWgpuMaterial(state) {
43
+ registerWgpuMeshMaterialRenderer(state, UnlitMaterialKind, unlitWgpuMeshMaterialRenderer);
44
+ }
45
+ function defineKeyForMaterial(material) {
46
+ return {
47
+ alphaMaskEnabled: material !== null && material.alphaMode === 'mask',
48
+ doubleSided: material !== null && material.doubleSided,
49
+ hasColorMap: material !== null &&
50
+ ((material.baseColorVideoMap !== null && isVideoTextureFrameReady(material.baseColorVideoMap)) ||
51
+ isWgpuTextureReady(material.baseColorMap)),
52
+ };
53
+ }
54
+ const _scratch = [0, 0, 0, 0];
55
+ const WHITE = [1, 1, 1, 1];
56
+ const FALLBACK_MATERIAL = {};
57
+ //# sourceMappingURL=unlitWgpuMeshMaterialRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unlitWgpuMeshMaterialRenderer.js","sourceRoot":"","sources":["../src/unlitWgpuMeshMaterialRenderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { WgpuMeshMaterialRenderer, WgpuRenderState } from '@flighthq/types';
2
+ export declare const vertexColorWgpuMeshMaterialRenderer: WgpuMeshMaterialRenderer;
3
+ export declare function registerVertexColorWgpuMaterial(state: WgpuRenderState): void;
4
+ //# sourceMappingURL=vertexColorWgpuMeshMaterialRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vertexColorWgpuMeshMaterialRenderer.d.ts","sourceRoot":"","sources":["../src/vertexColorWgpuMeshMaterialRenderer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAQV,wBAAwB,EACxB,eAAe,EAEhB,MAAM,iBAAiB,CAAC;AAYzB,eAAO,MAAM,mCAAmC,EAAE,wBAiCjD,CAAC;AAKF,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAE5E"}
@@ -0,0 +1,55 @@
1
+ import { unpackColorToLinear } from '@flighthq/color';
2
+ import { getWgpuRenderStateRuntime } from '@flighthq/render-wgpu';
3
+ import { VertexColorMaterialKind } from '@flighthq/types';
4
+ import { registerWgpuMeshMaterialRenderer } from './wgpuMeshMaterialRegistry';
5
+ import { beginWgpuMeshDraw, drawWgpuMeshSubset, writeWgpuFrameUniform } from './wgpuMeshPipeline';
6
+ import { bindWgpuUnlitSurface, ensureWgpuUnlitPipeline } from './wgpuUnlitPrelude';
7
+ // The built-in VertexColor forward renderer (WgpuMeshMaterialRenderer for VertexColorMaterialKind) —
8
+ // the WGSL mirror of vertexColorGlMeshMaterialRenderer. Lighting-independent: renders the material's
9
+ // linear tint through the shared unlit pipeline. The canonical 48-byte vertex layout has no color0
10
+ // slot on wgpu, so (unlike the GL path) the mesh color0 attribute is not yet multiplied in — the tint
11
+ // alone drives the surface until color0 vertex support lands. See registerVertexColorWgpuMaterial.
12
+ export const vertexColorWgpuMeshMaterialRenderer = {
13
+ bind(state, material, _lights, camera) {
14
+ const stateRuntime = getWgpuRenderStateRuntime(state);
15
+ const pass = stateRuntime.renderPass;
16
+ if (pass === null)
17
+ return;
18
+ const vertexColor = material;
19
+ const format = stateRuntime.currentColorFormat ?? state.format;
20
+ const pipeline = ensureWgpuUnlitPipeline(state, defineKeyForMaterial(vertexColor), format);
21
+ writeWgpuFrameUniform(state, camera, _lights);
22
+ let group;
23
+ if (vertexColor === null) {
24
+ group = bindWgpuUnlitSurface(state, pipeline, FALLBACK_MATERIAL, WHITE, 1, 0.5, null);
25
+ }
26
+ else {
27
+ unpackColorToLinear(_scratch, vertexColor.tint);
28
+ // VertexColor carries no map texture; color0 (the per-vertex tint) is the absent vertex attribute,
29
+ // not a material map. Pass null so the placeholder satisfies the color slot.
30
+ group = bindWgpuUnlitSurface(state, pipeline, vertexColor, _scratch, 1, vertexColor.alphaCutoff, null);
31
+ }
32
+ beginWgpuMeshDraw(state, pipeline);
33
+ pass.setBindGroup(2, group);
34
+ },
35
+ draw(state, proxy, geometry) {
36
+ drawWgpuMeshSubset(state, proxy, geometry);
37
+ },
38
+ };
39
+ // Registers the built-in VertexColor renderer for VertexColorMaterialKind on this state. Opt-in (no
40
+ // top-level side effect); call once per WgpuRenderState before drawWgpuScene3D so meshes with
41
+ // VertexColorMaterials draw.
42
+ export function registerVertexColorWgpuMaterial(state) {
43
+ registerWgpuMeshMaterialRenderer(state, VertexColorMaterialKind, vertexColorWgpuMeshMaterialRenderer);
44
+ }
45
+ function defineKeyForMaterial(material) {
46
+ return {
47
+ alphaMaskEnabled: material !== null && material.alphaMode === 'mask',
48
+ doubleSided: material !== null && material.doubleSided,
49
+ hasColorMap: false,
50
+ };
51
+ }
52
+ const _scratch = [0, 0, 0, 0];
53
+ const WHITE = [1, 1, 1, 1];
54
+ const FALLBACK_MATERIAL = {};
55
+ //# sourceMappingURL=vertexColorWgpuMeshMaterialRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vertexColorWgpuMeshMaterialRenderer.js","sourceRoot":"","sources":["../src/vertexColorWgpuMeshMaterialRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAalE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,OAAO,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAClG,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAEnF,qGAAqG;AACrG,qGAAqG;AACrG,mGAAmG;AACnG,sGAAsG;AACtG,mGAAmG;AACnG,MAAM,CAAC,MAAM,mCAAmC,GAA6B;IAC3E,IAAI,CACF,KAAsB,EACtB,QAAmC,EACnC,OAAoC,EACpC,MAA0B;QAE1B,MAAM,YAAY,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;QACtD,MAAM,IAAI,GAAG,YAAY,CAAC,UAAU,CAAC;QACrC,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO;QAE1B,MAAM,WAAW,GAAG,QAAgD,CAAC;QACrE,MAAM,MAAM,GAAG,YAAY,CAAC,kBAAkB,IAAI,KAAK,CAAC,MAAM,CAAC;QAC/D,MAAM,QAAQ,GAAG,uBAAuB,CAAC,KAAK,EAAE,oBAAoB,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC;QAC3F,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAE9C,IAAI,KAAmB,CAAC;QACxB,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YACzB,KAAK,GAAG,oBAAoB,CAAC,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QACxF,CAAC;aAAM,CAAC;YACN,mBAAmB,CAAC,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;YAChD,mGAAmG;YACnG,6EAA6E;YAC7E,KAAK,GAAG,oBAAoB,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACzG,CAAC;QAED,iBAAiB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACnC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,CAAC,KAAsB,EAAE,KAAmC,EAAE,QAAgC;QAChG,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC7C,CAAC;CACF,CAAC;AAEF,oGAAoG;AACpG,8FAA8F;AAC9F,6BAA6B;AAC7B,MAAM,UAAU,+BAA+B,CAAC,KAAsB;IACpE,gCAAgC,CAAC,KAAK,EAAE,uBAAuB,EAAE,mCAAmC,CAAC,CAAC;AACxG,CAAC;AAED,SAAS,oBAAoB,CAAC,QAA8C;IAC1E,OAAO;QACL,gBAAgB,EAAE,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,SAAS,KAAK,MAAM;QACpE,WAAW,EAAE,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,WAAW;QACtD,WAAW,EAAE,KAAK;KACnB,CAAC;AACJ,CAAC;AAED,MAAM,QAAQ,GAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3C,MAAM,KAAK,GAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACxC,MAAM,iBAAiB,GAAG,EAAmC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { LinearColor, Texture, WgpuClassicDefineKey, WgpuClassicPipeline, WgpuRenderState, WgpuSkinningAdapter } from '@flighthq/types';
2
+ export declare function bindWgpuClassicSurface(state: WgpuRenderState, pipeline: Readonly<WgpuClassicPipeline>, materialKey: object, diffuse: Readonly<LinearColor>, specular: Readonly<LinearColor>, shininess: number, alphaCutoff: number, diffuseMap: Readonly<Texture> | null, specularMap: Readonly<Texture> | null, normalMap: Readonly<Texture> | null, alphaMap: Readonly<Texture> | null): GPUBindGroup;
3
+ export declare function buildWgpuClassicDefineKey(key: Readonly<WgpuClassicDefineKey>): string;
4
+ export declare function compileWgpuClassicPipeline(state: WgpuRenderState, key: Readonly<WgpuClassicDefineKey>, format: GPUTextureFormat, blended?: boolean, skinned?: boolean): WgpuClassicPipeline;
5
+ export declare function ensureWgpuClassicPipeline(state: WgpuRenderState, key: Readonly<WgpuClassicDefineKey>, format: GPUTextureFormat): WgpuClassicPipeline;
6
+ export declare function getWgpuClassicModuleSourceForKey(key: Readonly<WgpuClassicDefineKey>, skinned?: boolean, skinning?: Readonly<WgpuSkinningAdapter> | null): string;
7
+ export declare function getWgpuClassicSharedSamplerModuleSourceForKey(key: Readonly<WgpuClassicDefineKey>, skinned?: boolean, skinning?: Readonly<WgpuSkinningAdapter> | null): string;
8
+ //# sourceMappingURL=wgpuClassicPrelude.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wgpuClassicPrelude.d.ts","sourceRoot":"","sources":["../src/wgpuClassicPrelude.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,OAAO,EACP,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACpB,MAAM,iBAAiB,CAAC;AAkBzB,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,eAAe,EACtB,QAAQ,EAAE,QAAQ,CAAC,mBAAmB,CAAC,EACvC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,EAC9B,QAAQ,EAAE,QAAQ,CAAC,WAAW,CAAC,EAC/B,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,EACpC,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,EACrC,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,EACnC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,GACjC,YAAY,CAsCd;AAMD,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,QAAQ,CAAC,oBAAoB,CAAC,GAAG,MAAM,CAKrF;AAMD,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,eAAe,EACtB,GAAG,EAAE,QAAQ,CAAC,oBAAoB,CAAC,EACnC,MAAM,EAAE,gBAAgB,EACxB,OAAO,UAAQ,EACf,OAAO,UAAQ,GACd,mBAAmB,CA8BrB;AAKD,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,eAAe,EACtB,GAAG,EAAE,QAAQ,CAAC,oBAAoB,CAAC,EACnC,MAAM,EAAE,gBAAgB,GACvB,mBAAmB,CAIrB;AAID,wBAAgB,gCAAgC,CAC9C,GAAG,EAAE,QAAQ,CAAC,oBAAoB,CAAC,EACnC,OAAO,UAAQ,EACf,QAAQ,GAAE,QAAQ,CAAC,mBAAmB,CAAC,GAAG,IAAW,GACpD,MAAM,CAER;AAMD,wBAAgB,6CAA6C,CAC3D,GAAG,EAAE,QAAQ,CAAC,oBAAoB,CAAC,EACnC,OAAO,UAAQ,EACf,QAAQ,GAAE,QAAQ,CAAC,mBAAmB,CAAC,GAAG,IAAW,GACpD,MAAM,CAER"}
@@ -0,0 +1,319 @@
1
+ import { createWgpuMeshPipeline, ensureWgpuPerMapMaterialBinding, ensureWgpuScene3DPipeline, ensureWgpuShadowSampleLayout, getWgpuMeshPreludeWgsl, getWgpuMaterialSampler, resolveWgpuMaterialTextureView, stashWgpuUvTransform, } from './wgpuMeshPipeline';
2
+ import { getWgpuSkinningAdapter } from './wgpuScene3DRuntime';
3
+ // Ensures (and caches per material reference) the classic Material bind group — a uniform buffer + the
4
+ // shared sampler + the placeholder diffuse/specular/normal textures — and rewrites its uniform with
5
+ // this surface's linear diffuse + specular colors, shininess, and alpha cutoff. Mirrors scene-gl's
6
+ // bindGl{Lambert,Phong,BlinnPhong}MaterialUniforms. Returns the bind group for the caller to set at
7
+ // group(2).
8
+ export function bindWgpuClassicSurface(state, pipeline, materialKey, diffuse, specular, shininess, alphaCutoff, diffuseMap, specularMap, normalMap, alphaMap) {
9
+ // Re-resolve the primary sampler + map views every bind so a live material-map mutation (swap,
10
+ // unready→ready, image replacement, version bump, primary-sampler change) is picked up; the views land
11
+ // in a REUSED module scratch so the steady-state re-bind of an unchanged material allocates nothing.
12
+ // ensureWgpuPerMapMaterialBinding rebuilds the bind group only when a view/sampler actually differs.
13
+ _samplerScratch[0] = getWgpuMaterialSampler(state, diffuseMap);
14
+ _samplerScratch[1] = getWgpuMaterialSampler(state, specularMap);
15
+ _samplerScratch[2] = getWgpuMaterialSampler(state, normalMap);
16
+ _samplerScratch[3] = getWgpuMaterialSampler(state, alphaMap);
17
+ _viewScratch[0] = resolveWgpuMaterialTextureView(state, diffuseMap);
18
+ _viewScratch[1] = resolveWgpuMaterialTextureView(state, specularMap);
19
+ _viewScratch[2] = resolveWgpuMaterialTextureView(state, normalMap);
20
+ _viewScratch[3] = resolveWgpuMaterialTextureView(state, alphaMap);
21
+ const binding = ensureWgpuPerMapMaterialBinding(state, materialKey, pipeline.materialBindGroupLayout, CLASSIC_UNIFORM_BYTES, _samplerScratch, _viewScratch);
22
+ _scratch[0] = diffuse[0];
23
+ _scratch[1] = diffuse[1];
24
+ _scratch[2] = diffuse[2];
25
+ _scratch[3] = diffuse[3];
26
+ _scratch[4] = specular[0];
27
+ _scratch[5] = specular[1];
28
+ _scratch[6] = specular[2];
29
+ _scratch[7] = specular[3];
30
+ _scratch[8] = shininess;
31
+ _scratch[9] = alphaCutoff;
32
+ _scratch[10] = 0;
33
+ _scratch[11] = 0;
34
+ state.device.queue.writeBuffer(binding.buffer, 0, _scratch.buffer, 0, CLASSIC_UNIFORM_BYTES);
35
+ // The diffuse map's uv transform drives the shared vertex-scene2d uv the classic maps sample.
36
+ stashWgpuUvTransform(state, diffuseMap);
37
+ return binding.bindGroup;
38
+ }
39
+ // A short, stable, order-independent string identity for a classic define key, used as the pipeline-
40
+ // cache key (combined with the color format). The lighting model is encoded first (l/p/b) so the three
41
+ // models never collide, followed by the feature flags. Two keys with the same model + flags produce
42
+ // the same string and so share a compiled pipeline.
43
+ export function buildWgpuClassicDefineKey(key) {
44
+ const model = key.lightingModel === 'phong' ? 'p' : key.lightingModel === 'blinnphong' ? 'b' : 'l';
45
+ return `${model}${key.alphaMaskEnabled ? 'm' : '-'}${key.doubleSided ? 'd' : '-'}${key.hasDiffuseMap ? 'd' : '-'}${key.hasSpecularMap ? 's' : '-'}${key.hasNormalMap ? 'n' : '-'}${key.hasAlphaMap ? 'a' : '-'}`;
46
+ }
47
+ // Compiles the classic module for a define key and builds the render pipeline for the given color
48
+ // format, with the group(2) material bind-group layout (uniform + one sampler per map +
49
+ // diffuse/specular/normal/alpha textures). Pure GPU work — no caching — used by
50
+ // ensureWgpuClassicPipeline.
51
+ export function compileWgpuClassicPipeline(state, key, format, blended = false, skinned = false) {
52
+ const device = state.device;
53
+ const module = device.createShaderModule({
54
+ code: getWgpuClassicModuleSourceForKey(key, skinned, getWgpuSkinningAdapter(state)),
55
+ });
56
+ const materialBindGroupLayout = device.createBindGroupLayout({
57
+ entries: [
58
+ { binding: 0, visibility: GPUShaderStage.FRAGMENT, buffer: { type: 'uniform' } },
59
+ { binding: 1, visibility: GPUShaderStage.FRAGMENT, sampler: { type: 'filtering' } },
60
+ { binding: 2, visibility: GPUShaderStage.FRAGMENT, sampler: { type: 'filtering' } },
61
+ { binding: 3, visibility: GPUShaderStage.FRAGMENT, sampler: { type: 'filtering' } },
62
+ { binding: 4, visibility: GPUShaderStage.FRAGMENT, sampler: { type: 'filtering' } },
63
+ { binding: 5, visibility: GPUShaderStage.FRAGMENT, texture: { sampleType: 'float' } },
64
+ { binding: 6, visibility: GPUShaderStage.FRAGMENT, texture: { sampleType: 'float' } },
65
+ { binding: 7, visibility: GPUShaderStage.FRAGMENT, texture: { sampleType: 'float' } },
66
+ { binding: 8, visibility: GPUShaderStage.FRAGMENT, texture: { sampleType: 'float' } },
67
+ ],
68
+ });
69
+ // The group(3) shadow-sample layout opts this pipeline into directional shadow reception: the pipeline
70
+ // layout gains [Frame, Draw, Material, Shadow] and beginWgpuMeshDraw binds the shared shadow group each
71
+ // draw (the real depth map when drawWgpuScene3DShadowMap ran this frame, else a gated-off 1x1 dummy).
72
+ return createWgpuMeshPipeline(state, {
73
+ blended,
74
+ doubleSided: key.doubleSided,
75
+ format,
76
+ materialBindGroupLayout,
77
+ module,
78
+ shadowBindGroupLayout: ensureWgpuShadowSampleLayout(state),
79
+ skinned,
80
+ });
81
+ }
82
+ // Resolves the classic pipeline for a define key + color format, compiling and caching it on first use
83
+ // through the shared scene pipeline cache under the `classic:` family namespace, so each model +
84
+ // feature/format variant is compiled at most once per state and reused every frame.
85
+ export function ensureWgpuClassicPipeline(state, key, format) {
86
+ return ensureWgpuScene3DPipeline(state, `classic:${format}|${buildWgpuClassicDefineKey(key)}`, (blended, skinned) => compileWgpuClassicPipeline(state, key, format, blended, skinned));
87
+ }
88
+ // The full WGSL module source for a define key: the const-flag block (lighting model first) + the
89
+ // shared mesh prelude (Frame/Draw/vs_main/srgbToLinear) + the classic material block + fs_main.
90
+ export function getWgpuClassicModuleSourceForKey(key, skinned = false, skinning = null) {
91
+ return assembleWgpuClassicModuleSource(key, skinned, skinning, CLASSIC_WGSL_BODY);
92
+ }
93
+ // ShadedMaterial composes modifier declarations and contributions into the classic WGSL, but retains
94
+ // its intentionally extensible legacy group(2) layout: one sampler at binding 1, base textures at 2..5,
95
+ // and modifier textures at 6+. Keep that source contract separate from the per-map classic pipeline so
96
+ // changing classic's sampler layout cannot collide with shaded modifier bindings.
97
+ export function getWgpuClassicSharedSamplerModuleSourceForKey(key, skinned = false, skinning = null) {
98
+ return assembleWgpuClassicModuleSource(key, skinned, skinning, CLASSIC_SHARED_SAMPLER_WGSL_BODY);
99
+ }
100
+ function assembleWgpuClassicModuleSource(key, skinned, skinning, body) {
101
+ return (`const LIGHTING_PHONG : bool = ${key.lightingModel === 'phong' ? 'true' : 'false'};\n` +
102
+ `const LIGHTING_BLINNPHONG : bool = ${key.lightingModel === 'blinnphong' ? 'true' : 'false'};\n` +
103
+ `const ALPHA_MASK : bool = ${key.alphaMaskEnabled ? 'true' : 'false'};\n` +
104
+ `const DOUBLE_SIDED : bool = ${key.doubleSided ? 'true' : 'false'};\n` +
105
+ `const HAS_DIFFUSE_MAP : bool = ${key.hasDiffuseMap ? 'true' : 'false'};\n` +
106
+ `const HAS_SPECULAR_MAP : bool = ${key.hasSpecularMap ? 'true' : 'false'};\n` +
107
+ `const HAS_NORMAL_MAP : bool = ${key.hasNormalMap ? 'true' : 'false'};\n` +
108
+ `const HAS_ALPHA_MAP : bool = ${key.hasAlphaMap ? 'true' : 'false'};\n` +
109
+ getWgpuMeshPreludeWgsl(skinned, skinning) +
110
+ body);
111
+ }
112
+ // Classic material uniform: diffuse vec4f (16) + specular vec4f (16) + params vec4f (16) = 48 bytes /
113
+ // 12 floats. params.x = shininess, params.y = alphaCutoff.
114
+ const CLASSIC_UNIFORM_BYTES = 48;
115
+ const CLASSIC_WGSL_BODY = /* wgsl */ `
116
+ struct ClassicMaterial {
117
+ diffuse : vec4f, // linear rgba
118
+ specular : vec4f, // linear rgb; a unused
119
+ params : vec4f, // x = shininess, y = alphaCutoff
120
+ };
121
+
122
+ @group(2) @binding(0) var<uniform> material : ClassicMaterial;
123
+ @group(2) @binding(1) var diffuseSampler : sampler;
124
+ @group(2) @binding(2) var specularSampler : sampler;
125
+ @group(2) @binding(3) var normalSampler : sampler;
126
+ @group(2) @binding(4) var alphaSampler : sampler;
127
+ @group(2) @binding(5) var diffuseTexture : texture_2d<f32>;
128
+ @group(2) @binding(6) var specularTexture : texture_2d<f32>;
129
+ @group(2) @binding(7) var normalTexture : texture_2d<f32>;
130
+ @group(2) @binding(8) var alphaTexture : texture_2d<f32>;
131
+
132
+ // The directional shadow inputs (group 3), the shared shadow-sample layout ensureWgpuShadowSampleLayout
133
+ // builds and beginWgpuMeshDraw binds. matrix is the light view-projection (world -> shadow clip);
134
+ // params.x is the enabled flag (0 or 1). The WGSL mirror of scene-gl's u_shadowMap / u_shadowMatrix /
135
+ // u_shadowEnabled and wgpuPbrPrelude's Shadow.
136
+ struct Shadow {
137
+ matrix : mat4x4f,
138
+ params : vec4f, // x = enabled (0 or 1)
139
+ };
140
+
141
+ @group(3) @binding(0) var<uniform> shadow : Shadow;
142
+ @group(3) @binding(1) var shadowMap : texture_depth_2d;
143
+ @group(3) @binding(2) var shadowSampler : sampler_comparison;
144
+
145
+ // Directional shadow factor at a world position: 1.0 fully lit, 0.0 fully shadowed, with 3x3 PCF —
146
+ // identical to wgpuPbrPrelude's copy. UV flips Y (WebGPU top-left origin), depthRef remaps GL-convention
147
+ // clip Z (-1..1) into WebGPU's 0..1 range; the comparison sampler ('less-equal') yields "current <=
148
+ // closest" per tap. Fragments outside the shadow frustum, or when no map is bound, read as lit.
149
+ fn sampleDirectionalShadow(worldPos : vec3f) -> f32 {
150
+ if (shadow.params.x < 0.5) {
151
+ return 1.0;
152
+ }
153
+ let clip = shadow.matrix * vec4f(worldPos, 1.0);
154
+ let ndc = clip.xyz / clip.w;
155
+ let uv = vec2f(ndc.x * 0.5 + 0.5, 1.0 - (ndc.y * 0.5 + 0.5));
156
+ let depthRef = ndc.z * 0.5 + 0.5 - 0.0025;
157
+ if (uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0 || depthRef > 1.0) {
158
+ return 1.0;
159
+ }
160
+ let texel = 1.0 / vec2f(textureDimensions(shadowMap, 0));
161
+ var sum = 0.0;
162
+ for (var x = -1; x <= 1; x = x + 1) {
163
+ for (var y = -1; y <= 1; y = y + 1) {
164
+ let offset = vec2f(f32(x), f32(y)) * texel;
165
+ sum = sum + textureSampleCompareLevel(shadowMap, shadowSampler, uv + offset, depthRef);
166
+ }
167
+ }
168
+ return sum / 9.0;
169
+ }
170
+
171
+ // Smooth finite-range window over inverse-square falloff. A non-positive inverse range means
172
+ // unlimited range, matching packScene3DLightBlock and the GL classic/PBR preludes.
173
+ fn rangeWindow(dist2 : f32, invSqrRange : f32) -> f32 {
174
+ if (invSqrRange <= 0.0) {
175
+ return 1.0;
176
+ }
177
+ let factor = clamp(1.0 - dist2 * invSqrRange, 0.0, 1.0);
178
+ return factor * factor;
179
+ }
180
+
181
+ // One classic-light contribution shared by directional, point, and spot lights. Keeping the BRDF in
182
+ // one function prevents the positional families from drifting from the directional model.
183
+ fn shadeClassicLight(normal : vec3f, lightDir : vec3f, lightColor : vec3f, diffuseRgb : vec3f,
184
+ specularColor : vec3f, worldPosition : vec3f) -> vec3f {
185
+ let nDotL = max(dot(normal, lightDir), 0.0);
186
+ var result = diffuseRgb * nDotL * lightColor;
187
+ if ((LIGHTING_PHONG || LIGHTING_BLINNPHONG) && nDotL > 0.0) {
188
+ let viewDir = normalize(frame.cameraPosition.xyz - worldPosition);
189
+ var specAngle = 0.0;
190
+ if (LIGHTING_PHONG) {
191
+ specAngle = max(dot(reflect(-lightDir, normal), viewDir), 0.0);
192
+ } else {
193
+ specAngle = max(dot(normal, normalize(lightDir + viewDir)), 0.0);
194
+ }
195
+ let specular = pow(specAngle, max(material.params.x, 1.0));
196
+ result = result + specular * specularColor * lightColor;
197
+ }
198
+ return result;
199
+ }
200
+
201
+ @fragment fn fs_main(in : VertexOutput, @builtin(front_facing) isFront : bool) -> @location(0) vec4f {
202
+ var diffuse = material.diffuse;
203
+ if (HAS_DIFFUSE_MAP) {
204
+ let sampled = textureSample(diffuseTexture, diffuseSampler, in.uv);
205
+ diffuse = vec4f(diffuse.rgb * srgbToLinear(sampled.rgb), diffuse.a * sampled.a);
206
+ }
207
+
208
+ // Dedicated coverage (opacity) map: its green channel is linear data, multiplied into alpha before
209
+ // the alpha-mask cutoff so 'mask' cutout and 'blend' transparency both see the combined coverage.
210
+ if (HAS_ALPHA_MAP) {
211
+ diffuse.a = diffuse.a * textureSample(alphaTexture, alphaSampler, in.uv).g;
212
+ }
213
+
214
+ if (ALPHA_MASK && diffuse.a < material.params.y) {
215
+ discard;
216
+ }
217
+
218
+ var geometricNormal = normalize(in.worldNormal);
219
+ // Double-sided materials flip the normal for back faces so both sides shade correctly.
220
+ if (DOUBLE_SIDED && !isFront) {
221
+ geometricNormal = -geometricNormal;
222
+ }
223
+
224
+ var normal = geometricNormal;
225
+ if (HAS_NORMAL_MAP) {
226
+ let tangent = normalize(in.worldTangent.xyz);
227
+ let bitangent = cross(geometricNormal, tangent) * in.worldTangent.w;
228
+ var tangentNormal = textureSample(normalTexture, normalSampler, in.uv).xyz * 2.0 - vec3f(1.0);
229
+ let tbn = mat3x3f(tangent, bitangent, geometricNormal);
230
+ normal = normalize(tbn * tangentNormal);
231
+ }
232
+
233
+ // Specular color is resolved here in UNIFORM control flow. WGSL forbids textureSample inside the
234
+ // per-pixel lighting branch below (it depends on nDotL, a non-uniform value), so the map sample is
235
+ // hoisted out. It starts at the material specular; when a specular map is present its sampled value
236
+ // multiplies in just below (an absent map binds a placeholder view and this stays the flat specular).
237
+ var specularColor = material.specular.rgb;
238
+ if (HAS_SPECULAR_MAP) {
239
+ let sampledSpecular = textureSample(specularTexture, specularSampler, in.uv);
240
+ specularColor = specularColor * srgbToLinear(sampledSpecular.rgb);
241
+ }
242
+
243
+ var radiance = vec3f(0.0);
244
+
245
+ // Directional light: -direction is the surface-to-light vector (light travels along direction).
246
+ // The whole directional contribution (diffuse + specular) is PCF shadow-mapped, mirroring the PBR path;
247
+ // sampleDirectionalShadow returns 1.0 when no shadow map is bound, so an unshadowed scene is unchanged.
248
+ if (frame.lightDirection.w > 0.5) {
249
+ let lightDir = normalize(-frame.lightDirection.xyz);
250
+ let direct = shadeClassicLight(normal, lightDir, frame.directionalRadiance.rgb, diffuse.rgb,
251
+ specularColor, in.worldPosition);
252
+ radiance = radiance + direct * sampleDirectionalShadow(in.worldPosition);
253
+ }
254
+
255
+ // Point lights: surface-to-light direction with smooth inverse-square range falloff.
256
+ let pointCount = u32(frame.punctualCounts.x);
257
+ for (var point = 0u; point < 4u; point = point + 1u) {
258
+ if (point >= pointCount) { break; }
259
+ let toLight = frame.pointLights[point * 2u].xyz - in.worldPosition;
260
+ let dist2 = dot(toLight, toLight);
261
+ let lightDir = toLight * inverseSqrt(max(dist2, 1e-8));
262
+ let atten = rangeWindow(dist2, frame.pointLights[point * 2u + 1u].w) / max(dist2, 1e-4);
263
+ radiance = radiance + shadeClassicLight(normal, lightDir,
264
+ frame.pointLights[point * 2u + 1u].xyz * atten, diffuse.rgb, specularColor, in.worldPosition);
265
+ }
266
+
267
+ // Spot lights: point attenuation multiplied by the smooth inner/outer cone window.
268
+ let spotCount = u32(frame.punctualCounts.y);
269
+ for (var spot = 0u; spot < 4u; spot = spot + 1u) {
270
+ if (spot >= spotCount) { break; }
271
+ let toLight = frame.spotLights[spot * 4u].xyz - in.worldPosition;
272
+ let dist2 = dot(toLight, toLight);
273
+ let lightDir = toLight * inverseSqrt(max(dist2, 1e-8));
274
+ let atten = rangeWindow(dist2, frame.spotLights[spot * 4u + 1u].w) / max(dist2, 1e-4);
275
+ let cone = smoothstep(frame.spotLights[spot * 4u + 3u].y, frame.spotLights[spot * 4u + 3u].x,
276
+ dot(normalize(frame.spotLights[spot * 4u + 2u].xyz), -lightDir));
277
+ radiance = radiance + shadeClassicLight(normal, lightDir,
278
+ frame.spotLights[spot * 4u + 1u].xyz * atten * cone, diffuse.rgb, specularColor, in.worldPosition);
279
+ }
280
+
281
+ // Ambient term: flat irradiance over the diffuse albedo.
282
+ if (frame.ambientRadiance.w > 0.5) {
283
+ radiance = radiance + diffuse.rgb * frame.ambientRadiance.rgb;
284
+ }
285
+
286
+ // Hemisphere fill: sky/ground gradient blended by the normal's up-axis alignment.
287
+ let hemisphereCount = u32(frame.punctualCounts.z);
288
+ for (var hemisphere = 0u; hemisphere < 4u; hemisphere = hemisphere + 1u) {
289
+ if (hemisphere >= hemisphereCount) { break; }
290
+ let factor = 0.5 + 0.5 * dot(normal, frame.hemisphereLights[hemisphere * 3u + 2u].xyz);
291
+ radiance = radiance + mix(frame.hemisphereLights[hemisphere * 3u + 1u].xyz,
292
+ frame.hemisphereLights[hemisphere * 3u].xyz, factor) * diffuse.rgb;
293
+ }
294
+
295
+ return vec4f(radiance, diffuse.a * in.objectAlpha);
296
+ }
297
+ `;
298
+ const CLASSIC_SHARED_SAMPLER_WGSL_BODY = CLASSIC_WGSL_BODY.replace(`@group(2) @binding(1) var diffuseSampler : sampler;
299
+ @group(2) @binding(2) var specularSampler : sampler;
300
+ @group(2) @binding(3) var normalSampler : sampler;
301
+ @group(2) @binding(4) var alphaSampler : sampler;
302
+ @group(2) @binding(5) var diffuseTexture : texture_2d<f32>;
303
+ @group(2) @binding(6) var specularTexture : texture_2d<f32>;
304
+ @group(2) @binding(7) var normalTexture : texture_2d<f32>;
305
+ @group(2) @binding(8) var alphaTexture : texture_2d<f32>;`, `@group(2) @binding(1) var materialSampler : sampler;
306
+ @group(2) @binding(2) var diffuseTexture : texture_2d<f32>;
307
+ @group(2) @binding(3) var specularTexture : texture_2d<f32>;
308
+ @group(2) @binding(4) var normalTexture : texture_2d<f32>;
309
+ @group(2) @binding(5) var alphaTexture : texture_2d<f32>;`)
310
+ .replaceAll('diffuseSampler', 'materialSampler')
311
+ .replaceAll('specularSampler', 'materialSampler')
312
+ .replaceAll('normalSampler', 'materialSampler')
313
+ .replaceAll('alphaSampler', 'materialSampler');
314
+ const _scratch = new Float32Array(CLASSIC_UNIFORM_BYTES / 4);
315
+ const _samplerScratch = new Array(4);
316
+ // Reused per-bind resolved-view scratch (diffuse, specular, normal, alpha) so a steady-state re-bind
317
+ // allocates nothing; ensureWgpuPerMapMaterialBinding copies it into the binding only on create/rebuild.
318
+ const _viewScratch = new Array(4);
319
+ //# sourceMappingURL=wgpuClassicPrelude.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wgpuClassicPrelude.js","sourceRoot":"","sources":["../src/wgpuClassicPrelude.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const WGPU_CUSTOM_SHADER_USER_VEC4_CAPACITY = 32;
2
+ export declare const WGPU_CUSTOM_SHADER_TEXTURE_CAPACITY = 8;
3
+ //# sourceMappingURL=wgpuCustomMaterialAbi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wgpuCustomMaterialAbi.d.ts","sourceRoot":"","sources":["../src/wgpuCustomMaterialAbi.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,qCAAqC,KAAK,CAAC;AACxD,eAAO,MAAM,mCAAmC,IAAI,CAAC"}
@@ -0,0 +1,5 @@
1
+ // Fixed WebGPU custom-material ABI capacities. Every logical scalar/vector uniform consumes one
2
+ // vec4-aligned slot; every texture consumes sampler(binding 2N) + texture(binding 2N+1) in group(3).
3
+ export const WGPU_CUSTOM_SHADER_USER_VEC4_CAPACITY = 32;
4
+ export const WGPU_CUSTOM_SHADER_TEXTURE_CAPACITY = 8;
5
+ //# sourceMappingURL=wgpuCustomMaterialAbi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wgpuCustomMaterialAbi.js","sourceRoot":"","sources":["../src/wgpuCustomMaterialAbi.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAChG,qGAAqG;AACrG,MAAM,CAAC,MAAM,qCAAqC,GAAG,EAAE,CAAC;AACxD,MAAM,CAAC,MAAM,mCAAmC,GAAG,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { WgpuDebugDefineKey, WgpuDebugPipeline, WgpuRenderState } from '@flighthq/types';
2
+ export declare function bindWgpuDebugSurface(state: WgpuRenderState, pipeline: Readonly<WgpuDebugPipeline>, materialKey: object, near: number, far: number, normalScale: number): GPUBindGroup;
3
+ export declare function buildWgpuDebugDefineKey(key: Readonly<WgpuDebugDefineKey>): string;
4
+ export declare function compileWgpuDebugPipeline(state: WgpuRenderState, key: Readonly<WgpuDebugDefineKey>, format: GPUTextureFormat, blended?: boolean): WgpuDebugPipeline;
5
+ export declare function ensureWgpuDebugPipeline(state: WgpuRenderState, key: Readonly<WgpuDebugDefineKey>, format: GPUTextureFormat): WgpuDebugPipeline;
6
+ export declare function getWgpuDebugModuleSourceForKey(key: Readonly<WgpuDebugDefineKey>): string;
7
+ //# sourceMappingURL=wgpuDebugPrelude.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wgpuDebugPrelude.d.ts","sourceRoot":"","sources":["../src/wgpuDebugPrelude.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,eAAe,EAAuB,MAAM,iBAAiB,CAAC;AAgBnH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,eAAe,EACtB,QAAQ,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EACrC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,GAClB,YAAY,CA8Bd;AAKD,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,QAAQ,CAAC,kBAAkB,CAAC,GAAG,MAAM,CAEjF;AAMD,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,eAAe,EACtB,GAAG,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACjC,MAAM,EAAE,gBAAgB,EACxB,OAAO,UAAQ,GACd,iBAAiB,CAanB;AAKD,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,eAAe,EACtB,GAAG,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACjC,MAAM,EAAE,gBAAgB,GACvB,iBAAiB,CAInB;AAKD,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,QAAQ,CAAC,kBAAkB,CAAC,GAAG,MAAM,CAQxF"}