@luma.gl/webgl 9.0.0-alpha.9 → 9.0.0-beta.10

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 (553) hide show
  1. package/LICENSE +3 -1
  2. package/dist/adapter/converters/device-parameters.d.ts +12 -3
  3. package/dist/adapter/converters/device-parameters.d.ts.map +1 -1
  4. package/dist/adapter/converters/device-parameters.js +300 -146
  5. package/dist/adapter/converters/sampler-parameters.d.ts +3 -13
  6. package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
  7. package/dist/adapter/converters/sampler-parameters.js +74 -219
  8. package/dist/adapter/converters/shader-formats.d.ts +9 -0
  9. package/dist/adapter/converters/shader-formats.d.ts.map +1 -0
  10. package/dist/adapter/converters/shader-formats.js +59 -0
  11. package/dist/adapter/converters/texture-formats.d.ts +41 -57
  12. package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
  13. package/dist/adapter/converters/texture-formats.js +490 -925
  14. package/dist/adapter/converters/vertex-formats.d.ts +9 -3
  15. package/dist/adapter/converters/vertex-formats.d.ts.map +1 -1
  16. package/dist/adapter/converters/vertex-formats.js +56 -33
  17. package/dist/adapter/device-helpers/webgl-device-features.d.ts +20 -0
  18. package/dist/adapter/device-helpers/webgl-device-features.d.ts.map +1 -0
  19. package/dist/adapter/device-helpers/webgl-device-features.js +98 -0
  20. package/dist/adapter/device-helpers/webgl-device-info.d.ts +5 -0
  21. package/dist/adapter/device-helpers/webgl-device-info.d.ts.map +1 -0
  22. package/dist/adapter/device-helpers/webgl-device-info.js +90 -0
  23. package/dist/adapter/device-helpers/webgl-device-limits.d.ts +35 -0
  24. package/dist/adapter/device-helpers/webgl-device-limits.d.ts.map +1 -0
  25. package/dist/adapter/device-helpers/webgl-device-limits.js +47 -0
  26. package/dist/adapter/helpers/decode-webgl-types.d.ts +26 -0
  27. package/dist/adapter/helpers/decode-webgl-types.d.ts.map +1 -0
  28. package/dist/adapter/helpers/decode-webgl-types.js +101 -0
  29. package/dist/adapter/helpers/get-shader-layout.d.ts +2 -49
  30. package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
  31. package/dist/adapter/helpers/get-shader-layout.js +263 -307
  32. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts +1 -1
  33. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts.map +1 -1
  34. package/dist/adapter/helpers/parse-shader-compiler-log.js +48 -33
  35. package/dist/adapter/helpers/set-uniform.d.ts +3 -2
  36. package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
  37. package/dist/adapter/helpers/set-uniform.js +66 -111
  38. package/dist/adapter/helpers/webgl-topology-utils.d.ts +16 -0
  39. package/dist/adapter/helpers/webgl-topology-utils.d.ts.map +1 -0
  40. package/dist/adapter/helpers/webgl-topology-utils.js +88 -0
  41. package/dist/adapter/objects/constants-to-keys.d.ts +2 -4
  42. package/dist/adapter/objects/constants-to-keys.d.ts.map +1 -1
  43. package/dist/adapter/objects/constants-to-keys.js +18 -38
  44. package/dist/adapter/objects/webgl-renderbuffer.d.ts +15 -12
  45. package/dist/adapter/objects/webgl-renderbuffer.d.ts.map +1 -1
  46. package/dist/adapter/objects/webgl-renderbuffer.js +92 -91
  47. package/dist/adapter/objects/webgl-resource.d.ts +6 -31
  48. package/dist/adapter/objects/webgl-resource.d.ts.map +1 -1
  49. package/dist/adapter/objects/webgl-resource.js +103 -205
  50. package/dist/adapter/resources/webgl-buffer.d.ts +20 -16
  51. package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
  52. package/dist/adapter/resources/webgl-buffer.js +163 -155
  53. package/dist/adapter/resources/webgl-command-buffer.d.ts +15 -9
  54. package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
  55. package/dist/adapter/resources/webgl-command-buffer.js +283 -58
  56. package/dist/adapter/resources/webgl-command-encoder.d.ts +12 -6
  57. package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -1
  58. package/dist/adapter/resources/webgl-command-encoder.js +36 -52
  59. package/dist/adapter/resources/webgl-external-texture.js +93 -1
  60. package/dist/adapter/resources/webgl-framebuffer.d.ts +21 -29
  61. package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
  62. package/dist/adapter/resources/webgl-framebuffer.js +184 -261
  63. package/dist/adapter/resources/webgl-query-set.d.ts +44 -0
  64. package/dist/adapter/resources/webgl-query-set.d.ts.map +1 -0
  65. package/dist/adapter/resources/webgl-query-set.js +136 -0
  66. package/dist/adapter/resources/webgl-render-pass.d.ts +21 -4
  67. package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
  68. package/dist/adapter/resources/webgl-render-pass.js +140 -20
  69. package/dist/adapter/resources/webgl-render-pipeline.d.ts +44 -21
  70. package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
  71. package/dist/adapter/resources/webgl-render-pipeline.js +371 -413
  72. package/dist/adapter/resources/webgl-sampler.d.ts +5 -6
  73. package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
  74. package/dist/adapter/resources/webgl-sampler.js +46 -46
  75. package/dist/adapter/resources/webgl-shader.d.ts +16 -6
  76. package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
  77. package/dist/adapter/resources/webgl-shader.js +113 -72
  78. package/dist/adapter/resources/webgl-texture-view.d.ts +14 -0
  79. package/dist/adapter/resources/webgl-texture-view.d.ts.map +1 -0
  80. package/dist/adapter/resources/webgl-texture-view.js +18 -0
  81. package/dist/adapter/resources/webgl-texture.d.ts +53 -35
  82. package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
  83. package/dist/adapter/resources/webgl-texture.js +623 -822
  84. package/dist/adapter/resources/webgl-transform-feedback.d.ts +47 -0
  85. package/dist/adapter/resources/webgl-transform-feedback.d.ts.map +1 -0
  86. package/dist/adapter/resources/webgl-transform-feedback.js +162 -0
  87. package/dist/adapter/resources/webgl-vertex-array.d.ts +67 -0
  88. package/dist/adapter/resources/webgl-vertex-array.d.ts.map +1 -0
  89. package/dist/adapter/resources/webgl-vertex-array.js +239 -0
  90. package/dist/adapter/webgl-canvas-context.d.ts +6 -7
  91. package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
  92. package/dist/adapter/webgl-canvas-context.js +61 -50
  93. package/dist/adapter/webgl-device.d.ts +112 -55
  94. package/dist/adapter/webgl-device.d.ts.map +1 -1
  95. package/dist/adapter/webgl-device.js +453 -331
  96. package/dist/classic/accessor.d.ts +3 -3
  97. package/dist/classic/accessor.d.ts.map +1 -1
  98. package/dist/classic/accessor.js +135 -130
  99. package/dist/classic/clear.d.ts +22 -0
  100. package/dist/classic/clear.d.ts.map +1 -0
  101. package/dist/classic/clear.js +89 -0
  102. package/dist/classic/copy-and-blit.d.ts +62 -0
  103. package/dist/classic/copy-and-blit.d.ts.map +1 -0
  104. package/dist/classic/copy-and-blit.js +191 -0
  105. package/dist/classic/format-utils.d.ts +3 -0
  106. package/dist/classic/format-utils.d.ts.map +1 -0
  107. package/dist/classic/format-utils.js +44 -0
  108. package/dist/classic/typed-array-utils.d.ts +17 -17
  109. package/dist/classic/typed-array-utils.d.ts.map +1 -1
  110. package/dist/classic/typed-array-utils.js +96 -102
  111. package/dist/context/debug/spector.d.ts +1 -2
  112. package/dist/context/debug/spector.d.ts.map +1 -1
  113. package/dist/context/debug/spector.js +56 -63
  114. package/dist/context/debug/webgl-developer-tools.d.ts +2 -3
  115. package/dist/context/debug/webgl-developer-tools.d.ts.map +1 -1
  116. package/dist/context/debug/webgl-developer-tools.js +106 -102
  117. package/dist/context/helpers/create-browser-context.d.ts +35 -0
  118. package/dist/context/helpers/create-browser-context.d.ts.map +1 -0
  119. package/dist/context/helpers/create-browser-context.js +67 -0
  120. package/dist/context/helpers/webgl-context-data.d.ts +13 -0
  121. package/dist/context/helpers/webgl-context-data.d.ts.map +1 -0
  122. package/dist/context/helpers/webgl-context-data.js +21 -0
  123. package/dist/context/helpers/webgl-extensions.d.ts +4 -0
  124. package/dist/context/helpers/webgl-extensions.d.ts.map +1 -0
  125. package/dist/context/helpers/webgl-extensions.js +10 -0
  126. package/dist/context/parameters/unified-parameter-api.d.ts +4 -5
  127. package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
  128. package/dist/context/parameters/unified-parameter-api.js +91 -54
  129. package/dist/context/parameters/webgl-parameter-tables.d.ts +115 -106
  130. package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
  131. package/dist/context/parameters/webgl-parameter-tables.js +463 -423
  132. package/dist/context/state-tracker/deep-array-equal.d.ts.map +1 -1
  133. package/dist/context/state-tracker/deep-array-equal.js +19 -18
  134. package/dist/context/state-tracker/track-context-state.d.ts +4 -4
  135. package/dist/context/state-tracker/track-context-state.d.ts.map +1 -1
  136. package/dist/context/state-tracker/track-context-state.js +192 -163
  137. package/dist/context/state-tracker/with-parameters.d.ts +2 -2
  138. package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
  139. package/dist/context/state-tracker/with-parameters.js +44 -32
  140. package/dist/dist.dev.js +6574 -0
  141. package/dist/dist.min.js +10 -0
  142. package/dist/index.cjs +5586 -0
  143. package/dist/index.cjs.map +7 -0
  144. package/dist/index.d.ts +25 -32
  145. package/dist/index.d.ts.map +1 -1
  146. package/dist/index.js +37 -28
  147. package/dist/types.d.ts +3 -1
  148. package/dist/types.d.ts.map +1 -1
  149. package/dist/types.js +3 -1
  150. package/dist.min.js +19 -0
  151. package/package.json +22 -15
  152. package/src/adapter/converters/device-parameters.ts +217 -54
  153. package/src/adapter/converters/sampler-parameters.ts +46 -126
  154. package/src/adapter/converters/shader-formats.ts +69 -0
  155. package/src/adapter/converters/texture-formats.ts +369 -340
  156. package/src/adapter/converters/vertex-formats.ts +71 -10
  157. package/src/adapter/device-helpers/webgl-device-features.ts +121 -0
  158. package/src/adapter/device-helpers/webgl-device-info.ts +111 -0
  159. package/src/adapter/device-helpers/webgl-device-limits.ts +53 -0
  160. package/src/adapter/helpers/{uniforms.ts → decode-webgl-types.ts} +38 -25
  161. package/src/adapter/helpers/get-shader-layout.ts +104 -158
  162. package/src/adapter/helpers/parse-shader-compiler-log.ts +31 -11
  163. package/src/adapter/helpers/set-uniform.ts +39 -36
  164. package/src/adapter/helpers/webgl-topology-utils.ts +110 -0
  165. package/src/adapter/objects/constants-to-keys.ts +8 -26
  166. package/src/adapter/objects/webgl-renderbuffer.ts +68 -40
  167. package/src/adapter/objects/webgl-resource.ts +16 -156
  168. package/src/adapter/resources/webgl-buffer.ts +103 -112
  169. package/src/adapter/resources/webgl-command-buffer.ts +333 -41
  170. package/src/adapter/resources/webgl-command-encoder.ts +33 -22
  171. package/src/adapter/resources/webgl-external-texture.ts +11 -8
  172. package/src/adapter/resources/webgl-framebuffer.ts +125 -165
  173. package/src/adapter/resources/webgl-query-set.ts +171 -0
  174. package/src/adapter/resources/webgl-render-pass.ts +176 -6
  175. package/src/adapter/resources/webgl-render-pipeline.ts +308 -229
  176. package/src/adapter/resources/webgl-sampler.ts +19 -18
  177. package/src/adapter/resources/webgl-shader.ts +91 -32
  178. package/src/adapter/resources/webgl-texture-view.ts +28 -0
  179. package/src/adapter/resources/webgl-texture.ts +147 -184
  180. package/src/adapter/resources/webgl-transform-feedback.ts +196 -0
  181. package/src/adapter/resources/webgl-vertex-array.ts +282 -0
  182. package/src/adapter/webgl-canvas-context.ts +23 -22
  183. package/src/adapter/webgl-device.ts +411 -196
  184. package/src/classic/accessor.ts +12 -8
  185. package/src/classic/clear.ts +118 -0
  186. package/src/classic/copy-and-blit.ts +318 -0
  187. package/src/classic/format-utils.ts +47 -0
  188. package/src/classic/typed-array-utils.ts +19 -31
  189. package/src/context/debug/spector.ts +16 -10
  190. package/src/context/debug/webgl-developer-tools.ts +52 -32
  191. package/src/context/helpers/create-browser-context.ts +116 -0
  192. package/src/context/helpers/webgl-context-data.ts +31 -0
  193. package/src/context/helpers/webgl-extensions.ts +17 -0
  194. package/src/context/parameters/unified-parameter-api.ts +11 -16
  195. package/src/context/parameters/webgl-parameter-tables.ts +171 -121
  196. package/src/context/state-tracker/deep-array-equal.ts +3 -0
  197. package/src/context/state-tracker/track-context-state.ts +35 -26
  198. package/src/context/state-tracker/with-parameters.ts +12 -3
  199. package/src/index.ts +41 -55
  200. package/src/types.ts +6 -0
  201. package/dist/adapter/converters/device-parameters.js.map +0 -1
  202. package/dist/adapter/converters/renderbuffer-formats.d.ts +0 -16
  203. package/dist/adapter/converters/renderbuffer-formats.d.ts.map +0 -1
  204. package/dist/adapter/converters/renderbuffer-formats.js +0 -185
  205. package/dist/adapter/converters/renderbuffer-formats.js.map +0 -1
  206. package/dist/adapter/converters/sampler-parameters.js.map +0 -1
  207. package/dist/adapter/converters/texture-formats.js.map +0 -1
  208. package/dist/adapter/converters/vertex-formats.js.map +0 -1
  209. package/dist/adapter/device-helpers/device-features.d.ts +0 -9
  210. package/dist/adapter/device-helpers/device-features.d.ts.map +0 -1
  211. package/dist/adapter/device-helpers/device-features.js +0 -112
  212. package/dist/adapter/device-helpers/device-features.js.map +0 -1
  213. package/dist/adapter/device-helpers/device-limits.d.ts +0 -52
  214. package/dist/adapter/device-helpers/device-limits.d.ts.map +0 -1
  215. package/dist/adapter/device-helpers/device-limits.js +0 -91
  216. package/dist/adapter/device-helpers/device-limits.js.map +0 -1
  217. package/dist/adapter/device-helpers/get-device-info.d.ts +0 -4
  218. package/dist/adapter/device-helpers/get-device-info.d.ts.map +0 -1
  219. package/dist/adapter/device-helpers/get-device-info.js +0 -44
  220. package/dist/adapter/device-helpers/get-device-info.js.map +0 -1
  221. package/dist/adapter/device-helpers/is-old-ie.d.ts +0 -2
  222. package/dist/adapter/device-helpers/is-old-ie.d.ts.map +0 -1
  223. package/dist/adapter/device-helpers/is-old-ie.js +0 -8
  224. package/dist/adapter/device-helpers/is-old-ie.js.map +0 -1
  225. package/dist/adapter/helpers/attribute-utils.d.ts +0 -11
  226. package/dist/adapter/helpers/attribute-utils.d.ts.map +0 -1
  227. package/dist/adapter/helpers/attribute-utils.js +0 -81
  228. package/dist/adapter/helpers/attribute-utils.js.map +0 -1
  229. package/dist/adapter/helpers/get-shader-layout.js.map +0 -1
  230. package/dist/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  231. package/dist/adapter/helpers/set-uniform.js.map +0 -1
  232. package/dist/adapter/helpers/uniforms.d.ts +0 -26
  233. package/dist/adapter/helpers/uniforms.d.ts.map +0 -1
  234. package/dist/adapter/helpers/uniforms.js +0 -99
  235. package/dist/adapter/helpers/uniforms.js.map +0 -1
  236. package/dist/adapter/objects/constants-to-keys.js.map +0 -1
  237. package/dist/adapter/objects/webgl-renderbuffer.js.map +0 -1
  238. package/dist/adapter/objects/webgl-resource.js.map +0 -1
  239. package/dist/adapter/objects/webgl-vertex-array-object.d.ts +0 -27
  240. package/dist/adapter/objects/webgl-vertex-array-object.d.ts.map +0 -1
  241. package/dist/adapter/objects/webgl-vertex-array-object.js +0 -84
  242. package/dist/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  243. package/dist/adapter/resources/webgl-buffer.js.map +0 -1
  244. package/dist/adapter/resources/webgl-command-buffer.js.map +0 -1
  245. package/dist/adapter/resources/webgl-command-encoder.js.map +0 -1
  246. package/dist/adapter/resources/webgl-external-texture.js.map +0 -1
  247. package/dist/adapter/resources/webgl-framebuffer.js.map +0 -1
  248. package/dist/adapter/resources/webgl-render-pass.js.map +0 -1
  249. package/dist/adapter/resources/webgl-render-pipeline.js.map +0 -1
  250. package/dist/adapter/resources/webgl-sampler.js.map +0 -1
  251. package/dist/adapter/resources/webgl-shader.js.map +0 -1
  252. package/dist/adapter/resources/webgl-texture.js.map +0 -1
  253. package/dist/adapter/webgl-canvas-context.js.map +0 -1
  254. package/dist/adapter/webgl-device.js.map +0 -1
  255. package/dist/bundle.d.ts +0 -2
  256. package/dist/bundle.d.ts.map +0 -1
  257. package/dist/bundle.js +0 -5
  258. package/dist/bundle.js.map +0 -1
  259. package/dist/classic/accessor.js.map +0 -1
  260. package/dist/classic/buffer.d.ts +0 -95
  261. package/dist/classic/buffer.d.ts.map +0 -1
  262. package/dist/classic/buffer.js +0 -392
  263. package/dist/classic/buffer.js.map +0 -1
  264. package/dist/classic/typed-array-utils.js.map +0 -1
  265. package/dist/context/context/context-state.d.ts +0 -18
  266. package/dist/context/context/context-state.d.ts.map +0 -1
  267. package/dist/context/context/context-state.js +0 -26
  268. package/dist/context/context/context-state.js.map +0 -1
  269. package/dist/context/context/create-browser-context.d.ts +0 -41
  270. package/dist/context/context/create-browser-context.d.ts.map +0 -1
  271. package/dist/context/context/create-browser-context.js +0 -61
  272. package/dist/context/context/create-browser-context.js.map +0 -1
  273. package/dist/context/context/create-headless-context.d.ts +0 -9
  274. package/dist/context/context/create-headless-context.d.ts.map +0 -1
  275. package/dist/context/context/create-headless-context.js +0 -43
  276. package/dist/context/context/create-headless-context.js.map +0 -1
  277. package/dist/context/context/device-pixels.d.ts +0 -25
  278. package/dist/context/context/device-pixels.d.ts.map +0 -1
  279. package/dist/context/context/device-pixels.js +0 -103
  280. package/dist/context/context/device-pixels.js.map +0 -1
  281. package/dist/context/context/webgl-checks.d.ts +0 -13
  282. package/dist/context/context/webgl-checks.d.ts.map +0 -1
  283. package/dist/context/context/webgl-checks.js +0 -34
  284. package/dist/context/context/webgl-checks.js.map +0 -1
  285. package/dist/context/debug/spector.js.map +0 -1
  286. package/dist/context/debug/webgl-developer-tools.js.map +0 -1
  287. package/dist/context/parameters/unified-parameter-api.js.map +0 -1
  288. package/dist/context/parameters/webgl-parameter-tables.js.map +0 -1
  289. package/dist/context/polyfill/get-parameter-polyfill.d.ts +0 -2
  290. package/dist/context/polyfill/get-parameter-polyfill.d.ts.map +0 -1
  291. package/dist/context/polyfill/get-parameter-polyfill.js +0 -91
  292. package/dist/context/polyfill/get-parameter-polyfill.js.map +0 -1
  293. package/dist/context/polyfill/polyfill-context.d.ts +0 -5
  294. package/dist/context/polyfill/polyfill-context.d.ts.map +0 -1
  295. package/dist/context/polyfill/polyfill-context.js +0 -91
  296. package/dist/context/polyfill/polyfill-context.js.map +0 -1
  297. package/dist/context/polyfill/polyfill-table.d.ts +0 -48
  298. package/dist/context/polyfill/polyfill-table.d.ts.map +0 -1
  299. package/dist/context/polyfill/polyfill-table.js +0 -160
  300. package/dist/context/polyfill/polyfill-table.js.map +0 -1
  301. package/dist/context/polyfill/polyfill-vertex-array-object.d.ts +0 -2
  302. package/dist/context/polyfill/polyfill-vertex-array-object.d.ts.map +0 -1
  303. package/dist/context/polyfill/polyfill-vertex-array-object.js +0 -335
  304. package/dist/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  305. package/dist/context/state-tracker/deep-array-equal.js.map +0 -1
  306. package/dist/context/state-tracker/track-context-state.js.map +0 -1
  307. package/dist/context/state-tracker/with-parameters.js.map +0 -1
  308. package/dist/es5/adapter/converters/device-parameters.js +0 -185
  309. package/dist/es5/adapter/converters/device-parameters.js.map +0 -1
  310. package/dist/es5/adapter/converters/renderbuffer-formats.js +0 -163
  311. package/dist/es5/adapter/converters/renderbuffer-formats.js.map +0 -1
  312. package/dist/es5/adapter/converters/sampler-parameters.js +0 -245
  313. package/dist/es5/adapter/converters/sampler-parameters.js.map +0 -1
  314. package/dist/es5/adapter/converters/texture-formats.js +0 -1031
  315. package/dist/es5/adapter/converters/texture-formats.js.map +0 -1
  316. package/dist/es5/adapter/converters/vertex-formats.js +0 -45
  317. package/dist/es5/adapter/converters/vertex-formats.js.map +0 -1
  318. package/dist/es5/adapter/device-helpers/device-features.js +0 -155
  319. package/dist/es5/adapter/device-helpers/device-features.js.map +0 -1
  320. package/dist/es5/adapter/device-helpers/device-limits.js +0 -64
  321. package/dist/es5/adapter/device-helpers/device-limits.js.map +0 -1
  322. package/dist/es5/adapter/device-helpers/get-device-info.js +0 -55
  323. package/dist/es5/adapter/device-helpers/get-device-info.js.map +0 -1
  324. package/dist/es5/adapter/device-helpers/is-old-ie.js +0 -16
  325. package/dist/es5/adapter/device-helpers/is-old-ie.js.map +0 -1
  326. package/dist/es5/adapter/helpers/attribute-utils.js +0 -91
  327. package/dist/es5/adapter/helpers/attribute-utils.js.map +0 -1
  328. package/dist/es5/adapter/helpers/get-shader-layout.js +0 -391
  329. package/dist/es5/adapter/helpers/get-shader-layout.js.map +0 -1
  330. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js +0 -72
  331. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  332. package/dist/es5/adapter/helpers/set-uniform.js +0 -125
  333. package/dist/es5/adapter/helpers/set-uniform.js.map +0 -1
  334. package/dist/es5/adapter/helpers/uniforms.js +0 -112
  335. package/dist/es5/adapter/helpers/uniforms.js.map +0 -1
  336. package/dist/es5/adapter/objects/constants-to-keys.js +0 -54
  337. package/dist/es5/adapter/objects/constants-to-keys.js.map +0 -1
  338. package/dist/es5/adapter/objects/webgl-renderbuffer.js +0 -150
  339. package/dist/es5/adapter/objects/webgl-renderbuffer.js.map +0 -1
  340. package/dist/es5/adapter/objects/webgl-resource.js +0 -292
  341. package/dist/es5/adapter/objects/webgl-resource.js.map +0 -1
  342. package/dist/es5/adapter/objects/webgl-vertex-array-object.js +0 -137
  343. package/dist/es5/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  344. package/dist/es5/adapter/resources/webgl-buffer.js +0 -243
  345. package/dist/es5/adapter/resources/webgl-buffer.js.map +0 -1
  346. package/dist/es5/adapter/resources/webgl-command-buffer.js +0 -96
  347. package/dist/es5/adapter/resources/webgl-command-buffer.js.map +0 -1
  348. package/dist/es5/adapter/resources/webgl-command-encoder.js +0 -98
  349. package/dist/es5/adapter/resources/webgl-command-encoder.js.map +0 -1
  350. package/dist/es5/adapter/resources/webgl-external-texture.js +0 -2
  351. package/dist/es5/adapter/resources/webgl-external-texture.js.map +0 -1
  352. package/dist/es5/adapter/resources/webgl-framebuffer.js +0 -346
  353. package/dist/es5/adapter/resources/webgl-framebuffer.js.map +0 -1
  354. package/dist/es5/adapter/resources/webgl-render-pass.js +0 -62
  355. package/dist/es5/adapter/resources/webgl-render-pass.js.map +0 -1
  356. package/dist/es5/adapter/resources/webgl-render-pipeline.js +0 -530
  357. package/dist/es5/adapter/resources/webgl-render-pipeline.js.map +0 -1
  358. package/dist/es5/adapter/resources/webgl-sampler.js +0 -96
  359. package/dist/es5/adapter/resources/webgl-sampler.js.map +0 -1
  360. package/dist/es5/adapter/resources/webgl-shader.js +0 -150
  361. package/dist/es5/adapter/resources/webgl-shader.js.map +0 -1
  362. package/dist/es5/adapter/resources/webgl-texture.js +0 -986
  363. package/dist/es5/adapter/resources/webgl-texture.js.map +0 -1
  364. package/dist/es5/adapter/webgl-canvas-context.js +0 -97
  365. package/dist/es5/adapter/webgl-canvas-context.js.map +0 -1
  366. package/dist/es5/adapter/webgl-device.js +0 -463
  367. package/dist/es5/adapter/webgl-device.js.map +0 -1
  368. package/dist/es5/bundle.js +0 -7
  369. package/dist/es5/bundle.js.map +0 -1
  370. package/dist/es5/classic/accessor.js +0 -181
  371. package/dist/es5/classic/accessor.js.map +0 -1
  372. package/dist/es5/classic/buffer.js +0 -478
  373. package/dist/es5/classic/buffer.js.map +0 -1
  374. package/dist/es5/classic/typed-array-utils.js +0 -126
  375. package/dist/es5/classic/typed-array-utils.js.map +0 -1
  376. package/dist/es5/context/context/context-state.js +0 -31
  377. package/dist/es5/context/context/context-state.js.map +0 -1
  378. package/dist/es5/context/context/create-browser-context.js +0 -83
  379. package/dist/es5/context/context/create-browser-context.js.map +0 -1
  380. package/dist/es5/context/context/create-headless-context.js +0 -60
  381. package/dist/es5/context/context/create-headless-context.js.map +0 -1
  382. package/dist/es5/context/context/device-pixels.js +0 -121
  383. package/dist/es5/context/context/device-pixels.js.map +0 -1
  384. package/dist/es5/context/context/webgl-checks.js +0 -54
  385. package/dist/es5/context/context/webgl-checks.js.map +0 -1
  386. package/dist/es5/context/debug/spector.js +0 -133
  387. package/dist/es5/context/debug/spector.js.map +0 -1
  388. package/dist/es5/context/debug/webgl-developer-tools.js +0 -198
  389. package/dist/es5/context/debug/webgl-developer-tools.js.map +0 -1
  390. package/dist/es5/context/parameters/unified-parameter-api.js +0 -97
  391. package/dist/es5/context/parameters/unified-parameter-api.js.map +0 -1
  392. package/dist/es5/context/parameters/webgl-parameter-tables.js +0 -392
  393. package/dist/es5/context/parameters/webgl-parameter-tables.js.map +0 -1
  394. package/dist/es5/context/polyfill/get-parameter-polyfill.js +0 -81
  395. package/dist/es5/context/polyfill/get-parameter-polyfill.js.map +0 -1
  396. package/dist/es5/context/polyfill/polyfill-context.js +0 -134
  397. package/dist/es5/context/polyfill/polyfill-context.js.map +0 -1
  398. package/dist/es5/context/polyfill/polyfill-table.js +0 -166
  399. package/dist/es5/context/polyfill/polyfill-table.js.map +0 -1
  400. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js +0 -341
  401. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  402. package/dist/es5/context/state-tracker/deep-array-equal.js +0 -28
  403. package/dist/es5/context/state-tracker/deep-array-equal.js.map +0 -1
  404. package/dist/es5/context/state-tracker/track-context-state.js +0 -211
  405. package/dist/es5/context/state-tracker/track-context-state.js.map +0 -1
  406. package/dist/es5/context/state-tracker/with-parameters.js +0 -44
  407. package/dist/es5/context/state-tracker/with-parameters.js.map +0 -1
  408. package/dist/es5/index.js +0 -290
  409. package/dist/es5/index.js.map +0 -1
  410. package/dist/es5/init.js +0 -10
  411. package/dist/es5/init.js.map +0 -1
  412. package/dist/es5/types/webgl.js +0 -6
  413. package/dist/es5/types/webgl.js.map +0 -1
  414. package/dist/es5/types.js +0 -2
  415. package/dist/es5/types.js.map +0 -1
  416. package/dist/esm/adapter/converters/device-parameters.js +0 -168
  417. package/dist/esm/adapter/converters/device-parameters.js.map +0 -1
  418. package/dist/esm/adapter/converters/renderbuffer-formats.js +0 -185
  419. package/dist/esm/adapter/converters/renderbuffer-formats.js.map +0 -1
  420. package/dist/esm/adapter/converters/sampler-parameters.js +0 -227
  421. package/dist/esm/adapter/converters/sampler-parameters.js.map +0 -1
  422. package/dist/esm/adapter/converters/texture-formats.js +0 -954
  423. package/dist/esm/adapter/converters/texture-formats.js.map +0 -1
  424. package/dist/esm/adapter/converters/vertex-formats.js +0 -35
  425. package/dist/esm/adapter/converters/vertex-formats.js.map +0 -1
  426. package/dist/esm/adapter/device-helpers/device-features.js +0 -112
  427. package/dist/esm/adapter/device-helpers/device-features.js.map +0 -1
  428. package/dist/esm/adapter/device-helpers/device-limits.js +0 -91
  429. package/dist/esm/adapter/device-helpers/device-limits.js.map +0 -1
  430. package/dist/esm/adapter/device-helpers/get-device-info.js +0 -44
  431. package/dist/esm/adapter/device-helpers/get-device-info.js.map +0 -1
  432. package/dist/esm/adapter/device-helpers/is-old-ie.js +0 -8
  433. package/dist/esm/adapter/device-helpers/is-old-ie.js.map +0 -1
  434. package/dist/esm/adapter/helpers/attribute-utils.js +0 -81
  435. package/dist/esm/adapter/helpers/attribute-utils.js.map +0 -1
  436. package/dist/esm/adapter/helpers/get-shader-layout.js +0 -330
  437. package/dist/esm/adapter/helpers/get-shader-layout.js.map +0 -1
  438. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js +0 -37
  439. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  440. package/dist/esm/adapter/helpers/set-uniform.js +0 -115
  441. package/dist/esm/adapter/helpers/set-uniform.js.map +0 -1
  442. package/dist/esm/adapter/helpers/uniforms.js +0 -99
  443. package/dist/esm/adapter/helpers/uniforms.js.map +0 -1
  444. package/dist/esm/adapter/objects/constants-to-keys.js +0 -42
  445. package/dist/esm/adapter/objects/constants-to-keys.js.map +0 -1
  446. package/dist/esm/adapter/objects/webgl-renderbuffer.js +0 -94
  447. package/dist/esm/adapter/objects/webgl-renderbuffer.js.map +0 -1
  448. package/dist/esm/adapter/objects/webgl-resource.js +0 -216
  449. package/dist/esm/adapter/objects/webgl-resource.js.map +0 -1
  450. package/dist/esm/adapter/objects/webgl-vertex-array-object.js +0 -84
  451. package/dist/esm/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  452. package/dist/esm/adapter/resources/webgl-buffer.js +0 -164
  453. package/dist/esm/adapter/resources/webgl-buffer.js.map +0 -1
  454. package/dist/esm/adapter/resources/webgl-command-buffer.js +0 -65
  455. package/dist/esm/adapter/resources/webgl-command-buffer.js.map +0 -1
  456. package/dist/esm/adapter/resources/webgl-command-encoder.js +0 -53
  457. package/dist/esm/adapter/resources/webgl-command-encoder.js.map +0 -1
  458. package/dist/esm/adapter/resources/webgl-external-texture.js +0 -2
  459. package/dist/esm/adapter/resources/webgl-external-texture.js.map +0 -1
  460. package/dist/esm/adapter/resources/webgl-framebuffer.js +0 -267
  461. package/dist/esm/adapter/resources/webgl-framebuffer.js.map +0 -1
  462. package/dist/esm/adapter/resources/webgl-render-pass.js +0 -21
  463. package/dist/esm/adapter/resources/webgl-render-pass.js.map +0 -1
  464. package/dist/esm/adapter/resources/webgl-render-pipeline.js +0 -428
  465. package/dist/esm/adapter/resources/webgl-render-pipeline.js.map +0 -1
  466. package/dist/esm/adapter/resources/webgl-sampler.js +0 -50
  467. package/dist/esm/adapter/resources/webgl-sampler.js.map +0 -1
  468. package/dist/esm/adapter/resources/webgl-shader.js +0 -76
  469. package/dist/esm/adapter/resources/webgl-shader.js.map +0 -1
  470. package/dist/esm/adapter/resources/webgl-texture.js +0 -834
  471. package/dist/esm/adapter/resources/webgl-texture.js.map +0 -1
  472. package/dist/esm/adapter/webgl-canvas-context.js +0 -54
  473. package/dist/esm/adapter/webgl-canvas-context.js.map +0 -1
  474. package/dist/esm/adapter/webgl-device.js +0 -337
  475. package/dist/esm/adapter/webgl-device.js.map +0 -1
  476. package/dist/esm/bundle.js +0 -5
  477. package/dist/esm/bundle.js.map +0 -1
  478. package/dist/esm/classic/accessor.js +0 -144
  479. package/dist/esm/classic/accessor.js.map +0 -1
  480. package/dist/esm/classic/buffer.js +0 -392
  481. package/dist/esm/classic/buffer.js.map +0 -1
  482. package/dist/esm/classic/typed-array-utils.js +0 -112
  483. package/dist/esm/classic/typed-array-utils.js.map +0 -1
  484. package/dist/esm/context/context/context-state.js +0 -26
  485. package/dist/esm/context/context/context-state.js.map +0 -1
  486. package/dist/esm/context/context/create-browser-context.js +0 -61
  487. package/dist/esm/context/context/create-browser-context.js.map +0 -1
  488. package/dist/esm/context/context/create-headless-context.js +0 -43
  489. package/dist/esm/context/context/create-headless-context.js.map +0 -1
  490. package/dist/esm/context/context/device-pixels.js +0 -103
  491. package/dist/esm/context/context/device-pixels.js.map +0 -1
  492. package/dist/esm/context/context/webgl-checks.js +0 -34
  493. package/dist/esm/context/context/webgl-checks.js.map +0 -1
  494. package/dist/esm/context/debug/spector.js +0 -76
  495. package/dist/esm/context/debug/spector.js.map +0 -1
  496. package/dist/esm/context/debug/webgl-developer-tools.js +0 -121
  497. package/dist/esm/context/debug/webgl-developer-tools.js.map +0 -1
  498. package/dist/esm/context/parameters/unified-parameter-api.js +0 -63
  499. package/dist/esm/context/parameters/unified-parameter-api.js.map +0 -1
  500. package/dist/esm/context/parameters/webgl-parameter-tables.js +0 -445
  501. package/dist/esm/context/parameters/webgl-parameter-tables.js.map +0 -1
  502. package/dist/esm/context/polyfill/get-parameter-polyfill.js +0 -91
  503. package/dist/esm/context/polyfill/get-parameter-polyfill.js.map +0 -1
  504. package/dist/esm/context/polyfill/polyfill-context.js +0 -91
  505. package/dist/esm/context/polyfill/polyfill-context.js.map +0 -1
  506. package/dist/esm/context/polyfill/polyfill-table.js +0 -160
  507. package/dist/esm/context/polyfill/polyfill-table.js.map +0 -1
  508. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js +0 -335
  509. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  510. package/dist/esm/context/state-tracker/deep-array-equal.js +0 -21
  511. package/dist/esm/context/state-tracker/deep-array-equal.js.map +0 -1
  512. package/dist/esm/context/state-tracker/track-context-state.js +0 -183
  513. package/dist/esm/context/state-tracker/track-context-state.js.map +0 -1
  514. package/dist/esm/context/state-tracker/with-parameters.js +0 -36
  515. package/dist/esm/context/state-tracker/with-parameters.js.map +0 -1
  516. package/dist/esm/index.js +0 -28
  517. package/dist/esm/index.js.map +0 -1
  518. package/dist/esm/init.js +0 -4
  519. package/dist/esm/init.js.map +0 -1
  520. package/dist/esm/types/webgl.js +0 -2
  521. package/dist/esm/types/webgl.js.map +0 -1
  522. package/dist/esm/types.js +0 -2
  523. package/dist/esm/types.js.map +0 -1
  524. package/dist/index.js.map +0 -1
  525. package/dist/init.d.ts +0 -2
  526. package/dist/init.d.ts.map +0 -1
  527. package/dist/init.js +0 -4
  528. package/dist/init.js.map +0 -1
  529. package/dist/types/webgl.d.ts +0 -145
  530. package/dist/types/webgl.d.ts.map +0 -1
  531. package/dist/types/webgl.js +0 -2
  532. package/dist/types/webgl.js.map +0 -1
  533. package/dist/types.js.map +0 -1
  534. package/src/adapter/converters/renderbuffer-formats.ts +0 -92
  535. package/src/adapter/device-helpers/device-features.ts +0 -158
  536. package/src/adapter/device-helpers/device-limits.ts +0 -153
  537. package/src/adapter/device-helpers/get-device-info.ts +0 -49
  538. package/src/adapter/device-helpers/is-old-ie.ts +0 -11
  539. package/src/adapter/helpers/attribute-utils.ts +0 -61
  540. package/src/adapter/objects/webgl-vertex-array-object.ts +0 -111
  541. package/src/bundle.ts +0 -4
  542. package/src/classic/buffer.ts +0 -474
  543. package/src/context/context/context-state.ts +0 -41
  544. package/src/context/context/create-browser-context.ts +0 -118
  545. package/src/context/context/create-headless-context.ts +0 -48
  546. package/src/context/context/device-pixels.ts +0 -158
  547. package/src/context/context/webgl-checks.ts +0 -49
  548. package/src/context/polyfill/get-parameter-polyfill.ts +0 -118
  549. package/src/context/polyfill/polyfill-context.ts +0 -97
  550. package/src/context/polyfill/polyfill-table.ts +0 -162
  551. package/src/context/polyfill/polyfill-vertex-array-object.ts +0 -360
  552. package/src/init.ts +0 -4
  553. package/src/types/webgl.ts +0 -284
