@luma.gl/webgl 9.0.0-alpha.5 → 9.0.0-alpha.50

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 (531) hide show
  1. package/LICENSE +3 -1
  2. package/dist/adapter/converters/device-parameters.d.ts +23 -4
  3. package/dist/adapter/converters/device-parameters.d.ts.map +1 -1
  4. package/dist/adapter/converters/device-parameters.js +101 -73
  5. package/dist/adapter/converters/device-parameters.js.map +1 -1
  6. package/dist/adapter/converters/sampler-parameters.d.ts +6 -6
  7. package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
  8. package/dist/adapter/converters/sampler-parameters.js +74 -111
  9. package/dist/adapter/converters/sampler-parameters.js.map +1 -1
  10. package/dist/adapter/converters/shader-formats.d.ts +9 -0
  11. package/dist/adapter/converters/shader-formats.d.ts.map +1 -0
  12. package/dist/adapter/converters/shader-formats.js +52 -0
  13. package/dist/adapter/converters/shader-formats.js.map +1 -0
  14. package/dist/adapter/converters/texture-formats.d.ts +32 -44
  15. package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
  16. package/dist/adapter/converters/texture-formats.js +309 -346
  17. package/dist/adapter/converters/texture-formats.js.map +1 -1
  18. package/dist/adapter/converters/vertex-formats.d.ts +9 -3
  19. package/dist/adapter/converters/vertex-formats.d.ts.map +1 -1
  20. package/dist/adapter/converters/vertex-formats.js +53 -22
  21. package/dist/adapter/converters/vertex-formats.js.map +1 -1
  22. package/dist/adapter/device-helpers/device-features.d.ts +1 -1
  23. package/dist/adapter/device-helpers/device-features.d.ts.map +1 -1
  24. package/dist/adapter/device-helpers/device-features.js +17 -23
  25. package/dist/adapter/device-helpers/device-features.js.map +1 -1
  26. package/dist/adapter/device-helpers/device-limits.d.ts +3 -3
  27. package/dist/adapter/device-helpers/device-limits.d.ts.map +1 -1
  28. package/dist/adapter/device-helpers/device-limits.js +54 -58
  29. package/dist/adapter/device-helpers/device-limits.js.map +1 -1
  30. package/dist/adapter/device-helpers/get-device-info.d.ts +1 -1
  31. package/dist/adapter/device-helpers/get-device-info.d.ts.map +1 -1
  32. package/dist/adapter/device-helpers/get-device-info.js +31 -22
  33. package/dist/adapter/device-helpers/get-device-info.js.map +1 -1
  34. package/dist/adapter/device-helpers/is-old-ie.d.ts.map +1 -1
  35. package/dist/adapter/device-helpers/is-old-ie.js +2 -1
  36. package/dist/adapter/device-helpers/is-old-ie.js.map +1 -1
  37. package/dist/adapter/helpers/decode-webgl-types.d.ts +26 -0
  38. package/dist/adapter/helpers/decode-webgl-types.d.ts.map +1 -0
  39. package/dist/adapter/helpers/decode-webgl-types.js +89 -0
  40. package/dist/adapter/helpers/decode-webgl-types.js.map +1 -0
  41. package/dist/adapter/helpers/get-shader-info.d.ts +9 -0
  42. package/dist/adapter/helpers/get-shader-info.d.ts.map +1 -0
  43. package/dist/adapter/helpers/get-shader-info.js +25 -0
  44. package/dist/adapter/helpers/get-shader-info.js.map +1 -0
  45. package/dist/adapter/helpers/get-shader-layout.d.ts +1 -48
  46. package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
  47. package/dist/adapter/helpers/get-shader-layout.js +87 -143
  48. package/dist/adapter/helpers/get-shader-layout.js.map +1 -1
  49. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts +1 -1
  50. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts.map +1 -1
  51. package/dist/adapter/helpers/parse-shader-compiler-log.js +16 -11
  52. package/dist/adapter/helpers/parse-shader-compiler-log.js.map +1 -1
  53. package/dist/adapter/helpers/set-uniform.d.ts +3 -2
  54. package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
  55. package/dist/adapter/helpers/set-uniform.js +51 -82
  56. package/dist/adapter/helpers/set-uniform.js.map +1 -1
  57. package/dist/adapter/helpers/webgl-topology-utils.d.ts +16 -0
  58. package/dist/adapter/helpers/webgl-topology-utils.d.ts.map +1 -0
  59. package/dist/adapter/helpers/webgl-topology-utils.js +103 -0
  60. package/dist/adapter/helpers/webgl-topology-utils.js.map +1 -0
  61. package/dist/adapter/objects/constants-to-keys.d.ts +1 -3
  62. package/dist/adapter/objects/constants-to-keys.d.ts.map +1 -1
  63. package/dist/adapter/objects/constants-to-keys.js +2 -29
  64. package/dist/adapter/objects/constants-to-keys.js.map +1 -1
  65. package/dist/adapter/objects/webgl-renderbuffer.d.ts +15 -12
  66. package/dist/adapter/objects/webgl-renderbuffer.d.ts.map +1 -1
  67. package/dist/adapter/objects/webgl-renderbuffer.js +36 -44
  68. package/dist/adapter/objects/webgl-renderbuffer.js.map +1 -1
  69. package/dist/adapter/objects/webgl-resource.d.ts +6 -9
  70. package/dist/adapter/objects/webgl-resource.d.ts.map +1 -1
  71. package/dist/adapter/objects/webgl-resource.js +26 -83
  72. package/dist/adapter/objects/webgl-resource.js.map +1 -1
  73. package/dist/adapter/resources/webgl-buffer.d.ts +19 -11
  74. package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
  75. package/dist/adapter/resources/webgl-buffer.js +60 -88
  76. package/dist/adapter/resources/webgl-buffer.js.map +1 -1
  77. package/dist/adapter/resources/webgl-command-buffer.d.ts +15 -9
  78. package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
  79. package/dist/adapter/resources/webgl-command-buffer.js +175 -48
  80. package/dist/adapter/resources/webgl-command-buffer.js.map +1 -1
  81. package/dist/adapter/resources/webgl-command-encoder.d.ts +7 -6
  82. package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -1
  83. package/dist/adapter/resources/webgl-command-encoder.js +10 -20
  84. package/dist/adapter/resources/webgl-command-encoder.js.map +1 -1
  85. package/dist/adapter/resources/webgl-external-texture.js.map +1 -1
  86. package/dist/adapter/resources/webgl-framebuffer.d.ts +21 -24
  87. package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
  88. package/dist/adapter/resources/webgl-framebuffer.js +63 -173
  89. package/dist/adapter/resources/webgl-framebuffer.js.map +1 -1
  90. package/dist/adapter/resources/webgl-render-pass.d.ts +19 -4
  91. package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
  92. package/dist/adapter/resources/webgl-render-pass.js +99 -11
  93. package/dist/adapter/resources/webgl-render-pass.js.map +1 -1
  94. package/dist/adapter/resources/webgl-render-pipeline.d.ts +55 -21
  95. package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
  96. package/dist/adapter/resources/webgl-render-pipeline.js +108 -270
  97. package/dist/adapter/resources/webgl-render-pipeline.js.map +1 -1
  98. package/dist/adapter/resources/webgl-sampler.d.ts +6 -5
  99. package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
  100. package/dist/adapter/resources/webgl-sampler.js +11 -21
  101. package/dist/adapter/resources/webgl-sampler.js.map +1 -1
  102. package/dist/adapter/resources/webgl-shader.d.ts +3 -4
  103. package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
  104. package/dist/adapter/resources/webgl-shader.js +21 -34
  105. package/dist/adapter/resources/webgl-shader.js.map +1 -1
  106. package/dist/adapter/resources/webgl-texture.d.ts +62 -42
  107. package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
  108. package/dist/adapter/resources/webgl-texture.js +137 -256
  109. package/dist/adapter/resources/webgl-texture.js.map +1 -1
  110. package/dist/adapter/resources/webgl-transform-feedback.d.ts +47 -0
  111. package/dist/adapter/resources/webgl-transform-feedback.d.ts.map +1 -0
  112. package/dist/adapter/resources/webgl-transform-feedback.js +164 -0
  113. package/dist/adapter/resources/webgl-transform-feedback.js.map +1 -0
  114. package/dist/adapter/resources/webgl-vertex-array.d.ts +67 -0
  115. package/dist/adapter/resources/webgl-vertex-array.d.ts.map +1 -0
  116. package/dist/adapter/resources/webgl-vertex-array.js +167 -0
  117. package/dist/adapter/resources/webgl-vertex-array.js.map +1 -0
  118. package/dist/adapter/webgl-canvas-context.d.ts +6 -7
  119. package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
  120. package/dist/adapter/webgl-canvas-context.js +10 -23
  121. package/dist/adapter/webgl-canvas-context.js.map +1 -1
  122. package/dist/adapter/webgl-device.d.ts +76 -41
  123. package/dist/adapter/webgl-device.d.ts.map +1 -1
  124. package/dist/adapter/webgl-device.js +219 -129
  125. package/dist/adapter/webgl-device.js.map +1 -1
  126. package/dist/classic/accessor.d.ts +3 -3
  127. package/dist/classic/accessor.d.ts.map +1 -1
  128. package/dist/classic/accessor.js +26 -52
  129. package/dist/classic/accessor.js.map +1 -1
  130. package/dist/classic/clear.d.ts +22 -0
  131. package/dist/classic/clear.d.ts.map +1 -0
  132. package/dist/classic/clear.js +88 -0
  133. package/dist/classic/clear.js.map +1 -0
  134. package/dist/classic/copy-and-blit.d.ts +62 -0
  135. package/dist/classic/copy-and-blit.d.ts.map +1 -0
  136. package/dist/classic/copy-and-blit.js +191 -0
  137. package/dist/classic/copy-and-blit.js.map +1 -0
  138. package/dist/classic/format-utils.d.ts +3 -0
  139. package/dist/classic/format-utils.d.ts.map +1 -0
  140. package/dist/classic/format-utils.js +37 -0
  141. package/dist/classic/format-utils.js.map +1 -0
  142. package/dist/classic/typed-array-utils.d.ts +17 -17
  143. package/dist/classic/typed-array-utils.d.ts.map +1 -1
  144. package/dist/classic/typed-array-utils.js +18 -39
  145. package/dist/classic/typed-array-utils.js.map +1 -1
  146. package/dist/context/context/create-browser-context.d.ts +40 -0
  147. package/dist/context/context/create-browser-context.d.ts.map +1 -0
  148. package/dist/context/context/create-browser-context.js +53 -0
  149. package/dist/context/context/create-browser-context.js.map +1 -0
  150. package/dist/context/context/create-headless-context.d.ts +9 -0
  151. package/dist/context/context/create-headless-context.d.ts.map +1 -0
  152. package/dist/context/context/create-headless-context.js +42 -0
  153. package/dist/context/context/create-headless-context.js.map +1 -0
  154. package/dist/context/context/webgl-checks.d.ts.map +1 -1
  155. package/dist/context/context/webgl-checks.js +1 -4
  156. package/dist/context/context/webgl-checks.js.map +1 -1
  157. package/dist/context/debug/spector.d.ts +1 -2
  158. package/dist/context/debug/spector.d.ts.map +1 -1
  159. package/dist/context/debug/spector.js +8 -20
  160. package/dist/context/debug/spector.js.map +1 -1
  161. package/dist/context/debug/webgl-developer-tools.d.ts +2 -2
  162. package/dist/context/debug/webgl-developer-tools.d.ts.map +1 -1
  163. package/dist/context/debug/webgl-developer-tools.js +15 -39
  164. package/dist/context/debug/webgl-developer-tools.js.map +1 -1
  165. package/dist/context/parameters/unified-parameter-api.d.ts +9 -8
  166. package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
  167. package/dist/context/parameters/unified-parameter-api.js +9 -19
  168. package/dist/context/parameters/unified-parameter-api.js.map +1 -1
  169. package/dist/context/parameters/webgl-parameter-tables.d.ts +105 -106
  170. package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
  171. package/dist/context/parameters/webgl-parameter-tables.js +267 -286
  172. package/dist/context/parameters/webgl-parameter-tables.js.map +1 -1
  173. package/dist/context/polyfill/context-data.d.ts +13 -0
  174. package/dist/context/polyfill/context-data.d.ts.map +1 -0
  175. package/dist/context/polyfill/context-data.js +12 -0
  176. package/dist/context/polyfill/context-data.js.map +1 -0
  177. package/dist/context/polyfill/get-parameter-polyfill.d.ts +1 -1
  178. package/dist/context/polyfill/get-parameter-polyfill.d.ts.map +1 -1
  179. package/dist/context/polyfill/get-parameter-polyfill.js +37 -43
  180. package/dist/context/polyfill/get-parameter-polyfill.js.map +1 -1
  181. package/dist/context/polyfill/polyfill-context.d.ts.map +1 -1
  182. package/dist/context/polyfill/polyfill-context.js +22 -30
  183. package/dist/context/polyfill/polyfill-context.js.map +1 -1
  184. package/dist/context/polyfill/polyfill-table.d.ts +8 -8
  185. package/dist/context/polyfill/polyfill-table.d.ts.map +1 -1
  186. package/dist/context/polyfill/polyfill-table.js +18 -41
  187. package/dist/context/polyfill/polyfill-table.js.map +1 -1
  188. package/dist/context/polyfill/polyfill-vertex-array-object.d.ts.map +1 -1
  189. package/dist/context/polyfill/polyfill-vertex-array-object.js +17 -87
  190. package/dist/context/polyfill/polyfill-vertex-array-object.js.map +1 -1
  191. package/dist/context/state-tracker/deep-array-equal.d.ts.map +1 -1
  192. package/dist/context/state-tracker/deep-array-equal.js +0 -4
  193. package/dist/context/state-tracker/deep-array-equal.js.map +1 -1
  194. package/dist/context/state-tracker/track-context-state.d.ts.map +1 -1
  195. package/dist/context/state-tracker/track-context-state.js +26 -62
  196. package/dist/context/state-tracker/track-context-state.js.map +1 -1
  197. package/dist/context/state-tracker/with-parameters.d.ts +2 -1
  198. package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
  199. package/dist/context/state-tracker/with-parameters.js +8 -10
  200. package/dist/context/state-tracker/with-parameters.js.map +1 -1
  201. package/dist/dist.dev.js +8555 -0
  202. package/dist/index.cjs +6602 -0
  203. package/dist/index.d.ts +26 -24
  204. package/dist/index.d.ts.map +1 -1
  205. package/dist/index.js +27 -26
  206. package/dist/index.js.map +1 -1
  207. package/dist/types.d.ts +3 -1
  208. package/dist/types.d.ts.map +1 -1
  209. package/dist/types.js.map +1 -1
  210. package/dist.min.js +49 -0
  211. package/package.json +21 -9
  212. package/src/adapter/converters/device-parameters.ts +144 -41
  213. package/src/adapter/converters/sampler-parameters.ts +103 -41
  214. package/src/adapter/converters/shader-formats.ts +44 -0
  215. package/src/adapter/converters/texture-formats.ts +268 -195
  216. package/src/adapter/converters/vertex-formats.ts +71 -10
  217. package/src/adapter/device-helpers/device-features.ts +14 -3
  218. package/src/adapter/device-helpers/device-limits.ts +5 -3
  219. package/src/adapter/device-helpers/get-device-info.ts +53 -18
  220. package/src/adapter/device-helpers/is-old-ie.ts +3 -0
  221. package/src/adapter/helpers/{uniforms.ts → decode-webgl-types.ts} +39 -21
  222. package/src/adapter/helpers/get-shader-info.ts +41 -0
  223. package/src/adapter/helpers/get-shader-layout.ts +121 -146
  224. package/src/adapter/helpers/parse-shader-compiler-log.ts +24 -8
  225. package/src/adapter/helpers/set-uniform.ts +39 -35
  226. package/src/adapter/helpers/webgl-topology-utils.ts +103 -0
  227. package/src/adapter/objects/constants-to-keys.ts +6 -25
  228. package/src/adapter/objects/webgl-renderbuffer.ts +43 -37
  229. package/src/adapter/objects/webgl-resource.ts +16 -23
  230. package/src/adapter/resources/webgl-buffer.ts +67 -62
  231. package/src/adapter/resources/webgl-command-buffer.ts +327 -25
  232. package/src/adapter/resources/webgl-command-encoder.ts +20 -12
  233. package/src/adapter/resources/webgl-external-texture.ts +5 -2
  234. package/src/adapter/resources/webgl-framebuffer.ts +90 -134
  235. package/src/adapter/resources/webgl-render-pass.ts +166 -4
  236. package/src/adapter/resources/webgl-render-pipeline.ts +256 -192
  237. package/src/adapter/resources/webgl-sampler.ts +16 -10
  238. package/src/adapter/resources/webgl-shader.ts +14 -11
  239. package/src/adapter/resources/webgl-texture.ts +138 -99
  240. package/src/adapter/resources/webgl-transform-feedback.ts +202 -0
  241. package/src/adapter/resources/webgl-vertex-array.ts +283 -0
  242. package/src/adapter/webgl-canvas-context.ts +16 -14
  243. package/src/adapter/webgl-device.ts +328 -79
  244. package/src/classic/accessor.ts +8 -18
  245. package/src/classic/clear.ts +113 -0
  246. package/src/classic/copy-and-blit.ts +311 -0
  247. package/src/classic/format-utils.ts +46 -0
  248. package/src/classic/typed-array-utils.ts +21 -27
  249. package/src/context/context/create-browser-context.ts +140 -0
  250. package/src/context/context/create-headless-context.ts +51 -0
  251. package/src/context/context/webgl-checks.ts +3 -1
  252. package/src/context/debug/spector.ts +9 -6
  253. package/src/context/debug/webgl-developer-tools.ts +23 -15
  254. package/src/context/parameters/unified-parameter-api.ts +23 -14
  255. package/src/context/parameters/webgl-parameter-tables.ts +120 -98
  256. package/src/context/polyfill/context-data.ts +30 -0
  257. package/src/context/polyfill/get-parameter-polyfill.ts +11 -7
  258. package/src/context/polyfill/polyfill-context.ts +10 -9
  259. package/src/context/polyfill/polyfill-table.ts +21 -16
  260. package/src/context/polyfill/polyfill-vertex-array-object.ts +5 -0
  261. package/src/context/state-tracker/deep-array-equal.ts +2 -0
  262. package/src/context/state-tracker/track-context-state.ts +14 -11
  263. package/src/context/state-tracker/with-parameters.ts +13 -4
  264. package/src/index.ts +70 -35
  265. package/src/types.ts +5 -0
  266. package/dist/adapter/converters/renderbuffer-formats.d.ts +0 -16
  267. package/dist/adapter/converters/renderbuffer-formats.d.ts.map +0 -1
  268. package/dist/adapter/converters/renderbuffer-formats.js +0 -185
  269. package/dist/adapter/converters/renderbuffer-formats.js.map +0 -1
  270. package/dist/adapter/helpers/attribute-utils.d.ts +0 -11
  271. package/dist/adapter/helpers/attribute-utils.d.ts.map +0 -1
  272. package/dist/adapter/helpers/attribute-utils.js +0 -81
  273. package/dist/adapter/helpers/attribute-utils.js.map +0 -1
  274. package/dist/adapter/helpers/uniforms.d.ts +0 -26
  275. package/dist/adapter/helpers/uniforms.d.ts.map +0 -1
  276. package/dist/adapter/helpers/uniforms.js +0 -99
  277. package/dist/adapter/helpers/uniforms.js.map +0 -1
  278. package/dist/adapter/objects/webgl-vertex-array-object.d.ts +0 -27
  279. package/dist/adapter/objects/webgl-vertex-array-object.d.ts.map +0 -1
  280. package/dist/adapter/objects/webgl-vertex-array-object.js +0 -84
  281. package/dist/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  282. package/dist/bundle.d.ts +0 -2
  283. package/dist/bundle.d.ts.map +0 -1
  284. package/dist/bundle.js +0 -5
  285. package/dist/bundle.js.map +0 -1
  286. package/dist/classic/buffer.d.ts +0 -95
  287. package/dist/classic/buffer.d.ts.map +0 -1
  288. package/dist/classic/buffer.js +0 -384
  289. package/dist/classic/buffer.js.map +0 -1
  290. package/dist/context/context/context-state.d.ts +0 -18
  291. package/dist/context/context/context-state.d.ts.map +0 -1
  292. package/dist/context/context/context-state.js +0 -26
  293. package/dist/context/context/context-state.js.map +0 -1
  294. package/dist/context/context/create-context.d.ts +0 -41
  295. package/dist/context/context/create-context.d.ts.map +0 -1
  296. package/dist/context/context/create-context.js +0 -49
  297. package/dist/context/context/create-context.js.map +0 -1
  298. package/dist/context/context/device-pixels.d.ts +0 -25
  299. package/dist/context/context/device-pixels.d.ts.map +0 -1
  300. package/dist/context/context/device-pixels.js +0 -98
  301. package/dist/context/context/device-pixels.js.map +0 -1
  302. package/dist/es5/adapter/converters/device-parameters.js +0 -170
  303. package/dist/es5/adapter/converters/device-parameters.js.map +0 -1
  304. package/dist/es5/adapter/converters/renderbuffer-formats.js +0 -163
  305. package/dist/es5/adapter/converters/renderbuffer-formats.js.map +0 -1
  306. package/dist/es5/adapter/converters/sampler-parameters.js +0 -226
  307. package/dist/es5/adapter/converters/sampler-parameters.js.map +0 -1
  308. package/dist/es5/adapter/converters/texture-formats.js +0 -1031
  309. package/dist/es5/adapter/converters/texture-formats.js.map +0 -1
  310. package/dist/es5/adapter/converters/vertex-formats.js +0 -45
  311. package/dist/es5/adapter/converters/vertex-formats.js.map +0 -1
  312. package/dist/es5/adapter/device-helpers/device-features.js +0 -144
  313. package/dist/es5/adapter/device-helpers/device-features.js.map +0 -1
  314. package/dist/es5/adapter/device-helpers/device-limits.js +0 -64
  315. package/dist/es5/adapter/device-helpers/device-limits.js.map +0 -1
  316. package/dist/es5/adapter/device-helpers/get-device-info.js +0 -55
  317. package/dist/es5/adapter/device-helpers/get-device-info.js.map +0 -1
  318. package/dist/es5/adapter/device-helpers/is-old-ie.js +0 -16
  319. package/dist/es5/adapter/device-helpers/is-old-ie.js.map +0 -1
  320. package/dist/es5/adapter/helpers/attribute-utils.js +0 -91
  321. package/dist/es5/adapter/helpers/attribute-utils.js.map +0 -1
  322. package/dist/es5/adapter/helpers/get-shader-layout.js +0 -371
  323. package/dist/es5/adapter/helpers/get-shader-layout.js.map +0 -1
  324. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js +0 -72
  325. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  326. package/dist/es5/adapter/helpers/set-uniform.js +0 -125
  327. package/dist/es5/adapter/helpers/set-uniform.js.map +0 -1
  328. package/dist/es5/adapter/helpers/uniforms.js +0 -112
  329. package/dist/es5/adapter/helpers/uniforms.js.map +0 -1
  330. package/dist/es5/adapter/objects/constants-to-keys.js +0 -54
  331. package/dist/es5/adapter/objects/constants-to-keys.js.map +0 -1
  332. package/dist/es5/adapter/objects/webgl-renderbuffer.js +0 -150
  333. package/dist/es5/adapter/objects/webgl-renderbuffer.js.map +0 -1
  334. package/dist/es5/adapter/objects/webgl-resource.js +0 -292
  335. package/dist/es5/adapter/objects/webgl-resource.js.map +0 -1
  336. package/dist/es5/adapter/objects/webgl-vertex-array-object.js +0 -137
  337. package/dist/es5/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  338. package/dist/es5/adapter/resources/webgl-buffer.js +0 -243
  339. package/dist/es5/adapter/resources/webgl-buffer.js.map +0 -1
  340. package/dist/es5/adapter/resources/webgl-command-buffer.js +0 -96
  341. package/dist/es5/adapter/resources/webgl-command-buffer.js.map +0 -1
  342. package/dist/es5/adapter/resources/webgl-command-encoder.js +0 -98
  343. package/dist/es5/adapter/resources/webgl-command-encoder.js.map +0 -1
  344. package/dist/es5/adapter/resources/webgl-external-texture.js +0 -2
  345. package/dist/es5/adapter/resources/webgl-external-texture.js.map +0 -1
  346. package/dist/es5/adapter/resources/webgl-framebuffer.js +0 -345
  347. package/dist/es5/adapter/resources/webgl-framebuffer.js.map +0 -1
  348. package/dist/es5/adapter/resources/webgl-render-pass.js +0 -61
  349. package/dist/es5/adapter/resources/webgl-render-pass.js.map +0 -1
  350. package/dist/es5/adapter/resources/webgl-render-pipeline.js +0 -505
  351. package/dist/es5/adapter/resources/webgl-render-pipeline.js.map +0 -1
  352. package/dist/es5/adapter/resources/webgl-sampler.js +0 -96
  353. package/dist/es5/adapter/resources/webgl-sampler.js.map +0 -1
  354. package/dist/es5/adapter/resources/webgl-shader.js +0 -149
  355. package/dist/es5/adapter/resources/webgl-shader.js.map +0 -1
  356. package/dist/es5/adapter/resources/webgl-texture.js +0 -986
  357. package/dist/es5/adapter/resources/webgl-texture.js.map +0 -1
  358. package/dist/es5/adapter/webgl-canvas-context.js +0 -97
  359. package/dist/es5/adapter/webgl-canvas-context.js.map +0 -1
  360. package/dist/es5/adapter/webgl-device.js +0 -399
  361. package/dist/es5/adapter/webgl-device.js.map +0 -1
  362. package/dist/es5/bundle.js +0 -7
  363. package/dist/es5/bundle.js.map +0 -1
  364. package/dist/es5/classic/accessor.js +0 -181
  365. package/dist/es5/classic/accessor.js.map +0 -1
  366. package/dist/es5/classic/buffer.js +0 -470
  367. package/dist/es5/classic/buffer.js.map +0 -1
  368. package/dist/es5/classic/typed-array-utils.js +0 -126
  369. package/dist/es5/classic/typed-array-utils.js.map +0 -1
  370. package/dist/es5/context/context/context-state.js +0 -31
  371. package/dist/es5/context/context/context-state.js.map +0 -1
  372. package/dist/es5/context/context/create-context.js +0 -69
  373. package/dist/es5/context/context/create-context.js.map +0 -1
  374. package/dist/es5/context/context/device-pixels.js +0 -115
  375. package/dist/es5/context/context/device-pixels.js.map +0 -1
  376. package/dist/es5/context/context/webgl-checks.js +0 -54
  377. package/dist/es5/context/context/webgl-checks.js.map +0 -1
  378. package/dist/es5/context/debug/spector.js +0 -133
  379. package/dist/es5/context/debug/spector.js.map +0 -1
  380. package/dist/es5/context/debug/webgl-developer-tools.js +0 -198
  381. package/dist/es5/context/debug/webgl-developer-tools.js.map +0 -1
  382. package/dist/es5/context/parameters/unified-parameter-api.js +0 -97
  383. package/dist/es5/context/parameters/unified-parameter-api.js.map +0 -1
  384. package/dist/es5/context/parameters/webgl-parameter-tables.js +0 -392
  385. package/dist/es5/context/parameters/webgl-parameter-tables.js.map +0 -1
  386. package/dist/es5/context/polyfill/get-parameter-polyfill.js +0 -81
  387. package/dist/es5/context/polyfill/get-parameter-polyfill.js.map +0 -1
  388. package/dist/es5/context/polyfill/polyfill-context.js +0 -135
  389. package/dist/es5/context/polyfill/polyfill-context.js.map +0 -1
  390. package/dist/es5/context/polyfill/polyfill-table.js +0 -166
  391. package/dist/es5/context/polyfill/polyfill-table.js.map +0 -1
  392. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js +0 -341
  393. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  394. package/dist/es5/context/state-tracker/deep-array-equal.js +0 -28
  395. package/dist/es5/context/state-tracker/deep-array-equal.js.map +0 -1
  396. package/dist/es5/context/state-tracker/track-context-state.js +0 -211
  397. package/dist/es5/context/state-tracker/track-context-state.js.map +0 -1
  398. package/dist/es5/context/state-tracker/with-parameters.js +0 -44
  399. package/dist/es5/context/state-tracker/with-parameters.js.map +0 -1
  400. package/dist/es5/index.js +0 -276
  401. package/dist/es5/index.js.map +0 -1
  402. package/dist/es5/init.js +0 -10
  403. package/dist/es5/init.js.map +0 -1
  404. package/dist/es5/types/webgl.js +0 -6
  405. package/dist/es5/types/webgl.js.map +0 -1
  406. package/dist/es5/types.js +0 -2
  407. package/dist/es5/types.js.map +0 -1
  408. package/dist/esm/adapter/converters/device-parameters.js +0 -155
  409. package/dist/esm/adapter/converters/device-parameters.js.map +0 -1
  410. package/dist/esm/adapter/converters/renderbuffer-formats.js +0 -185
  411. package/dist/esm/adapter/converters/renderbuffer-formats.js.map +0 -1
  412. package/dist/esm/adapter/converters/sampler-parameters.js +0 -208
  413. package/dist/esm/adapter/converters/sampler-parameters.js.map +0 -1
  414. package/dist/esm/adapter/converters/texture-formats.js +0 -954
  415. package/dist/esm/adapter/converters/texture-formats.js.map +0 -1
  416. package/dist/esm/adapter/converters/vertex-formats.js +0 -35
  417. package/dist/esm/adapter/converters/vertex-formats.js.map +0 -1
  418. package/dist/esm/adapter/device-helpers/device-features.js +0 -102
  419. package/dist/esm/adapter/device-helpers/device-features.js.map +0 -1
  420. package/dist/esm/adapter/device-helpers/device-limits.js +0 -91
  421. package/dist/esm/adapter/device-helpers/device-limits.js.map +0 -1
  422. package/dist/esm/adapter/device-helpers/get-device-info.js +0 -44
  423. package/dist/esm/adapter/device-helpers/get-device-info.js.map +0 -1
  424. package/dist/esm/adapter/device-helpers/is-old-ie.js +0 -8
  425. package/dist/esm/adapter/device-helpers/is-old-ie.js.map +0 -1
  426. package/dist/esm/adapter/helpers/attribute-utils.js +0 -81
  427. package/dist/esm/adapter/helpers/attribute-utils.js.map +0 -1
  428. package/dist/esm/adapter/helpers/get-shader-layout.js +0 -306
  429. package/dist/esm/adapter/helpers/get-shader-layout.js.map +0 -1
  430. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js +0 -37
  431. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  432. package/dist/esm/adapter/helpers/set-uniform.js +0 -115
  433. package/dist/esm/adapter/helpers/set-uniform.js.map +0 -1
  434. package/dist/esm/adapter/helpers/uniforms.js +0 -99
  435. package/dist/esm/adapter/helpers/uniforms.js.map +0 -1
  436. package/dist/esm/adapter/objects/constants-to-keys.js +0 -42
  437. package/dist/esm/adapter/objects/constants-to-keys.js.map +0 -1
  438. package/dist/esm/adapter/objects/webgl-renderbuffer.js +0 -94
  439. package/dist/esm/adapter/objects/webgl-renderbuffer.js.map +0 -1
  440. package/dist/esm/adapter/objects/webgl-resource.js +0 -216
  441. package/dist/esm/adapter/objects/webgl-resource.js.map +0 -1
  442. package/dist/esm/adapter/objects/webgl-vertex-array-object.js +0 -84
  443. package/dist/esm/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  444. package/dist/esm/adapter/resources/webgl-buffer.js +0 -164
  445. package/dist/esm/adapter/resources/webgl-buffer.js.map +0 -1
  446. package/dist/esm/adapter/resources/webgl-command-buffer.js +0 -65
  447. package/dist/esm/adapter/resources/webgl-command-buffer.js.map +0 -1
  448. package/dist/esm/adapter/resources/webgl-command-encoder.js +0 -53
  449. package/dist/esm/adapter/resources/webgl-command-encoder.js.map +0 -1
  450. package/dist/esm/adapter/resources/webgl-external-texture.js +0 -2
  451. package/dist/esm/adapter/resources/webgl-external-texture.js.map +0 -1
  452. package/dist/esm/adapter/resources/webgl-framebuffer.js +0 -265
  453. package/dist/esm/adapter/resources/webgl-framebuffer.js.map +0 -1
  454. package/dist/esm/adapter/resources/webgl-render-pass.js +0 -19
  455. package/dist/esm/adapter/resources/webgl-render-pass.js.map +0 -1
  456. package/dist/esm/adapter/resources/webgl-render-pipeline.js +0 -400
  457. package/dist/esm/adapter/resources/webgl-render-pipeline.js.map +0 -1
  458. package/dist/esm/adapter/resources/webgl-sampler.js +0 -50
  459. package/dist/esm/adapter/resources/webgl-sampler.js.map +0 -1
  460. package/dist/esm/adapter/resources/webgl-shader.js +0 -75
  461. package/dist/esm/adapter/resources/webgl-shader.js.map +0 -1
  462. package/dist/esm/adapter/resources/webgl-texture.js +0 -833
  463. package/dist/esm/adapter/resources/webgl-texture.js.map +0 -1
  464. package/dist/esm/adapter/webgl-canvas-context.js +0 -54
  465. package/dist/esm/adapter/webgl-canvas-context.js.map +0 -1
  466. package/dist/esm/adapter/webgl-device.js +0 -280
  467. package/dist/esm/adapter/webgl-device.js.map +0 -1
  468. package/dist/esm/bundle.js +0 -5
  469. package/dist/esm/bundle.js.map +0 -1
  470. package/dist/esm/classic/accessor.js +0 -144
  471. package/dist/esm/classic/accessor.js.map +0 -1
  472. package/dist/esm/classic/buffer.js +0 -384
  473. package/dist/esm/classic/buffer.js.map +0 -1
  474. package/dist/esm/classic/typed-array-utils.js +0 -112
  475. package/dist/esm/classic/typed-array-utils.js.map +0 -1
  476. package/dist/esm/context/context/context-state.js +0 -26
  477. package/dist/esm/context/context/context-state.js.map +0 -1
  478. package/dist/esm/context/context/create-context.js +0 -49
  479. package/dist/esm/context/context/create-context.js.map +0 -1
  480. package/dist/esm/context/context/device-pixels.js +0 -98
  481. package/dist/esm/context/context/device-pixels.js.map +0 -1
  482. package/dist/esm/context/context/webgl-checks.js +0 -34
  483. package/dist/esm/context/context/webgl-checks.js.map +0 -1
  484. package/dist/esm/context/debug/spector.js +0 -76
  485. package/dist/esm/context/debug/spector.js.map +0 -1
  486. package/dist/esm/context/debug/webgl-developer-tools.js +0 -121
  487. package/dist/esm/context/debug/webgl-developer-tools.js.map +0 -1
  488. package/dist/esm/context/parameters/unified-parameter-api.js +0 -65
  489. package/dist/esm/context/parameters/unified-parameter-api.js.map +0 -1
  490. package/dist/esm/context/parameters/webgl-parameter-tables.js +0 -445
  491. package/dist/esm/context/parameters/webgl-parameter-tables.js.map +0 -1
  492. package/dist/esm/context/polyfill/get-parameter-polyfill.js +0 -91
  493. package/dist/esm/context/polyfill/get-parameter-polyfill.js.map +0 -1
  494. package/dist/esm/context/polyfill/polyfill-context.js +0 -92
  495. package/dist/esm/context/polyfill/polyfill-context.js.map +0 -1
  496. package/dist/esm/context/polyfill/polyfill-table.js +0 -160
  497. package/dist/esm/context/polyfill/polyfill-table.js.map +0 -1
  498. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js +0 -335
  499. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  500. package/dist/esm/context/state-tracker/deep-array-equal.js +0 -21
  501. package/dist/esm/context/state-tracker/deep-array-equal.js.map +0 -1
  502. package/dist/esm/context/state-tracker/track-context-state.js +0 -183
  503. package/dist/esm/context/state-tracker/track-context-state.js.map +0 -1
  504. package/dist/esm/context/state-tracker/with-parameters.js +0 -36
  505. package/dist/esm/context/state-tracker/with-parameters.js.map +0 -1
  506. package/dist/esm/index.js +0 -27
  507. package/dist/esm/index.js.map +0 -1
  508. package/dist/esm/init.js +0 -4
  509. package/dist/esm/init.js.map +0 -1
  510. package/dist/esm/types/webgl.js +0 -2
  511. package/dist/esm/types/webgl.js.map +0 -1
  512. package/dist/esm/types.js +0 -2
  513. package/dist/esm/types.js.map +0 -1
  514. package/dist/init.d.ts +0 -2
  515. package/dist/init.d.ts.map +0 -1
  516. package/dist/init.js +0 -4
  517. package/dist/init.js.map +0 -1
  518. package/dist/types/webgl.d.ts +0 -145
  519. package/dist/types/webgl.d.ts.map +0 -1
  520. package/dist/types/webgl.js +0 -2
  521. package/dist/types/webgl.js.map +0 -1
  522. package/src/adapter/converters/renderbuffer-formats.ts +0 -92
  523. package/src/adapter/helpers/attribute-utils.ts +0 -61
  524. package/src/adapter/objects/webgl-vertex-array-object.ts +0 -111
  525. package/src/bundle.ts +0 -4
  526. package/src/classic/buffer.ts +0 -474
  527. package/src/context/context/context-state.ts +0 -41
  528. package/src/context/context/create-context.ts +0 -110
  529. package/src/context/context/device-pixels.ts +0 -152
  530. package/src/init.ts +0 -4
  531. package/src/types/webgl.ts +0 -284
