@luma.gl/webgl 9.0.0-alpha.2 → 9.0.0-alpha.20

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 (454) hide show
  1. package/dist/adapter/converters/device-parameters.d.ts +11 -1
  2. package/dist/adapter/converters/device-parameters.d.ts.map +1 -1
  3. package/dist/adapter/converters/device-parameters.js +17 -35
  4. package/dist/adapter/converters/device-parameters.js.map +1 -1
  5. package/dist/adapter/converters/renderbuffer-formats.js +1 -5
  6. package/dist/adapter/converters/renderbuffer-formats.js.map +1 -1
  7. package/dist/adapter/converters/sampler-parameters.d.ts +4 -4
  8. package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
  9. package/dist/adapter/converters/sampler-parameters.js +19 -55
  10. package/dist/adapter/converters/sampler-parameters.js.map +1 -1
  11. package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
  12. package/dist/adapter/converters/texture-formats.js +13 -66
  13. package/dist/adapter/converters/texture-formats.js.map +1 -1
  14. package/dist/adapter/converters/vertex-formats.d.ts.map +1 -1
  15. package/dist/adapter/converters/vertex-formats.js +2 -8
  16. package/dist/adapter/converters/vertex-formats.js.map +1 -1
  17. package/dist/adapter/device-helpers/device-features.d.ts.map +1 -1
  18. package/dist/adapter/device-helpers/device-features.js +13 -20
  19. package/dist/adapter/device-helpers/device-features.js.map +1 -1
  20. package/dist/adapter/device-helpers/device-limits.js +1 -4
  21. package/dist/adapter/device-helpers/device-limits.js.map +1 -1
  22. package/dist/adapter/device-helpers/get-device-info.js +8 -10
  23. package/dist/adapter/device-helpers/get-device-info.js.map +1 -1
  24. package/dist/adapter/device-helpers/is-old-ie.js +2 -1
  25. package/dist/adapter/device-helpers/is-old-ie.js.map +1 -1
  26. package/dist/adapter/helpers/attribute-utils.js +0 -17
  27. package/dist/adapter/helpers/attribute-utils.js.map +1 -1
  28. package/dist/adapter/helpers/get-shader-info.d.ts +9 -0
  29. package/dist/adapter/helpers/get-shader-info.d.ts.map +1 -0
  30. package/dist/adapter/helpers/get-shader-info.js +25 -0
  31. package/dist/adapter/helpers/get-shader-info.js.map +1 -0
  32. package/dist/adapter/helpers/get-shader-layout.d.ts +1 -1
  33. package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
  34. package/dist/adapter/helpers/get-shader-layout.js +41 -67
  35. package/dist/adapter/helpers/get-shader-layout.js.map +1 -1
  36. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts +1 -1
  37. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts.map +1 -1
  38. package/dist/adapter/helpers/parse-shader-compiler-log.js +0 -7
  39. package/dist/adapter/helpers/parse-shader-compiler-log.js.map +1 -1
  40. package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
  41. package/dist/adapter/helpers/set-uniform.js +1 -31
  42. package/dist/adapter/helpers/set-uniform.js.map +1 -1
  43. package/dist/adapter/helpers/uniforms.d.ts +1 -1
  44. package/dist/adapter/helpers/uniforms.d.ts.map +1 -1
  45. package/dist/adapter/helpers/uniforms.js +4 -14
  46. package/dist/adapter/helpers/uniforms.js.map +1 -1
  47. package/dist/adapter/objects/constants-to-keys.d.ts.map +1 -1
  48. package/dist/adapter/objects/constants-to-keys.js +0 -7
  49. package/dist/adapter/objects/constants-to-keys.js.map +1 -1
  50. package/dist/adapter/objects/webgl-renderbuffer.d.ts.map +1 -1
  51. package/dist/adapter/objects/webgl-renderbuffer.js +5 -21
  52. package/dist/adapter/objects/webgl-renderbuffer.js.map +1 -1
  53. package/dist/adapter/objects/webgl-resource.d.ts +2 -4
  54. package/dist/adapter/objects/webgl-resource.d.ts.map +1 -1
  55. package/dist/adapter/objects/webgl-resource.js +14 -67
  56. package/dist/adapter/objects/webgl-resource.js.map +1 -1
  57. package/dist/adapter/objects/webgl-vertex-array-object.d.ts +1 -1
  58. package/dist/adapter/objects/webgl-vertex-array-object.d.ts.map +1 -1
  59. package/dist/adapter/objects/webgl-vertex-array-object.js +6 -16
  60. package/dist/adapter/objects/webgl-vertex-array-object.js.map +1 -1
  61. package/dist/adapter/resources/webgl-buffer.d.ts +1 -2
  62. package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
  63. package/dist/adapter/resources/webgl-buffer.js +17 -48
  64. package/dist/adapter/resources/webgl-buffer.js.map +1 -1
  65. package/dist/adapter/resources/webgl-command-buffer.js +2 -17
  66. package/dist/adapter/resources/webgl-command-buffer.js.map +1 -1
  67. package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -1
  68. package/dist/adapter/resources/webgl-command-encoder.js +1 -14
  69. package/dist/adapter/resources/webgl-command-encoder.js.map +1 -1
  70. package/dist/adapter/resources/webgl-external-texture.js.map +1 -1
  71. package/dist/adapter/resources/webgl-framebuffer.d.ts +1 -1
  72. package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
  73. package/dist/adapter/resources/webgl-framebuffer.js +9 -67
  74. package/dist/adapter/resources/webgl-framebuffer.js.map +1 -1
  75. package/dist/adapter/resources/webgl-render-pass.d.ts +1 -1
  76. package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
  77. package/dist/adapter/resources/webgl-render-pass.js +2 -7
  78. package/dist/adapter/resources/webgl-render-pass.js.map +1 -1
  79. package/dist/adapter/resources/webgl-render-pipeline.d.ts +1 -1
  80. package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
  81. package/dist/adapter/resources/webgl-render-pipeline.js +50 -139
  82. package/dist/adapter/resources/webgl-render-pipeline.js.map +1 -1
  83. package/dist/adapter/resources/webgl-sampler.d.ts +3 -2
  84. package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
  85. package/dist/adapter/resources/webgl-sampler.js +4 -12
  86. package/dist/adapter/resources/webgl-sampler.js.map +1 -1
  87. package/dist/adapter/resources/webgl-shader.d.ts +1 -2
  88. package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
  89. package/dist/adapter/resources/webgl-shader.js +7 -20
  90. package/dist/adapter/resources/webgl-shader.js.map +1 -1
  91. package/dist/adapter/resources/webgl-texture.d.ts +23 -23
  92. package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
  93. package/dist/adapter/resources/webgl-texture.js +65 -182
  94. package/dist/adapter/resources/webgl-texture.js.map +1 -1
  95. package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
  96. package/dist/adapter/webgl-canvas-context.js +5 -18
  97. package/dist/adapter/webgl-canvas-context.js.map +1 -1
  98. package/dist/adapter/webgl-device.d.ts +45 -29
  99. package/dist/adapter/webgl-device.d.ts.map +1 -1
  100. package/dist/adapter/webgl-device.js +107 -108
  101. package/dist/adapter/webgl-device.js.map +1 -1
  102. package/dist/classic/accessor.d.ts.map +1 -1
  103. package/dist/classic/accessor.js +11 -35
  104. package/dist/classic/accessor.js.map +1 -1
  105. package/dist/classic/buffer.d.ts +0 -1
  106. package/dist/classic/buffer.d.ts.map +1 -1
  107. package/dist/classic/buffer.js +29 -86
  108. package/dist/classic/buffer.js.map +1 -1
  109. package/dist/classic/typed-array-utils.d.ts +1 -1
  110. package/dist/classic/typed-array-utils.d.ts.map +1 -1
  111. package/dist/classic/typed-array-utils.js +0 -20
  112. package/dist/classic/typed-array-utils.js.map +1 -1
  113. package/dist/context/context/{create-context.d.ts → create-browser-context.d.ts} +2 -1
  114. package/dist/context/context/create-browser-context.d.ts.map +1 -0
  115. package/dist/context/context/{create-context.js → create-browser-context.js} +19 -15
  116. package/dist/context/context/create-browser-context.js.map +1 -0
  117. package/dist/context/context/create-headless-context.d.ts +9 -0
  118. package/dist/context/context/create-headless-context.d.ts.map +1 -0
  119. package/dist/context/context/create-headless-context.js +42 -0
  120. package/dist/context/context/create-headless-context.js.map +1 -0
  121. package/dist/context/context/webgl-checks.js +0 -3
  122. package/dist/context/context/webgl-checks.js.map +1 -1
  123. package/dist/context/debug/spector.d.ts +1 -0
  124. package/dist/context/debug/spector.d.ts.map +1 -1
  125. package/dist/context/debug/spector.js +7 -19
  126. package/dist/context/debug/spector.js.map +1 -1
  127. package/dist/context/debug/webgl-developer-tools.d.ts +1 -1
  128. package/dist/context/debug/webgl-developer-tools.d.ts.map +1 -1
  129. package/dist/context/debug/webgl-developer-tools.js +8 -32
  130. package/dist/context/debug/webgl-developer-tools.js.map +1 -1
  131. package/dist/context/parameters/unified-parameter-api.d.ts +6 -5
  132. package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
  133. package/dist/context/parameters/unified-parameter-api.js +8 -18
  134. package/dist/context/parameters/unified-parameter-api.js.map +1 -1
  135. package/dist/context/parameters/webgl-parameter-tables.d.ts +103 -103
  136. package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
  137. package/dist/context/parameters/webgl-parameter-tables.js +16 -34
  138. package/dist/context/parameters/webgl-parameter-tables.js.map +1 -1
  139. package/dist/context/polyfill/context-data.d.ts +13 -0
  140. package/dist/context/polyfill/context-data.d.ts.map +1 -0
  141. package/dist/context/polyfill/context-data.js +12 -0
  142. package/dist/context/polyfill/context-data.js.map +1 -0
  143. package/dist/context/polyfill/get-parameter-polyfill.d.ts +1 -1
  144. package/dist/context/polyfill/get-parameter-polyfill.d.ts.map +1 -1
  145. package/dist/context/polyfill/get-parameter-polyfill.js +1 -6
  146. package/dist/context/polyfill/get-parameter-polyfill.js.map +1 -1
  147. package/dist/context/polyfill/polyfill-context.js +20 -28
  148. package/dist/context/polyfill/polyfill-context.js.map +1 -1
  149. package/dist/context/polyfill/polyfill-table.d.ts +8 -8
  150. package/dist/context/polyfill/polyfill-table.d.ts.map +1 -1
  151. package/dist/context/polyfill/polyfill-table.js +8 -30
  152. package/dist/context/polyfill/polyfill-table.js.map +1 -1
  153. package/dist/context/polyfill/polyfill-vertex-array-object.d.ts.map +1 -1
  154. package/dist/context/polyfill/polyfill-vertex-array-object.js +0 -70
  155. package/dist/context/polyfill/polyfill-vertex-array-object.js.map +1 -1
  156. package/dist/context/state-tracker/deep-array-equal.js +0 -4
  157. package/dist/context/state-tracker/deep-array-equal.js.map +1 -1
  158. package/dist/context/state-tracker/track-context-state.d.ts.map +1 -1
  159. package/dist/context/state-tracker/track-context-state.js +15 -50
  160. package/dist/context/state-tracker/track-context-state.js.map +1 -1
  161. package/dist/context/state-tracker/with-parameters.d.ts +2 -1
  162. package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
  163. package/dist/context/state-tracker/with-parameters.js +7 -9
  164. package/dist/context/state-tracker/with-parameters.js.map +1 -1
  165. package/dist/dist.dev.js +9205 -0
  166. package/dist/index.cjs +5948 -0
  167. package/dist/index.d.ts +6 -6
  168. package/dist/index.d.ts.map +1 -1
  169. package/dist/index.js +24 -26
  170. package/dist/index.js.map +1 -1
  171. package/dist/types/webgl.d.ts +8 -7
  172. package/dist/types/webgl.d.ts.map +1 -1
  173. package/dist/types/webgl.js.map +1 -1
  174. package/dist/types.js.map +1 -1
  175. package/dist.min.js +36 -0
  176. package/package.json +18 -9
  177. package/src/adapter/converters/device-parameters.ts +44 -15
  178. package/src/adapter/converters/sampler-parameters.ts +18 -7
  179. package/src/adapter/converters/texture-formats.ts +18 -16
  180. package/src/adapter/converters/vertex-formats.ts +1 -0
  181. package/src/adapter/device-helpers/device-features.ts +9 -2
  182. package/src/adapter/device-helpers/device-limits.ts +1 -1
  183. package/src/adapter/device-helpers/get-device-info.ts +12 -8
  184. package/src/adapter/helpers/get-shader-info.ts +37 -0
  185. package/src/adapter/helpers/get-shader-layout.ts +58 -36
  186. package/src/adapter/helpers/parse-shader-compiler-log.ts +2 -2
  187. package/src/adapter/helpers/set-uniform.ts +3 -1
  188. package/src/adapter/helpers/uniforms.ts +21 -10
  189. package/src/adapter/objects/constants-to-keys.ts +4 -1
  190. package/src/adapter/objects/webgl-renderbuffer.ts +5 -5
  191. package/src/adapter/objects/webgl-resource.ts +7 -12
  192. package/src/adapter/objects/webgl-vertex-array-object.ts +5 -5
  193. package/src/adapter/resources/webgl-buffer.ts +14 -14
  194. package/src/adapter/resources/webgl-command-encoder.ts +5 -5
  195. package/src/adapter/resources/webgl-framebuffer.ts +14 -11
  196. package/src/adapter/resources/webgl-render-pass.ts +2 -1
  197. package/src/adapter/resources/webgl-render-pipeline.ts +83 -71
  198. package/src/adapter/resources/webgl-sampler.ts +10 -4
  199. package/src/adapter/resources/webgl-shader.ts +9 -8
  200. package/src/adapter/resources/webgl-texture.ts +51 -41
  201. package/src/adapter/webgl-canvas-context.ts +5 -6
  202. package/src/adapter/webgl-device.ts +144 -60
  203. package/src/classic/accessor.ts +1 -14
  204. package/src/classic/buffer.ts +14 -21
  205. package/src/classic/typed-array-utils.ts +4 -2
  206. package/src/context/context/{create-context.ts → create-browser-context.ts} +17 -7
  207. package/src/context/context/create-headless-context.ts +48 -0
  208. package/src/context/debug/spector.ts +6 -5
  209. package/src/context/debug/webgl-developer-tools.ts +13 -13
  210. package/src/context/parameters/unified-parameter-api.ts +17 -11
  211. package/src/context/parameters/webgl-parameter-tables.ts +113 -94
  212. package/src/context/polyfill/context-data.ts +27 -0
  213. package/src/context/polyfill/get-parameter-polyfill.ts +7 -6
  214. package/src/context/polyfill/polyfill-context.ts +6 -8
  215. package/src/context/polyfill/polyfill-table.ts +16 -14
  216. package/src/context/polyfill/polyfill-vertex-array-object.ts +2 -0
  217. package/src/context/state-tracker/track-context-state.ts +13 -12
  218. package/src/context/state-tracker/with-parameters.ts +8 -2
  219. package/src/index.ts +14 -12
  220. package/src/types/webgl.ts +10 -7
  221. package/dist/bundle.d.ts +0 -2
  222. package/dist/bundle.d.ts.map +0 -1
  223. package/dist/bundle.js +0 -5
  224. package/dist/bundle.js.map +0 -1
  225. package/dist/context/context/context-state.d.ts +0 -18
  226. package/dist/context/context/context-state.d.ts.map +0 -1
  227. package/dist/context/context/context-state.js +0 -26
  228. package/dist/context/context/context-state.js.map +0 -1
  229. package/dist/context/context/create-context.d.ts.map +0 -1
  230. package/dist/context/context/create-context.js.map +0 -1
  231. package/dist/context/context/device-pixels.d.ts +0 -25
  232. package/dist/context/context/device-pixels.d.ts.map +0 -1
  233. package/dist/context/context/device-pixels.js +0 -98
  234. package/dist/context/context/device-pixels.js.map +0 -1
  235. package/dist/es5/adapter/converters/device-parameters.js +0 -170
  236. package/dist/es5/adapter/converters/device-parameters.js.map +0 -1
  237. package/dist/es5/adapter/converters/renderbuffer-formats.js +0 -163
  238. package/dist/es5/adapter/converters/renderbuffer-formats.js.map +0 -1
  239. package/dist/es5/adapter/converters/sampler-parameters.js +0 -226
  240. package/dist/es5/adapter/converters/sampler-parameters.js.map +0 -1
  241. package/dist/es5/adapter/converters/texture-formats.js +0 -1031
  242. package/dist/es5/adapter/converters/texture-formats.js.map +0 -1
  243. package/dist/es5/adapter/converters/vertex-formats.js +0 -45
  244. package/dist/es5/adapter/converters/vertex-formats.js.map +0 -1
  245. package/dist/es5/adapter/device-helpers/device-features.js +0 -144
  246. package/dist/es5/adapter/device-helpers/device-features.js.map +0 -1
  247. package/dist/es5/adapter/device-helpers/device-limits.js +0 -64
  248. package/dist/es5/adapter/device-helpers/device-limits.js.map +0 -1
  249. package/dist/es5/adapter/device-helpers/get-device-info.js +0 -55
  250. package/dist/es5/adapter/device-helpers/get-device-info.js.map +0 -1
  251. package/dist/es5/adapter/device-helpers/is-old-ie.js +0 -16
  252. package/dist/es5/adapter/device-helpers/is-old-ie.js.map +0 -1
  253. package/dist/es5/adapter/helpers/attribute-utils.js +0 -91
  254. package/dist/es5/adapter/helpers/attribute-utils.js.map +0 -1
  255. package/dist/es5/adapter/helpers/get-shader-layout.js +0 -371
  256. package/dist/es5/adapter/helpers/get-shader-layout.js.map +0 -1
  257. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js +0 -72
  258. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  259. package/dist/es5/adapter/helpers/set-uniform.js +0 -125
  260. package/dist/es5/adapter/helpers/set-uniform.js.map +0 -1
  261. package/dist/es5/adapter/helpers/uniforms.js +0 -112
  262. package/dist/es5/adapter/helpers/uniforms.js.map +0 -1
  263. package/dist/es5/adapter/objects/constants-to-keys.js +0 -54
  264. package/dist/es5/adapter/objects/constants-to-keys.js.map +0 -1
  265. package/dist/es5/adapter/objects/webgl-renderbuffer.js +0 -150
  266. package/dist/es5/adapter/objects/webgl-renderbuffer.js.map +0 -1
  267. package/dist/es5/adapter/objects/webgl-resource.js +0 -292
  268. package/dist/es5/adapter/objects/webgl-resource.js.map +0 -1
  269. package/dist/es5/adapter/objects/webgl-vertex-array-object.js +0 -137
  270. package/dist/es5/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  271. package/dist/es5/adapter/resources/webgl-buffer.js +0 -243
  272. package/dist/es5/adapter/resources/webgl-buffer.js.map +0 -1
  273. package/dist/es5/adapter/resources/webgl-command-buffer.js +0 -96
  274. package/dist/es5/adapter/resources/webgl-command-buffer.js.map +0 -1
  275. package/dist/es5/adapter/resources/webgl-command-encoder.js +0 -98
  276. package/dist/es5/adapter/resources/webgl-command-encoder.js.map +0 -1
  277. package/dist/es5/adapter/resources/webgl-external-texture.js +0 -2
  278. package/dist/es5/adapter/resources/webgl-external-texture.js.map +0 -1
  279. package/dist/es5/adapter/resources/webgl-framebuffer.js +0 -345
  280. package/dist/es5/adapter/resources/webgl-framebuffer.js.map +0 -1
  281. package/dist/es5/adapter/resources/webgl-render-pass.js +0 -61
  282. package/dist/es5/adapter/resources/webgl-render-pass.js.map +0 -1
  283. package/dist/es5/adapter/resources/webgl-render-pipeline.js +0 -505
  284. package/dist/es5/adapter/resources/webgl-render-pipeline.js.map +0 -1
  285. package/dist/es5/adapter/resources/webgl-sampler.js +0 -96
  286. package/dist/es5/adapter/resources/webgl-sampler.js.map +0 -1
  287. package/dist/es5/adapter/resources/webgl-shader.js +0 -149
  288. package/dist/es5/adapter/resources/webgl-shader.js.map +0 -1
  289. package/dist/es5/adapter/resources/webgl-texture.js +0 -986
  290. package/dist/es5/adapter/resources/webgl-texture.js.map +0 -1
  291. package/dist/es5/adapter/webgl-canvas-context.js +0 -97
  292. package/dist/es5/adapter/webgl-canvas-context.js.map +0 -1
  293. package/dist/es5/adapter/webgl-device.js +0 -399
  294. package/dist/es5/adapter/webgl-device.js.map +0 -1
  295. package/dist/es5/bundle.js +0 -7
  296. package/dist/es5/bundle.js.map +0 -1
  297. package/dist/es5/classic/accessor.js +0 -181
  298. package/dist/es5/classic/accessor.js.map +0 -1
  299. package/dist/es5/classic/buffer.js +0 -470
  300. package/dist/es5/classic/buffer.js.map +0 -1
  301. package/dist/es5/classic/typed-array-utils.js +0 -126
  302. package/dist/es5/classic/typed-array-utils.js.map +0 -1
  303. package/dist/es5/context/context/context-state.js +0 -31
  304. package/dist/es5/context/context/context-state.js.map +0 -1
  305. package/dist/es5/context/context/create-context.js +0 -69
  306. package/dist/es5/context/context/create-context.js.map +0 -1
  307. package/dist/es5/context/context/device-pixels.js +0 -115
  308. package/dist/es5/context/context/device-pixels.js.map +0 -1
  309. package/dist/es5/context/context/webgl-checks.js +0 -54
  310. package/dist/es5/context/context/webgl-checks.js.map +0 -1
  311. package/dist/es5/context/debug/spector.js +0 -133
  312. package/dist/es5/context/debug/spector.js.map +0 -1
  313. package/dist/es5/context/debug/webgl-developer-tools.js +0 -198
  314. package/dist/es5/context/debug/webgl-developer-tools.js.map +0 -1
  315. package/dist/es5/context/parameters/unified-parameter-api.js +0 -97
  316. package/dist/es5/context/parameters/unified-parameter-api.js.map +0 -1
  317. package/dist/es5/context/parameters/webgl-parameter-tables.js +0 -392
  318. package/dist/es5/context/parameters/webgl-parameter-tables.js.map +0 -1
  319. package/dist/es5/context/polyfill/get-parameter-polyfill.js +0 -81
  320. package/dist/es5/context/polyfill/get-parameter-polyfill.js.map +0 -1
  321. package/dist/es5/context/polyfill/polyfill-context.js +0 -135
  322. package/dist/es5/context/polyfill/polyfill-context.js.map +0 -1
  323. package/dist/es5/context/polyfill/polyfill-table.js +0 -166
  324. package/dist/es5/context/polyfill/polyfill-table.js.map +0 -1
  325. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js +0 -341
  326. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  327. package/dist/es5/context/state-tracker/deep-array-equal.js +0 -28
  328. package/dist/es5/context/state-tracker/deep-array-equal.js.map +0 -1
  329. package/dist/es5/context/state-tracker/track-context-state.js +0 -211
  330. package/dist/es5/context/state-tracker/track-context-state.js.map +0 -1
  331. package/dist/es5/context/state-tracker/with-parameters.js +0 -44
  332. package/dist/es5/context/state-tracker/with-parameters.js.map +0 -1
  333. package/dist/es5/index.js +0 -276
  334. package/dist/es5/index.js.map +0 -1
  335. package/dist/es5/init.js +0 -10
  336. package/dist/es5/init.js.map +0 -1
  337. package/dist/es5/types/webgl.js +0 -6
  338. package/dist/es5/types/webgl.js.map +0 -1
  339. package/dist/es5/types.js +0 -2
  340. package/dist/es5/types.js.map +0 -1
  341. package/dist/esm/adapter/converters/device-parameters.js +0 -155
  342. package/dist/esm/adapter/converters/device-parameters.js.map +0 -1
  343. package/dist/esm/adapter/converters/renderbuffer-formats.js +0 -185
  344. package/dist/esm/adapter/converters/renderbuffer-formats.js.map +0 -1
  345. package/dist/esm/adapter/converters/sampler-parameters.js +0 -208
  346. package/dist/esm/adapter/converters/sampler-parameters.js.map +0 -1
  347. package/dist/esm/adapter/converters/texture-formats.js +0 -954
  348. package/dist/esm/adapter/converters/texture-formats.js.map +0 -1
  349. package/dist/esm/adapter/converters/vertex-formats.js +0 -35
  350. package/dist/esm/adapter/converters/vertex-formats.js.map +0 -1
  351. package/dist/esm/adapter/device-helpers/device-features.js +0 -102
  352. package/dist/esm/adapter/device-helpers/device-features.js.map +0 -1
  353. package/dist/esm/adapter/device-helpers/device-limits.js +0 -91
  354. package/dist/esm/adapter/device-helpers/device-limits.js.map +0 -1
  355. package/dist/esm/adapter/device-helpers/get-device-info.js +0 -44
  356. package/dist/esm/adapter/device-helpers/get-device-info.js.map +0 -1
  357. package/dist/esm/adapter/device-helpers/is-old-ie.js +0 -8
  358. package/dist/esm/adapter/device-helpers/is-old-ie.js.map +0 -1
  359. package/dist/esm/adapter/helpers/attribute-utils.js +0 -81
  360. package/dist/esm/adapter/helpers/attribute-utils.js.map +0 -1
  361. package/dist/esm/adapter/helpers/get-shader-layout.js +0 -306
  362. package/dist/esm/adapter/helpers/get-shader-layout.js.map +0 -1
  363. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js +0 -37
  364. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  365. package/dist/esm/adapter/helpers/set-uniform.js +0 -115
  366. package/dist/esm/adapter/helpers/set-uniform.js.map +0 -1
  367. package/dist/esm/adapter/helpers/uniforms.js +0 -99
  368. package/dist/esm/adapter/helpers/uniforms.js.map +0 -1
  369. package/dist/esm/adapter/objects/constants-to-keys.js +0 -42
  370. package/dist/esm/adapter/objects/constants-to-keys.js.map +0 -1
  371. package/dist/esm/adapter/objects/webgl-renderbuffer.js +0 -94
  372. package/dist/esm/adapter/objects/webgl-renderbuffer.js.map +0 -1
  373. package/dist/esm/adapter/objects/webgl-resource.js +0 -216
  374. package/dist/esm/adapter/objects/webgl-resource.js.map +0 -1
  375. package/dist/esm/adapter/objects/webgl-vertex-array-object.js +0 -84
  376. package/dist/esm/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  377. package/dist/esm/adapter/resources/webgl-buffer.js +0 -164
  378. package/dist/esm/adapter/resources/webgl-buffer.js.map +0 -1
  379. package/dist/esm/adapter/resources/webgl-command-buffer.js +0 -65
  380. package/dist/esm/adapter/resources/webgl-command-buffer.js.map +0 -1
  381. package/dist/esm/adapter/resources/webgl-command-encoder.js +0 -53
  382. package/dist/esm/adapter/resources/webgl-command-encoder.js.map +0 -1
  383. package/dist/esm/adapter/resources/webgl-external-texture.js +0 -2
  384. package/dist/esm/adapter/resources/webgl-external-texture.js.map +0 -1
  385. package/dist/esm/adapter/resources/webgl-framebuffer.js +0 -265
  386. package/dist/esm/adapter/resources/webgl-framebuffer.js.map +0 -1
  387. package/dist/esm/adapter/resources/webgl-render-pass.js +0 -19
  388. package/dist/esm/adapter/resources/webgl-render-pass.js.map +0 -1
  389. package/dist/esm/adapter/resources/webgl-render-pipeline.js +0 -400
  390. package/dist/esm/adapter/resources/webgl-render-pipeline.js.map +0 -1
  391. package/dist/esm/adapter/resources/webgl-sampler.js +0 -50
  392. package/dist/esm/adapter/resources/webgl-sampler.js.map +0 -1
  393. package/dist/esm/adapter/resources/webgl-shader.js +0 -75
  394. package/dist/esm/adapter/resources/webgl-shader.js.map +0 -1
  395. package/dist/esm/adapter/resources/webgl-texture.js +0 -831
  396. package/dist/esm/adapter/resources/webgl-texture.js.map +0 -1
  397. package/dist/esm/adapter/webgl-canvas-context.js +0 -54
  398. package/dist/esm/adapter/webgl-canvas-context.js.map +0 -1
  399. package/dist/esm/adapter/webgl-device.js +0 -280
  400. package/dist/esm/adapter/webgl-device.js.map +0 -1
  401. package/dist/esm/bundle.js +0 -5
  402. package/dist/esm/bundle.js.map +0 -1
  403. package/dist/esm/classic/accessor.js +0 -144
  404. package/dist/esm/classic/accessor.js.map +0 -1
  405. package/dist/esm/classic/buffer.js +0 -384
  406. package/dist/esm/classic/buffer.js.map +0 -1
  407. package/dist/esm/classic/typed-array-utils.js +0 -112
  408. package/dist/esm/classic/typed-array-utils.js.map +0 -1
  409. package/dist/esm/context/context/context-state.js +0 -26
  410. package/dist/esm/context/context/context-state.js.map +0 -1
  411. package/dist/esm/context/context/create-context.js +0 -49
  412. package/dist/esm/context/context/create-context.js.map +0 -1
  413. package/dist/esm/context/context/device-pixels.js +0 -98
  414. package/dist/esm/context/context/device-pixels.js.map +0 -1
  415. package/dist/esm/context/context/webgl-checks.js +0 -34
  416. package/dist/esm/context/context/webgl-checks.js.map +0 -1
  417. package/dist/esm/context/debug/spector.js +0 -76
  418. package/dist/esm/context/debug/spector.js.map +0 -1
  419. package/dist/esm/context/debug/webgl-developer-tools.js +0 -121
  420. package/dist/esm/context/debug/webgl-developer-tools.js.map +0 -1
  421. package/dist/esm/context/parameters/unified-parameter-api.js +0 -65
  422. package/dist/esm/context/parameters/unified-parameter-api.js.map +0 -1
  423. package/dist/esm/context/parameters/webgl-parameter-tables.js +0 -445
  424. package/dist/esm/context/parameters/webgl-parameter-tables.js.map +0 -1
  425. package/dist/esm/context/polyfill/get-parameter-polyfill.js +0 -91
  426. package/dist/esm/context/polyfill/get-parameter-polyfill.js.map +0 -1
  427. package/dist/esm/context/polyfill/polyfill-context.js +0 -92
  428. package/dist/esm/context/polyfill/polyfill-context.js.map +0 -1
  429. package/dist/esm/context/polyfill/polyfill-table.js +0 -160
  430. package/dist/esm/context/polyfill/polyfill-table.js.map +0 -1
  431. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js +0 -335
  432. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  433. package/dist/esm/context/state-tracker/deep-array-equal.js +0 -21
  434. package/dist/esm/context/state-tracker/deep-array-equal.js.map +0 -1
  435. package/dist/esm/context/state-tracker/track-context-state.js +0 -183
  436. package/dist/esm/context/state-tracker/track-context-state.js.map +0 -1
  437. package/dist/esm/context/state-tracker/with-parameters.js +0 -36
  438. package/dist/esm/context/state-tracker/with-parameters.js.map +0 -1
  439. package/dist/esm/index.js +0 -27
  440. package/dist/esm/index.js.map +0 -1
  441. package/dist/esm/init.js +0 -4
  442. package/dist/esm/init.js.map +0 -1
  443. package/dist/esm/types/webgl.js +0 -2
  444. package/dist/esm/types/webgl.js.map +0 -1
  445. package/dist/esm/types.js +0 -2
  446. package/dist/esm/types.js.map +0 -1
  447. package/dist/init.d.ts +0 -2
  448. package/dist/init.d.ts.map +0 -1
  449. package/dist/init.js +0 -4
  450. package/dist/init.js.map +0 -1
  451. package/src/bundle.ts +0 -4
  452. package/src/context/context/context-state.ts +0 -41
  453. package/src/context/context/device-pixels.ts +0 -152
  454. package/src/init.ts +0 -4
