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

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 (553) 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 +300 -146
  5. package/dist/adapter/converters/sampler-parameters.d.ts +3 -13
  6. package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
  7. package/dist/adapter/converters/sampler-parameters.js +74 -219
  8. package/dist/adapter/converters/shader-formats.d.ts +9 -0
  9. package/dist/adapter/converters/shader-formats.d.ts.map +1 -0
  10. package/dist/adapter/converters/shader-formats.js +59 -0
  11. package/dist/adapter/converters/texture-formats.d.ts +41 -57
  12. package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
  13. package/dist/adapter/converters/texture-formats.js +490 -925
  14. package/dist/adapter/converters/vertex-formats.d.ts +9 -3
  15. package/dist/adapter/converters/vertex-formats.d.ts.map +1 -1
  16. package/dist/adapter/converters/vertex-formats.js +56 -33
  17. package/dist/adapter/device-helpers/webgl-device-features.d.ts +20 -0
  18. package/dist/adapter/device-helpers/webgl-device-features.d.ts.map +1 -0
  19. package/dist/adapter/device-helpers/webgl-device-features.js +98 -0
  20. package/dist/adapter/device-helpers/webgl-device-info.d.ts +5 -0
  21. package/dist/adapter/device-helpers/webgl-device-info.d.ts.map +1 -0
  22. package/dist/adapter/device-helpers/webgl-device-info.js +90 -0
  23. package/dist/adapter/device-helpers/webgl-device-limits.d.ts +35 -0
  24. package/dist/adapter/device-helpers/webgl-device-limits.d.ts.map +1 -0
  25. package/dist/adapter/device-helpers/webgl-device-limits.js +47 -0
  26. package/dist/adapter/helpers/decode-webgl-types.d.ts +26 -0
  27. package/dist/adapter/helpers/decode-webgl-types.d.ts.map +1 -0
  28. package/dist/adapter/helpers/decode-webgl-types.js +101 -0
  29. package/dist/adapter/helpers/get-shader-layout.d.ts +2 -49
  30. package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
  31. package/dist/adapter/helpers/get-shader-layout.js +263 -307
  32. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts +1 -1
  33. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts.map +1 -1
  34. package/dist/adapter/helpers/parse-shader-compiler-log.js +48 -33
  35. package/dist/adapter/helpers/set-uniform.d.ts +3 -2
  36. package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
  37. package/dist/adapter/helpers/set-uniform.js +66 -111
  38. package/dist/adapter/helpers/webgl-topology-utils.d.ts +16 -0
  39. package/dist/adapter/helpers/webgl-topology-utils.d.ts.map +1 -0
  40. package/dist/adapter/helpers/webgl-topology-utils.js +88 -0
  41. package/dist/adapter/objects/constants-to-keys.d.ts +2 -4
  42. package/dist/adapter/objects/constants-to-keys.d.ts.map +1 -1
  43. package/dist/adapter/objects/constants-to-keys.js +18 -38
  44. package/dist/adapter/objects/webgl-renderbuffer.d.ts +15 -12
  45. package/dist/adapter/objects/webgl-renderbuffer.d.ts.map +1 -1
  46. package/dist/adapter/objects/webgl-renderbuffer.js +92 -91
  47. package/dist/adapter/objects/webgl-resource.d.ts +6 -31
  48. package/dist/adapter/objects/webgl-resource.d.ts.map +1 -1
  49. package/dist/adapter/objects/webgl-resource.js +103 -205
  50. package/dist/adapter/resources/webgl-buffer.d.ts +20 -16
  51. package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
  52. package/dist/adapter/resources/webgl-buffer.js +163 -155
  53. package/dist/adapter/resources/webgl-command-buffer.d.ts +15 -9
  54. package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
  55. package/dist/adapter/resources/webgl-command-buffer.js +283 -58
  56. package/dist/adapter/resources/webgl-command-encoder.d.ts +12 -6
  57. package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -1
  58. package/dist/adapter/resources/webgl-command-encoder.js +36 -52
  59. package/dist/adapter/resources/webgl-external-texture.js +93 -1
  60. package/dist/adapter/resources/webgl-framebuffer.d.ts +21 -29
  61. package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
  62. package/dist/adapter/resources/webgl-framebuffer.js +184 -261
  63. package/dist/adapter/resources/webgl-query-set.d.ts +44 -0
  64. package/dist/adapter/resources/webgl-query-set.d.ts.map +1 -0
  65. package/dist/adapter/resources/webgl-query-set.js +136 -0
  66. package/dist/adapter/resources/webgl-render-pass.d.ts +21 -4
  67. package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
  68. package/dist/adapter/resources/webgl-render-pass.js +140 -20
  69. package/dist/adapter/resources/webgl-render-pipeline.d.ts +44 -21
  70. package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
  71. package/dist/adapter/resources/webgl-render-pipeline.js +371 -413
  72. package/dist/adapter/resources/webgl-sampler.d.ts +5 -6
  73. package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
  74. package/dist/adapter/resources/webgl-sampler.js +46 -46
  75. package/dist/adapter/resources/webgl-shader.d.ts +16 -6
  76. package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
  77. package/dist/adapter/resources/webgl-shader.js +113 -72
  78. package/dist/adapter/resources/webgl-texture-view.d.ts +14 -0
  79. package/dist/adapter/resources/webgl-texture-view.d.ts.map +1 -0
  80. package/dist/adapter/resources/webgl-texture-view.js +18 -0
  81. package/dist/adapter/resources/webgl-texture.d.ts +53 -35
  82. package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
  83. package/dist/adapter/resources/webgl-texture.js +623 -822
  84. package/dist/adapter/resources/webgl-transform-feedback.d.ts +47 -0
  85. package/dist/adapter/resources/webgl-transform-feedback.d.ts.map +1 -0
  86. package/dist/adapter/resources/webgl-transform-feedback.js +162 -0
  87. package/dist/adapter/resources/webgl-vertex-array.d.ts +67 -0
  88. package/dist/adapter/resources/webgl-vertex-array.d.ts.map +1 -0
  89. package/dist/adapter/resources/webgl-vertex-array.js +239 -0
  90. package/dist/adapter/webgl-canvas-context.d.ts +6 -7
  91. package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
  92. package/dist/adapter/webgl-canvas-context.js +61 -50
  93. package/dist/adapter/webgl-device.d.ts +112 -55
  94. package/dist/adapter/webgl-device.d.ts.map +1 -1
  95. package/dist/adapter/webgl-device.js +453 -331
  96. package/dist/classic/accessor.d.ts +3 -3
  97. package/dist/classic/accessor.d.ts.map +1 -1
  98. package/dist/classic/accessor.js +135 -130
  99. package/dist/classic/clear.d.ts +22 -0
  100. package/dist/classic/clear.d.ts.map +1 -0
  101. package/dist/classic/clear.js +89 -0
  102. package/dist/classic/copy-and-blit.d.ts +62 -0
  103. package/dist/classic/copy-and-blit.d.ts.map +1 -0
  104. package/dist/classic/copy-and-blit.js +191 -0
  105. package/dist/classic/format-utils.d.ts +3 -0
  106. package/dist/classic/format-utils.d.ts.map +1 -0
  107. package/dist/classic/format-utils.js +44 -0
  108. package/dist/classic/typed-array-utils.d.ts +17 -17
  109. package/dist/classic/typed-array-utils.d.ts.map +1 -1
  110. package/dist/classic/typed-array-utils.js +96 -102
  111. package/dist/context/debug/spector.d.ts +1 -2
  112. package/dist/context/debug/spector.d.ts.map +1 -1
  113. package/dist/context/debug/spector.js +56 -63
  114. package/dist/context/debug/webgl-developer-tools.d.ts +2 -3
  115. package/dist/context/debug/webgl-developer-tools.d.ts.map +1 -1
  116. package/dist/context/debug/webgl-developer-tools.js +106 -102
  117. package/dist/context/helpers/create-browser-context.d.ts +35 -0
  118. package/dist/context/helpers/create-browser-context.d.ts.map +1 -0
  119. package/dist/context/helpers/create-browser-context.js +67 -0
  120. package/dist/context/helpers/webgl-context-data.d.ts +13 -0
  121. package/dist/context/helpers/webgl-context-data.d.ts.map +1 -0
  122. package/dist/context/helpers/webgl-context-data.js +21 -0
  123. package/dist/context/helpers/webgl-extensions.d.ts +4 -0
  124. package/dist/context/helpers/webgl-extensions.d.ts.map +1 -0
  125. package/dist/context/helpers/webgl-extensions.js +10 -0
  126. package/dist/context/parameters/unified-parameter-api.d.ts +4 -5
  127. package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
  128. package/dist/context/parameters/unified-parameter-api.js +91 -54
  129. package/dist/context/parameters/webgl-parameter-tables.d.ts +115 -106
  130. package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
  131. package/dist/context/parameters/webgl-parameter-tables.js +463 -423
  132. package/dist/context/state-tracker/deep-array-equal.d.ts.map +1 -1
  133. package/dist/context/state-tracker/deep-array-equal.js +19 -18
  134. package/dist/context/state-tracker/track-context-state.d.ts +4 -4
  135. package/dist/context/state-tracker/track-context-state.d.ts.map +1 -1
  136. package/dist/context/state-tracker/track-context-state.js +192 -163
  137. package/dist/context/state-tracker/with-parameters.d.ts +2 -2
  138. package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
  139. package/dist/context/state-tracker/with-parameters.js +44 -32
  140. package/dist/dist.dev.js +6574 -0
  141. package/dist/dist.min.js +10 -0
  142. package/dist/index.cjs +5586 -0
  143. package/dist/index.cjs.map +7 -0
  144. package/dist/index.d.ts +25 -32
  145. package/dist/index.d.ts.map +1 -1
  146. package/dist/index.js +37 -28
  147. package/dist/types.d.ts +3 -1
  148. package/dist/types.d.ts.map +1 -1
  149. package/dist/types.js +3 -1
  150. package/dist.min.js +19 -0
  151. package/package.json +22 -15
  152. package/src/adapter/converters/device-parameters.ts +217 -54
  153. package/src/adapter/converters/sampler-parameters.ts +46 -126
  154. package/src/adapter/converters/shader-formats.ts +69 -0
  155. package/src/adapter/converters/texture-formats.ts +369 -340
  156. package/src/adapter/converters/vertex-formats.ts +71 -10
  157. package/src/adapter/device-helpers/webgl-device-features.ts +121 -0
  158. package/src/adapter/device-helpers/webgl-device-info.ts +111 -0
  159. package/src/adapter/device-helpers/webgl-device-limits.ts +53 -0
  160. package/src/adapter/helpers/{uniforms.ts → decode-webgl-types.ts} +38 -25
  161. package/src/adapter/helpers/get-shader-layout.ts +104 -158
  162. package/src/adapter/helpers/parse-shader-compiler-log.ts +31 -11
  163. package/src/adapter/helpers/set-uniform.ts +39 -36
  164. package/src/adapter/helpers/webgl-topology-utils.ts +110 -0
  165. package/src/adapter/objects/constants-to-keys.ts +8 -26
  166. package/src/adapter/objects/webgl-renderbuffer.ts +68 -40
  167. package/src/adapter/objects/webgl-resource.ts +16 -156
  168. package/src/adapter/resources/webgl-buffer.ts +103 -112
  169. package/src/adapter/resources/webgl-command-buffer.ts +333 -41
  170. package/src/adapter/resources/webgl-command-encoder.ts +33 -22
  171. package/src/adapter/resources/webgl-external-texture.ts +11 -8
  172. package/src/adapter/resources/webgl-framebuffer.ts +125 -165
  173. package/src/adapter/resources/webgl-query-set.ts +171 -0
  174. package/src/adapter/resources/webgl-render-pass.ts +176 -6
  175. package/src/adapter/resources/webgl-render-pipeline.ts +308 -229
  176. package/src/adapter/resources/webgl-sampler.ts +19 -18
  177. package/src/adapter/resources/webgl-shader.ts +91 -32
  178. package/src/adapter/resources/webgl-texture-view.ts +28 -0
  179. package/src/adapter/resources/webgl-texture.ts +147 -184
  180. package/src/adapter/resources/webgl-transform-feedback.ts +196 -0
  181. package/src/adapter/resources/webgl-vertex-array.ts +282 -0
  182. package/src/adapter/webgl-canvas-context.ts +23 -22
  183. package/src/adapter/webgl-device.ts +411 -196
  184. package/src/classic/accessor.ts +12 -8
  185. package/src/classic/clear.ts +118 -0
  186. package/src/classic/copy-and-blit.ts +318 -0
  187. package/src/classic/format-utils.ts +47 -0
  188. package/src/classic/typed-array-utils.ts +19 -31
  189. package/src/context/debug/spector.ts +16 -10
  190. package/src/context/debug/webgl-developer-tools.ts +52 -32
  191. package/src/context/helpers/create-browser-context.ts +116 -0
  192. package/src/context/helpers/webgl-context-data.ts +31 -0
  193. package/src/context/helpers/webgl-extensions.ts +17 -0
  194. package/src/context/parameters/unified-parameter-api.ts +11 -16
  195. package/src/context/parameters/webgl-parameter-tables.ts +171 -121
  196. package/src/context/state-tracker/deep-array-equal.ts +3 -0
  197. package/src/context/state-tracker/track-context-state.ts +35 -26
  198. package/src/context/state-tracker/with-parameters.ts +12 -3
  199. package/src/index.ts +41 -55
  200. package/src/types.ts +6 -0
  201. package/dist/adapter/converters/device-parameters.js.map +0 -1
  202. package/dist/adapter/converters/renderbuffer-formats.d.ts +0 -16
  203. package/dist/adapter/converters/renderbuffer-formats.d.ts.map +0 -1
  204. package/dist/adapter/converters/renderbuffer-formats.js +0 -185
  205. package/dist/adapter/converters/renderbuffer-formats.js.map +0 -1
  206. package/dist/adapter/converters/sampler-parameters.js.map +0 -1
  207. package/dist/adapter/converters/texture-formats.js.map +0 -1
  208. package/dist/adapter/converters/vertex-formats.js.map +0 -1
  209. package/dist/adapter/device-helpers/device-features.d.ts +0 -9
  210. package/dist/adapter/device-helpers/device-features.d.ts.map +0 -1
  211. package/dist/adapter/device-helpers/device-features.js +0 -112
  212. package/dist/adapter/device-helpers/device-features.js.map +0 -1
  213. package/dist/adapter/device-helpers/device-limits.d.ts +0 -52
  214. package/dist/adapter/device-helpers/device-limits.d.ts.map +0 -1
  215. package/dist/adapter/device-helpers/device-limits.js +0 -91
  216. package/dist/adapter/device-helpers/device-limits.js.map +0 -1
  217. package/dist/adapter/device-helpers/get-device-info.d.ts +0 -4
  218. package/dist/adapter/device-helpers/get-device-info.d.ts.map +0 -1
  219. package/dist/adapter/device-helpers/get-device-info.js +0 -44
  220. package/dist/adapter/device-helpers/get-device-info.js.map +0 -1
  221. package/dist/adapter/device-helpers/is-old-ie.d.ts +0 -2
  222. package/dist/adapter/device-helpers/is-old-ie.d.ts.map +0 -1
  223. package/dist/adapter/device-helpers/is-old-ie.js +0 -8
  224. package/dist/adapter/device-helpers/is-old-ie.js.map +0 -1
  225. package/dist/adapter/helpers/attribute-utils.d.ts +0 -11
  226. package/dist/adapter/helpers/attribute-utils.d.ts.map +0 -1
  227. package/dist/adapter/helpers/attribute-utils.js +0 -81
  228. package/dist/adapter/helpers/attribute-utils.js.map +0 -1
  229. package/dist/adapter/helpers/get-shader-layout.js.map +0 -1
  230. package/dist/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  231. package/dist/adapter/helpers/set-uniform.js.map +0 -1
  232. package/dist/adapter/helpers/uniforms.d.ts +0 -26
  233. package/dist/adapter/helpers/uniforms.d.ts.map +0 -1
  234. package/dist/adapter/helpers/uniforms.js +0 -99
  235. package/dist/adapter/helpers/uniforms.js.map +0 -1
  236. package/dist/adapter/objects/constants-to-keys.js.map +0 -1
  237. package/dist/adapter/objects/webgl-renderbuffer.js.map +0 -1
  238. package/dist/adapter/objects/webgl-resource.js.map +0 -1
  239. package/dist/adapter/objects/webgl-vertex-array-object.d.ts +0 -27
  240. package/dist/adapter/objects/webgl-vertex-array-object.d.ts.map +0 -1
  241. package/dist/adapter/objects/webgl-vertex-array-object.js +0 -84
  242. package/dist/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  243. package/dist/adapter/resources/webgl-buffer.js.map +0 -1
  244. package/dist/adapter/resources/webgl-command-buffer.js.map +0 -1
  245. package/dist/adapter/resources/webgl-command-encoder.js.map +0 -1
  246. package/dist/adapter/resources/webgl-external-texture.js.map +0 -1
  247. package/dist/adapter/resources/webgl-framebuffer.js.map +0 -1
  248. package/dist/adapter/resources/webgl-render-pass.js.map +0 -1
  249. package/dist/adapter/resources/webgl-render-pipeline.js.map +0 -1
  250. package/dist/adapter/resources/webgl-sampler.js.map +0 -1
  251. package/dist/adapter/resources/webgl-shader.js.map +0 -1
  252. package/dist/adapter/resources/webgl-texture.js.map +0 -1
  253. package/dist/adapter/webgl-canvas-context.js.map +0 -1
  254. package/dist/adapter/webgl-device.js.map +0 -1
  255. package/dist/bundle.d.ts +0 -2
  256. package/dist/bundle.d.ts.map +0 -1
  257. package/dist/bundle.js +0 -5
  258. package/dist/bundle.js.map +0 -1
  259. package/dist/classic/accessor.js.map +0 -1
  260. package/dist/classic/buffer.d.ts +0 -95
  261. package/dist/classic/buffer.d.ts.map +0 -1
  262. package/dist/classic/buffer.js +0 -392
  263. package/dist/classic/buffer.js.map +0 -1
  264. package/dist/classic/typed-array-utils.js.map +0 -1
  265. package/dist/context/context/context-state.d.ts +0 -18
  266. package/dist/context/context/context-state.d.ts.map +0 -1
  267. package/dist/context/context/context-state.js +0 -26
  268. package/dist/context/context/context-state.js.map +0 -1
  269. package/dist/context/context/create-browser-context.d.ts +0 -41
  270. package/dist/context/context/create-browser-context.d.ts.map +0 -1
  271. package/dist/context/context/create-browser-context.js +0 -61
  272. package/dist/context/context/create-browser-context.js.map +0 -1
  273. package/dist/context/context/create-headless-context.d.ts +0 -9
  274. package/dist/context/context/create-headless-context.d.ts.map +0 -1
  275. package/dist/context/context/create-headless-context.js +0 -43
  276. package/dist/context/context/create-headless-context.js.map +0 -1
  277. package/dist/context/context/device-pixels.d.ts +0 -25
  278. package/dist/context/context/device-pixels.d.ts.map +0 -1
  279. package/dist/context/context/device-pixels.js +0 -103
  280. package/dist/context/context/device-pixels.js.map +0 -1
  281. package/dist/context/context/webgl-checks.d.ts +0 -13
  282. package/dist/context/context/webgl-checks.d.ts.map +0 -1
  283. package/dist/context/context/webgl-checks.js +0 -34
  284. package/dist/context/context/webgl-checks.js.map +0 -1
  285. package/dist/context/debug/spector.js.map +0 -1
  286. package/dist/context/debug/webgl-developer-tools.js.map +0 -1
  287. package/dist/context/parameters/unified-parameter-api.js.map +0 -1
  288. package/dist/context/parameters/webgl-parameter-tables.js.map +0 -1
  289. package/dist/context/polyfill/get-parameter-polyfill.d.ts +0 -2
  290. package/dist/context/polyfill/get-parameter-polyfill.d.ts.map +0 -1
  291. package/dist/context/polyfill/get-parameter-polyfill.js +0 -91
  292. package/dist/context/polyfill/get-parameter-polyfill.js.map +0 -1
  293. package/dist/context/polyfill/polyfill-context.d.ts +0 -5
  294. package/dist/context/polyfill/polyfill-context.d.ts.map +0 -1
  295. package/dist/context/polyfill/polyfill-context.js +0 -91
  296. package/dist/context/polyfill/polyfill-context.js.map +0 -1
  297. package/dist/context/polyfill/polyfill-table.d.ts +0 -48
  298. package/dist/context/polyfill/polyfill-table.d.ts.map +0 -1
  299. package/dist/context/polyfill/polyfill-table.js +0 -160
  300. package/dist/context/polyfill/polyfill-table.js.map +0 -1
  301. package/dist/context/polyfill/polyfill-vertex-array-object.d.ts +0 -2
  302. package/dist/context/polyfill/polyfill-vertex-array-object.d.ts.map +0 -1
  303. package/dist/context/polyfill/polyfill-vertex-array-object.js +0 -335
  304. package/dist/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  305. package/dist/context/state-tracker/deep-array-equal.js.map +0 -1
  306. package/dist/context/state-tracker/track-context-state.js.map +0 -1
  307. package/dist/context/state-tracker/with-parameters.js.map +0 -1
  308. package/dist/es5/adapter/converters/device-parameters.js +0 -185
  309. package/dist/es5/adapter/converters/device-parameters.js.map +0 -1
  310. package/dist/es5/adapter/converters/renderbuffer-formats.js +0 -163
  311. package/dist/es5/adapter/converters/renderbuffer-formats.js.map +0 -1
  312. package/dist/es5/adapter/converters/sampler-parameters.js +0 -245
  313. package/dist/es5/adapter/converters/sampler-parameters.js.map +0 -1
  314. package/dist/es5/adapter/converters/texture-formats.js +0 -1031
  315. package/dist/es5/adapter/converters/texture-formats.js.map +0 -1
  316. package/dist/es5/adapter/converters/vertex-formats.js +0 -45
  317. package/dist/es5/adapter/converters/vertex-formats.js.map +0 -1
  318. package/dist/es5/adapter/device-helpers/device-features.js +0 -155
  319. package/dist/es5/adapter/device-helpers/device-features.js.map +0 -1
  320. package/dist/es5/adapter/device-helpers/device-limits.js +0 -64
  321. package/dist/es5/adapter/device-helpers/device-limits.js.map +0 -1
  322. package/dist/es5/adapter/device-helpers/get-device-info.js +0 -55
  323. package/dist/es5/adapter/device-helpers/get-device-info.js.map +0 -1
  324. package/dist/es5/adapter/device-helpers/is-old-ie.js +0 -16
  325. package/dist/es5/adapter/device-helpers/is-old-ie.js.map +0 -1
  326. package/dist/es5/adapter/helpers/attribute-utils.js +0 -91
  327. package/dist/es5/adapter/helpers/attribute-utils.js.map +0 -1
  328. package/dist/es5/adapter/helpers/get-shader-layout.js +0 -391
  329. package/dist/es5/adapter/helpers/get-shader-layout.js.map +0 -1
  330. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js +0 -72
  331. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  332. package/dist/es5/adapter/helpers/set-uniform.js +0 -125
  333. package/dist/es5/adapter/helpers/set-uniform.js.map +0 -1
  334. package/dist/es5/adapter/helpers/uniforms.js +0 -112
  335. package/dist/es5/adapter/helpers/uniforms.js.map +0 -1
  336. package/dist/es5/adapter/objects/constants-to-keys.js +0 -54
  337. package/dist/es5/adapter/objects/constants-to-keys.js.map +0 -1
  338. package/dist/es5/adapter/objects/webgl-renderbuffer.js +0 -150
  339. package/dist/es5/adapter/objects/webgl-renderbuffer.js.map +0 -1
  340. package/dist/es5/adapter/objects/webgl-resource.js +0 -292
  341. package/dist/es5/adapter/objects/webgl-resource.js.map +0 -1
  342. package/dist/es5/adapter/objects/webgl-vertex-array-object.js +0 -137
  343. package/dist/es5/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  344. package/dist/es5/adapter/resources/webgl-buffer.js +0 -243
  345. package/dist/es5/adapter/resources/webgl-buffer.js.map +0 -1
  346. package/dist/es5/adapter/resources/webgl-command-buffer.js +0 -96
  347. package/dist/es5/adapter/resources/webgl-command-buffer.js.map +0 -1
  348. package/dist/es5/adapter/resources/webgl-command-encoder.js +0 -98
  349. package/dist/es5/adapter/resources/webgl-command-encoder.js.map +0 -1
  350. package/dist/es5/adapter/resources/webgl-external-texture.js +0 -2
  351. package/dist/es5/adapter/resources/webgl-external-texture.js.map +0 -1
  352. package/dist/es5/adapter/resources/webgl-framebuffer.js +0 -346
  353. package/dist/es5/adapter/resources/webgl-framebuffer.js.map +0 -1
  354. package/dist/es5/adapter/resources/webgl-render-pass.js +0 -62
  355. package/dist/es5/adapter/resources/webgl-render-pass.js.map +0 -1
  356. package/dist/es5/adapter/resources/webgl-render-pipeline.js +0 -530
  357. package/dist/es5/adapter/resources/webgl-render-pipeline.js.map +0 -1
  358. package/dist/es5/adapter/resources/webgl-sampler.js +0 -96
  359. package/dist/es5/adapter/resources/webgl-sampler.js.map +0 -1
  360. package/dist/es5/adapter/resources/webgl-shader.js +0 -150
  361. package/dist/es5/adapter/resources/webgl-shader.js.map +0 -1
  362. package/dist/es5/adapter/resources/webgl-texture.js +0 -986
  363. package/dist/es5/adapter/resources/webgl-texture.js.map +0 -1
  364. package/dist/es5/adapter/webgl-canvas-context.js +0 -97
  365. package/dist/es5/adapter/webgl-canvas-context.js.map +0 -1
  366. package/dist/es5/adapter/webgl-device.js +0 -463
  367. package/dist/es5/adapter/webgl-device.js.map +0 -1
  368. package/dist/es5/bundle.js +0 -7
  369. package/dist/es5/bundle.js.map +0 -1
  370. package/dist/es5/classic/accessor.js +0 -181
  371. package/dist/es5/classic/accessor.js.map +0 -1
  372. package/dist/es5/classic/buffer.js +0 -478
  373. package/dist/es5/classic/buffer.js.map +0 -1
  374. package/dist/es5/classic/typed-array-utils.js +0 -126
  375. package/dist/es5/classic/typed-array-utils.js.map +0 -1
  376. package/dist/es5/context/context/context-state.js +0 -31
  377. package/dist/es5/context/context/context-state.js.map +0 -1
  378. package/dist/es5/context/context/create-browser-context.js +0 -83
  379. package/dist/es5/context/context/create-browser-context.js.map +0 -1
  380. package/dist/es5/context/context/create-headless-context.js +0 -60
  381. package/dist/es5/context/context/create-headless-context.js.map +0 -1
  382. package/dist/es5/context/context/device-pixels.js +0 -121
  383. package/dist/es5/context/context/device-pixels.js.map +0 -1
  384. package/dist/es5/context/context/webgl-checks.js +0 -54
  385. package/dist/es5/context/context/webgl-checks.js.map +0 -1
  386. package/dist/es5/context/debug/spector.js +0 -133
  387. package/dist/es5/context/debug/spector.js.map +0 -1
  388. package/dist/es5/context/debug/webgl-developer-tools.js +0 -198
  389. package/dist/es5/context/debug/webgl-developer-tools.js.map +0 -1
  390. package/dist/es5/context/parameters/unified-parameter-api.js +0 -97
  391. package/dist/es5/context/parameters/unified-parameter-api.js.map +0 -1
  392. package/dist/es5/context/parameters/webgl-parameter-tables.js +0 -392
  393. package/dist/es5/context/parameters/webgl-parameter-tables.js.map +0 -1
  394. package/dist/es5/context/polyfill/get-parameter-polyfill.js +0 -81
  395. package/dist/es5/context/polyfill/get-parameter-polyfill.js.map +0 -1
  396. package/dist/es5/context/polyfill/polyfill-context.js +0 -134
  397. package/dist/es5/context/polyfill/polyfill-context.js.map +0 -1
  398. package/dist/es5/context/polyfill/polyfill-table.js +0 -166
  399. package/dist/es5/context/polyfill/polyfill-table.js.map +0 -1
  400. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js +0 -341
  401. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  402. package/dist/es5/context/state-tracker/deep-array-equal.js +0 -28
  403. package/dist/es5/context/state-tracker/deep-array-equal.js.map +0 -1
  404. package/dist/es5/context/state-tracker/track-context-state.js +0 -211
  405. package/dist/es5/context/state-tracker/track-context-state.js.map +0 -1
  406. package/dist/es5/context/state-tracker/with-parameters.js +0 -44
  407. package/dist/es5/context/state-tracker/with-parameters.js.map +0 -1
  408. package/dist/es5/index.js +0 -290
  409. package/dist/es5/index.js.map +0 -1
  410. package/dist/es5/init.js +0 -10
  411. package/dist/es5/init.js.map +0 -1
  412. package/dist/es5/types/webgl.js +0 -6
  413. package/dist/es5/types/webgl.js.map +0 -1
  414. package/dist/es5/types.js +0 -2
  415. package/dist/es5/types.js.map +0 -1
  416. package/dist/esm/adapter/converters/device-parameters.js +0 -168
  417. package/dist/esm/adapter/converters/device-parameters.js.map +0 -1
  418. package/dist/esm/adapter/converters/renderbuffer-formats.js +0 -185
  419. package/dist/esm/adapter/converters/renderbuffer-formats.js.map +0 -1
  420. package/dist/esm/adapter/converters/sampler-parameters.js +0 -227
  421. package/dist/esm/adapter/converters/sampler-parameters.js.map +0 -1
  422. package/dist/esm/adapter/converters/texture-formats.js +0 -954
  423. package/dist/esm/adapter/converters/texture-formats.js.map +0 -1
  424. package/dist/esm/adapter/converters/vertex-formats.js +0 -35
  425. package/dist/esm/adapter/converters/vertex-formats.js.map +0 -1
  426. package/dist/esm/adapter/device-helpers/device-features.js +0 -112
  427. package/dist/esm/adapter/device-helpers/device-features.js.map +0 -1
  428. package/dist/esm/adapter/device-helpers/device-limits.js +0 -91
  429. package/dist/esm/adapter/device-helpers/device-limits.js.map +0 -1
  430. package/dist/esm/adapter/device-helpers/get-device-info.js +0 -44
  431. package/dist/esm/adapter/device-helpers/get-device-info.js.map +0 -1
  432. package/dist/esm/adapter/device-helpers/is-old-ie.js +0 -8
  433. package/dist/esm/adapter/device-helpers/is-old-ie.js.map +0 -1
  434. package/dist/esm/adapter/helpers/attribute-utils.js +0 -81
  435. package/dist/esm/adapter/helpers/attribute-utils.js.map +0 -1
  436. package/dist/esm/adapter/helpers/get-shader-layout.js +0 -330
  437. package/dist/esm/adapter/helpers/get-shader-layout.js.map +0 -1
  438. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js +0 -37
  439. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  440. package/dist/esm/adapter/helpers/set-uniform.js +0 -115
  441. package/dist/esm/adapter/helpers/set-uniform.js.map +0 -1
  442. package/dist/esm/adapter/helpers/uniforms.js +0 -99
  443. package/dist/esm/adapter/helpers/uniforms.js.map +0 -1
  444. package/dist/esm/adapter/objects/constants-to-keys.js +0 -42
  445. package/dist/esm/adapter/objects/constants-to-keys.js.map +0 -1
  446. package/dist/esm/adapter/objects/webgl-renderbuffer.js +0 -94
  447. package/dist/esm/adapter/objects/webgl-renderbuffer.js.map +0 -1
  448. package/dist/esm/adapter/objects/webgl-resource.js +0 -216
  449. package/dist/esm/adapter/objects/webgl-resource.js.map +0 -1
  450. package/dist/esm/adapter/objects/webgl-vertex-array-object.js +0 -84
  451. package/dist/esm/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  452. package/dist/esm/adapter/resources/webgl-buffer.js +0 -164
  453. package/dist/esm/adapter/resources/webgl-buffer.js.map +0 -1
  454. package/dist/esm/adapter/resources/webgl-command-buffer.js +0 -65
  455. package/dist/esm/adapter/resources/webgl-command-buffer.js.map +0 -1
  456. package/dist/esm/adapter/resources/webgl-command-encoder.js +0 -53
  457. package/dist/esm/adapter/resources/webgl-command-encoder.js.map +0 -1
  458. package/dist/esm/adapter/resources/webgl-external-texture.js +0 -2
  459. package/dist/esm/adapter/resources/webgl-external-texture.js.map +0 -1
  460. package/dist/esm/adapter/resources/webgl-framebuffer.js +0 -267
  461. package/dist/esm/adapter/resources/webgl-framebuffer.js.map +0 -1
  462. package/dist/esm/adapter/resources/webgl-render-pass.js +0 -21
  463. package/dist/esm/adapter/resources/webgl-render-pass.js.map +0 -1
  464. package/dist/esm/adapter/resources/webgl-render-pipeline.js +0 -428
  465. package/dist/esm/adapter/resources/webgl-render-pipeline.js.map +0 -1
  466. package/dist/esm/adapter/resources/webgl-sampler.js +0 -50
  467. package/dist/esm/adapter/resources/webgl-sampler.js.map +0 -1
  468. package/dist/esm/adapter/resources/webgl-shader.js +0 -76
  469. package/dist/esm/adapter/resources/webgl-shader.js.map +0 -1
  470. package/dist/esm/adapter/resources/webgl-texture.js +0 -834
  471. package/dist/esm/adapter/resources/webgl-texture.js.map +0 -1
  472. package/dist/esm/adapter/webgl-canvas-context.js +0 -54
  473. package/dist/esm/adapter/webgl-canvas-context.js.map +0 -1
  474. package/dist/esm/adapter/webgl-device.js +0 -337
  475. package/dist/esm/adapter/webgl-device.js.map +0 -1
  476. package/dist/esm/bundle.js +0 -5
  477. package/dist/esm/bundle.js.map +0 -1
  478. package/dist/esm/classic/accessor.js +0 -144
  479. package/dist/esm/classic/accessor.js.map +0 -1
  480. package/dist/esm/classic/buffer.js +0 -392
  481. package/dist/esm/classic/buffer.js.map +0 -1
  482. package/dist/esm/classic/typed-array-utils.js +0 -112
  483. package/dist/esm/classic/typed-array-utils.js.map +0 -1
  484. package/dist/esm/context/context/context-state.js +0 -26
  485. package/dist/esm/context/context/context-state.js.map +0 -1
  486. package/dist/esm/context/context/create-browser-context.js +0 -61
  487. package/dist/esm/context/context/create-browser-context.js.map +0 -1
  488. package/dist/esm/context/context/create-headless-context.js +0 -43
  489. package/dist/esm/context/context/create-headless-context.js.map +0 -1
  490. package/dist/esm/context/context/device-pixels.js +0 -103
  491. package/dist/esm/context/context/device-pixels.js.map +0 -1
  492. package/dist/esm/context/context/webgl-checks.js +0 -34
  493. package/dist/esm/context/context/webgl-checks.js.map +0 -1
  494. package/dist/esm/context/debug/spector.js +0 -76
  495. package/dist/esm/context/debug/spector.js.map +0 -1
  496. package/dist/esm/context/debug/webgl-developer-tools.js +0 -121
  497. package/dist/esm/context/debug/webgl-developer-tools.js.map +0 -1
  498. package/dist/esm/context/parameters/unified-parameter-api.js +0 -63
  499. package/dist/esm/context/parameters/unified-parameter-api.js.map +0 -1
  500. package/dist/esm/context/parameters/webgl-parameter-tables.js +0 -445
  501. package/dist/esm/context/parameters/webgl-parameter-tables.js.map +0 -1
  502. package/dist/esm/context/polyfill/get-parameter-polyfill.js +0 -91
  503. package/dist/esm/context/polyfill/get-parameter-polyfill.js.map +0 -1
  504. package/dist/esm/context/polyfill/polyfill-context.js +0 -91
  505. package/dist/esm/context/polyfill/polyfill-context.js.map +0 -1
  506. package/dist/esm/context/polyfill/polyfill-table.js +0 -160
  507. package/dist/esm/context/polyfill/polyfill-table.js.map +0 -1
  508. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js +0 -335
  509. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  510. package/dist/esm/context/state-tracker/deep-array-equal.js +0 -21
  511. package/dist/esm/context/state-tracker/deep-array-equal.js.map +0 -1
  512. package/dist/esm/context/state-tracker/track-context-state.js +0 -183
  513. package/dist/esm/context/state-tracker/track-context-state.js.map +0 -1
  514. package/dist/esm/context/state-tracker/with-parameters.js +0 -36
  515. package/dist/esm/context/state-tracker/with-parameters.js.map +0 -1
  516. package/dist/esm/index.js +0 -28
  517. package/dist/esm/index.js.map +0 -1
  518. package/dist/esm/init.js +0 -4
  519. package/dist/esm/init.js.map +0 -1
  520. package/dist/esm/types/webgl.js +0 -2
  521. package/dist/esm/types/webgl.js.map +0 -1
  522. package/dist/esm/types.js +0 -2
  523. package/dist/esm/types.js.map +0 -1
  524. package/dist/index.js.map +0 -1
  525. package/dist/init.d.ts +0 -2
  526. package/dist/init.d.ts.map +0 -1
  527. package/dist/init.js +0 -4
  528. package/dist/init.js.map +0 -1
  529. package/dist/types/webgl.d.ts +0 -145
  530. package/dist/types/webgl.d.ts.map +0 -1
  531. package/dist/types/webgl.js +0 -2
  532. package/dist/types/webgl.js.map +0 -1
  533. package/dist/types.js.map +0 -1
  534. package/src/adapter/converters/renderbuffer-formats.ts +0 -92
  535. package/src/adapter/device-helpers/device-features.ts +0 -158
  536. package/src/adapter/device-helpers/device-limits.ts +0 -153
  537. package/src/adapter/device-helpers/get-device-info.ts +0 -49
  538. package/src/adapter/device-helpers/is-old-ie.ts +0 -11
  539. package/src/adapter/helpers/attribute-utils.ts +0 -61
  540. package/src/adapter/objects/webgl-vertex-array-object.ts +0 -111
  541. package/src/bundle.ts +0 -4
  542. package/src/classic/buffer.ts +0 -474
  543. package/src/context/context/context-state.ts +0 -41
  544. package/src/context/context/create-browser-context.ts +0 -118
  545. package/src/context/context/create-headless-context.ts +0 -48
  546. package/src/context/context/device-pixels.ts +0 -158
  547. package/src/context/context/webgl-checks.ts +0 -49
  548. package/src/context/polyfill/get-parameter-polyfill.ts +0 -118
  549. package/src/context/polyfill/polyfill-context.ts +0 -97
  550. package/src/context/polyfill/polyfill-table.ts +0 -162
  551. package/src/context/polyfill/polyfill-vertex-array-object.ts +0 -360
  552. package/src/init.ts +0 -4
  553. package/src/types/webgl.ts +0 -284