@@ -1,9 +1,55 @@
1
- import {Device, Parameters, CompareFunction, StencilOperation, log, isObjectEmpty} from '@luma.gl/api';
2
- import GL from '@luma.gl/constants';
3
- import type { GLParameters } from '../../types/webgl';
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ import {
6
+ Device,
7
+ Parameters,
8
+ CompareFunction,
9
+ StencilOperation,
10
+ log,
11
+ isObjectEmpty,
12
+ BlendOperation,
13
+ BlendFactor
14
+ } from '@luma.gl/core';
15
+ import {GL} from '@luma.gl/constants';
16
+ import type {GLBlendEquation, GLBlendFunction, GLParameters} from '@luma.gl/constants';
4
17
  import {pushContextState, popContextState} from '../../context/state-tracker/track-context-state';
5
- import {setParameters} from '../../context/parameters/unified-parameter-api';
6
- import WebGLDevice from '../webgl-device';
18
+ import {setGLParameters} from '../../context/parameters/unified-parameter-api';
19
+ import {WebGLDevice} from '../webgl-device';
20
+
21
+ /* eslint-disable no-unused-expressions */ // For expression ? gl.enable() : gl.disable()
22
+
23
+ /**
24
+ * Execute a function with a set of temporary WebGL parameter overrides
25
+ * - Saves current "global" WebGL context settings
26
+ * - Sets the supplies WebGL context parameters,
27
+ * - Executes supplied function
28
+ * - Restores parameters
29
+ * - Returns the return value of the supplied function
30
+ */
31
+ export function withDeviceAndGLParameters<T = unknown>(
32
+ device: Device,
33
+ parameters: Parameters,
34
+ glParameters: GLParameters,
35
+ func: (device?: Device) => T
36
+ ): T {
37
+ if (isObjectEmpty(parameters)) {
38
+ // Avoid setting state if no parameters provided. Just call and return
39
+ return func(device);
40
+ }
41
+
42
+ // Wrap in a try-catch to ensure that parameters are restored on exceptions
43
+ const webglDevice = device as WebGLDevice;
44
+ pushContextState(webglDevice.gl);
45
+ try {
46
+ setDeviceParameters(device, parameters);
47
+ setGLParameters(webglDevice.gl, glParameters);
48
+ return func(device);
49
+ } finally {
50
+ popContextState(webglDevice.gl);
51
+ }
52
+ }
7
53
 