package/package.json CHANGED
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "name": "@luma.gl/webgl",
3
- "version": "9.0.0-alpha.2",
3
+ "version": "9.0.0-alpha.20",
4
4
  "description": "WebGL2 adapter for the luma.gl API",
5
+ "type": "module",
5
6
  "license": "MIT",
6
7
  "publishConfig": {
7
8
  "access": "public"
@@ -16,12 +17,20 @@
16
17
  "animation",
17
18
  "3d"
18
19
  ],
19
- "types": "src/index.ts",
20
- "main": "dist/index.js",
20
+ "types": "dist/index.d.ts",
21
+ "main": "dist/index.cjs",
21
22
  "module": "dist/index.js",
23
+ "exports": {
24
+ ".": {
25
+ "import": "./dist/index.js",
26
+ "require": "./dist/index.cjs",
27
+ "types": "./dist/index.d.ts"
28
+ }
29
+ },
22
30
  "files": [
23
31
  "src",
24
32
  "dist",
33
+ "dist.min.js",
25
34
  "README.md"
26
35
  ],
27
36
  "sideEffects": false,
@@ -30,14 +39,14 @@
30
39
  "gl/wrap": false
31
40
  },
32
41
  "scripts": {
33
- "pre-build": "npm run build-bundle",
34
- "build-bundle": "webpack --display=minimal --config ../../scripts/bundle.config.js"
42
+ "build-bundle": "ocular-bundle ./src/index.ts",
43
+ "pre-build": "npm run build-bundle && npm run build-bundle -- --env=dev"
35
44
  },