@@ -1,48 +1,36 @@
1
- import {
1
+ // luma.gl, MIT license
2
+ // Copyright (c) vis.gl contributors
3
+
4
+ import type {
2
5
  ShaderLayout,
3
- BindingLayout,
4
6
  UniformBinding,
5
7
  UniformBlockBinding,
6
- ProgramBindings,
7
- AttributeBinding,
8
- VaryingBinding,
9
- AttributeLayout,
10
- AccessorObject
11
- } from '@luma.gl/api';
12
- import GL from '@luma.gl/constants';
8
+ AttributeDeclaration,
9
+ VaryingBinding
10
+ } from '@luma.gl/core';
11
+
12
+ import {GL} from '@luma.gl/constants';
13
13
  import {isWebGL2} from '../../context/context/webgl-checks';
14
- import Accessor from '../../classic/accessor'; // TODO - should NOT depend on classic API
15
- import {decodeUniformType, decodeAttributeType} from './uniforms';
16
- import {getVertexFormat} from '../converters/vertex-formats';
17
- import {isSamplerUniform} from './uniforms';
14
+ import {Accessor} from '../../classic/accessor'; // TODO - should NOT depend on classic API
15
+ import {decodeGLUniformType, decodeGLAttributeType, isSamplerUniform} from './decode-webgl-types';
16
+
18
17
  /**
19
18
  * Extract metadata describing binding information for a program's shaders
20
19
  * Note: `linkProgram()` needs to have been called
21
20
  * (although linking does not need to have been successful).
22
21
  */
