@luma.gl/webgl 9.0.0-alpha.4 → 9.0.0-alpha.41

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 (525) hide show
  1. package/LICENSE +3 -1
  2. package/dist/adapter/converters/device-parameters.d.ts +23 -4
  3. package/dist/adapter/converters/device-parameters.d.ts.map +1 -1
  4. package/dist/adapter/converters/device-parameters.js +42 -47
  5. package/dist/adapter/converters/device-parameters.js.map +1 -1
  6. package/dist/adapter/converters/sampler-parameters.d.ts +5 -5
  7. package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
  8. package/dist/adapter/converters/sampler-parameters.js +20 -56
  9. package/dist/adapter/converters/sampler-parameters.js.map +1 -1
  10. package/dist/adapter/converters/shader-formats.d.ts +9 -0
  11. package/dist/adapter/converters/shader-formats.d.ts.map +1 -0
  12. package/dist/adapter/converters/shader-formats.js +53 -0
  13. package/dist/adapter/converters/shader-formats.js.map +1 -0
  14. package/dist/adapter/converters/texture-formats.d.ts +32 -44
  15. package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
  16. package/dist/adapter/converters/texture-formats.js +165 -201
  17. package/dist/adapter/converters/texture-formats.js.map +1 -1
  18. package/dist/adapter/converters/vertex-formats.d.ts +9 -3
  19. package/dist/adapter/converters/vertex-formats.d.ts.map +1 -1
  20. package/dist/adapter/converters/vertex-formats.js +51 -19
  21. package/dist/adapter/converters/vertex-formats.js.map +1 -1
  22. package/dist/adapter/device-helpers/device-features.d.ts +1 -1
  23. package/dist/adapter/device-helpers/device-features.d.ts.map +1 -1
  24. package/dist/adapter/device-helpers/device-features.js +14 -21
  25. package/dist/adapter/device-helpers/device-features.js.map +1 -1
  26. package/dist/adapter/device-helpers/device-limits.d.ts +3 -3
  27. package/dist/adapter/device-helpers/device-limits.d.ts.map +1 -1
  28. package/dist/adapter/device-helpers/device-limits.js +2 -5
  29. package/dist/adapter/device-helpers/device-limits.js.map +1 -1
  30. package/dist/adapter/device-helpers/get-device-info.d.ts +1 -1
  31. package/dist/adapter/device-helpers/get-device-info.d.ts.map +1 -1
  32. package/dist/adapter/device-helpers/get-device-info.js +9 -11
  33. package/dist/adapter/device-helpers/get-device-info.js.map +1 -1
  34. package/dist/adapter/device-helpers/is-old-ie.d.ts.map +1 -1
  35. package/dist/adapter/device-helpers/is-old-ie.js +2 -1
  36. package/dist/adapter/device-helpers/is-old-ie.js.map +1 -1
  37. package/dist/adapter/helpers/decode-webgl-types.d.ts +26 -0
  38. package/dist/adapter/helpers/decode-webgl-types.d.ts.map +1 -0
  39. package/dist/adapter/helpers/{uniforms.js → decode-webgl-types.js} +20 -29
  40. package/dist/adapter/helpers/decode-webgl-types.js.map +1 -0
  41. package/dist/adapter/helpers/get-shader-info.d.ts +9 -0
  42. package/dist/adapter/helpers/get-shader-info.d.ts.map +1 -0
  43. package/dist/adapter/helpers/get-shader-info.js +25 -0
  44. package/dist/adapter/helpers/get-shader-info.js.map +1 -0
  45. package/dist/adapter/helpers/get-shader-layout.d.ts +1 -48
  46. package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
  47. package/dist/adapter/helpers/get-shader-layout.js +60 -115
  48. package/dist/adapter/helpers/get-shader-layout.js.map +1 -1
  49. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts +1 -1
  50. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts.map +1 -1
  51. package/dist/adapter/helpers/parse-shader-compiler-log.js +0 -7
  52. package/dist/adapter/helpers/parse-shader-compiler-log.js.map +1 -1
  53. package/dist/adapter/helpers/set-uniform.d.ts +3 -2
  54. package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
  55. package/dist/adapter/helpers/set-uniform.js +27 -57
  56. package/dist/adapter/helpers/set-uniform.js.map +1 -1
  57. package/dist/adapter/helpers/webgl-topology-utils.d.ts +11 -0
  58. package/dist/adapter/helpers/webgl-topology-utils.d.ts.map +1 -0
  59. package/dist/adapter/helpers/{attribute-utils.js → webgl-topology-utils.js} +2 -19
  60. package/dist/adapter/helpers/webgl-topology-utils.js.map +1 -0
  61. package/dist/adapter/objects/constants-to-keys.d.ts +1 -3
  62. package/dist/adapter/objects/constants-to-keys.d.ts.map +1 -1
  63. package/dist/adapter/objects/constants-to-keys.js +2 -29
  64. package/dist/adapter/objects/constants-to-keys.js.map +1 -1
  65. package/dist/adapter/objects/webgl-renderbuffer.d.ts +15 -12
  66. package/dist/adapter/objects/webgl-renderbuffer.d.ts.map +1 -1
  67. package/dist/adapter/objects/webgl-renderbuffer.js +34 -41
  68. package/dist/adapter/objects/webgl-renderbuffer.js.map +1 -1
  69. package/dist/adapter/objects/webgl-resource.d.ts +6 -9
  70. package/dist/adapter/objects/webgl-resource.d.ts.map +1 -1
  71. package/dist/adapter/objects/webgl-resource.js +26 -83
  72. package/dist/adapter/objects/webgl-resource.js.map +1 -1
  73. package/dist/adapter/resources/webgl-buffer.d.ts +18 -10
  74. package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
  75. package/dist/adapter/resources/webgl-buffer.js +49 -78
  76. package/dist/adapter/resources/webgl-buffer.js.map +1 -1
  77. package/dist/adapter/resources/webgl-command-buffer.d.ts +15 -9
  78. package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
  79. package/dist/adapter/resources/webgl-command-buffer.js +169 -43
  80. package/dist/adapter/resources/webgl-command-buffer.js.map +1 -1
  81. package/dist/adapter/resources/webgl-command-encoder.d.ts +7 -6
  82. package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -1
  83. package/dist/adapter/resources/webgl-command-encoder.js +10 -20
  84. package/dist/adapter/resources/webgl-command-encoder.js.map +1 -1
  85. package/dist/adapter/resources/webgl-external-texture.js.map +1 -1
  86. package/dist/adapter/resources/webgl-framebuffer.d.ts +21 -24
  87. package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
  88. package/dist/adapter/resources/webgl-framebuffer.js +46 -155
  89. package/dist/adapter/resources/webgl-framebuffer.js.map +1 -1
  90. package/dist/adapter/resources/webgl-render-pass.d.ts +19 -4
  91. package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
  92. package/dist/adapter/resources/webgl-render-pass.js +91 -11
  93. package/dist/adapter/resources/webgl-render-pass.js.map +1 -1
  94. package/dist/adapter/resources/webgl-render-pipeline.d.ts +53 -19
  95. package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
  96. package/dist/adapter/resources/webgl-render-pipeline.js +108 -230
  97. package/dist/adapter/resources/webgl-render-pipeline.js.map +1 -1
  98. package/dist/adapter/resources/webgl-sampler.d.ts +6 -5
  99. package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
  100. package/dist/adapter/resources/webgl-sampler.js +10 -19
  101. package/dist/adapter/resources/webgl-sampler.js.map +1 -1
  102. package/dist/adapter/resources/webgl-shader.d.ts +3 -4
  103. package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
  104. package/dist/adapter/resources/webgl-shader.js +19 -31
  105. package/dist/adapter/resources/webgl-shader.js.map +1 -1
  106. package/dist/adapter/resources/webgl-texture.d.ts +64 -44
  107. package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
  108. package/dist/adapter/resources/webgl-texture.js +119 -235
  109. package/dist/adapter/resources/webgl-texture.js.map +1 -1
  110. package/dist/adapter/resources/webgl-vertex-array.d.ts +67 -0
  111. package/dist/adapter/resources/webgl-vertex-array.d.ts.map +1 -0
  112. package/dist/adapter/resources/webgl-vertex-array.js +166 -0
  113. package/dist/adapter/resources/webgl-vertex-array.js.map +1 -0
  114. package/dist/adapter/webgl-canvas-context.d.ts +6 -7
  115. package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
  116. package/dist/adapter/webgl-canvas-context.js +10 -23
  117. package/dist/adapter/webgl-canvas-context.js.map +1 -1
  118. package/dist/adapter/webgl-device.d.ts +74 -41
  119. package/dist/adapter/webgl-device.d.ts.map +1 -1
  120. package/dist/adapter/webgl-device.js +214 -128
  121. package/dist/adapter/webgl-device.js.map +1 -1
  122. package/dist/classic/accessor.d.ts +3 -3
  123. package/dist/classic/accessor.d.ts.map +1 -1
  124. package/dist/classic/accessor.js +23 -48
  125. package/dist/classic/accessor.js.map +1 -1
  126. package/dist/classic/{buffer.d.ts → buffer-with-accessor.d.ts} +16 -29
  127. package/dist/classic/buffer-with-accessor.d.ts.map +1 -0
  128. package/dist/classic/{buffer.js → buffer-with-accessor.js} +55 -125
  129. package/dist/classic/buffer-with-accessor.js.map +1 -0
  130. package/dist/classic/clear.d.ts +22 -0
  131. package/dist/classic/clear.d.ts.map +1 -0
  132. package/dist/classic/clear.js +88 -0
  133. package/dist/classic/clear.js.map +1 -0
  134. package/dist/classic/copy-and-blit.d.ts +62 -0
  135. package/dist/classic/copy-and-blit.d.ts.map +1 -0
  136. package/dist/classic/copy-and-blit.js +200 -0
  137. package/dist/classic/copy-and-blit.js.map +1 -0
  138. package/dist/classic/format-utils.d.ts +3 -0
  139. package/dist/classic/format-utils.d.ts.map +1 -0
  140. package/dist/classic/format-utils.js +38 -0
  141. package/dist/classic/format-utils.js.map +1 -0
  142. package/dist/classic/typed-array-utils.d.ts +15 -17
  143. package/dist/classic/typed-array-utils.d.ts.map +1 -1
  144. package/dist/classic/typed-array-utils.js +1 -21
  145. package/dist/classic/typed-array-utils.js.map +1 -1
  146. package/dist/context/context/create-browser-context.d.ts +40 -0
  147. package/dist/context/context/create-browser-context.d.ts.map +1 -0
  148. package/dist/context/context/create-browser-context.js +53 -0
  149. package/dist/context/context/create-browser-context.js.map +1 -0
  150. package/dist/context/context/create-headless-context.d.ts +9 -0
  151. package/dist/context/context/create-headless-context.d.ts.map +1 -0
  152. package/dist/context/context/create-headless-context.js +42 -0
  153. package/dist/context/context/create-headless-context.js.map +1 -0
  154. package/dist/context/context/webgl-checks.d.ts.map +1 -1
  155. package/dist/context/context/webgl-checks.js +1 -4
  156. package/dist/context/context/webgl-checks.js.map +1 -1
  157. package/dist/context/debug/spector.d.ts +1 -2
  158. package/dist/context/debug/spector.d.ts.map +1 -1
  159. package/dist/context/debug/spector.js +8 -20
  160. package/dist/context/debug/spector.js.map +1 -1
  161. package/dist/context/debug/webgl-developer-tools.d.ts +2 -2
  162. package/dist/context/debug/webgl-developer-tools.d.ts.map +1 -1
  163. package/dist/context/debug/webgl-developer-tools.js +16 -39
  164. package/dist/context/debug/webgl-developer-tools.js.map +1 -1
  165. package/dist/context/parameters/unified-parameter-api.d.ts +9 -8
  166. package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
  167. package/dist/context/parameters/unified-parameter-api.js +9 -19
  168. package/dist/context/parameters/unified-parameter-api.js.map +1 -1
  169. package/dist/context/parameters/webgl-parameter-tables.d.ts +105 -106
  170. package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
  171. package/dist/context/parameters/webgl-parameter-tables.js +18 -36
  172. package/dist/context/parameters/webgl-parameter-tables.js.map +1 -1
  173. package/dist/context/polyfill/context-data.d.ts +13 -0
  174. package/dist/context/polyfill/context-data.d.ts.map +1 -0
  175. package/dist/context/polyfill/context-data.js +12 -0
  176. package/dist/context/polyfill/context-data.js.map +1 -0
  177. package/dist/context/polyfill/get-parameter-polyfill.d.ts +1 -1
  178. package/dist/context/polyfill/get-parameter-polyfill.d.ts.map +1 -1
  179. package/dist/context/polyfill/get-parameter-polyfill.js +4 -9
  180. package/dist/context/polyfill/get-parameter-polyfill.js.map +1 -1
  181. package/dist/context/polyfill/polyfill-context.d.ts.map +1 -1
  182. package/dist/context/polyfill/polyfill-context.js +22 -30
  183. package/dist/context/polyfill/polyfill-context.js.map +1 -1
  184. package/dist/context/polyfill/polyfill-table.d.ts +8 -8
  185. package/dist/context/polyfill/polyfill-table.d.ts.map +1 -1
  186. package/dist/context/polyfill/polyfill-table.js +10 -32
  187. package/dist/context/polyfill/polyfill-table.js.map +1 -1
  188. package/dist/context/polyfill/polyfill-vertex-array-object.d.ts.map +1 -1
  189. package/dist/context/polyfill/polyfill-vertex-array-object.js +0 -70
  190. package/dist/context/polyfill/polyfill-vertex-array-object.js.map +1 -1
  191. package/dist/context/state-tracker/deep-array-equal.d.ts.map +1 -1
  192. package/dist/context/state-tracker/deep-array-equal.js +0 -4
  193. package/dist/context/state-tracker/deep-array-equal.js.map +1 -1
  194. package/dist/context/state-tracker/track-context-state.d.ts.map +1 -1
  195. package/dist/context/state-tracker/track-context-state.js +26 -62
  196. package/dist/context/state-tracker/track-context-state.js.map +1 -1
  197. package/dist/context/state-tracker/with-parameters.d.ts +2 -1
  198. package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
  199. package/dist/context/state-tracker/with-parameters.js +8 -10
  200. package/dist/context/state-tracker/with-parameters.js.map +1 -1
  201. package/dist/dist.dev.js +10391 -0
  202. package/dist/index.cjs +6625 -0
  203. package/dist/index.d.ts +27 -24
  204. package/dist/index.d.ts.map +1 -1
  205. package/dist/index.js +27 -26
  206. package/dist/index.js.map +1 -1
  207. package/dist/types.d.ts +3 -1
  208. package/dist/types.d.ts.map +1 -1
  209. package/dist/types.js.map +1 -1
  210. package/dist.min.js +37 -0
  211. package/package.json +21 -9
  212. package/src/adapter/converters/device-parameters.ts +124 -36
  213. package/src/adapter/converters/sampler-parameters.ts +22 -9
  214. package/src/adapter/converters/shader-formats.ts +44 -0
  215. package/src/adapter/converters/texture-formats.ts +267 -194
  216. package/src/adapter/converters/vertex-formats.ts +71 -10
  217. package/src/adapter/device-helpers/device-features.ts +13 -3
  218. package/src/adapter/device-helpers/device-limits.ts +5 -3
  219. package/src/adapter/device-helpers/get-device-info.ts +17 -10
  220. package/src/adapter/device-helpers/is-old-ie.ts +3 -0
  221. package/src/adapter/helpers/{uniforms.ts → decode-webgl-types.ts} +39 -21
  222. package/src/adapter/helpers/get-shader-info.ts +41 -0
  223. package/src/adapter/helpers/get-shader-layout.ts +121 -146
  224. package/src/adapter/helpers/parse-shader-compiler-log.ts +4 -2
  225. package/src/adapter/helpers/set-uniform.ts +39 -35
  226. package/src/adapter/helpers/{attribute-utils.ts → webgl-topology-utils.ts} +7 -5
  227. package/src/adapter/objects/constants-to-keys.ts +6 -25
  228. package/src/adapter/objects/webgl-renderbuffer.ts +43 -37
  229. package/src/adapter/objects/webgl-resource.ts +16 -23
  230. package/src/adapter/resources/webgl-buffer.ts +59 -58
  231. package/src/adapter/resources/webgl-command-buffer.ts +333 -25
  232. package/src/adapter/resources/webgl-command-encoder.ts +20 -12
  233. package/src/adapter/resources/webgl-external-texture.ts +5 -2
  234. package/src/adapter/resources/webgl-framebuffer.ts +89 -133
  235. package/src/adapter/resources/webgl-render-pass.ts +160 -4
  236. package/src/adapter/resources/webgl-render-pipeline.ts +265 -170
  237. package/src/adapter/resources/webgl-sampler.ts +15 -9
  238. package/src/adapter/resources/webgl-shader.ts +14 -11
  239. package/src/adapter/resources/webgl-texture.ts +120 -90
  240. package/src/adapter/resources/webgl-vertex-array.ts +279 -0
  241. package/src/adapter/webgl-canvas-context.ts +16 -14
  242. package/src/adapter/webgl-device.ts +321 -78
  243. package/src/classic/accessor.ts +7 -17
  244. package/src/classic/{buffer.ts → buffer-with-accessor.ts} +68 -76
  245. package/src/classic/clear.ts +113 -0
  246. package/src/classic/copy-and-blit.ts +314 -0
  247. package/src/classic/format-utils.ts +46 -0
  248. package/src/classic/typed-array-utils.ts +19 -27
  249. package/src/context/context/create-browser-context.ts +140 -0
  250. package/src/context/context/create-headless-context.ts +51 -0
  251. package/src/context/context/webgl-checks.ts +3 -1
  252. package/src/context/debug/spector.ts +9 -6
  253. package/src/context/debug/webgl-developer-tools.ts +23 -15
  254. package/src/context/parameters/unified-parameter-api.ts +23 -14
  255. package/src/context/parameters/webgl-parameter-tables.ts +120 -98
  256. package/src/context/polyfill/context-data.ts +30 -0
  257. package/src/context/polyfill/get-parameter-polyfill.ts +11 -7
  258. package/src/context/polyfill/polyfill-context.ts +10 -9
  259. package/src/context/polyfill/polyfill-table.ts +21 -16
  260. package/src/context/polyfill/polyfill-vertex-array-object.ts +5 -0
  261. package/src/context/state-tracker/deep-array-equal.ts +2 -0
  262. package/src/context/state-tracker/track-context-state.ts +20 -16
  263. package/src/context/state-tracker/with-parameters.ts +13 -4
  264. package/src/index.ts +69 -35
  265. package/src/types.ts +5 -0
  266. package/dist/adapter/converters/renderbuffer-formats.d.ts +0 -16
  267. package/dist/adapter/converters/renderbuffer-formats.d.ts.map +0 -1
  268. package/dist/adapter/converters/renderbuffer-formats.js +0 -185
  269. package/dist/adapter/converters/renderbuffer-formats.js.map +0 -1
  270. package/dist/adapter/helpers/attribute-utils.d.ts +0 -11
  271. package/dist/adapter/helpers/attribute-utils.d.ts.map +0 -1
  272. package/dist/adapter/helpers/attribute-utils.js.map +0 -1
  273. package/dist/adapter/helpers/uniforms.d.ts +0 -26
  274. package/dist/adapter/helpers/uniforms.d.ts.map +0 -1
  275. package/dist/adapter/helpers/uniforms.js.map +0 -1
  276. package/dist/adapter/objects/webgl-vertex-array-object.d.ts +0 -27
  277. package/dist/adapter/objects/webgl-vertex-array-object.d.ts.map +0 -1
  278. package/dist/adapter/objects/webgl-vertex-array-object.js +0 -84
  279. package/dist/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  280. package/dist/bundle.d.ts +0 -2
  281. package/dist/bundle.d.ts.map +0 -1
  282. package/dist/bundle.js +0 -5
  283. package/dist/bundle.js.map +0 -1
  284. package/dist/classic/buffer.d.ts.map +0 -1
  285. package/dist/classic/buffer.js.map +0 -1
  286. package/dist/context/context/context-state.d.ts +0 -18
  287. package/dist/context/context/context-state.d.ts.map +0 -1
  288. package/dist/context/context/context-state.js +0 -26
  289. package/dist/context/context/context-state.js.map +0 -1
  290. package/dist/context/context/create-context.d.ts +0 -41
  291. package/dist/context/context/create-context.d.ts.map +0 -1
  292. package/dist/context/context/create-context.js +0 -49
  293. package/dist/context/context/create-context.js.map +0 -1
  294. package/dist/context/context/device-pixels.d.ts +0 -25
  295. package/dist/context/context/device-pixels.d.ts.map +0 -1
  296. package/dist/context/context/device-pixels.js +0 -98
  297. package/dist/context/context/device-pixels.js.map +0 -1
  298. package/dist/es5/adapter/converters/device-parameters.js +0 -170
  299. package/dist/es5/adapter/converters/device-parameters.js.map +0 -1
  300. package/dist/es5/adapter/converters/renderbuffer-formats.js +0 -163
  301. package/dist/es5/adapter/converters/renderbuffer-formats.js.map +0 -1
  302. package/dist/es5/adapter/converters/sampler-parameters.js +0 -226
  303. package/dist/es5/adapter/converters/sampler-parameters.js.map +0 -1
  304. package/dist/es5/adapter/converters/texture-formats.js +0 -1031
  305. package/dist/es5/adapter/converters/texture-formats.js.map +0 -1
  306. package/dist/es5/adapter/converters/vertex-formats.js +0 -45
  307. package/dist/es5/adapter/converters/vertex-formats.js.map +0 -1
  308. package/dist/es5/adapter/device-helpers/device-features.js +0 -144
  309. package/dist/es5/adapter/device-helpers/device-features.js.map +0 -1
  310. package/dist/es5/adapter/device-helpers/device-limits.js +0 -64
  311. package/dist/es5/adapter/device-helpers/device-limits.js.map +0 -1
  312. package/dist/es5/adapter/device-helpers/get-device-info.js +0 -55
  313. package/dist/es5/adapter/device-helpers/get-device-info.js.map +0 -1
  314. package/dist/es5/adapter/device-helpers/is-old-ie.js +0 -16
  315. package/dist/es5/adapter/device-helpers/is-old-ie.js.map +0 -1
  316. package/dist/es5/adapter/helpers/attribute-utils.js +0 -91
  317. package/dist/es5/adapter/helpers/attribute-utils.js.map +0 -1
  318. package/dist/es5/adapter/helpers/get-shader-layout.js +0 -371
  319. package/dist/es5/adapter/helpers/get-shader-layout.js.map +0 -1
  320. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js +0 -72
  321. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  322. package/dist/es5/adapter/helpers/set-uniform.js +0 -125
  323. package/dist/es5/adapter/helpers/set-uniform.js.map +0 -1
  324. package/dist/es5/adapter/helpers/uniforms.js +0 -112
  325. package/dist/es5/adapter/helpers/uniforms.js.map +0 -1
  326. package/dist/es5/adapter/objects/constants-to-keys.js +0 -54
  327. package/dist/es5/adapter/objects/constants-to-keys.js.map +0 -1
  328. package/dist/es5/adapter/objects/webgl-renderbuffer.js +0 -150
  329. package/dist/es5/adapter/objects/webgl-renderbuffer.js.map +0 -1
  330. package/dist/es5/adapter/objects/webgl-resource.js +0 -292
  331. package/dist/es5/adapter/objects/webgl-resource.js.map +0 -1
  332. package/dist/es5/adapter/objects/webgl-vertex-array-object.js +0 -137
  333. package/dist/es5/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  334. package/dist/es5/adapter/resources/webgl-buffer.js +0 -243
  335. package/dist/es5/adapter/resources/webgl-buffer.js.map +0 -1
  336. package/dist/es5/adapter/resources/webgl-command-buffer.js +0 -96
  337. package/dist/es5/adapter/resources/webgl-command-buffer.js.map +0 -1
  338. package/dist/es5/adapter/resources/webgl-command-encoder.js +0 -98
  339. package/dist/es5/adapter/resources/webgl-command-encoder.js.map +0 -1
  340. package/dist/es5/adapter/resources/webgl-external-texture.js +0 -2
  341. package/dist/es5/adapter/resources/webgl-external-texture.js.map +0 -1
  342. package/dist/es5/adapter/resources/webgl-framebuffer.js +0 -345
  343. package/dist/es5/adapter/resources/webgl-framebuffer.js.map +0 -1
  344. package/dist/es5/adapter/resources/webgl-render-pass.js +0 -61
  345. package/dist/es5/adapter/resources/webgl-render-pass.js.map +0 -1
  346. package/dist/es5/adapter/resources/webgl-render-pipeline.js +0 -505
  347. package/dist/es5/adapter/resources/webgl-render-pipeline.js.map +0 -1
  348. package/dist/es5/adapter/resources/webgl-sampler.js +0 -96
  349. package/dist/es5/adapter/resources/webgl-sampler.js.map +0 -1
  350. package/dist/es5/adapter/resources/webgl-shader.js +0 -149
  351. package/dist/es5/adapter/resources/webgl-shader.js.map +0 -1
  352. package/dist/es5/adapter/resources/webgl-texture.js +0 -986
  353. package/dist/es5/adapter/resources/webgl-texture.js.map +0 -1
  354. package/dist/es5/adapter/webgl-canvas-context.js +0 -97
  355. package/dist/es5/adapter/webgl-canvas-context.js.map +0 -1
  356. package/dist/es5/adapter/webgl-device.js +0 -399
  357. package/dist/es5/adapter/webgl-device.js.map +0 -1
  358. package/dist/es5/bundle.js +0 -7
  359. package/dist/es5/bundle.js.map +0 -1
  360. package/dist/es5/classic/accessor.js +0 -181
  361. package/dist/es5/classic/accessor.js.map +0 -1
  362. package/dist/es5/classic/buffer.js +0 -470
  363. package/dist/es5/classic/buffer.js.map +0 -1
  364. package/dist/es5/classic/typed-array-utils.js +0 -126
  365. package/dist/es5/classic/typed-array-utils.js.map +0 -1
  366. package/dist/es5/context/context/context-state.js +0 -31
  367. package/dist/es5/context/context/context-state.js.map +0 -1
  368. package/dist/es5/context/context/create-context.js +0 -69
  369. package/dist/es5/context/context/create-context.js.map +0 -1
  370. package/dist/es5/context/context/device-pixels.js +0 -115
  371. package/dist/es5/context/context/device-pixels.js.map +0 -1
  372. package/dist/es5/context/context/webgl-checks.js +0 -54
  373. package/dist/es5/context/context/webgl-checks.js.map +0 -1
  374. package/dist/es5/context/debug/spector.js +0 -133
  375. package/dist/es5/context/debug/spector.js.map +0 -1
  376. package/dist/es5/context/debug/webgl-developer-tools.js +0 -198
  377. package/dist/es5/context/debug/webgl-developer-tools.js.map +0 -1
  378. package/dist/es5/context/parameters/unified-parameter-api.js +0 -97
  379. package/dist/es5/context/parameters/unified-parameter-api.js.map +0 -1
  380. package/dist/es5/context/parameters/webgl-parameter-tables.js +0 -392
  381. package/dist/es5/context/parameters/webgl-parameter-tables.js.map +0 -1
  382. package/dist/es5/context/polyfill/get-parameter-polyfill.js +0 -81
  383. package/dist/es5/context/polyfill/get-parameter-polyfill.js.map +0 -1
  384. package/dist/es5/context/polyfill/polyfill-context.js +0 -135
  385. package/dist/es5/context/polyfill/polyfill-context.js.map +0 -1
  386. package/dist/es5/context/polyfill/polyfill-table.js +0 -166
  387. package/dist/es5/context/polyfill/polyfill-table.js.map +0 -1
  388. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js +0 -341
  389. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  390. package/dist/es5/context/state-tracker/deep-array-equal.js +0 -28
  391. package/dist/es5/context/state-tracker/deep-array-equal.js.map +0 -1
  392. package/dist/es5/context/state-tracker/track-context-state.js +0 -211
  393. package/dist/es5/context/state-tracker/track-context-state.js.map +0 -1
  394. package/dist/es5/context/state-tracker/with-parameters.js +0 -44
  395. package/dist/es5/context/state-tracker/with-parameters.js.map +0 -1
  396. package/dist/es5/index.js +0 -276
  397. package/dist/es5/index.js.map +0 -1
  398. package/dist/es5/init.js +0 -10
  399. package/dist/es5/init.js.map +0 -1
  400. package/dist/es5/types/webgl.js +0 -6
  401. package/dist/es5/types/webgl.js.map +0 -1
  402. package/dist/es5/types.js +0 -2
  403. package/dist/es5/types.js.map +0 -1
  404. package/dist/esm/adapter/converters/device-parameters.js +0 -155
  405. package/dist/esm/adapter/converters/device-parameters.js.map +0 -1
  406. package/dist/esm/adapter/converters/renderbuffer-formats.js +0 -185
  407. package/dist/esm/adapter/converters/renderbuffer-formats.js.map +0 -1
  408. package/dist/esm/adapter/converters/sampler-parameters.js +0 -208
  409. package/dist/esm/adapter/converters/sampler-parameters.js.map +0 -1
  410. package/dist/esm/adapter/converters/texture-formats.js +0 -954
  411. package/dist/esm/adapter/converters/texture-formats.js.map +0 -1
  412. package/dist/esm/adapter/converters/vertex-formats.js +0 -35
  413. package/dist/esm/adapter/converters/vertex-formats.js.map +0 -1
  414. package/dist/esm/adapter/device-helpers/device-features.js +0 -102
  415. package/dist/esm/adapter/device-helpers/device-features.js.map +0 -1
  416. package/dist/esm/adapter/device-helpers/device-limits.js +0 -91
  417. package/dist/esm/adapter/device-helpers/device-limits.js.map +0 -1
  418. package/dist/esm/adapter/device-helpers/get-device-info.js +0 -44
  419. package/dist/esm/adapter/device-helpers/get-device-info.js.map +0 -1
  420. package/dist/esm/adapter/device-helpers/is-old-ie.js +0 -8
  421. package/dist/esm/adapter/device-helpers/is-old-ie.js.map +0 -1
  422. package/dist/esm/adapter/helpers/attribute-utils.js +0 -81
  423. package/dist/esm/adapter/helpers/attribute-utils.js.map +0 -1
  424. package/dist/esm/adapter/helpers/get-shader-layout.js +0 -306
  425. package/dist/esm/adapter/helpers/get-shader-layout.js.map +0 -1
  426. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js +0 -37
  427. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  428. package/dist/esm/adapter/helpers/set-uniform.js +0 -115
  429. package/dist/esm/adapter/helpers/set-uniform.js.map +0 -1
  430. package/dist/esm/adapter/helpers/uniforms.js +0 -99
  431. package/dist/esm/adapter/helpers/uniforms.js.map +0 -1
  432. package/dist/esm/adapter/objects/constants-to-keys.js +0 -42
  433. package/dist/esm/adapter/objects/constants-to-keys.js.map +0 -1
  434. package/dist/esm/adapter/objects/webgl-renderbuffer.js +0 -94
  435. package/dist/esm/adapter/objects/webgl-renderbuffer.js.map +0 -1
  436. package/dist/esm/adapter/objects/webgl-resource.js +0 -216
  437. package/dist/esm/adapter/objects/webgl-resource.js.map +0 -1
  438. package/dist/esm/adapter/objects/webgl-vertex-array-object.js +0 -84
  439. package/dist/esm/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  440. package/dist/esm/adapter/resources/webgl-buffer.js +0 -164
  441. package/dist/esm/adapter/resources/webgl-buffer.js.map +0 -1
  442. package/dist/esm/adapter/resources/webgl-command-buffer.js +0 -65
  443. package/dist/esm/adapter/resources/webgl-command-buffer.js.map +0 -1
  444. package/dist/esm/adapter/resources/webgl-command-encoder.js +0 -53
  445. package/dist/esm/adapter/resources/webgl-command-encoder.js.map +0 -1
  446. package/dist/esm/adapter/resources/webgl-external-texture.js +0 -2
  447. package/dist/esm/adapter/resources/webgl-external-texture.js.map +0 -1
  448. package/dist/esm/adapter/resources/webgl-framebuffer.js +0 -265
  449. package/dist/esm/adapter/resources/webgl-framebuffer.js.map +0 -1
  450. package/dist/esm/adapter/resources/webgl-render-pass.js +0 -19
  451. package/dist/esm/adapter/resources/webgl-render-pass.js.map +0 -1
  452. package/dist/esm/adapter/resources/webgl-render-pipeline.js +0 -400
  453. package/dist/esm/adapter/resources/webgl-render-pipeline.js.map +0 -1
  454. package/dist/esm/adapter/resources/webgl-sampler.js +0 -50
  455. package/dist/esm/adapter/resources/webgl-sampler.js.map +0 -1
  456. package/dist/esm/adapter/resources/webgl-shader.js +0 -75
  457. package/dist/esm/adapter/resources/webgl-shader.js.map +0 -1
  458. package/dist/esm/adapter/resources/webgl-texture.js +0 -831
  459. package/dist/esm/adapter/resources/webgl-texture.js.map +0 -1
  460. package/dist/esm/adapter/webgl-canvas-context.js +0 -54
  461. package/dist/esm/adapter/webgl-canvas-context.js.map +0 -1
  462. package/dist/esm/adapter/webgl-device.js +0 -280
  463. package/dist/esm/adapter/webgl-device.js.map +0 -1
  464. package/dist/esm/bundle.js +0 -5
  465. package/dist/esm/bundle.js.map +0 -1
  466. package/dist/esm/classic/accessor.js +0 -144
  467. package/dist/esm/classic/accessor.js.map +0 -1
  468. package/dist/esm/classic/buffer.js +0 -384
  469. package/dist/esm/classic/buffer.js.map +0 -1
  470. package/dist/esm/classic/typed-array-utils.js +0 -112
  471. package/dist/esm/classic/typed-array-utils.js.map +0 -1
  472. package/dist/esm/context/context/context-state.js +0 -26
  473. package/dist/esm/context/context/context-state.js.map +0 -1
  474. package/dist/esm/context/context/create-context.js +0 -49
  475. package/dist/esm/context/context/create-context.js.map +0 -1
  476. package/dist/esm/context/context/device-pixels.js +0 -98
  477. package/dist/esm/context/context/device-pixels.js.map +0 -1
  478. package/dist/esm/context/context/webgl-checks.js +0 -34
  479. package/dist/esm/context/context/webgl-checks.js.map +0 -1
  480. package/dist/esm/context/debug/spector.js +0 -76
  481. package/dist/esm/context/debug/spector.js.map +0 -1
  482. package/dist/esm/context/debug/webgl-developer-tools.js +0 -121
  483. package/dist/esm/context/debug/webgl-developer-tools.js.map +0 -1
  484. package/dist/esm/context/parameters/unified-parameter-api.js +0 -65
  485. package/dist/esm/context/parameters/unified-parameter-api.js.map +0 -1
  486. package/dist/esm/context/parameters/webgl-parameter-tables.js +0 -445
  487. package/dist/esm/context/parameters/webgl-parameter-tables.js.map +0 -1
  488. package/dist/esm/context/polyfill/get-parameter-polyfill.js +0 -91
  489. package/dist/esm/context/polyfill/get-parameter-polyfill.js.map +0 -1
  490. package/dist/esm/context/polyfill/polyfill-context.js +0 -92
  491. package/dist/esm/context/polyfill/polyfill-context.js.map +0 -1
  492. package/dist/esm/context/polyfill/polyfill-table.js +0 -160
  493. package/dist/esm/context/polyfill/polyfill-table.js.map +0 -1
  494. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js +0 -335
  495. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  496. package/dist/esm/context/state-tracker/deep-array-equal.js +0 -21
  497. package/dist/esm/context/state-tracker/deep-array-equal.js.map +0 -1
  498. package/dist/esm/context/state-tracker/track-context-state.js +0 -183
  499. package/dist/esm/context/state-tracker/track-context-state.js.map +0 -1
  500. package/dist/esm/context/state-tracker/with-parameters.js +0 -36
  501. package/dist/esm/context/state-tracker/with-parameters.js.map +0 -1
  502. package/dist/esm/index.js +0 -27
  503. package/dist/esm/index.js.map +0 -1
  504. package/dist/esm/init.js +0 -4
  505. package/dist/esm/init.js.map +0 -1
  506. package/dist/esm/types/webgl.js +0 -2
  507. package/dist/esm/types/webgl.js.map +0 -1
  508. package/dist/esm/types.js +0 -2
  509. package/dist/esm/types.js.map +0 -1
  510. package/dist/init.d.ts +0 -2
  511. package/dist/init.d.ts.map +0 -1
  512. package/dist/init.js +0 -4
  513. package/dist/init.js.map +0 -1
  514. package/dist/types/webgl.d.ts +0 -144
  515. package/dist/types/webgl.d.ts.map +0 -1
  516. package/dist/types/webgl.js +0 -2
  517. package/dist/types/webgl.js.map +0 -1
  518. package/src/adapter/converters/renderbuffer-formats.ts +0 -92
  519. package/src/adapter/objects/webgl-vertex-array-object.ts +0 -111
  520. package/src/bundle.ts +0 -4
  521. package/src/context/context/context-state.ts +0 -41
  522. package/src/context/context/create-context.ts +0 -110
  523. package/src/context/context/device-pixels.ts +0 -152
  524. package/src/init.ts +0 -4
  525. package/src/types/webgl.ts +0 -283
