@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 @@
1
+ {"version":3,"file":"glMeshProgram.js","sourceRoot":"","sources":["../src/glMeshProgram.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { GlRenderState, MeshGeometry, GlMeshUpload } from '@flighthq/types';
2
+ export declare function destroyGlMeshUpload(state: GlRenderState, upload: Readonly<GlMeshUpload>): void;
3
+ export declare function ensureGlMeshUpload(state: GlRenderState, geometry: Readonly<MeshGeometry>, gpuSkinned?: boolean): GlMeshUpload;
4
+ //# sourceMappingURL=glMeshUpload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glMeshUpload.d.ts","sourceRoot":"","sources":["../src/glMeshUpload.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EAIZ,YAAY,EACb,MAAM,iBAAiB,CAAC;AAQzB,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,IAAI,CAK9F;AAyBD,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,QAAQ,CAAC,YAAY,CAAC,EAChC,UAAU,UAAQ,GACjB,YAAY,CAgEd"}
@@ -0,0 +1,190 @@
1
+ import { getMeshGeometryMorphBindPose, getMeshGeometrySkinBindPose } from '@flighthq/mesh';
2
+ import { getGlScene3DRuntime } from './glScene3DRuntime';
3
+ // Frees the GL objects owned by a mesh upload — the VAO and the vertex/index buffers. The upload
4
+ // must not be used after this call. The upload cache is a WeakMap keyed by the geometry entity, so
5
+ // its entry falls away on its own once the geometry is GC'd; this frees the GPU resources now rather
6
+ // than waiting for context loss. Deleting an already-deleted GL object is a silent no-op.
7
+ export function destroyGlMeshUpload(state, upload) {
8
+ const gl = state.gl;
9
+ gl.deleteVertexArray(upload.vao);
10
+ gl.deleteBuffer(upload.vertexBuffer);
11
+ if (upload.indexBuffer !== null)
12
+ gl.deleteBuffer(upload.indexBuffer);
13
+ }
14
+ // Lazily uploads a MeshGeometry's interleaved vertex buffer + index buffer into a VAO for this
15
+ // GlRenderState, caching the result keyed by the geometry entity (the per-state parallel of
16
+ // MeshGeometryRuntime.webglData). Re-uploads when geometry.version moves past the cached version,
17
+ // reusing the existing GL objects. The VAO binds only the canonical PBR attributes the shader
18
+ // consumes (position/normal/tangent/uv0), read from geometry.layout so a custom-offset layout still
19
+ // works. Leaves the VAO bound on return (the draw path issues its draws immediately after).
20
+ //
21
+ // `gpuSkinned` is true when the caller will GPU-skin this geometry (the HAS_SKIN shader deforms it via
22
+ // the joint palette). In that case the uploaded buffer is the STATIC bind pose — position/normal
23
+ // restored from the captured skin bind pose rather than the per-frame CPU-posed geometry.vertices that
24
+ // updateMeshSkin writes — so the GPU deforms bind → pose exactly once, never double-skinning on top of a
25
+ // CPU pose. The bind buffer is uploaded once and reused across frames (its version is ignored while
26
+ // skinBindUploaded). Without a captured bind pose, geometry.vertices IS the bind pose, so it uploads
27
+ // as-is. A rigid draw (not gpuSkinned) always uploads geometry.vertices — for an oversized skeleton that
28
+ // falls back to CPU skinning, those are exactly the CPU-posed vertices it must draw.
29
+ //
30
+ // MORPH + SKIN COMPOSE ON GPU: when the geometry is also morphed (its morph bind pose is captured), the
31
+ // static-bind-pose restore + freeze is skipped. prepareScene3DMorph has blended this frame's morph into
32
+ // geometry.vertices (position/normal, leaving joints0/weights0 intact), so those ARE the bind input the
33
+ // shader must skin — restoring the frozen skin bind pose would discard the morph, and freezing would
34
+ // pin the buffer at frame 0. Instead geometry.vertices uploads as-is, version-tracked, so each morph
35
+ // frame re-uploads and the GPU skins the freshly-morphed bind. (There is no CPU double-skin to guard
36
+ // against here: the composed GPU path runs prepareScene3DMorph, never the CPU updateMeshSkin.)
37
+ export function ensureGlMeshUpload(state, geometry, gpuSkinned = false) {
38
+ const gl = state.gl;
39
+ const cache = getGlScene3DRuntime(state).uploadCache;
40
+ let upload = cache.get(geometry);
41
+ const primitiveMode = getGlPrimitiveMode(gl, geometry.topology);
42
+ // A morphed geometry's vertices are the per-frame morphed bind input the GPU skins directly, so the
43
+ // static skin-bind restore/freeze must not apply — the morph would be frozen out otherwise.
44
+ const morphed = getMeshGeometryMorphBindPose(geometry) !== null;
45
+ const bindPose = gpuSkinned && !morphed ? getMeshGeometrySkinBindPose(geometry) : null;
46
+ if (upload !== undefined &&
47
+ (bindPose !== null ? upload.skinBindUploaded === true : upload.version === geometry.version)) {
48
+ upload.primitiveMode = primitiveMode;
49
+ gl.bindVertexArray(upload.vao);
50
+ return upload;
51
+ }
52
+ if (upload === undefined) {
53
+ upload = {
54
+ indexBuffer: null,
55
+ indexCount: 0,
56
+ indexType: gl.UNSIGNED_SHORT,
57
+ primitiveMode,
58
+ vao: gl.createVertexArray(),
59
+ version: -1,
60
+ vertexBuffer: gl.createBuffer(),
61
+ };
62
+ cache.set(geometry, upload);
63
+ }
64
+ gl.bindVertexArray(upload.vao);
65
+ gl.bindBuffer(gl.ARRAY_BUFFER, upload.vertexBuffer);
66
+ gl.bufferData(gl.ARRAY_BUFFER, bindPose !== null ? buildSkinBindVertices(geometry, bindPose) : geometry.vertices, gl.STATIC_DRAW);
67
+ upload.skinBindUploaded = bindPose !== null;
68
+ const stride = geometry.layout.stride;
69
+ for (let i = 0; i < geometry.layout.attributes.length; i++) {
70
+ bindGlVertexAttribute(gl, geometry.layout.attributes[i], stride);
71
+ }
72
+ if (geometry.indices !== null) {
73
+ if (upload.indexBuffer === null)
74
+ upload.indexBuffer = gl.createBuffer();
75
+ gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, upload.indexBuffer);
76
+ gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, geometry.indices, gl.STATIC_DRAW);
77
+ upload.indexType = geometry.indices instanceof Uint32Array ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT;
78
+ upload.indexCount = geometry.indices.length;
79
+ }
80
+ else {
81
+ if (upload.indexBuffer !== null)
82
+ gl.deleteBuffer(upload.indexBuffer);
83
+ upload.indexBuffer = null;
84
+ upload.indexCount =
85
+ geometry.layout.stride > 0 ? Math.floor(geometry.vertices.byteLength / geometry.layout.stride) : 0;
86
+ }
87
+ upload.primitiveMode = primitiveMode;
88
+ upload.version = geometry.version;
89
+ return upload;
90
+ }
91
+ function getGlPrimitiveMode(gl, topology) {
92
+ switch (topology) {
93
+ case 'line-list':
94
+ return gl.LINES;
95
+ case 'line-strip':
96
+ return gl.LINE_STRIP;
97
+ case 'point-list':
98
+ return gl.POINTS;
99
+ case 'triangle-strip':
100
+ return gl.TRIANGLE_STRIP;
101
+ default:
102
+ return gl.TRIANGLES;
103
+ }
104
+ }
105
+ // Builds the STATIC bind-pose vertex buffer a GPU-skinned mesh uploads: a copy of the interleaved
106
+ // buffer with position and normal restored from the captured skin bind pose. tangent/uv0/joints0/
107
+ // weights0 are already static (updateMeshSkin rewrites only position/normal), so copying them straight
108
+ // from geometry.vertices is correct. The GPU deforms this fixed buffer through the joint palette.
109
+ function buildSkinBindVertices(geometry, bindPose) {
110
+ const out = geometry.vertices.slice();
111
+ const floatsPerVertex = geometry.layout.stride / 4;
112
+ const positionOffset = floatOffsetForSemantic(geometry, 'position');
113
+ const normalOffset = floatOffsetForSemantic(geometry, 'normal');
114
+ const { normals, positions } = bindPose;
115
+ const vertexCount = (positions.length / 3) | 0;
116
+ for (let v = 0; v < vertexCount; v++) {
117
+ const base = v * floatsPerVertex;
118
+ const s = v * 3;
119
+ if (positionOffset >= 0) {
120
+ out[base + positionOffset] = positions[s];
121
+ out[base + positionOffset + 1] = positions[s + 1];
122
+ out[base + positionOffset + 2] = positions[s + 2];
123
+ }
124
+ if (normalOffset >= 0) {
125
+ out[base + normalOffset] = normals[s];
126
+ out[base + normalOffset + 1] = normals[s + 1];
127
+ out[base + normalOffset + 2] = normals[s + 2];
128
+ }
129
+ }
130
+ return out;
131
+ }
132
+ // The float offset (byteOffset / 4) of a semantic within an interleaved vertex record, or -1 when the
133
+ // layout does not carry it.
134
+ function floatOffsetForSemantic(geometry, semantic) {
135
+ const attributes = geometry.layout.attributes;
136
+ for (let i = 0; i < attributes.length; i++) {
137
+ if (attributes[i].semantic === semantic)
138
+ return attributes[i].byteOffset / 4;
139
+ }
140
+ return -1;
141
+ }
142
+ // Vertex attribute locations the mesh vertex shaders fix with layout(location = …); the upload's
143
+ // VAO wires the interleaved buffer to these by semantic. Locations 0–3 are the canonical PBR record
144
+ // (position/normal/tangent/uv0); `color0` (location 4) is bound only when a geometry's layout carries
145
+ // it (the VertexColor path); `uv1` (location 5) is the second UV set (occlusion/lightmap channel per
146
+ // glTF TEXCOORD_1); `joints0`/`weights0` (locations 6–7) are the skinning channels the HAS_SKIN vertex
147
+ // scene2d reads (see GL_SKIN_VERTEX_DECLARATIONS_GLSL). Semantics absent from a layout are left unbound.
148
+ const ATTRIBUTE_LOCATION = {
149
+ color0: 4,
150
+ joints0: 6,
151
+ normal: 1,
152
+ position: 0,
153
+ tangent: 2,
154
+ uv0: 3,
155
+ uv1: 5,
156
+ weights0: 7,
157
+ };
158
+ function bindGlVertexAttribute(gl, attribute, stride) {
159
+ const location = ATTRIBUTE_LOCATION[attribute.semantic];
160
+ if (location === undefined)
161
+ return;
162
+ const [size, type, normalized] = resolveGlVertexFormat(gl, attribute.format);
163
+ gl.enableVertexAttribArray(location);
164
+ // Every built-in mesh shader declares these locations as float/vec inputs. WebGL therefore needs
165
+ // vertexAttribPointer even when storage is integer: it converts uint joints to float values and
166
+ // normalizes unorm weights/colors. vertexAttribIPointer is only valid for ivec/uvec shader inputs
167
+ // and creates a link/input-type mismatch here.
168
+ gl.vertexAttribPointer(location, size, type, normalized, stride, attribute.byteOffset);
169
+ }
170
+ // Maps a VertexFormat to its [componentCount, glType, normalized] tuple. The canonical PBR record
171
+ // is all float32, but the data path may carry packed integer/unorm attributes for later passes.
172
+ function resolveGlVertexFormat(gl, format) {
173
+ switch (format) {
174
+ case 'float32x2':
175
+ return [2, gl.FLOAT, false];
176
+ case 'float32x3':
177
+ return [3, gl.FLOAT, false];
178
+ case 'float32x4':
179
+ return [4, gl.FLOAT, false];
180
+ case 'uint8x4':
181
+ return [4, gl.UNSIGNED_BYTE, false];
182
+ case 'unorm8x4':
183
+ return [4, gl.UNSIGNED_BYTE, true];
184
+ case 'uint16x4':
185
+ return [4, gl.UNSIGNED_SHORT, false];
186
+ default:
187
+ return [3, gl.FLOAT, false];
188
+ }
189
+ }
190
+ //# sourceMappingURL=glMeshUpload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glMeshUpload.js","sourceRoot":"","sources":["../src/glMeshUpload.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Camera3D, GlRenderState, Scene3DLightsLike, Node3D } from '@flighthq/types';
2
+ export declare function destroyGlParticleEmitter3DShader(state: GlRenderState): void;
3
+ export declare function drawGlScene3DParticleEmitter3Ds(state: GlRenderState, scene: Readonly<Node3D>, camera: Readonly<Camera3D>, lights: Readonly<Scene3DLightsLike>): void;
4
+ //# sourceMappingURL=glParticleEmitter3D.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glParticleEmitter3D.d.ts","sourceRoot":"","sources":["../src/glParticleEmitter3D.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,QAAQ,EACR,aAAa,EAMb,iBAAiB,EACjB,MAAM,EACP,MAAM,iBAAiB,CAAC;AAoWzB,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAS3E;AAED,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,EACvB,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAC1B,MAAM,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAClC,IAAI,CAmCN"}
@@ -0,0 +1,342 @@
1
+ import { hasImageResourcePixels } from '@flighthq/image';
2
+ import { getNodeRuntime, getNodeWorldMatrix4 } from '@flighthq/node';
3
+ import { prepareScene3DRender } from '@flighthq/render';
4
+ import { bindGlTexture, createGlProgram, invalidateGlRenderStateCache } from '@flighthq/render-gl';
5
+ import { ParticleEmitter3DKind } from '@flighthq/types';
6
+ // Per-instance layout (16 floats = 64 bytes):
7
+ // [0] px float world x
8
+ // [1] py float world y
9
+ // [2] pz float world z
10
+ // [3] cosScale float cos(rotation) * scale
11
+ // [4] sinScale float sin(rotation) * scale
12
+ // [5] r float
13
+ // [6] g float
14
+ // [7] b float
15
+ // [8] alpha float
16
+ // [9] u0 float
17
+ // [10] v0 float
18
+ // [11] u1 float
19
+ // [12] v1 float
20
+ // [13] width float
21
+ // [14] height float
22
+ // [15] _pad float (alignment to 64 bytes)
23
+ const INSTANCE_FLOATS = 16;
24
+ const INSTANCE_STRIDE = INSTANCE_FLOATS * 4;
25
+ const PARTICLE_TRANSFORM_STRIDE = 4;
26
+ const PARTICLE_3D_VS = `#version 300 es
27
+ precision highp float;
28
+
29
+ in vec2 a_corner;
30
+
31
+ layout(location = 1) in vec3 a_pos;
32
+ layout(location = 2) in float a_cosScale;
33
+ layout(location = 3) in float a_sinScale;
34
+ layout(location = 4) in vec4 a_color;
35
+ layout(location = 5) in vec4 a_uvRect;
36
+ layout(location = 6) in vec2 a_size;
37
+
38
+ uniform mat4 u_viewProjection;
39
+ uniform vec3 u_cameraRight;
40
+ uniform vec3 u_cameraUp;
41
+
42
+ out vec2 v_uv;
43
+ out vec4 v_color;
44
+
45
+ void main() {
46
+ float lx = (a_corner.x - 0.5) * a_size.x;
47
+ float ly = (a_corner.y - 0.5) * a_size.y;
48
+ float rx = a_cosScale * lx - a_sinScale * ly;
49
+ float ry = a_sinScale * lx + a_cosScale * ly;
50
+ vec3 worldPos = a_pos + u_cameraRight * rx + u_cameraUp * ry;
51
+ gl_Position = u_viewProjection * vec4(worldPos, 1.0);
52
+ v_uv = mix(a_uvRect.xy, a_uvRect.zw, a_corner);
53
+ v_color = a_color;
54
+ }`;
55
+ const PARTICLE_3D_FS = `#version 300 es
56
+ precision highp float;
57
+
58
+ in vec2 v_uv;
59
+ in vec4 v_color;
60
+
61
+ uniform sampler2D u_texture;
62
+ uniform int u_hasTexture;
63
+
64
+ out vec4 fragColor;
65
+
66
+ // Both branches output premultiplied alpha (rgb already scaled by alpha), matching the codebase-wide
67
+ // premultiplied convention the blend funcs in applyGlParticleBlendMode assume. The texture is uploaded
68
+ // premultiplied by bindGlTexture, so tex.rgb is pre-scaled by tex.a; the trailing * v_color.a then
69
+ // premultiplies the tint alpha. The untextured branch premultiplies v_color explicitly.
70
+ void main() {
71
+ if (u_hasTexture != 0) {
72
+ vec4 tex = texture(u_texture, v_uv);
73
+ fragColor = vec4(tex.rgb * v_color.rgb, tex.a) * v_color.a;
74
+ } else {
75
+ fragColor = vec4(v_color.rgb * v_color.a, v_color.a);
76
+ }
77
+ if (fragColor.a <= 0.0) discard;
78
+ }`;
79
+ function compileParticle3DShader(gl) {
80
+ const program = createGlProgram(gl, PARTICLE_3D_VS, PARTICLE_3D_FS, 'ParticleEmitter3D');
81
+ // Bind the emitter's dedicated VAO before creating buffers. This compile runs lazily inside the first
82
+ // particle draw — mid drawGlScene3D, with the last mesh's VAO still bound — so the ELEMENT_ARRAY_BUFFER
83
+ // binding below must land in this VAO, not in that mesh's cached VAO (which would leave it drawing
84
+ // against this 6-index quad buffer and reporting "Insufficient buffer size" on later frames).
85
+ const vao = gl.createVertexArray();
86
+ gl.bindVertexArray(vao);
87
+ const cornerData = new Float32Array([0, 0, 1, 0, 1, 1, 0, 1]);
88
+ const cornerBuffer = gl.createBuffer();
89
+ gl.bindBuffer(gl.ARRAY_BUFFER, cornerBuffer);
90
+ gl.bufferData(gl.ARRAY_BUFFER, cornerData, gl.STATIC_DRAW);
91
+ const indexData = new Uint16Array([0, 1, 2, 0, 2, 3]);
92
+ const indexBuffer = gl.createBuffer();
93
+ gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);
94
+ gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, indexData, gl.STATIC_DRAW);
95
+ const instanceBuffer = gl.createBuffer();
96
+ gl.bindVertexArray(null);
97
+ return {
98
+ cornerBuffer,
99
+ indexBuffer,
100
+ instanceBuffer,
101
+ instanceData: new Float32Array(0),
102
+ locCameraRight: gl.getUniformLocation(program, 'u_cameraRight'),
103
+ locCameraUp: gl.getUniformLocation(program, 'u_cameraUp'),
104
+ locColor: 4,
105
+ locCorner: gl.getAttribLocation(program, 'a_corner'),
106
+ locCosScale: 2,
107
+ locHasTexture: gl.getUniformLocation(program, 'u_hasTexture'),
108
+ locPos: 1,
109
+ locSinScale: 3,
110
+ locSize: 6,
111
+ locTexture: gl.getUniformLocation(program, 'u_texture'),
112
+ locUvRect: 5,
113
+ locViewProjection: gl.getUniformLocation(program, 'u_viewProjection'),
114
+ program,
115
+ vao,
116
+ };
117
+ }
118
+ function ensureParticle3DShader(state) {
119
+ let shader = shaderCache.get(state);
120
+ if (shader !== undefined)
121
+ return shader;
122
+ shader = compileParticle3DShader(state.gl);
123
+ shaderCache.set(state, shader);
124
+ return shader;
125
+ }
126
+ function ensureInstanceCapacity(shader, gl, count) {
127
+ const needed = count * INSTANCE_FLOATS;
128
+ if (shader.instanceData.length >= needed)
129
+ return;
130
+ const newSize = Math.max(needed, shader.instanceData.length * 2);
131
+ shader.instanceData = new Float32Array(newSize);
132
+ gl.bindBuffer(gl.ARRAY_BUFFER, shader.instanceBuffer);
133
+ gl.bufferData(gl.ARRAY_BUFFER, newSize * 4, gl.DYNAMIC_DRAW);
134
+ }
135
+ function collectParticleEmitter3DNodes(node, out) {
136
+ if (!node.enabled)
137
+ return;
138
+ if (node.kind === ParticleEmitter3DKind) {
139
+ out.push(node);
140
+ }
141
+ const children = getNodeRuntime(node).children;
142
+ if (children !== null) {
143
+ for (let i = 0; i < children.length; i++) {
144
+ collectParticleEmitter3DNodes(children[i], out);
145
+ }
146
+ }
147
+ }
148
+ // Maps a ParticleBlendMode to a GL blend function. The particle fragment shader outputs premultiplied
149
+ // rgb (already scaled by the particle alpha), so 'normal' is the premultiplied over-blend ONE /
150
+ // ONE_MINUS_SRC_ALPHA (NOT SRC_ALPHA, which would double-apply alpha and darken), and 'add' is a
151
+ // straight ONE/ONE sum (a black sprite background adds nothing, fire brightens). Assumes gl.BLEND is
152
+ // already enabled.
153
+ function applyGlParticleBlendMode(gl, mode) {
154
+ switch (mode) {
155
+ case 'add':
156
+ gl.blendFunc(gl.ONE, gl.ONE);
157
+ break;
158
+ case 'multiply':
159
+ gl.blendFunc(gl.DST_COLOR, gl.ONE_MINUS_SRC_ALPHA);
160
+ break;
161
+ case 'screen':
162
+ gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR);
163
+ break;
164
+ default:
165
+ gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
166
+ break;
167
+ }
168
+ }
169
+ function drawParticleEmitter3DNode(state, shader, emitter) {
170
+ const gl = state.gl;
171
+ const data = emitter.data;
172
+ const { alphas, atlas, colors, ids, particleCount, positionsZ, transforms } = data;
173
+ if (particleCount === 0)
174
+ return;
175
+ ensureInstanceCapacity(shader, gl, particleCount);
176
+ const hasAtlas = atlas !== null && atlas.image !== null && hasImageResourcePixels(atlas.image);
177
+ const regions = hasAtlas ? atlas.regions : null;
178
+ const numRegions = regions !== null ? regions.length : 0;
179
+ const iw = hasAtlas ? 1 / (atlas.image.width || 1) : 0;
180
+ const ih = hasAtlas ? 1 / (atlas.image.height || 1) : 0;
181
+ const worldMatrix = getNodeWorldMatrix4(emitter);
182
+ const wm = worldMatrix.m;
183
+ // World-space particles are already baked into world coordinates at spawn (see updateParticleEmitter3D),
184
+ // so they must NOT be re-transformed by the emitter's world matrix here.
185
+ const worldSpace = data.worldSpace;
186
+ const instanceData = shader.instanceData;
187
+ let base = 0;
188
+ let drawCount = 0;
189
+ for (let i = 0; i < particleCount; i++) {
190
+ const tt = i * PARTICLE_TRANSFORM_STRIDE;
191
+ const lx = transforms[tt];
192
+ const ly = transforms[tt + 1];
193
+ const rotation = transforms[tt + 2];
194
+ const scale = transforms[tt + 3];
195
+ const lz = positionsZ[i];
196
+ const wx = worldSpace ? lx : wm[0] * lx + wm[4] * ly + wm[8] * lz + wm[12];
197
+ const wy = worldSpace ? ly : wm[1] * lx + wm[5] * ly + wm[9] * lz + wm[13];
198
+ const wz = worldSpace ? lz : wm[2] * lx + wm[6] * ly + wm[10] * lz + wm[14];
199
+ const cosR = Math.cos(rotation) * scale;
200
+ const sinR = Math.sin(rotation) * scale;
201
+ const ct = i * 3;
202
+ const hasColors = colors != null && colors.length > ct + 2;
203
+ const r = hasColors ? colors[ct] : 1;
204
+ const g = hasColors ? colors[ct + 1] : 1;
205
+ const b = hasColors ? colors[ct + 2] : 1;
206
+ let u0 = 0;
207
+ let v0 = 0;
208
+ let u1 = 1;
209
+ let v1 = 1;
210
+ let regionW = 1;
211
+ let regionH = 1;
212
+ if (regions !== null) {
213
+ const id = ids[i];
214
+ if (id >= numRegions)
215
+ continue;
216
+ const region = regions[id];
217
+ if (region.width <= 0 || region.height <= 0)
218
+ continue;
219
+ u0 = region.x * iw;
220
+ v0 = region.y * ih;
221
+ u1 = (region.x + region.width) * iw;
222
+ v1 = (region.y + region.height) * ih;
223
+ regionW = region.width;
224
+ regionH = region.height;
225
+ }
226
+ instanceData[base] = wx;
227
+ instanceData[base + 1] = wy;
228
+ instanceData[base + 2] = wz;
229
+ instanceData[base + 3] = cosR;
230
+ instanceData[base + 4] = sinR;
231
+ instanceData[base + 5] = r;
232
+ instanceData[base + 6] = g;
233
+ instanceData[base + 7] = b;
234
+ instanceData[base + 8] = alphas[i];
235
+ instanceData[base + 9] = u0;
236
+ instanceData[base + 10] = v0;
237
+ instanceData[base + 11] = u1;
238
+ instanceData[base + 12] = v1;
239
+ // The atlas region's pixel dimensions set the billboard's aspect ratio, not its world size: a
240
+ // 3D particle's world extent is its `scale` (folded into cosScale/sinScale above), so the base
241
+ // quad is normalized to a unit square with the larger axis = 1 (max dim is >= 1 since region
242
+ // dims default to 1 and non-positive regions were skipped). Using the raw pixel dims here would
243
+ // make a 64px sprite a 64-world-unit quad — screen-covering, with crippling overdraw.
244
+ const maxDim = regionW >= regionH ? regionW : regionH;
245
+ instanceData[base + 13] = regionW / maxDim;
246
+ instanceData[base + 14] = regionH / maxDim;
247
+ instanceData[base + 15] = 0;
248
+ base += INSTANCE_FLOATS;
249
+ drawCount++;
250
+ }
251
+ if (drawCount === 0)
252
+ return;
253
+ // Bind a dedicated VAO before setting any buffer/attribute state. This instanced draw configures
254
+ // ARRAY_BUFFER, ELEMENT_ARRAY_BUFFER, pointers, and divisors; without its own VAO those writes land
255
+ // in whatever VAO is currently bound — typically the last mesh VAO left bound by drawGlScene3D — whose
256
+ // index buffer then becomes this 6-index quad buffer, so the mesh's next-frame drawElements reports
257
+ // "Insufficient buffer size". The VAO isolates all of it.
258
+ gl.bindVertexArray(shader.vao);
259
+ gl.bindBuffer(gl.ARRAY_BUFFER, shader.instanceBuffer);
260
+ gl.bufferSubData(gl.ARRAY_BUFFER, 0, instanceData, 0, drawCount * INSTANCE_FLOATS);
261
+ gl.uniform1i(shader.locHasTexture, hasAtlas ? 1 : 0);
262
+ if (hasAtlas) {
263
+ // Upload (first use) and bind the atlas image to unit 0. Binding a null texture here instead —
264
+ // as this did — leaves an incomplete sampler that reads (0,0,0,1), turning every textured
265
+ // particle into a solid black quad. bindGlTexture premultiplies alpha on upload, matching the
266
+ // premultiplied output the fragment shader and blend funcs assume.
267
+ gl.activeTexture(gl.TEXTURE0);
268
+ bindGlTexture(state, atlas.image.source);
269
+ gl.uniform1i(shader.locTexture, 0);
270
+ }
271
+ gl.bindBuffer(gl.ARRAY_BUFFER, shader.cornerBuffer);
272
+ gl.enableVertexAttribArray(shader.locCorner);
273
+ gl.vertexAttribPointer(shader.locCorner, 2, gl.FLOAT, false, 8, 0);
274
+ gl.vertexAttribDivisor(shader.locCorner, 0);
275
+ gl.bindBuffer(gl.ARRAY_BUFFER, shader.instanceBuffer);
276
+ gl.enableVertexAttribArray(shader.locPos);
277
+ gl.vertexAttribPointer(shader.locPos, 3, gl.FLOAT, false, INSTANCE_STRIDE, 0);
278
+ gl.vertexAttribDivisor(shader.locPos, 1);
279
+ gl.enableVertexAttribArray(shader.locCosScale);
280
+ gl.vertexAttribPointer(shader.locCosScale, 1, gl.FLOAT, false, INSTANCE_STRIDE, 12);
281
+ gl.vertexAttribDivisor(shader.locCosScale, 1);
282
+ gl.enableVertexAttribArray(shader.locSinScale);
283
+ gl.vertexAttribPointer(shader.locSinScale, 1, gl.FLOAT, false, INSTANCE_STRIDE, 16);
284
+ gl.vertexAttribDivisor(shader.locSinScale, 1);
285
+ gl.enableVertexAttribArray(shader.locColor);
286
+ gl.vertexAttribPointer(shader.locColor, 4, gl.FLOAT, false, INSTANCE_STRIDE, 20);
287
+ gl.vertexAttribDivisor(shader.locColor, 1);
288
+ gl.enableVertexAttribArray(shader.locUvRect);
289
+ gl.vertexAttribPointer(shader.locUvRect, 4, gl.FLOAT, false, INSTANCE_STRIDE, 36);
290
+ gl.vertexAttribDivisor(shader.locUvRect, 1);
291
+ gl.enableVertexAttribArray(shader.locSize);
292
+ gl.vertexAttribPointer(shader.locSize, 2, gl.FLOAT, false, INSTANCE_STRIDE, 52);
293
+ gl.vertexAttribDivisor(shader.locSize, 1);
294
+ gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, shader.indexBuffer);
295
+ gl.drawElementsInstanced(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0, drawCount);
296
+ // Restore the default VAO. The instance divisors set above are recorded in shader.vao, so isolating
297
+ // them here means a following mesh draw never inherits per-instance stepping on its attributes.
298
+ gl.bindVertexArray(null);
299
+ }
300
+ export function destroyGlParticleEmitter3DShader(state) {
301
+ const shader = shaderCache.get(state);
302
+ if (shader === undefined)
303
+ return;
304
+ const gl = state.gl;
305
+ gl.deleteProgram(shader.program);
306
+ gl.deleteBuffer(shader.cornerBuffer);
307
+ gl.deleteBuffer(shader.indexBuffer);
308
+ gl.deleteBuffer(shader.instanceBuffer);
309
+ shaderCache.delete(state);
310
+ }
311
+ export function drawGlScene3DParticleEmitter3Ds(state, scene, camera, lights) {
312
+ emitterScratch.length = 0;
313
+ collectParticleEmitter3DNodes(scene, emitterScratch);
314
+ if (emitterScratch.length === 0)
315
+ return;
316
+ const list = prepareScene3DRender(state, scene, camera, lights);
317
+ const shader = ensureParticle3DShader(state);
318
+ const gl = state.gl;
319
+ gl.useProgram(shader.program);
320
+ gl.uniformMatrix4fv(shader.locViewProjection, false, list.viewProjection.m);
321
+ // Camera3D right and up from the view matrix rows (column-major storage).
322
+ const vm = camera.view.m;
323
+ gl.uniform3f(shader.locCameraRight, vm[0], vm[4], vm[8]);
324
+ gl.uniform3f(shader.locCameraUp, vm[1], vm[5], vm[9]);
325
+ gl.enable(gl.DEPTH_TEST);
326
+ gl.depthMask(false);
327
+ gl.enable(gl.BLEND);
328
+ for (let i = 0; i < emitterScratch.length; i++) {
329
+ const emitter = emitterScratch[i];
330
+ // Each emitter picks its own blend func: 'add' is the canonical fire/glow mode (the fragment
331
+ // shader premultiplies rgb by alpha, so ONE/ONE brightens and a black sprite background adds
332
+ // nothing). A hardcoded SRC_ALPHA over-blend instead makes an additive sprite darken the scene.
333
+ applyGlParticleBlendMode(gl, emitter.blendMode);
334
+ drawParticleEmitter3DNode(state, shader, emitter);
335
+ }
336
+ gl.depthMask(true);
337
+ gl.disable(gl.BLEND);
338
+ invalidateGlRenderStateCache(state);
339
+ }
340
+ const emitterScratch = [];
341
+ const shaderCache = new WeakMap();
342
+ //# sourceMappingURL=glParticleEmitter3D.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glParticleEmitter3D.js","sourceRoot":"","sources":["../src/glParticleEmitter3D.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { GlPbrDefineKey } from '@flighthq/types';
2
+ export declare function buildGlPbrDefineKey(key: Readonly<GlPbrDefineKey>): string;
3
+ export declare function buildGlPbrDefineSource(key: Readonly<GlPbrDefineKey>): string;
4
+ export declare function getGlPbrFragmentSource(): string;
5
+ export declare function getGlPbrFragmentSourceForKey(key: Readonly<GlPbrDefineKey>): string;
6
+ export declare function getGlPbrVertexSource(): string;
7
+ export declare function getGlPbrVertexSourceForKey(key: Readonly<GlPbrDefineKey>): string;
8
+ //# sourceMappingURL=glPbrPrelude.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glPbrPrelude.d.ts","sourceRoot":"","sources":["../src/glPbrPrelude.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAiCtD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,QAAQ,CAAC,cAAc,CAAC,GAAG,MAAM,CAmBzE;AAKD,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,QAAQ,CAAC,cAAc,CAAC,GAAG,MAAM,CAmB5E;AAKD,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AAID,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,QAAQ,CAAC,cAAc,CAAC,GAAG,MAAM,CAElF;AAKD,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAKD,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,QAAQ,CAAC,cAAc,CAAC,GAAG,MAAM,CAEhF"}