@flighthq/scene3d-gl 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 (284) hide show
  1. package/dist/anisotropyPbrGlMeshMaterialRenderer.d.ts +4 -0
  2. package/dist/anisotropyPbrGlMeshMaterialRenderer.d.ts.map +1 -0
  3. package/dist/anisotropyPbrGlMeshMaterialRenderer.js +45 -0
  4. package/dist/anisotropyPbrGlMeshMaterialRenderer.js.map +1 -0
  5. package/dist/blinnPhongGlMeshMaterialRenderer.d.ts +4 -0
  6. package/dist/blinnPhongGlMeshMaterialRenderer.d.ts.map +1 -0
  7. package/dist/blinnPhongGlMeshMaterialRenderer.js +102 -0
  8. package/dist/blinnPhongGlMeshMaterialRenderer.js.map +1 -0
  9. package/dist/clearcoatPbrGlMeshMaterialRenderer.d.ts +4 -0
  10. package/dist/clearcoatPbrGlMeshMaterialRenderer.d.ts.map +1 -0
  11. package/dist/clearcoatPbrGlMeshMaterialRenderer.js +45 -0
  12. package/dist/clearcoatPbrGlMeshMaterialRenderer.js.map +1 -0
  13. package/dist/customShaderGlMeshMaterialRenderer.d.ts +6 -0
  14. package/dist/customShaderGlMeshMaterialRenderer.d.ts.map +1 -0
  15. package/dist/customShaderGlMeshMaterialRenderer.js +136 -0
  16. package/dist/customShaderGlMeshMaterialRenderer.js.map +1 -0
  17. package/dist/depthGlMeshMaterialRenderer.d.ts +4 -0
  18. package/dist/depthGlMeshMaterialRenderer.d.ts.map +1 -0
  19. package/dist/depthGlMeshMaterialRenderer.js +36 -0
  20. package/dist/depthGlMeshMaterialRenderer.js.map +1 -0
  21. package/dist/drawGlScene3D.d.ts +3 -0
  22. package/dist/drawGlScene3D.d.ts.map +1 -0
  23. package/dist/drawGlScene3D.js +251 -0
  24. package/dist/drawGlScene3D.js.map +1 -0
  25. package/dist/emissiveGlMeshMaterialRenderer.d.ts +4 -0
  26. package/dist/emissiveGlMeshMaterialRenderer.d.ts.map +1 -0
  27. package/dist/emissiveGlMeshMaterialRenderer.js +49 -0
  28. package/dist/emissiveGlMeshMaterialRenderer.js.map +1 -0
  29. package/dist/enableGlScene3DColorSpaceGuards.d.ts +4 -0
  30. package/dist/enableGlScene3DColorSpaceGuards.d.ts.map +1 -0
  31. package/dist/enableGlScene3DColorSpaceGuards.js +22 -0
  32. package/dist/enableGlScene3DColorSpaceGuards.js.map +1 -0
  33. package/dist/enableGlScene3DCustomShaderGuards.d.ts +4 -0
  34. package/dist/enableGlScene3DCustomShaderGuards.d.ts.map +1 -0
  35. package/dist/enableGlScene3DCustomShaderGuards.js +71 -0
  36. package/dist/enableGlScene3DCustomShaderGuards.js.map +1 -0
  37. package/dist/enableGlScene3DDeformGuards.d.ts +4 -0
  38. package/dist/enableGlScene3DDeformGuards.d.ts.map +1 -0
  39. package/dist/enableGlScene3DDeformGuards.js +42 -0
  40. package/dist/enableGlScene3DDeformGuards.js.map +1 -0
  41. package/dist/enableGlScene3DForwardLightSelectionGuards.d.ts +4 -0
  42. package/dist/enableGlScene3DForwardLightSelectionGuards.d.ts.map +1 -0
  43. package/dist/enableGlScene3DForwardLightSelectionGuards.js +21 -0
  44. package/dist/enableGlScene3DForwardLightSelectionGuards.js.map +1 -0
  45. package/dist/explainGlScene3DForwardLightSelection.d.ts +3 -0
  46. package/dist/explainGlScene3DForwardLightSelection.d.ts.map +1 -0
  47. package/dist/explainGlScene3DForwardLightSelection.js +19 -0
  48. package/dist/explainGlScene3DForwardLightSelection.js.map +1 -0
  49. package/dist/glClassicPrelude.d.ts +9 -0
  50. package/dist/glClassicPrelude.d.ts.map +1 -0
  51. package/dist/glClassicPrelude.js +288 -0
  52. package/dist/glClassicPrelude.js.map +1 -0
  53. package/dist/glDebugPrelude.d.ts +9 -0
  54. package/dist/glDebugPrelude.d.ts.map +1 -0
  55. package/dist/glDebugPrelude.js +143 -0
  56. package/dist/glDebugPrelude.js.map +1 -0
  57. package/dist/glEnvironmentCube.d.ts +5 -0
  58. package/dist/glEnvironmentCube.d.ts.map +1 -0
  59. package/dist/glEnvironmentCube.js +65 -0
  60. package/dist/glEnvironmentCube.js.map +1 -0
  61. package/dist/glEnvironmentIblBake.d.ts +4 -0
  62. package/dist/glEnvironmentIblBake.d.ts.map +1 -0
  63. package/dist/glEnvironmentIblBake.js +365 -0
  64. package/dist/glEnvironmentIblBake.js.map +1 -0
  65. package/dist/glEnvironmentSkybox.d.ts +3 -0
  66. package/dist/glEnvironmentSkybox.d.ts.map +1 -0
  67. package/dist/glEnvironmentSkybox.js +95 -0
  68. package/dist/glEnvironmentSkybox.js.map +1 -0
  69. package/dist/glLitProgram.d.ts +5 -0
  70. package/dist/glLitProgram.d.ts.map +1 -0
  71. package/dist/glLitProgram.js +211 -0
  72. package/dist/glLitProgram.js.map +1 -0
  73. package/dist/glMatcapPrelude.d.ts +8 -0
  74. package/dist/glMatcapPrelude.d.ts.map +1 -0
  75. package/dist/glMatcapPrelude.js +118 -0
  76. package/dist/glMatcapPrelude.js.map +1 -0
  77. package/dist/glMeshMaterialRegistry.d.ts +5 -0
  78. package/dist/glMeshMaterialRegistry.d.ts.map +1 -0
  79. package/dist/glMeshMaterialRegistry.js +29 -0
  80. package/dist/glMeshMaterialRegistry.js.map +1 -0
  81. package/dist/glMeshProgram.d.ts +14 -0
  82. package/dist/glMeshProgram.d.ts.map +1 -0
  83. package/dist/glMeshProgram.js +193 -0
  84. package/dist/glMeshProgram.js.map +1 -0
  85. package/dist/glMeshUpload.d.ts +4 -0
  86. package/dist/glMeshUpload.d.ts.map +1 -0
  87. package/dist/glMeshUpload.js +190 -0
  88. package/dist/glMeshUpload.js.map +1 -0
  89. package/dist/glParticleEmitter3D.d.ts +4 -0
  90. package/dist/glParticleEmitter3D.d.ts.map +1 -0
  91. package/dist/glParticleEmitter3D.js +342 -0
  92. package/dist/glParticleEmitter3D.js.map +1 -0
  93. package/dist/glPbrPrelude.d.ts +8 -0
  94. package/dist/glPbrPrelude.d.ts.map +1 -0
  95. package/dist/glPbrPrelude.js +569 -0
  96. package/dist/glPbrPrelude.js.map +1 -0
  97. package/dist/glPbrProgramCache.d.ts +4 -0
  98. package/dist/glPbrProgramCache.d.ts.map +1 -0
  99. package/dist/glPbrProgramCache.js +63 -0
  100. package/dist/glPbrProgramCache.js.map +1 -0
  101. package/dist/glPbrStandardBlock.d.ts +13 -0
  102. package/dist/glPbrStandardBlock.d.ts.map +1 -0
  103. package/dist/glPbrStandardBlock.js +107 -0
  104. package/dist/glPbrStandardBlock.js.map +1 -0
  105. package/dist/glScene3DRuntime.d.ts +5 -0
  106. package/dist/glScene3DRuntime.d.ts.map +1 -0
  107. package/dist/glScene3DRuntime.js +99 -0
  108. package/dist/glScene3DRuntime.js.map +1 -0
  109. package/dist/glScene3DTestHelper.d.ts +20 -0
  110. package/dist/glScene3DTestHelper.d.ts.map +1 -0
  111. package/dist/glScene3DTestHelper.js +178 -0
  112. package/dist/glScene3DTestHelper.js.map +1 -0
  113. package/dist/glScene3DTime.d.ts +4 -0
  114. package/dist/glScene3DTime.d.ts.map +1 -0
  115. package/dist/glScene3DTime.js +18 -0
  116. package/dist/glScene3DTime.js.map +1 -0
  117. package/dist/glShadedBuiltInModifiers.d.ts +11 -0
  118. package/dist/glShadedBuiltInModifiers.d.ts.map +1 -0
  119. package/dist/glShadedBuiltInModifiers.js +386 -0
  120. package/dist/glShadedBuiltInModifiers.js.map +1 -0
  121. package/dist/glShadedModifierSnippet.d.ts +4 -0
  122. package/dist/glShadedModifierSnippet.d.ts.map +1 -0
  123. package/dist/glShadedModifierSnippet.js +24 -0
  124. package/dist/glShadedModifierSnippet.js.map +1 -0
  125. package/dist/glShadedPrelude.d.ts +5 -0
  126. package/dist/glShadedPrelude.d.ts.map +1 -0
  127. package/dist/glShadedPrelude.js +393 -0
  128. package/dist/glShadedPrelude.js.map +1 -0
  129. package/dist/glShadowMap.d.ts +3 -0
  130. package/dist/glShadowMap.d.ts.map +1 -0
  131. package/dist/glShadowMap.js +150 -0
  132. package/dist/glShadowMap.js.map +1 -0
  133. package/dist/glToonPrelude.d.ts +7 -0
  134. package/dist/glToonPrelude.d.ts.map +1 -0
  135. package/dist/glToonPrelude.js +172 -0
  136. package/dist/glToonPrelude.js.map +1 -0
  137. package/dist/glUnlitPrelude.d.ts +9 -0
  138. package/dist/glUnlitPrelude.d.ts.map +1 -0
  139. package/dist/glUnlitPrelude.js +160 -0
  140. package/dist/glUnlitPrelude.js.map +1 -0
  141. package/dist/glWireframePrelude.d.ts +6 -0
  142. package/dist/glWireframePrelude.d.ts.map +1 -0
  143. package/dist/glWireframePrelude.js +56 -0
  144. package/dist/glWireframePrelude.js.map +1 -0
  145. package/dist/glWireframeUpload.d.ts +4 -0
  146. package/dist/glWireframeUpload.d.ts.map +1 -0
  147. package/dist/glWireframeUpload.js +85 -0
  148. package/dist/glWireframeUpload.js.map +1 -0
  149. package/dist/index.d.ts +56 -0
  150. package/dist/index.d.ts.map +1 -0
  151. package/dist/index.js +56 -0
  152. package/dist/index.js.map +1 -0
  153. package/dist/iridescencePbrGlMeshMaterialRenderer.d.ts +4 -0
  154. package/dist/iridescencePbrGlMeshMaterialRenderer.d.ts.map +1 -0
  155. package/dist/iridescencePbrGlMeshMaterialRenderer.js +54 -0
  156. package/dist/iridescencePbrGlMeshMaterialRenderer.js.map +1 -0
  157. package/dist/lambertGlMeshMaterialRenderer.d.ts +4 -0
  158. package/dist/lambertGlMeshMaterialRenderer.d.ts.map +1 -0
  159. package/dist/lambertGlMeshMaterialRenderer.js +70 -0
  160. package/dist/lambertGlMeshMaterialRenderer.js.map +1 -0
  161. package/dist/matcapGlMeshMaterialRenderer.d.ts +4 -0
  162. package/dist/matcapGlMeshMaterialRenderer.d.ts.map +1 -0
  163. package/dist/matcapGlMeshMaterialRenderer.js +49 -0
  164. package/dist/matcapGlMeshMaterialRenderer.js.map +1 -0
  165. package/dist/normalGlMeshMaterialRenderer.d.ts +4 -0
  166. package/dist/normalGlMeshMaterialRenderer.d.ts.map +1 -0
  167. package/dist/normalGlMeshMaterialRenderer.js +39 -0
  168. package/dist/normalGlMeshMaterialRenderer.js.map +1 -0
  169. package/dist/phongGlMeshMaterialRenderer.d.ts +4 -0
  170. package/dist/phongGlMeshMaterialRenderer.d.ts.map +1 -0
  171. package/dist/phongGlMeshMaterialRenderer.js +90 -0
  172. package/dist/phongGlMeshMaterialRenderer.js.map +1 -0
  173. package/dist/prepareGlScene3DForwardLights.d.ts +3 -0
  174. package/dist/prepareGlScene3DForwardLights.d.ts.map +1 -0
  175. package/dist/prepareGlScene3DForwardLights.js +117 -0
  176. package/dist/prepareGlScene3DForwardLights.js.map +1 -0
  177. package/dist/presentGlScene3D.d.ts +3 -0
  178. package/dist/presentGlScene3D.d.ts.map +1 -0
  179. package/dist/presentGlScene3D.js +21 -0
  180. package/dist/presentGlScene3D.js.map +1 -0
  181. package/dist/registerStandardPbrGlMaterial.d.ts +3 -0
  182. package/dist/registerStandardPbrGlMaterial.d.ts.map +1 -0
  183. package/dist/registerStandardPbrGlMaterial.js +11 -0
  184. package/dist/registerStandardPbrGlMaterial.js.map +1 -0
  185. package/dist/shadedGlMeshMaterialRenderer.d.ts +4 -0
  186. package/dist/shadedGlMeshMaterialRenderer.d.ts.map +1 -0
  187. package/dist/shadedGlMeshMaterialRenderer.js +135 -0
  188. package/dist/shadedGlMeshMaterialRenderer.js.map +1 -0
  189. package/dist/sheenPbrGlMeshMaterialRenderer.d.ts +4 -0
  190. package/dist/sheenPbrGlMeshMaterialRenderer.d.ts.map +1 -0
  191. package/dist/sheenPbrGlMeshMaterialRenderer.js +54 -0
  192. package/dist/sheenPbrGlMeshMaterialRenderer.js.map +1 -0
  193. package/dist/specularGlossinessPbrGlMeshMaterialRenderer.d.ts +4 -0
  194. package/dist/specularGlossinessPbrGlMeshMaterialRenderer.d.ts.map +1 -0
  195. package/dist/specularGlossinessPbrGlMeshMaterialRenderer.js +121 -0
  196. package/dist/specularGlossinessPbrGlMeshMaterialRenderer.js.map +1 -0
  197. package/dist/specularPbrGlMeshMaterialRenderer.d.ts +4 -0
  198. package/dist/specularPbrGlMeshMaterialRenderer.d.ts.map +1 -0
  199. package/dist/specularPbrGlMeshMaterialRenderer.js +55 -0
  200. package/dist/specularPbrGlMeshMaterialRenderer.js.map +1 -0
  201. package/dist/standardPbrGlMeshMaterialRenderer.d.ts +3 -0
  202. package/dist/standardPbrGlMeshMaterialRenderer.d.ts.map +1 -0
  203. package/dist/standardPbrGlMeshMaterialRenderer.js +35 -0
  204. package/dist/standardPbrGlMeshMaterialRenderer.js.map +1 -0
  205. package/dist/subsurfacePbrGlMeshMaterialRenderer.d.ts +4 -0
  206. package/dist/subsurfacePbrGlMeshMaterialRenderer.d.ts.map +1 -0
  207. package/dist/subsurfacePbrGlMeshMaterialRenderer.js +57 -0
  208. package/dist/subsurfacePbrGlMeshMaterialRenderer.js.map +1 -0
  209. package/dist/toonGlMeshMaterialRenderer.d.ts +4 -0
  210. package/dist/toonGlMeshMaterialRenderer.d.ts.map +1 -0
  211. package/dist/toonGlMeshMaterialRenderer.js +81 -0
  212. package/dist/toonGlMeshMaterialRenderer.js.map +1 -0
  213. package/dist/transmissionVolumePbrGlMeshMaterialRenderer.d.ts +4 -0
  214. package/dist/transmissionVolumePbrGlMeshMaterialRenderer.d.ts.map +1 -0
  215. package/dist/transmissionVolumePbrGlMeshMaterialRenderer.js +62 -0
  216. package/dist/transmissionVolumePbrGlMeshMaterialRenderer.js.map +1 -0
  217. package/dist/unlitGlMeshMaterialRenderer.d.ts +4 -0
  218. package/dist/unlitGlMeshMaterialRenderer.d.ts.map +1 -0
  219. package/dist/unlitGlMeshMaterialRenderer.js +61 -0
  220. package/dist/unlitGlMeshMaterialRenderer.js.map +1 -0
  221. package/dist/vertexColorGlMeshMaterialRenderer.d.ts +4 -0
  222. package/dist/vertexColorGlMeshMaterialRenderer.d.ts.map +1 -0
  223. package/dist/vertexColorGlMeshMaterialRenderer.js +54 -0
  224. package/dist/vertexColorGlMeshMaterialRenderer.js.map +1 -0
  225. package/dist/wireframeGlMeshMaterialRenderer.d.ts +4 -0
  226. package/dist/wireframeGlMeshMaterialRenderer.d.ts.map +1 -0
  227. package/dist/wireframeGlMeshMaterialRenderer.js +50 -0
  228. package/dist/wireframeGlMeshMaterialRenderer.js.map +1 -0
  229. package/package.json +58 -0
  230. package/src/anisotropyPbrGlMeshMaterialRenderer.test.ts +86 -0
  231. package/src/blinnPhongGlMeshMaterialRenderer.test.ts +94 -0
  232. package/src/clearcoatPbrGlMeshMaterialRenderer.test.ts +81 -0
  233. package/src/customShaderGlMeshMaterialRenderer.test.ts +169 -0
  234. package/src/depthGlMeshMaterialRenderer.test.ts +69 -0
  235. package/src/drawGlScene3D.test.ts +304 -0
  236. package/src/emissiveGlMeshMaterialRenderer.test.ts +60 -0
  237. package/src/enableGlScene3DColorSpaceGuards.test.ts +63 -0
  238. package/src/enableGlScene3DCustomShaderGuards.test.ts +85 -0
  239. package/src/enableGlScene3DDeformGuards.test.ts +98 -0
  240. package/src/enableGlScene3DForwardLightSelectionGuards.test.ts +84 -0
  241. package/src/explainGlScene3DForwardLightSelection.test.ts +32 -0
  242. package/src/glClassicPrelude.test.ts +214 -0
  243. package/src/glDebugPrelude.test.ts +94 -0
  244. package/src/glEnvironmentCube.test.ts +71 -0
  245. package/src/glEnvironmentIblBake.test.ts +31 -0
  246. package/src/glEnvironmentSkybox.test.ts +24 -0
  247. package/src/glLitProgram.test.ts +181 -0
  248. package/src/glMatcapPrelude.test.ts +74 -0
  249. package/src/glMeshMaterialRegistry.test.ts +52 -0
  250. package/src/glMeshProgram.test.ts +406 -0
  251. package/src/glMeshUpload.test.ts +311 -0
  252. package/src/glParticleEmitter3D.test.ts +280 -0
  253. package/src/glPbrPrelude.test.ts +178 -0
  254. package/src/glPbrProgramCache.test.ts +116 -0
  255. package/src/glPbrStandardBlock.test.ts +85 -0
  256. package/src/glScene3DRuntime.test.ts +108 -0
  257. package/src/glScene3DTime.test.ts +31 -0
  258. package/src/glShadedBuiltInModifiers.test.ts +377 -0
  259. package/src/glShadedModifierSnippet.test.ts +46 -0
  260. package/src/glShadedPrelude.test.ts +177 -0
  261. package/src/glShadowMap.test.ts +219 -0
  262. package/src/glToonPrelude.test.ts +118 -0
  263. package/src/glUnlitPrelude.test.ts +156 -0
  264. package/src/glWireframePrelude.test.ts +46 -0
  265. package/src/glWireframeUpload.test.ts +50 -0
  266. package/src/iridescencePbrGlMeshMaterialRenderer.test.ts +86 -0
  267. package/src/lambertGlMeshMaterialRenderer.test.ts +92 -0
  268. package/src/matcapGlMeshMaterialRenderer.test.ts +70 -0
  269. package/src/normalGlMeshMaterialRenderer.test.ts +69 -0
  270. package/src/phongGlMeshMaterialRenderer.test.ts +94 -0
  271. package/src/prepareGlScene3DForwardLights.test.ts +106 -0
  272. package/src/presentGlScene3D.test.ts +98 -0
  273. package/src/registerStandardPbrGlMaterial.test.ts +14 -0
  274. package/src/shadedGlMeshMaterialRenderer.test.ts +106 -0
  275. package/src/sheenPbrGlMeshMaterialRenderer.test.ts +83 -0
  276. package/src/specularGlossinessPbrGlMeshMaterialRenderer.test.ts +96 -0
  277. package/src/specularPbrGlMeshMaterialRenderer.test.ts +83 -0
  278. package/src/standardPbrGlMeshMaterialRenderer.test.ts +88 -0
  279. package/src/subsurfacePbrGlMeshMaterialRenderer.test.ts +86 -0
  280. package/src/toonGlMeshMaterialRenderer.test.ts +92 -0
  281. package/src/transmissionVolumePbrGlMeshMaterialRenderer.test.ts +93 -0
  282. package/src/unlitGlMeshMaterialRenderer.test.ts +88 -0
  283. package/src/vertexColorGlMeshMaterialRenderer.test.ts +60 -0
  284. package/src/wireframeGlMeshMaterialRenderer.test.ts +69 -0
