@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,171 @@
1
+ import { createMatrix3, createMatrix4, setMatrix3NormalFromMatrix4 } from '@flighthq/geometry';
2
+ import { getNodeWorldMatrix4 } from '@flighthq/node';
3
+ import { prepareScene3DRender } from '@flighthq/render';
4
+ import { declareWgpuRenderTargetColorSpace } from '@flighthq/render-wgpu';
5
+ import { getNode3DWorldAlpha } from '@flighthq/scene3d';
6
+ import { DefaultMaterialKind, MAX_FORWARD_LIGHTS } from '@flighthq/types';
7
+ import { resolveWgpuMeshMaterialRenderer } from './wgpuMeshMaterialRegistry';
8
+ import { drawWgpuScene3DParticleEmitter3Ds } from './wgpuParticleEmitter3D';
9
+ import { getWgpuScene3DRuntime } from './wgpuScene3DRuntime';
10
+ // Draws a prepared 3D scene on the Wgpu backend — the WGSL mirror of scene-gl's drawGlScene3D. The app
11
+ // runs prepareScene3DRender(state, scene, camera, lights) first (resolving world matrices, the camera
12
+ // view-projection, frustum culling, and the packed light block into the per-state Scene3DRenderList);
13
+ // drawWgpuScene3D retrieves that same cached list (prepareScene3DRender is idempotent per-state scratch) and,
14
+ // for each visible Mesh, draws each of its geometry subsets with the subset's resolved material's
15
+ // registered mesh-material renderer.
16
+ //
17
+ // The draw is two-phased for correct alpha compositing: opaque/masked subsets first in scene order,
18
+ // then blended-material or faded-object subsets back-to-front. The second pass selects immutable
19
+ // blended pipeline variants (src-alpha / one-minus-src-alpha, depth test on, depth writes off).
20
+ //
21
+ // Subsets sharing the same resolved renderer + material are drawn under a single bind (the seam's
22
+ // "contiguous run" contract): bind uploads the shared camera + light + material state once, then draw
23
+ // issues the per-subset indexed draw. A subset whose material resolves to no renderer (and no
24
+ // DefaultMaterialKind fallback) is skipped — no built-in fallback. Depth/cull state is owned by the
25
+ // material renderer's pipeline; the surrounding rgba16float scene render pass + depth attachment is
26
+ // the effect pipeline's, not drawWgpuScene3D's. Must run inside an open render pass.
27
+ export function drawWgpuScene3D(state, scene, camera, lights, forwardLights) {
28
+ const list = prepareScene3DRender(state, scene, camera, lights);
29
+ const lightBlock = list.lights;
30
+ const viewProjection = list.viewProjection;
31
+ const runtime = getWgpuScene3DRuntime(state);
32
+ declareWgpuRenderTargetColorSpace(state, 'linear');
33
+ const hasPreparedForwardLights = forwardLights !== undefined && forwardLights.meshCount === list.meshCount;
34
+ if (!hasPreparedForwardLights && hasExcessForwardLights(lights))
35
+ runtime.forwardLightSelectionGuard?.(lights);
36
+ const opaqueDrawList = runtime.opaqueDrawList;
37
+ const blendedDrawList = runtime.blendedDrawList;
38
+ recycleDrawEntries(opaqueDrawList, runtime.opaquePool);
39
+ recycleDrawEntries(blendedDrawList, runtime.blendedPool);
40
+ for (let m = 0; m < list.meshCount; m++) {
41
+ const mesh = list.visibleMeshes[m];
42
+ const subsets = mesh.geometry.subsets;
43
+ const worldMatrix = getNodeWorldMatrix4(mesh);
44
+ const wx = worldMatrix.m[12];
45
+ const wy = worldMatrix.m[13];
46
+ const wz = worldMatrix.m[14];
47
+ const vp = viewProjection.m;
48
+ const clipW = vp[3] * wx + vp[7] * wy + vp[11] * wz + vp[15];
49
+ const clipZ = vp[2] * wx + vp[6] * wy + vp[10] * wz + vp[14];
50
+ const objectAlpha = getNode3DWorldAlpha(mesh);
51
+ for (let s = 0; s < subsets.length; s++) {
52
+ const material = resolveSubsetMaterial(mesh, s);
53
+ const renderer = resolveWgpuMeshMaterialRenderer(state, material);
54
+ if (renderer === null)
55
+ continue;
56
+ const resolvedMaterial = material ?? DEFAULT_MATERIAL;
57
+ const blended = isBlendedMaterial(resolvedMaterial) || objectAlpha < 1;
58
+ const entry = acquireDrawEntry(blended ? runtime.blendedPool : runtime.opaquePool);
59
+ entry.alpha = objectAlpha;
60
+ entry.depth = clipZ / clipW;
61
+ entry.lightBlock = hasPreparedForwardLights ? forwardLights.meshLightBlocks[m] : lightBlock;
62
+ entry.material = resolvedMaterial;
63
+ entry.mesh = mesh;
64
+ entry.renderer = renderer;
65
+ entry.subset = subsets[s];
66
+ entry.worldMatrix = worldMatrix;
67
+ (blended ? blendedDrawList : opaqueDrawList).push(entry);
68
+ }
69
+ }
70
+ drawEntries(state, opaqueDrawList, camera, false);
71
+ if (blendedDrawList.length > 0) {
72
+ blendedDrawList.sort(compareBlendedEntriesDescending);
73
+ drawEntries(state, blendedDrawList, camera, true);
74
+ }
75
+ // ParticleEmitter3D nodes carry no geometry, so prepareScene3DRender never lists them among the
76
+ // visible meshes above. Draw them here as a final transparent instanced pass so the common
77
+ // drawWgpuScene3D path renders a scene's emitters without the caller also invoking the emitter pass
78
+ // by hand — mirroring drawGlScene3D. drawWgpuScene3DParticleEmitter3Ds stays exported for manual ordering;
79
+ // it early-returns when the scene has no emitters, so the mesh-only path is unaffected. Runs inside
80
+ // this still-open render pass (it reads the pass off the render-state runtime).
81
+ drawWgpuScene3DParticleEmitter3Ds(state, scene, camera, lights);
82
+ runtime.activeBlendedRun = false;
83
+ runtime.activeSkinnedRun = false;
84
+ }
85
+ export function isWgpuMeshGpuSkinned(state, mesh) {
86
+ const skinning = getWgpuScene3DRuntime(state).skinningAdapter;
87
+ return skinning !== null && skinning.isGpuSkinned(mesh);
88
+ }
89
+ function drawEntries(state, entries, camera, blended) {
90
+ const runtime = getWgpuScene3DRuntime(state);
91
+ runtime.activeBlendedRun = blended;
92
+ let boundMaterial;
93
+ let boundLightBlock = null;
94
+ let boundRenderer = null;
95
+ let boundSkinned;
96
+ for (let i = 0; i < entries.length; i++) {
97
+ const entry = entries[i];
98
+ const worldMatrix = entry.worldMatrix;
99
+ setMatrix3NormalFromMatrix4(scratchNormalMatrix, worldMatrix);
100
+ const skinned = isWgpuMeshGpuSkinned(state, entry.mesh);
101
+ if (entry.renderer !== boundRenderer ||
102
+ entry.material !== boundMaterial ||
103
+ entry.lightBlock !== boundLightBlock ||
104
+ skinned !== boundSkinned) {
105
+ runtime.activeSkinnedRun = skinned;
106
+ entry.renderer.bind(state, entry.material, entry.lightBlock, camera);
107
+ boundRenderer = entry.renderer;
108
+ boundMaterial = entry.material;
109
+ boundLightBlock = entry.lightBlock;
110
+ boundSkinned = skinned;
111
+ }
112
+ proxy.alpha = entry.alpha;
113
+ proxy.jointMatrices = skinned ? entry.mesh.skin.skeleton.jointMatrices : null;
114
+ proxy.material = entry.material;
115
+ proxy.normalMatrix = scratchNormalMatrix;
116
+ proxy.subset = entry.subset;
117
+ proxy.worldMatrix = worldMatrix;
118
+ entry.renderer.draw(state, proxy, entry.mesh.geometry);
119
+ }
120
+ }
121
+ function isBlendedMaterial(material) {
122
+ return material.alphaMode === 'blend';
123
+ }
124
+ function hasExcessForwardLights(lights) {
125
+ return (lights.point?.length ?? 0) > MAX_FORWARD_LIGHTS || (lights.spot?.length ?? 0) > MAX_FORWARD_LIGHTS;
126
+ }
127
+ // Resolves the Material for a subset index: the positional materials[i] entry, or null when the
128
+ // slot is absent/null (the registry then falls back to DefaultMaterialKind, or skips the subset).
129
+ function resolveSubsetMaterial(mesh, subsetIndex) {
130
+ const materials = mesh.materials;
131
+ return subsetIndex < materials.length ? materials[subsetIndex] : null;
132
+ }
133
+ function compareBlendedEntriesDescending(a, b) {
134
+ return b.depth - a.depth;
135
+ }
136
+ function acquireDrawEntry(pool) {
137
+ if (pool.length > 0)
138
+ return pool.pop();
139
+ return createDrawEntry();
140
+ }
141
+ function recycleDrawEntries(entries, pool) {
142
+ while (entries.length > 0)
143
+ pool.push(entries.pop());
144
+ }
145
+ function createDrawEntry() {
146
+ return {
147
+ alpha: 1,
148
+ depth: 0,
149
+ lightBlock: null,
150
+ material: DEFAULT_MATERIAL,
151
+ mesh: null,
152
+ renderer: null,
153
+ subset: { indexCount: 0, indexOffset: 0 },
154
+ worldMatrix: createMatrix4(),
155
+ };
156
+ }
157
+ // The reused per-draw proxy handed to a renderer's draw. Owned by drawWgpuScene3D, valid only for the
158
+ // duration of the draw call it is passed to; renderers must not retain it.
159
+ const proxy = {
160
+ alpha: 1,
161
+ jointMatrices: null,
162
+ material: { kind: DefaultMaterialKind },
163
+ normalMatrix: createMatrix3(),
164
+ subset: { indexCount: 0, indexOffset: 0 },
165
+ worldMatrix: createMatrix4(),
166
+ };
167
+ // Placeholder material for proxy.material when a subset resolved to the default-kind fallback with
168
+ // no concrete material; the renderer treats a default/null material as its untextured defaults.
169
+ const DEFAULT_MATERIAL = { kind: DefaultMaterialKind };
170
+ const scratchNormalMatrix = createMatrix3();
171
+ //# sourceMappingURL=drawWgpuScene3D.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drawWgpuScene3D.js","sourceRoot":"","sources":["../src/drawWgpuScene3D.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { WgpuMeshMaterialRenderer, WgpuRenderState } from '@flighthq/types';
2
+ export declare const emissiveWgpuMeshMaterialRenderer: WgpuMeshMaterialRenderer;
3
+ export declare function registerEmissiveWgpuMaterial(state: WgpuRenderState): void;
4
+ //# sourceMappingURL=emissiveWgpuMeshMaterialRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emissiveWgpuMeshMaterialRenderer.d.ts","sourceRoot":"","sources":["../src/emissiveWgpuMeshMaterialRenderer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAQV,wBAAwB,EACxB,eAAe,EAEhB,MAAM,iBAAiB,CAAC;AAWzB,eAAO,MAAM,gCAAgC,EAAE,wBAuC9C,CAAC;AAIF,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAEzE"}
@@ -0,0 +1,51 @@
1
+ import { unpackColorToLinear } from '@flighthq/color';
2
+ import { getWgpuRenderStateRuntime } from '@flighthq/render-wgpu';
3
+ import { EmissiveMaterialKind } from '@flighthq/types';
4
+ import { registerWgpuMeshMaterialRenderer } from './wgpuMeshMaterialRegistry';
5
+ import { beginWgpuMeshDraw, drawWgpuMeshSubset, isWgpuTextureReady, writeWgpuFrameUniform } from './wgpuMeshPipeline';
6
+ import { bindWgpuUnlitSurface, ensureWgpuUnlitPipeline } from './wgpuUnlitPrelude';
7
+ // The built-in Emissive forward renderer (WgpuMeshMaterialRenderer for EmissiveMaterialKind) — the WGSL
8
+ // mirror of emissiveGlMeshMaterialRenderer. Self-illuminating, lighting-independent: binds the linear
9
+ // emissive color scaled by emissiveStrength through the shared unlit pipeline (values > 1 drive bloom
10
+ // over the rgba16float scene target). See registerEmissiveWgpuMaterial.
11
+ export const emissiveWgpuMeshMaterialRenderer = {
12
+ bind(state, material, _lights, camera) {
13
+ const stateRuntime = getWgpuRenderStateRuntime(state);
14
+ const pass = stateRuntime.renderPass;
15
+ if (pass === null)
16
+ return;
17
+ const emissive = material;
18
+ const format = stateRuntime.currentColorFormat ?? state.format;
19
+ const pipeline = ensureWgpuUnlitPipeline(state, defineKeyForMaterial(emissive), format);
20
+ writeWgpuFrameUniform(state, camera, _lights);
21
+ let group;
22
+ if (emissive === null) {
23
+ group = bindWgpuUnlitSurface(state, pipeline, FALLBACK_MATERIAL, WHITE, 1, 0.5, null);
24
+ }
25
+ else {
26
+ unpackColorToLinear(_scratch, emissive.emissive);
27
+ group = bindWgpuUnlitSurface(state, pipeline, emissive, _scratch, emissive.emissiveStrength, emissive.alphaCutoff, emissive.emissiveMap);
28
+ }
29
+ beginWgpuMeshDraw(state, pipeline);
30
+ pass.setBindGroup(2, group);
31
+ },
32
+ draw(state, proxy, geometry) {
33
+ drawWgpuMeshSubset(state, proxy, geometry);
34
+ },
35
+ };
36
+ // Registers the built-in Emissive renderer for EmissiveMaterialKind on this state. Opt-in (no top-level
37
+ // side effect); call once per WgpuRenderState before drawWgpuScene3D so meshes with EmissiveMaterials draw.
38
+ export function registerEmissiveWgpuMaterial(state) {
39
+ registerWgpuMeshMaterialRenderer(state, EmissiveMaterialKind, emissiveWgpuMeshMaterialRenderer);
40
+ }
41
+ function defineKeyForMaterial(material) {
42
+ return {
43
+ alphaMaskEnabled: material !== null && material.alphaMode === 'mask',
44
+ doubleSided: material !== null && material.doubleSided,
45
+ hasColorMap: material !== null && isWgpuTextureReady(material.emissiveMap),
46
+ };
47
+ }
48
+ const _scratch = [0, 0, 0, 0];
49
+ const WHITE = [1, 1, 1, 1];
50
+ const FALLBACK_MATERIAL = {};
51
+ //# sourceMappingURL=emissiveWgpuMeshMaterialRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emissiveWgpuMeshMaterialRenderer.js","sourceRoot":"","sources":["../src/emissiveWgpuMeshMaterialRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAalE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACtH,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAEnF,wGAAwG;AACxG,sGAAsG;AACtG,sGAAsG;AACtG,wEAAwE;AACxE,MAAM,CAAC,MAAM,gCAAgC,GAA6B;IACxE,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,QAAQ,GAAG,QAA6C,CAAC;QAC/D,MAAM,MAAM,GAAG,YAAY,CAAC,kBAAkB,IAAI,KAAK,CAAC,MAAM,CAAC;QAC/D,MAAM,QAAQ,GAAG,uBAAuB,CAAC,KAAK,EAAE,oBAAoB,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;QACxF,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAE9C,IAAI,KAAmB,CAAC;QACxB,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,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,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACjD,KAAK,GAAG,oBAAoB,CAC1B,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,CAAC,gBAAgB,EACzB,QAAQ,CAAC,WAAW,EACpB,QAAQ,CAAC,WAAW,CACrB,CAAC;QACJ,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,wGAAwG;AACxG,4GAA4G;AAC5G,MAAM,UAAU,4BAA4B,CAAC,KAAsB;IACjE,gCAAgC,CAAC,KAAK,EAAE,oBAAoB,EAAE,gCAAgC,CAAC,CAAC;AAClG,CAAC;AAED,SAAS,oBAAoB,CAAC,QAA2C;IACvE,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,QAAQ,KAAK,IAAI,IAAI,kBAAkB,CAAC,QAAQ,CAAC,WAAW,CAAC;KAC3E,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,EAAgC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { CustomShaderMaterial, WgpuCustomMaterialShaderSource, WgpuRenderState } from '@flighthq/types';
2
+ export declare function areWgpuScene3DCustomShaderGuardsEnabled(state: WgpuRenderState): boolean;
3
+ export declare function enableWgpuScene3DCustomShaderGuards(state: WgpuRenderState): void;
4
+ export declare function runWgpuCustomShaderGuards(state: WgpuRenderState, shaderKey: string, source: WgpuCustomMaterialShaderSource, material: Readonly<CustomShaderMaterial>): void;
5
+ //# sourceMappingURL=enableWgpuScene3DCustomShaderGuards.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enableWgpuScene3DCustomShaderGuards.d.ts","sourceRoot":"","sources":["../src/enableWgpuScene3DCustomShaderGuards.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,8BAA8B,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAO7G,wBAAgB,uCAAuC,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAEvF;AAGD,wBAAgB,mCAAmC,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAEhF;AAID,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,eAAe,EACtB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,8BAA8B,EACtC,QAAQ,EAAE,QAAQ,CAAC,oBAAoB,CAAC,GACvC,IAAI,CA6CN"}
@@ -0,0 +1,56 @@
1
+ import { logOnce } from '@flighthq/log';
2
+ import { LogLevel } from '@flighthq/types';
3
+ import { WGPU_CUSTOM_SHADER_TEXTURE_CAPACITY, WGPU_CUSTOM_SHADER_USER_VEC4_CAPACITY } from './wgpuCustomMaterialAbi';
4
+ import { getWgpuScene3DRuntime } from './wgpuScene3DRuntime';
5
+ // Returns whether the shakeable CustomShaderMaterial contract guards are installed on `state`.
6
+ export function areWgpuScene3DCustomShaderGuardsEnabled(state) {
7
+ return getWgpuScene3DRuntime(state).customShaderGuard != null;
8
+ }
9
+ // Enables actionable, warn-once diagnostics for the fixed custom-material WGSL binding ABI.
10
+ export function enableWgpuScene3DCustomShaderGuards(state) {
11
+ getWgpuScene3DRuntime(state).customShaderGuard = runWgpuCustomShaderGuards;
12
+ }
13
+ // Runs the opt-in validation at bind time. Kept as a small exported seam so the renderer carries no
14
+ // logging dependency or warning strings unless this guard module is imported and enabled.
15
+ export function runWgpuCustomShaderGuards(state, shaderKey, source, material) {
16
+ if (getWgpuScene3DRuntime(state).customShaderGuard == null)
17
+ return;
18
+ const uniforms = material.uniforms ?? {};
19
+ const uniformNames = Object.keys(uniforms).sort();
20
+ for (const name of uniformNames) {
21
+ const value = uniforms[name];
22
+ if (typeof value !== 'number' && (value.length < 1 || value.length > 4)) {
23
+ warn(`uniform-length:${shaderKey}:${name}:${value.length}`, `shader "${shaderKey}" uniform "${name}" has ${value.length} components; WebGPU custom material uniforms must be scalars or vectors with 1–4 components.`);
24
+ }
25
+ }
26
+ if (uniformNames.length > WGPU_CUSTOM_SHADER_USER_VEC4_CAPACITY) {
27
+ warn(`uniform-overflow:${shaderKey}`, `shader "${shaderKey}" has ${uniformNames.length} uniforms, exceeding the fixed ${WGPU_CUSTOM_SHADER_USER_VEC4_CAPACITY}-vec4 UserBlock capacity; extra alphabetically sorted fields are not uploaded.`);
28
+ }
29
+ const textureCount = Object.keys(material.textures ?? {}).length;
30
+ if (textureCount > WGPU_CUSTOM_SHADER_TEXTURE_CAPACITY) {
31
+ warn(`texture-overflow:${shaderKey}`, `shader "${shaderKey}" has ${textureCount} textures, exceeding the fixed ${WGPU_CUSTOM_SHADER_TEXTURE_CAPACITY}-texture binding capacity; extra bag-order textures are not bound.`);
32
+ }
33
+ const required = [
34
+ [0, 0, 'Frame'],
35
+ [1, 0, 'Draw'],
36
+ [2, 0, 'UserBlock'],
37
+ ];
38
+ for (let slot = 0; slot < Math.min(textureCount, WGPU_CUSTOM_SHADER_TEXTURE_CAPACITY); slot++) {
39
+ required.push([3, slot * 2, `texture sampler slot ${slot}`]);
40
+ required.push([3, slot * 2 + 1, `texture view slot ${slot}`]);
41
+ }
42
+ for (const [group, binding, label] of required) {
43
+ if (hasBinding(source, group, binding))
44
+ continue;
45
+ warn(`missing-binding:${shaderKey}:${group}:${binding}`, `shader "${shaderKey}" is missing reserved @group(${group}) @binding(${binding}) (${label}); declare the fixed scene-wgpu custom material ABI binding.`);
46
+ }
47
+ }
48
+ function hasBinding(source, group, binding) {
49
+ const groupFirst = new RegExp(`@group\\s*\\(\\s*${group}\\s*\\)(?:(?!@group|@binding)[\\s\\S]){0,80}@binding\\s*\\(\\s*${binding}\\s*\\)`);
50
+ const bindingFirst = new RegExp(`@binding\\s*\\(\\s*${binding}\\s*\\)(?:(?!@group|@binding)[\\s\\S]){0,80}@group\\s*\\(\\s*${group}\\s*\\)`);
51
+ return groupFirst.test(source) || bindingFirst.test(source);
52
+ }
53
+ function warn(key, message) {
54
+ logOnce(`scene-wgpu:custom-shader:${key}`, LogLevel.Warn, { message }, 'scene-wgpu');
55
+ }
56
+ //# sourceMappingURL=enableWgpuScene3DCustomShaderGuards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enableWgpuScene3DCustomShaderGuards.js","sourceRoot":"","sources":["../src/enableWgpuScene3DCustomShaderGuards.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { WgpuRenderState } from '@flighthq/types';
2
+ export declare function areWgpuScene3DForwardLightSelectionGuardsEnabled(state: WgpuRenderState): boolean;
3
+ export declare function enableWgpuScene3DForwardLightSelectionGuards(state: WgpuRenderState): void;
4
+ //# sourceMappingURL=enableWgpuScene3DForwardLightSelectionGuards.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enableWgpuScene3DForwardLightSelectionGuards.d.ts","sourceRoot":"","sources":["../src/enableWgpuScene3DForwardLightSelectionGuards.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAqB,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAK1E,wBAAgB,gDAAgD,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAEhG;AAED,wBAAgB,4CAA4C,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAEzF"}
@@ -0,0 +1,17 @@
1
+ import { logOnce } from '@flighthq/log';
2
+ import { LogLevel } from '@flighthq/types';
3
+ import { getWgpuScene3DRuntime } from './wgpuScene3DRuntime';
4
+ export function areWgpuScene3DForwardLightSelectionGuardsEnabled(state) {
5
+ return getWgpuScene3DRuntime(state).forwardLightSelectionGuard != null;
6
+ }
7
+ export function enableWgpuScene3DForwardLightSelectionGuards(state) {
8
+ getWgpuScene3DRuntime(state).forwardLightSelectionGuard = warnSelectionRequired;
9
+ }
10
+ function warnSelectionRequired(lights) {
11
+ logOnce('scene-wgpu:forward-light-selection-required', LogLevel.Warn, {
12
+ message: 'drawWgpuScene3D: punctual lights exceed MAX_FORWARD_LIGHTS and will be input-order truncated — call prepareWgpuScene3DForwardLights after prepareScene3DRender and pass its result to drawWgpuScene3D.',
13
+ pointLightCount: lights.point?.length ?? 0,
14
+ spotLightCount: lights.spot?.length ?? 0,
15
+ }, 'scene-wgpu');
16
+ }
17
+ //# sourceMappingURL=enableWgpuScene3DForwardLightSelectionGuards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enableWgpuScene3DForwardLightSelectionGuards.js","sourceRoot":"","sources":["../src/enableWgpuScene3DForwardLightSelectionGuards.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,MAAM,UAAU,gDAAgD,CAAC,KAAsB;IACrF,OAAO,qBAAqB,CAAC,KAAK,CAAC,CAAC,0BAA0B,IAAI,IAAI,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,4CAA4C,CAAC,KAAsB;IACjF,qBAAqB,CAAC,KAAK,CAAC,CAAC,0BAA0B,GAAG,qBAAqB,CAAC;AAClF,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAmC;IAChE,OAAO,CACL,6CAA6C,EAC7C,QAAQ,CAAC,IAAI,EACb;QACE,OAAO,EACL,wMAAwM;QAC1M,eAAe,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;QAC1C,cAAc,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC;KACzC,EACD,YAAY,CACb,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Scene3DForwardLightSelectionExplanation, Scene3DLightsLike, WgpuScene3DForwardLightList } from '@flighthq/types';
2
+ export declare function explainWgpuScene3DForwardLightSelection(lights: Readonly<Scene3DLightsLike>, selection?: Readonly<WgpuScene3DForwardLightList>): Scene3DForwardLightSelectionExplanation;
3
+ //# sourceMappingURL=explainWgpuScene3DForwardLightSelection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explainWgpuScene3DForwardLightSelection.d.ts","sourceRoot":"","sources":["../src/explainWgpuScene3DForwardLightSelection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uCAAuC,EACvC,iBAAiB,EACjB,2BAA2B,EAC5B,MAAM,iBAAiB,CAAC;AAIzB,wBAAgB,uCAAuC,CACrD,MAAM,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EACnC,SAAS,CAAC,EAAE,QAAQ,CAAC,2BAA2B,CAAC,GAChD,uCAAuC,CAczC"}
@@ -0,0 +1,18 @@
1
+ import { MAX_FORWARD_LIGHTS } from '@flighthq/types';
2
+ // Pure diagnostic twin of scene-gl's explanation API.
3
+ export function explainWgpuScene3DForwardLightSelection(lights, selection) {
4
+ const pointLightCount = lights.point?.length ?? 0;
5
+ const spotLightCount = lights.spot?.length ?? 0;
6
+ const selectionPrepared = selection !== undefined;
7
+ return {
8
+ pointLightCount,
9
+ reason: selectionPrepared
10
+ ? 'selection-prepared'
11
+ : pointLightCount > MAX_FORWARD_LIGHTS || spotLightCount > MAX_FORWARD_LIGHTS
12
+ ? 'selection-required'
13
+ : 'within-budget',
14
+ selectionPrepared,
15
+ spotLightCount,
16
+ };
17
+ }
18
+ //# sourceMappingURL=explainWgpuScene3DForwardLightSelection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explainWgpuScene3DForwardLightSelection.js","sourceRoot":"","sources":["../src/explainWgpuScene3DForwardLightSelection.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,sDAAsD;AACtD,MAAM,UAAU,uCAAuC,CACrD,MAAmC,EACnC,SAAiD;IAEjD,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC;IAClD,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,CAAC;IAChD,MAAM,iBAAiB,GAAG,SAAS,KAAK,SAAS,CAAC;IAClD,OAAO;QACL,eAAe;QACf,MAAM,EAAE,iBAAiB;YACvB,CAAC,CAAC,oBAAoB;YACtB,CAAC,CAAC,eAAe,GAAG,kBAAkB,IAAI,cAAc,GAAG,kBAAkB;gBAC3E,CAAC,CAAC,oBAAoB;gBACtB,CAAC,CAAC,eAAe;QACrB,iBAAiB;QACjB,cAAc;KACf,CAAC;AACJ,CAAC"}
@@ -0,0 +1,51 @@
1
+ export * from './anisotropyPbrWgpuMeshMaterialRenderer';
2
+ export * from './blinnPhongWgpuMeshMaterialRenderer';
3
+ export * from './clearcoatPbrWgpuMeshMaterialRenderer';
4
+ export * from './customShaderWgpuMeshMaterialRenderer';
5
+ export * from './depthWgpuMeshMaterialRenderer';
6
+ export * from './drawWgpuScene3D';
7
+ export * from './enableWgpuScene3DForwardLightSelectionGuards';
8
+ export * from './enableWgpuScene3DCustomShaderGuards';
9
+ export * from './explainWgpuScene3DForwardLightSelection';
10
+ export * from './emissiveWgpuMeshMaterialRenderer';
11
+ export * from './wgpuEnvironmentCube';
12
+ export * from './wgpuEnvironmentIblBake';
13
+ export * from './wgpuEnvironmentSkybox';
14
+ export * from './iridescencePbrWgpuMeshMaterialRenderer';
15
+ export * from './lambertWgpuMeshMaterialRenderer';
16
+ export * from './matcapWgpuMeshMaterialRenderer';
17
+ export * from './normalWgpuMeshMaterialRenderer';
18
+ export * from './phongWgpuMeshMaterialRenderer';
19
+ export * from './prepareWgpuScene3DForwardLights';
20
+ export * from './registerStandardPbrWgpuMaterial';
21
+ export * from './sheenPbrWgpuMeshMaterialRenderer';
22
+ export * from './shadedWgpuMeshMaterialRenderer';
23
+ export * from './specularGlossinessPbrWgpuMeshMaterialRenderer';
24
+ export * from './specularPbrWgpuMeshMaterialRenderer';
25
+ export * from './standardPbrWgpuMeshMaterialRenderer';
26
+ export * from './subsurfacePbrWgpuMeshMaterialRenderer';
27
+ export * from './toonWgpuMeshMaterialRenderer';
28
+ export * from './transmissionVolumePbrWgpuMeshMaterialRenderer';
29
+ export * from './unlitWgpuMeshMaterialRenderer';
30
+ export * from './vertexColorWgpuMeshMaterialRenderer';
31
+ export * from './wgpuClassicPrelude';
32
+ export * from './wgpuDebugPrelude';
33
+ export * from './wgpuMatcapPrelude';
34
+ export * from './wgpuMeshMaterialRegistry';
35
+ export * from './wgpuMeshPipeline';
36
+ export * from './wgpuMeshUpload';
37
+ export * from './wgpuParticleEmitter3D';
38
+ export * from './wgpuPbrPipelineCache';
39
+ export * from './wgpuPbrPrelude';
40
+ export * from './wgpuScene3DRuntime';
41
+ export * from './wgpuScene3DTime';
42
+ export * from './wgpuShadedPrelude';
43
+ export * from './wgpuShadedModifierSnippet';
44
+ export * from './wgpuShadowMap';
45
+ export * from './wgpuSkinPalette';
46
+ export * from './wgpuToonPrelude';
47
+ export * from './wgpuUnlitPrelude';
48
+ export * from './wgpuWireframePrelude';
49
+ export * from './wgpuWireframeUpload';
50
+ export * from './wireframeWgpuMeshMaterialRenderer';
51
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,yCAAyC,CAAC;AACxD,cAAc,sCAAsC,CAAC;AACrD,cAAc,wCAAwC,CAAC;AACvD,cAAc,wCAAwC,CAAC;AACvD,cAAc,iCAAiC,CAAC;AAChD,cAAc,mBAAmB,CAAC;AAClC,cAAc,gDAAgD,CAAC;AAC/D,cAAc,uCAAuC,CAAC;AACtD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,oCAAoC,CAAC;AACnD,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0CAA0C,CAAC;AACzD,cAAc,mCAAmC,CAAC;AAClD,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,mCAAmC,CAAC;AAClD,cAAc,oCAAoC,CAAC;AACnD,cAAc,kCAAkC,CAAC;AACjD,cAAc,iDAAiD,CAAC;AAChE,cAAc,uCAAuC,CAAC;AACtD,cAAc,uCAAuC,CAAC;AACtD,cAAc,yCAAyC,CAAC;AACxD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iDAAiD,CAAC;AAChE,cAAc,iCAAiC,CAAC;AAChD,cAAc,uCAAuC,CAAC;AACtD,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qCAAqC,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,51 @@
1
+ export * from './anisotropyPbrWgpuMeshMaterialRenderer';
2
+ export * from './blinnPhongWgpuMeshMaterialRenderer';
3
+ export * from './clearcoatPbrWgpuMeshMaterialRenderer';
4
+ export * from './customShaderWgpuMeshMaterialRenderer';
5
+ export * from './depthWgpuMeshMaterialRenderer';
6
+ export * from './drawWgpuScene3D';
7
+ export * from './enableWgpuScene3DForwardLightSelectionGuards';
8
+ export * from './enableWgpuScene3DCustomShaderGuards';
9
+ export * from './explainWgpuScene3DForwardLightSelection';
10
+ export * from './emissiveWgpuMeshMaterialRenderer';
11
+ export * from './wgpuEnvironmentCube';
12
+ export * from './wgpuEnvironmentIblBake';
13
+ export * from './wgpuEnvironmentSkybox';
14
+ export * from './iridescencePbrWgpuMeshMaterialRenderer';
15
+ export * from './lambertWgpuMeshMaterialRenderer';
16
+ export * from './matcapWgpuMeshMaterialRenderer';
17
+ export * from './normalWgpuMeshMaterialRenderer';
18
+ export * from './phongWgpuMeshMaterialRenderer';
19
+ export * from './prepareWgpuScene3DForwardLights';
20
+ export * from './registerStandardPbrWgpuMaterial';
21
+ export * from './sheenPbrWgpuMeshMaterialRenderer';
22
+ export * from './shadedWgpuMeshMaterialRenderer';
23
+ export * from './specularGlossinessPbrWgpuMeshMaterialRenderer';
24
+ export * from './specularPbrWgpuMeshMaterialRenderer';
25
+ export * from './standardPbrWgpuMeshMaterialRenderer';
26
+ export * from './subsurfacePbrWgpuMeshMaterialRenderer';
27
+ export * from './toonWgpuMeshMaterialRenderer';
28
+ export * from './transmissionVolumePbrWgpuMeshMaterialRenderer';
29
+ export * from './unlitWgpuMeshMaterialRenderer';
30
+ export * from './vertexColorWgpuMeshMaterialRenderer';
31
+ export * from './wgpuClassicPrelude';
32
+ export * from './wgpuDebugPrelude';
33
+ export * from './wgpuMatcapPrelude';
34
+ export * from './wgpuMeshMaterialRegistry';
35
+ export * from './wgpuMeshPipeline';
36
+ export * from './wgpuMeshUpload';
37
+ export * from './wgpuParticleEmitter3D';
38
+ export * from './wgpuPbrPipelineCache';
39
+ export * from './wgpuPbrPrelude';
40
+ export * from './wgpuScene3DRuntime';
41
+ export * from './wgpuScene3DTime';
42
+ export * from './wgpuShadedPrelude';
43
+ export * from './wgpuShadedModifierSnippet';
44
+ export * from './wgpuShadowMap';
45
+ export * from './wgpuSkinPalette';
46
+ export * from './wgpuToonPrelude';
47
+ export * from './wgpuUnlitPrelude';
48
+ export * from './wgpuWireframePrelude';
49
+ export * from './wgpuWireframeUpload';
50
+ export * from './wireframeWgpuMeshMaterialRenderer';
51
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,yCAAyC,CAAC;AACxD,cAAc,sCAAsC,CAAC;AACrD,cAAc,wCAAwC,CAAC;AACvD,cAAc,wCAAwC,CAAC;AACvD,cAAc,iCAAiC,CAAC;AAChD,cAAc,mBAAmB,CAAC;AAClC,cAAc,gDAAgD,CAAC;AAC/D,cAAc,uCAAuC,CAAC;AACtD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,oCAAoC,CAAC;AACnD,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0CAA0C,CAAC;AACzD,cAAc,mCAAmC,CAAC;AAClD,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,mCAAmC,CAAC;AAClD,cAAc,oCAAoC,CAAC;AACnD,cAAc,kCAAkC,CAAC;AACjD,cAAc,iDAAiD,CAAC;AAChE,cAAc,uCAAuC,CAAC;AACtD,cAAc,uCAAuC,CAAC;AACtD,cAAc,yCAAyC,CAAC;AACxD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iDAAiD,CAAC;AAChE,cAAc,iCAAiC,CAAC;AAChD,cAAc,uCAAuC,CAAC;AACtD,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qCAAqC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { WgpuMeshMaterialRenderer, WgpuRenderState } from '@flighthq/types';
2
+ export declare const iridescencePbrWgpuMeshMaterialRenderer: WgpuMeshMaterialRenderer;
3
+ export declare function registerIridescencePbrWgpuMaterial(state: WgpuRenderState): void;
4
+ //# sourceMappingURL=iridescencePbrWgpuMeshMaterialRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iridescencePbrWgpuMeshMaterialRenderer.d.ts","sourceRoot":"","sources":["../src/iridescencePbrWgpuMeshMaterialRenderer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAOV,wBAAwB,EACxB,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAyBzB,eAAO,MAAM,sCAAsC,EAAE,wBA0CpD,CAAC;AAIF,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAE/E"}
@@ -0,0 +1,60 @@
1
+ import { getWgpuRenderStateRuntime } from '@flighthq/render-wgpu';
2
+ import { IridescencePbrMaterialKind } from '@flighthq/types';
3
+ import { buildWgpuPbrStandardDefineKey, ensureWgpuPbrMaterialBindGroup, getWgpuPbrMaterialScratch, writeWgpuPbrMaterialUniform, writeWgpuPbrStandardBlock, } from './standardPbrWgpuMeshMaterialRenderer';
4
+ import { registerWgpuMeshMaterialRenderer } from './wgpuMeshMaterialRegistry';
5
+ import { beginWgpuMeshDraw, drawWgpuMeshSubset, writeWgpuFrameUniform } from './wgpuMeshPipeline';
6
+ import { ensureWgpuPbrPipeline } from './wgpuPbrPipelineCache';
7
+ // The built-in Iridescence (KHR_materials_iridescence) forward-lit mesh-material renderer — the WGSL
8
+ // mirror of iridescencePbrGlMeshMaterialRenderer. Iridescence models a thin transparent film over the
9
+ // surface whose interference shifts the Fresnel reflectance toward a view- and thickness-dependent hue
10
+ // — soap bubbles, oil slicks, anodized metal. The shader applies a compact sinusoidal thin-film
11
+ // approximation (sample-viewer style) to F0 behind `const IRIDESCENCE`. bind builds the standard define
12
+ // key from `material.standard` + the surface trailer, sets the IRIDESCENCE flag, selects/compiles that
13
+ // pipeline variant for the current color format, writes the shared Frame uniform, then writes the base
14
+ // block + the iridescence strength / film IOR / a single film thickness (the midpoint of the
15
+ // descriptor's min/max nm range) into the one MaterialBlock uniform and binds it at group(2). The
16
+ // per-texel thickness map is reserved but NOT sampled on wgpu yet (maps deferred). See
17
+ // registerIridescencePbrWgpuMaterial.
18
+ export const iridescencePbrWgpuMeshMaterialRenderer = {
19
+ bind(state, material, lights, camera) {
20
+ const stateRuntime = getWgpuRenderStateRuntime(state);
21
+ const pass = stateRuntime.renderPass;
22
+ if (pass === null)
23
+ return;
24
+ const iridescence = material;
25
+ const standard = iridescence !== null ? iridescence.standard : null;
26
+ const key = buildWgpuPbrStandardDefineKey(standard, iridescence);
27
+ key.iridescenceEnabled = true;
28
+ const format = stateRuntime.currentColorFormat ?? state.format;
29
+ const pipeline = ensureWgpuPbrPipeline(state, key, format);
30
+ writeWgpuFrameUniform(state, camera, lights);
31
+ const binding = ensureWgpuPbrMaterialBindGroup(state, pipeline, iridescence ?? FALLBACK_MATERIAL, standard);
32
+ const out = getWgpuPbrMaterialScratch();
33
+ writeWgpuPbrStandardBlock(out, standard, iridescence !== null ? iridescence.alphaCutoff : 0.5);
34
+ out.fill(0, 16);
35
+ // iridescence group (floats 28..30): strength, film IOR, film thickness (nm; min/max midpoint).
36
+ if (iridescence !== null) {
37
+ out[28] = iridescence.iridescence;
38
+ out[29] = iridescence.iridescenceIor;
39
+ out[30] = (iridescence.iridescenceThicknessMin + iridescence.iridescenceThicknessMax) * 0.5;
40
+ }
41
+ else {
42
+ out[28] = 0;
43
+ out[29] = 1.3;
44
+ out[30] = 250;
45
+ }
46
+ writeWgpuPbrMaterialUniform(state, binding);
47
+ beginWgpuMeshDraw(state, pipeline);
48
+ pass.setBindGroup(2, binding.bindGroup);
49
+ },
50
+ draw(state, proxy, geometry) {
51
+ drawWgpuMeshSubset(state, proxy, geometry);
52
+ },
53
+ };
54
+ // Installs the built-in Iridescence renderer for IridescencePbrMaterialKind on this state. Opt-in (no
55
+ // top-level side effect): drawScene3D only draws Iridescence subsets once this is called.
56
+ export function registerIridescencePbrWgpuMaterial(state) {
57
+ registerWgpuMeshMaterialRenderer(state, IridescencePbrMaterialKind, iridescencePbrWgpuMeshMaterialRenderer);
58
+ }
59
+ const FALLBACK_MATERIAL = {};
60
+ //# sourceMappingURL=iridescencePbrWgpuMeshMaterialRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iridescencePbrWgpuMeshMaterialRenderer.js","sourceRoot":"","sources":["../src/iridescencePbrWgpuMeshMaterialRenderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { WgpuMeshMaterialRenderer, WgpuRenderState } from '@flighthq/types';
2
+ export declare const lambertWgpuMeshMaterialRenderer: WgpuMeshMaterialRenderer;
3
+ export declare function registerLambertWgpuMaterial(state: WgpuRenderState): void;
4
+ //# sourceMappingURL=lambertWgpuMeshMaterialRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lambertWgpuMeshMaterialRenderer.d.ts","sourceRoot":"","sources":["../src/lambertWgpuMeshMaterialRenderer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAQV,wBAAwB,EACxB,eAAe,EAEhB,MAAM,iBAAiB,CAAC;AAczB,eAAO,MAAM,+BAA+B,EAAE,wBA2C7C,CAAC;AAIF,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAExE"}