@@ -1,428 +1,386 @@
1
- import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
- import { RenderPipeline, cast, log, decodeVertexFormat } from '@luma.gl/api';
3
- import GL from '@luma.gl/constants';
4
- import { getWebGLDataType } from '../converters/texture-formats';
5
- import { getShaderLayout } from '../helpers/get-shader-layout';
6
- import { withDeviceParameters, withGLParameters } from '../converters/device-parameters';
7
- import { setUniform } from '../helpers/set-uniform';
8
- import WEBGLBuffer from './webgl-buffer';
9
- import WEBGLTexture from './webgl-texture';
10
- import WEBGLVertexArrayObject from '../objects/webgl-vertex-array-object';
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import { RenderPipeline, cast, splitUniformsAndBindings, log } from '@luma.gl/core';
5
+ import { mergeShaderLayout } from '@luma.gl/core';
6
+ // import {mergeShaderLayout, getAttributeInfosFromLayouts} from '@luma.gl/core';
7
+ import { GL } from '@luma.gl/constants';
8
+ import { getShaderLayout } from "../helpers/get-shader-layout.js";
9
+ import { withDeviceAndGLParameters } from "../converters/device-parameters.js";
10
+ import { setUniform } from "../helpers/set-uniform.js";
11
+ import { WEBGLBuffer } from "./webgl-buffer.js";
12
+ import { WEBGLFramebuffer } from "./webgl-framebuffer.js";
13
+ import { WEBGLTexture } from "./webgl-texture.js";
14
+ import { WEBGLTextureView } from "./webgl-texture-view.js";
15
+ import { getGLDrawMode } from "../helpers/webgl-topology-utils.js";
11
16
  const LOG_PROGRAM_PERF_PRIORITY = 4;
12
- export default class WEBGLRenderPipeline extends RenderPipeline {
13
- constructor(device, props) {
14
- super(device, props);
15
-
16
- _defineProperty(this, "device", void 0);
17
-
18
- _defineProperty(this, "handle", void 0);
19
-
20
- _defineProperty(this, "vs", void 0);
21
-
22
- _defineProperty(this, "fs", void 0);
23
-
24
- _defineProperty(this, "layout", void 0);
25
-
26
- _defineProperty(this, "varyings", null);
27
-
28
- _defineProperty(this, "vertexArrayObject", void 0);
29
-
30
- _defineProperty(this, "_indexBuffer", void 0);
31
-
32
- _defineProperty(this, "uniforms", {});
33
-
34
- _defineProperty(this, "bindings", {});
35
-
36
- _defineProperty(this, "_textureUniforms", {});
37
-
38
- _defineProperty(this, "_textureIndexCounter", 0);
39
-
40
- _defineProperty(this, "_uniformCount", 0);
41
-
42
- _defineProperty(this, "_uniformSetters", {});
43
-
44
- this.device = device;
45
- this.handle = this.props.handle || this.device.gl.createProgram();
46
- this.handle.__SPECTOR_Metadata = {
47
- id: this.props.id
48
- };
49
- this.vs = cast(props.vs);
50
- this.fs = cast(props.fs);
51
- const {
52
- varyings,
53
- bufferMode = GL.SEPARATE_ATTRIBS
54
- } = props;
55
-
56
- if (varyings && varyings.length > 0) {
57
- var _this$device$gl;
58
-
59
- this.device.assertWebGL2();
60
- this.varyings = varyings;
61
- (_this$device$gl = this.device.gl2) === null || _this$device$gl === void 0 ? void 0 : _this$device$gl.transformFeedbackVaryings(this.handle, varyings, bufferMode);
62
- }
63
-
64
- this._compileAndLink();
65
-
66
- this.layout = props.layout || getShaderLayout(this.device.gl, this.handle);
67
- this.vertexArrayObject = new WEBGLVertexArrayObject(this.device);
68
- }
69
-
70
- destroy() {
71
- if (this.handle) {
72
- this.device.gl.deleteProgram(this.handle);
73
- this.destroyed = true;
17
+ /** Creates a new render pipeline */
18
+ export class WEBGLRenderPipeline extends RenderPipeline {
19
+ /** The WebGL device that created this render pipeline */
20
+ device;
21
+ /** Handle to underlying WebGL program */
22
+ handle;
23
+ /** vertex shader */
24
+ vs;
25
+ /** fragment shader */
26
+ fs;
27
+ /** The layout extracted from shader by WebGL introspection APIs */
28
+ introspectedLayout;
29
+ /** Uniforms set on this model */
30
+ uniforms = {};
31
+ /** Bindings set on this model */
32
+ bindings = {};
33
+ /** WebGL varyings */
34
+ varyings = null;
35
+ _uniformCount = 0;
36
+ _uniformSetters = {}; // TODO are these used?
37
+ constructor(device, props) {
38
+ super(device, props);
39
+ this.device = device;
40
+ this.handle = this.props.handle || this.device.gl.createProgram();
41
+ this.device.setSpectorMetadata(this.handle, { id: this.props.id });
42
+ // Create shaders if needed
43
+ this.vs = cast(props.vs);
44
+ this.fs = cast(props.fs);
45
+ // assert(this.vs.stage === 'vertex');
46
+ // assert(this.fs.stage === 'fragment');
47
+ // Setup varyings if supplied
48
+ // @ts-expect-error WebGL only
49
+ const { varyings, bufferMode = 35981 } = props;
50
+ if (varyings && varyings.length > 0) {
51
+ this.varyings = varyings;
52
+ this.device.gl.transformFeedbackVaryings(this.handle, varyings, bufferMode);
53
+ }
54
+ this._linkShaders();
55
+ log.time(0, `RenderPipeline ${this.id} - shaderLayout introspection`)();
56
+ this.introspectedLayout = getShaderLayout(this.device.gl, this.handle);
57
+ log.timeEnd(0, `RenderPipeline ${this.id} - shaderLayout introspection`)();
58
+ // Merge provided layout with introspected layout
59
+ this.shaderLayout = mergeShaderLayout(this.introspectedLayout, props.shaderLayout);
60
+ // WebGPU has more restrictive topology support than WebGL
61
+ switch (this.props.topology) {
62
+ case 'triangle-fan-webgl':
63
+ case 'line-loop-webgl':
64
+ log.warn(`Primitive topology ${this.props.topology} is deprecated and will be removed in v9.1`);
65
+ break;
66
+ default:
67
+ }
74
68
  }
75
- }
76
-
77
- setIndexBuffer(indexBuffer) {
78
- const webglBuffer = cast(indexBuffer);
79
- this.vertexArrayObject.setElementBuffer(webglBuffer);
80
- this._indexBuffer = indexBuffer;
81
- }
82
-
83
- setAttributes(attributes) {
84
- for (const [name, buffer] of Object.entries(attributes)) {
85
- const webglBuffer = cast(buffer);
86
- const attribute = getAttributeLayout(this.layout, name);
87
-
88
- if (!attribute) {
89
- log.warn("Ignoring buffer supplied for unknown attribute \"".concat(name, "\" in pipeline \"").concat(this.id, "\" (buffer \"").concat(buffer.id, "\")"))();
90
- continue;
91
- }
92
-
93
- const decoded = decodeVertexFormat(attribute.format);
94
- const {
95
- type: typeString,
96
- components: size,
97
- byteLength: stride,
98
- normalized,
99
- integer
100
- } = decoded;
101
- const divisor = attribute.stepMode === 'instance' ? 1 : 0;
102
- const type = getWebGLDataType(typeString);
103
- this.vertexArrayObject.setBuffer(attribute.location, webglBuffer, {
104
- size,
105
- type,
106
- stride,
107
- offset: 0,
108
- normalized,
109
- integer,
110
- divisor: attribute.stepMode === 'instance' ? 1 : 0
111
- });
69
+ destroy() {
70
+ if (this.handle) {
71
+ this.device.gl.deleteProgram(this.handle);
72
+ // this.handle = null;
73
+ this.destroyed = true;
74
+ }
112
75
  }
113
- }
114
-
115
- setBindings(bindings) {
116
- for (const [name, value] of Object.entries(bindings)) {
117
- const binding = this.layout.bindings.find(binding => binding.name === name);
118
-
119
- if (!binding) {
120
- log.warn("Unknown binding ".concat(name, " in render pipeline ").concat(this.id))();
121
- continue;
122
- }
123
-
124
- if (!value) {
125
- log.warn("Unsetting binding ".concat(name, " in render pipeline ").concat(this.id))();
126
- }
127
-
128
- switch (binding.type) {
129
- case 'uniform':
130
- if (!(value instanceof WEBGLBuffer) && !(value.buffer instanceof WEBGLBuffer)) {
131
- throw new Error('buffer value');
132
- }
133
-
134
- break;
135
-
136
- case 'texture':
137
- if (!(value instanceof WEBGLTexture)) {
138
- throw new Error('texture value');
139
- }
140
-
141
- break;
142
-
143
- case 'sampler':
144
- log.warn("Ignoring sampler ".concat(name))();
145
- break;
146
-
147
- default:
148
- throw new Error(binding.type);
149
- }
150
-
151
- this.bindings[name] = value;
76
+ /**
77
+ * Bindings include: textures, samplers and uniform buffers
78
+ * @todo needed for portable model
79
+ */
80
+ setBindings(bindings) {
81
+ // if (log.priority >= 2) {
82
+ // checkUniformValues(uniforms, this.id, this._uniformSetters);
83
+ // }
84
+ for (const [name, value] of Object.entries(bindings)) {
85
+ // Accept both `xyz` and `xyzUniforms` as valid names for `xyzUniforms` uniform block
86
+ // This convention allows shaders to name uniform blocks as `uniform appUniforms {} app;`
87
+ // and reference them as `app` from both GLSL and JS.
88
+ // TODO - this is rather hacky - we could also remap the name directly in the shader layout.
89
+ const binding = this.shaderLayout.bindings.find(binding => binding.name === name) ||
90
+ this.shaderLayout.bindings.find(binding => binding.name === `${name}Uniforms`);
91
+ if (!binding) {
92
+ const validBindings = this.shaderLayout.bindings
93
+ .map(binding => `"${binding.name}"`)
94
+ .join(', ');
95
+ log.warn(`Unknown binding "${name}" in render pipeline "${this.id}", expected one of ${validBindings}`)();
96
+ continue; // eslint-disable-line no-continue
97
+ }
98
+ if (!value) {
99
+ log.warn(`Unsetting binding "${name}" in render pipeline "${this.id}"`)();
100
+ }
101
+ switch (binding.type) {
102
+ case 'uniform':
103
+ // @ts-expect-error
104
+ if (!(value instanceof WEBGLBuffer) && !(value.buffer instanceof WEBGLBuffer)) {
105
+ throw new Error('buffer value');
106
+ }
107
+ break;
108
+ case 'texture':
109
+ if (!(value instanceof WEBGLTextureView ||
110
+ value instanceof WEBGLTexture ||
111
+ value instanceof WEBGLFramebuffer)) {
112
+ throw new Error('texture value');
113
+ }
114
+ break;
115
+ case 'sampler':
116
+ log.warn(`Ignoring sampler ${name}`)();
117
+ break;
118
+ default:
119
+ throw new Error(binding.type);
120
+ }
121
+ this.bindings[name] = value;
122
+ }
152
123
  }
153
- }
154
-
155
- setUniforms(uniforms) {
156
- Object.assign(this.uniforms, uniforms);
157
- }
158
-
159
- draw(options) {
160
- var _this$_indexBuffer;
161
-
162
- const {
163
- renderPass = this.device.getDefaultRenderPass(),
164
- vertexCount,
165
- indexCount,
166
- instanceCount,
167
- firstVertex = 0,
168
- firstIndex,
169
- firstInstance,
170
- baseVertex
171
- } = options;
172
- const drawMode = getDrawMode(this.props.topology);
173
- const isIndexed = Boolean(this._indexBuffer);
174
- const indexType = ((_this$_indexBuffer = this._indexBuffer) === null || _this$_indexBuffer === void 0 ? void 0 : _this$_indexBuffer.props.indexType) === 'uint16' ? GL.UNSIGNED_SHORT : GL.UNSIGNED_INT;
175
- const isInstanced = Number(options.instanceCount) > 0;
176
-
177
- if (!this._areTexturesRenderable() || options.vertexCount === 0) {
178
- return false;
124
+ /** @todo needed for portable model
125
+ * @note The WebGL API is offers many ways to draw things
126
+ * This function unifies those ways into a single call using common parameters with sane defaults
127
+ */
128
+ draw(options) {
129
+ const { renderPass, vertexArray, vertexCount,
130
+ // indexCount,
131
+ instanceCount, firstVertex = 0,
132
+ // firstIndex,
133
+ // firstInstance,
134
+ // baseVertex,
135
+ transformFeedback } = options;
136
+ const glDrawMode = getGLDrawMode(this.props.topology);
137
+ const isIndexed = Boolean(vertexArray.indexBuffer);
138
+ const glIndexType = vertexArray.indexBuffer?.glIndexType;
139
+ const isInstanced = Number(instanceCount) > 0;
140
+ // If we are using async linking, we need to wait until linking completes
141
+ if (this.linkStatus !== 'success') {
142
+ log.info(2, `RenderPipeline:${this.id}.draw() aborted - waiting for shader linking`)();
143
+ return false;
144
+ }
145
+ // Avoid WebGL draw call when not rendering any data or values are incomplete
146
+ // Note: async textures set as uniforms might still be loading.
147
+ // Now that all uniforms have been updated, check if any texture
148
+ // in the uniforms is not yet initialized, then we don't draw
149
+ if (!this._areTexturesRenderable() || vertexCount === 0) {
150
+ log.info(2, `RenderPipeline:${this.id}.draw() aborted - textures not yet loaded`)();
151
+ return false;
152
+ }
153
+ // (isInstanced && instanceCount === 0)
154
+ if (vertexCount === 0) {
155
+ log.info(2, `RenderPipeline:${this.id}.draw() aborted - no vertices to draw`)();
156
+ return true;
157
+ }
158
+ this.device.gl.useProgram(this.handle);
159
+ // Note: Rebinds constant attributes before each draw call
160
+ vertexArray.bindBeforeRender(renderPass);
161
+ if (transformFeedback) {
162
+ transformFeedback.begin(this.props.topology);
163
+ }
164
+ // We have to apply bindings before every draw call since other draw calls will overwrite
165
+ this._applyBindings();
166
+ this._applyUniforms();
167
+ const webglRenderPass = renderPass;
168
+ withDeviceAndGLParameters(this.device, this.props.parameters, webglRenderPass.glParameters, () => {
169
+ if (isIndexed && isInstanced) {
170
+ this.device.gl.drawElementsInstanced(glDrawMode, vertexCount || 0, // indexCount?
171
+ glIndexType, firstVertex, instanceCount || 0);
172
+ // } else if (isIndexed && this.device.isWebGL2 && !isNaN(start) && !isNaN(end)) {
173
+ // this.device.gldrawRangeElements(glDrawMode, start, end, vertexCount, glIndexType, offset);
174
+ }
175
+ else if (isIndexed) {
176
+ this.device.gl.drawElements(glDrawMode, vertexCount || 0, glIndexType, firstVertex); // indexCount?
177
+ }
178
+ else if (isInstanced) {
179
+ this.device.gl.drawArraysInstanced(glDrawMode, firstVertex, vertexCount || 0, instanceCount || 0);
180
+ }
181
+ else {
182
+ this.device.gl.drawArrays(glDrawMode, firstVertex, vertexCount || 0);
183
+ }
184
+ if (transformFeedback) {
185
+ transformFeedback.end();
186
+ }
187
+ });
188
+ vertexArray.unbindAfterRender(renderPass);
189
+ return true;
179
190
  }
180
-
181
- this.device.gl.useProgram(this.handle);
182
- this.vertexArrayObject.bind(() => {
183
- const primitiveMode = getGLPrimitive(this.props.topology);
184
- const transformFeedback = null;
185
-
186
- if (transformFeedback) {
187
- transformFeedback.begin(primitiveMode);
188
- }
189
-
190
- this._applyBindings();
191
-
192
- this._applyUniforms();
193
-
194
- withDeviceParameters(this.device, this.props.parameters, () => {
195
- withGLParameters(this.device, {
196
- framebuffer: renderPass.props.framebuffer
197
- }, () => {
198
- if (isIndexed && isInstanced) {
199
- var _this$device$gl2;
200
-
201
- (_this$device$gl2 = this.device.gl2) === null || _this$device$gl2 === void 0 ? void 0 : _this$device$gl2.drawElementsInstanced(drawMode, vertexCount || 0, indexType, firstVertex, instanceCount || 0);
202
- } else if (isIndexed) {
203
- this.device.gl.drawElements(drawMode, vertexCount || 0, indexType, firstVertex);
204
- } else if (isInstanced) {
205
- var _this$device$gl3;
206
-
207
- (_this$device$gl3 = this.device.gl2) === null || _this$device$gl3 === void 0 ? void 0 : _this$device$gl3.drawArraysInstanced(drawMode, firstVertex, vertexCount || 0, instanceCount || 0);
208
- } else {
209
- this.device.gl.drawArrays(drawMode, firstVertex, vertexCount || 0);
210
- }
191
+ // DEPRECATED METHODS
192
+ setUniformsWebGL(uniforms) {
193
+ const { bindings } = splitUniformsAndBindings(uniforms);
194
+ Object.keys(bindings).forEach(name => {
195
+ log.warn(`Unsupported value "${JSON.stringify(bindings[name])}" used in setUniforms() for key ${name}. Use setBindings() instead?`)();
211
196
  });
212
-
213
- if (transformFeedback) {
214
- transformFeedback.end();
197
+ // TODO - check against layout
198
+ Object.assign(this.uniforms, uniforms);
199
+ }
200
+ // PRIVATE METHODS
201
+ // setAttributes(attributes: Record<string, Buffer>): void {}
202
+ // setBindings(bindings: Record<string, Binding>): void {}
203
+ async _linkShaders() {
204
+ const { gl } = this.device;
205
+ gl.attachShader(this.handle, this.vs.handle);
206
+ gl.attachShader(this.handle, this.fs.handle);
207
+ log.time(LOG_PROGRAM_PERF_PRIORITY, `linkProgram for ${this.id}`)();
208
+ gl.linkProgram(this.handle);
209
+ log.timeEnd(LOG_PROGRAM_PERF_PRIORITY, `linkProgram for ${this.id}`)();
210
+ // TODO Avoid checking program linking error in production
211
+ if (log.level === 0) {
212
+ // return;
213
+ }
214
+ if (!this.device.features.has('compilation-status-async-webgl')) {
215
+ const status = this._getLinkStatus();
216
+ this._reportLinkStatus(status);
217
+ return;
215
218
  }
216
- });
217
- });
218
- return true;
219
- }
220
-
221
- _compileAndLink() {
222
- const {
223
- gl
224
- } = this.device;
225
- gl.attachShader(this.handle, this.vs.handle);
226
- gl.attachShader(this.handle, this.fs.handle);
227
- log.time(LOG_PROGRAM_PERF_PRIORITY, "linkProgram for ".concat(this.id))();
228
- gl.linkProgram(this.handle);
229
- log.timeEnd(LOG_PROGRAM_PERF_PRIORITY, "linkProgram for ".concat(this.id))();
230
-
231
- if (gl.debug || log.level > 0) {
232
- const linked = gl.getProgramParameter(this.handle, gl.LINK_STATUS);
233
-
234
- if (!linked) {
235
- throw new Error("Error linking: ".concat(gl.getProgramInfoLog(this.handle)));
236
- }
237
-
238
- gl.validateProgram(this.handle);
239
- const validated = gl.getProgramParameter(this.handle, gl.VALIDATE_STATUS);
240
-
241
- if (!validated) {
242
- throw new Error("Error validating: ".concat(gl.getProgramInfoLog(this.handle)));
243
- }
219
+ // async case
220
+ log.once(1, 'RenderPipeline linking is asynchronous')();
221
+ await this._waitForLinkComplete();
222
+ log.info(2, `RenderPipeline ${this.id} - async linking complete: ${this.linkStatus}`)();
223
+ const status = this._getLinkStatus();
224
+ this._reportLinkStatus(status);
244
225
  }
245
- }
246
-
247
- _areTexturesRenderable() {
248
- let texturesRenderable = true;
249
-
250
- for (const [name, texture] of Object.entries(this._textureUniforms)) {
251
- texture.update();
252
- texturesRenderable = texturesRenderable && texture.loaded;
226
+ /** Report link status. First, check for shader compilation failures if linking fails */
227
+ _reportLinkStatus(status) {
228
+ switch (status) {
229
+ case 'success':
230
+ return;
231
+ default:
232
+ // First check for shader compilation failures if linking fails
233
+ if (this.vs.compilationStatus === 'error') {
234
+ this.vs.debugShader();
235
+ throw new Error(`Error during compilation of shader ${this.vs.id}`);
236
+ }
237
+ if (this.fs?.compilationStatus === 'error') {
238
+ this.vs.debugShader();
239
+ throw new Error(`Error during compilation of shader ${this.fs.id}`);
240
+ }
241
+ throw new Error(`Error during ${status}: ${this.device.gl.getProgramInfoLog(this.handle)}`);
242
+ }
253
243
  }
254
-
255
- for (const [name, texture] of Object.entries(this.bindings)) {
256
- if (texture.loaded !== undefined) {
257
- texturesRenderable = texturesRenderable && texture.loaded;
258
- }
244
+ /**
245
+ * Get the shader compilation status
246
+ * TODO - Load log even when no error reported, to catch warnings?
247
+ * https://gamedev.stackexchange.com/questions/30429/how-to-detect-glsl-warnings
248
+ */
249
+ _getLinkStatus() {
250
+ const { gl } = this.device;
251
+ const linked = gl.getProgramParameter(this.handle, 35714);
252
+ if (!linked) {
253
+ this.linkStatus = 'error';
254
+ return 'linking';
255
+ }
256
+ gl.validateProgram(this.handle);
257
+ const validated = gl.getProgramParameter(this.handle, 35715);
258
+ if (!validated) {
259
+ this.linkStatus = 'error';
260
+ return 'validation';
261
+ }
262
+ this.linkStatus = 'success';
263
+ return 'success';
259
264
  }
260
-
261
- return texturesRenderable;
262
- }
263
-
264
- _applyBindings() {
265
- this.device.gl.useProgram(this.handle);
266
- const {
267
- gl2
268
- } = this.device;
269
-
270
- if (!gl2) {
271
- throw new Error('bindings');
265
+ /** Use KHR_parallel_shader_compile extension if available */
266
+ async _waitForLinkComplete() {
267
+ const waitMs = async (ms) => await new Promise(resolve => setTimeout(resolve, ms));
268
+ const DELAY_MS = 10; // Shader compilation is typically quite fast (with some exceptions)
269
+ // If status polling is not available, we can't wait for completion. Just wait a little to minimize blocking
270
+ if (!this.device.features.has('compilation-status-async-webgl')) {
271
+ await waitMs(DELAY_MS);
272
+ return;
273
+ }
274
+ const { gl } = this.device;
275
+ for (;;) {
276
+ const complete = gl.getProgramParameter(this.handle, 37297);
277
+ if (complete) {
278
+ return;
279
+ }
280
+ await waitMs(DELAY_MS);
281
+ }
272
282
  }
273
-
274
- let textureUnit = 0;
275
- let uniformBufferIndex = 0;
276
-
277
- for (const binding of this.layout.bindings) {
278
- const value = this.bindings[binding.name];
279
-
280
- if (!value) {
281
- throw new Error("No value for binding ".concat(binding.name, " in ").concat(this.id));
282
- }
283
-
284
- switch (binding.type) {
285
- case 'uniform':
286
- const {
287
- name
288
- } = binding;
289
- const location = gl2.getUniformBlockIndex(this.handle, name);
290
-
291
- if (location === GL.INVALID_INDEX) {
292
- throw new Error("Invalid uniform block name ".concat(name));
293
- }
294
-
295
- gl2.uniformBlockBinding(this.handle, uniformBufferIndex, location);
296
-
297
- if (value instanceof WEBGLBuffer) {
298
- gl2.bindBufferBase(GL.UNIFORM_BUFFER, uniformBufferIndex, value.handle);
299
- } else {
300
- gl2.bindBufferRange(GL.UNIFORM_BUFFER, uniformBufferIndex, value.buffer.handle, value.offset || 0, value.size || value.buffer.byteLength - value.offset);
301
- }
302
-
303
- uniformBufferIndex += 1;
304
- break;
305
-
306
- case 'texture':
307
- if (!(value instanceof WEBGLTexture)) {
308
- throw new Error('texture');
309
- }
310
-
311
- const texture = value;
312
- gl2.activeTexture(GL.TEXTURE0 + textureUnit);
313
- gl2.bindTexture(texture.target, texture.handle);
314
- textureUnit += 1;
315
- break;
316
-
317
- case 'sampler':
318
- break;
319
-
320
- case 'storage':
321
- case 'read-only-storage':
322
- throw new Error("binding type '".concat(binding.type, "' not supported in WebGL"));
323
- }
283
+ /**
284
+ * Checks if all texture-values uniforms are renderable (i.e. loaded)
285
+ * Update a texture if needed (e.g. from video)
286
+ * Note: This is currently done before every draw call
287
+ */
288
+ _areTexturesRenderable() {
289
+ let texturesRenderable = true;
290
+ for (const [, texture] of Object.entries(this.bindings)) {
291
+ if (texture instanceof WEBGLTexture) {
292
+ texture.update();
293
+ texturesRenderable = texturesRenderable && texture.loaded;
294
+ }
295
+ }
296
+ return texturesRenderable;
324
297
  }
325
- }
326
-
327
- _applyUniforms() {
328
- for (const uniformLayout of this.layout.uniforms || []) {
329
- const {
330
- name,
331
- location,
332
- type,
333
- textureUnit
334
- } = uniformLayout;
335
- const value = this.uniforms[name] || textureUnit;
336
-
337
- if (value !== undefined) {
338
- setUniform(this.device.gl, location, type, value);
339
- }
298
+ /** Apply any bindings (before each draw call) */
299
+ _applyBindings() {
300
+ // If we are using async linking, we need to wait until linking completes
301
+ if (this.linkStatus !== 'success') {
302
+ return;
303
+ }
304
+ const { gl } = this.device;
305
+ gl.useProgram(this.handle);
306
+ let textureUnit = 0;
307
+ let uniformBufferIndex = 0;
308
+ for (const binding of this.shaderLayout.bindings) {
309
+ // Accept both `xyz` and `xyzUniforms` as valid names for `xyzUniforms` uniform block
310
+ const value = this.bindings[binding.name] || this.bindings[binding.name.replace(/Uniforms$/, '')];
311
+ if (!value) {
312
+ throw new Error(`No value for binding ${binding.name} in ${this.id}`);
313
+ }
314
+ switch (binding.type) {
315
+ case 'uniform':
316
+ // Set buffer
317
+ const { name } = binding;
318
+ const location = gl.getUniformBlockIndex(this.handle, name);
319
+ if (location === 4294967295) {
320
+ throw new Error(`Invalid uniform block name ${name}`);
321
+ }
322
+ gl.uniformBlockBinding(this.handle, uniformBufferIndex, location);
323
+ // console.debug(binding, location);
324
+ if (value instanceof WEBGLBuffer) {
325
+ gl.bindBufferBase(35345, uniformBufferIndex, value.handle);
326
+ }
327
+ else {
328
+ gl.bindBufferRange(35345, uniformBufferIndex,
329
+ // @ts-expect-error
330
+ value.buffer.handle,
331
+ // @ts-expect-error
332
+ value.offset || 0,
333
+ // @ts-expect-error
334
+ value.size || value.buffer.byteLength - value.offset);
335
+ }
336
+ uniformBufferIndex += 1;
337
+ break;
338
+ case 'texture':
339
+ if (!(value instanceof WEBGLTextureView ||
340
+ value instanceof WEBGLTexture ||
341
+ value instanceof WEBGLFramebuffer)) {
342
+ throw new Error('texture');
343
+ }
344
+ let texture;
345
+ if (value instanceof WEBGLTextureView) {
346
+ texture = value.texture;
347
+ }
348
+ else if (value instanceof WEBGLTexture) {
349
+ texture = value;
350
+ }
351
+ else if (value instanceof WEBGLFramebuffer &&
352
+ value.colorAttachments[0] instanceof WEBGLTextureView) {
353
+ log.warn('Passing framebuffer in texture binding may be deprecated. Use fbo.colorAttachments[0] instead')();
354
+ texture = value.colorAttachments[0].texture;
355
+ }
356
+ else {
357
+ throw new Error('No texture');
358
+ }
359
+ gl.activeTexture(33984 + textureUnit);
360
+ gl.bindTexture(texture.target, texture.handle);
361
+ // gl.bindSampler(textureUnit, sampler.handle);
362
+ textureUnit += 1;
363
+ break;
364
+ case 'sampler':
365
+ // ignore
366
+ break;
367
+ case 'storage':
368
+ case 'read-only-storage':
369
+ throw new Error(`binding type '${binding.type}' not supported in WebGL`);
370
+ }
371
+ }
340
372
  }
341
- }
342
-
343
- }
344
-
345
- function getDrawMode(topology) {
346
- switch (topology) {
347
- case 'point-list':
348
- return GL.POINTS;
349
-
350
- case 'line-list':
351
- return GL.LINES;
352
-
353
- case 'line-strip':
354
- return GL.LINE_STRIP;
355
-
356
- case 'line-loop':
357
- return GL.LINE_LOOP;
358
-
359
- case 'triangle-list':
360
- return GL.TRIANGLES;
361
-
362
- case 'triangle-strip':
363
- return GL.TRIANGLE_STRIP;
364
-
365
- case 'triangle-fan':
366
- return GL.TRIANGLE_FAN;
367
-
368
- default:
369
- throw new Error(topology);
370
- }
371
- }
372
-
373
- function getGLPrimitive(topology) {
374
- switch (topology) {
375
- case 'point-list':
376
- return GL.POINTS;
377
-
378
- case 'line-list':
379
- return GL.LINES;
380
-
381
- case 'line-strip':
382
- return GL.LINES;
383
-
384
- case 'line-loop':
385
- return GL.LINES;
386
-
387
- case 'triangle-list':
388
- return GL.TRIANGLES;
389
-
390
- case 'triangle-strip':
391
- return GL.TRIANGLES;
392
-
393
- case 'triangle-fan':
394
- return GL.TRIANGLES;
395
-
396
- default:
397
- throw new Error(topology);
398
- }
399
- }
400
-
401
- function getAttributesByLocation(attributes, layout) {
402
- const byLocation = {};
403
-
404
- for (const [name, buffer] of Object.entries(attributes)) {
405
- const attribute = getAttributeLayout(layout, name);
406
-
407
- if (attribute) {
408
- byLocation[attribute.location] = buffer;
373
+ /**
374
+ * Due to program sharing, uniforms need to be reset before every draw call
375
+ * (though caching will avoid redundant WebGL calls)
376
+ */
377
+ _applyUniforms() {
378
+ for (const uniformLayout of this.shaderLayout.uniforms || []) {
379
+ const { name, location, type, textureUnit } = uniformLayout;
380
+ const value = this.uniforms[name] ?? textureUnit;
381
+ if (value !== undefined) {
382
+ setUniform(this.device.gl, location, type, value);
383
+ }
384
+ }
409
385
  }
410
- }
411
-
412
- return byLocation;
413
- }
414
-
415
- function getAttributeLayout(layout, name) {
416
- return layout.attributes.find(binding => binding.name === name) || null;
417
- }
418
-
419
- function getBindingLayout(layout, name) {
420
- const binding = layout.bindings.find(binding => binding.name === name);
421
-
422
- if (!binding) {
423
- throw new Error("Unknown binding ".concat(name));
424
- }
425
-
426
- return binding;
427
386
  }
428
- //# sourceMappingURL=webgl-render-pipeline.js.map