@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,61 @@
1
+ import { unpackColorToLinear } from '@flighthq/color';
2
+ import { getWgpuRenderStateRuntime } from '@flighthq/render-wgpu';
3
+ import { LambertMaterialKind } from '@flighthq/types';
4
+ import { bindWgpuClassicSurface, ensureWgpuClassicPipeline } from './wgpuClassicPrelude';
5
+ import { registerWgpuMeshMaterialRenderer } from './wgpuMeshMaterialRegistry';
6
+ import { beginWgpuMeshDraw, drawWgpuMeshSubset, isWgpuTextureReady, writeWgpuFrameUniform } from './wgpuMeshPipeline';
7
+ // The built-in classic Lambert forward-lit mesh-material renderer (WgpuMeshMaterialRenderer for
8
+ // LambertMaterialKind) — the WGSL mirror of lambertGlMeshMaterialRenderer. Diffuse-only Lambertian
9
+ // shading: bind selects the classic uber-shader's `lambert` variant for the material's alpha mode +
10
+ // color format, writes the shared Frame uniform (camera + the packed light block), binds the pipeline
11
+ // + Frame group (beginWgpuMeshDraw), then binds the material's linear diffuse color at group(2). draw
12
+ // issues the indexed draw. Lambert has no view-dependent term, so the classic prelude compiles out its
13
+ // specular branch (the specular color it binds is unused). See registerLambertWgpuMaterial to install.
14
+ export const lambertWgpuMeshMaterialRenderer = {
15
+ bind(state, material, lights, camera) {
16
+ const stateRuntime = getWgpuRenderStateRuntime(state);
17
+ const pass = stateRuntime.renderPass;
18
+ if (pass === null)
19
+ return;
20
+ const lambert = material;
21
+ const format = stateRuntime.currentColorFormat ?? state.format;
22
+ const pipeline = ensureWgpuClassicPipeline(state, defineKeyForMaterial(lambert), format);
23
+ writeWgpuFrameUniform(state, camera, lights);
24
+ let group;
25
+ if (lambert === null) {
26
+ group = bindWgpuClassicSurface(state, pipeline, FALLBACK_MATERIAL, WHITE, WHITE, 32, 0.5, null, null, null, null);
27
+ }
28
+ else {
29
+ unpackColorToLinear(_diffuse, lambert.diffuse);
30
+ group = bindWgpuClassicSurface(state, pipeline, lambert, _diffuse, WHITE, 32, lambert.alphaCutoff, lambert.diffuseMap, null, null, 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 Lambert renderer for LambertMaterialKind on this state. Opt-in (no top-level
40
+ // side effect); call once per WgpuRenderState before drawWgpuScene3D so meshes with LambertMaterials draw.
41
+ export function registerLambertWgpuMaterial(state) {
42
+ registerWgpuMeshMaterialRenderer(state, LambertMaterialKind, lambertWgpuMeshMaterialRenderer);
43
+ }
44
+ // The feature define key for a Lambert material: the fixed `lambert` lighting model plus the alpha-mask
45
+ // + double-sided flags and whether a diffuse map is present. Lambert has no specular or normal map
46
+ // (mirrors lambertGlMeshMaterialRenderer's diffuse-only map handling).
47
+ function defineKeyForMaterial(material) {
48
+ return {
49
+ alphaMaskEnabled: material !== null && material.alphaMode === 'mask',
50
+ doubleSided: material !== null && material.doubleSided,
51
+ hasAlphaMap: false,
52
+ hasDiffuseMap: material !== null && isWgpuTextureReady(material.diffuseMap),
53
+ hasNormalMap: false,
54
+ hasSpecularMap: false,
55
+ lightingModel: 'lambert',
56
+ };
57
+ }
58
+ const _diffuse = [0, 0, 0, 0];
59
+ const WHITE = [1, 1, 1, 1];
60
+ const FALLBACK_MATERIAL = {};
61
+ //# sourceMappingURL=lambertWgpuMeshMaterialRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lambertWgpuMeshMaterialRenderer.js","sourceRoot":"","sources":["../src/lambertWgpuMeshMaterialRenderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { WgpuMeshMaterialRenderer, WgpuRenderState } from '@flighthq/types';
2
+ export declare const matcapWgpuMeshMaterialRenderer: WgpuMeshMaterialRenderer;
3
+ export declare function registerMatcapWgpuMaterial(state: WgpuRenderState): void;
4
+ //# sourceMappingURL=matcapWgpuMeshMaterialRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matcapWgpuMeshMaterialRenderer.d.ts","sourceRoot":"","sources":["../src/matcapWgpuMeshMaterialRenderer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAQV,wBAAwB,EACxB,eAAe,EAEhB,MAAM,iBAAiB,CAAC;AAczB,eAAO,MAAM,8BAA8B,EAAE,wBA+B5C,CAAC;AAIF,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAEvE"}
@@ -0,0 +1,54 @@
1
+ import { unpackColorToLinear } from '@flighthq/color';
2
+ import { getWgpuRenderStateRuntime } from '@flighthq/render-wgpu';
3
+ import { MatcapMaterialKind } from '@flighthq/types';
4
+ import { bindWgpuMatcapSurface, ensureWgpuMatcapPipeline } from './wgpuMatcapPrelude';
5
+ import { registerWgpuMeshMaterialRenderer } from './wgpuMeshMaterialRegistry';
6
+ import { beginWgpuMeshDraw, drawWgpuMeshSubset, writeWgpuFrameUniform } from './wgpuMeshPipeline';
7
+ // The built-in Matcap forward renderer (WgpuMeshMaterialRenderer for MatcapMaterialKind) — the WGSL
8
+ // mirror of matcapGlMeshMaterialRenderer. Lighting-independent material-capture shading: bind selects
9
+ // the matcap pipeline variant for the alpha mode + color format, writes the shared Frame uniform
10
+ // (lights ignored — the matcap texture is the prebaked lighting), and binds the linear tint; draw
11
+ // issues the indexed draw. See registerMatcapWgpuMaterial to install it. The real matcap texture is not
12
+ // yet sampled on wgpu (hasMatcap stays false; see wgpuMatcapPrelude's note), so the surface renders as
13
+ // the tint alone for now.
14
+ export const matcapWgpuMeshMaterialRenderer = {
15
+ bind(state, material, _lights, camera) {
16
+ const stateRuntime = getWgpuRenderStateRuntime(state);
17
+ const pass = stateRuntime.renderPass;
18
+ if (pass === null)
19
+ return;
20
+ const matcap = material;
21
+ const format = stateRuntime.currentColorFormat ?? state.format;
22
+ const pipeline = ensureWgpuMatcapPipeline(state, defineKeyForMaterial(matcap), format);
23
+ writeWgpuFrameUniform(state, camera, _lights);
24
+ let group;
25
+ if (matcap === null) {
26
+ group = bindWgpuMatcapSurface(state, pipeline, FALLBACK_MATERIAL, WHITE, 0.5);
27
+ }
28
+ else {
29
+ unpackColorToLinear(_scratch, matcap.tint);
30
+ group = bindWgpuMatcapSurface(state, pipeline, matcap, _scratch, matcap.alphaCutoff);
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 Matcap renderer for MatcapMaterialKind on this state. Opt-in (no top-level
40
+ // side effect); call once per WgpuRenderState before drawWgpuScene3D so meshes with MatcapMaterials draw.
41
+ export function registerMatcapWgpuMaterial(state) {
42
+ registerWgpuMeshMaterialRenderer(state, MatcapMaterialKind, matcapWgpuMeshMaterialRenderer);
43
+ }
44
+ function defineKeyForMaterial(material) {
45
+ return {
46
+ alphaMaskEnabled: material !== null && material.alphaMode === 'mask',
47
+ doubleSided: material !== null && material.doubleSided,
48
+ hasMatcap: false,
49
+ };
50
+ }
51
+ const _scratch = [0, 0, 0, 0];
52
+ const WHITE = [1, 1, 1, 1];
53
+ const FALLBACK_MATERIAL = {};
54
+ //# sourceMappingURL=matcapWgpuMeshMaterialRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matcapWgpuMeshMaterialRenderer.js","sourceRoot":"","sources":["../src/matcapWgpuMeshMaterialRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAalE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AACtF,OAAO,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAElG,oGAAoG;AACpG,sGAAsG;AACtG,iGAAiG;AACjG,kGAAkG;AAClG,wGAAwG;AACxG,uGAAuG;AACvG,0BAA0B;AAC1B,MAAM,CAAC,MAAM,8BAA8B,GAA6B;IACtE,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,MAAM,GAAG,QAA2C,CAAC;QAC3D,MAAM,MAAM,GAAG,YAAY,CAAC,kBAAkB,IAAI,KAAK,CAAC,MAAM,CAAC;QAC/D,MAAM,QAAQ,GAAG,wBAAwB,CAAC,KAAK,EAAE,oBAAoB,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;QACvF,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAE9C,IAAI,KAAmB,CAAC;QACxB,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,KAAK,GAAG,qBAAqB,CAAC,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAChF,CAAC;aAAM,CAAC;YACN,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YAC3C,KAAK,GAAG,qBAAqB,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QACvF,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,0GAA0G;AAC1G,MAAM,UAAU,0BAA0B,CAAC,KAAsB;IAC/D,gCAAgC,CAAC,KAAK,EAAE,kBAAkB,EAAE,8BAA8B,CAAC,CAAC;AAC9F,CAAC;AAED,SAAS,oBAAoB,CAAC,QAAyC;IACrE,OAAO;QACL,gBAAgB,EAAE,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,SAAS,KAAK,MAAM;QACpE,WAAW,EAAE,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,WAAW;QACtD,SAAS,EAAE,KAAK;KACjB,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,EAA8B,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { WgpuMeshMaterialRenderer, WgpuRenderState } from '@flighthq/types';
2
+ export declare const normalWgpuMeshMaterialRenderer: WgpuMeshMaterialRenderer;
3
+ export declare function registerNormalWgpuMaterial(state: WgpuRenderState): void;
4
+ //# sourceMappingURL=normalWgpuMeshMaterialRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalWgpuMeshMaterialRenderer.d.ts","sourceRoot":"","sources":["../src/normalWgpuMeshMaterialRenderer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAOV,wBAAwB,EACxB,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAezB,eAAO,MAAM,8BAA8B,EAAE,wBAiC5C,CAAC;AAIF,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAEvE"}
@@ -0,0 +1,47 @@
1
+ import { getWgpuRenderStateRuntime } from '@flighthq/render-wgpu';
2
+ import { NormalMaterialKind } from '@flighthq/types';
3
+ import { bindWgpuDebugSurface, ensureWgpuDebugPipeline } from './wgpuDebugPrelude';
4
+ import { registerWgpuMeshMaterialRenderer } from './wgpuMeshMaterialRegistry';
5
+ import { beginWgpuMeshDraw, drawWgpuMeshSubset, writeWgpuFrameUniform } from './wgpuMeshPipeline';
6
+ // The built-in Normal forward renderer (WgpuMeshMaterialRenderer for NormalMaterialKind) — the WGSL
7
+ // mirror of normalGlMeshMaterialRenderer. A lighting-independent debug/utility pass material: bind
8
+ // selects the debug pipeline in normal mode for the color format, writes the shared Frame uniform
9
+ // (lights ignored), and binds the material's normalScale; draw issues the indexed draw. The fragment
10
+ // scene2d transforms the geometric normal by the normal matrix (so the visualized normal is WORLD-space)
11
+ // and encodes it as `n * 0.5 + 0.5` LINEAR color. The tangent-space normal map is NOT sampled on wgpu
12
+ // yet — hasNormalMap stays false and the shared placeholder texture is bound (mirrors the documented map
13
+ // gap on the rest of the wgpu side; see wgpuDebugPrelude). See registerNormalWgpuMaterial to install it.
14
+ export const normalWgpuMeshMaterialRenderer = {
15
+ bind(state, material, _lights, camera) {
16
+ const stateRuntime = getWgpuRenderStateRuntime(state);
17
+ const pass = stateRuntime.renderPass;
18
+ if (pass === null)
19
+ return;
20
+ const normal = material;
21
+ const format = stateRuntime.currentColorFormat ?? state.format;
22
+ // normalMap is not yet uploaded on wgpu, so the map variant is never selected — keep hasNormalMap
23
+ // false and bind the shared placeholder. This will flip to follow normal.normalMap when wgpu texture
24
+ // upload lands, matching the GL renderer's behavior.
25
+ const pipeline = ensureWgpuDebugPipeline(state, { hasNormalMap: false, mode: 'normal' }, format);
26
+ writeWgpuFrameUniform(state, camera, _lights);
27
+ let group;
28
+ if (normal === null) {
29
+ group = bindWgpuDebugSurface(state, pipeline, FALLBACK_MATERIAL, 0, 1, 1);
30
+ }
31
+ else {
32
+ group = bindWgpuDebugSurface(state, pipeline, normal, 0, 1, normal.normalScale);
33
+ }
34
+ beginWgpuMeshDraw(state, pipeline);
35
+ pass.setBindGroup(2, group);
36
+ },
37
+ draw(state, proxy, geometry) {
38
+ drawWgpuMeshSubset(state, proxy, geometry);
39
+ },
40
+ };
41
+ // Registers the built-in Normal renderer for NormalMaterialKind on this state. Opt-in (no top-level side
42
+ // effect); call once per WgpuRenderState before drawWgpuScene3D so meshes with NormalMaterials draw.
43
+ export function registerNormalWgpuMaterial(state) {
44
+ registerWgpuMeshMaterialRenderer(state, NormalMaterialKind, normalWgpuMeshMaterialRenderer);
45
+ }
46
+ const FALLBACK_MATERIAL = {};
47
+ //# sourceMappingURL=normalWgpuMeshMaterialRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalWgpuMeshMaterialRenderer.js","sourceRoot":"","sources":["../src/normalWgpuMeshMaterialRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAWlE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAElG,oGAAoG;AACpG,mGAAmG;AACnG,kGAAkG;AAClG,qGAAqG;AACrG,yGAAyG;AACzG,sGAAsG;AACtG,yGAAyG;AACzG,yGAAyG;AACzG,MAAM,CAAC,MAAM,8BAA8B,GAA6B;IACtE,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,MAAM,GAAG,QAA2C,CAAC;QAC3D,MAAM,MAAM,GAAG,YAAY,CAAC,kBAAkB,IAAI,KAAK,CAAC,MAAM,CAAC;QAC/D,kGAAkG;QAClG,qGAAqG;QACrG,qDAAqD;QACrD,MAAM,QAAQ,GAAG,uBAAuB,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,MAAM,CAAC,CAAC;QACjG,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAE9C,IAAI,KAAmB,CAAC;QACxB,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,KAAK,GAAG,oBAAoB,CAAC,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5E,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,oBAAoB,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QAClF,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,yGAAyG;AACzG,qGAAqG;AACrG,MAAM,UAAU,0BAA0B,CAAC,KAAsB;IAC/D,gCAAgC,CAAC,KAAK,EAAE,kBAAkB,EAAE,8BAA8B,CAAC,CAAC;AAC9F,CAAC;AAED,MAAM,iBAAiB,GAAG,EAA8B,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { WgpuMeshMaterialRenderer, WgpuRenderState } from '@flighthq/types';
2
+ export declare const phongWgpuMeshMaterialRenderer: WgpuMeshMaterialRenderer;
3
+ export declare function registerPhongWgpuMaterial(state: WgpuRenderState): void;
4
+ //# sourceMappingURL=phongWgpuMeshMaterialRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phongWgpuMeshMaterialRenderer.d.ts","sourceRoot":"","sources":["../src/phongWgpuMeshMaterialRenderer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAQV,wBAAwB,EACxB,eAAe,EAEhB,MAAM,iBAAiB,CAAC;AAezB,eAAO,MAAM,6BAA6B,EAAE,wBA4C3C,CAAC;AAIF,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAEtE"}
@@ -0,0 +1,63 @@
1
+ import { unpackColorToLinear } from '@flighthq/color';
2
+ import { getWgpuRenderStateRuntime } from '@flighthq/render-wgpu';
3
+ import { PhongMaterialKind } from '@flighthq/types';
4
+ import { bindWgpuClassicSurface, ensureWgpuClassicPipeline } from './wgpuClassicPrelude';
5
+ import { registerWgpuMeshMaterialRenderer } from './wgpuMeshMaterialRegistry';
6
+ import { beginWgpuMeshDraw, drawWgpuMeshSubset, isWgpuTextureReady, writeWgpuFrameUniform } from './wgpuMeshPipeline';
7
+ // The built-in classic Phong forward-lit mesh-material renderer (WgpuMeshMaterialRenderer for
8
+ // PhongMaterialKind) — the WGSL mirror of phongGlMeshMaterialRenderer. Lambert diffuse plus a
9
+ // reflection-vector specular lobe: bind selects the classic uber-shader's `phong` variant for the
10
+ // material's alpha mode + color format, writes the shared Frame uniform (camera position AND view-
11
+ // projection, since the specular term is view-dependent, plus the packed light block), binds the
12
+ // pipeline + Frame group (beginWgpuMeshDraw), then binds the material's linear diffuse + specular
13
+ // colors and shininess at group(2). draw issues the indexed draw. See registerPhongWgpuMaterial to
14
+ // install it.
15
+ export const phongWgpuMeshMaterialRenderer = {
16
+ bind(state, material, lights, camera) {
17
+ const stateRuntime = getWgpuRenderStateRuntime(state);
18
+ const pass = stateRuntime.renderPass;
19
+ if (pass === null)
20
+ return;
21
+ const phong = material;
22
+ const format = stateRuntime.currentColorFormat ?? state.format;
23
+ const pipeline = ensureWgpuClassicPipeline(state, defineKeyForMaterial(phong), format);
24
+ writeWgpuFrameUniform(state, camera, lights);
25
+ let group;
26
+ if (phong === null) {
27
+ group = bindWgpuClassicSurface(state, pipeline, FALLBACK_MATERIAL, WHITE, WHITE, 32, 0.5, null, null, null, null);
28
+ }
29
+ else {
30
+ unpackColorToLinear(_diffuse, phong.diffuse);
31
+ unpackColorToLinear(_specular, phong.specular);
32
+ group = bindWgpuClassicSurface(state, pipeline, phong, _diffuse, _specular, phong.shininess, phong.alphaCutoff, phong.diffuseMap, phong.specularMap, phong.normalMap, null);
33
+ }
34
+ beginWgpuMeshDraw(state, pipeline);
35
+ pass.setBindGroup(2, group);
36
+ },
37
+ draw(state, proxy, geometry) {
38
+ drawWgpuMeshSubset(state, proxy, geometry);
39
+ },
40
+ };
41
+ // Registers the built-in Phong renderer for PhongMaterialKind on this state. Opt-in (no top-level
42
+ // side effect); call once per WgpuRenderState before drawWgpuScene3D so meshes with PhongMaterials draw.
43
+ export function registerPhongWgpuMaterial(state) {
44
+ registerWgpuMeshMaterialRenderer(state, PhongMaterialKind, phongWgpuMeshMaterialRenderer);
45
+ }
46
+ // The feature define key for a Phong material: the fixed `phong` lighting model plus the alpha-mask +
47
+ // double-sided flags and which optional maps are present (mirrors phongGlMeshMaterialRenderer).
48
+ function defineKeyForMaterial(material) {
49
+ return {
50
+ alphaMaskEnabled: material !== null && material.alphaMode === 'mask',
51
+ doubleSided: material !== null && material.doubleSided,
52
+ hasAlphaMap: false,
53
+ hasDiffuseMap: material !== null && isWgpuTextureReady(material.diffuseMap),
54
+ hasNormalMap: material !== null && isWgpuTextureReady(material.normalMap),
55
+ hasSpecularMap: material !== null && isWgpuTextureReady(material.specularMap),
56
+ lightingModel: 'phong',
57
+ };
58
+ }
59
+ const _diffuse = [0, 0, 0, 0];
60
+ const _specular = [0, 0, 0, 0];
61
+ const WHITE = [1, 1, 1, 1];
62
+ const FALLBACK_MATERIAL = {};
63
+ //# sourceMappingURL=phongWgpuMeshMaterialRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phongWgpuMeshMaterialRenderer.js","sourceRoot":"","sources":["../src/phongWgpuMeshMaterialRenderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Scene3DLightsLike, Scene3DRenderList, WgpuRenderState, WgpuScene3DForwardLightList } from '@flighthq/types';
2
+ export declare function prepareWgpuScene3DForwardLights(state: WgpuRenderState, sceneRenderList: Readonly<Scene3DRenderList>, lights: Readonly<Scene3DLightsLike>): WgpuScene3DForwardLightList;
3
+ //# sourceMappingURL=prepareWgpuScene3DForwardLights.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prepareWgpuScene3DForwardLights.d.ts","sourceRoot":"","sources":["../src/prepareWgpuScene3DForwardLights.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAIV,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,2BAA2B,EAC5B,MAAM,iBAAiB,CAAC;AAMzB,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,eAAe,EACtB,eAAe,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EAC5C,MAAM,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAClC,2BAA2B,CAyB7B"}
@@ -0,0 +1,110 @@
1
+ import { createAabb, createBoundingSphere, setBoundingSphereFromAabb } from '@flighthq/geometry';
2
+ import { selectScene3DForwardLights } from '@flighthq/lighting';
3
+ import { getNodeWorldMatrix4 } from '@flighthq/node';
4
+ import { packScene3DLightBlock } from '@flighthq/render';
5
+ import { getNode3DWorldBounds } from '@flighthq/scene3d';
6
+ import { SCENE_LIGHT_BLOCK_FLOATS } from '@flighthq/types';
7
+ // WebGPU twin of prepareGlScene3DForwardLights: rank point and spot lights at each visible mesh's
8
+ // world-space bounding sphere, pack the nearest/contributing four of each family, and deduplicate
9
+ // identical stable index tuples so coherent meshes retain material bind runs.
10
+ export function prepareWgpuScene3DForwardLights(state, sceneRenderList, lights) {
11
+ const prepared = ensurePrepared(state);
12
+ const out = prepared.list;
13
+ prepared.blockCount = 0;
14
+ out.meshLightBlocks.length = sceneRenderList.meshCount;
15
+ out.meshCount = sceneRenderList.meshCount;
16
+ for (let meshIndex = 0; meshIndex < sceneRenderList.meshCount; meshIndex++) {
17
+ setMeshWorldBoundingSphere(sceneRenderList.visibleMeshes[meshIndex]);
18
+ selectScene3DForwardLights(prepared.selection, lights, scratchWorldSphere);
19
+ let blockIndex = findPreparedBlock(prepared, prepared.selection.indices);
20
+ if (blockIndex < 0) {
21
+ blockIndex = prepared.blockCount++;
22
+ const block = ensurePreparedBlock(prepared, blockIndex);
23
+ copyIndices(block.indices, prepared.selection.indices);
24
+ selectedLights.ambient = lights.ambient;
25
+ selectedLights.directional = lights.directional;
26
+ selectedLights.hemisphere = lights.hemisphere;
27
+ selectedLights.point = prepared.selection.point;
28
+ selectedLights.spot = prepared.selection.spot;
29
+ packScene3DLightBlock(block.lights, selectedLights);
30
+ }
31
+ out.meshLightBlocks[meshIndex] = prepared.blocks[blockIndex].lights;
32
+ }
33
+ return out;
34
+ }
35
+ function createLightBlock() {
36
+ return {
37
+ ambientCount: 0,
38
+ data: new Float32Array(SCENE_LIGHT_BLOCK_FLOATS),
39
+ directionalCount: 0,
40
+ hemisphereCount: 0,
41
+ pointCount: 0,
42
+ spotCount: 0,
43
+ version: 0,
44
+ };
45
+ }
46
+ function ensurePrepared(state) {
47
+ let prepared = preparedByState.get(state);
48
+ if (prepared === undefined) {
49
+ prepared = {
50
+ blockCount: 0,
51
+ blocks: [],
52
+ list: { meshCount: 0, meshLightBlocks: [] },
53
+ selection: { indices: [], point: [], spot: [] },
54
+ };
55
+ preparedByState.set(state, prepared);
56
+ }
57
+ return prepared;
58
+ }
59
+ function ensurePreparedBlock(prepared, index) {
60
+ let block = prepared.blocks[index];
61
+ if (block === undefined) {
62
+ block = { indices: [], lights: createLightBlock() };
63
+ prepared.blocks[index] = block;
64
+ }
65
+ return block;
66
+ }
67
+ function findPreparedBlock(prepared, indices) {
68
+ for (let blockIndex = 0; blockIndex < prepared.blockCount; blockIndex++) {
69
+ const candidate = prepared.blocks[blockIndex].indices;
70
+ if (candidate.length !== indices.length)
71
+ continue;
72
+ let equal = true;
73
+ for (let index = 0; index < indices.length; index++) {
74
+ if (candidate[index] !== indices[index]) {
75
+ equal = false;
76
+ break;
77
+ }
78
+ }
79
+ if (equal)
80
+ return blockIndex;
81
+ }
82
+ return -1;
83
+ }
84
+ function copyIndices(out, source) {
85
+ out.length = source.length;
86
+ for (let index = 0; index < source.length; index++)
87
+ out[index] = source[index];
88
+ }
89
+ function setMeshWorldBoundingSphere(mesh) {
90
+ getNode3DWorldBounds(scratchWorldBounds, mesh);
91
+ setBoundingSphereFromAabb(scratchWorldSphere, scratchWorldBounds);
92
+ if (scratchWorldSphere.radius >= 0)
93
+ return;
94
+ const world = getNodeWorldMatrix4(mesh).m;
95
+ scratchWorldSphere.center.x = world[12];
96
+ scratchWorldSphere.center.y = world[13];
97
+ scratchWorldSphere.center.z = world[14];
98
+ scratchWorldSphere.radius = 0;
99
+ }
100
+ const preparedByState = new WeakMap();
101
+ const scratchWorldBounds = createAabb();
102
+ const scratchWorldSphere = createBoundingSphere();
103
+ const selectedLights = {
104
+ ambient: null,
105
+ directional: null,
106
+ hemisphere: [],
107
+ point: [],
108
+ spot: [],
109
+ };
110
+ //# sourceMappingURL=prepareWgpuScene3DForwardLights.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prepareWgpuScene3DForwardLights.js","sourceRoot":"","sources":["../src/prepareWgpuScene3DForwardLights.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { WgpuRenderState } from '@flighthq/types';
2
+ export declare function registerStandardPbrWgpuMaterial(state: WgpuRenderState): void;
3
+ //# sourceMappingURL=registerStandardPbrWgpuMaterial.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registerStandardPbrWgpuMaterial.d.ts","sourceRoot":"","sources":["../src/registerStandardPbrWgpuMaterial.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAUvD,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAE5E"}
@@ -0,0 +1,11 @@
1
+ import { StandardPbrMaterialKind } from '@flighthq/types';
2
+ import { standardPbrWgpuMeshMaterialRenderer } from './standardPbrWgpuMeshMaterialRenderer';
3
+ import { registerWgpuMeshMaterialRenderer } from './wgpuMeshMaterialRegistry';
4
+ // Registers the built-in StandardPbr forward-lit renderer for StandardPbrMaterialKind on this state.
5
+ // Convenience over registerWgpuMeshMaterialRenderer(state, StandardPbrMaterialKind, …); call it once
6
+ // per WgpuRenderState before drawScene3D so meshes carrying StandardPbrMaterials draw. Opt-in by design
7
+ // (no top-level side effect): the render path knows no built-in material until registered.
8
+ export function registerStandardPbrWgpuMaterial(state) {
9
+ registerWgpuMeshMaterialRenderer(state, StandardPbrMaterialKind, standardPbrWgpuMeshMaterialRenderer);
10
+ }
11
+ //# sourceMappingURL=registerStandardPbrWgpuMaterial.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registerStandardPbrWgpuMaterial.js","sourceRoot":"","sources":["../src/registerStandardPbrWgpuMaterial.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,OAAO,EAAE,mCAAmC,EAAE,MAAM,uCAAuC,CAAC;AAC5F,OAAO,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAC;AAE9E,qGAAqG;AACrG,qGAAqG;AACrG,wGAAwG;AACxG,2FAA2F;AAC3F,MAAM,UAAU,+BAA+B,CAAC,KAAsB;IACpE,gCAAgC,CAAC,KAAK,EAAE,uBAAuB,EAAE,mCAAmC,CAAC,CAAC;AACxG,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { ShadedMaterial, WgpuMeshMaterialRenderer, WgpuRenderState } from '@flighthq/types';
2
+ export declare const shadedWgpuMeshMaterialRenderer: WgpuMeshMaterialRenderer;
3
+ export declare function getWgpuShadedBaseFlags(material: Readonly<ShadedMaterial>): {
4
+ alphaMaskEnabled: boolean;
5
+ doubleSided: boolean;
6
+ hasDiffuseMap: boolean;
7
+ hasNormalMap: boolean;
8
+ hasSpecularMap: boolean;
9
+ };
10
+ export declare function registerShadedWgpuMaterial(state: WgpuRenderState): void;
11
+ //# sourceMappingURL=shadedWgpuMeshMaterialRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shadedWgpuMeshMaterialRenderer.d.ts","sourceRoot":"","sources":["../src/shadedWgpuMeshMaterialRenderer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAOV,cAAc,EACd,wBAAwB,EACxB,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAUzB,eAAO,MAAM,8BAA8B,EAAE,wBAyB5C,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,CAAC,cAAc,CAAC,GAAG;IAC1E,gBAAgB,EAAE,OAAO,CAAC;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;CACzB,CAQA;AAID,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAEvE"}
@@ -0,0 +1,47 @@
1
+ import { unpackColorToLinear } from '@flighthq/color';
2
+ import { getWgpuRenderStateRuntime } from '@flighthq/render-wgpu';
3
+ import { ShadedMaterialKind } from '@flighthq/types';
4
+ import { registerWgpuMeshMaterialRenderer } from './wgpuMeshMaterialRegistry';
5
+ import { beginWgpuMeshDraw, drawWgpuMeshSubset, isWgpuTextureReady, writeWgpuFrameUniform } from './wgpuMeshPipeline';
6
+ import { bindWgpuShadedSurface, ensureWgpuShadedPipeline } from './wgpuShadedPrelude';
7
+ // The WebGPU ShadedMaterial renderer: selects one composed `shaded:` pipeline from the material's
8
+ // ordered modifier feature set, writes the shared frame/light block, then binds the base surface and
9
+ // modifier data as one group(2). Its draw half reuses the canonical mesh upload/draw path.
10
+ export const shadedWgpuMeshMaterialRenderer = {
11
+ bind(state, material, lights, camera) {
12
+ const pass = getWgpuRenderStateRuntime(state).renderPass;
13
+ if (pass === null)
14
+ return;
15
+ const shaded = material;
16
+ if (shaded === null)
17
+ return;
18
+ const format = getWgpuRenderStateRuntime(state).currentColorFormat ?? state.format;
19
+ const pipeline = ensureWgpuShadedPipeline(state, shaded, format);
20
+ writeWgpuFrameUniform(state, camera, lights);
21
+ unpackColorToLinear(_diffuse, shaded.diffuse);
22
+ unpackColorToLinear(_specular, shaded.specular);
23
+ const group = bindWgpuShadedSurface(state, pipeline, shaded, _diffuse, _specular);
24
+ beginWgpuMeshDraw(state, pipeline);
25
+ pass.setBindGroup(2, group);
26
+ },
27
+ draw(state, proxy, geometry) {
28
+ drawWgpuMeshSubset(state, proxy, geometry);
29
+ },
30
+ };
31
+ export function getWgpuShadedBaseFlags(material) {
32
+ return {
33
+ alphaMaskEnabled: material.alphaMode === 'mask',
34
+ doubleSided: material.doubleSided,
35
+ hasDiffuseMap: isWgpuTextureReady(material.diffuseMap),
36
+ hasNormalMap: isWgpuTextureReady(material.normalMap),
37
+ hasSpecularMap: isWgpuTextureReady(material.specularMap),
38
+ };
39
+ }
40
+ // Registers ShadedMaterialKind on one state. Modifier compilers are a separate open registry: call
41
+ // registerBuiltInWgpuModifierSnippets (and/or vendor registrations) explicitly before drawing.
42
+ export function registerShadedWgpuMaterial(state) {
43
+ registerWgpuMeshMaterialRenderer(state, ShadedMaterialKind, shadedWgpuMeshMaterialRenderer);
44
+ }
45
+ const _diffuse = [0, 0, 0, 0];
46
+ const _specular = [0, 0, 0, 0];
47
+ //# sourceMappingURL=shadedWgpuMeshMaterialRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shadedWgpuMeshMaterialRenderer.js","sourceRoot":"","sources":["../src/shadedWgpuMeshMaterialRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAYlE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACtH,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAEtF,kGAAkG;AAClG,qGAAqG;AACrG,2FAA2F;AAC3F,MAAM,CAAC,MAAM,8BAA8B,GAA6B;IACtE,IAAI,CACF,KAAsB,EACtB,QAAmC,EACnC,MAAmC,EACnC,MAA0B;QAE1B,MAAM,IAAI,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC;QACzD,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO;QAE1B,MAAM,MAAM,GAAG,QAA2C,CAAC;QAC3D,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO;QAC5B,MAAM,MAAM,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC,kBAAkB,IAAI,KAAK,CAAC,MAAM,CAAC;QACnF,MAAM,QAAQ,GAAG,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACjE,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7C,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9C,mBAAmB,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,qBAAqB,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAClF,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,MAAM,UAAU,sBAAsB,CAAC,QAAkC;IAOvE,OAAO;QACL,gBAAgB,EAAE,QAAQ,CAAC,SAAS,KAAK,MAAM;QAC/C,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,aAAa,EAAE,kBAAkB,CAAC,QAAQ,CAAC,UAAU,CAAC;QACtD,YAAY,EAAE,kBAAkB,CAAC,QAAQ,CAAC,SAAS,CAAC;QACpD,cAAc,EAAE,kBAAkB,CAAC,QAAQ,CAAC,WAAW,CAAC;KACzD,CAAC;AACJ,CAAC;AAED,mGAAmG;AACnG,+FAA+F;AAC/F,MAAM,UAAU,0BAA0B,CAAC,KAAsB;IAC/D,gCAAgC,CAAC,KAAK,EAAE,kBAAkB,EAAE,8BAA8B,CAAC,CAAC;AAC9F,CAAC;AAED,MAAM,QAAQ,GAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3C,MAAM,SAAS,GAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { WgpuMeshMaterialRenderer, WgpuRenderState } from '@flighthq/types';
2
+ export declare const sheenPbrWgpuMeshMaterialRenderer: WgpuMeshMaterialRenderer;
3
+ export declare function registerSheenPbrWgpuMaterial(state: WgpuRenderState): void;
4
+ //# sourceMappingURL=sheenPbrWgpuMeshMaterialRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sheenPbrWgpuMeshMaterialRenderer.d.ts","sourceRoot":"","sources":["../src/sheenPbrWgpuMeshMaterialRenderer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAQV,wBAAwB,EACxB,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAwBzB,eAAO,MAAM,gCAAgC,EAAE,wBAwC9C,CAAC;AAIF,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAEzE"}
@@ -0,0 +1,58 @@
1
+ import { unpackColorToLinear } from '@flighthq/color';
2
+ import { getWgpuRenderStateRuntime } from '@flighthq/render-wgpu';
3
+ import { SheenPbrMaterialKind } 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 Sheen (KHR_materials_sheen) forward-lit mesh-material renderer — the WGSL mirror of
9
+ // sheenPbrGlMeshMaterialRenderer. Sheen adds a retroreflective Charlie ("inverted GGX") lobe on top of
10
+ // the base specular — the soft grazing-angle glow of velvet, satin, and other cloth — tinted by
11
+ // `sheenColor` and widened by `sheenRoughness`. bind builds the standard define key from
12
+ // `material.standard` + the surface trailer, sets the SHEEN flag, selects/compiles that pipeline
13
+ // variant for the current color format, writes the shared Frame uniform, then writes the base block +
14
+ // the sheen color/roughness into the one MaterialBlock uniform and binds it at group(2). The lobe lives
15
+ // behind `const SHEEN` in the PBR uber-shader. The packed sRgb `sheenColor` is decoded to linear on the
16
+ // CPU (unpackColorToLinear), matching the linear HDR radiance output. The sheen maps are reserved by the
17
+ // descriptor but NOT sampled on wgpu yet (maps deferred). See registerSheenPbrWgpuMaterial.
18
+ export const sheenPbrWgpuMeshMaterialRenderer = {
19
+ bind(state, material, lights, camera) {
20
+ const stateRuntime = getWgpuRenderStateRuntime(state);
21
+ const pass = stateRuntime.renderPass;
22
+ if (pass === null)
23
+ return;
24
+ const sheen = material;
25
+ const standard = sheen !== null ? sheen.standard : null;
26
+ const key = buildWgpuPbrStandardDefineKey(standard, sheen);
27
+ key.sheenEnabled = 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, sheen ?? FALLBACK_MATERIAL, standard);
32
+ const out = getWgpuPbrMaterialScratch();
33
+ writeWgpuPbrStandardBlock(out, standard, sheen !== null ? sheen.alphaCutoff : 0.5);
34
+ out.fill(0, 16);
35
+ // sheen group (floats 20..23): sheenColor.rgb (linear), sheenRoughness.
36
+ if (sheen !== null) {
37
+ unpackColorToLinear(_colorScratch, sheen.sheenColor);
38
+ out[20] = _colorScratch[0];
39
+ out[21] = _colorScratch[1];
40
+ out[22] = _colorScratch[2];
41
+ out[23] = sheen.sheenRoughness;
42
+ }
43
+ writeWgpuPbrMaterialUniform(state, binding);
44
+ beginWgpuMeshDraw(state, pipeline);
45
+ pass.setBindGroup(2, binding.bindGroup);
46
+ },
47
+ draw(state, proxy, geometry) {
48
+ drawWgpuMeshSubset(state, proxy, geometry);
49
+ },
50
+ };
51
+ // Installs the built-in Sheen renderer for SheenPbrMaterialKind on this state. Opt-in (no top-level
52
+ // side effect): drawScene3D only draws Sheen subsets once this is called.
53
+ export function registerSheenPbrWgpuMaterial(state) {
54
+ registerWgpuMeshMaterialRenderer(state, SheenPbrMaterialKind, sheenPbrWgpuMeshMaterialRenderer);
55
+ }
56
+ const FALLBACK_MATERIAL = {};
57
+ const _colorScratch = [0, 0, 0, 0];
58
+ //# sourceMappingURL=sheenPbrWgpuMeshMaterialRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sheenPbrWgpuMeshMaterialRenderer.js","sourceRoot":"","sources":["../src/sheenPbrWgpuMeshMaterialRenderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { WgpuMeshMaterialRenderer, WgpuRenderState } from '@flighthq/types';
2
+ export declare const specularGlossinessPbrWgpuMeshMaterialRenderer: WgpuMeshMaterialRenderer;
3
+ export declare function registerSpecularGlossinessPbrWgpuMaterial(state: WgpuRenderState): void;
4
+ //# sourceMappingURL=specularGlossinessPbrWgpuMeshMaterialRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"specularGlossinessPbrWgpuMeshMaterialRenderer.d.ts","sourceRoot":"","sources":["../src/specularGlossinessPbrWgpuMeshMaterialRenderer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EASV,wBAAwB,EACxB,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAsCzB,eAAO,MAAM,6CAA6C,EAAE,wBA+B3D,CAAC;AAKF,wBAAgB,yCAAyC,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAMtF"}