8
54
  /**
9
55
  * Execute a function with a set of temporary WebGL parameter overrides
@@ -14,21 +60,24 @@ import WebGLDevice from '../webgl-device';
14
60
  * - Returns the return value of the supplied function
15
61
  * @deprecated use withDeviceParameters instead
16
62
  */
17
- export function withGLParameters<T = unknown>(device: Device, parameters: GLParameters, func: (device?: Device) => T): T {
63
+ export function withGLParameters<T = unknown>(
64
+ device: Device,
65
+ parameters: GLParameters,
66
+ func: (device?: Device) => T
67
+ ): T {
18
68
  if (isObjectEmpty(parameters)) {
19
69
  // Avoid setting state if no parameters provided. Just call and return
20
70
  return func(device);
21
71
  }
22
72
 
23
73
  // Wrap in a try-catch to ensure that parameters are restored on exceptions
24
- // @ts-expect-error
25
- pushContextState(device.gl);
74
+ const webglDevice = device as WebGLDevice;
75
+ pushContextState(webglDevice.gl);
26
76
  try {
27
- setParameters(device, parameters);
77
+ setGLParameters(webglDevice.gl, parameters);
28
78
  return func(device);
29
79
  } finally {
30
- // @ts-expect-error
31
- popContextState(device.gl);
80
+ popContextState(webglDevice.gl);
32
81
  }
33
82
  }
34
83
 
@@ -40,7 +89,11 @@ import WebGLDevice from '../webgl-device';
40
89
  * - Restores parameters
41
90
  * - Returns the return value of the supplied function
42
91
  */
43
- export function withDeviceParameters<T = unknown>(device: Device, parameters: Parameters, func: (device?: Device) => T): T {
92
+ export function withDeviceParameters<T = unknown>(
93
+ device: Device,
94
+ parameters: Parameters,
95
+ func: (device?: Device) => T
96
+ ): T {
44
97
  if (isObjectEmpty(parameters)) {
45
98
  // Avoid setting state if no parameters provided. Just call and return
46
99
  return func(device);
@@ -58,11 +111,10 @@ export function withDeviceParameters<T = unknown>(device: Device, parameters: Pa
58
111
  }
59
112
  }
60
113
 
61
-
62
114
  /** Set WebGPU Style Parameters */
63
115
  export function setDeviceParameters(device: Device, parameters: Parameters) {
64
- const webglDevice = WebGLDevice.attach(device);
65
- const {gl, gl2} = webglDevice;
116
+ const webglDevice = device as WebGLDevice;
117
+ const {gl} = webglDevice;
66
118
 
67
119
  // RASTERIZATION SETTINGS
68
120
  if (parameters.cullMode) {
@@ -82,10 +134,19 @@ export function setDeviceParameters(device: Device, parameters: Parameters) {
82
134
  }
83
135
 
84
136
  if (parameters.frontFace) {
85
- gl.frontFace(map('frontFace', parameters.frontFace, {
86
- ccw: GL.CCW,
87
- cw: GL.CW
88
- }));
137
+ gl.frontFace(
138
+ map('frontFace', parameters.frontFace, {
139
+ ccw: GL.CCW,
140
+ cw: GL.CW
141
+ })
142
+ );
143
+ }
144
+
145
+ if (parameters.unclippedDepth) {
146
+ if (device.features.has('depth-clip-control')) {
147
+ // EXT_depth_clamp
148
+ gl.enable(GL.DEPTH_CLAMP_EXT);
149
+ }
89
150
  }
90
151
 
91
152
  if (parameters.depthBias !== undefined) {
@@ -96,13 +157,73 @@ export function setDeviceParameters(device: Device, parameters: Parameters) {
96
157
  // // Handled by depthBias
97
158
  // },
98
159
 
160
+ // WEBGL EXTENSIONS
161
+
162
+ if (device.features.has('provoking-vertex-webgl')) {
163
+ const extensions = webglDevice.getExtension('WEBGL_provoking_vertex');
164
+ const ext = extensions.WEBGL_provoking_vertex;
165
+
166
+ if (parameters.provokingVertex) {
167
+ const vertex = map('provokingVertex', parameters.provokingVertex, {
168
+ first: GL.FIRST_VERTEX_CONVENTION_WEBGL,
169
+ last: GL.LAST_VERTEX_CONVENTION_WEBGL
170
+ });
171
+ ext?.provokingVertexWEBGL(vertex);
172
+ }
173
+ }
174
+
175
+ if (device.features.has('polygon-mode-webgl')) {
176
+ const extensions = webglDevice.getExtension('WEBGL_polygon_mode');
177
+ const ext = extensions.WEBGL_polygon_mode;
178
+
179
+ if (parameters.polygonMode) {
180
+ const mode = map('polygonMode', parameters.provokingVertex, {
181
+ fill: GL.FILL_WEBGL,
182
+ lint: GL.LINE_WEBGL
183
+ });
184
+ ext?.polygonModeWEBGL(GL.FRONT, mode);
185
+ ext?.polygonModeWEBGL(GL.BACK, mode);
186
+ }
187
+
188
+ if (parameters.polygonOffsetLine) {
189
+ gl.enable(GL.POLYGON_OFFSET_LINE_WEBGL);
190
+ }
191
+ }
192
+
193
+ if (device.features.has('shader-clip-cull-distance-webgl')) {
194
+ if (parameters.clipDistance0) {
195
+ gl.enable(GL.CLIP_DISTANCE0_WEBGL);
196
+ }
197
+ if (parameters.clipDistance1) {
198
+ gl.enable(GL.CLIP_DISTANCE1_WEBGL);
199
+ }
200
+ if (parameters.clipDistance2) {
201
+ gl.enable(GL.CLIP_DISTANCE2_WEBGL);
202
+ }
203
+ if (parameters.clipDistance3) {
204
+ gl.enable(GL.CLIP_DISTANCE3_WEBGL);
205
+ }
206
+ if (parameters.clipDistance4) {
207
+ gl.enable(GL.CLIP_DISTANCE4_WEBGL);
208
+ }
209
+ if (parameters.clipDistance5) {
210
+ gl.enable(GL.CLIP_DISTANCE5_WEBGL);
211
+ }
212
+ if (parameters.clipDistance6) {
213
+ gl.enable(GL.CLIP_DISTANCE6_WEBGL);
214
+ }
215
+ if (parameters.clipDistance7) {
216
+ gl.enable(GL.CLIP_DISTANCE7_WEBGL);
217
+ }
218
+ }
219
+
99
220
  // DEPTH STENCIL
100
221
 
101
222
  if (parameters.depthWriteEnabled !== undefined) {
102
223
  gl.depthMask(mapBoolean('depthWriteEnabled', parameters.depthWriteEnabled));
103
224
  }
104
225
 
105
- if (parameters.depthCompare) {
226
+ if (parameters.depthCompare) {
106
227
  parameters.depthCompare !== 'always' ? gl.enable(GL.DEPTH_TEST) : gl.disable(GL.DEPTH_TEST);
107
228
  gl.depthFunc(convertCompareFunction('depthCompare', parameters.depthCompare));
108
229
  }
@@ -122,15 +243,24 @@ export function setDeviceParameters(device: Device, parameters: Parameters) {
122
243
  const mask = parameters.stencilReadMask || 0xffffffff;
123
244
  const glValue = convertCompareFunction('depthCompare', parameters.stencilCompare);
124
245
  // TODO - ensure back doesn't overwrite
125
- parameters.stencilCompare !== 'always' ? gl.enable(GL.STENCIL_TEST) : gl.disable(GL.STENCIL_TEST);
246
+ parameters.stencilCompare !== 'always'
247
+ ? gl.enable(GL.STENCIL_TEST)
248
+ : gl.disable(GL.STENCIL_TEST);
126
249
  gl.stencilFuncSeparate(GL.FRONT, glValue, 0, mask);
127
250
  gl.stencilFuncSeparate(GL.BACK, glValue, 0, mask);
128
251
  }
129
252
 
130
- if (parameters.stencilPassOperation && parameters.stencilFailOperation && parameters.stencilDepthFailOperation) {
253
+ if (
254
+ parameters.stencilPassOperation &&
255
+ parameters.stencilFailOperation &&
256
+ parameters.stencilDepthFailOperation
257
+ ) {
131
258
  const dppass = convertStencilOperation('stencilPassOperation', parameters.stencilPassOperation);
132
259
  const sfail = convertStencilOperation('stencilFailOperation', parameters.stencilFailOperation);
133
- const dpfail = convertStencilOperation('stencilDepthFailOperation', parameters.stencilDepthFailOperation);
260
+ const dpfail = convertStencilOperation(
261
+ 'stencilDepthFailOperation',
262
+ parameters.stencilDepthFailOperation
263
+ );
134
264
  gl.stencilOpSeparate(GL.FRONT, sfail, dpfail, dppass);
135
265
  gl.stencilOpSeparate(GL.BACK, sfail, dpfail, dppass);
136
266
  }
@@ -145,21 +275,37 @@ export function setDeviceParameters(device: Device, parameters: Parameters) {
145
275
 
146
276
  // COLOR STATE
147
277
 
148
- // if (parameters.blend) {
149
- // gl.enable(GL.BLEND);
150
-
151
- // const blend = parameters.blend;
152
-
153
- // let colorEquation = (blend && blend.color && blend.color.operation) || 'add';
154
- // let alphaEquation = (blend && blend.alpha && blend.alpha.operation) || 'add';
155
- // gl.blendEquationSeparate(colorEquation, alphaEquation);
156
-
157
- // let colorSrcFactor = (blend && blend.color && blend.color.srcFactor) || 'one';
158
- // let colorDstFactor = (blend && blend.color && blend.color.dstFactor) || 'zero';
159
- // let alphaSrcFactor = (blend && blend.alpha && blend.alpha.srcFactor) || 'one';
160
- // let alphaDstFactor = (blend && blend.alpha && blend.alpha.dstFactor) || 'zero';
161
- // gl.blendFuncSeparate(colorSrcFactor, colorDstFactor, alphaSrcFactor, alphaDstFactor);
162
- // }
278
+ if (parameters.blendColorOperation || parameters.blendAlphaOperation) {
279
+ gl.enable(GL.BLEND);
280
+
281
+ const colorEquation = convertBlendOperationToEquation(
282
+ 'blendColorOperation',
283
+ parameters.blendColorOperation || 'add'
284
+ );
285
+ const alphaEquation = convertBlendOperationToEquation(
286
+ 'blendAlphaOperation',
287
+ parameters.blendAlphaOperation || 'add'
288
+ );
289
+ gl.blendEquationSeparate(colorEquation, alphaEquation);
290
+
291
+ const colorSrcFactor = convertBlendFactorToFunction(
292
+ 'blendColorSrcFactor',
293
+ parameters.blendColorSrcFactor || 'one'
294
+ );
295
+ const colorDstFactor = convertBlendFactorToFunction(
296
+ 'blendColorDstFactor',
297
+ parameters.blendColorDstFactor || 'zero'
298
+ );
299
+ const alphaSrcFactor = convertBlendFactorToFunction(
300
+ 'blendAlphaSrcFactor',
301
+ parameters.blendAlphaSrcFactor || 'one'
302
+ );
303
+ const alphaDstFactor = convertBlendFactorToFunction(
304
+ 'blendAlphaDstFactor',
305
+ parameters.blendAlphaDstFactor || 'zero'
306
+ );
307
+ gl.blendFuncSeparate(colorSrcFactor, colorDstFactor, alphaSrcFactor, alphaDstFactor);
308
+ }
163
309
  }
164
310
 
165
311
  /*
@@ -187,14 +333,14 @@ export function setDeviceParameters(device: Device, parameters: Parameters) {
187
333
 
188
334
  export function convertCompareFunction(parameter: string, value: CompareFunction): GL {
189
335
  return map(parameter, value, {
190
- 'never': GL.NEVER,
191
- 'less': GL.LESS,
192
- 'equal': GL.EQUAL,
336
+ never: GL.NEVER,
337
+ less: GL.LESS,
338
+ equal: GL.EQUAL,
193
339
  'less-equal': GL.LEQUAL,
194
- 'greater': GL.GREATER,
340
+ greater: GL.GREATER,
195
341
  'not-equal': GL.NOTEQUAL,
196
342
  'greater-equal': GL.GEQUAL,
197
- 'always': GL.ALWAYS
343
+ always: GL.ALWAYS
198
344
  });
199
345
  }
200
346
 
@@ -213,10 +359,10 @@ export function convertToCompareFunction(parameter: string, value: GL): CompareF
213
359
 
214
360
  function convertStencilOperation(parameter: string, value: StencilOperation): GL {
215
361
  return map(parameter, value, {
216
- 'keep': GL.KEEP,
217
- 'zero': GL.ZERO,
218
- 'replace': GL.REPLACE,
219
- 'invert': GL.INVERT,
362
+ keep: GL.KEEP,
363
+ zero: GL.ZERO,
364
+ replace: GL.REPLACE,
365
+ invert: GL.INVERT,
220
366
  'increment-clamp': GL.INCR,
221
367
  'decrement-clamp': GL.DECR,
222
368
  'increment-wrap': GL.INCR_WRAP,
@@ -224,15 +370,32 @@ function convertStencilOperation(parameter: string, value: StencilOperation): GL
224
370
  });
225
371
  }
226
372
 
227
- function convertBlendOperationToEquation(parameter: string, value: string): number {
373
+ function convertBlendOperationToEquation(
374
+ parameter: string,
375
+ value: BlendOperation
376
+ ): GLBlendEquation {
228
377
  return map(parameter, value, {
229
- 'add': GL.FUNC_ADD,
230
- 'sub': GL.FUNC_SUBTRACT,
378
+ add: GL.FUNC_ADD,
379
+ subtract: GL.FUNC_SUBTRACT,
231
380
  'reverse-subtract': GL.FUNC_REVERSE_SUBTRACT,
232
- // When using a WebGL 2 context, the following values are available additionally:
233
- 'min': GL.MIN,
234
- 'max': GL.MAX
235
- });
381
+ min: GL.MIN,
382
+ max: GL.MAX
383
+ } as Record<BlendOperation, GLBlendEquation>);
384
+ }
385
+
386
+ function convertBlendFactorToFunction(parameter: string, value: BlendFactor): GLBlendFunction {
387
+ return map(parameter, value, {
388
+ one: GL.ONE,
389
+ zero: GL.ZERO,
390
+ 'src-color': GL.SRC_COLOR,
391
+ 'one-minus-src-color': GL.ONE_MINUS_SRC_COLOR,
392
+ 'dst-color': GL.DST_COLOR,
393
+ 'one-minus-dst-color': GL.ONE_MINUS_DST_COLOR,
394
+ 'src-alpha': GL.SRC_ALPHA,
395
+ 'one-minus-src-alpha': GL.ONE_MINUS_SRC_ALPHA,
396
+ 'dst-alpha': GL.DST_ALPHA,
397
+ 'one-minus-dst-alpha': GL.ONE_MINUS_DST_ALPHA
398
+ } as Record<BlendFactor, GLBlendFunction>);
236
399
  }
237
400
 
238
401
  function message(parameter: string, value: any): string {
@@ -1,16 +1,19 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
1
5
  // SAMPLER FILTERS
2
- import {SamplerParameters} from '@luma.gl/api';
3
- import GL from '@luma.gl/constants';
4
- import {GLSamplerParameters} from '../../types/webgl';
5
- import {convertCompareFunction, convertToCompareFunction} from './device-parameters';
6
+ import {SamplerProps} from '@luma.gl/core';
7
+ import {GL, GLSamplerParameters} from '@luma.gl/constants';
8
+ import {convertCompareFunction} from './device-parameters';
6
9
 
7
10
  /**
8
11
  * Convert WebGPU-style sampler props to WebGL
9
12
  * @param props
10
13
  * @returns
11
14
  */
12
- export function convertSamplerParametersToWebGL(props: SamplerParameters): GLSamplerParameters {
13
- const params: Record<number, number> = {};
15
+ export function convertSamplerParametersToWebGL(props: SamplerProps): GLSamplerParameters {
16
+ const params: GLSamplerParameters = {};
14
17
  if (props.addressModeU) {
15
18
  params[GL.TEXTURE_WRAP_S] = convertAddressMode(props.addressModeU);
16
19
  }
@@ -25,7 +28,10 @@ export function convertSamplerParametersToWebGL(props: SamplerParameters): GLSam
25
28
  }
26
29
  if (props.minFilter || props.mipmapFilter) {
27
30
  // TODO - arbitrary choice of linear?
28
- params[GL.TEXTURE_MIN_FILTER] = convertMinFilterMode(props.minFilter || 'linear', props.mipmapFilter);
31
+ params[GL.TEXTURE_MIN_FILTER] = convertMinFilterMode(
32
+ props.minFilter || 'linear',
33
+ props.mipmapFilter
34
+ );
29
35
  }
30
36
  if (props.lodMinClamp !== undefined) {
31
37
  params[GL.TEXTURE_MIN_LOD] = props.lodMinClamp;
@@ -38,7 +44,7 @@ export function convertSamplerParametersToWebGL(props: SamplerParameters): GLSam
38
44
  params[GL.TEXTURE_COMPARE_MODE] = GL.COMPARE_REF_TO_TEXTURE;
39
45
  }
40
46
  if (props.compare) {
41
- params[GL.TEXTURE_COMPARE_FUNC] = convertCompareFunction('compare', props.compare);
47
+ params[GL.TEXTURE_COMPARE_FUNC] = convertCompareFunction('compare', props.compare);
42
48
  }
43
49
  // Note depends on WebGL extension
44
50
  if (props.maxAnisotropy) {
@@ -47,138 +53,52 @@ export function convertSamplerParametersToWebGL(props: SamplerParameters): GLSam
47
53
  return params;
48
54
  }
49
55
 
56
+ // HELPERS
57
+
50
58
  /** Convert address more */
51
- function convertAddressMode(addressMode: 'clamp-to-edge' | 'repeat' | 'mirror-repeat'): GL {
59
+ function convertAddressMode(
60
+ addressMode: 'clamp-to-edge' | 'repeat' | 'mirror-repeat'
61
+ ): GL.CLAMP_TO_EDGE | GL.REPEAT | GL.MIRRORED_REPEAT {
52
62
  switch (addressMode) {
53
- case 'clamp-to-edge': return GL.CLAMP_TO_EDGE;
54
- case 'repeat': return GL.REPEAT;
55
- case 'mirror-repeat': return GL.MIRRORED_REPEAT;
63
+ case 'clamp-to-edge':
64
+ return GL.CLAMP_TO_EDGE;
65
+ case 'repeat':
66
+ return GL.REPEAT;
67
+ case 'mirror-repeat':
68
+ return GL.MIRRORED_REPEAT;
56
69
  }
57
70
  }
58
71
 
59
- function convertMaxFilterMode(maxFilter: 'nearest' | 'linear'): GL {
72
+ function convertMaxFilterMode(maxFilter: 'nearest' | 'linear'): GL.NEAREST | GL.LINEAR {
60
73
  switch (maxFilter) {
61
- case 'nearest': return GL.NEAREST;
62
- case 'linear': return GL.LINEAR;
74
+ case 'nearest':
75
+ return GL.NEAREST;
76
+ case 'linear':
77
+ return GL.LINEAR;
63
78
  }
64
79
  }
65
80
 
66
- /**
67
- * WebGPU has separate min filter and mipmap filter,
81
+ /**
82
+ * WebGPU has separate min filter and mipmap filter,
68
83
  * WebGL is combined and effectively offers 6 options
69
84
  */
70
- function convertMinFilterMode(minFilter: 'nearest' | 'linear', mipmapFilter?: 'nearest' | 'linear'): GL {
85
+ function convertMinFilterMode(
86
+ minFilter: 'nearest' | 'linear',
87
+ mipmapFilter?: 'nearest' | 'linear'
88
+ ):
89
+ | GL.NEAREST
90
+ | GL.LINEAR
91
+ | GL.NEAREST_MIPMAP_NEAREST
92
+ | GL.LINEAR_MIPMAP_NEAREST
93
+ | GL.NEAREST_MIPMAP_LINEAR
94
+ | GL.LINEAR_MIPMAP_LINEAR {
71
95
  if (!mipmapFilter) {
72
96
  return convertMaxFilterMode(minFilter);
73
97
  }
74
98
  switch (minFilter) {
75
- case 'nearest': return mipmapFilter === 'nearest' ? GL.NEAREST_MIPMAP_NEAREST : GL.NEAREST_MIPMAP_LINEAR;
76
- case 'linear': return mipmapFilter === 'nearest' ? GL.LINEAR_MIPMAP_NEAREST : GL.LINEAR_MIPMAP_LINEAR;
77
- }
78
- }
79
-
80
- // Convert from WebGL to WebGPU
81
-
82
- /**
83
- * Convert WebGL-style sampler props to WebGPU
84
- * @param props
85
- * @returns
86
- */
87
- export function convertToSamplerParameters(params: GLSamplerParameters): SamplerParameters {
88
- const props: SamplerParameters = {};
89
- if (params[GL.TEXTURE_WRAP_S]) {
90
- props.addressModeU = convertToAddressMode(params[GL.TEXTURE_WRAP_S]);
91
- }
92
- if (params[GL.TEXTURE_WRAP_T]) {
93
- props.addressModeV = convertToAddressMode(params[GL.TEXTURE_WRAP_T]);
94
- }
95
- if (params[GL.TEXTURE_WRAP_R]) {
96
- props.addressModeW = convertToAddressMode(params[GL.TEXTURE_WRAP_R]);
97
- }
98
- if (params[GL.TEXTURE_MAG_FILTER]) {
99
- props.magFilter = convertToMaxFilterMode(params[GL.TEXTURE_MAG_FILTER]);
100
- }
101
- if (params[GL.TEXTURE_MIN_FILTER]) {
102
- props.minFilter = convertToMinFilterMode(params[GL.TEXTURE_MIN_FILTER]);
103
- }
104
- if (params[GL.TEXTURE_MIN_FILTER]) {
105
- props.mipmapFilter = convertToMipmapFilterMode(params[GL.TEXTURE_MIN_FILTER]);
106
- }
107
- if (params[GL.TEXTURE_MIN_LOD]) {
108
- props.lodMinClamp = params[GL.TEXTURE_MIN_LOD];
109
- }
110
- if (params[GL.TEXTURE_MAX_LOD]) {
111
- props.lodMaxClamp = params[GL.TEXTURE_MAX_LOD];
112
- }
113
- if (params[GL.TEXTURE_COMPARE_MODE]) {
114
- props.type = params[GL.TEXTURE_COMPARE_MODE] === GL.COMPARE_REF_TO_TEXTURE ? 'comparison-sampler' : 'color-sampler';
115
- }
116
- if (params[GL.TEXTURE_COMPARE_FUNC]) {
117
- props.compare = convertToCompareFunction('compare', params[GL.TEXTURE_COMPARE_FUNC]);
118
- }
119
- // NOTE depends on extension (very common)
120
- if (params[GL.TEXTURE_MAX_ANISOTROPY_EXT]) {
121
- props.maxAnisotropy = params[GL.TEXTURE_MAX_ANISOTROPY_EXT];
122
- }
123
- return props;
124
- }
125
-
126
- /** Convert address more */
127
- function convertToAddressMode(addressMode: number): 'clamp-to-edge' | 'repeat' | 'mirror-repeat' {
128
- switch (addressMode) {
129
- case GL.CLAMP_TO_EDGE: return 'clamp-to-edge';
130
- case GL.REPEAT: return 'repeat';
131
- case GL.MIRRORED_REPEAT: return 'mirror-repeat';
132
- default: throw new Error('address');
133
- }
134
- }
135
-
136
- function convertToMaxFilterMode(filterMode: number): 'nearest' | 'linear' {
137
- switch (filterMode) {
138
- case GL.NEAREST: return 'nearest';
139
- case GL.LINEAR: return 'linear';
140
- default: throw new Error('maxfilter');
141
- }
142
- }
143
-
144
- /** WebGPU has separate min filter and mipmap filter, WebGL is combined */
145
- function convertToMinFilterMode(filterMode: number): 'nearest' | 'linear' {
146
- switch (filterMode) {
147
- // TODO is this correct?
148
- case GL.NEAREST: return 'nearest';
149
- case GL.LINEAR: return 'linear';
150
- case GL.NEAREST_MIPMAP_NEAREST: return 'nearest';
151
- case GL.LINEAR_MIPMAP_NEAREST: return 'linear';
152
- case GL.NEAREST_MIPMAP_LINEAR: return 'nearest';
153
- case GL.LINEAR_MIPMAP_LINEAR: return 'linear';
154
- default: throw new Error('minfilter');
155
- }
156
- }
157
-
158
- function convertToMipmapFilterMode(filterMode: number): 'nearest' | 'linear' {
159
- switch (filterMode) {
160
- // TODO is this correct?
161
- case GL.NEAREST: return 'nearest';
162
- case GL.LINEAR: return 'linear';
163
- case GL.NEAREST_MIPMAP_NEAREST: return 'nearest';
164
- case GL.LINEAR_MIPMAP_NEAREST: return 'nearest';
165
- case GL.NEAREST_MIPMAP_LINEAR: return 'linear';
166
- case GL.LINEAR_MIPMAP_LINEAR: return 'linear';
167
- default: throw new Error('mipmap');
168
- }
169
- }
170
-
171
- /**
172
- * Override sampler settings that are not supported by Non-Power-of-Two textures in WebGL1.
173
- */
174
- export function updateSamplerParametersForNPOT(parameters: GLSamplerParameters): GLSamplerParameters {
175
- const newParameters = {...parameters};
176
- if (parameters[GL.TEXTURE_MIN_FILTER] !== GL.NEAREST) {
177
- // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_MIN_FILTER to LINEAR`)();
178
- newParameters[GL.TEXTURE_MIN_FILTER] = GL.LINEAR;
99
+ case 'nearest':
100
+ return mipmapFilter === 'nearest' ? GL.NEAREST_MIPMAP_NEAREST : GL.NEAREST_MIPMAP_LINEAR;
101
+ case 'linear':
102
+ return mipmapFilter === 'nearest' ? GL.LINEAR_MIPMAP_NEAREST : GL.LINEAR_MIPMAP_LINEAR;
179
103
  }
180
- // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_WRAP_S to CLAMP_TO_EDGE`)();
181
- newParameters[GL.TEXTURE_WRAP_S] = GL.CLAMP_TO_EDGE;
182
- newParameters[GL.TEXTURE_WRAP_T] = GL.CLAMP_TO_EDGE;
183
- return newParameters;
184
104
  }
@@ -0,0 +1,69 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ import {GL} from '@luma.gl/constants';
6
+ import {ShaderAttributeType, ShaderDataType} from '@luma.gl/core';
7
+
8
+ /** Get shader attribute type from GL constants */
9
+ export function getShaderAttributeTypeFromGL(
10
+ type: GL,
11
+ components: 1 | 2 | 3 | 4
12
+ ): ShaderAttributeType {
13
+ const dataType = getShaderDataTypeFromGL(type);
14
+ switch (components) {
15
+ case 1:
16
+ return dataType;
17
+ case 2:
18
+ return `vec2<${dataType}>`;
19
+ case 3:
20
+ return `vec2<${dataType}>`;
21
+ case 4:
22
+ return `vec2<${dataType}>`;
23
+ default:
24
+ throw new Error(String(components));
25
+ }
26
+ }
27
+
28
+ /** Get shader data type from GL constants */
29
+ export function getShaderDataTypeFromGL(type: GL): ShaderDataType {
30
+ switch (type) {
31
+ case GL.INT:
32
+ return 'i32';
33
+ case GL.UNSIGNED_INT:
34
+ return 'u32';
35
+ case GL.SHORT:
36
+ return 'i32';
37
+ case GL.UNSIGNED_SHORT:
38
+ return 'u32';
39
+ case GL.BYTE:
40
+ return 'i32';
41
+ case GL.UNSIGNED_BYTE:
42
+ return 'u32';
43
+ case GL.FLOAT:
44
+ return 'f32';
45
+ case GL.HALF_FLOAT:
46
+ return 'f16';
47
+ default:
48
+ throw new Error(String(type));
49
+ }
50
+ }
51
+
52
+ /** GetGL constant from shader data type */
53
+ export function getGLFromShaderDataType(
54
+ type: ShaderDataType
55
+ ): GL.INT | GL.UNSIGNED_INT | GL.FLOAT | GL.HALF_FLOAT {
56
+ switch (type) {
57
+ // TODO
58
+ case 'i32':
59
+ return GL.INT;
60
+ case 'u32':
61
+ return GL.UNSIGNED_INT;
62
+ case 'f32':
63
+ return GL.FLOAT;
64
+ case 'f16':
65
+ return GL.HALF_FLOAT;
66
+ default:
67
+ throw new Error(String(type));
68
+ }
69
+ }