@@ -1,56 +1,59 @@
1
- import type {
2
- RenderPipelineProps,
3
- RenderPipelineParameters,
4
- RenderPass,
5
- Buffer,
6
- Binding,
7
- ShaderLayout,
8
- PrimitiveTopology,
9
- BindingLayout,
10
- AttributeLayout
11
- } from '@luma.gl/api';
12
- import {RenderPipeline, cast, log, decodeVertexFormat} from '@luma.gl/api';
13
- import GL from '@luma.gl/constants';
14
- import {getWebGLDataType} from '../converters/texture-formats';
1
+ // luma.gl, MIT license
2
+ // Copyright (c) vis.gl contributors
3
+
4
+ import type {UniformValue, RenderPipelineProps, Binding} from '@luma.gl/core';
5
+ import type {ShaderLayout, PrimitiveTopology} from '@luma.gl/core';
6
+ import type {RenderPass, VertexArray} from '@luma.gl/core';
7
+ import {RenderPipeline, cast, log} from '@luma.gl/core';
8
+ import {mergeShaderLayout} from '@luma.gl/core';
9
+ // import {mergeShaderLayout, getAttributeInfosFromLayouts} from '@luma.gl/core';
10
+ import {GL} from '@luma.gl/constants';
11
+
15
12
  import {getShaderLayout} from '../helpers/get-shader-layout';
