@luma.gl/webgl 9.0.0-alpha.3 → 9.0.0-alpha.31

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