@luma.gl/webgl 9.0.0-alpha.3 → 9.0.0-alpha.30

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 (500) hide show
  1. package/LICENSE +2 -1
  2. package/dist/adapter/converters/device-parameters.d.ts +14 -4
  3. package/dist/adapter/converters/device-parameters.d.ts.map +1 -1
  4. package/dist/adapter/converters/device-parameters.js +28 -46
  5. package/dist/adapter/converters/device-parameters.js.map +1 -1
  6. package/dist/adapter/converters/sampler-parameters.d.ts +5 -5
  7. package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
  8. package/dist/adapter/converters/sampler-parameters.js +20 -56
  9. package/dist/adapter/converters/sampler-parameters.js.map +1 -1
  10. package/dist/adapter/converters/texture-formats.d.ts +31 -42
  11. package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
  12. package/dist/adapter/converters/texture-formats.js +163 -178
  13. package/dist/adapter/converters/texture-formats.js.map +1 -1
  14. package/dist/adapter/converters/vertex-formats.d.ts +2 -2
  15. package/dist/adapter/converters/vertex-formats.d.ts.map +1 -1
  16. package/dist/adapter/converters/vertex-formats.js +3 -9
  17. package/dist/adapter/converters/vertex-formats.js.map +1 -1
  18. package/dist/adapter/device-helpers/device-features.d.ts +1 -1
  19. package/dist/adapter/device-helpers/device-features.d.ts.map +1 -1
  20. package/dist/adapter/device-helpers/device-features.js +13 -20
  21. package/dist/adapter/device-helpers/device-features.js.map +1 -1
  22. package/dist/adapter/device-helpers/device-limits.d.ts +3 -3
  23. package/dist/adapter/device-helpers/device-limits.d.ts.map +1 -1
  24. package/dist/adapter/device-helpers/device-limits.js +2 -5
  25. package/dist/adapter/device-helpers/device-limits.js.map +1 -1
  26. package/dist/adapter/device-helpers/get-device-info.d.ts +1 -1
  27. package/dist/adapter/device-helpers/get-device-info.d.ts.map +1 -1
  28. package/dist/adapter/device-helpers/get-device-info.js +9 -11
  29. package/dist/adapter/device-helpers/get-device-info.js.map +1 -1
  30. package/dist/adapter/device-helpers/is-old-ie.js +2 -1
  31. package/dist/adapter/device-helpers/is-old-ie.js.map +1 -1
  32. package/dist/adapter/helpers/attribute-utils.d.ts +4 -4
  33. package/dist/adapter/helpers/attribute-utils.d.ts.map +1 -1
  34. package/dist/adapter/helpers/attribute-utils.js +1 -18
  35. package/dist/adapter/helpers/attribute-utils.js.map +1 -1
  36. package/dist/adapter/helpers/get-shader-info.d.ts +9 -0
  37. package/dist/adapter/helpers/get-shader-info.d.ts.map +1 -0
  38. package/dist/adapter/helpers/get-shader-info.js +25 -0
  39. package/dist/adapter/helpers/get-shader-info.js.map +1 -0
  40. package/dist/adapter/helpers/get-shader-layout.d.ts +10 -7
  41. package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
  42. package/dist/adapter/helpers/get-shader-layout.js +101 -84
  43. package/dist/adapter/helpers/get-shader-layout.js.map +1 -1
  44. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts +1 -1
  45. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts.map +1 -1
  46. package/dist/adapter/helpers/parse-shader-compiler-log.js +0 -7
  47. package/dist/adapter/helpers/parse-shader-compiler-log.js.map +1 -1
  48. package/dist/adapter/helpers/set-uniform.d.ts +2 -2
  49. package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
  50. package/dist/adapter/helpers/set-uniform.js +3 -33
  51. package/dist/adapter/helpers/set-uniform.js.map +1 -1
  52. package/dist/adapter/helpers/uniforms.d.ts +9 -10
  53. package/dist/adapter/helpers/uniforms.d.ts.map +1 -1
  54. package/dist/adapter/helpers/uniforms.js +8 -18
  55. package/dist/adapter/helpers/uniforms.js.map +1 -1
  56. package/dist/adapter/objects/constants-to-keys.d.ts +1 -3
  57. package/dist/adapter/objects/constants-to-keys.d.ts.map +1 -1
  58. package/dist/adapter/objects/constants-to-keys.js +1 -28
  59. package/dist/adapter/objects/constants-to-keys.js.map +1 -1
  60. package/dist/adapter/objects/webgl-renderbuffer.d.ts +15 -12
  61. package/dist/adapter/objects/webgl-renderbuffer.d.ts.map +1 -1
  62. package/dist/adapter/objects/webgl-renderbuffer.js +35 -41
  63. package/dist/adapter/objects/webgl-renderbuffer.js.map +1 -1
  64. package/dist/adapter/objects/webgl-resource.d.ts +6 -9
  65. package/dist/adapter/objects/webgl-resource.d.ts.map +1 -1
  66. package/dist/adapter/objects/webgl-resource.js +19 -75
  67. package/dist/adapter/objects/webgl-resource.js.map +1 -1
  68. package/dist/adapter/objects/webgl-vertex-array-object.d.ts +38 -11
  69. package/dist/adapter/objects/webgl-vertex-array-object.d.ts.map +1 -1
  70. package/dist/adapter/objects/webgl-vertex-array-object.js +122 -32
  71. package/dist/adapter/objects/webgl-vertex-array-object.js.map +1 -1
  72. package/dist/adapter/resources/webgl-buffer.d.ts +18 -10
  73. package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
  74. package/dist/adapter/resources/webgl-buffer.js +43 -71
  75. package/dist/adapter/resources/webgl-buffer.js.map +1 -1
  76. package/dist/adapter/resources/webgl-command-buffer.d.ts +15 -9
  77. package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
  78. package/dist/adapter/resources/webgl-command-buffer.js +169 -41
  79. package/dist/adapter/resources/webgl-command-buffer.js.map +1 -1
  80. package/dist/adapter/resources/webgl-command-encoder.d.ts +7 -6
  81. package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -1
  82. package/dist/adapter/resources/webgl-command-encoder.js +8 -17
  83. package/dist/adapter/resources/webgl-command-encoder.js.map +1 -1
  84. package/dist/adapter/resources/webgl-external-texture.js.map +1 -1
  85. package/dist/adapter/resources/webgl-framebuffer.d.ts +21 -24
  86. package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
  87. package/dist/adapter/resources/webgl-framebuffer.js +41 -149
  88. package/dist/adapter/resources/webgl-framebuffer.js.map +1 -1
  89. package/dist/adapter/resources/webgl-render-pass.d.ts +19 -4
  90. package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
  91. package/dist/adapter/resources/webgl-render-pass.js +88 -9
  92. package/dist/adapter/resources/webgl-render-pass.js.map +1 -1
  93. package/dist/adapter/resources/webgl-render-pipeline.d.ts +44 -11
  94. package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
  95. package/dist/adapter/resources/webgl-render-pipeline.js +90 -152
  96. package/dist/adapter/resources/webgl-render-pipeline.js.map +1 -1
  97. package/dist/adapter/resources/webgl-sampler.d.ts +6 -5
  98. package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
  99. package/dist/adapter/resources/webgl-sampler.js +7 -15
  100. package/dist/adapter/resources/webgl-sampler.js.map +1 -1
  101. package/dist/adapter/resources/webgl-shader.d.ts +3 -4
  102. package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
  103. package/dist/adapter/resources/webgl-shader.js +9 -22
  104. package/dist/adapter/resources/webgl-shader.js.map +1 -1
  105. package/dist/adapter/resources/webgl-texture.d.ts +64 -44
  106. package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
  107. package/dist/adapter/resources/webgl-texture.js +98 -213
  108. package/dist/adapter/resources/webgl-texture.js.map +1 -1
  109. package/dist/adapter/webgl-canvas-context.d.ts +6 -7
  110. package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
  111. package/dist/adapter/webgl-canvas-context.js +8 -20
  112. package/dist/adapter/webgl-canvas-context.js.map +1 -1
  113. package/dist/adapter/webgl-device.d.ts +64 -41
  114. package/dist/adapter/webgl-device.d.ts.map +1 -1
  115. package/dist/adapter/webgl-device.js +133 -113
  116. package/dist/adapter/webgl-device.js.map +1 -1
  117. package/dist/classic/accessor.d.ts +3 -3
  118. package/dist/classic/accessor.d.ts.map +1 -1
  119. package/dist/classic/accessor.js +14 -38
  120. package/dist/classic/accessor.js.map +1 -1
  121. package/dist/classic/{buffer.d.ts → buffer-with-accessor.d.ts} +16 -28
  122. package/dist/classic/buffer-with-accessor.d.ts.map +1 -0
  123. package/dist/classic/{buffer.js → buffer-with-accessor.js} +54 -122
  124. package/dist/classic/buffer-with-accessor.js.map +1 -0
  125. package/dist/classic/clear.d.ts +22 -0
  126. package/dist/classic/clear.d.ts.map +1 -0
  127. package/dist/classic/clear.js +88 -0
  128. package/dist/classic/clear.js.map +1 -0
  129. package/dist/classic/copy-and-blit.d.ts +62 -0
  130. package/dist/classic/copy-and-blit.d.ts.map +1 -0
  131. package/dist/classic/copy-and-blit.js +202 -0
  132. package/dist/classic/copy-and-blit.js.map +1 -0
  133. package/dist/classic/format-utils.d.ts +3 -0
  134. package/dist/classic/format-utils.d.ts.map +1 -0
  135. package/dist/classic/format-utils.js +38 -0
  136. package/dist/classic/format-utils.js.map +1 -0
  137. package/dist/classic/typed-array-utils.d.ts +15 -17
  138. package/dist/classic/typed-array-utils.d.ts.map +1 -1
  139. package/dist/classic/typed-array-utils.js +1 -21
  140. package/dist/classic/typed-array-utils.js.map +1 -1
  141. package/dist/context/context/create-browser-context.d.ts +40 -0
  142. package/dist/context/context/create-browser-context.d.ts.map +1 -0
  143. package/dist/{esm/context/context/create-context.js → context/context/create-browser-context.js} +23 -19
  144. package/dist/context/context/create-browser-context.js.map +1 -0
  145. package/dist/context/context/create-headless-context.d.ts +9 -0
  146. package/dist/context/context/create-headless-context.d.ts.map +1 -0
  147. package/dist/context/context/create-headless-context.js +42 -0
  148. package/dist/context/context/create-headless-context.js.map +1 -0
  149. package/dist/context/context/webgl-checks.js +1 -4
  150. package/dist/context/context/webgl-checks.js.map +1 -1
  151. package/dist/context/debug/spector.d.ts +1 -2
  152. package/dist/context/debug/spector.d.ts.map +1 -1
  153. package/dist/context/debug/spector.js +8 -20
  154. package/dist/context/debug/spector.js.map +1 -1
  155. package/dist/context/debug/webgl-developer-tools.d.ts +2 -2
  156. package/dist/context/debug/webgl-developer-tools.d.ts.map +1 -1
  157. package/dist/context/debug/webgl-developer-tools.js +11 -34
  158. package/dist/context/debug/webgl-developer-tools.js.map +1 -1
  159. package/dist/context/parameters/unified-parameter-api.d.ts +8 -7
  160. package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
  161. package/dist/context/parameters/unified-parameter-api.js +8 -18
  162. package/dist/context/parameters/unified-parameter-api.js.map +1 -1
  163. package/dist/context/parameters/webgl-parameter-tables.d.ts +105 -106
  164. package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
  165. package/dist/context/parameters/webgl-parameter-tables.js +18 -36
  166. package/dist/context/parameters/webgl-parameter-tables.js.map +1 -1
  167. package/dist/context/polyfill/context-data.d.ts +13 -0
  168. package/dist/context/polyfill/context-data.d.ts.map +1 -0
  169. package/dist/context/polyfill/context-data.js +12 -0
  170. package/dist/context/polyfill/context-data.js.map +1 -0
  171. package/dist/context/polyfill/get-parameter-polyfill.d.ts +1 -1
  172. package/dist/context/polyfill/get-parameter-polyfill.d.ts.map +1 -1
  173. package/dist/context/polyfill/get-parameter-polyfill.js +4 -9
  174. package/dist/context/polyfill/get-parameter-polyfill.js.map +1 -1
  175. package/dist/context/polyfill/polyfill-context.js +21 -29
  176. package/dist/context/polyfill/polyfill-context.js.map +1 -1
  177. package/dist/context/polyfill/polyfill-table.d.ts +8 -8
  178. package/dist/context/polyfill/polyfill-table.d.ts.map +1 -1
  179. package/dist/context/polyfill/polyfill-table.js +10 -32
  180. package/dist/context/polyfill/polyfill-table.js.map +1 -1
  181. package/dist/context/polyfill/polyfill-vertex-array-object.d.ts.map +1 -1
  182. package/dist/context/polyfill/polyfill-vertex-array-object.js +0 -70
  183. package/dist/context/polyfill/polyfill-vertex-array-object.js.map +1 -1
  184. package/dist/context/state-tracker/deep-array-equal.js +0 -4
  185. package/dist/context/state-tracker/deep-array-equal.js.map +1 -1
  186. package/dist/context/state-tracker/track-context-state.d.ts.map +1 -1
  187. package/dist/context/state-tracker/track-context-state.js +16 -51
  188. package/dist/context/state-tracker/track-context-state.js.map +1 -1
  189. package/dist/context/state-tracker/with-parameters.d.ts +2 -1
  190. package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
  191. package/dist/context/state-tracker/with-parameters.js +7 -9
  192. package/dist/context/state-tracker/with-parameters.js.map +1 -1
  193. package/dist/dist.dev.js +10158 -0
  194. package/dist/index.cjs +6604 -0
  195. package/dist/index.d.ts +25 -22
  196. package/dist/index.d.ts.map +1 -1
  197. package/dist/index.js +27 -26
  198. package/dist/index.js.map +1 -1
  199. package/dist/types.d.ts +1 -1
  200. package/dist/types.d.ts.map +1 -1
  201. package/dist/types.js.map +1 -1
  202. package/dist.min.js +37 -0
  203. package/package.json +21 -9
  204. package/src/adapter/converters/device-parameters.ts +88 -35
  205. package/src/adapter/converters/sampler-parameters.ts +19 -9
  206. package/src/adapter/converters/texture-formats.ts +261 -178
  207. package/src/adapter/converters/vertex-formats.ts +3 -2
  208. package/src/adapter/device-helpers/device-features.ts +10 -3
  209. package/src/adapter/device-helpers/device-limits.ts +3 -3
  210. package/src/adapter/device-helpers/get-device-info.ts +14 -10
  211. package/src/adapter/helpers/attribute-utils.ts +4 -5
  212. package/src/adapter/helpers/get-shader-info.ts +40 -0
  213. package/src/adapter/helpers/get-shader-layout.ts +150 -68
  214. package/src/adapter/helpers/parse-shader-compiler-log.ts +2 -2
  215. package/src/adapter/helpers/set-uniform.ts +7 -6
  216. package/src/adapter/helpers/uniforms.ts +23 -13
  217. package/src/adapter/objects/constants-to-keys.ts +3 -25
  218. package/src/adapter/objects/webgl-renderbuffer.ts +40 -37
  219. package/src/adapter/objects/webgl-resource.ts +14 -23
  220. package/src/adapter/objects/webgl-vertex-array-object.ts +201 -37
  221. package/src/adapter/resources/webgl-buffer.ts +56 -58
  222. package/src/adapter/resources/webgl-command-buffer.ts +332 -25
  223. package/src/adapter/resources/webgl-command-encoder.ts +16 -11
  224. package/src/adapter/resources/webgl-external-texture.ts +2 -2
  225. package/src/adapter/resources/webgl-framebuffer.ts +88 -133
  226. package/src/adapter/resources/webgl-render-pass.ts +155 -4
  227. package/src/adapter/resources/webgl-render-pipeline.ts +161 -104
  228. package/src/adapter/resources/webgl-sampler.ts +13 -8
  229. package/src/adapter/resources/webgl-shader.ts +11 -10
  230. package/src/adapter/resources/webgl-texture.ts +113 -85
  231. package/src/adapter/webgl-canvas-context.ts +14 -14
  232. package/src/adapter/webgl-device.ts +192 -77
  233. package/src/classic/accessor.ts +4 -17
  234. package/src/classic/{buffer.ts → buffer-with-accessor.ts} +67 -75
  235. package/src/classic/clear.ts +110 -0
  236. package/src/classic/copy-and-blit.ts +308 -0
  237. package/src/classic/format-utils.ts +43 -0
  238. package/src/classic/typed-array-utils.ts +18 -27
  239. package/src/context/context/{create-context.ts → create-browser-context.ts} +48 -31
  240. package/src/context/context/create-headless-context.ts +48 -0
  241. package/src/context/context/webgl-checks.ts +1 -1
  242. package/src/context/debug/spector.ts +7 -6
  243. package/src/context/debug/webgl-developer-tools.ts +21 -15
  244. package/src/context/parameters/unified-parameter-api.ts +20 -14
  245. package/src/context/parameters/webgl-parameter-tables.ts +117 -98
  246. package/src/context/polyfill/context-data.ts +27 -0
  247. package/src/context/polyfill/get-parameter-polyfill.ts +8 -7
  248. package/src/context/polyfill/polyfill-context.ts +7 -9
  249. package/src/context/polyfill/polyfill-table.ts +18 -16
  250. package/src/context/polyfill/polyfill-vertex-array-object.ts +2 -0
  251. package/src/context/state-tracker/track-context-state.ts +14 -13
  252. package/src/context/state-tracker/with-parameters.ts +8 -2
  253. package/src/index.ts +42 -33
  254. package/dist/adapter/converters/renderbuffer-formats.d.ts +0 -16
  255. package/dist/adapter/converters/renderbuffer-formats.d.ts.map +0 -1
  256. package/dist/adapter/converters/renderbuffer-formats.js +0 -185
  257. package/dist/adapter/converters/renderbuffer-formats.js.map +0 -1
  258. package/dist/bundle.d.ts +0 -2
  259. package/dist/bundle.d.ts.map +0 -1
  260. package/dist/bundle.js +0 -5
  261. package/dist/bundle.js.map +0 -1
  262. package/dist/classic/buffer.d.ts.map +0 -1
  263. package/dist/classic/buffer.js.map +0 -1
  264. package/dist/context/context/context-state.d.ts +0 -18
  265. package/dist/context/context/context-state.d.ts.map +0 -1
  266. package/dist/context/context/context-state.js +0 -26
  267. package/dist/context/context/context-state.js.map +0 -1
  268. package/dist/context/context/create-context.d.ts +0 -41
  269. package/dist/context/context/create-context.d.ts.map +0 -1
  270. package/dist/context/context/create-context.js +0 -49
  271. package/dist/context/context/create-context.js.map +0 -1
  272. package/dist/context/context/device-pixels.d.ts +0 -25
  273. package/dist/context/context/device-pixels.d.ts.map +0 -1
  274. package/dist/context/context/device-pixels.js +0 -98
  275. package/dist/context/context/device-pixels.js.map +0 -1
  276. package/dist/es5/adapter/converters/device-parameters.js +0 -170
  277. package/dist/es5/adapter/converters/device-parameters.js.map +0 -1
  278. package/dist/es5/adapter/converters/renderbuffer-formats.js +0 -163
  279. package/dist/es5/adapter/converters/renderbuffer-formats.js.map +0 -1
  280. package/dist/es5/adapter/converters/sampler-parameters.js +0 -226
  281. package/dist/es5/adapter/converters/sampler-parameters.js.map +0 -1
  282. package/dist/es5/adapter/converters/texture-formats.js +0 -1031
  283. package/dist/es5/adapter/converters/texture-formats.js.map +0 -1
  284. package/dist/es5/adapter/converters/vertex-formats.js +0 -45
  285. package/dist/es5/adapter/converters/vertex-formats.js.map +0 -1
  286. package/dist/es5/adapter/device-helpers/device-features.js +0 -144
  287. package/dist/es5/adapter/device-helpers/device-features.js.map +0 -1
  288. package/dist/es5/adapter/device-helpers/device-limits.js +0 -64
  289. package/dist/es5/adapter/device-helpers/device-limits.js.map +0 -1
  290. package/dist/es5/adapter/device-helpers/get-device-info.js +0 -55
  291. package/dist/es5/adapter/device-helpers/get-device-info.js.map +0 -1
  292. package/dist/es5/adapter/device-helpers/is-old-ie.js +0 -16
  293. package/dist/es5/adapter/device-helpers/is-old-ie.js.map +0 -1
  294. package/dist/es5/adapter/helpers/attribute-utils.js +0 -91
  295. package/dist/es5/adapter/helpers/attribute-utils.js.map +0 -1
  296. package/dist/es5/adapter/helpers/get-shader-layout.js +0 -371
  297. package/dist/es5/adapter/helpers/get-shader-layout.js.map +0 -1
  298. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js +0 -72
  299. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  300. package/dist/es5/adapter/helpers/set-uniform.js +0 -125
  301. package/dist/es5/adapter/helpers/set-uniform.js.map +0 -1
  302. package/dist/es5/adapter/helpers/uniforms.js +0 -112
  303. package/dist/es5/adapter/helpers/uniforms.js.map +0 -1
  304. package/dist/es5/adapter/objects/constants-to-keys.js +0 -54
  305. package/dist/es5/adapter/objects/constants-to-keys.js.map +0 -1
  306. package/dist/es5/adapter/objects/webgl-renderbuffer.js +0 -150
  307. package/dist/es5/adapter/objects/webgl-renderbuffer.js.map +0 -1
  308. package/dist/es5/adapter/objects/webgl-resource.js +0 -292
  309. package/dist/es5/adapter/objects/webgl-resource.js.map +0 -1
  310. package/dist/es5/adapter/objects/webgl-vertex-array-object.js +0 -137
  311. package/dist/es5/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  312. package/dist/es5/adapter/resources/webgl-buffer.js +0 -243
  313. package/dist/es5/adapter/resources/webgl-buffer.js.map +0 -1
  314. package/dist/es5/adapter/resources/webgl-command-buffer.js +0 -96
  315. package/dist/es5/adapter/resources/webgl-command-buffer.js.map +0 -1
  316. package/dist/es5/adapter/resources/webgl-command-encoder.js +0 -98
  317. package/dist/es5/adapter/resources/webgl-command-encoder.js.map +0 -1
  318. package/dist/es5/adapter/resources/webgl-external-texture.js +0 -2
  319. package/dist/es5/adapter/resources/webgl-external-texture.js.map +0 -1
  320. package/dist/es5/adapter/resources/webgl-framebuffer.js +0 -345
  321. package/dist/es5/adapter/resources/webgl-framebuffer.js.map +0 -1
  322. package/dist/es5/adapter/resources/webgl-render-pass.js +0 -61
  323. package/dist/es5/adapter/resources/webgl-render-pass.js.map +0 -1
  324. package/dist/es5/adapter/resources/webgl-render-pipeline.js +0 -505
  325. package/dist/es5/adapter/resources/webgl-render-pipeline.js.map +0 -1
  326. package/dist/es5/adapter/resources/webgl-sampler.js +0 -96
  327. package/dist/es5/adapter/resources/webgl-sampler.js.map +0 -1
  328. package/dist/es5/adapter/resources/webgl-shader.js +0 -149
  329. package/dist/es5/adapter/resources/webgl-shader.js.map +0 -1
  330. package/dist/es5/adapter/resources/webgl-texture.js +0 -986
  331. package/dist/es5/adapter/resources/webgl-texture.js.map +0 -1
  332. package/dist/es5/adapter/webgl-canvas-context.js +0 -97
  333. package/dist/es5/adapter/webgl-canvas-context.js.map +0 -1
  334. package/dist/es5/adapter/webgl-device.js +0 -399
  335. package/dist/es5/adapter/webgl-device.js.map +0 -1
  336. package/dist/es5/bundle.js +0 -7
  337. package/dist/es5/bundle.js.map +0 -1
  338. package/dist/es5/classic/accessor.js +0 -181
  339. package/dist/es5/classic/accessor.js.map +0 -1
  340. package/dist/es5/classic/buffer.js +0 -470
  341. package/dist/es5/classic/buffer.js.map +0 -1
  342. package/dist/es5/classic/typed-array-utils.js +0 -126
  343. package/dist/es5/classic/typed-array-utils.js.map +0 -1
  344. package/dist/es5/context/context/context-state.js +0 -31
  345. package/dist/es5/context/context/context-state.js.map +0 -1
  346. package/dist/es5/context/context/create-context.js +0 -69
  347. package/dist/es5/context/context/create-context.js.map +0 -1
  348. package/dist/es5/context/context/device-pixels.js +0 -115
  349. package/dist/es5/context/context/device-pixels.js.map +0 -1
  350. package/dist/es5/context/context/webgl-checks.js +0 -54
  351. package/dist/es5/context/context/webgl-checks.js.map +0 -1
  352. package/dist/es5/context/debug/spector.js +0 -133
  353. package/dist/es5/context/debug/spector.js.map +0 -1
  354. package/dist/es5/context/debug/webgl-developer-tools.js +0 -198
  355. package/dist/es5/context/debug/webgl-developer-tools.js.map +0 -1
  356. package/dist/es5/context/parameters/unified-parameter-api.js +0 -97
  357. package/dist/es5/context/parameters/unified-parameter-api.js.map +0 -1
  358. package/dist/es5/context/parameters/webgl-parameter-tables.js +0 -392
  359. package/dist/es5/context/parameters/webgl-parameter-tables.js.map +0 -1
  360. package/dist/es5/context/polyfill/get-parameter-polyfill.js +0 -81
  361. package/dist/es5/context/polyfill/get-parameter-polyfill.js.map +0 -1
  362. package/dist/es5/context/polyfill/polyfill-context.js +0 -135
  363. package/dist/es5/context/polyfill/polyfill-context.js.map +0 -1
  364. package/dist/es5/context/polyfill/polyfill-table.js +0 -166
  365. package/dist/es5/context/polyfill/polyfill-table.js.map +0 -1
  366. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js +0 -341
  367. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  368. package/dist/es5/context/state-tracker/deep-array-equal.js +0 -28
  369. package/dist/es5/context/state-tracker/deep-array-equal.js.map +0 -1
  370. package/dist/es5/context/state-tracker/track-context-state.js +0 -211
  371. package/dist/es5/context/state-tracker/track-context-state.js.map +0 -1
  372. package/dist/es5/context/state-tracker/with-parameters.js +0 -44
  373. package/dist/es5/context/state-tracker/with-parameters.js.map +0 -1
  374. package/dist/es5/index.js +0 -276
  375. package/dist/es5/index.js.map +0 -1
  376. package/dist/es5/init.js +0 -10
  377. package/dist/es5/init.js.map +0 -1
  378. package/dist/es5/types/webgl.js +0 -6
  379. package/dist/es5/types/webgl.js.map +0 -1
  380. package/dist/es5/types.js +0 -2
  381. package/dist/es5/types.js.map +0 -1
  382. package/dist/esm/adapter/converters/device-parameters.js +0 -155
  383. package/dist/esm/adapter/converters/device-parameters.js.map +0 -1
  384. package/dist/esm/adapter/converters/renderbuffer-formats.js +0 -185
  385. package/dist/esm/adapter/converters/renderbuffer-formats.js.map +0 -1
  386. package/dist/esm/adapter/converters/sampler-parameters.js +0 -208
  387. package/dist/esm/adapter/converters/sampler-parameters.js.map +0 -1
  388. package/dist/esm/adapter/converters/texture-formats.js +0 -954
  389. package/dist/esm/adapter/converters/texture-formats.js.map +0 -1
  390. package/dist/esm/adapter/converters/vertex-formats.js +0 -35
  391. package/dist/esm/adapter/converters/vertex-formats.js.map +0 -1
  392. package/dist/esm/adapter/device-helpers/device-features.js +0 -102
  393. package/dist/esm/adapter/device-helpers/device-features.js.map +0 -1
  394. package/dist/esm/adapter/device-helpers/device-limits.js +0 -91
  395. package/dist/esm/adapter/device-helpers/device-limits.js.map +0 -1
  396. package/dist/esm/adapter/device-helpers/get-device-info.js +0 -44
  397. package/dist/esm/adapter/device-helpers/get-device-info.js.map +0 -1
  398. package/dist/esm/adapter/device-helpers/is-old-ie.js +0 -8
  399. package/dist/esm/adapter/device-helpers/is-old-ie.js.map +0 -1
  400. package/dist/esm/adapter/helpers/attribute-utils.js +0 -81
  401. package/dist/esm/adapter/helpers/attribute-utils.js.map +0 -1
  402. package/dist/esm/adapter/helpers/get-shader-layout.js +0 -306
  403. package/dist/esm/adapter/helpers/get-shader-layout.js.map +0 -1
  404. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js +0 -37
  405. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  406. package/dist/esm/adapter/helpers/set-uniform.js +0 -115
  407. package/dist/esm/adapter/helpers/set-uniform.js.map +0 -1
  408. package/dist/esm/adapter/helpers/uniforms.js +0 -99
  409. package/dist/esm/adapter/helpers/uniforms.js.map +0 -1
  410. package/dist/esm/adapter/objects/constants-to-keys.js +0 -42
  411. package/dist/esm/adapter/objects/constants-to-keys.js.map +0 -1
  412. package/dist/esm/adapter/objects/webgl-renderbuffer.js +0 -94
  413. package/dist/esm/adapter/objects/webgl-renderbuffer.js.map +0 -1
  414. package/dist/esm/adapter/objects/webgl-resource.js +0 -216
  415. package/dist/esm/adapter/objects/webgl-resource.js.map +0 -1
  416. package/dist/esm/adapter/objects/webgl-vertex-array-object.js +0 -84
  417. package/dist/esm/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  418. package/dist/esm/adapter/resources/webgl-buffer.js +0 -164
  419. package/dist/esm/adapter/resources/webgl-buffer.js.map +0 -1
  420. package/dist/esm/adapter/resources/webgl-command-buffer.js +0 -65
  421. package/dist/esm/adapter/resources/webgl-command-buffer.js.map +0 -1
  422. package/dist/esm/adapter/resources/webgl-command-encoder.js +0 -53
  423. package/dist/esm/adapter/resources/webgl-command-encoder.js.map +0 -1
  424. package/dist/esm/adapter/resources/webgl-external-texture.js +0 -2
  425. package/dist/esm/adapter/resources/webgl-external-texture.js.map +0 -1
  426. package/dist/esm/adapter/resources/webgl-framebuffer.js +0 -265
  427. package/dist/esm/adapter/resources/webgl-framebuffer.js.map +0 -1
  428. package/dist/esm/adapter/resources/webgl-render-pass.js +0 -19
  429. package/dist/esm/adapter/resources/webgl-render-pass.js.map +0 -1
  430. package/dist/esm/adapter/resources/webgl-render-pipeline.js +0 -400
  431. package/dist/esm/adapter/resources/webgl-render-pipeline.js.map +0 -1
  432. package/dist/esm/adapter/resources/webgl-sampler.js +0 -50
  433. package/dist/esm/adapter/resources/webgl-sampler.js.map +0 -1
  434. package/dist/esm/adapter/resources/webgl-shader.js +0 -75
  435. package/dist/esm/adapter/resources/webgl-shader.js.map +0 -1
  436. package/dist/esm/adapter/resources/webgl-texture.js +0 -831
  437. package/dist/esm/adapter/resources/webgl-texture.js.map +0 -1
  438. package/dist/esm/adapter/webgl-canvas-context.js +0 -54
  439. package/dist/esm/adapter/webgl-canvas-context.js.map +0 -1
  440. package/dist/esm/adapter/webgl-device.js +0 -280
  441. package/dist/esm/adapter/webgl-device.js.map +0 -1
  442. package/dist/esm/bundle.js +0 -5
  443. package/dist/esm/bundle.js.map +0 -1
  444. package/dist/esm/classic/accessor.js +0 -144
  445. package/dist/esm/classic/accessor.js.map +0 -1
  446. package/dist/esm/classic/buffer.js +0 -384
  447. package/dist/esm/classic/buffer.js.map +0 -1
  448. package/dist/esm/classic/typed-array-utils.js +0 -112
  449. package/dist/esm/classic/typed-array-utils.js.map +0 -1
  450. package/dist/esm/context/context/context-state.js +0 -26
  451. package/dist/esm/context/context/context-state.js.map +0 -1
  452. package/dist/esm/context/context/create-context.js.map +0 -1
  453. package/dist/esm/context/context/device-pixels.js +0 -98
  454. package/dist/esm/context/context/device-pixels.js.map +0 -1
  455. package/dist/esm/context/context/webgl-checks.js +0 -34
  456. package/dist/esm/context/context/webgl-checks.js.map +0 -1
  457. package/dist/esm/context/debug/spector.js +0 -76
  458. package/dist/esm/context/debug/spector.js.map +0 -1
  459. package/dist/esm/context/debug/webgl-developer-tools.js +0 -121
  460. package/dist/esm/context/debug/webgl-developer-tools.js.map +0 -1
  461. package/dist/esm/context/parameters/unified-parameter-api.js +0 -65
  462. package/dist/esm/context/parameters/unified-parameter-api.js.map +0 -1
  463. package/dist/esm/context/parameters/webgl-parameter-tables.js +0 -445
  464. package/dist/esm/context/parameters/webgl-parameter-tables.js.map +0 -1
  465. package/dist/esm/context/polyfill/get-parameter-polyfill.js +0 -91
  466. package/dist/esm/context/polyfill/get-parameter-polyfill.js.map +0 -1
  467. package/dist/esm/context/polyfill/polyfill-context.js +0 -92
  468. package/dist/esm/context/polyfill/polyfill-context.js.map +0 -1
  469. package/dist/esm/context/polyfill/polyfill-table.js +0 -160
  470. package/dist/esm/context/polyfill/polyfill-table.js.map +0 -1
  471. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js +0 -335
  472. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  473. package/dist/esm/context/state-tracker/deep-array-equal.js +0 -21
  474. package/dist/esm/context/state-tracker/deep-array-equal.js.map +0 -1
  475. package/dist/esm/context/state-tracker/track-context-state.js +0 -183
  476. package/dist/esm/context/state-tracker/track-context-state.js.map +0 -1
  477. package/dist/esm/context/state-tracker/with-parameters.js +0 -36
  478. package/dist/esm/context/state-tracker/with-parameters.js.map +0 -1
  479. package/dist/esm/index.js +0 -27
  480. package/dist/esm/index.js.map +0 -1
  481. package/dist/esm/init.js +0 -4
  482. package/dist/esm/init.js.map +0 -1
  483. package/dist/esm/types/webgl.js +0 -2
  484. package/dist/esm/types/webgl.js.map +0 -1
  485. package/dist/esm/types.js +0 -2
  486. package/dist/esm/types.js.map +0 -1
  487. package/dist/init.d.ts +0 -2
  488. package/dist/init.d.ts.map +0 -1
  489. package/dist/init.js +0 -4
  490. package/dist/init.js.map +0 -1
  491. package/dist/types/webgl.d.ts +0 -144
  492. package/dist/types/webgl.d.ts.map +0 -1
  493. package/dist/types/webgl.js +0 -2
  494. package/dist/types/webgl.js.map +0 -1
  495. package/src/adapter/converters/renderbuffer-formats.ts +0 -92
  496. package/src/bundle.ts +0 -4
  497. package/src/context/context/context-state.ts +0 -41
  498. package/src/context/context/device-pixels.ts +0 -152
  499. package/src/init.ts +0 -4
  500. package/src/types/webgl.ts +0 -283