16
- import {withDeviceParameters} from '../converters/device-parameters';
13
+ import {withDeviceAndGLParameters} from '../converters/device-parameters';
17
14
  import {setUniform} from '../helpers/set-uniform';
18
15
  // import {copyUniform, checkUniformValues} from '../../classes/uniforms';
19
16
 
20
- import WebGLDevice from '../webgl-device';
21
- import WEBGLBuffer from './webgl-buffer';
22
- import WEBGLShader from './webgl-shader';
23
- import WEBGLTexture from './webgl-texture';
24
- import WEBGLVertexArrayObject from '../objects/webgl-vertex-array-object';
17
+ import {WebGLDevice} from '../webgl-device';
18
+ import {WEBGLBuffer} from './webgl-buffer';
19
+ import {WEBGLShader} from './webgl-shader';
20
+ import {WEBGLFramebuffer} from './webgl-framebuffer';
21
+ import {WEBGLTexture} from './webgl-texture';
22
+ // import {WEBGLVertexArray} from './webgl-vertex-array';
23
+ import {WEBGLRenderPass} from './webgl-render-pass';
25
24
 
26
25
  const LOG_PROGRAM_PERF_PRIORITY = 4;
27
26
 
28
27
  /** Creates a new render pipeline */
29
- export default class WEBGLRenderPipeline extends RenderPipeline {
28
+ export class WEBGLRenderPipeline extends RenderPipeline {
29
+ /** The WebGL device that created this render pipeline */
30
30
  device: WebGLDevice;
31
+ /** Handle to underlying WebGL program */
31
32
  handle: WebGLProgram;
33
+ /** vertex shader */
32
34
  vs: WEBGLShader;
35
+ /** fragment shader */
33
36
  fs: WEBGLShader;
34
- layout: ShaderLayout;
35
-
36
- // configuration: ProgramConfiguration;
37
- // Experimental flag to avoid deleting Program object while it is cached
38
- varyings: string[];
39
- vertexArrayObject: WEBGLVertexArrayObject;
40
- _indexBuffer?: Buffer;
41
- uniforms: Record<string, any> = {};
42
- bindings: Record<string, any> = {};
37
+ /** The layout extracted from shader by WebGL introspection APIs */
38
+ introspectedLayout: ShaderLayout;
39
+
40
+ /** Uniforms set on this model */
41
+ uniforms: Record<string, UniformValue> = {};
42
+ /** Bindings set on this model */
43
+ bindings: Record<string, Binding> = {};
44
+ /** WebGL varyings */
45
+ varyings: string[] | null = null;
46
+
43
47
  _textureUniforms: Record<string, any> = {};
44
48
  _textureIndexCounter: number = 0;
45
49
  _uniformCount: number = 0;
46
- _uniformSetters: Record<string, Function>;
50
+ _uniformSetters: Record<string, Function> = {}; // TODO are these used?
47
51
 
48
52
  constructor(device: WebGLDevice, props: RenderPipelineProps) {
49
53
  super(device, props);
50
54
  this.device = device;
51
55
  this.handle = this.props.handle || this.device.gl.createProgram();
52
- // @ts-expect-error
53
- this.handle.__SPECTOR_Metadata = {id: this.props.id};
56
+ this.device.setSpectorMetadata(this.handle, {id: this.props.id});
54
57
 
55
58
  // Create shaders if needed
56
59
  this.vs = cast<WEBGLShader>(props.vs);
@@ -64,66 +67,82 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
64
67
  if (varyings && varyings.length > 0) {
65
68
  this.device.assertWebGL2();
66
69
  this.varyings = varyings;
67
- this.device.gl2.transformFeedbackVaryings(this.handle, varyings, bufferMode);
70
+ this.device.gl2?.transformFeedbackVaryings(this.handle, varyings, bufferMode);
68
71
  }
69
72
 
70
73
  this._compileAndLink();
71
74
 
72
- this.layout = props.layout || getShaderLayout(this.device.gl, this.handle);
73
- this.vertexArrayObject = new WEBGLVertexArrayObject(this.device);
75
+ this.introspectedLayout = getShaderLayout(this.device.gl, this.handle);
76
+ // Merge provided layout with introspected layout
77
+ this.shaderLayout = mergeShaderLayout(this.introspectedLayout, props.shaderLayout);
78
+ // Merge layout with any buffer map overrides
79
+ // this.bufferLayout = props.bufferLayout || [];
80
+ // this.shaderLayout = mergeBufferMap(this.shaderLayout, this.bufferLayout);
74
81
  }
75
82
 
76
- destroy(): void {
83
+ override destroy(): void {
77
84
  if (this.handle) {
78
85
  this.device.gl.deleteProgram(this.handle);
79
- this.handle = null;
86
+ // this.handle = null;
87
+ this.destroyed = true;
80
88
  }
81
89
  }
82
90
 
83
- setIndexBuffer(indexBuffer: Buffer): void {
84
- const webglBuffer = cast<WEBGLBuffer>(indexBuffer);
85
- this.vertexArrayObject.setElementBuffer(webglBuffer);
86
- this._indexBuffer = indexBuffer;
87
- }
91
+ // setIndexBuffer(indexBuffer: Buffer): void {
92
+ // const webglBuffer = cast<WEBGLBuffer>(indexBuffer);
93
+ // this.vertexArrayObject.setElementBuffer(webglBuffer);
94
+ // this._indexBuffer = indexBuffer;
95
+ // }
96
+
97
+ // /** @todo needed for portable model */
98
+ // setAttributes(attributes: Record<string, Buffer>): void {
99
+ // for (const [name, buffer] of Object.entries(attributes)) {
100
+ // const webglBuffer = cast<WEBGLBuffer>(buffer);
101
+ // const attribute = getAttributeLayout(this.layout, name);
102
+ // if (!attribute) {
103
+ // log.warn(
104
+ // `Ignoring buffer supplied for unknown attribute "${name}" in pipeline "${this.id}" (buffer "${buffer.id}")`
105
+ // )();
106
+ // continue;
107
+ // }
108
+ // const decoded = decodeVertexFormat(attribute.format);
109
+ // const {type: typeString, components: size, byteLength: stride, normalized, integer} = decoded;
110
+ // const divisor = attribute.stepMode === 'instance' ? 1 : 0;
111
+ // const type = getWebGLDataType(typeString);
112
+ // this.vertexArrayObject.setBuffer(attribute.location, webglBuffer, {
113
+ // size,
114
+ // type,
115
+ // stride,
116
+ // offset: 0,
117
+ // normalized,
118
+ // integer,
119
+ // divisor
120
+ // });
121
+ // }
122
+ // }
88
123
 
89
- /** @todo needed for portable model */
90
- setAttributes(attributes: Record<string, Buffer>): void {
91
- for (const [name, buffer] of Object.entries(attributes)) {
92
- const webglBuffer = cast<WEBGLBuffer>(buffer);
93
- const attribute = getAttributeLayout(this.layout, name);
94
- if (!attribute) {
95
- log.warn(`Ignoring buffer supplied for unknown attribute "${name}" in pipeline "${this.id}" (buffer "${buffer.id}")`)();
96
- continue;
97
- }
98
- const decoded = decodeVertexFormat(attribute.format);
99
- const {type: typeString, components: size, byteLength: stride, normalized, integer} = decoded;
100
- const divisor = attribute.stepMode === 'instance' ? 1 : 0;
101
- const type = getWebGLDataType(typeString);
102
- this.vertexArrayObject.setBuffer(attribute.location, webglBuffer, {
103
- size,
104
- type,
105
- stride,
106
- offset: 0,
107
- normalized,
108
- integer,
109
- divisor: attribute.stepMode === 'instance' ? 1 : 0
110
- });
111
- }
112
- }
113
-
114
- /** @todo needed for portable model */
124
+ /**
125
+ * Bindings include: textures, samplers and uniform buffers
126
+ * @todo needed for portable model
127
+ */
115
128
  setBindings(bindings: Record<string, Binding>): void {
116
129
  // if (log.priority >= 2) {
117
130
  // checkUniformValues(uniforms, this.id, this._uniformSetters);
118
131
  // }
119
132
 
120
133
  for (const [name, value] of Object.entries(bindings)) {
121
- const binding = this.layout.bindings.find((binding) => binding.name === name);
134
+ const binding = this.shaderLayout.bindings.find(binding => binding.name === name);
122
135
  if (!binding) {
123
- log.warn(`Unknown binding ${name} in render pipeline ${this.id}`)();
136
+ const validBindings = this.shaderLayout.bindings
137
+ .map(binding => `"${binding.name}"`)
138
+ .join(', ');
139
+ log.warn(
140
+ `Unknown binding "${name}" in render pipeline "${this.id}", expected one of ${validBindings}`
141
+ )();
142
+ continue; // eslint-disable-line no-continue
124
143
  }
125
144
  if (!value) {
126
- log.warn(`Unsetting binding ${name} in render pipeline ${this.id}`)();
145
+ log.warn(`Unsetting binding "${name}" in render pipeline "${this.id}"`)();
127
146
  }
128
147
  switch (binding.type) {
129
148
  case 'uniform':
@@ -133,7 +152,7 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
133
152
  }
134
153
  break;
135
154
  case 'texture':
136
- if (!(value instanceof WEBGLTexture)) {
155
+ if (!(value instanceof WEBGLTexture || value instanceof WEBGLFramebuffer)) {
137
156
  throw new Error('texture value');
138
157
  }
139
158
  break;
@@ -148,7 +167,7 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
148
167
  }
149
168
  }
150
169
 
151
- setUniforms(uniforms: Record<string, any>) {
170
+ setUniforms(uniforms: Record<string, UniformValue>) {
152
171
  // TODO - check against layout
153
172
  Object.assign(this.uniforms, uniforms);
154
173
  }
@@ -158,7 +177,9 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
158
177
  * This function unifies those ways into a single call using common parameters with sane defaults
159
178
  */
160
179
  draw(options: {
161
- renderPass?: RenderPass;
180
+ renderPass: RenderPass;
181
+ /** vertex attributes */
182
+ vertexArray: VertexArray;
162
183
  vertexCount?: number;
163
184
  indexCount?: number;
164
185
  instanceCount?: number;
@@ -168,72 +189,109 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
168
189
  baseVertex?: number;
169
190
  }): boolean {
170
191
  const {
171
- renderPass = this.device.getDefaultRenderPass(),
192
+ renderPass,
193
+ vertexArray,
172
194
  vertexCount,
173
- indexCount,
195
+ // indexCount,
174
196
  instanceCount,
175
- firstVertex = 0,
176
- firstIndex,
177
- firstInstance,
178
- baseVertex
197
+ firstVertex = 0
198
+ // firstIndex,
199
+ // firstInstance,
200
+ // baseVertex
179
201
  } = options;
180
202
 
181
- const drawMode = getDrawMode(this.props.topology);
182
- const isIndexed: boolean = Boolean(this._indexBuffer);
183
- const indexType = this._indexBuffer?.props.indexType === 'uint16' ? GL.UNSIGNED_SHORT : GL.UNSIGNED_INT;
184
- const isInstanced: boolean = options.instanceCount > 0;
203
+ const glDrawMode = getGLDrawMode(this.props.topology);
204
+ const isIndexed: boolean = Boolean(vertexArray.indexBuffer);
205
+ const glIndexType = (vertexArray.indexBuffer as WEBGLBuffer)?.glIndexType;
206
+ const isInstanced: boolean = Number(instanceCount) > 0;
185
207
 
186
208
  // Avoid WebGL draw call when not rendering any data or values are incomplete
187
209
  // Note: async textures set as uniforms might still be loading.
188
210
  // Now that all uniforms have been updated, check if any texture
189
211
  // in the uniforms is not yet initialized, then we don't draw
190
- if (!this._areTexturesRenderable() || options.vertexCount === 0) {
212
+ if (!this._areTexturesRenderable() || vertexCount === 0) {
191
213
  // (isInstanced && instanceCount === 0)
192
214
  return false;
193
215
  }
194
216
 
195
217
  this.device.gl.useProgram(this.handle);
196
218
 
197
- this.vertexArrayObject.bind(() => {
198
- const parameters = {...this.props.parameters, framebuffer: renderPass.props.framebuffer};
199
-
200
- const primitiveMode = getGLPrimitive(this.props.topology);
201
- const transformFeedback: any = null;
202
- if (transformFeedback) {
203
- transformFeedback.begin(primitiveMode);
204
- }
219
+ // Note: Rebinds constant attributes before each draw call
220
+ vertexArray.bindBeforeRender(renderPass);
205
221
 
206
- // We have to apply bindings before every draw call since other draw calls will overwrite
207
- this._applyBindings();
208
- this._applyUniforms();
222
+ const primitiveMode = getGLPrimitive(this.props.topology);
223
+ const transformFeedback: any = null;
224
+ if (transformFeedback) {
225
+ transformFeedback.begin(primitiveMode);
226
+ }
209
227
 
210
- // TODO - double context push/pop
211
- withDeviceParameters(this.device, parameters, () => {
212
- // TODO - Use polyfilled WebGL2RenderingContext instead of ANGLE extension
228
+ // We have to apply bindings before every draw call since other draw calls will overwrite
229
+ this._applyBindings();
230
+ this._applyUniforms();
231
+
232
+ const webglRenderPass = renderPass as WEBGLRenderPass;
233
+ // // TODO - Use polyfilled WebGL2RenderingContext instead of ANGLE extension
234
+ // if (isIndexed && isInstanced) {
235
+ // // ANGLE_instanced_arrays extension
236
+ // this.device.gl2?.drawElementsInstanced(
237
+ // drawMode,
238
+ // vertexCount || 0, // indexCount?
239
+ // indexType,
240
+ // firstVertex,
241
+ // instanceCount || 0
242
+ // );
243
+ // // } else if (isIndexed && this.device.isWebGL2 && !isNaN(start) && !isNaN(end)) {
244
+ // // this.device.gl2.drawRangeElements(drawMode, start, end, vertexCount, indexType, offset);
245
+ // } else if (isIndexed) {
246
+ // this.device.gl.drawElements(drawMode, vertexCount || 0, indexType, firstVertex); // indexCount?
247
+ // } else if (isInstanced) {
248
+ // this.device.gl2?.drawArraysInstanced(
249
+ // drawMode,
250
+ // firstVertex,
251
+ // vertexCount || 0,
252
+ // instanceCount || 0
253
+ // );
254
+ // } else {
255
+ // this.device.gl.drawArrays(drawMode, firstVertex, vertexCount || 0);
256
+ // }
257
+ // });
258
+
259
+ withDeviceAndGLParameters(
260
+ this.device,
261
+ this.props.parameters,
262
+ webglRenderPass.glParameters,
263
+ () => {
213
264
  if (isIndexed && isInstanced) {
214
265
  // ANGLE_instanced_arrays extension
215
- this.device.gl2.drawElementsInstanced(
216
- drawMode,
217
- vertexCount,
218
- indexType,
266
+ this.device.gl2?.drawElementsInstanced(
267
+ glDrawMode,
268
+ vertexCount || 0, // indexCount?
269
+ glIndexType,
219
270
  firstVertex,
220
- instanceCount
271
+ instanceCount || 0
221
272
  );
222
273
  // } else if (isIndexed && this.device.isWebGL2 && !isNaN(start) && !isNaN(end)) {
223
- // this.device.gl2.drawRangeElements(drawMode, start, end, vertexCount, indexType, offset);
274
+ // this.device.gl2.drawRangeElements(glDrawMode, start, end, vertexCount, glIndexType, offset);
224
275
  } else if (isIndexed) {
225
- this.device.gl.drawElements(drawMode, vertexCount, indexType, firstVertex);
276
+ this.device.gl.drawElements(glDrawMode, vertexCount || 0, glIndexType, firstVertex); // indexCount?
226
277
  } else if (isInstanced) {
227
- this.device.gl2.drawArraysInstanced(drawMode, firstVertex, vertexCount, instanceCount);
278
+ this.device.gl2?.drawArraysInstanced(
279
+ glDrawMode,
280
+ firstVertex,
281
+ vertexCount || 0,
282
+ instanceCount || 0
283
+ );
228
284
  } else {
229
- this.device.gl.drawArrays(drawMode, firstVertex, vertexCount);
285
+ this.device.gl.drawArrays(glDrawMode, firstVertex, vertexCount || 0);
230
286
  }
231
- });
232
287
 
233
- if (transformFeedback) {
234
- transformFeedback.end();
288
+ if (transformFeedback) {
289
+ transformFeedback.end();
290
+ }
235
291
  }
236
- });
292
+ );
293
+
294
+ vertexArray.unbindAfterRender(renderPass);
237
295
 
238
296
  return true;
239
297
  }
@@ -251,17 +309,19 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
251
309
 
252
310
  // Avoid checking program linking error in production
253
311
  // @ts-expect-error
254
- if (gl.debug || log.level > 0) {
255
- const linked = gl.getProgramParameter(this.handle, gl.LINK_STATUS);
256
- if (!linked) {
257
- throw new Error(`Error linking: ${gl.getProgramInfoLog(this.handle)}`);
258
- }
312
+ if (!gl.debug && log.level === 0) {
313
+ // return;
314
+ }
259
315
 
260
- gl.validateProgram(this.handle);
261
- const validated = gl.getProgramParameter(this.handle, gl.VALIDATE_STATUS);
262
- if (!validated) {
263
- throw new Error(`Error validating: ${gl.getProgramInfoLog(this.handle)}`);
264
- }
316
+ const linked = gl.getProgramParameter(this.handle, gl.LINK_STATUS);
317
+ if (!linked) {
318
+ throw new Error(`Error linking: ${gl.getProgramInfoLog(this.handle)}`);
319
+ }
320
+
321
+ gl.validateProgram(this.handle);
322
+ const validated = gl.getProgramParameter(this.handle, gl.VALIDATE_STATUS);
323
+ if (!validated) {
324
+ throw new Error(`Error validating: ${gl.getProgramInfoLog(this.handle)}`);
265
325
  }
266
326
  }
267
327
 
@@ -275,14 +335,16 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
275
335
  _areTexturesRenderable() {
276
336
  let texturesRenderable = true;
277
337
 
278
- for (const [name, texture] of Object.entries(this._textureUniforms)) {
338
+ for (const [, texture] of Object.entries(this._textureUniforms)) {
279
339
  texture.update();
280
340
  texturesRenderable = texturesRenderable && texture.loaded;
281
341
  }
282
342
 
283
- for (const [name, texture] of Object.entries(this.bindings)) {
343
+ for (const [, texture] of Object.entries(this.bindings)) {
284
344
  // texture.update();
345
+ // @ts-expect-error
285
346
  if (texture.loaded !== undefined) {
347
+ // @ts-expect-error
286
348
  texturesRenderable = texturesRenderable && texture.loaded;
287
349
  }
288
350
  }
@@ -290,15 +352,40 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
290
352
  return texturesRenderable;
291
353
  }
292
354
 
293
- /** Apply any bindings */
355
+ /**
356
+ * Constant attributes need to be reset before every draw call
357
+ * Any attribute that is disabled in the current vertex array object
358
+ * is read from the context's global constant value for that attribute location.
359
+ * @note Constant attributes are only supported in WebGL, not in WebGPU
360
+ *
361
+ _applyConstantAttributes(vertexArray: WEBGLVertexArray): void {
362
+ const attributeInfos = getAttributeInfosFromLayouts(this.shaderLayout, this.bufferLayout);
363
+ for (const [name, value] of Object.entries(this.)) {
364
+ const attributeInfo = attributeInfos[name];
365
+ if (!attributeInfo) {
366
+ log.warn(
367
+ `Ignoring constant value supplied for unknown attribute "${name}" in pipeline "${this.id}"`
368
+ )();
369
+ continue; // eslint-disable-line no-continue
370
+ }
371
+ vertexArray.setConstant(attributeInfo.location, value);
372
+ vertexArray.enable(attributeInfo.location, false);
373
+ }
374
+ }
375
+ */
376
+
377
+ /** Apply any bindings (before each draw call) */
294
378
  _applyBindings() {
295
379
  this.device.gl.useProgram(this.handle);
296
380
 
297
381
  const {gl2} = this.device;
382
+ if (!gl2) {
383
+ throw new Error('bindings');
384
+ }
298
385
 
299
386
  let textureUnit = 0;
300
387
  let uniformBufferIndex = 0;
301
- for (const binding of this.layout.bindings) {
388
+ for (const binding of this.shaderLayout.bindings) {
302
389
  const value = this.bindings[binding.name];
303
390
  if (!value) {
304
391
  throw new Error(`No value for binding ${binding.name} in ${this.id}`);
@@ -319,8 +406,11 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
319
406
  gl2.bindBufferRange(
320
407
  GL.UNIFORM_BUFFER,
321
408
  uniformBufferIndex,
409
+ // @ts-expect-error
322
410
  value.buffer.handle,
411
+ // @ts-expect-error
323
412
  value.offset || 0,
413
+ // @ts-expect-error
324
414
  value.size || value.buffer.byteLength - value.offset
325
415
  );
326
416
  }
@@ -328,10 +418,24 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
328
418
  break;
329
419
 
330
420
  case 'texture':
331
- if (!(value instanceof WEBGLTexture)) {
421
+ if (!(value instanceof WEBGLTexture || value instanceof WEBGLFramebuffer)) {
332
422
  throw new Error('texture');
333
423
  }
334
- const texture: WEBGLTexture = value;
424
+ let texture: WEBGLTexture;
425
+ if (value instanceof WEBGLTexture) {
426
+ texture = value;
427
+ } else if (
428
+ value instanceof WEBGLFramebuffer &&
429
+ value.colorAttachments[0] instanceof WEBGLTexture
430
+ ) {
431
+ log.warn(
432
+ 'Passing framebuffer in texture binding may be deprecated. Use fbo.colorAttachments[0] instead'
433
+ )();
434
+ texture = value.colorAttachments[0];
435
+ } else {
436
+ throw new Error('No texture');
437
+ }
438
+
335
439
  gl2.activeTexture(GL.TEXTURE0 + textureUnit);
336
440
  gl2.bindTexture(texture.target, texture.handle);
337
441
  // gl2.bindSampler(textureUnit, sampler.handle);
@@ -349,10 +453,14 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
349
453
  }
350
454
  }
351
455
 
456
+ /**
457
+ * Due to program sharing, uniforms need to be reset before every draw call
458
+ * (though caching will avoid redundant WebGL calls)
459
+ */
352
460
  _applyUniforms() {
353
- for (const uniformLayout of this.layout.uniforms || []) {
461
+ for (const uniformLayout of this.shaderLayout.uniforms || []) {
354
462
  const {name, location, type, textureUnit} = uniformLayout;
355
- const value = this.uniforms[name] || textureUnit;
463
+ const value = this.uniforms[name] ?? textureUnit;
356
464
  if (value !== undefined) {
357
465
  setUniform(this.device.gl, location, type, value);
358
466
  }
@@ -360,18 +468,27 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
360
468
  }
361
469
  }
362
470
 
363
- /** Get the primitive type for transform feedback */
364
- function getDrawMode(
471
+ /** Get the primitive type for draw */
472
+ function getGLDrawMode(
365
473
  topology: PrimitiveTopology
366
- ): GL.POINTS | GL.LINES | GL.LINE_STRIP | GL.TRIANGLES | GL.TRIANGLE_STRIP {
474
+ ):
475
+ | GL.POINTS
476
+ | GL.LINES
477
+ | GL.LINE_STRIP
478
+ | GL.LINE_LOOP
479
+ | GL.TRIANGLES
480
+ | GL.TRIANGLE_STRIP
481
+ | GL.TRIANGLE_FAN {
367
482
  // prettier-ignore
368
483
  switch (topology) {
369
- case 'point-list': return GL.POINTS;
370
- case 'line-list': return GL.LINES;
371
- case 'line-strip': return GL.LINE_STRIP;
372
- case 'triangle-list': return GL.TRIANGLES;
373
- case 'triangle-strip': return GL.TRIANGLE_STRIP;
374
- default: throw new Error(topology);
484
+ case 'point-list': return GL.POINTS;
485
+ case 'line-list': return GL.LINES;
486
+ case 'line-strip': return GL.LINE_STRIP;
487
+ case 'line-loop-webgl': return GL.LINE_LOOP;
488
+ case 'triangle-list': return GL.TRIANGLES;
489
+ case 'triangle-strip': return GL.TRIANGLE_STRIP;
490
+ case 'triangle-fan-webgl': return GL.TRIANGLE_FAN;
491
+ default: throw new Error(topology);
375
492
  }
376
493
  }
377
494
 
@@ -379,35 +496,13 @@ function getDrawMode(
379
496
  function getGLPrimitive(topology: PrimitiveTopology): GL.POINTS | GL.LINES | GL.TRIANGLES {
380
497
  // prettier-ignore
381
498
  switch (topology) {
382
- case 'point-list': return GL.POINTS;
383
- case 'line-list': return GL.LINES;
384
- case 'line-strip': return GL.LINES;
385
- case 'triangle-list': return GL.TRIANGLES;
386
- case 'triangle-strip': return GL.TRIANGLES;
387
- default: throw new Error(topology);
388
- }
389
- }
390
-
391
- function getAttributesByLocation(
392
- attributes: Record<string, Buffer>,
393
- layout: ShaderLayout
394
- ): Record<number, Buffer> {
395
- const byLocation: Record<number, Buffer> = {};
396
- for (const [name, buffer] of Object.entries(attributes)) {
397
- const attribute = getAttributeLayout(layout, name);
398
- byLocation[attribute.location] = buffer;
399
- }
400
- return byLocation;
401
- }
402
-
403
- function getAttributeLayout(layout: ShaderLayout, name: string): AttributeLayout | undefined {
404
- return layout.attributes.find((binding) => binding.name === name);
405
- }
406
-
407
- function getBindingLayout(layout: ShaderLayout, name: string): BindingLayout {
408
- const binding = layout.bindings.find((binding) => binding.name === name);
409
- if (!binding) {
410
- throw new Error(`Unknown binding ${name}`);
499
+ case 'point-list': return GL.POINTS;
500
+ case 'line-list': return GL.LINES;
501
+ case 'line-strip': return GL.LINES;
502
+ case 'line-loop-webgl': return GL.LINES;
503
+ case 'triangle-list': return GL.TRIANGLES;
504
+ case 'triangle-strip': return GL.TRIANGLES;
505
+ case 'triangle-fan-webgl': return GL.TRIANGLES;
506
+ default: throw new Error(topology);
411
507
  }
412
- return binding;
413
508
  }
@@ -1,8 +1,10 @@
1
- import {Sampler, SamplerProps} from '@luma.gl/api';
2
- import GL from '@luma.gl/constants';
3
- import type {WebGLSamplerParameters} from '../../types/webgl';
1
+ // luma.gl, MIT license
2
+ // Copyright (c) vis.gl contributors
3
+
4
+ import {Sampler, SamplerProps} from '@luma.gl/core';
5
+ import {GL, GLSamplerParameters} from '@luma.gl/constants';
4
6
  import {convertSamplerParametersToWebGL} from '../converters/sampler-parameters';
5
- import type WebGLDevice from '../webgl-device';
7
+ import type {WebGLDevice} from '../webgl-device';
6
8
 
7
9
  /**
8
10
  * Sampler object -
@@ -11,10 +13,10 @@ import type WebGLDevice from '../webgl-device';
11
13
  * so that they can be set directly on the texture
12
14
  * https://github.com/WebGLSamples/WebGL2Samples/blob/master/samples/sampler_object.html
13
15
  */
14
- export default class WEBGLSampler extends Sampler {
16
+ export class WEBGLSampler extends Sampler {
15
17
  readonly device: WebGLDevice;
16
18
  readonly handle: WebGLSampler;
17
- readonly parameters: WebGLSamplerParameters;
19
+ readonly parameters: GLSamplerParameters;
18
20
 
19
21
  constructor(device: WebGLDevice, props: SamplerProps) {
20
22
  super(device, props);
@@ -26,16 +28,20 @@ export default class WEBGLSampler extends Sampler {
26
28
  }
27
29
  }
28
30
 
29
- destroy(): void {
31
+ override destroy(): void {
30
32
  if (this.handle) {
31
33
  this.device.gl2.deleteSampler(this.handle);
32
- // @ts-expect-error
34
+ // @ts-expect-error read-only/undefined
33
35
  this.handle = undefined;
34
36
  }
35
37
  }
36
38
 
39
+ override toString(): string {
40
+ return `Sampler(${this.id},${JSON.stringify(this.props)})`;
41
+ }
42
+
37
43
  /** Set sampler parameters on the sampler */
38
- private _setSamplerParameters(parameters: WebGLSamplerParameters): void {
44
+ private _setSamplerParameters(parameters: GLSamplerParameters): void {
39
45
  for (const [pname, value] of Object.entries(parameters)) {
40
46
  // Apparently there are integer/float conversion issues requires two parameter setting functions in JavaScript.
41
47
  // For now, pick the float version for parameters specified as GLfloat.