@@ -0,0 +1,386 @@
1
+ import { unpackColorToLinear } from '@flighthq/color';
2
+ import { hasImageResourcePixels } from '@flighthq/image';
3
+ import { bindGlImageResourceTexture } from '@flighthq/render-gl';
4
+ import { animatedNormalModifierDefinition, dissolveModifierDefinition, emissiveModifierDefinition, envReflectModifierDefinition, fogModifierDefinition, rimModifierDefinition, toonModifierDefinition, vertexDisplaceModifierDefinition, } from '@flighthq/shading';
5
+ import { EmissiveModifierFacing, FogModifierMode, VertexDisplaceModifierSource } from '@flighthq/types';
6
+ import { registerGlModifierSnippet } from './glShadedModifierSnippet';
7
+ // The built-in GL modifier snippets — the backend halves of @flighthq/shading's eight built-in
8
+ // modifier descriptors, across all six slots: VertexDisplace (Vertex), AnimatedNormal (Normal),
9
+ // Emissive (Emissive), and Rim/EnvReflect/Fog/Dissolve/Toon (Effect). Each SPREADS the
10
+ // substrate-agnostic definition (kind/slot/getDefineSignature owned by @flighthq/shading) and adds
11
+ // GLSL (declarations + a slot-hook contribution, names suffixed by the modifier's stack index so
12
+ // repeated kinds never collide) plus a per-draw uniform upload. Reusing the framework definition —
13
+ // rather than re-deriving the signature here — guarantees the program keyed by a stack's define-key
14
+ // always matches the GLSL assembled for it: Emissive `m`/`g`, AnimatedNormal `0`/`1`/`2`, Fog
15
+ // `l`/`e`/`x`, Dissolve ``/`m`, VertexDisplace `s`/`h`(+`a`), Rim/EnvReflect/Toon none.
16
+ // A UV-panned normal map perturbing the shading normal, scrolled by u_time. Signature `0` (no map,
17
+ // no GLSL), `1` single-layer, `2` dual-layer.
18
+ export const animatedNormalGlModifierSnippet = {
19
+ ...animatedNormalModifierDefinition,
20
+ bind(modifier, context) {
21
+ const animated = modifier;
22
+ if (animated.map === null)
23
+ return;
24
+ const gl = context.state.gl;
25
+ const suffix = `_${context.index}`;
26
+ bindGlModifierTexture(context, animated.map, `u_animNormalMap${suffix}`);
27
+ const scroll = animated.scroll;
28
+ gl.uniform2f(gl.getUniformLocation(context.program, `u_animNormalScroll${suffix}`), scroll.x, scroll.y);
29
+ gl.uniform1f(gl.getUniformLocation(context.program, `u_animNormalStrength${suffix}`), animated.strength ?? 1);
30
+ if (animated.secondaryMap !== undefined) {
31
+ bindGlModifierTexture(context, animated.secondaryMap, `u_animNormalMap2${suffix}`);
32
+ const secondary = animated.secondaryScroll ?? scroll;
33
+ gl.uniform2f(gl.getUniformLocation(context.program, `u_animNormalScroll2${suffix}`), secondary.x, secondary.y);
34
+ }
35
+ },
36
+ contribution(modifier, index) {
37
+ const animated = modifier;
38
+ if (animated.map === null)
39
+ return '';
40
+ const suffix = `_${index}`;
41
+ const dual = animated.secondaryMap !== undefined
42
+ ? ` animNormal += texture(u_animNormalMap2${suffix}, v_uv0 + u_animNormalScroll2${suffix} * u_time).xyz * 2.0 - 1.0;\n`
43
+ : '';
44
+ return (`{\n` +
45
+ ` vec3 animNormal = texture(u_animNormalMap${suffix}, v_uv0 + u_animNormalScroll${suffix} * u_time).xyz * 2.0 - 1.0;\n` +
46
+ dual +
47
+ ` animNormal.xy *= u_animNormalStrength${suffix};\n` +
48
+ ` normal = normalize(tbn * animNormal);\n` +
49
+ `}`);
50
+ },
51
+ declarations(modifier, index) {
52
+ const animated = modifier;
53
+ if (animated.map === null)
54
+ return '';
55
+ const suffix = `_${index}`;
56
+ let source = `uniform sampler2D u_animNormalMap${suffix};\n` +
57
+ `uniform vec2 u_animNormalScroll${suffix};\n` +
58
+ `uniform float u_animNormalStrength${suffix};\n`;
59
+ if (animated.secondaryMap !== undefined) {
60
+ source += `uniform sampler2D u_animNormalMap2${suffix};\nuniform vec2 u_animNormalScroll2${suffix};\n`;
61
+ }
62
+ return source;
63
+ },
64
+ };
65
+ // A self-illuminating contribution added to the shaded radiance, optionally masked and optionally
66
+ // gated by surface facing (the night-side city-lights case). Signature `m` (masked), `g` (facing
67
+ // gate), combined `mg`.
68
+ export const emissiveGlModifierSnippet = {
69
+ ...emissiveModifierDefinition,
70
+ bind(modifier, context) {
71
+ const emissive = modifier;
72
+ const gl = context.state.gl;
73
+ const suffix = `_${context.index}`;
74
+ unpackColorToLinear(scratchRgba, emissive.color);
75
+ gl.uniform3f(gl.getUniformLocation(context.program, `u_emissiveColor${suffix}`), scratchRgba[0], scratchRgba[1], scratchRgba[2]);
76
+ gl.uniform1f(gl.getUniformLocation(context.program, `u_emissiveStrength${suffix}`), emissive.strength);
77
+ if (emissive.mask !== undefined)
78
+ bindGlModifierTexture(context, emissive.mask, `u_emissiveMask${suffix}`);
79
+ if (isEmissiveGated(emissive)) {
80
+ const sign = emissive.facing === EmissiveModifierFacing.AwayFromLight ? -1 : 1;
81
+ gl.uniform1f(gl.getUniformLocation(context.program, `u_emissiveFacingSign${suffix}`), sign);
82
+ gl.uniform1f(gl.getUniformLocation(context.program, `u_emissiveFacingSoftness${suffix}`), emissive.facingSoftness ?? 0);
83
+ }
84
+ },
85
+ contribution(modifier, index) {
86
+ const emissive = modifier;
87
+ const suffix = `_${index}`;
88
+ let body = `{\n` + ` vec3 emissiveTerm = u_emissiveColor${suffix} * u_emissiveStrength${suffix};\n`;
89
+ if (emissive.mask !== undefined)
90
+ body += ` emissiveTerm *= texture(u_emissiveMask${suffix}, v_uv0).rgb;\n`;
91
+ if (isEmissiveGated(emissive)) {
92
+ body +=
93
+ ` vec3 emissiveLightDir = u_directionalCount > 0.5 ? normalize(-u_directional.xyz) : vec3(0.0, 0.0, 1.0);\n` +
94
+ ` float emissiveFacing = dot(normal, emissiveLightDir) * u_emissiveFacingSign${suffix};\n` +
95
+ ` float emissiveSoft = max(u_emissiveFacingSoftness${suffix}, 1e-4);\n` +
96
+ ` emissiveTerm *= smoothstep(-emissiveSoft, emissiveSoft, emissiveFacing);\n`;
97
+ }
98
+ body += ` emissive += emissiveTerm;\n}`;
99
+ return body;
100
+ },
101
+ declarations(modifier, index) {
102
+ const emissive = modifier;
103
+ const suffix = `_${index}`;
104
+ let source = `uniform vec3 u_emissiveColor${suffix};\nuniform float u_emissiveStrength${suffix};\n`;
105
+ if (emissive.mask !== undefined)
106
+ source += `uniform sampler2D u_emissiveMask${suffix};\n`;
107
+ if (isEmissiveGated(emissive)) {
108
+ source += `uniform float u_emissiveFacingSign${suffix};\nuniform float u_emissiveFacingSoftness${suffix};\n`;
109
+ }
110
+ return source;
111
+ },
112
+ };
113
+ // A view-dependent Fresnel rim added to the shaded radiance at grazing angles. One program shape (no
114
+ // signature — power/intensity/bias are uniforms).
115
+ export const rimGlModifierSnippet = {
116
+ ...rimModifierDefinition,
117
+ bind(modifier, context) {
118
+ const rim = modifier;
119
+ const gl = context.state.gl;
120
+ const suffix = `_${context.index}`;
121
+ unpackColorToLinear(scratchRgba, rim.color);
122
+ gl.uniform3f(gl.getUniformLocation(context.program, `u_rimColor${suffix}`), scratchRgba[0], scratchRgba[1], scratchRgba[2]);
123
+ gl.uniform1f(gl.getUniformLocation(context.program, `u_rimPower${suffix}`), rim.power ?? 3);
124
+ gl.uniform1f(gl.getUniformLocation(context.program, `u_rimIntensity${suffix}`), rim.intensity ?? 1);
125
+ gl.uniform1f(gl.getUniformLocation(context.program, `u_rimBias${suffix}`), rim.bias ?? 0);
126
+ },
127
+ contribution(_modifier, index) {
128
+ const suffix = `_${index}`;
129
+ return (`{\n` +
130
+ ` float rim = clamp(u_rimBias${suffix} + u_rimIntensity${suffix} * pow(1.0 - max(dot(normal, viewDir), 0.0), max(u_rimPower${suffix}, 0.0001)), 0.0, 1.0);\n` +
131
+ ` radiance += u_rimColor${suffix} * rim;\n` +
132
+ `}`);
133
+ },
134
+ declarations(_modifier, index) {
135
+ const suffix = `_${index}`;
136
+ return (`uniform vec3 u_rimColor${suffix};\n` +
137
+ `uniform float u_rimPower${suffix};\n` +
138
+ `uniform float u_rimIntensity${suffix};\n` +
139
+ `uniform float u_rimBias${suffix};\n`);
140
+ },
141
+ };
142
+ // A clip/burn dissolve of the shaded output, discarding fragments below a noise threshold and tinting
143
+ // the burn edge. Signature `` (procedural value noise over v_uv0) or `m` (sampled from a noise map).
144
+ export const dissolveGlModifierSnippet = {
145
+ ...dissolveModifierDefinition,
146
+ bind(modifier, context) {
147
+ const dissolve = modifier;
148
+ const gl = context.state.gl;
149
+ const suffix = `_${context.index}`;
150
+ gl.uniform1f(gl.getUniformLocation(context.program, `u_dissolveThreshold${suffix}`), dissolve.threshold);
151
+ gl.uniform1f(gl.getUniformLocation(context.program, `u_dissolveEdgeWidth${suffix}`), dissolve.edgeWidth ?? 0.05);
152
+ unpackColorToLinear(scratchRgba, dissolve.edgeColor);
153
+ gl.uniform3f(gl.getUniformLocation(context.program, `u_dissolveEdgeColor${suffix}`), scratchRgba[0], scratchRgba[1], scratchRgba[2]);
154
+ if (dissolve.map !== undefined)
155
+ bindGlModifierTexture(context, dissolve.map, `u_dissolveMap${suffix}`);
156
+ else
157
+ gl.uniform1f(gl.getUniformLocation(context.program, `u_dissolveScale${suffix}`), dissolve.scale ?? 8);
158
+ },
159
+ contribution(modifier, index) {
160
+ const dissolve = modifier;
161
+ const suffix = `_${index}`;
162
+ const noise = dissolve.map !== undefined
163
+ ? ` float dissolveNoise = texture(u_dissolveMap${suffix}, v_uv0).r;\n`
164
+ : ` float dissolveNoise = shadedValueNoise(v_uv0 * u_dissolveScale${suffix});\n`;
165
+ return (`{\n` +
166
+ noise +
167
+ ` if (dissolveNoise < u_dissolveThreshold${suffix}) discard;\n` +
168
+ ` float dissolveEdge = 1.0 - smoothstep(u_dissolveThreshold${suffix}, u_dissolveThreshold${suffix} + max(u_dissolveEdgeWidth${suffix}, 1e-4), dissolveNoise);\n` +
169
+ ` radiance = mix(radiance, u_dissolveEdgeColor${suffix}, dissolveEdge);\n` +
170
+ `}`);
171
+ },
172
+ declarations(modifier, index) {
173
+ const dissolve = modifier;
174
+ const suffix = `_${index}`;
175
+ let source = `uniform float u_dissolveThreshold${suffix};\n` +
176
+ `uniform float u_dissolveEdgeWidth${suffix};\n` +
177
+ `uniform vec3 u_dissolveEdgeColor${suffix};\n`;
178
+ source +=
179
+ dissolve.map !== undefined
180
+ ? `uniform sampler2D u_dissolveMap${suffix};\n`
181
+ : `uniform float u_dissolveScale${suffix};\n`;
182
+ return source;
183
+ },
184
+ };
185
+ // A view-dependent reflection of the scene's baked environment cubemap, Fresnel-blended into the
186
+ // shaded radiance. One program shape (all params are uniforms). It samples the SAME prefiltered
187
+ // environment (u_iblPrefiltered on the IBL unit) the lit block already binds, so it declares those
188
+ // shared uniforms itself — a scene without a baked environment leaves u_iblEnabled at 0 and the term
189
+ // falls back to the reflection tint.
190
+ export const envReflectGlModifierSnippet = {
191
+ ...envReflectModifierDefinition,
192
+ bind(modifier, context) {
193
+ const reflect = modifier;
194
+ const gl = context.state.gl;
195
+ const suffix = `_${context.index}`;
196
+ unpackColorToLinear(scratchRgba, reflect.tint);
197
+ gl.uniform3f(gl.getUniformLocation(context.program, `u_envReflectTint${suffix}`), scratchRgba[0], scratchRgba[1], scratchRgba[2]);
198
+ gl.uniform1f(gl.getUniformLocation(context.program, `u_envReflectIntensity${suffix}`), reflect.intensity ?? 1);
199
+ gl.uniform1f(gl.getUniformLocation(context.program, `u_envReflectFresnel${suffix}`), reflect.fresnelBias ?? 0.04);
200
+ gl.uniform1f(gl.getUniformLocation(context.program, `u_envReflectRoughness${suffix}`), reflect.roughness ?? 0);
201
+ },
202
+ contribution(_modifier, index) {
203
+ const suffix = `_${index}`;
204
+ return (`{\n` +
205
+ ` vec3 envReflectDir = reflect(-viewDir, normal);\n` +
206
+ ` float envReflectMip = clamp(u_envReflectRoughness${suffix}, 0.0, 1.0) * max(u_iblMaxMip, 0.0);\n` +
207
+ ` vec3 envReflectSample = u_iblEnabled > 0.5 ? textureLod(u_iblPrefiltered, envReflectDir, envReflectMip).rgb : u_envReflectTint${suffix};\n` +
208
+ ` float envReflectFresnel = u_envReflectFresnel${suffix} + (1.0 - u_envReflectFresnel${suffix}) * pow(1.0 - max(dot(normal, viewDir), 0.0), 5.0);\n` +
209
+ ` radiance += envReflectSample * u_envReflectTint${suffix} * (u_envReflectIntensity${suffix} * envReflectFresnel);\n` +
210
+ `}`);
211
+ },
212
+ declarations(_modifier, index) {
213
+ const suffix = `_${index}`;
214
+ return (`uniform samplerCube u_iblPrefiltered;\n` +
215
+ `uniform float u_iblEnabled;\n` +
216
+ `uniform float u_iblMaxMip;\n` +
217
+ `uniform vec3 u_envReflectTint${suffix};\n` +
218
+ `uniform float u_envReflectIntensity${suffix};\n` +
219
+ `uniform float u_envReflectFresnel${suffix};\n` +
220
+ `uniform float u_envReflectRoughness${suffix};\n`);
221
+ },
222
+ };
223
+ // A per-material distance fog blending the shaded output toward a color. Signature `l` (linear
224
+ // near/far ramp), `e` (exponential), `x` (exponential-squared) — each emits a different factor.
225
+ export const fogGlModifierSnippet = {
226
+ ...fogModifierDefinition,
227
+ bind(modifier, context) {
228
+ const fog = modifier;
229
+ const gl = context.state.gl;
230
+ const suffix = `_${context.index}`;
231
+ unpackColorToLinear(scratchRgba, fog.color);
232
+ gl.uniform3f(gl.getUniformLocation(context.program, `u_fogColor${suffix}`), scratchRgba[0], scratchRgba[1], scratchRgba[2]);
233
+ if (fog.mode === undefined || fog.mode === FogModifierMode.Linear) {
234
+ gl.uniform1f(gl.getUniformLocation(context.program, `u_fogNear${suffix}`), fog.near ?? 0);
235
+ gl.uniform1f(gl.getUniformLocation(context.program, `u_fogFar${suffix}`), fog.far ?? 1);
236
+ }
237
+ else {
238
+ gl.uniform1f(gl.getUniformLocation(context.program, `u_fogDensity${suffix}`), fog.density ?? 1);
239
+ }
240
+ },
241
+ contribution(modifier, index) {
242
+ const fog = modifier;
243
+ const suffix = `_${index}`;
244
+ let factor;
245
+ if (fog.mode === FogModifierMode.Exponential) {
246
+ factor = ` float fogFactor = 1.0 - exp(-u_fogDensity${suffix} * fogDist);\n`;
247
+ }
248
+ else if (fog.mode === FogModifierMode.Exponential2) {
249
+ factor = ` float fogTerm = u_fogDensity${suffix} * fogDist;\n float fogFactor = 1.0 - exp(-fogTerm * fogTerm);\n`;
250
+ }
251
+ else {
252
+ factor = ` float fogFactor = clamp((fogDist - u_fogNear${suffix}) / max(u_fogFar${suffix} - u_fogNear${suffix}, 1e-4), 0.0, 1.0);\n`;
253
+ }
254
+ return (`{\n` +
255
+ ` float fogDist = length(u_cameraPosition - v_worldPosition);\n` +
256
+ factor +
257
+ ` radiance = mix(radiance, u_fogColor${suffix}, clamp(fogFactor, 0.0, 1.0));\n` +
258
+ `}`);
259
+ },
260
+ declarations(modifier, index) {
261
+ const fog = modifier;
262
+ const suffix = `_${index}`;
263
+ let source = `uniform vec3 u_fogColor${suffix};\n`;
264
+ source +=
265
+ fog.mode === undefined || fog.mode === FogModifierMode.Linear
266
+ ? `uniform float u_fogNear${suffix};\nuniform float u_fogFar${suffix};\n`
267
+ : `uniform float u_fogDensity${suffix};\n`;
268
+ return source;
269
+ },
270
+ };
271
+ // Quantizes the shaded radiance into flat cel bands. One program shape (steps/smoothness are
272
+ // uniforms).
273
+ export const toonGlModifierSnippet = {
274
+ ...toonModifierDefinition,
275
+ bind(modifier, context) {
276
+ const toon = modifier;
277
+ const gl = context.state.gl;
278
+ const suffix = `_${context.index}`;
279
+ gl.uniform1f(gl.getUniformLocation(context.program, `u_toonSteps${suffix}`), Math.max(toon.steps, 2));
280
+ gl.uniform1f(gl.getUniformLocation(context.program, `u_toonSmoothness${suffix}`), toon.smoothness ?? 0);
281
+ },
282
+ contribution(_modifier, index) {
283
+ const suffix = `_${index}`;
284
+ return (`{\n` +
285
+ ` float toonLum = dot(radiance, vec3(0.2126, 0.7152, 0.0722));\n` +
286
+ ` float toonSteps = max(u_toonSteps${suffix}, 2.0);\n` +
287
+ ` float toonScaled = toonLum * toonSteps;\n` +
288
+ ` float toonBand = floor(toonScaled);\n` +
289
+ ` float toonFrac = toonScaled - toonBand;\n` +
290
+ ` float toonSoft = max(u_toonSmoothness${suffix}, 1e-4);\n` +
291
+ ` float toonQuant = (toonBand + smoothstep(0.5 - toonSoft, 0.5 + toonSoft, toonFrac)) / toonSteps;\n` +
292
+ ` radiance *= toonLum > 1e-4 ? toonQuant / toonLum : 1.0;\n` +
293
+ `}`);
294
+ },
295
+ declarations(_modifier, index) {
296
+ const suffix = `_${index}`;
297
+ return `uniform float u_toonSteps${suffix};\nuniform float u_toonSmoothness${suffix};\n`;
298
+ },
299
+ };
300
+ // The one VERTEX-scene2d snippet: displaces the local vertex along its normal (or a fixed axis) before
301
+ // the model transform. Signature `s` (Sine procedural wave, animated by u_time) or `h` (HeightMap red
302
+ // channel), optionally `+a` when a fixed push axis replaces the surface normal.
303
+ export const vertexDisplaceGlModifierSnippet = {
304
+ ...vertexDisplaceModifierDefinition,
305
+ bind(modifier, context) {
306
+ const displace = modifier;
307
+ const gl = context.state.gl;
308
+ const suffix = `_${context.index}`;
309
+ gl.uniform1f(gl.getUniformLocation(context.program, `u_vDisplaceAmplitude${suffix}`), displace.amplitude);
310
+ if (displace.axis !== undefined) {
311
+ gl.uniform3f(gl.getUniformLocation(context.program, `u_vDisplaceAxis${suffix}`), displace.axis.x, displace.axis.y, displace.axis.z);
312
+ }
313
+ if (displace.source === VertexDisplaceModifierSource.HeightMap) {
314
+ if (displace.map !== undefined)
315
+ bindGlModifierTexture(context, displace.map, `u_vDisplaceMap${suffix}`);
316
+ }
317
+ else {
318
+ gl.uniform1f(gl.getUniformLocation(context.program, `u_vDisplaceFrequency${suffix}`), displace.frequency ?? 1);
319
+ gl.uniform1f(gl.getUniformLocation(context.program, `u_vDisplaceSpeed${suffix}`), displace.speed ?? 1);
320
+ const dir = displace.direction ?? { x: 1, y: 0, z: 0 };
321
+ gl.uniform3f(gl.getUniformLocation(context.program, `u_vDisplaceDir${suffix}`), dir.x, dir.y, dir.z);
322
+ }
323
+ },
324
+ contribution(modifier, index) {
325
+ const displace = modifier;
326
+ const suffix = `_${index}`;
327
+ const axis = displace.axis !== undefined
328
+ ? ` vec3 vDisplaceAxis = normalize(u_vDisplaceAxis${suffix});\n`
329
+ : ` vec3 vDisplaceAxis = normalize(localNormal);\n`;
330
+ const amount = displace.source === VertexDisplaceModifierSource.HeightMap
331
+ ? ` float vDisplaceAmount = texture(u_vDisplaceMap${suffix}, vertexUv).r * u_vDisplaceAmplitude${suffix};\n`
332
+ : ` float vDisplacePhase = dot(localPosition.xyz, normalize(u_vDisplaceDir${suffix})) * u_vDisplaceFrequency${suffix} + u_time * u_vDisplaceSpeed${suffix};\n float vDisplaceAmount = sin(vDisplacePhase) * u_vDisplaceAmplitude${suffix};\n`;
333
+ return `{\n` + axis + amount + ` localPosition.xyz += vDisplaceAxis * vDisplaceAmount;\n` + `}`;
334
+ },
335
+ declarations(modifier, index) {
336
+ const displace = modifier;
337
+ const suffix = `_${index}`;
338
+ let source = `uniform float u_vDisplaceAmplitude${suffix};\n`;
339
+ if (displace.axis !== undefined)
340
+ source += `uniform vec3 u_vDisplaceAxis${suffix};\n`;
341
+ source +=
342
+ displace.source === VertexDisplaceModifierSource.HeightMap
343
+ ? `uniform sampler2D u_vDisplaceMap${suffix};\n`
344
+ : `uniform float u_vDisplaceFrequency${suffix};\nuniform float u_vDisplaceSpeed${suffix};\nuniform vec3 u_vDisplaceDir${suffix};\n`;
345
+ return source;
346
+ },
347
+ };
348
+ // Registers the three built-in GL modifier snippets on this state. Opt-in (no top-level side effect)
349
+ // and separate from registerShadedGlMaterial so a plain ShadedMaterial pays nothing for modifier
350
+ // snippets it does not use — a caller registers this once alongside any vendor-prefixed snippets
351
+ // before drawing a ShadedMaterial that carries modifiers.
352
+ export function registerBuiltInGlModifierSnippets(state) {
353
+ registerGlModifierSnippet(state, animatedNormalGlModifierSnippet);
354
+ registerGlModifierSnippet(state, dissolveGlModifierSnippet);
355
+ registerGlModifierSnippet(state, emissiveGlModifierSnippet);
356
+ registerGlModifierSnippet(state, envReflectGlModifierSnippet);
357
+ registerGlModifierSnippet(state, fogGlModifierSnippet);
358
+ registerGlModifierSnippet(state, rimGlModifierSnippet);
359
+ registerGlModifierSnippet(state, toonGlModifierSnippet);
360
+ registerGlModifierSnippet(state, vertexDisplaceGlModifierSnippet);
361
+ }
362
+ // Binds a modifier's texture on the next free modifier texture unit and points its sampler uniform at
363
+ // it. Mirrors the base material's texture bind (activeTexture → bindGlImageResourceTexture → uniform1i). A texture
364
+ // with no loaded source leaves the sampler on that unit without an upload (the modifier renders as if
365
+ // unmapped) rather than clobbering a base or shadow unit. When the allocator is exhausted (returns
366
+ // -1), the sampler is left untouched — the excess modifier texture is dropped rather than binding
367
+ // onto the shadow/IBL units.
368
+ function bindGlModifierTexture(context, texture, uniformName) {
369
+ const state = context.state;
370
+ const gl = state.gl;
371
+ const unit = context.acquireModifierTextureUnit();
372
+ if (unit < 0)
373
+ return;
374
+ gl.activeTexture(gl.TEXTURE0 + unit);
375
+ const image = texture.image;
376
+ if (image !== null && hasImageResourcePixels(image)) {
377
+ bindGlImageResourceTexture(state, image, texture.sampler);
378
+ }
379
+ gl.uniform1i(gl.getUniformLocation(context.program, uniformName), unit);
380
+ gl.activeTexture(gl.TEXTURE0);
381
+ }
382
+ function isEmissiveGated(modifier) {
383
+ return modifier.facing !== undefined && modifier.facing !== EmissiveModifierFacing.Ignore;
384
+ }
385
+ const scratchRgba = [0, 0, 0, 0];
386
+ //# sourceMappingURL=glShadedBuiltInModifiers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glShadedBuiltInModifiers.js","sourceRoot":"","sources":["../src/glShadedBuiltInModifiers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { GlModifierSnippet, GlRenderState, ModifierKind } from '@flighthq/types';
2
+ export declare function registerGlModifierSnippet(state: GlRenderState, snippet: Readonly<GlModifierSnippet>): void;
3
+ export declare function resolveGlModifierSnippet(state: GlRenderState, kind: ModifierKind): GlModifierSnippet | null;
4
+ //# sourceMappingURL=glShadedModifierSnippet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glShadedModifierSnippet.d.ts","sourceRoot":"","sources":["../src/glShadedModifierSnippet.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAStF,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAI1G;AAKD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,YAAY,GAAG,iBAAiB,GAAG,IAAI,CAI3G"}
@@ -0,0 +1,24 @@
1
+ import { createModifierRegistry, registerModifier, resolveModifier } from '@flighthq/shading';
2
+ import { getGlScene3DRuntime } from './glScene3DRuntime';
3
+ // Registers (or replaces) the GL snippet for a modifier kind on this state's scene runtime. Opt-in
4
+ // and last-write-wins (a vendor-prefixed kind, or an override of a built-in, wins). Unregistered
5
+ // kinds contribute no GLSL, so a ShadedMaterial whose modifier has no snippet renders as if that
6
+ // modifier were absent. Register the three built-ins with registerBuiltInGlModifierSnippets. Lazily
7
+ // allocates the modifier registry on first use so a PBR/classic-only scene-gl consumer that never
8
+ // registers a snippet pays nothing for the shading tier.
9
+ export function registerGlModifierSnippet(state, snippet) {
10
+ const runtime = getGlScene3DRuntime(state);
11
+ if (runtime.modifierSnippetRegistry === null)
12
+ runtime.modifierSnippetRegistry = createModifierRegistry();
13
+ registerModifier(runtime.modifierSnippetRegistry, snippet);
14
+ }
15
+ // Returns the GL snippet registered for a modifier kind on this state, or null when none is (including
16
+ // when no snippet has ever been registered, so the registry is still unallocated) — the expected-miss
17
+ // sentinel the compile path checks before injecting an unknown kind.
18
+ export function resolveGlModifierSnippet(state, kind) {
19
+ const registry = getGlScene3DRuntime(state).modifierSnippetRegistry;
20
+ if (registry === null)
21
+ return null;
22
+ return resolveModifier(registry, kind);
23
+ }
24
+ //# sourceMappingURL=glShadedModifierSnippet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glShadedModifierSnippet.js","sourceRoot":"","sources":["../src/glShadedModifierSnippet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAG9F,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,mGAAmG;AACnG,iGAAiG;AACjG,iGAAiG;AACjG,oGAAoG;AACpG,kGAAkG;AAClG,yDAAyD;AACzD,MAAM,UAAU,yBAAyB,CAAC,KAAoB,EAAE,OAAoC;IAClG,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,OAAO,CAAC,uBAAuB,KAAK,IAAI;QAAE,OAAO,CAAC,uBAAuB,GAAG,sBAAsB,EAAE,CAAC;IACzG,gBAAgB,CAAC,OAAO,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAC;AAC7D,CAAC;AAED,uGAAuG;AACvG,sGAAsG;AACtG,qEAAqE;AACrE,MAAM,UAAU,wBAAwB,CAAC,KAAoB,EAAE,IAAkB;IAC/E,MAAM,QAAQ,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC,uBAAuB,CAAC;IACpE,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACnC,OAAO,eAAe,CAAC,QAAQ,EAAE,IAAI,CAA6B,CAAC;AACrE,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { GlShadedDefineKey, GlShadedProgram, ModifierRegistry, GlRenderState, Modifier } from '@flighthq/types';
2
+ export declare function buildGlShadedCacheKey(key: Readonly<GlShadedDefineKey>, modifierDefineKey: string): string;
3
+ export declare function compileGlShadedProgram(gl: WebGL2RenderingContext, key: Readonly<GlShadedDefineKey>, orderedModifiers: readonly Modifier[], registry: Readonly<ModifierRegistry>): GlShadedProgram;
4
+ export declare function ensureGlShadedProgram(state: GlRenderState, key: Readonly<GlShadedDefineKey>, modifiers: readonly Modifier[]): GlShadedProgram;
5
+ //# sourceMappingURL=glShadedPrelude.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glShadedPrelude.d.ts","sourceRoot":"","sources":["../src/glShadedPrelude.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,QAAQ,EAET,MAAM,iBAAiB,CAAC;AAgBzB,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,EAAE,MAAM,GAAG,MAAM,CAKzG;AAOD,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,sBAAsB,EAC1B,GAAG,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EAChC,gBAAgB,EAAE,SAAS,QAAQ,EAAE,EACrC,QAAQ,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GACnC,eAAe,CA4BjB;AAOD,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,aAAa,EACpB,GAAG,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EAChC,SAAS,EAAE,SAAS,QAAQ,EAAE,GAC7B,eAAe,CAcjB"}