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

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