36
45
  "dependencies": {
37
46
  "@babel/runtime": "^7.0.0",
38
- "@luma.gl/api": "9.0.0-alpha.2",
39
- "@luma.gl/constants": "9.0.0-alpha.2",
40
- "@probe.gl/env": "^3.5.0"
47
+ "@luma.gl/api": "9.0.0-alpha.20",
48
+ "@luma.gl/constants": "9.0.0-alpha.20",
49
+ "@probe.gl/env": "^4.0.2"
41
50
  },
42
- "gitHead": "81e93840f31f0e32f86dfea6b576acf2c2d9caec"
51
+ "gitHead": "2c96cf4f25c15483008cb9bfb212a91f91463940"
43
52
  }
@@ -5,6 +5,8 @@ import {pushContextState, popContextState} from '../../context/state-tracker/tra
5
5
  import {setParameters} from '../../context/parameters/unified-parameter-api';
6
6
  import WebGLDevice from '../webgl-device';
7
7
 
8
+ /* eslint-disable no-unused-expressions */ // For expression ? gl.enable() : gl.disable()
9
+
8
10
  /**
9
11
  * Execute a function with a set of temporary WebGL parameter overrides
10
12
  * - Saves current "global" WebGL context settings
@@ -12,8 +14,9 @@ import WebGLDevice from '../webgl-device';
12
14
  * - Executes supplied function
13
15
  * - Restores parameters
14
16
  * - Returns the return value of the supplied function
17
+ * @deprecated use withDeviceParameters instead
15
18
  */