@@ -2,8 +2,7 @@
2
2
  // Provides a function that enables simple checking of which WebGL features are
3
3
  // available in an WebGL1 or WebGL2 environment.
4
4
 
5
- import {DeviceFeature} from '@luma.gl/api';
6
- import GL from '@luma.gl/constants';
5
+ import {DeviceFeature} from '@luma.gl/core';
7
6
  import {isWebGL2} from '../../context/context/webgl-checks';
8
7
  import {isOldIE} from './is-old-ie';
9
8
  import {getTextureFeatures, _checkFloat32ColorAttachment} from '../converters/texture-formats';
@@ -47,7 +46,12 @@ export function getWebGLFeatures(gl: WebGLRenderingContext): Set<DeviceFeature>
47
46
  }
48
47
 
49
48
  function isFeatureSupported(gl: WebGLRenderingContext, feature: DeviceFeature): boolean {
50
- const [webgl1Feature, webgl2Feature] = WEBGL_FEATURES[feature];;
49
+ const featureInfo = WEBGL_FEATURES[feature];
50
+ if (!featureInfo) {
51
+ return false;
52
+ }
53
+
54
+ const [webgl1Feature, webgl2Feature] = featureInfo || [];
51
55
 
52
56
  // Get extension name from table
53
57
  const featureDefinition = isWebGL2(gl) ? webgl2Feature : webgl1Feature;
@@ -100,6 +104,9 @@ export function canCompileGLSLExtension(gl: WebGLRenderingContext, extensionName
100
104
  const source = `#extension GL_${extensionName} : ${behavior}\nvoid main(void) {}`;
101
105
 
102
106
  const shader = gl.createShader(gl.VERTEX_SHADER);
107
+ if (!shader) {
108
+ throw new Error('shader');
109
+ }
103
110
  gl.shaderSource(shader, source);
104
111
  gl.compileShader(shader);
105
112
  const canCompile = gl.getShaderParameter(shader, gl.COMPILE_STATUS);
@@ -1,11 +1,11 @@
1
1
  // luma.gl, MIT license
2
- import type {DeviceLimits} from '@luma.gl/api';
3
- import GL from '@luma.gl/constants';
2
+ import type {DeviceLimits} from '@luma.gl/core';
3
+ import {GL} from '@luma.gl/constants';
4
4
  import {getWebGL2Context} from '../../context/context/webgl-checks';
5
5
 
6
6
  /** Populate a WebGPU style device limits */
7
7
  export function getDeviceLimits(gl: WebGLRenderingContext): DeviceLimits {
8
- const gl2: WebGL2RenderingContext = getWebGL2Context(gl);
8
+ const gl2: WebGL2RenderingContext | null = getWebGL2Context(gl);
9
9
  return {
10
10
  maxTextureDimension1D: 0, // WebGL does not support 1D textures
11
11
  maxTextureDimension2D: gl.getParameter(GL.MAX_TEXTURE_SIZE),
@@ -1,5 +1,5 @@
1
- import {DeviceInfo} from '@luma.gl/api';
2
- import GL from '@luma.gl/constants';
1
+ import {DeviceInfo} from '@luma.gl/core';
2
+ import {GL} from '@luma.gl/constants';
3
3
  import {isWebGL2} from '../../context/context/webgl-checks';
4
4
 
5
5
  /** @returns strings identifying the GPU vendor and driver. */
@@ -27,23 +27,27 @@ export function getDeviceInfo(gl: WebGLRenderingContext): DeviceInfo {
27
27
  };
28
28
  }
29
29
 
30
- function identifyGPUVendor(vendor: string, renderer: string): 'nvidia' | 'intel' | 'apple' | 'amd' | 'unknown' {
31
- if (vendor.match(/NVIDIA/i) || renderer.match(/NVIDIA/i)) {
30
+ function identifyGPUVendor(vendor: string, renderer: string): 'nvidia' | 'intel' | 'apple' | 'amd' | 'software' | 'unknown' {
31
+ if ((/NVIDIA/i.exec(vendor)) || (/NVIDIA/i.exec(renderer))) {
32
32
  return 'nvidia';
33
33
  }
34
- if (vendor.match(/INTEL/i) || renderer.match(/INTEL/i)) {
34
+ if ((/INTEL/i.exec(vendor)) || (/INTEL/i.exec(renderer))) {
35
35
  return 'intel';
36
36
  }
37
- if (vendor.match(/Apple/i) || renderer.match(/Apple/i)) {
37
+ if ((/Apple/i.exec(vendor)) || (/Apple/i.exec(renderer))) {
38
38
  return 'apple';
39
39
  }
40
40
  if (
41
- vendor.match(/AMD/i) ||
42
- renderer.match(/AMD/i) ||
43
- vendor.match(/ATI/i) ||
44
- renderer.match(/ATI/i)
41
+ (/AMD/i.exec(vendor)) ||
42
+ (/AMD/i.exec(renderer)) ||
43
+ (/ATI/i.exec(vendor)) ||
44
+ (/ATI/i.exec(renderer))
45
45
  ) {
46
46
  return 'amd';
47
47
  }
48
+ if ((/SwiftShader/i.exec(vendor)) || (/SwiftShader/i.exec(renderer))) {
49
+ return 'software';
50
+ }
51
+
48
52
  return 'unknown';
49
53
  }
@@ -1,8 +1,7 @@
1
- import GL from '@luma.gl/constants';
2
- import {GLDrawMode, GLPrimitive} from '../../types/webgl';
1
+ import {GL, GLPrimitiveTopology, GLPrimitive} from '@luma.gl/constants';
3
2
 
4
3
  // Counts the number of complete primitives given a number of vertices and a drawMode
5
- export function getPrimitiveDrawMode(drawMode: GLDrawMode): GLPrimitive {
4
+ export function getPrimitiveDrawMode(drawMode: GLPrimitiveTopology): GLPrimitive {
6
5
  switch (drawMode) {
7
6
  case GL.POINTS:
8
7
  return GL.POINTS;
@@ -24,7 +23,7 @@ export function getPrimitiveDrawMode(drawMode: GLDrawMode): GLPrimitive {
24
23
  }
25
24
 
26
25
  // Counts the number of complete "primitives" given a number of vertices and a drawMode
27
- export function getPrimitiveCount(options: {drawMode: GLDrawMode, vertexCount: number}): number {
26
+ export function getPrimitiveCount(options: {drawMode: GLPrimitiveTopology, vertexCount: number}): number {
28
27
  const {drawMode, vertexCount} = options;
29
28
  switch (drawMode) {
30
29
  case GL.POINTS:
@@ -45,7 +44,7 @@ export function getPrimitiveCount(options: {drawMode: GLDrawMode, vertexCount: n
45
44
  }
46
45
 
47
46
  // Counts the number of vertices after splitting the vertex stream into separate "primitives"
48
- export function getVertexCount(options: {drawMode: GLDrawMode, vertexCount: number}): number {
47
+ export function getVertexCount(options: {drawMode: GLPrimitiveTopology, vertexCount: number}): number {
49
48
  const {drawMode, vertexCount} = options;
50
49
  const primitiveCount = getPrimitiveCount({drawMode, vertexCount});
51
50
  switch (getPrimitiveDrawMode(drawMode)) {
@@ -0,0 +1,40 @@
1
+ // luma.gl, MIT license
2
+
3
+ // Note: This was the only dependency that made @luma.gl/webgl depend on @luma.gl/shadertools
4
+ // This file was coped from shadertools to avoid the dependency
5
+
6
+ /** Information extracted from shader source code */
7
+ export type ShaderInfo = {
8
+ name: string;
9
+ language: 'glsl' | 'wgsl';
10
+ version: number;
11
+ };
12
+
13
+ /** Extracts information from shader source code */
14
+ export function getShaderInfo(source: string, defaultName?: string): ShaderInfo {
15
+ return {
16
+ name: getShaderName(source, defaultName),
17
+ language: 'glsl',
18
+ version: getShaderVersion(source)
19
+ };
20
+ }
21
+
22
+ /** Extracts GLSLIFY style naming of shaders: `#define SHADER_NAME ...` */
23
+ function getShaderName(shader: string, defaultName: string = 'unnamed'): string {
24
+ const SHADER_NAME_REGEXP = /#define[\s*]SHADER_NAME[\s*]([A-Za-z0-9_-]+)[\s*]/;
25
+ const match = SHADER_NAME_REGEXP.exec(shader);
26
+ return match ? match[1] : defaultName;
27
+ }
28
+
29
+ /** returns GLSL shader version of given shader string */
30
+ function getShaderVersion(source: string): number {
31
+ let version = 100;
32
+ const words = source.match(/[^\s]+/g);
33
+ if (words && words.length >= 2 && words[0] === '#version') {
34
+ const v = parseInt(words[1], 10);
35
+ if (Number.isFinite(v)) {
36
+ version = v;
37
+ }
38
+ }
39
+ return version;
40
+ }
@@ -1,37 +1,42 @@
1
- import {
1
+ // luma.gl, MIT license
2
+
3
+ import type {
2
4
  ShaderLayout,
3
- BindingLayout,
5
+ AttributeLayout,
4
6
  UniformBinding,
5
7
  UniformBlockBinding,
6
- ProgramBindings,
7
8
  AttributeBinding,
8
9
  VaryingBinding,
9
- AttributeLayout,
10
- AccessorObject
11
- } from '@luma.gl/api';
12
- import GL from '@luma.gl/constants';
10
+ AccessorObject,
11
+ BufferMapping,
12
+ VertexFormat
13
+ } from '@luma.gl/core';
14
+ import {log} from '@luma.gl/core';
15
+ import {GL} from '@luma.gl/constants';
13
16
  import {isWebGL2} from '../../context/context/webgl-checks';
14
- import Accessor from '../../classic/accessor'; // TODO - should NOT depend on classic API
17
+ import {Accessor} from '../../classic/accessor'; // TODO - should NOT depend on classic API
15
18
  import {decodeUniformType, decodeAttributeType} from './uniforms';
16
19
  import {getVertexFormat} from '../converters/vertex-formats';
17
20
  import {isSamplerUniform} from './uniforms';
21
+
18
22
  /**
19
23
  * Extract metadata describing binding information for a program's shaders
20
24
  * Note: `linkProgram()` needs to have been called
21
25
  * (although linking does not need to have been successful).
22
26
  */
23
27
  export function getShaderLayout(gl: WebGLRenderingContext, program: WebGLProgram): ShaderLayout {
24
- const programBindings = getProgramBindings(gl, program);
25
-
26
28
  const shaderLayout: ShaderLayout = {
27
29
  attributes: [],
28
30
  bindings: []
29
31
  };
30
32
 
31
- for (const attribute of programBindings.attributes) {
33
+ const attributes: AttributeBinding[] = readAttributeBindings(gl, program);
34
+ for (const attribute of attributes) {
35
+ // TODO - multicolumn attributes like a matrix4 can be up to 16 elts...
36
+ const size = Math.min(attribute.accessor.size, 4);
32
37
  const format =
33
38
  // attribute.accessor.format ||
34
- getVertexFormat(attribute.accessor.type || GL.FLOAT, attribute.accessor.size);
39
+ getVertexFormat(attribute.accessor.type || GL.FLOAT, size);
35
40
  shaderLayout.attributes.push({
36
41
  name: attribute.name,
37
42
  location: attribute.location,
@@ -41,8 +46,9 @@ export function getShaderLayout(gl: WebGLRenderingContext, program: WebGLProgram
41
46
  }
42
47
 
43
48
  // Uniform blocks
44
- for (const uniformBlock of programBindings.uniformBlocks) {
45
- const uniforms = uniformBlock.uniforms.map((uniform) => ({
49
+ const uniformBlocks: UniformBlockBinding[] = readUniformBlocks(gl, program);
50
+ for (const uniformBlock of uniformBlocks) {
51
+ const uniforms = uniformBlock.uniforms.map(uniform => ({
46
52
  name: uniform.name,
47
53
  format: uniform.format,
48
54
  byteOffset: uniform.byteOffset,
@@ -59,8 +65,9 @@ export function getShaderLayout(gl: WebGLRenderingContext, program: WebGLProgram
59
65
  });
60
66
  }
61
67
 
68
+ const uniforms: UniformBinding[] = readUniformBindings(gl, program);
62
69
  let textureUnit = 0;
63
- for (const uniform of programBindings.uniforms) {
70
+ for (const uniform of uniforms) {
64
71
  if (isSamplerUniform(uniform.type)) {
65
72
  const {viewDimension, sampleType} = getSamplerInfo(uniform.type);
66
73
  shaderLayout.bindings.push({
@@ -77,38 +84,95 @@ export function getShaderLayout(gl: WebGLRenderingContext, program: WebGLProgram
77
84
  }
78
85
  }
79
86
 
80
- const uniforms = programBindings.uniforms?.filter((uniform) => uniform.location !== null) || [];
81
87
  if (uniforms.length) {
82
88
  shaderLayout.uniforms = uniforms;
83
89
  }
84
- if (programBindings.varyings?.length) {
85
- shaderLayout.varyings = programBindings.varyings;
90
+
91
+ // Varyings
92
+ const varyings: VaryingBinding[] = readVaryings(gl, program);
93
+ // Note - samplers are always in unform bindings, even if uniform blocks are used
94
+ if (varyings?.length) {
95
+ shaderLayout.varyings = varyings;
86
96
  }
87
97
 
88
98
  return shaderLayout;
89
99
  }
90
100
 
91
101
  /**
92
- * Extract metadata describing binding information for a program's shaders
93
- * Note: `linkProgram()` needs to have been called
94
- * (although linking does not need to have been successful).
102
+ * Merges an provided shader layout into a base shader layout
103
+ * In WebGL, this allows the auto generated shader layout to be overridden by the application
104
+ * Typically to change the format of the vertex attributes (from float32x4 to uint8x4 etc).
105
+ * @todo Drop this? This could also be done more clearly with bufferMapping
95
106
  */
96
- export function getProgramBindings(
97
- gl: WebGLRenderingContext,
98
- program: WebGLProgram
99
- ): ProgramBindings {
100
- const config: ProgramBindings = {
101
- attributes: readAttributeBindings(gl, program),
102
- uniforms: readUniformBindings(gl, program),
103
- uniformBlocks: readUniformBlocks(gl, program),
104
- varyings: readVaryings(gl, program)
107
+ export function mergeShaderLayout(
108
+ baseLayout: ShaderLayout,
109
+ overrideLayout: ShaderLayout
110
+ ): ShaderLayout {
111
+ // Deep clone the base layout
112
+ const mergedLayout: ShaderLayout = {
113
+ ...baseLayout,
114
+ attributes: baseLayout.attributes.map(attribute => ({...attribute}))
105
115
  };
116
+ // Merge the attributes
117
+ for (const attribute of overrideLayout?.attributes || []) {
118
+ const baseAttribute = mergedLayout.attributes.find(attr => attr.name === attribute.name);
119
+ if (!baseAttribute) {
120
+ log.warn(`shader layout attribute ${attribute.name} not present in shader`);
121
+ } else {
122
+ baseAttribute.format = attribute.format || baseAttribute.format;
123
+ baseAttribute.stepMode = attribute.stepMode || baseAttribute.stepMode;
124
+ }
125
+ }
126
+ return mergedLayout;
127
+ }
106
128
 
107
- Object.seal(config);
108
- return config;
109
- // generateWebGPUStyleBindings(bindings);
129
+ export function mergeBufferMap(baseLayout: ShaderLayout, bufferMap: BufferMapping[]): ShaderLayout {
130
+ // Deep clone the base layout
131
+ const mergedLayout: ShaderLayout = {
132
+ ...baseLayout,
133
+ attributes: baseLayout.attributes.map(attribute => ({...attribute}))
134
+ };
135
+ for (const bufferMapping of bufferMap) {
136
+ // Handle interleave
137
+ switch (bufferMapping.type) {
138
+ case 'interleave':
139
+ // Handle interleaved buffer mapping
140
+ for (const attributeOverride of bufferMapping.attributes) {
141
+ overrideShaderLayoutAttribute(mergedLayout, attributeOverride);
142
+ }
143
+ break;
144
+
145
+ default:
146
+ // Handle simple attribute overrides
147
+ overrideShaderLayoutAttribute(mergedLayout, bufferMapping);
148
+ }
149
+ }
150
+ return mergedLayout;
110
151
  }
111
152
 
153
+ function overrideShaderLayoutAttribute(
154
+ layout: ShaderLayout,
155
+ attributeOverride: {name: string; format?: VertexFormat}
156
+ ): void {
157
+ const attribute = getAttributeFromLayout(layout, attributeOverride.name);
158
+ if (attribute && attributeOverride.format) {
159
+ attribute.format = attributeOverride.format;
160
+ }
161
+ }
162
+
163
+ export function getAttributeFromLayout(
164
+ shaderLayout: ShaderLayout,
165
+ name: string
166
+ ): AttributeLayout | null {
167
+ const attribute = shaderLayout.attributes.find(attr => attr.name === name);
168
+ if (!attribute) {
169
+ log.warn(`shader layout attribute "${name}" not present in shader`);
170
+ }
171
+ return attribute || null;
172
+ }
173
+
174
+ // HELPERS
175
+
112
176
  /**
113
177
  * Extract info about all transform feedback varyings
114
178
  *
@@ -123,7 +187,11 @@ function readAttributeBindings(
123
187
  const count = gl.getProgramParameter(program, gl.ACTIVE_ATTRIBUTES);
124
188
 
125
189
  for (let index = 0; index < count; index++) {
126
- const {name, type: compositeType, size} = gl.getActiveAttrib(program, index);
190
+ const activeInfo = gl.getActiveAttrib(program, index);
191
+ if (!activeInfo) {
192
+ throw new Error('activeInfo');
193
+ }
194
+ const {name, type: compositeType, size} = activeInfo;
127
195
  const location = gl.getAttribLocation(program, name);
128
196
  // Add only user provided attributes, for built-in attributes like
129
197
  // `gl_InstanceID` locaiton will be < 0
@@ -158,7 +226,11 @@ function readVaryings(gl: WebGLRenderingContext, program: WebGLProgram): Varying
158
226
 
159
227
  const count = gl.getProgramParameter(program, GL.TRANSFORM_FEEDBACK_VARYINGS);
160
228
  for (let location = 0; location < count; location++) {
161
- const {name, type: compositeType, size} = gl2.getTransformFeedbackVarying(program, location);
229
+ const activeInfo = gl2.getTransformFeedbackVarying(program, location);
230
+ if (!activeInfo) {
231
+ throw new Error('activeInfo');
232
+ }
233
+ const {name, type: compositeType, size} = activeInfo;
162
234
  const {glType, components} = decodeUniformType(compositeType);
163
235
  const accessor = new Accessor({type: glType, size: size * components});
164
236
  const varying = {location, name, accessor}; // Base values
@@ -179,7 +251,11 @@ function readUniformBindings(gl: WebGLRenderingContext, program: WebGLProgram):
179
251
 
180
252
  const uniformCount = gl.getProgramParameter(program, GL.ACTIVE_UNIFORMS);
181
253
  for (let i = 0; i < uniformCount; i++) {
182
- const {name: rawName, size, type} = gl.getActiveUniform(program, i);
254
+ const activeInfo = gl.getActiveUniform(program, i);
255
+ if (!activeInfo) {
256
+ throw new Error('activeInfo');
257
+ }
258
+ const {name: rawName, size, type} = activeInfo;
183
259
  const {name, isArray} = parseUniformName(rawName);
184
260
  let webglLocation = gl.getUniformLocation(program, name);
185
261
  const uniformInfo = {
@@ -234,8 +310,8 @@ function readUniformBlocks(
234
310
 
235
311
  const blockCount = gl2.getProgramParameter(program, GL.ACTIVE_UNIFORM_BLOCKS);
236
312
  for (let blockIndex = 0; blockIndex < blockCount; blockIndex++) {
237
- const blockInfo = {
238
- name: gl2.getActiveUniformBlockName(program, blockIndex),
313
+ const blockInfo: UniformBlockBinding = {
314
+ name: gl2.getActiveUniformBlockName(program, blockIndex) || '',
239
315
  location: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_BINDING),
240
316
  byteLength: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_DATA_SIZE),
241
317
  vertex: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER),
@@ -244,33 +320,39 @@ function readUniformBlocks(
244
320
  uniforms: [] as any[]
245
321
  };
246
322
 
247
- const uniformIndices = getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES);
323
+ const uniformIndices =
324
+ (getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES) as number[]) || [];
248
325
 
249
326
  const uniformType = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_TYPE); // Array of GLenum indicating the types of the uniforms.
250
327
  const uniformArrayLength = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_SIZE); // Array of GLuint indicating the sizes of the uniforms.
251
- const uniformBlockIndex = gl2.getActiveUniforms(
252
- program,
253
- uniformIndices,
254
- GL.UNIFORM_BLOCK_INDEX
255
- ); // Array of GLint indicating the block indices of the uniforms.
328
+ // const uniformBlockIndex = gl2.getActiveUniforms(
329
+ // program,
330
+ // uniformIndices,
331
+ // GL.UNIFORM_BLOCK_INDEX
332
+ // ); // Array of GLint indicating the block indices of the uniforms.
256
333
  const uniformOffset = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_OFFSET); // Array of GLint indicating the uniform buffer offsets.
257
334
  const uniformStride = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_ARRAY_STRIDE); // Array of GLint indicating the strides between the elements.
258
- const uniformMatrixStride = gl2.getActiveUniforms(
259
- program,
260
- uniformIndices,
261
- GL.UNIFORM_MATRIX_STRIDE
262
- ); // Array of GLint indicating the strides between columns of a column-major matrix or a row-major matrix.
263
- const uniformRowMajor = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_IS_ROW_MAJOR);
335
+ // const uniformMatrixStride = gl2.getActiveUniforms(
336
+ // program,
337
+ // uniformIndices,
338
+ // GL.UNIFORM_MATRIX_STRIDE
339
+ // ); // Array of GLint indicating the strides between columns of a column-major matrix or a row-major matrix.
340
+ // const uniformRowMajor = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_IS_ROW_MAJOR);
264
341
  for (let i = 0; i < blockInfo.uniformCount; ++i) {
342
+ const activeInfo = gl2.getActiveUniform(program, uniformIndices[i]);
343
+ if (!activeInfo) {
344
+ throw new Error('activeInfo');
345
+ }
346
+
265
347
  blockInfo.uniforms.push({
266
- name: gl2.getActiveUniform(program, uniformIndices[i]).name,
348
+ name: activeInfo.name,
267
349
  format: decodeUniformType(uniformType[i]).format,
268
350
  type: uniformType[i],
269
351
  arrayLength: uniformArrayLength[i],
270
352
  byteOffset: uniformOffset[i],
271
- byteStride: uniformStride[i],
272
- matrixStride: uniformStride[i],
273
- rowMajor: uniformRowMajor[i]
353
+ byteStride: uniformStride[i]
354
+ // matrixStride: uniformStride[i],
355
+ // rowMajor: uniformRowMajor[i]
274
356
  });
275
357
  }
276
358
 
@@ -305,18 +387,18 @@ const SAMPLER_UNIFORMS_GL_TO_GPU: Record<
305
387
  [GL.UNSIGNED_INT_SAMPLER_2D_ARRAY]: ['2d-array', 'uint']
306
388
  };
307
389
 
308
- function getSamplerInfo(type: GL):
309
- | {
310
- viewDimension: '1d' | '2d' | '2d-array' | 'cube' | 'cube-array' | '3d';
311
- sampleType: 'float' | 'unfilterable-float' | 'depth' | 'sint' | 'uint';
312
- }
313
- | undefined {
314
- let sampler = SAMPLER_UNIFORMS_GL_TO_GPU[type];
315
- if (sampler) {
316
- const [viewDimension, sampleType] = sampler;
317
- return {viewDimension, sampleType};
390
+ type SamplerInfo = {
391
+ viewDimension: '1d' | '2d' | '2d-array' | 'cube' | 'cube-array' | '3d';
392
+ sampleType: 'float' | 'unfilterable-float' | 'depth' | 'sint' | 'uint';
393
+ };
394
+
395
+ function getSamplerInfo(type: GL): SamplerInfo {
396
+ const sampler = SAMPLER_UNIFORMS_GL_TO_GPU[type];
397
+ if (!sampler) {
398
+ throw new Error('sampler');
318
399
  }
319
- return null;
400
+ const [viewDimension, sampleType] = sampler;
401
+ return {viewDimension, sampleType};
320
402
  }
321
403
 
322
404
  // HELPERS
@@ -333,7 +415,7 @@ function parseUniformName(name: string): {name: string; length: number; isArray:
333
415
 
334
416
  // if array name then clean the array brackets
335
417
  const UNIFORM_NAME_REGEXP = /([^[]*)(\[[0-9]+\])?/;
336
- const matches = name.match(UNIFORM_NAME_REGEXP);
418
+ const matches = UNIFORM_NAME_REGEXP.exec(name);
337
419
  if (!matches || matches.length < 2) {
338
420
  throw new Error(`Failed to parse GLSL uniform name ${name}`);
339
421
  }
@@ -347,11 +429,11 @@ function parseUniformName(name: string): {name: string; length: number; isArray:
347
429
 
348
430
  /**
349
431
  * TODO - verify this is a copy of above and delete
350
- * import type {TextureFormat} from '@luma.gl/api';
432
+ * import type {TextureFormat} from '@luma.gl/core';
351
433
  * Extract info about all "active" uniform blocks
352
434
  * ("Active" just means that unused (inactive) blocks may have been optimized away during linking)
353
435
  *
354
- function getUniformBlockBindings(gl, program): Binding[] {
436
+ function getUniformBlockBindings(gl: WebGLRenderingContext, program): Binding[] {
355
437
  if (!isWebGL2(gl)) {
356
438
  return;
357
439
  }
@@ -1,5 +1,5 @@
1
1
  // luma.gl, MIT license
2
- import type {CompilerMessage} from '@luma.gl/shadertools';
2
+ import type {CompilerMessage} from '@luma.gl/core';
3
3
 
4
4
  const MESSAGE_TYPES = ['warning', 'error', 'info'];
5
5
 
@@ -16,7 +16,7 @@ export function parseShaderCompilerLog(errLog: string) : readonly CompilerMessag
16
16
 
17
17
  for (const line of lines) {
18
18
  if (line.length <= 1) {
19
- continue;
19
+ continue; // eslint-disable-line no-continue
20
20
  }
21
21
 
22
22
  const segments: string[] = line.split(':');
@@ -1,5 +1,7 @@
1
+ /* eslint-disable */
2
+
1
3
  // Uniforms
2
- import GL from '@luma.gl/constants';
4
+ import {GL} from '@luma.gl/constants';
3
5
 
4
6
  /** Set a raw uniform (without type conversion and caching) */
5
7
  /* eslint-disable max-len */
@@ -7,7 +9,7 @@ export function setUniform(
7
9
  gl: WebGLRenderingContext,
8
10
  location: WebGLUniformLocation,
9
11
  type: GL,
10
- value: number | Float32Array | Int32Array | Uint32Array
12
+ value: number | Float32Array | Int32Array | Uint32Array | boolean
11
13
  ): void {
12
14
  const gl2 = gl as WebGL2RenderingContext;
13
15
 
@@ -35,13 +37,12 @@ export function setUniform(
35
37
  }
36
38
  }
37
39
 
38
- // @ts-expect-error
39
40
  if (value === true) {
40
41
  value = 1;
41
42
  }
42
- // @ts-expect-error
43
+
43
44
  if (value === false) {
44
- value = 1;
45
+ value = 0;
45
46
  }
46
47
  const arrayValue = (typeof value === 'number') ? [value] : value;
47
48
 
@@ -60,7 +61,7 @@ export function setUniform(
60
61
  case GL.BOOL: return gl.uniform1iv(location, arrayValue);
61
62
  case GL.BOOL_VEC2: return gl.uniform2iv(location, arrayValue);
62
63
  case GL.BOOL_VEC3: return gl.uniform3iv(location, arrayValue);
63
- case GL.BOOL_VEC4: gl.uniform4iv(location, arrayValue);
64
+ case GL.BOOL_VEC4: return gl.uniform4iv(location, arrayValue);
64
65
 
65
66
  // WEBGL2 - unsigned integers
66
67
  case GL.UNSIGNED_INT: return gl2.uniform1uiv(location, arrayValue, 1);
@@ -1,6 +1,5 @@
1
- import {UniformFormat, VertexFormat} from '@luma.gl/api';
2
- import GL from '@luma.gl/constants';
3
- import {GLUniformType, GLSamplerType, GLCompositeType, GLType} from '../../types/webgl'
1
+ import {UniformFormat, VertexFormat} from '@luma.gl/core';
2
+ import {GL, GLUniformType, GLSamplerType, GLCompositeType, GLDataType} from '@luma.gl/constants';
4
3
 
5
4
  /** Check is uniform is of sampler type */
6
5
  export function isSamplerUniform(type: GLUniformType): boolean {
@@ -25,8 +24,11 @@ const SAMPLER_TYPES: GLSamplerType[] = [
25
24
  GL.UNSIGNED_INT_SAMPLER_2D_ARRAY
26
25
  ];
27
26
 
28
- // Composite types table
29
- const COMPOSITE_GL_TYPES: Record<GLCompositeType, [GLType, number, string, UniformFormat, VertexFormat?]> = {
27
+ // Composite types table
28
+ const COMPOSITE_GL_TYPES: Record<
29
+ GLCompositeType,
30
+ [GLDataType, number, string, UniformFormat, VertexFormat?]
31
+ > = {
30
32
  [GL.FLOAT]: [GL.FLOAT, 1, 'float', 'f32', 'float32'],
31
33
  [GL.FLOAT_VEC2]: [GL.FLOAT, 2, 'vec2', 'vec2<f32>', 'float32x2'],
32
34
  [GL.FLOAT_VEC3]: [GL.FLOAT, 3, 'vec3', 'vec3<f32>', 'float32x3'],
@@ -61,27 +63,35 @@ const COMPOSITE_GL_TYPES: Record<GLCompositeType, [GLType, number, string, Unifo
61
63
  };
62
64
 
63
65
  /** Decomposes a composite type GL.VEC3 into a basic type (GL.FLOAT) and components (3) */
64
- export function decodeUniformType(uniformType: GL): {format: UniformFormat, components: number, glType: GLType} {
66
+ export function decodeUniformType(
67
+ uniformType: GL
68
+ ): {format: UniformFormat; components: number; glType: GLDataType} {
65
69
  const typeAndSize = COMPOSITE_GL_TYPES[uniformType];
66
70
  if (!typeAndSize) {
67
- return null;
71
+ throw new Error('uniform');
68
72
  }
69
73
  const [glType, components, , format] = typeAndSize;
70
74
  return {format, components, glType};
71
75
  }
72
76
 
73
- export function decodeAttributeType(uniformType: GL): {format: VertexFormat, components: number, glType: GLType} {
74
- const typeAndSize = COMPOSITE_GL_TYPES[uniformType];
77
+ export function decodeAttributeType(attributeType: GL): {
78
+ format: VertexFormat;
79
+ components: number;
80
+ glType: GLDataType;
81
+ } {
82
+ const typeAndSize = COMPOSITE_GL_TYPES[attributeType];
75
83
  if (!typeAndSize) {
76
- return null;
84
+ throw new Error('attribute')
77
85
  }
78
86
  const [glType, components, , , format] = typeAndSize;
79
87
  return {format, components, glType};
80
88
  }
81
89
 
82
90
  /** Decomposes a composite type GL.VEC3 into a basic type (GL.FLOAT) and components (3) */
83
- export function decomposeCompositeGLType(compositeGLType: GLCompositeType): {type: GLType, components: number} | null {
84
- const typeAndSize = COMPOSITE_GL_TYPES[compositeGLType];
91
+ export function decomposeCompositeGLDataType(
92
+ compositeGLDataType: GLCompositeType
93
+ ): {type: GLDataType; components: number} | null {
94
+ const typeAndSize = COMPOSITE_GL_TYPES[compositeGLDataType];
85
95
  if (!typeAndSize) {
86
96
  return null;
87
97
  }
@@ -89,7 +99,7 @@ export function decomposeCompositeGLType(compositeGLType: GLCompositeType): {typ
89
99
  return {type, components};
90
100
  }
91
101
 
92
- export function getCompositeGLType(type: GL, components): {glType: GLType, name: string} | null {
102
+ export function getCompositeGLDataType(type: GL, components): {glType: GLDataType; name: string} | null {
93
103
  switch (type) {
94
104
  case GL.BYTE:
95
105
  case GL.UNSIGNED_BYTE: