@luma.gl/webgl 9.0.0-alpha.5 → 9.0.0-alpha.50

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