23
22
  export function getShaderLayout(gl: WebGLRenderingContext, program: WebGLProgram): ShaderLayout {
24
- const programBindings = getProgramBindings(gl, program);
25
-
26
23
  const shaderLayout: ShaderLayout = {
27
24
  attributes: [],
28
25
  bindings: []
29
26
  };
30
27
 
31
- for (const attribute of programBindings.attributes) {
32
- const format =
33
- // attribute.accessor.format ||
34
- getVertexFormat(attribute.accessor.type || GL.FLOAT, attribute.accessor.size);
35
- shaderLayout.attributes.push({
36
- name: attribute.name,
37
- location: attribute.location,
38
- format,
39
- stepMode: attribute.accessor.divisor === 1 ? 'instance' : 'vertex'
40
- });
41
- }
28
+ shaderLayout.attributes = readAttributeDeclarations(gl, program);
42
29
 
43
30
  // Uniform blocks
44
- for (const uniformBlock of programBindings.uniformBlocks) {
45
- const uniforms = uniformBlock.uniforms.map((uniform) => ({
31
+ const uniformBlocks: UniformBlockBinding[] = readUniformBlocks(gl, program);
32
+ for (const uniformBlock of uniformBlocks) {
33
+ const uniforms = uniformBlock.uniforms.map(uniform => ({
46
34
  name: uniform.name,
47
35
  format: uniform.format,
48
36
  byteOffset: uniform.byteOffset,
@@ -59,8 +47,9 @@ export function getShaderLayout(gl: WebGLRenderingContext, program: WebGLProgram
59
47
  });
60
48
  }
61
49
 
50
+ const uniforms: UniformBinding[] = readUniformBindings(gl, program);
62
51
  let textureUnit = 0;
63
- for (const uniform of programBindings.uniforms) {
52
+ for (const uniform of uniforms) {
64
53
  if (isSamplerUniform(uniform.type)) {
65
54
  const {viewDimension, sampleType} = getSamplerInfo(uniform.type);
66
55
  shaderLayout.bindings.push({
@@ -77,69 +66,64 @@ export function getShaderLayout(gl: WebGLRenderingContext, program: WebGLProgram
77
66
  }
78
67
  }
79
68
 
80
- const uniforms = programBindings.uniforms?.filter((uniform) => uniform.location !== null) || [];
81
69
  if (uniforms.length) {
82
70
  shaderLayout.uniforms = uniforms;
83
71
  }
84
- if (programBindings.varyings?.length) {
85
- shaderLayout.varyings = programBindings.varyings;
72
+
73
+ // Varyings
74
+ const varyings: VaryingBinding[] = readVaryings(gl, program);
75
+ // Note - samplers are always in unform bindings, even if uniform blocks are used
76
+ if (varyings?.length) {
77
+ shaderLayout.varyings = varyings;
86
78
  }
87
79
 
88
80
  return shaderLayout;
89
81
  }
90
82
 
91
- /**
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).
95
- */
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)
105
- };
106
-
107
- Object.seal(config);
108
- return config;
109
- // generateWebGPUStyleBindings(bindings);
110
- }
83
+ // HELPERS
111
84
 
112
85
  /**
113
86
  * Extract info about all transform feedback varyings
114
87
  *
115
88
  * linkProgram needs to have been called, although linking does not need to have been successful
116
89
  */
117
- function readAttributeBindings(
90
+ function readAttributeDeclarations(
118
91
  gl: WebGLRenderingContext,
119
92
  program: WebGLProgram
120
- ): AttributeBinding[] {
121
- const attributes: AttributeBinding[] = [];
93
+ ): AttributeDeclaration[] {
94
+ const attributes: AttributeDeclaration[] = [];
122
95
 
123
96
  const count = gl.getProgramParameter(program, gl.ACTIVE_ATTRIBUTES);
124
97
 
125
98
  for (let index = 0; index < count; index++) {
126
- const {name, type: compositeType, size} = gl.getActiveAttrib(program, index);
99
+ const activeInfo = gl.getActiveAttrib(program, index);
100
+ if (!activeInfo) {
101
+ throw new Error('activeInfo');
102
+ }
103
+ const {name, type: compositeType /* , size*/} = activeInfo;
127
104
  const location = gl.getAttribLocation(program, name);
128
- // Add only user provided attributes, for built-in attributes like
129
- // `gl_InstanceID` locaiton will be < 0
105
+ // Add only user provided attributes, for built-in attributes like `gl_InstanceID` location will be < 0
130
106
  if (location >= 0) {
131
- const {glType, components} = decodeAttributeType(compositeType);
132
- const accessor: AccessorObject = {type: glType, size: size * components};
133
- // Any attribute name containing the word "instance" will be assumed to be instanced
134
- if (/instance/i.test(name)) {
135
- accessor.divisor = 1;
136
- }
137
- const attributeInfo = {location, name, accessor: new Accessor(accessor)}; // Base values
138
- attributes.push(attributeInfo);
107
+ const {attributeType} = decodeGLAttributeType(compositeType);
108
+
109
+ // Whether an attribute is instanced is essentially fixed by the structure of the shader code,
110
+ // so it is arguably a static property of the shader.
111
+ // There is no hint in the shader declarations
112
+ // Heuristic: Any attribute name containing the word "instance" will be assumed to be instanced
113
+ const stepMode = /instance/i.test(name) ? 'instance' : 'vertex';
114
+
115
+ attributes.push({
116
+ name,
117
+ location,
118
+ stepMode,
119
+ type: attributeType,
120
+ // size - for arrays, size is the number of elements in the array
121
+ });
139
122
  }
140
123
  }
141
124
 
142
- attributes.sort((a: AttributeBinding, b: AttributeBinding) => a.location - b.location);
125
+ // Sort by declaration order
126
+ attributes.sort((a: AttributeDeclaration, b: AttributeDeclaration) => a.location - b.location);
143
127
  return attributes;
144
128
  }
145
129
 
@@ -158,8 +142,12 @@ function readVaryings(gl: WebGLRenderingContext, program: WebGLProgram): Varying
158
142
 
159
143
  const count = gl.getProgramParameter(program, GL.TRANSFORM_FEEDBACK_VARYINGS);
160
144
  for (let location = 0; location < count; location++) {
161
- const {name, type: compositeType, size} = gl2.getTransformFeedbackVarying(program, location);
162
- const {glType, components} = decodeUniformType(compositeType);
145
+ const activeInfo = gl2.getTransformFeedbackVarying(program, location);
146
+ if (!activeInfo) {
147
+ throw new Error('activeInfo');
148
+ }
149
+ const {name, type: compositeType, size} = activeInfo;
150
+ const {glType, components} = decodeGLUniformType(compositeType);
163
151
  const accessor = new Accessor({type: glType, size: size * components});
164
152
  const varying = {location, name, accessor}; // Base values
165
153
  varyings.push(varying);
@@ -179,7 +167,11 @@ function readUniformBindings(gl: WebGLRenderingContext, program: WebGLProgram):
179
167
 
180
168
  const uniformCount = gl.getProgramParameter(program, GL.ACTIVE_UNIFORMS);
181
169
  for (let i = 0; i < uniformCount; i++) {
182
- const {name: rawName, size, type} = gl.getActiveUniform(program, i);
170
+ const activeInfo = gl.getActiveUniform(program, i);
171
+ if (!activeInfo) {
172
+ throw new Error('activeInfo');
173
+ }
174
+ const {name: rawName, size, type} = activeInfo;
183
175
  const {name, isArray} = parseUniformName(rawName);
184
176
  let webglLocation = gl.getUniformLocation(program, name);
185
177
  const uniformInfo = {
@@ -214,9 +206,7 @@ function readUniformBindings(gl: WebGLRenderingContext, program: WebGLProgram):
214
206
 
215
207
  /**
216
208
  * Extract info about all "active" uniform blocks
217
- *
218
- * ("Active" just means that unused (aka inactive) blocks may have been
219
- * optimized away during linking)
209
+ * @note In WebGL, "active" just means that unused (inactive) blocks may have been optimized away during linking)
220
210
  */
221
211
  function readUniformBlocks(
222
212
  gl: WebGLRenderingContext,
@@ -234,8 +224,8 @@ function readUniformBlocks(
234
224
 
235
225
  const blockCount = gl2.getProgramParameter(program, GL.ACTIVE_UNIFORM_BLOCKS);
236
226
  for (let blockIndex = 0; blockIndex < blockCount; blockIndex++) {
237
- const blockInfo = {
238
- name: gl2.getActiveUniformBlockName(program, blockIndex),
227
+ const blockInfo: UniformBlockBinding = {
228
+ name: gl2.getActiveUniformBlockName(program, blockIndex) || '',
239
229
  location: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_BINDING),
240
230
  byteLength: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_DATA_SIZE),
241
231
  vertex: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER),
@@ -244,33 +234,39 @@ function readUniformBlocks(
244
234
  uniforms: [] as any[]
245
235
  };
246
236
 
247
- const uniformIndices = getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES);
237
+ const uniformIndices =
238
+ (getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES) as number[]) || [];
248
239
 
249
240
  const uniformType = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_TYPE); // Array of GLenum indicating the types of the uniforms.
250
241
  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.
242
+ // const uniformBlockIndex = gl2.getActiveUniforms(
243
+ // program,
244
+ // uniformIndices,
245
+ // GL.UNIFORM_BLOCK_INDEX
246
+ // ); // Array of GLint indicating the block indices of the uniforms.
256
247
  const uniformOffset = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_OFFSET); // Array of GLint indicating the uniform buffer offsets.
257
248
  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);
249
+ // const uniformMatrixStride = gl2.getActiveUniforms(
250
+ // program,
251
+ // uniformIndices,
252
+ // GL.UNIFORM_MATRIX_STRIDE
253
+ // ); // Array of GLint indicating the strides between columns of a column-major matrix or a row-major matrix.
254
+ // const uniformRowMajor = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_IS_ROW_MAJOR);
264
255
  for (let i = 0; i < blockInfo.uniformCount; ++i) {
256
+ const activeInfo = gl2.getActiveUniform(program, uniformIndices[i]);
257
+ if (!activeInfo) {
258
+ throw new Error('activeInfo');
259
+ }
260
+
265
261
  blockInfo.uniforms.push({
266
- name: gl2.getActiveUniform(program, uniformIndices[i]).name,
267
- format: decodeUniformType(uniformType[i]).format,
262
+ name: activeInfo.name,
263
+ format: decodeGLUniformType(uniformType[i]).format,
268
264
  type: uniformType[i],
269
265
  arrayLength: uniformArrayLength[i],
270
266
  byteOffset: uniformOffset[i],
271
- byteStride: uniformStride[i],
272
- matrixStride: uniformStride[i],
273
- rowMajor: uniformRowMajor[i]
267
+ byteStride: uniformStride[i]
268
+ // matrixStride: uniformStride[i],
269
+ // rowMajor: uniformRowMajor[i]
274
270
  });
275
271
  }
276
272
 
@@ -281,6 +277,27 @@ function readUniformBlocks(
281
277
  return uniformBlocks;
282
278
  }
283
279
 
280
+ /**
281
+ * TOOD - compare with a above, confirm copy, then delete
282
+ const bindings: Binding[] = [];
283
+ const count = gl.getProgramParameter(program, gl.ACTIVE_UNIFORM_BLOCKS);
284
+ for (let blockIndex = 0; blockIndex < count; blockIndex++) {
285
+ const vertex = gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER),
286
+ const fragment = gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER),
287
+ const visibility = (vertex) + (fragment);
288
+ const binding: BufferBinding = {
289
+ location: gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_BINDING),
290
+ // name: gl.getActiveUniformBlockName(program, blockIndex),
291
+ type: 'uniform',
292
+ visibility,
293
+ minBindingSize: gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_DATA_SIZE),
294
+ // uniformCount: gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_ACTIVE_UNIFORMS),
295
+ // uniformIndices: gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES),
296
+ }
297
+ bindings.push(binding);
298
+ }
299
+ */
300
+
284
301
  const SAMPLER_UNIFORMS_GL_TO_GPU: Record<
285
302
  number,
286
303
  [
@@ -305,18 +322,18 @@ const SAMPLER_UNIFORMS_GL_TO_GPU: Record<
305
322
  [GL.UNSIGNED_INT_SAMPLER_2D_ARRAY]: ['2d-array', 'uint']
306
323
  };
307
324
 
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};
325
+ type SamplerInfo = {
326
+ viewDimension: '1d' | '2d' | '2d-array' | 'cube' | 'cube-array' | '3d';
327
+ sampleType: 'float' | 'unfilterable-float' | 'depth' | 'sint' | 'uint';
328
+ };
329
+
330
+ function getSamplerInfo(type: GL): SamplerInfo {
331
+ const sampler = SAMPLER_UNIFORMS_GL_TO_GPU[type];
332
+ if (!sampler) {
333
+ throw new Error('sampler');
318
334
  }
319
- return null;
335
+ const [viewDimension, sampleType] = sampler;
336
+ return {viewDimension, sampleType};
320
337
  }
321
338
 
322
339
  // HELPERS
@@ -333,7 +350,7 @@ function parseUniformName(name: string): {name: string; length: number; isArray:
333
350
 
334
351
  // if array name then clean the array brackets
335
352
  const UNIFORM_NAME_REGEXP = /([^[]*)(\[[0-9]+\])?/;
336
- const matches = name.match(UNIFORM_NAME_REGEXP);
353
+ const matches = UNIFORM_NAME_REGEXP.exec(name);
337
354
  if (!matches || matches.length < 2) {
338
355
  throw new Error(`Failed to parse GLSL uniform name ${name}`);
339
356
  }
@@ -344,45 +361,3 @@ function parseUniformName(name: string): {name: string; length: number; isArray:
344
361
  isArray: Boolean(matches[2])
345
362
  };
346
363
  }
347
-
348
- /**
349
- * TODO - verify this is a copy of above and delete
350
- * import type {TextureFormat} from '@luma.gl/api';
351
- * Extract info about all "active" uniform blocks
352
- * ("Active" just means that unused (inactive) blocks may have been optimized away during linking)
353
- *
354
- function getUniformBlockBindings(gl, program): Binding[] {
355
- if (!isWebGL2(gl)) {
356
- return;
357
- }
358
- const bindings: Binding[] = [];
359
- const count = gl.getProgramParameter(program, gl.ACTIVE_UNIFORM_BLOCKS);
360
- for (let blockIndex = 0; blockIndex < count; blockIndex++) {
361
- const vertex = gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER),
362
- const fragment = gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER),
363
- const visibility = (vertex) + (fragment);
364
- const binding: BufferBinding = {
365
- location: gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_BINDING),
366
- // name: gl.getActiveUniformBlockName(program, blockIndex),
367
- type: 'uniform',
368
- visibility,
369
- minBindingSize: gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_DATA_SIZE),
370
- // uniformCount: gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_ACTIVE_UNIFORMS),
371
- // uniformIndices: gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES),
372
- }
373
- bindings.push(binding);
374
- }
375
- return bindings;
376
- }
377
-
378
- function setBindings(gl2: WebGL2RenderingContext, program: WebGLProgram, bindings: Binding[][]): void {
379
- for (const bindGroup of bindings) {
380
- for (const binding of bindGroup) {
381
-
382
- }
383
- }
384
-
385
- // Set up indirection table
386
- // this.gl2.uniformBlockBinding(this.handle, blockIndex, blockBinding);
387
- }
388
- */
@@ -1,7 +1,7 @@
1
1
  // luma.gl, MIT license
2
- import type {CompilerMessage} from '@luma.gl/shadertools';
2
+ // Copyright (c) vis.gl contributors
3
3
 
4
- const MESSAGE_TYPES = ['warning', 'error', 'info'];
4
+ import type {CompilerMessage} from '@luma.gl/core';
5
5
 
6
6
  /**
7
7
  * Parse a WebGL-format GLSL compilation log into an array of WebGPU style message records.
@@ -16,10 +16,23 @@ 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(':');
23
+
24
+ // Check for messages with no line information `ERROR: unsupported shader version`
25
+ if (segments.length === 2) {
26
+ const [messageType, message] = segments;
27
+ messages.push({
28
+ message: message.trim(),
29
+ type: getMessageType(messageType),
30
+ lineNum: 0,
31
+ linePos: 0
32
+ });
33
+ continue; // eslint-disable-line no-continue
34
+ }
35
+
23
36
  const [messageType, linePosition, lineNumber, ...rest] = segments;
24
37
 
25
38
  let lineNum = parseInt(lineNumber, 10);
@@ -32,13 +45,9 @@ export function parseShaderCompilerLog(errLog: string) : readonly CompilerMessag
32
45
  linePos = 0;
33
46
  }
34
47
 
35
- // Ensure supported type
36
- const lowerCaseType = messageType.toLowerCase();
37
- const type = (MESSAGE_TYPES.includes(lowerCaseType) ? lowerCaseType : 'info') as 'warning' | 'error' | 'info';
38
-
39
48
  messages.push({
40
49
  message: rest.join(':').trim(),
41
- type,
50
+ type: getMessageType(messageType),
42
51
  lineNum,
43
52
  linePos // TODO
44
53
  })
@@ -46,3 +55,10 @@ export function parseShaderCompilerLog(errLog: string) : readonly CompilerMessag
46
55
 
47
56
  return messages;
48
57
  }
58
+
59
+ /** Ensure supported type */
60
+ function getMessageType(messageType: string): 'warning' | 'error' | 'info' {
61
+ const MESSAGE_TYPES = ['warning', 'error', 'info'];
62
+ const lowerCaseType = messageType.toLowerCase();
63
+ return (MESSAGE_TYPES.includes(lowerCaseType) ? lowerCaseType : 'info') as 'warning' | 'error' | 'info';
64
+ }
@@ -1,52 +1,56 @@
1
+ // luma.gl, MIT license
2
+ // Copyright (c) vis.gl contributors
3
+
4
+ /* eslint-disable */
5
+
1
6
  // Uniforms
2
- import GL from '@luma.gl/constants';
7
+ import type {UniformValue} from '@luma.gl/core';
8
+ import {GL, GLCompositeType, GLSamplerType} from '@luma.gl/constants';
3
9
 
4
10
  /** Set a raw uniform (without type conversion and caching) */
5
11
  /* eslint-disable max-len */
6
12
  export function setUniform(
7
13
  gl: WebGLRenderingContext,
8
14
  location: WebGLUniformLocation,
9
- type: GL,
10
- value: number | Float32Array | Int32Array | Uint32Array
15
+ type: GLCompositeType | GLSamplerType,
16
+ value: UniformValue
11
17
  ): void {
12
18
  const gl2 = gl as WebGL2RenderingContext;
13
19
 
14
- if (typeof value === 'number') {
15
- // prettier-ignore
16
- switch (type) {
17
- // WebGL1 samplers
18
- case GL.SAMPLER_2D:
19
- case GL.SAMPLER_CUBE:
20
- // WebGL2 samplers
21
- case GL.SAMPLER_3D:
22
- case GL.SAMPLER_2D_SHADOW:
23
- case GL.SAMPLER_2D_ARRAY:
24
- case GL.SAMPLER_2D_ARRAY_SHADOW:
25
- case GL.SAMPLER_CUBE_SHADOW:
26
- case GL.INT_SAMPLER_2D:
27
- case GL.INT_SAMPLER_3D:
28
- case GL.INT_SAMPLER_CUBE:
29
- case GL.INT_SAMPLER_2D_ARRAY:
30
- case GL.UNSIGNED_INT_SAMPLER_2D:
31
- case GL.UNSIGNED_INT_SAMPLER_3D:
32
- case GL.UNSIGNED_INT_SAMPLER_CUBE:
33
- case GL.UNSIGNED_INT_SAMPLER_2D_ARRAY:
34
- return gl.uniform1i(location, value);
35
- }
20
+ // Prepare the value for WebGL setters
21
+ let uniformValue = value;
22
+ if (uniformValue === true) {
23
+ uniformValue = 1;
36
24
  }
37
-
38
- // @ts-expect-error
39
- if (value === true) {
40
- value = 1;
25
+ if (uniformValue === false) {
26
+ uniformValue = 0;
41
27
  }
42
- // @ts-expect-error
43
- if (value === false) {
44
- value = 1;
45
- }
46
- const arrayValue = (typeof value === 'number') ? [value] : value;
28
+ const arrayValue = typeof uniformValue === 'number' ? [uniformValue] : uniformValue;
47
29
 
48
30
  // prettier-ignore
49
31
  switch (type) {
32
+ // WebGL1 samplers
33
+ case GL.SAMPLER_2D:
34
+ case GL.SAMPLER_CUBE:
35
+ // WebGL2 samplers
36
+ case GL.SAMPLER_3D:
37
+ case GL.SAMPLER_2D_SHADOW:
38
+ case GL.SAMPLER_2D_ARRAY:
39
+ case GL.SAMPLER_2D_ARRAY_SHADOW:
40
+ case GL.SAMPLER_CUBE_SHADOW:
41
+ case GL.INT_SAMPLER_2D:
42
+ case GL.INT_SAMPLER_3D:
43
+ case GL.INT_SAMPLER_CUBE:
44
+ case GL.INT_SAMPLER_2D_ARRAY:
45
+ case GL.UNSIGNED_INT_SAMPLER_2D:
46
+ case GL.UNSIGNED_INT_SAMPLER_3D:
47
+ case GL.UNSIGNED_INT_SAMPLER_CUBE:
48
+ case GL.UNSIGNED_INT_SAMPLER_2D_ARRAY:
49
+ if (typeof value !== 'number') {
50
+ throw new Error('samplers must be set to integers');
51
+ }
52
+ return gl.uniform1i(location, value);
53
+
50
54
  case GL.FLOAT: return gl.uniform1fv(location, arrayValue);
51
55
  case GL.FLOAT_VEC2: return gl.uniform2fv(location, arrayValue);
52
56
  case GL.FLOAT_VEC3: return gl.uniform3fv(location, arrayValue);
@@ -60,7 +64,7 @@ export function setUniform(
60
64
  case GL.BOOL: return gl.uniform1iv(location, arrayValue);
61
65
  case GL.BOOL_VEC2: return gl.uniform2iv(location, arrayValue);
62
66
  case GL.BOOL_VEC3: return gl.uniform3iv(location, arrayValue);
63
- case GL.BOOL_VEC4: gl.uniform4iv(location, arrayValue);
67
+ case GL.BOOL_VEC4: return gl.uniform4iv(location, arrayValue);
64
68
 
65
69
  // WEBGL2 - unsigned integers
66
70
  case GL.UNSIGNED_INT: return gl2.uniform1uiv(location, arrayValue, 1);
@@ -0,0 +1,103 @@
1
+ // luma.gl, MIT license
2
+ // Copyright (c) vis.gl contributors
3
+
4
+ import {GL, GLPrimitiveTopology, GLPrimitive} from '@luma.gl/constants';
5
+ import {PrimitiveTopology} from '@luma.gl/core';
6
+
7
+ // Counts the number of complete primitives given a number of vertices and a drawMode
8
+ export function getPrimitiveDrawMode(drawMode: GLPrimitiveTopology): GLPrimitive {
9
+ switch (drawMode) {
10
+ case GL.POINTS:
11
+ return GL.POINTS;
12
+ case GL.LINES:
13
+ return GL.LINES;
14
+ case GL.LINE_STRIP:
15
+ return GL.LINES;
16
+ case GL.LINE_LOOP:
17
+ return GL.LINES;
18
+ case GL.TRIANGLES:
19
+ return GL.TRIANGLES;
20
+ case GL.TRIANGLE_STRIP:
21
+ return GL.TRIANGLES;
22
+ case GL.TRIANGLE_FAN:
23
+ return GL.TRIANGLES;
24
+ default:
25
+ throw new Error('drawMode');
26
+ }
27
+ }
28
+
29
+ // Counts the number of complete "primitives" given a number of vertices and a drawMode
30
+ export function getPrimitiveCount(options: {drawMode: GLPrimitiveTopology, vertexCount: number}): number {
31
+ const {drawMode, vertexCount} = options;
32
+ switch (drawMode) {
33
+ case GL.POINTS:
34
+ case GL.LINE_LOOP:
35
+ return vertexCount;
36
+ case GL.LINES:
37
+ return vertexCount / 2;
38
+ case GL.LINE_STRIP:
39
+ return vertexCount - 1;
40
+ case GL.TRIANGLES:
41
+ return vertexCount / 3;
42
+ case GL.TRIANGLE_STRIP:
43
+ case GL.TRIANGLE_FAN:
44
+ return vertexCount - 2;
45
+ default:
46
+ throw new Error('drawMode');
47
+ }
48
+ }
49
+
50
+ // Counts the number of vertices after splitting the vertex stream into separate "primitives"
51
+ export function getVertexCount(options: {drawMode: GLPrimitiveTopology, vertexCount: number}): number {
52
+ const {drawMode, vertexCount} = options;
53
+ const primitiveCount = getPrimitiveCount({drawMode, vertexCount});
54
+ switch (getPrimitiveDrawMode(drawMode)) {
55
+ case GL.POINTS:
56
+ return primitiveCount;
57
+ case GL.LINES:
58
+ return primitiveCount * 2;
59
+ case GL.TRIANGLES:
60
+ return primitiveCount * 3;
61
+ default:
62
+ throw new Error('drawMode');
63
+ }
64
+ }
65
+
66
+ /** Get the primitive type for draw */
67
+ export function getGLDrawMode(
68
+ topology: PrimitiveTopology
69
+ ):
70
+ | GL.POINTS
71
+ | GL.LINES
72
+ | GL.LINE_STRIP
73
+ | GL.LINE_LOOP
74
+ | GL.TRIANGLES
75
+ | GL.TRIANGLE_STRIP
76
+ | GL.TRIANGLE_FAN {
77
+ // prettier-ignore
78
+ switch (topology) {
79
+ case 'point-list': return GL.POINTS;
80
+ case 'line-list': return GL.LINES;
81
+ case 'line-strip': return GL.LINE_STRIP;
82
+ case 'line-loop-webgl': return GL.LINE_LOOP;
83
+ case 'triangle-list': return GL.TRIANGLES;
84
+ case 'triangle-strip': return GL.TRIANGLE_STRIP;
85
+ case 'triangle-fan-webgl': return GL.TRIANGLE_FAN;
86
+ default: throw new Error(topology);
87
+ }
88
+ }
89
+
90
+ /** Get the primitive type for transform feedback */
91
+ export function getGLPrimitive(topology: PrimitiveTopology): GL.POINTS | GL.LINES | GL.TRIANGLES {
92
+ // prettier-ignore
93
+ switch (topology) {
94
+ case 'point-list': return GL.POINTS;
95
+ case 'line-list': return GL.LINES;
96
+ case 'line-strip': return GL.LINES;
97
+ case 'line-loop-webgl': return GL.LINES;
98
+ case 'triangle-list': return GL.TRIANGLES;
99
+ case 'triangle-strip': return GL.TRIANGLES;
100
+ case 'triangle-fan-webgl': return GL.TRIANGLES;
101
+ default: throw new Error(topology);
102
+ }
103
+ }