16
- export function withDeviceParameters<T = unknown>(device: Device, parameters: Parameters & GLParameters, func: (device?: Device) => T): T {
19
+ export function withGLParameters<T = unknown>(device: Device, parameters: GLParameters, func: (device?: Device) => T): T {
17
20
  if (isObjectEmpty(parameters)) {
18
21
  // Avoid setting state if no parameters provided. Just call and return
19
22
  return func(device);
@@ -24,6 +27,31 @@ export function withDeviceParameters<T = unknown>(device: Device, parameters: Pa
24
27
  pushContextState(device.gl);
25
28
  try {
26
29
  setParameters(device, parameters);
30
+ return func(device);
31
+ } finally {
32
+ // @ts-expect-error
33
+ popContextState(device.gl);
34
+ }
35
+ }
36
+
37
+ /**
38
+ * Execute a function with a set of temporary WebGL parameter overrides
39
+ * - Saves current "global" WebGL context settings
40
+ * - Sets the supplies WebGL context parameters,
41
+ * - Executes supplied function
42
+ * - Restores parameters
43
+ * - Returns the return value of the supplied function
44
+ */
45
+ export function withDeviceParameters<T = unknown>(device: Device, parameters: Parameters, func: (device?: Device) => T): T {
46
+ if (isObjectEmpty(parameters)) {
47
+ // Avoid setting state if no parameters provided. Just call and return
48
+ return func(device);
49
+ }
50
+
51
+ // Wrap in a try-catch to ensure that parameters are restored on exceptions
52
+ // @ts-expect-error
53
+ pushContextState(device.gl);
54
+ try {
27
55
  setDeviceParameters(device, parameters);
28
56
  return func(device);
29
57
  } finally {
@@ -36,7 +64,7 @@ export function withDeviceParameters<T = unknown>(device: Device, parameters: Pa
36
64
  /** Set WebGPU Style Parameters */
37
65
  export function setDeviceParameters(device: Device, parameters: Parameters) {
38
66
  const webglDevice = WebGLDevice.attach(device);
39
- const {gl, gl2} = webglDevice;
67
+ const {gl} = webglDevice;
40
68
 
41
69
  // RASTERIZATION SETTINGS
42
70
  if (parameters.cullMode) {
@@ -76,7 +104,8 @@ export function setDeviceParameters(device: Device, parameters: Parameters) {
76
104
  gl.depthMask(mapBoolean('depthWriteEnabled', parameters.depthWriteEnabled));
77
105
  }
78
106
 
79
- if (parameters.depthCompare) {
107
+ if (parameters.depthCompare) {
108
+
80
109
  parameters.depthCompare !== 'always' ? gl.enable(GL.DEPTH_TEST) : gl.disable(GL.DEPTH_TEST);
81
110
  gl.depthFunc(convertCompareFunction('depthCompare', parameters.depthCompare));
82
111
  }
@@ -101,7 +130,7 @@ export function setDeviceParameters(device: Device, parameters: Parameters) {
101
130
  gl.stencilFuncSeparate(GL.BACK, glValue, 0, mask);
102
131
  }
103
132
 
104
- if (parameters.stencilPassOperation) {
133
+ if (parameters.stencilPassOperation && parameters.stencilFailOperation && parameters.stencilDepthFailOperation) {
105
134
  const dppass = convertStencilOperation('stencilPassOperation', parameters.stencilPassOperation);
106
135
  const sfail = convertStencilOperation('stencilFailOperation', parameters.stencilFailOperation);
107
136
  const dpfail = convertStencilOperation('stencilDepthFailOperation', parameters.stencilDepthFailOperation);
@@ -198,16 +227,16 @@ function convertStencilOperation(parameter: string, value: StencilOperation): GL
198
227
  });
199
228
  }
200
229
 
201
- function convertBlendOperationToEquation(parameter, value): number {
202
- return map(parameter, value, {
203
- 'add': GL.FUNC_ADD,
204
- 'sub': GL.FUNC_SUBTRACT,
205
- 'reverse-subtract': GL.FUNC_REVERSE_SUBTRACT,
206
- // When using a WebGL 2 context, the following values are available additionally:
207
- 'min': GL.MIN,
208
- 'max': GL.MAX
209
- });
210
- }
230
+ // function convertBlendOperationToEquation(parameter: string, value: string): number {
231
+ // return map(parameter, value, {
232
+ // 'add': GL.FUNC_ADD,
233
+ // 'sub': GL.FUNC_SUBTRACT,
234
+ // 'reverse-subtract': GL.FUNC_REVERSE_SUBTRACT,
235
+ // // When using a WebGL 2 context, the following values are available additionally:
236
+ // 'min': GL.MIN,
237
+ // 'max': GL.MAX
238
+ // });
239
+ // }
211
240
 
212
241
  function message(parameter: string, value: any): string {
213
242
  return `Illegal parameter ${value} for ${parameter}`;
@@ -220,6 +249,6 @@ function map(parameter: string, value: any, valueMap: Record<string, any>): any
220
249
  return valueMap[value];
221
250
  }
222
251
 
223
- function mapBoolean(parameter, value) {
252
+ function mapBoolean(parameter: string, value: boolean): boolean {
224
253
  return value;
225
254
  }
@@ -1,15 +1,17 @@
1
1
  // SAMPLER FILTERS
2
2
  import {SamplerParameters} from '@luma.gl/api';
3
3
  import GL from '@luma.gl/constants';
4
- import {WebGLSamplerParameters} from '../../types/webgl';
4
+ import {GLSamplerParameters} from '../../types/webgl';
5
5
  import {convertCompareFunction, convertToCompareFunction} from './device-parameters';
6
6
 
7
+ /* eslint-disable consistent-return */
8
+
7
9
  /**
8
10
  * Convert WebGPU-style sampler props to WebGL
9
11
  * @param props
10
12
  * @returns
11
13
  */
12
- export function convertSamplerParametersToWebGL(props: SamplerParameters): WebGLSamplerParameters {
14
+ export function convertSamplerParametersToWebGL(props: SamplerParameters): GLSamplerParameters {
13
15
  const params: Record<number, number> = {};
14
16
  if (props.addressModeU) {
15
17
  params[GL.TEXTURE_WRAP_S] = convertAddressMode(props.addressModeU);
@@ -33,14 +35,16 @@ export function convertSamplerParametersToWebGL(props: SamplerParameters): WebGL
33
35
  if (props.lodMaxClamp !== undefined) {
34
36
  params[GL.TEXTURE_MAX_LOD] = props.lodMaxClamp;
35
37
  }
36
- if (props.compare) {
38
+ if (props.type === 'comparison-sampler') {
37
39
  // Setting prop.compare turns this into a comparison sampler
38
40
  params[GL.TEXTURE_COMPARE_MODE] = GL.COMPARE_REF_TO_TEXTURE;
41
+ }
42
+ if (props.compare) {
39
43
  params[GL.TEXTURE_COMPARE_FUNC] = convertCompareFunction('compare', props.compare);
40
44
  }
41
45
  // Note depends on WebGL extension
42
46
  if (props.maxAnisotropy) {
43
- props[GL.TEXTURE_MAX_ANISOTROPY_EXT] = props.maxAnisotropy;
47
+ params[GL.TEXTURE_MAX_ANISOTROPY_EXT] = props.maxAnisotropy;
44
48
  }
45
49
  return params;
46
50
  }
@@ -82,7 +86,7 @@ function convertMinFilterMode(minFilter: 'nearest' | 'linear', mipmapFilter?: 'n
82
86
  * @param props
83
87
  * @returns
84
88
  */
85
- export function convertToSamplerParameters(params: WebGLSamplerParameters): SamplerParameters {
89
+ export function convertToSamplerParameters(params: GLSamplerParameters): SamplerParameters {
86
90
  const props: SamplerParameters = {};
87
91
  if (params[GL.TEXTURE_WRAP_S]) {
88
92
  props.addressModeU = convertToAddressMode(params[GL.TEXTURE_WRAP_S]);
@@ -108,7 +112,10 @@ function convertMinFilterMode(minFilter: 'nearest' | 'linear', mipmapFilter?: 'n
108
112
  if (params[GL.TEXTURE_MAX_LOD]) {
109
113
  props.lodMaxClamp = params[GL.TEXTURE_MAX_LOD];
110
114
  }
111
- if (params[GL.TEXTURE_COMPARE_MODE] === GL.COMPARE_REF_TO_TEXTURE) {
115
+ if (params[GL.TEXTURE_COMPARE_MODE]) {
116
+ props.type = params[GL.TEXTURE_COMPARE_MODE] === GL.COMPARE_REF_TO_TEXTURE ? 'comparison-sampler' : 'color-sampler';
117
+ }
118
+ if (params[GL.TEXTURE_COMPARE_FUNC]) {
112
119
  props.compare = convertToCompareFunction('compare', params[GL.TEXTURE_COMPARE_FUNC]);
113
120
  }
114
121
  // NOTE depends on extension (very common)
@@ -124,6 +131,7 @@ function convertToAddressMode(addressMode: number): 'clamp-to-edge' | 'repeat' |
124
131
  case GL.CLAMP_TO_EDGE: return 'clamp-to-edge';
125
132
  case GL.REPEAT: return 'repeat';
126
133
  case GL.MIRRORED_REPEAT: return 'mirror-repeat';
134
+ default: throw new Error('address');
127
135
  }
128
136
  }
129
137
 
@@ -131,6 +139,7 @@ function convertToMaxFilterMode(filterMode: number): 'nearest' | 'linear' {
131
139
  switch (filterMode) {
132
140
  case GL.NEAREST: return 'nearest';
133
141
  case GL.LINEAR: return 'linear';
142
+ default: throw new Error('maxfilter');
134
143
  }
135
144
  }
136
145
 
@@ -144,6 +153,7 @@ function convertToMinFilterMode(filterMode: number): 'nearest' | 'linear' {
144
153
  case GL.LINEAR_MIPMAP_NEAREST: return 'linear';
145
154
  case GL.NEAREST_MIPMAP_LINEAR: return 'nearest';
146
155
  case GL.LINEAR_MIPMAP_LINEAR: return 'linear';
156
+ default: throw new Error('minfilter');
147
157
  }
148
158
  }
149
159
 
@@ -156,13 +166,14 @@ function convertToMipmapFilterMode(filterMode: number): 'nearest' | 'linear' {
156
166
  case GL.LINEAR_MIPMAP_NEAREST: return 'nearest';
157
167
  case GL.NEAREST_MIPMAP_LINEAR: return 'linear';
158
168
  case GL.LINEAR_MIPMAP_LINEAR: return 'linear';
169
+ default: throw new Error('mipmap');
159
170
  }
160
171
  }
161
172
 
162
173
  /**
163
174
  * Override sampler settings that are not supported by Non-Power-of-Two textures in WebGL1.
164
175
  */
165
- export function updateSamplerParametersForNPOT(parameters: WebGLSamplerParameters): WebGLSamplerParameters {
176
+ export function updateSamplerParametersForNPOT(parameters: GLSamplerParameters): GLSamplerParameters {
166
177
  const newParameters = {...parameters};
167
178
  if (parameters[GL.TEXTURE_MIN_FILTER] !== GL.NEAREST) {
168
179
  // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_MIN_FILTER to LINEAR`)();
@@ -1,8 +1,10 @@
1
- import type {TextureFormat, DeviceFeature, Device} from '@luma.gl/api';
1
+ import type {TextureFormat, DeviceFeature} from '@luma.gl/api';
2
2
  import {decodeTextureFormat} from '@luma.gl/api';
3
3
  import GL from '@luma.gl/constants';
4
4
  import {isWebGL2} from '../../context/context/webgl-checks';
5
5
 
6
+ /* eslint-disable camelcase */
7
+
6
8
  // TEXTURE FEATURES
7
9
 
8
10
  // Define local device feature strings to optimize minification
@@ -29,7 +31,7 @@ const EXT_SRGB = 'EXT_sRGB'; // https://developer.mozilla.org/en-US/docs/Web/API
29
31
  const EXT_TEXTURE_NORM16 = 'EXT_texture_norm16';
30
32
  const EXT_FLOAT_WEBGL1 = 'WEBGL_color_buffer_float';
31
33
  const EXT_FLOAT_RENDER_WEBGL2 = 'EXT_color_buffer_float';
32
- const EXT_HALF_FLOAT_WEBGL1 = 'WEBGL_color_buffer_half_float';
34
+ // const EXT_HALF_FLOAT_WEBGL1 = 'EXT_color_buffer_half_float';
33
35
  // const DEPTH = 'WEBGL_depth_texture';
34
36
 
35
37
  const checkExtension = (gl: WebGLRenderingContext, extension: string): boolean =>
@@ -64,7 +66,7 @@ const TEXTURE_FEATURE_CHECKS: Partial<Record<DeviceFeature, (gl: WebGLRenderingC
64
66
  };
65
67
 
66
68
  export function checkTextureFeature(gl: WebGLRenderingContext, feature: DeviceFeature): boolean {
67
- return TEXTURE_FEATURE_CHECKS[feature]?.(gl);
69
+ return TEXTURE_FEATURE_CHECKS[feature]?.(gl) || false;
68
70
  }
69
71
 
70
72
  const checkTextureFeatures = (gl: WebGLRenderingContext, features: DeviceFeature[]): boolean =>
@@ -240,7 +242,7 @@ export const TEXTURE_FORMATS: Record<TextureFormat, Format> = {
240
242
  // "depth24unorm-stencil8" feature
241
243
  'depth24unorm-stencil8': {gl: GL.DEPTH24_STENCIL8, b: 4, c: 2, p: 1, attachment: GL.DEPTH_STENCIL_ATTACHMENT},
242
244
  // "depth32float-stencil8" feature
243
- "depth32float-stencil8": {gl: GL.DEPTH32F_STENCIL8, b: 5, c: 2, p: 1, attachment: GL.DEPTH_STENCIL_ATTACHMENT},
245
+ 'depth32float-stencil8': {gl: GL.DEPTH32F_STENCIL8, b: 5, c: 2, p: 1, attachment: GL.DEPTH_STENCIL_ATTACHMENT},
244
246
 
245
247
  // BC compressed formats: check device.features.has("texture-compression-bc");
246
248
 
@@ -380,22 +382,22 @@ export function getTextureFormatSupport(
380
382
  if (!info) {
381
383
  return {supported: false};
382
384
  }
383
- let decoded;
384
- try {
385
- decoded = decodeTextureFormat(format);
386
- } catch {}
385
+ // let decoded;
386
+ // try {
387
+ // decoded = decodeTextureFormat(format);
388
+ // } catch {}
387
389
 
388
390
  // Support Check that we have a GL constant
389
391
  let supported = isWebGL2(gl) ? info.gl === undefined : info.gl1 === undefined;
390
392
  supported = supported && checkTextureFeatures(gl, [info.f]);
391
393
 
392
394
  // Filtering
393
- const filterable = info.filter
394
- ? checkTextureFeatures(gl, [info.filter])
395
- : decoded && !decoded.signed;
396
- const renderable = info.filter
397
- ? checkTextureFeatures(gl, [info.render])
398
- : decoded && !decoded.signed;
395
+ // const filterable = info.filter
396
+ // ? checkTextureFeatures(gl, [info.filter])
397
+ // : decoded && !decoded.signed;
398
+ // const renderable = info.filter
399
+ // ? checkTextureFeatures(gl, [info.render])
400
+ // : decoded && !decoded.signed;
399
401
 
400
402
  return {
401
403
  supported,
@@ -520,8 +522,8 @@ export function _checkFloat32ColorAttachment(
520
522
  srcFormat = GL.RGBA,
521
523
  srcType = GL.UNSIGNED_BYTE
522
524
  ) {
523
- let texture: WebGLTexture;
524
- let framebuffer: WebGLFramebuffer;
525
+ let texture: WebGLTexture | null = null;
526
+ let framebuffer: WebGLFramebuffer | null = null;
525
527
  try {
526
528
  texture = gl.createTexture();
527
529
  gl.bindTexture(GL.TEXTURE_2D, texture);
@@ -8,6 +8,7 @@ export function getVertexFormat(type: GL, components: number): VertexFormat {
8
8
  case 2: return `${base}x2`;
9
9
  case 3: return `${base}x3`;
10
10
  case 4: return `${base}x4`;
11
+ default: throw new Error(String(components));
11
12
  }
12
13
  }
13
14
 
@@ -3,7 +3,6 @@
3
3
  // available in an WebGL1 or WebGL2 environment.
4
4
 
5
5
  import {DeviceFeature} from '@luma.gl/api';
6
- import GL from '@luma.gl/constants';
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);
@@ -5,7 +5,7 @@ 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),
@@ -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
  }
@@ -0,0 +1,37 @@
1
+ // luma.gl, MIT license
2
+
3
+ /** Information extracted from shader source code */
4
+ export type ShaderInfo = {
5
+ name: string;
6
+ language: 'glsl' | 'wgsl';
7
+ version: number;
8
+ };
9
+
10
+ /** Extracts information from shader source code */
11
+ export function getShaderInfo(source: string, defaultName?: string): ShaderInfo {
12
+ return {
13
+ name: getShaderName(source, defaultName),
14
+ language: 'glsl',
15
+ version: getShaderVersion(source)
16
+ };
17
+ }
18
+
19
+ /** Extracts GLSLIFY style naming of shaders: `#define SHADER_NAME ...` */
20
+ function getShaderName(shader: string, defaultName: string = 'unnamed'): string {
21
+ const SHADER_NAME_REGEXP = /#define[\s*]SHADER_NAME[\s*]([A-Za-z0-9_-]+)[\s*]/;
22
+ const match = SHADER_NAME_REGEXP.exec(shader);
23
+ return match ? match[1] : defaultName;
24
+ }
25
+
26
+ /** returns GLSL shader version of given shader string */
27
+ function getShaderVersion(source: string): number {
28
+ let version = 100;
29
+ const words = source.match(/[^\s]+/g);
30
+ if (words && words.length >= 2 && words[0] === '#version') {
31
+ const v = parseInt(words[1], 10);
32
+ if (Number.isFinite(v)) {
33
+ version = v;
34
+ }
35
+ }
36
+ return version;
37
+ }
@@ -1,12 +1,14 @@
1
+ // luma.gl, MIT license
2
+
1
3
  import {
2
4
  ShaderLayout,
3
- BindingLayout,
5
+ // BindingLayout,
4
6
  UniformBinding,
5
7
  UniformBlockBinding,
6
8
  ProgramBindings,
7
9
  AttributeBinding,
8
10
  VaryingBinding,
9
- AttributeLayout,
11
+ // AttributeLayout,
10
12
  AccessorObject
11
13
  } from '@luma.gl/api';
12
14
  import GL from '@luma.gl/constants';
@@ -15,6 +17,7 @@ import Accessor from '../../classic/accessor'; // TODO - should NOT depend on cl
15
17
  import {decodeUniformType, decodeAttributeType} from './uniforms';
16
18
  import {getVertexFormat} from '../converters/vertex-formats';
17
19
  import {isSamplerUniform} from './uniforms';
20
+
18
21
  /**
19
22
  * Extract metadata describing binding information for a program's shaders
20
23
  * Note: `linkProgram()` needs to have been called
@@ -29,9 +32,11 @@ export function getShaderLayout(gl: WebGLRenderingContext, program: WebGLProgram
29
32
  };
30
33
 
31
34
  for (const attribute of programBindings.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,
@@ -123,7 +128,11 @@ function readAttributeBindings(
123
128
  const count = gl.getProgramParameter(program, gl.ACTIVE_ATTRIBUTES);
124
129
 
125
130
  for (let index = 0; index < count; index++) {
126
- const {name, type: compositeType, size} = gl.getActiveAttrib(program, index);
131
+ const activeInfo = gl.getActiveAttrib(program, index);
132
+ if (!activeInfo) {
133
+ throw new Error('activeInfo');
134
+ }
135
+ const {name, type: compositeType, size} = activeInfo;
127
136
  const location = gl.getAttribLocation(program, name);
128
137
  // Add only user provided attributes, for built-in attributes like
129
138
  // `gl_InstanceID` locaiton will be < 0
@@ -158,7 +167,11 @@ function readVaryings(gl: WebGLRenderingContext, program: WebGLProgram): Varying
158
167
 
159
168
  const count = gl.getProgramParameter(program, GL.TRANSFORM_FEEDBACK_VARYINGS);
160
169
  for (let location = 0; location < count; location++) {
161
- const {name, type: compositeType, size} = gl2.getTransformFeedbackVarying(program, location);
170
+ const activeInfo = gl2.getTransformFeedbackVarying(program, location);
171
+ if (!activeInfo) {
172
+ throw new Error('activeInfo');
173
+ }
174
+ const {name, type: compositeType, size} = activeInfo;
162
175
  const {glType, components} = decodeUniformType(compositeType);
163
176
  const accessor = new Accessor({type: glType, size: size * components});
164
177
  const varying = {location, name, accessor}; // Base values
@@ -179,7 +192,11 @@ function readUniformBindings(gl: WebGLRenderingContext, program: WebGLProgram):
179
192
 
180
193
  const uniformCount = gl.getProgramParameter(program, GL.ACTIVE_UNIFORMS);
181
194
  for (let i = 0; i < uniformCount; i++) {
182
- const {name: rawName, size, type} = gl.getActiveUniform(program, i);
195
+ const activeInfo = gl.getActiveUniform(program, i);
196
+ if (!activeInfo) {
197
+ throw new Error('activeInfo');
198
+ }
199
+ const {name: rawName, size, type} = activeInfo;
183
200
  const {name, isArray} = parseUniformName(rawName);
184
201
  let webglLocation = gl.getUniformLocation(program, name);
185
202
  const uniformInfo = {
@@ -234,8 +251,8 @@ function readUniformBlocks(
234
251
 
235
252
  const blockCount = gl2.getProgramParameter(program, GL.ACTIVE_UNIFORM_BLOCKS);
236
253
  for (let blockIndex = 0; blockIndex < blockCount; blockIndex++) {
237
- const blockInfo = {
238
- name: gl2.getActiveUniformBlockName(program, blockIndex),
254
+ const blockInfo: UniformBlockBinding = {
255
+ name: gl2.getActiveUniformBlockName(program, blockIndex) || '',
239
256
  location: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_BINDING),
240
257
  byteLength: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_DATA_SIZE),
241
258
  vertex: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER),
@@ -244,33 +261,38 @@ function readUniformBlocks(
244
261
  uniforms: [] as any[]
245
262
  };
246
263
 
247
- const uniformIndices = getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES);
264
+ const uniformIndices = getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES) as number[] || [];
248
265
 
249
266
  const uniformType = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_TYPE); // Array of GLenum indicating the types of the uniforms.
250
267
  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.
268
+ // const uniformBlockIndex = gl2.getActiveUniforms(
269
+ // program,
270
+ // uniformIndices,
271
+ // GL.UNIFORM_BLOCK_INDEX
272
+ // ); // Array of GLint indicating the block indices of the uniforms.
256
273
  const uniformOffset = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_OFFSET); // Array of GLint indicating the uniform buffer offsets.
257
274
  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);
275
+ // const uniformMatrixStride = gl2.getActiveUniforms(
276
+ // program,
277
+ // uniformIndices,
278
+ // GL.UNIFORM_MATRIX_STRIDE
279
+ // ); // Array of GLint indicating the strides between columns of a column-major matrix or a row-major matrix.
280
+ // const uniformRowMajor = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_IS_ROW_MAJOR);
264
281
  for (let i = 0; i < blockInfo.uniformCount; ++i) {
282
+ const activeInfo = gl2.getActiveUniform(program, uniformIndices[i]);
283
+ if (!activeInfo) {
284
+ throw new Error('activeInfo');
285
+ }
286
+
265
287
  blockInfo.uniforms.push({
266
- name: gl2.getActiveUniform(program, uniformIndices[i]).name,
288
+ name: activeInfo.name,
267
289
  format: decodeUniformType(uniformType[i]).format,
268
290
  type: uniformType[i],
269
291
  arrayLength: uniformArrayLength[i],
270
292
  byteOffset: uniformOffset[i],
271
293
  byteStride: uniformStride[i],
272
- matrixStride: uniformStride[i],
273
- rowMajor: uniformRowMajor[i]
294
+ // matrixStride: uniformStride[i],
295
+ // rowMajor: uniformRowMajor[i]
274
296
  });
275
297
  }
276
298
 
@@ -305,18 +327,18 @@ const SAMPLER_UNIFORMS_GL_TO_GPU: Record<
305
327
  [GL.UNSIGNED_INT_SAMPLER_2D_ARRAY]: ['2d-array', 'uint']
306
328
  };
307
329
 
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};
330
+ type SamplerInfo = | {
331
+ viewDimension: '1d' | '2d' | '2d-array' | 'cube' | 'cube-array' | '3d';
332
+ sampleType: 'float' | 'unfilterable-float' | 'depth' | 'sint' | 'uint';
333
+ };
334
+
335
+ function getSamplerInfo(type: GL): SamplerInfo {
336
+ const sampler = SAMPLER_UNIFORMS_GL_TO_GPU[type];
337
+ if (!sampler) {
338
+ throw new Error('sampler');
318
339
  }
319
- return null;
340
+ const [viewDimension, sampleType] = sampler;
341
+ return {viewDimension, sampleType};
320
342
  }
321
343
 
322
344
  // HELPERS
@@ -333,7 +355,7 @@ function parseUniformName(name: string): {name: string; length: number; isArray:
333
355
 
334
356
  // if array name then clean the array brackets
335
357
  const UNIFORM_NAME_REGEXP = /([^[]*)(\[[0-9]+\])?/;
336
- const matches = name.match(UNIFORM_NAME_REGEXP);
358
+ const matches = UNIFORM_NAME_REGEXP.exec(name);
337
359
  if (!matches || matches.length < 2) {
338
360
  throw new Error(`Failed to parse GLSL uniform name ${name}`);
339
361
  }
@@ -351,7 +373,7 @@ function parseUniformName(name: string): {name: string; length: number; isArray:
351
373
  * Extract info about all "active" uniform blocks
352
374
  * ("Active" just means that unused (inactive) blocks may have been optimized away during linking)
353
375
  *
354
- function getUniformBlockBindings(gl, program): Binding[] {
376
+ function getUniformBlockBindings(gl: WebGLRenderingContext, program): Binding[] {
355
377
  if (!isWebGL2(gl)) {
356
378
  return;
357
379
  }