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

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 +107 -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 +10390 -0
  202. package/dist/index.cjs +6615 -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 +254 -174
  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,63 +67,74 @@ 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
136
  log.warn(`Unknown binding ${name} in render pipeline ${this.id}`)();
137
+ continue; // eslint-disable-line no-continue
124
138
  }
125
139
  if (!value) {
126
140
  log.warn(`Unsetting binding ${name} in render pipeline ${this.id}`)();
@@ -133,7 +147,7 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
133
147
  }
134
148
  break;
135
149
  case 'texture':
136
- if (!(value instanceof WEBGLTexture)) {
150
+ if (!(value instanceof WEBGLTexture || value instanceof WEBGLFramebuffer)) {
137
151
  throw new Error('texture value');
138
152
  }
139
153
  break;
@@ -148,7 +162,7 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
148
162
  }
149
163
  }
150
164
 
151
- setUniforms(uniforms: Record<string, any>) {
165
+ setUniforms(uniforms: Record<string, UniformValue>) {
152
166
  // TODO - check against layout
153
167
  Object.assign(this.uniforms, uniforms);
154
168
  }
@@ -158,7 +172,9 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
158
172
  * This function unifies those ways into a single call using common parameters with sane defaults
159
173
  */
160
174
  draw(options: {
161
- renderPass?: RenderPass;
175
+ renderPass: RenderPass;
176
+ /** vertex attributes */
177
+ vertexArray: VertexArray;
162
178
  vertexCount?: number;
163
179
  indexCount?: number;
164
180
  instanceCount?: number;
@@ -168,73 +184,105 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
168
184
  baseVertex?: number;
169
185
  }): boolean {
170
186
  const {
171
- renderPass = this.device.getDefaultRenderPass(),
187
+ renderPass,
188
+ vertexArray,
172
189
  vertexCount,
173
- indexCount,
190
+ // indexCount,
174
191
  instanceCount,
175
- firstVertex = 0,
176
- firstIndex,
177
- firstInstance,
178
- baseVertex
192
+ firstVertex = 0
193
+ // firstIndex,
194
+ // firstInstance,
195
+ // baseVertex
179
196
  } = options;
180
197
 
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;
198
+ const glDrawMode = getGLDrawMode(this.props.topology);
199
+ const isIndexed: boolean = Boolean(vertexArray.indexBuffer);
200
+ const glIndexType = (vertexArray.indexBuffer as WEBGLBuffer)?.glIndexType;
201
+ const isInstanced: boolean = Number(instanceCount) > 0;
185
202
 
186
203
  // Avoid WebGL draw call when not rendering any data or values are incomplete
187
204
  // Note: async textures set as uniforms might still be loading.
188
205
  // Now that all uniforms have been updated, check if any texture
189
206
  // in the uniforms is not yet initialized, then we don't draw
190
- if (!this._areTexturesRenderable() || options.vertexCount === 0) {
207
+ if (!this._areTexturesRenderable() || vertexCount === 0) {
191
208
  // (isInstanced && instanceCount === 0)
192
209
  return false;
193
210
  }
194
211
 
195
212
  this.device.gl.useProgram(this.handle);
196
213
 
197
- this.vertexArrayObject.bind(() => {
198
- const parameters = {...this.props.parameters, framebuffer: renderPass.props.framebuffer};
214
+ // Note: Rebinds constant attributes before each draw call
215
+ vertexArray.bindBeforeRender(renderPass);
199
216
 
200
- const primitiveMode = getGLPrimitive(this.props.topology);
201
- const transformFeedback: any = null;
202
- if (transformFeedback) {
203
- transformFeedback.begin(primitiveMode);
204
- }
217
+ const primitiveMode = getGLPrimitive(this.props.topology);
218
+ const transformFeedback: any = null;
219
+ if (transformFeedback) {
220
+ transformFeedback.begin(primitiveMode);
221
+ }
205
222
 
206
- // We have to apply bindings before every draw call since other draw calls will overwrite
207
- this._applyBindings();
208
- this._applyUniforms();
209
-
210
- // TODO - double context push/pop
211
- withDeviceParameters(this.device, parameters, () => {
212
- // TODO - Use polyfilled WebGL2RenderingContext instead of ANGLE extension
213
- if (isIndexed && isInstanced) {
214
- // ANGLE_instanced_arrays extension
215
- this.device.gl2.drawElementsInstanced(
216
- drawMode,
217
- vertexCount,
218
- indexType,
219
- firstVertex,
220
- instanceCount
221
- );
222
- // } else if (isIndexed && this.device.isWebGL2 && !isNaN(start) && !isNaN(end)) {
223
- // this.device.gl2.drawRangeElements(drawMode, start, end, vertexCount, indexType, offset);
224
- } else if (isIndexed) {
225
- this.device.gl.drawElements(drawMode, vertexCount, indexType, firstVertex);
226
- } else if (isInstanced) {
227
- this.device.gl2.drawArraysInstanced(drawMode, firstVertex, vertexCount, instanceCount);
228
- } else {
229
- this.device.gl.drawArrays(drawMode, firstVertex, vertexCount);
230
- }
231
- });
223
+ // We have to apply bindings before every draw call since other draw calls will overwrite
224
+ this._applyBindings();
225
+ this._applyUniforms();
226
+
227
+ const webglRenderPass = renderPass as WEBGLRenderPass;
228
+ // // TODO - Use polyfilled WebGL2RenderingContext instead of ANGLE extension
229
+ // if (isIndexed && isInstanced) {
230
+ // // ANGLE_instanced_arrays extension
231
+ // this.device.gl2?.drawElementsInstanced(
232
+ // drawMode,
233
+ // vertexCount || 0, // indexCount?
234
+ // indexType,
235
+ // firstVertex,
236
+ // instanceCount || 0
237
+ // );
238
+ // // } else if (isIndexed && this.device.isWebGL2 && !isNaN(start) && !isNaN(end)) {
239
+ // // this.device.gl2.drawRangeElements(drawMode, start, end, vertexCount, indexType, offset);
240
+ // } else if (isIndexed) {
241
+ // this.device.gl.drawElements(drawMode, vertexCount || 0, indexType, firstVertex); // indexCount?
242
+ // } else if (isInstanced) {
243
+ // this.device.gl2?.drawArraysInstanced(
244
+ // drawMode,
245
+ // firstVertex,
246
+ // vertexCount || 0,
247
+ // instanceCount || 0
248
+ // );
249
+ // } else {
250
+ // this.device.gl.drawArrays(drawMode, firstVertex, vertexCount || 0);
251
+ // }
252
+ // });
253
+
254
+ withDeviceAndGLParameters(this.device, this.props.parameters, webglRenderPass.glParameters, () => {
255
+ if (isIndexed && isInstanced) {
256
+ // ANGLE_instanced_arrays extension
257
+ this.device.gl2?.drawElementsInstanced(
258
+ glDrawMode,
259
+ vertexCount || 0, // indexCount?
260
+ glIndexType,
261
+ firstVertex,
262
+ instanceCount || 0
263
+ );
264
+ // } else if (isIndexed && this.device.isWebGL2 && !isNaN(start) && !isNaN(end)) {
265
+ // this.device.gl2.drawRangeElements(glDrawMode, start, end, vertexCount, glIndexType, offset);
266
+ } else if (isIndexed) {
267
+ this.device.gl.drawElements(glDrawMode, vertexCount || 0, glIndexType, firstVertex); // indexCount?
268
+ } else if (isInstanced) {
269
+ this.device.gl2?.drawArraysInstanced(
270
+ glDrawMode,
271
+ firstVertex,
272
+ vertexCount || 0,
273
+ instanceCount || 0
274
+ );
275
+ } else {
276
+ this.device.gl.drawArrays(glDrawMode, firstVertex, vertexCount || 0);
277
+ }
232
278
 
233
279
  if (transformFeedback) {
234
280
  transformFeedback.end();
235
281
  }
236
282
  });
237
283
 
284
+ vertexArray.unbindAfterRender(renderPass);
285
+
238
286
  return true;
239
287
  }
240
288
 
@@ -251,17 +299,19 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
251
299
 
252
300
  // Avoid checking program linking error in production
253
301
  // @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
- }
302
+ if (!gl.debug && log.level === 0) {
303
+ // return;
304
+ }
259
305
 
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
- }
306
+ const linked = gl.getProgramParameter(this.handle, gl.LINK_STATUS);
307
+ if (!linked) {
308
+ throw new Error(`Error linking: ${gl.getProgramInfoLog(this.handle)}`);
309
+ }
310
+
311
+ gl.validateProgram(this.handle);
312
+ const validated = gl.getProgramParameter(this.handle, gl.VALIDATE_STATUS);
313
+ if (!validated) {
314
+ throw new Error(`Error validating: ${gl.getProgramInfoLog(this.handle)}`);
265
315
  }
266
316
  }
267
317
 
@@ -275,14 +325,16 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
275
325
  _areTexturesRenderable() {
276
326
  let texturesRenderable = true;
277
327
 
278
- for (const [name, texture] of Object.entries(this._textureUniforms)) {
328
+ for (const [, texture] of Object.entries(this._textureUniforms)) {
279
329
  texture.update();
280
330
  texturesRenderable = texturesRenderable && texture.loaded;
281
331
  }
282
332
 
283
- for (const [name, texture] of Object.entries(this.bindings)) {
333
+ for (const [, texture] of Object.entries(this.bindings)) {
284
334
  // texture.update();
335
+ // @ts-expect-error
285
336
  if (texture.loaded !== undefined) {
337
+ // @ts-expect-error
286
338
  texturesRenderable = texturesRenderable && texture.loaded;
287
339
  }
288
340
  }
@@ -290,15 +342,40 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
290
342
  return texturesRenderable;
291
343
  }
292
344
 
293
- /** Apply any bindings */
345
+ /**
346
+ * Constant attributes need to be reset before every draw call
347
+ * Any attribute that is disabled in the current vertex array object
348
+ * is read from the context's global constant value for that attribute location.
349
+ * @note Constant attributes are only supported in WebGL, not in WebGPU
350
+ *
351
+ _applyConstantAttributes(vertexArray: WEBGLVertexArray): void {
352
+ const attributeInfos = getAttributeInfosFromLayouts(this.shaderLayout, this.bufferLayout);
353
+ for (const [name, value] of Object.entries(this.)) {
354
+ const attributeInfo = attributeInfos[name];
355
+ if (!attributeInfo) {
356
+ log.warn(
357
+ `Ignoring constant value supplied for unknown attribute "${name}" in pipeline "${this.id}"`
358
+ )();
359
+ continue; // eslint-disable-line no-continue
360
+ }
361
+ vertexArray.setConstant(attributeInfo.location, value);
362
+ vertexArray.enable(attributeInfo.location, false);
363
+ }
364
+ }
365
+ */
366
+
367
+ /** Apply any bindings (before each draw call) */
294
368
  _applyBindings() {
295
369
  this.device.gl.useProgram(this.handle);
296
370
 
297
371
  const {gl2} = this.device;
372
+ if (!gl2) {
373
+ throw new Error('bindings');
374
+ }
298
375
 
299
376
  let textureUnit = 0;
300
377
  let uniformBufferIndex = 0;
301
- for (const binding of this.layout.bindings) {
378
+ for (const binding of this.shaderLayout.bindings) {
302
379
  const value = this.bindings[binding.name];
303
380
  if (!value) {
304
381
  throw new Error(`No value for binding ${binding.name} in ${this.id}`);
@@ -319,8 +396,11 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
319
396
  gl2.bindBufferRange(
320
397
  GL.UNIFORM_BUFFER,
321
398
  uniformBufferIndex,
399
+ // @ts-expect-error
322
400
  value.buffer.handle,
401
+ // @ts-expect-error
323
402
  value.offset || 0,
403
+ // @ts-expect-error
324
404
  value.size || value.buffer.byteLength - value.offset
325
405
  );
326
406
  }
@@ -328,10 +408,19 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
328
408
  break;
329
409
 
330
410
  case 'texture':
331
- if (!(value instanceof WEBGLTexture)) {
411
+ if (!(value instanceof WEBGLTexture || value instanceof WEBGLFramebuffer)) {
332
412
  throw new Error('texture');
333
413
  }
334
- const texture: WEBGLTexture = value;
414
+ let texture: WEBGLTexture;
415
+ if (value instanceof WEBGLTexture) {
416
+ texture = value;
417
+ } else if (value instanceof WEBGLFramebuffer && value.colorAttachments[0] instanceof WEBGLTexture) {
418
+ log.warn('Passing framebuffer in texture binding may be deprecated. Use fbo.colorAttachments[0] instead')();
419
+ texture = value.colorAttachments[0];
420
+ } else {
421
+ throw new Error('No texture');
422
+ }
423
+
335
424
  gl2.activeTexture(GL.TEXTURE0 + textureUnit);
336
425
  gl2.bindTexture(texture.target, texture.handle);
337
426
  // gl2.bindSampler(textureUnit, sampler.handle);
@@ -349,10 +438,14 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
349
438
  }
350
439
  }
351
440
 
441
+ /**
442
+ * Due to program sharing, uniforms need to be reset before every draw call
443
+ * (though caching will avoid redundant WebGL calls)
444
+ */
352
445
  _applyUniforms() {
353
- for (const uniformLayout of this.layout.uniforms || []) {
446
+ for (const uniformLayout of this.shaderLayout.uniforms || []) {
354
447
  const {name, location, type, textureUnit} = uniformLayout;
355
- const value = this.uniforms[name] || textureUnit;
448
+ const value = this.uniforms[name] ?? textureUnit;
356
449
  if (value !== undefined) {
357
450
  setUniform(this.device.gl, location, type, value);
358
451
  }
@@ -360,18 +453,27 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
360
453
  }
361
454
  }
362
455
 
363
- /** Get the primitive type for transform feedback */
364
- function getDrawMode(
456
+ /** Get the primitive type for draw */
457
+ function getGLDrawMode(
365
458
  topology: PrimitiveTopology
366
- ): GL.POINTS | GL.LINES | GL.LINE_STRIP | GL.TRIANGLES | GL.TRIANGLE_STRIP {
459
+ ):
460
+ | GL.POINTS
461
+ | GL.LINES
462
+ | GL.LINE_STRIP
463
+ | GL.LINE_LOOP
464
+ | GL.TRIANGLES
465
+ | GL.TRIANGLE_STRIP
466
+ | GL.TRIANGLE_FAN {
367
467
  // prettier-ignore
368
468
  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);
469
+ case 'point-list': return GL.POINTS;
470
+ case 'line-list': return GL.LINES;
471
+ case 'line-strip': return GL.LINE_STRIP;
472
+ case 'line-loop-webgl': return GL.LINE_LOOP;
473
+ case 'triangle-list': return GL.TRIANGLES;
474
+ case 'triangle-strip': return GL.TRIANGLE_STRIP;
475
+ case 'triangle-fan-webgl': return GL.TRIANGLE_FAN;
476
+ default: throw new Error(topology);
375
477
  }
376
478
  }
377
479
 
@@ -379,35 +481,13 @@ function getDrawMode(
379
481
  function getGLPrimitive(topology: PrimitiveTopology): GL.POINTS | GL.LINES | GL.TRIANGLES {
380
482
  // prettier-ignore
381
483
  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}`);
484
+ case 'point-list': return GL.POINTS;
485
+ case 'line-list': return GL.LINES;
486
+ case 'line-strip': return GL.LINES;
487
+ case 'line-loop-webgl': return GL.LINES;
488
+ case 'triangle-list': return GL.TRIANGLES;
489
+ case 'triangle-strip': return GL.TRIANGLES;
490
+ case 'triangle-fan-webgl': return GL.TRIANGLES;
491
+ default: throw new Error(topology);
411
492
  }
412
- return binding;
413
493
  }
@@ -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.