@luma.gl/webgl 9.0.0-alpha.2 → 9.0.0-alpha.21

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 (468) hide show
  1. package/dist/adapter/converters/device-parameters.d.ts +11 -1
  2. package/dist/adapter/converters/device-parameters.d.ts.map +1 -1
  3. package/dist/adapter/converters/device-parameters.js +17 -35
  4. package/dist/adapter/converters/device-parameters.js.map +1 -1
  5. package/dist/adapter/converters/renderbuffer-formats.d.ts +2 -2
  6. package/dist/adapter/converters/renderbuffer-formats.d.ts.map +1 -1
  7. package/dist/adapter/converters/renderbuffer-formats.js +2 -7
  8. package/dist/adapter/converters/renderbuffer-formats.js.map +1 -1
  9. package/dist/adapter/converters/sampler-parameters.d.ts +4 -4
  10. package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
  11. package/dist/adapter/converters/sampler-parameters.js +19 -55
  12. package/dist/adapter/converters/sampler-parameters.js.map +1 -1
  13. package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
  14. package/dist/adapter/converters/texture-formats.js +13 -66
  15. package/dist/adapter/converters/texture-formats.js.map +1 -1
  16. package/dist/adapter/converters/vertex-formats.d.ts.map +1 -1
  17. package/dist/adapter/converters/vertex-formats.js +2 -8
  18. package/dist/adapter/converters/vertex-formats.js.map +1 -1
  19. package/dist/adapter/device-helpers/device-features.d.ts.map +1 -1
  20. package/dist/adapter/device-helpers/device-features.js +13 -20
  21. package/dist/adapter/device-helpers/device-features.js.map +1 -1
  22. package/dist/adapter/device-helpers/device-limits.js +1 -4
  23. package/dist/adapter/device-helpers/device-limits.js.map +1 -1
  24. package/dist/adapter/device-helpers/get-device-info.js +8 -10
  25. package/dist/adapter/device-helpers/get-device-info.js.map +1 -1
  26. package/dist/adapter/device-helpers/is-old-ie.js +2 -1
  27. package/dist/adapter/device-helpers/is-old-ie.js.map +1 -1
  28. package/dist/adapter/helpers/attribute-utils.js +0 -17
  29. package/dist/adapter/helpers/attribute-utils.js.map +1 -1
  30. package/dist/adapter/helpers/get-shader-info.d.ts +9 -0
  31. package/dist/adapter/helpers/get-shader-info.d.ts.map +1 -0
  32. package/dist/adapter/helpers/get-shader-info.js +25 -0
  33. package/dist/adapter/helpers/get-shader-info.js.map +1 -0
  34. package/dist/adapter/helpers/get-shader-layout.d.ts +1 -1
  35. package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
  36. package/dist/adapter/helpers/get-shader-layout.js +41 -67
  37. package/dist/adapter/helpers/get-shader-layout.js.map +1 -1
  38. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts +1 -1
  39. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts.map +1 -1
  40. package/dist/adapter/helpers/parse-shader-compiler-log.js +0 -7
  41. package/dist/adapter/helpers/parse-shader-compiler-log.js.map +1 -1
  42. package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
  43. package/dist/adapter/helpers/set-uniform.js +1 -31
  44. package/dist/adapter/helpers/set-uniform.js.map +1 -1
  45. package/dist/adapter/helpers/uniforms.d.ts +1 -1
  46. package/dist/adapter/helpers/uniforms.d.ts.map +1 -1
  47. package/dist/adapter/helpers/uniforms.js +4 -14
  48. package/dist/adapter/helpers/uniforms.js.map +1 -1
  49. package/dist/adapter/objects/constants-to-keys.d.ts.map +1 -1
  50. package/dist/adapter/objects/constants-to-keys.js +0 -7
  51. package/dist/adapter/objects/constants-to-keys.js.map +1 -1
  52. package/dist/adapter/objects/webgl-renderbuffer.d.ts +3 -3
  53. package/dist/adapter/objects/webgl-renderbuffer.d.ts.map +1 -1
  54. package/dist/adapter/objects/webgl-renderbuffer.js +6 -22
  55. package/dist/adapter/objects/webgl-renderbuffer.js.map +1 -1
  56. package/dist/adapter/objects/webgl-resource.d.ts +3 -5
  57. package/dist/adapter/objects/webgl-resource.d.ts.map +1 -1
  58. package/dist/adapter/objects/webgl-resource.js +15 -68
  59. package/dist/adapter/objects/webgl-resource.js.map +1 -1
  60. package/dist/adapter/objects/webgl-vertex-array-object.d.ts +6 -6
  61. package/dist/adapter/objects/webgl-vertex-array-object.d.ts.map +1 -1
  62. package/dist/adapter/objects/webgl-vertex-array-object.js +7 -17
  63. package/dist/adapter/objects/webgl-vertex-array-object.js.map +1 -1
  64. package/dist/adapter/resources/webgl-buffer.d.ts +3 -4
  65. package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
  66. package/dist/adapter/resources/webgl-buffer.js +18 -49
  67. package/dist/adapter/resources/webgl-buffer.js.map +1 -1
  68. package/dist/adapter/resources/webgl-command-buffer.d.ts +2 -2
  69. package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
  70. package/dist/adapter/resources/webgl-command-buffer.js +3 -18
  71. package/dist/adapter/resources/webgl-command-buffer.js.map +1 -1
  72. package/dist/adapter/resources/webgl-command-encoder.d.ts +3 -3
  73. package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -1
  74. package/dist/adapter/resources/webgl-command-encoder.js +2 -15
  75. package/dist/adapter/resources/webgl-command-encoder.js.map +1 -1
  76. package/dist/adapter/resources/webgl-external-texture.js.map +1 -1
  77. package/dist/adapter/resources/webgl-framebuffer.d.ts +16 -16
  78. package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
  79. package/dist/adapter/resources/webgl-framebuffer.js +17 -75
  80. package/dist/adapter/resources/webgl-framebuffer.js.map +1 -1
  81. package/dist/adapter/resources/webgl-render-pass.d.ts +3 -3
  82. package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
  83. package/dist/adapter/resources/webgl-render-pass.js +3 -8
  84. package/dist/adapter/resources/webgl-render-pass.js.map +1 -1
  85. package/dist/adapter/resources/webgl-render-pipeline.d.ts +5 -5
  86. package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
  87. package/dist/adapter/resources/webgl-render-pipeline.js +51 -140
  88. package/dist/adapter/resources/webgl-render-pipeline.js.map +1 -1
  89. package/dist/adapter/resources/webgl-sampler.d.ts +5 -4
  90. package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
  91. package/dist/adapter/resources/webgl-sampler.js +5 -13
  92. package/dist/adapter/resources/webgl-sampler.js.map +1 -1
  93. package/dist/adapter/resources/webgl-shader.d.ts +3 -4
  94. package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
  95. package/dist/adapter/resources/webgl-shader.js +8 -21
  96. package/dist/adapter/resources/webgl-shader.js.map +1 -1
  97. package/dist/adapter/resources/webgl-texture.d.ts +26 -26
  98. package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
  99. package/dist/adapter/resources/webgl-texture.js +66 -183
  100. package/dist/adapter/resources/webgl-texture.js.map +1 -1
  101. package/dist/adapter/webgl-canvas-context.d.ts +3 -3
  102. package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
  103. package/dist/adapter/webgl-canvas-context.js +6 -19
  104. package/dist/adapter/webgl-canvas-context.js.map +1 -1
  105. package/dist/adapter/webgl-device.d.ts +53 -37
  106. package/dist/adapter/webgl-device.d.ts.map +1 -1
  107. package/dist/adapter/webgl-device.js +108 -109
  108. package/dist/adapter/webgl-device.js.map +1 -1
  109. package/dist/classic/accessor.d.ts +1 -1
  110. package/dist/classic/accessor.d.ts.map +1 -1
  111. package/dist/classic/accessor.js +12 -36
  112. package/dist/classic/accessor.js.map +1 -1
  113. package/dist/classic/buffer.d.ts +3 -4
  114. package/dist/classic/buffer.d.ts.map +1 -1
  115. package/dist/classic/buffer.js +30 -87
  116. package/dist/classic/buffer.js.map +1 -1
  117. package/dist/classic/typed-array-utils.d.ts +1 -1
  118. package/dist/classic/typed-array-utils.d.ts.map +1 -1
  119. package/dist/classic/typed-array-utils.js +0 -20
  120. package/dist/classic/typed-array-utils.js.map +1 -1
  121. package/dist/context/context/{create-context.d.ts → create-browser-context.d.ts} +2 -1
  122. package/dist/context/context/create-browser-context.d.ts.map +1 -0
  123. package/dist/context/context/{create-context.js → create-browser-context.js} +19 -15
  124. package/dist/context/context/create-browser-context.js.map +1 -0
  125. package/dist/context/context/create-headless-context.d.ts +9 -0
  126. package/dist/context/context/create-headless-context.d.ts.map +1 -0
  127. package/dist/context/context/create-headless-context.js +42 -0
  128. package/dist/context/context/create-headless-context.js.map +1 -0
  129. package/dist/context/context/webgl-checks.js +0 -3
  130. package/dist/context/context/webgl-checks.js.map +1 -1
  131. package/dist/context/debug/spector.d.ts +1 -0
  132. package/dist/context/debug/spector.d.ts.map +1 -1
  133. package/dist/context/debug/spector.js +7 -19
  134. package/dist/context/debug/spector.js.map +1 -1
  135. package/dist/context/debug/webgl-developer-tools.d.ts +1 -1
  136. package/dist/context/debug/webgl-developer-tools.d.ts.map +1 -1
  137. package/dist/context/debug/webgl-developer-tools.js +8 -32
  138. package/dist/context/debug/webgl-developer-tools.js.map +1 -1
  139. package/dist/context/parameters/unified-parameter-api.d.ts +6 -5
  140. package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
  141. package/dist/context/parameters/unified-parameter-api.js +8 -18
  142. package/dist/context/parameters/unified-parameter-api.js.map +1 -1
  143. package/dist/context/parameters/webgl-parameter-tables.d.ts +103 -103
  144. package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
  145. package/dist/context/parameters/webgl-parameter-tables.js +16 -34
  146. package/dist/context/parameters/webgl-parameter-tables.js.map +1 -1
  147. package/dist/context/polyfill/context-data.d.ts +13 -0
  148. package/dist/context/polyfill/context-data.d.ts.map +1 -0
  149. package/dist/context/polyfill/context-data.js +12 -0
  150. package/dist/context/polyfill/context-data.js.map +1 -0
  151. package/dist/context/polyfill/get-parameter-polyfill.d.ts +1 -1
  152. package/dist/context/polyfill/get-parameter-polyfill.d.ts.map +1 -1
  153. package/dist/context/polyfill/get-parameter-polyfill.js +1 -6
  154. package/dist/context/polyfill/get-parameter-polyfill.js.map +1 -1
  155. package/dist/context/polyfill/polyfill-context.js +20 -28
  156. package/dist/context/polyfill/polyfill-context.js.map +1 -1
  157. package/dist/context/polyfill/polyfill-table.d.ts +8 -8
  158. package/dist/context/polyfill/polyfill-table.d.ts.map +1 -1
  159. package/dist/context/polyfill/polyfill-table.js +8 -30
  160. package/dist/context/polyfill/polyfill-table.js.map +1 -1
  161. package/dist/context/polyfill/polyfill-vertex-array-object.d.ts.map +1 -1
  162. package/dist/context/polyfill/polyfill-vertex-array-object.js +0 -70
  163. package/dist/context/polyfill/polyfill-vertex-array-object.js.map +1 -1
  164. package/dist/context/state-tracker/deep-array-equal.js +0 -4
  165. package/dist/context/state-tracker/deep-array-equal.js.map +1 -1
  166. package/dist/context/state-tracker/track-context-state.d.ts.map +1 -1
  167. package/dist/context/state-tracker/track-context-state.js +15 -50
  168. package/dist/context/state-tracker/track-context-state.js.map +1 -1
  169. package/dist/context/state-tracker/with-parameters.d.ts +2 -1
  170. package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
  171. package/dist/context/state-tracker/with-parameters.js +7 -9
  172. package/dist/context/state-tracker/with-parameters.js.map +1 -1
  173. package/dist/dist.dev.js +9204 -0
  174. package/dist/index.cjs +5948 -0
  175. package/dist/index.d.ts +19 -19
  176. package/dist/index.d.ts.map +1 -1
  177. package/dist/index.js +24 -26
  178. package/dist/index.js.map +1 -1
  179. package/dist/types/webgl.d.ts +8 -7
  180. package/dist/types/webgl.d.ts.map +1 -1
  181. package/dist/types/webgl.js.map +1 -1
  182. package/dist/types.js.map +1 -1
  183. package/dist.min.js +36 -0
  184. package/package.json +18 -9
  185. package/src/.DS_Store +0 -0
  186. package/src/adapter/.DS_Store +0 -0
  187. package/src/adapter/converters/device-parameters.ts +45 -16
  188. package/src/adapter/converters/renderbuffer-formats.ts +1 -3
  189. package/src/adapter/converters/sampler-parameters.ts +18 -7
  190. package/src/adapter/converters/texture-formats.ts +18 -16
  191. package/src/adapter/converters/vertex-formats.ts +1 -0
  192. package/src/adapter/device-helpers/device-features.ts +9 -2
  193. package/src/adapter/device-helpers/device-limits.ts +1 -1
  194. package/src/adapter/device-helpers/get-device-info.ts +12 -8
  195. package/src/adapter/helpers/get-shader-info.ts +37 -0
  196. package/src/adapter/helpers/get-shader-layout.ts +59 -37
  197. package/src/adapter/helpers/parse-shader-compiler-log.ts +2 -2
  198. package/src/adapter/helpers/set-uniform.ts +3 -1
  199. package/src/adapter/helpers/uniforms.ts +21 -10
  200. package/src/adapter/objects/constants-to-keys.ts +4 -1
  201. package/src/adapter/objects/webgl-renderbuffer.ts +8 -8
  202. package/src/adapter/objects/webgl-resource.ts +8 -13
  203. package/src/adapter/objects/webgl-vertex-array-object.ts +10 -10
  204. package/src/adapter/resources/webgl-buffer.ts +16 -16
  205. package/src/adapter/resources/webgl-command-buffer.ts +3 -3
  206. package/src/adapter/resources/webgl-command-encoder.ts +8 -8
  207. package/src/adapter/resources/webgl-external-texture.ts +1 -1
  208. package/src/adapter/resources/webgl-framebuffer.ts +36 -33
  209. package/src/adapter/resources/webgl-render-pass.ts +4 -3
  210. package/src/adapter/resources/webgl-render-pipeline.ts +89 -77
  211. package/src/adapter/resources/webgl-sampler.ts +12 -6
  212. package/src/adapter/resources/webgl-shader.ts +10 -9
  213. package/src/adapter/resources/webgl-texture.ts +55 -45
  214. package/src/adapter/webgl-canvas-context.ts +8 -9
  215. package/src/adapter/webgl-device.ts +153 -69
  216. package/src/classic/accessor.ts +2 -15
  217. package/src/classic/buffer.ts +18 -25
  218. package/src/classic/typed-array-utils.ts +4 -2
  219. package/src/context/.DS_Store +0 -0
  220. package/src/context/context/{create-context.ts → create-browser-context.ts} +17 -7
  221. package/src/context/context/create-headless-context.ts +48 -0
  222. package/src/context/debug/spector.ts +6 -5
  223. package/src/context/debug/webgl-developer-tools.ts +13 -13
  224. package/src/context/parameters/unified-parameter-api.ts +18 -12
  225. package/src/context/parameters/webgl-parameter-tables.ts +113 -94
  226. package/src/context/polyfill/context-data.ts +27 -0
  227. package/src/context/polyfill/get-parameter-polyfill.ts +7 -6
  228. package/src/context/polyfill/polyfill-context.ts +6 -8
  229. package/src/context/polyfill/polyfill-table.ts +16 -14
  230. package/src/context/polyfill/polyfill-vertex-array-object.ts +2 -0
  231. package/src/context/state-tracker/track-context-state.ts +13 -12
  232. package/src/context/state-tracker/with-parameters.ts +8 -2
  233. package/src/index.ts +28 -26
  234. package/src/types/webgl.ts +10 -7
  235. package/dist/bundle.d.ts +0 -2
  236. package/dist/bundle.d.ts.map +0 -1
  237. package/dist/bundle.js +0 -5
  238. package/dist/bundle.js.map +0 -1
  239. package/dist/context/context/context-state.d.ts +0 -18
  240. package/dist/context/context/context-state.d.ts.map +0 -1
  241. package/dist/context/context/context-state.js +0 -26
  242. package/dist/context/context/context-state.js.map +0 -1
  243. package/dist/context/context/create-context.d.ts.map +0 -1
  244. package/dist/context/context/create-context.js.map +0 -1
  245. package/dist/context/context/device-pixels.d.ts +0 -25
  246. package/dist/context/context/device-pixels.d.ts.map +0 -1
  247. package/dist/context/context/device-pixels.js +0 -98
  248. package/dist/context/context/device-pixels.js.map +0 -1
  249. package/dist/es5/adapter/converters/device-parameters.js +0 -170
  250. package/dist/es5/adapter/converters/device-parameters.js.map +0 -1
  251. package/dist/es5/adapter/converters/renderbuffer-formats.js +0 -163
  252. package/dist/es5/adapter/converters/renderbuffer-formats.js.map +0 -1
  253. package/dist/es5/adapter/converters/sampler-parameters.js +0 -226
  254. package/dist/es5/adapter/converters/sampler-parameters.js.map +0 -1
  255. package/dist/es5/adapter/converters/texture-formats.js +0 -1031
  256. package/dist/es5/adapter/converters/texture-formats.js.map +0 -1
  257. package/dist/es5/adapter/converters/vertex-formats.js +0 -45
  258. package/dist/es5/adapter/converters/vertex-formats.js.map +0 -1
  259. package/dist/es5/adapter/device-helpers/device-features.js +0 -144
  260. package/dist/es5/adapter/device-helpers/device-features.js.map +0 -1
  261. package/dist/es5/adapter/device-helpers/device-limits.js +0 -64
  262. package/dist/es5/adapter/device-helpers/device-limits.js.map +0 -1
  263. package/dist/es5/adapter/device-helpers/get-device-info.js +0 -55
  264. package/dist/es5/adapter/device-helpers/get-device-info.js.map +0 -1
  265. package/dist/es5/adapter/device-helpers/is-old-ie.js +0 -16
  266. package/dist/es5/adapter/device-helpers/is-old-ie.js.map +0 -1
  267. package/dist/es5/adapter/helpers/attribute-utils.js +0 -91
  268. package/dist/es5/adapter/helpers/attribute-utils.js.map +0 -1
  269. package/dist/es5/adapter/helpers/get-shader-layout.js +0 -371
  270. package/dist/es5/adapter/helpers/get-shader-layout.js.map +0 -1
  271. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js +0 -72
  272. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  273. package/dist/es5/adapter/helpers/set-uniform.js +0 -125
  274. package/dist/es5/adapter/helpers/set-uniform.js.map +0 -1
  275. package/dist/es5/adapter/helpers/uniforms.js +0 -112
  276. package/dist/es5/adapter/helpers/uniforms.js.map +0 -1
  277. package/dist/es5/adapter/objects/constants-to-keys.js +0 -54
  278. package/dist/es5/adapter/objects/constants-to-keys.js.map +0 -1
  279. package/dist/es5/adapter/objects/webgl-renderbuffer.js +0 -150
  280. package/dist/es5/adapter/objects/webgl-renderbuffer.js.map +0 -1
  281. package/dist/es5/adapter/objects/webgl-resource.js +0 -292
  282. package/dist/es5/adapter/objects/webgl-resource.js.map +0 -1
  283. package/dist/es5/adapter/objects/webgl-vertex-array-object.js +0 -137
  284. package/dist/es5/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  285. package/dist/es5/adapter/resources/webgl-buffer.js +0 -243
  286. package/dist/es5/adapter/resources/webgl-buffer.js.map +0 -1
  287. package/dist/es5/adapter/resources/webgl-command-buffer.js +0 -96
  288. package/dist/es5/adapter/resources/webgl-command-buffer.js.map +0 -1
  289. package/dist/es5/adapter/resources/webgl-command-encoder.js +0 -98
  290. package/dist/es5/adapter/resources/webgl-command-encoder.js.map +0 -1
  291. package/dist/es5/adapter/resources/webgl-external-texture.js +0 -2
  292. package/dist/es5/adapter/resources/webgl-external-texture.js.map +0 -1
  293. package/dist/es5/adapter/resources/webgl-framebuffer.js +0 -345
  294. package/dist/es5/adapter/resources/webgl-framebuffer.js.map +0 -1
  295. package/dist/es5/adapter/resources/webgl-render-pass.js +0 -61
  296. package/dist/es5/adapter/resources/webgl-render-pass.js.map +0 -1
  297. package/dist/es5/adapter/resources/webgl-render-pipeline.js +0 -505
  298. package/dist/es5/adapter/resources/webgl-render-pipeline.js.map +0 -1
  299. package/dist/es5/adapter/resources/webgl-sampler.js +0 -96
  300. package/dist/es5/adapter/resources/webgl-sampler.js.map +0 -1
  301. package/dist/es5/adapter/resources/webgl-shader.js +0 -149
  302. package/dist/es5/adapter/resources/webgl-shader.js.map +0 -1
  303. package/dist/es5/adapter/resources/webgl-texture.js +0 -986
  304. package/dist/es5/adapter/resources/webgl-texture.js.map +0 -1
  305. package/dist/es5/adapter/webgl-canvas-context.js +0 -97
  306. package/dist/es5/adapter/webgl-canvas-context.js.map +0 -1
  307. package/dist/es5/adapter/webgl-device.js +0 -399
  308. package/dist/es5/adapter/webgl-device.js.map +0 -1
  309. package/dist/es5/bundle.js +0 -7
  310. package/dist/es5/bundle.js.map +0 -1
  311. package/dist/es5/classic/accessor.js +0 -181
  312. package/dist/es5/classic/accessor.js.map +0 -1
  313. package/dist/es5/classic/buffer.js +0 -470
  314. package/dist/es5/classic/buffer.js.map +0 -1
  315. package/dist/es5/classic/typed-array-utils.js +0 -126
  316. package/dist/es5/classic/typed-array-utils.js.map +0 -1
  317. package/dist/es5/context/context/context-state.js +0 -31
  318. package/dist/es5/context/context/context-state.js.map +0 -1
  319. package/dist/es5/context/context/create-context.js +0 -69
  320. package/dist/es5/context/context/create-context.js.map +0 -1
  321. package/dist/es5/context/context/device-pixels.js +0 -115
  322. package/dist/es5/context/context/device-pixels.js.map +0 -1
  323. package/dist/es5/context/context/webgl-checks.js +0 -54
  324. package/dist/es5/context/context/webgl-checks.js.map +0 -1
  325. package/dist/es5/context/debug/spector.js +0 -133
  326. package/dist/es5/context/debug/spector.js.map +0 -1
  327. package/dist/es5/context/debug/webgl-developer-tools.js +0 -198
  328. package/dist/es5/context/debug/webgl-developer-tools.js.map +0 -1
  329. package/dist/es5/context/parameters/unified-parameter-api.js +0 -97
  330. package/dist/es5/context/parameters/unified-parameter-api.js.map +0 -1
  331. package/dist/es5/context/parameters/webgl-parameter-tables.js +0 -392
  332. package/dist/es5/context/parameters/webgl-parameter-tables.js.map +0 -1
  333. package/dist/es5/context/polyfill/get-parameter-polyfill.js +0 -81
  334. package/dist/es5/context/polyfill/get-parameter-polyfill.js.map +0 -1
  335. package/dist/es5/context/polyfill/polyfill-context.js +0 -135
  336. package/dist/es5/context/polyfill/polyfill-context.js.map +0 -1
  337. package/dist/es5/context/polyfill/polyfill-table.js +0 -166
  338. package/dist/es5/context/polyfill/polyfill-table.js.map +0 -1
  339. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js +0 -341
  340. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  341. package/dist/es5/context/state-tracker/deep-array-equal.js +0 -28
  342. package/dist/es5/context/state-tracker/deep-array-equal.js.map +0 -1
  343. package/dist/es5/context/state-tracker/track-context-state.js +0 -211
  344. package/dist/es5/context/state-tracker/track-context-state.js.map +0 -1
  345. package/dist/es5/context/state-tracker/with-parameters.js +0 -44
  346. package/dist/es5/context/state-tracker/with-parameters.js.map +0 -1
  347. package/dist/es5/index.js +0 -276
  348. package/dist/es5/index.js.map +0 -1
  349. package/dist/es5/init.js +0 -10
  350. package/dist/es5/init.js.map +0 -1
  351. package/dist/es5/types/webgl.js +0 -6
  352. package/dist/es5/types/webgl.js.map +0 -1
  353. package/dist/es5/types.js +0 -2
  354. package/dist/es5/types.js.map +0 -1
  355. package/dist/esm/adapter/converters/device-parameters.js +0 -155
  356. package/dist/esm/adapter/converters/device-parameters.js.map +0 -1
  357. package/dist/esm/adapter/converters/renderbuffer-formats.js +0 -185
  358. package/dist/esm/adapter/converters/renderbuffer-formats.js.map +0 -1
  359. package/dist/esm/adapter/converters/sampler-parameters.js +0 -208
  360. package/dist/esm/adapter/converters/sampler-parameters.js.map +0 -1
  361. package/dist/esm/adapter/converters/texture-formats.js +0 -954
  362. package/dist/esm/adapter/converters/texture-formats.js.map +0 -1
  363. package/dist/esm/adapter/converters/vertex-formats.js +0 -35
  364. package/dist/esm/adapter/converters/vertex-formats.js.map +0 -1
  365. package/dist/esm/adapter/device-helpers/device-features.js +0 -102
  366. package/dist/esm/adapter/device-helpers/device-features.js.map +0 -1
  367. package/dist/esm/adapter/device-helpers/device-limits.js +0 -91
  368. package/dist/esm/adapter/device-helpers/device-limits.js.map +0 -1
  369. package/dist/esm/adapter/device-helpers/get-device-info.js +0 -44
  370. package/dist/esm/adapter/device-helpers/get-device-info.js.map +0 -1
  371. package/dist/esm/adapter/device-helpers/is-old-ie.js +0 -8
  372. package/dist/esm/adapter/device-helpers/is-old-ie.js.map +0 -1
  373. package/dist/esm/adapter/helpers/attribute-utils.js +0 -81
  374. package/dist/esm/adapter/helpers/attribute-utils.js.map +0 -1
  375. package/dist/esm/adapter/helpers/get-shader-layout.js +0 -306
  376. package/dist/esm/adapter/helpers/get-shader-layout.js.map +0 -1
  377. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js +0 -37
  378. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  379. package/dist/esm/adapter/helpers/set-uniform.js +0 -115
  380. package/dist/esm/adapter/helpers/set-uniform.js.map +0 -1
  381. package/dist/esm/adapter/helpers/uniforms.js +0 -99
  382. package/dist/esm/adapter/helpers/uniforms.js.map +0 -1
  383. package/dist/esm/adapter/objects/constants-to-keys.js +0 -42
  384. package/dist/esm/adapter/objects/constants-to-keys.js.map +0 -1
  385. package/dist/esm/adapter/objects/webgl-renderbuffer.js +0 -94
  386. package/dist/esm/adapter/objects/webgl-renderbuffer.js.map +0 -1
  387. package/dist/esm/adapter/objects/webgl-resource.js +0 -216
  388. package/dist/esm/adapter/objects/webgl-resource.js.map +0 -1
  389. package/dist/esm/adapter/objects/webgl-vertex-array-object.js +0 -84
  390. package/dist/esm/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  391. package/dist/esm/adapter/resources/webgl-buffer.js +0 -164
  392. package/dist/esm/adapter/resources/webgl-buffer.js.map +0 -1
  393. package/dist/esm/adapter/resources/webgl-command-buffer.js +0 -65
  394. package/dist/esm/adapter/resources/webgl-command-buffer.js.map +0 -1
  395. package/dist/esm/adapter/resources/webgl-command-encoder.js +0 -53
  396. package/dist/esm/adapter/resources/webgl-command-encoder.js.map +0 -1
  397. package/dist/esm/adapter/resources/webgl-external-texture.js +0 -2
  398. package/dist/esm/adapter/resources/webgl-external-texture.js.map +0 -1
  399. package/dist/esm/adapter/resources/webgl-framebuffer.js +0 -265
  400. package/dist/esm/adapter/resources/webgl-framebuffer.js.map +0 -1
  401. package/dist/esm/adapter/resources/webgl-render-pass.js +0 -19
  402. package/dist/esm/adapter/resources/webgl-render-pass.js.map +0 -1
  403. package/dist/esm/adapter/resources/webgl-render-pipeline.js +0 -400
  404. package/dist/esm/adapter/resources/webgl-render-pipeline.js.map +0 -1
  405. package/dist/esm/adapter/resources/webgl-sampler.js +0 -50
  406. package/dist/esm/adapter/resources/webgl-sampler.js.map +0 -1
  407. package/dist/esm/adapter/resources/webgl-shader.js +0 -75
  408. package/dist/esm/adapter/resources/webgl-shader.js.map +0 -1
  409. package/dist/esm/adapter/resources/webgl-texture.js +0 -831
  410. package/dist/esm/adapter/resources/webgl-texture.js.map +0 -1
  411. package/dist/esm/adapter/webgl-canvas-context.js +0 -54
  412. package/dist/esm/adapter/webgl-canvas-context.js.map +0 -1
  413. package/dist/esm/adapter/webgl-device.js +0 -280
  414. package/dist/esm/adapter/webgl-device.js.map +0 -1
  415. package/dist/esm/bundle.js +0 -5
  416. package/dist/esm/bundle.js.map +0 -1
  417. package/dist/esm/classic/accessor.js +0 -144
  418. package/dist/esm/classic/accessor.js.map +0 -1
  419. package/dist/esm/classic/buffer.js +0 -384
  420. package/dist/esm/classic/buffer.js.map +0 -1
  421. package/dist/esm/classic/typed-array-utils.js +0 -112
  422. package/dist/esm/classic/typed-array-utils.js.map +0 -1
  423. package/dist/esm/context/context/context-state.js +0 -26
  424. package/dist/esm/context/context/context-state.js.map +0 -1
  425. package/dist/esm/context/context/create-context.js +0 -49
  426. package/dist/esm/context/context/create-context.js.map +0 -1
  427. package/dist/esm/context/context/device-pixels.js +0 -98
  428. package/dist/esm/context/context/device-pixels.js.map +0 -1
  429. package/dist/esm/context/context/webgl-checks.js +0 -34
  430. package/dist/esm/context/context/webgl-checks.js.map +0 -1
  431. package/dist/esm/context/debug/spector.js +0 -76
  432. package/dist/esm/context/debug/spector.js.map +0 -1
  433. package/dist/esm/context/debug/webgl-developer-tools.js +0 -121
  434. package/dist/esm/context/debug/webgl-developer-tools.js.map +0 -1
  435. package/dist/esm/context/parameters/unified-parameter-api.js +0 -65
  436. package/dist/esm/context/parameters/unified-parameter-api.js.map +0 -1
  437. package/dist/esm/context/parameters/webgl-parameter-tables.js +0 -445
  438. package/dist/esm/context/parameters/webgl-parameter-tables.js.map +0 -1
  439. package/dist/esm/context/polyfill/get-parameter-polyfill.js +0 -91
  440. package/dist/esm/context/polyfill/get-parameter-polyfill.js.map +0 -1
  441. package/dist/esm/context/polyfill/polyfill-context.js +0 -92
  442. package/dist/esm/context/polyfill/polyfill-context.js.map +0 -1
  443. package/dist/esm/context/polyfill/polyfill-table.js +0 -160
  444. package/dist/esm/context/polyfill/polyfill-table.js.map +0 -1
  445. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js +0 -335
  446. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  447. package/dist/esm/context/state-tracker/deep-array-equal.js +0 -21
  448. package/dist/esm/context/state-tracker/deep-array-equal.js.map +0 -1
  449. package/dist/esm/context/state-tracker/track-context-state.js +0 -183
  450. package/dist/esm/context/state-tracker/track-context-state.js.map +0 -1
  451. package/dist/esm/context/state-tracker/with-parameters.js +0 -36
  452. package/dist/esm/context/state-tracker/with-parameters.js.map +0 -1
  453. package/dist/esm/index.js +0 -27
  454. package/dist/esm/index.js.map +0 -1
  455. package/dist/esm/init.js +0 -4
  456. package/dist/esm/init.js.map +0 -1
  457. package/dist/esm/types/webgl.js +0 -2
  458. package/dist/esm/types/webgl.js.map +0 -1
  459. package/dist/esm/types.js +0 -2
  460. package/dist/esm/types.js.map +0 -1
  461. package/dist/init.d.ts +0 -2
  462. package/dist/init.d.ts.map +0 -1
  463. package/dist/init.js +0 -4
  464. package/dist/init.js.map +0 -1
  465. package/src/bundle.ts +0 -4
  466. package/src/context/context/context-state.ts +0 -41
  467. package/src/context/context/device-pixels.ts +0 -152
  468. package/src/init.ts +0 -4
@@ -1,93 +1,71 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
2
  import { RenderPipeline, cast, log, decodeVertexFormat } from '@luma.gl/api';
3
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 } 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';
4
+ import { getWebGLDataType } from "../converters/texture-formats.js";
5
+ import { getShaderLayout } from "../helpers/get-shader-layout.js";
6
+ import { withDeviceParameters, withGLParameters } from "../converters/device-parameters.js";
7
+ import { setUniform } from "../helpers/set-uniform.js";
8
+ import { WEBGLBuffer } from "./webgl-buffer.js";
9
+ import { WEBGLTexture } from "./webgl-texture.js";
10
+ import { WEBGLVertexArrayObject } from "../objects/webgl-vertex-array-object.js";
11
11
  const LOG_PROGRAM_PERF_PRIORITY = 4;
12
- export default class WEBGLRenderPipeline extends RenderPipeline {
12
+ export class WEBGLRenderPipeline extends RenderPipeline {
13
13
  constructor(device, props) {
14
14
  super(device, props);
15
-
16
15
  _defineProperty(this, "device", void 0);
17
-
18
16
  _defineProperty(this, "handle", void 0);
19
-
20
17
  _defineProperty(this, "vs", void 0);
21
-
22
18
  _defineProperty(this, "fs", void 0);
23
-
24
19
  _defineProperty(this, "layout", void 0);
25
-
26
- _defineProperty(this, "varyings", void 0);
27
-
20
+ _defineProperty(this, "varyings", null);
28
21
  _defineProperty(this, "vertexArrayObject", void 0);
29
-
30
22
  _defineProperty(this, "_indexBuffer", void 0);
31
-
32
23
  _defineProperty(this, "uniforms", {});
33
-
34
24
  _defineProperty(this, "bindings", {});
35
-
36
25
  _defineProperty(this, "_textureUniforms", {});
37
-
38
26
  _defineProperty(this, "_textureIndexCounter", 0);
39
-
40
27
  _defineProperty(this, "_uniformCount", 0);
41
-
42
- _defineProperty(this, "_uniformSetters", void 0);
43
-
28
+ _defineProperty(this, "_uniformSetters", {});
44
29
  this.device = device;
45
30
  this.handle = this.props.handle || this.device.gl.createProgram();
46
- this.handle.__SPECTOR_Metadata = {
31
+ this.device.setSpectorMetadata(this.handle, {
47
32
  id: this.props.id
48
- };
33
+ });
49
34
  this.vs = cast(props.vs);
50
35
  this.fs = cast(props.fs);
51
36
  const {
52
37
  varyings,
53
38
  bufferMode = GL.SEPARATE_ATTRIBS
54
39
  } = props;
55
-
56
40
  if (varyings && varyings.length > 0) {
41
+ var _this$device$gl;
57
42
  this.device.assertWebGL2();
58
43
  this.varyings = varyings;
59
- this.device.gl2.transformFeedbackVaryings(this.handle, varyings, bufferMode);
44
+ (_this$device$gl = this.device.gl2) === null || _this$device$gl === void 0 ? void 0 : _this$device$gl.transformFeedbackVaryings(this.handle, varyings, bufferMode);
60
45
  }
61
-
62
46
  this._compileAndLink();
63
-
64
47
  this.layout = props.layout || getShaderLayout(this.device.gl, this.handle);
65
48
  this.vertexArrayObject = new WEBGLVertexArrayObject(this.device);
66
49
  }
67
-
68
50
  destroy() {
69
51
  if (this.handle) {
70
52
  this.device.gl.deleteProgram(this.handle);
71
- this.handle = null;
53
+ this.destroyed = true;
72
54
  }
73
55
  }
74
-
75
56
  setIndexBuffer(indexBuffer) {
76
57
  const webglBuffer = cast(indexBuffer);
77
58
  this.vertexArrayObject.setElementBuffer(webglBuffer);
78
59
  this._indexBuffer = indexBuffer;
79
60
  }
80
-
81
61
  setAttributes(attributes) {
82
62
  for (const [name, buffer] of Object.entries(attributes)) {
83
63
  const webglBuffer = cast(buffer);
84
64
  const attribute = getAttributeLayout(this.layout, name);
85
-
86
65
  if (!attribute) {
87
66
  log.warn("Ignoring buffer supplied for unknown attribute \"".concat(name, "\" in pipeline \"").concat(this.id, "\" (buffer \"").concat(buffer.id, "\")"))();
88
67
  continue;
89
68
  }
90
-
91
69
  const decoded = decodeVertexFormat(attribute.format);
92
70
  const {
93
71
  type: typeString,
@@ -105,111 +83,90 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
105
83
  offset: 0,
106
84
  normalized,
107
85
  integer,
108
- divisor: attribute.stepMode === 'instance' ? 1 : 0
86
+ divisor
109
87
  });
110
88
  }
111
89
  }
112
-
113
90
  setBindings(bindings) {
114
91
  for (const [name, value] of Object.entries(bindings)) {
115
92
  const binding = this.layout.bindings.find(binding => binding.name === name);
116
-
117
93
  if (!binding) {
118
94
  log.warn("Unknown binding ".concat(name, " in render pipeline ").concat(this.id))();
95
+ continue;
119
96
  }
120
-
121
97
  if (!value) {
122
98
  log.warn("Unsetting binding ".concat(name, " in render pipeline ").concat(this.id))();
123
99
  }
124
-
125
100
  switch (binding.type) {
126
101
  case 'uniform':
127
102
  if (!(value instanceof WEBGLBuffer) && !(value.buffer instanceof WEBGLBuffer)) {
128
103
  throw new Error('buffer value');
129
104
  }
130
-
131
105
  break;
132
-
133
106
  case 'texture':
134
107
  if (!(value instanceof WEBGLTexture)) {
135
108
  throw new Error('texture value');
136
109
  }
137
-
138
110
  break;
139
-
140
111
  case 'sampler':
141
112
  log.warn("Ignoring sampler ".concat(name))();
142
113
  break;
143
-
144
114
  default:
145
115
  throw new Error(binding.type);
146
116
  }
147
-
148
117
  this.bindings[name] = value;
149
118
  }
150
119
  }
151
-
152
120
  setUniforms(uniforms) {
153
121
  Object.assign(this.uniforms, uniforms);
154
122
  }
155
-
156
123
  draw(options) {
157
124
  var _this$_indexBuffer;
158
-
159
125
  const {
160
126
  renderPass = this.device.getDefaultRenderPass(),
161
127
  vertexCount,
162
- indexCount,
163
128
  instanceCount,
164
- firstVertex = 0,
165
- firstIndex,
166
- firstInstance,
167
- baseVertex
129
+ firstVertex = 0
168
130
  } = options;
169
131
  const drawMode = getDrawMode(this.props.topology);
170
132
  const isIndexed = Boolean(this._indexBuffer);
171
133
  const indexType = ((_this$_indexBuffer = this._indexBuffer) === null || _this$_indexBuffer === void 0 ? void 0 : _this$_indexBuffer.props.indexType) === 'uint16' ? GL.UNSIGNED_SHORT : GL.UNSIGNED_INT;
172
- const isInstanced = options.instanceCount > 0;
173
-
134
+ const isInstanced = Number(options.instanceCount) > 0;
174
135
  if (!this._areTexturesRenderable() || options.vertexCount === 0) {
175
136
  return false;
176
137
  }
177
-
178
138
  this.device.gl.useProgram(this.handle);
179
139
  this.vertexArrayObject.bind(() => {
180
- const parameters = { ...this.props.parameters,
181
- framebuffer: renderPass.props.framebuffer
182
- };
183
140
  const primitiveMode = getGLPrimitive(this.props.topology);
184
141
  const transformFeedback = null;
185
-
186
142
  if (transformFeedback) {
187
143
  transformFeedback.begin(primitiveMode);
188
144
  }
189
-
190
145
  this._applyBindings();
191
-
192
146
  this._applyUniforms();
193
-
194
- withDeviceParameters(this.device, parameters, () => {
195
- if (isIndexed && isInstanced) {
196
- this.device.gl2.drawElementsInstanced(drawMode, vertexCount, indexType, firstVertex, instanceCount);
197
- } else if (isIndexed) {
198
- this.device.gl.drawElements(drawMode, vertexCount, indexType, firstVertex);
199
- } else if (isInstanced) {
200
- this.device.gl2.drawArraysInstanced(drawMode, firstVertex, vertexCount, instanceCount);
201
- } else {
202
- this.device.gl.drawArrays(drawMode, firstVertex, vertexCount);
147
+ withDeviceParameters(this.device, this.props.parameters, () => {
148
+ withGLParameters(this.device, {
149
+ framebuffer: renderPass.props.framebuffer
150
+ }, () => {
151
+ if (isIndexed && isInstanced) {
152
+ var _this$device$gl2;
153
+ (_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);
154
+ } else if (isIndexed) {
155
+ this.device.gl.drawElements(drawMode, vertexCount || 0, indexType, firstVertex);
156
+ } else if (isInstanced) {
157
+ var _this$device$gl3;
158
+ (_this$device$gl3 = this.device.gl2) === null || _this$device$gl3 === void 0 ? void 0 : _this$device$gl3.drawArraysInstanced(drawMode, firstVertex, vertexCount || 0, instanceCount || 0);
159
+ } else {
160
+ this.device.gl.drawArrays(drawMode, firstVertex, vertexCount || 0);
161
+ }
162
+ });
163
+ if (transformFeedback) {
164
+ transformFeedback.end();
203
165
  }
204
166
  });
205
-
206
- if (transformFeedback) {
207
- transformFeedback.end();
208
- }
209
167
  });
210
168
  return true;
211
169
  }
212
-
213
170
  _compileAndLink() {
214
171
  const {
215
172
  gl
@@ -219,98 +176,80 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
219
176
  log.time(LOG_PROGRAM_PERF_PRIORITY, "linkProgram for ".concat(this.id))();
220
177
  gl.linkProgram(this.handle);
221
178
  log.timeEnd(LOG_PROGRAM_PERF_PRIORITY, "linkProgram for ".concat(this.id))();
222
-
223
179
  if (gl.debug || log.level > 0) {
224
180
  const linked = gl.getProgramParameter(this.handle, gl.LINK_STATUS);
225
-
226
181
  if (!linked) {
227
182
  throw new Error("Error linking: ".concat(gl.getProgramInfoLog(this.handle)));
228
183
  }
229
-
230
184
  gl.validateProgram(this.handle);
231
185
  const validated = gl.getProgramParameter(this.handle, gl.VALIDATE_STATUS);
232
-
233
186
  if (!validated) {
234
187
  throw new Error("Error validating: ".concat(gl.getProgramInfoLog(this.handle)));
235
188
  }
236
189
  }
237
190
  }
238
-
239
191
  _areTexturesRenderable() {
240
192
  let texturesRenderable = true;
241
-
242
- for (const [name, texture] of Object.entries(this._textureUniforms)) {
193
+ for (const [, texture] of Object.entries(this._textureUniforms)) {
243
194
  texture.update();
244
195
  texturesRenderable = texturesRenderable && texture.loaded;
245
196
  }
246
-
247
- for (const [name, texture] of Object.entries(this.bindings)) {
197
+ for (const [, texture] of Object.entries(this.bindings)) {
248
198
  if (texture.loaded !== undefined) {
249
199
  texturesRenderable = texturesRenderable && texture.loaded;
250
200
  }
251
201
  }
252
-
253
202
  return texturesRenderable;
254
203
  }
255
-
256
204
  _applyBindings() {
257
205
  this.device.gl.useProgram(this.handle);
258
206
  const {
259
207
  gl2
260
208
  } = this.device;
209
+ if (!gl2) {
210
+ throw new Error('bindings');
211
+ }
261
212
  let textureUnit = 0;
262
213
  let uniformBufferIndex = 0;
263
-
264
214
  for (const binding of this.layout.bindings) {
265
215
  const value = this.bindings[binding.name];
266
-
267
216
  if (!value) {
268
217
  throw new Error("No value for binding ".concat(binding.name, " in ").concat(this.id));
269
218
  }
270
-
271
219
  switch (binding.type) {
272
220
  case 'uniform':
273
221
  const {
274
222
  name
275
223
  } = binding;
276
224
  const location = gl2.getUniformBlockIndex(this.handle, name);
277
-
278
225
  if (location === GL.INVALID_INDEX) {
279
226
  throw new Error("Invalid uniform block name ".concat(name));
280
227
  }
281
-
282
228
  gl2.uniformBlockBinding(this.handle, uniformBufferIndex, location);
283
-
284
229
  if (value instanceof WEBGLBuffer) {
285
230
  gl2.bindBufferBase(GL.UNIFORM_BUFFER, uniformBufferIndex, value.handle);
286
231
  } else {
287
232
  gl2.bindBufferRange(GL.UNIFORM_BUFFER, uniformBufferIndex, value.buffer.handle, value.offset || 0, value.size || value.buffer.byteLength - value.offset);
288
233
  }
289
-
290
234
  uniformBufferIndex += 1;
291
235
  break;
292
-
293
236
  case 'texture':
294
237
  if (!(value instanceof WEBGLTexture)) {
295
238
  throw new Error('texture');
296
239
  }
297
-
298
240
  const texture = value;
299
241
  gl2.activeTexture(GL.TEXTURE0 + textureUnit);
300
242
  gl2.bindTexture(texture.target, texture.handle);
301
243
  textureUnit += 1;
302
244
  break;
303
-
304
245
  case 'sampler':
305
246
  break;
306
-
307
247
  case 'storage':
308
248
  case 'read-only-storage':
309
249
  throw new Error("binding type '".concat(binding.type, "' not supported in WebGL"));
310
250
  }
311
251
  }
312
252
  }
313
-
314
253
  _applyUniforms() {
315
254
  for (const uniformLayout of this.layout.uniforms || []) {
316
255
  const {
@@ -320,81 +259,53 @@ export default class WEBGLRenderPipeline extends RenderPipeline {
320
259
  textureUnit
321
260
  } = uniformLayout;
322
261
  const value = this.uniforms[name] || textureUnit;
323
-
324
262
  if (value !== undefined) {
325
263
  setUniform(this.device.gl, location, type, value);
326
264
  }
327
265
  }
328
266
  }
329
-
330
267
  }
331
-
332
268
  function getDrawMode(topology) {
333
269
  switch (topology) {
334
270
  case 'point-list':
335
271
  return GL.POINTS;
336
-
337
272
  case 'line-list':
338
273
  return GL.LINES;
339
-
340
274
  case 'line-strip':
341
275
  return GL.LINE_STRIP;
342
-
276
+ case 'line-loop':
277
+ return GL.LINE_LOOP;
343
278
  case 'triangle-list':
344
279
  return GL.TRIANGLES;
345
-
346
280
  case 'triangle-strip':
347
281
  return GL.TRIANGLE_STRIP;
348
-
282
+ case 'triangle-fan':
283
+ return GL.TRIANGLE_FAN;
349
284
  default:
350
285
  throw new Error(topology);
351
286
  }
352
287
  }
353
-
354
288
  function getGLPrimitive(topology) {
355
289
  switch (topology) {
356
290
  case 'point-list':
357
291
  return GL.POINTS;
358
-
359
292
  case 'line-list':
360
293
  return GL.LINES;
361
-
362
294
  case 'line-strip':
363
295
  return GL.LINES;
364
-
296
+ case 'line-loop':
297
+ return GL.LINES;
365
298
  case 'triangle-list':
366
299
  return GL.TRIANGLES;
367
-
368
300
  case 'triangle-strip':
369
301
  return GL.TRIANGLES;
370
-
302
+ case 'triangle-fan':
303
+ return GL.TRIANGLES;
371
304
  default:
372
305
  throw new Error(topology);
373
306
  }
374
307
  }
375
-
376
- function getAttributesByLocation(attributes, layout) {
377
- const byLocation = {};
378
-
379
- for (const [name, buffer] of Object.entries(attributes)) {
380
- const attribute = getAttributeLayout(layout, name);
381
- byLocation[attribute.location] = buffer;
382
- }
383
-
384
- return byLocation;
385
- }
386
-
387
308
  function getAttributeLayout(layout, name) {
388
- return layout.attributes.find(binding => binding.name === name);
389
- }
390
-
391
- function getBindingLayout(layout, name) {
392
- const binding = layout.bindings.find(binding => binding.name === name);
393
-
394
- if (!binding) {
395
- throw new Error("Unknown binding ".concat(name));
396
- }
397
-
398
- return binding;
309
+ return layout.attributes.find(binding => binding.name === name) || null;
399
310
  }
400
311
  //# sourceMappingURL=webgl-render-pipeline.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/adapter/resources/webgl-render-pipeline.ts"],"names":["RenderPipeline","cast","log","decodeVertexFormat","GL","getWebGLDataType","getShaderLayout","withDeviceParameters","setUniform","WEBGLBuffer","WEBGLTexture","WEBGLVertexArrayObject","LOG_PROGRAM_PERF_PRIORITY","WEBGLRenderPipeline","constructor","device","props","handle","gl","createProgram","__SPECTOR_Metadata","id","vs","fs","varyings","bufferMode","SEPARATE_ATTRIBS","length","assertWebGL2","gl2","transformFeedbackVaryings","_compileAndLink","layout","vertexArrayObject","destroy","deleteProgram","setIndexBuffer","indexBuffer","webglBuffer","setElementBuffer","_indexBuffer","setAttributes","attributes","name","buffer","Object","entries","attribute","getAttributeLayout","warn","decoded","format","type","typeString","components","size","byteLength","stride","normalized","integer","divisor","stepMode","setBuffer","location","offset","setBindings","bindings","value","binding","find","Error","setUniforms","uniforms","assign","draw","options","renderPass","getDefaultRenderPass","vertexCount","indexCount","instanceCount","firstVertex","firstIndex","firstInstance","baseVertex","drawMode","getDrawMode","topology","isIndexed","Boolean","indexType","UNSIGNED_SHORT","UNSIGNED_INT","isInstanced","_areTexturesRenderable","useProgram","bind","parameters","framebuffer","primitiveMode","getGLPrimitive","transformFeedback","begin","_applyBindings","_applyUniforms","drawElementsInstanced","drawElements","drawArraysInstanced","drawArrays","end","attachShader","time","linkProgram","timeEnd","debug","level","linked","getProgramParameter","LINK_STATUS","getProgramInfoLog","validateProgram","validated","VALIDATE_STATUS","texturesRenderable","texture","_textureUniforms","update","loaded","undefined","textureUnit","uniformBufferIndex","getUniformBlockIndex","INVALID_INDEX","uniformBlockBinding","bindBufferBase","UNIFORM_BUFFER","bindBufferRange","activeTexture","TEXTURE0","bindTexture","target","uniformLayout","POINTS","LINES","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","getAttributesByLocation","byLocation","getBindingLayout"],"mappings":"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","sourcesContent":["import type {\n RenderPipelineProps,\n RenderPipelineParameters,\n RenderPass,\n Buffer,\n Binding,\n ShaderLayout,\n PrimitiveTopology,\n BindingLayout,\n AttributeLayout\n} from '@luma.gl/api';\nimport {RenderPipeline, cast, log, decodeVertexFormat} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport {getWebGLDataType} from '../converters/texture-formats';\nimport {getShaderLayout} from '../helpers/get-shader-layout';\nimport {withDeviceParameters} from '../converters/device-parameters';\nimport {setUniform} from '../helpers/set-uniform';\n// import {copyUniform, checkUniformValues} from '../../classes/uniforms';\n\nimport WebGLDevice from '../webgl-device';\nimport WEBGLBuffer from './webgl-buffer';\nimport WEBGLShader from './webgl-shader';\nimport WEBGLTexture from './webgl-texture';\nimport WEBGLVertexArrayObject from '../objects/webgl-vertex-array-object';\n\nconst LOG_PROGRAM_PERF_PRIORITY = 4;\n\n/** Creates a new render pipeline */\nexport default class WEBGLRenderPipeline extends RenderPipeline {\n device: WebGLDevice;\n handle: WebGLProgram;\n vs: WEBGLShader;\n fs: WEBGLShader;\n layout: ShaderLayout;\n\n // configuration: ProgramConfiguration;\n // Experimental flag to avoid deleting Program object while it is cached\n varyings: string[];\n vertexArrayObject: WEBGLVertexArrayObject;\n _indexBuffer?: Buffer;\n uniforms: Record<string, any> = {};\n bindings: Record<string, any> = {};\n _textureUniforms: Record<string, any> = {};\n _textureIndexCounter: number = 0;\n _uniformCount: number = 0;\n _uniformSetters: Record<string, Function>;\n\n constructor(device: WebGLDevice, props: RenderPipelineProps) {\n super(device, props);\n this.device = device;\n this.handle = this.props.handle || this.device.gl.createProgram();\n // @ts-expect-error\n this.handle.__SPECTOR_Metadata = {id: this.props.id};\n\n // Create shaders if needed\n this.vs = cast<WEBGLShader>(props.vs);\n this.fs = cast<WEBGLShader>(props.fs);\n // assert(this.vs.stage === 'vertex');\n // assert(this.fs.stage === 'fragment');\n\n // Setup varyings if supplied\n // @ts-expect-error WebGL only\n const {varyings, bufferMode = GL.SEPARATE_ATTRIBS} = props;\n if (varyings && varyings.length > 0) {\n this.device.assertWebGL2();\n this.varyings = varyings;\n this.device.gl2.transformFeedbackVaryings(this.handle, varyings, bufferMode);\n }\n\n this._compileAndLink();\n\n this.layout = props.layout || getShaderLayout(this.device.gl, this.handle);\n this.vertexArrayObject = new WEBGLVertexArrayObject(this.device);\n }\n\n destroy(): void {\n if (this.handle) {\n this.device.gl.deleteProgram(this.handle);\n this.handle = null;\n }\n }\n\n setIndexBuffer(indexBuffer: Buffer): void {\n const webglBuffer = cast<WEBGLBuffer>(indexBuffer);\n this.vertexArrayObject.setElementBuffer(webglBuffer);\n this._indexBuffer = indexBuffer;\n }\n\n /** @todo needed for portable model */\n setAttributes(attributes: Record<string, Buffer>): void {\n for (const [name, buffer] of Object.entries(attributes)) {\n const webglBuffer = cast<WEBGLBuffer>(buffer);\n const attribute = getAttributeLayout(this.layout, name);\n if (!attribute) {\n log.warn(`Ignoring buffer supplied for unknown attribute \"${name}\" in pipeline \"${this.id}\" (buffer \"${buffer.id}\")`)();\n continue;\n }\n const decoded = decodeVertexFormat(attribute.format);\n const {type: typeString, components: size, byteLength: stride, normalized, integer} = decoded;\n const divisor = attribute.stepMode === 'instance' ? 1 : 0;\n const type = getWebGLDataType(typeString);\n this.vertexArrayObject.setBuffer(attribute.location, webglBuffer, {\n size,\n type,\n stride,\n offset: 0,\n normalized,\n integer,\n divisor: attribute.stepMode === 'instance' ? 1 : 0\n });\n }\n }\n\n /** @todo needed for portable model */\n setBindings(bindings: Record<string, Binding>): void {\n // if (log.priority >= 2) {\n // checkUniformValues(uniforms, this.id, this._uniformSetters);\n // }\n\n for (const [name, value] of Object.entries(bindings)) {\n const binding = this.layout.bindings.find((binding) => binding.name === name);\n if (!binding) {\n log.warn(`Unknown binding ${name} in render pipeline ${this.id}`)();\n }\n if (!value) {\n log.warn(`Unsetting binding ${name} in render pipeline ${this.id}`)();\n }\n switch (binding.type) {\n case 'uniform':\n // @ts-expect-error\n if (!(value instanceof WEBGLBuffer) && !(value.buffer instanceof WEBGLBuffer)) {\n throw new Error('buffer value');\n }\n break;\n case 'texture':\n if (!(value instanceof WEBGLTexture)) {\n throw new Error('texture value');\n }\n break;\n case 'sampler':\n log.warn(`Ignoring sampler ${name}`)();\n break;\n default:\n throw new Error(binding.type);\n }\n\n this.bindings[name] = value;\n }\n }\n\n setUniforms(uniforms: Record<string, any>) {\n // TODO - check against layout\n Object.assign(this.uniforms, uniforms);\n }\n\n /** @todo needed for portable model\n * @note The WebGL API is offers many ways to draw things\n * This function unifies those ways into a single call using common parameters with sane defaults\n */\n draw(options: {\n renderPass?: RenderPass;\n vertexCount?: number;\n indexCount?: number;\n instanceCount?: number;\n firstVertex?: number;\n firstIndex?: number;\n firstInstance?: number;\n baseVertex?: number;\n }): boolean {\n const {\n renderPass = this.device.getDefaultRenderPass(),\n vertexCount,\n indexCount,\n instanceCount,\n firstVertex = 0,\n firstIndex,\n firstInstance,\n baseVertex\n } = options;\n\n const drawMode = getDrawMode(this.props.topology);\n const isIndexed: boolean = Boolean(this._indexBuffer);\n const indexType = this._indexBuffer?.props.indexType === 'uint16' ? GL.UNSIGNED_SHORT : GL.UNSIGNED_INT;\n const isInstanced: boolean = options.instanceCount > 0;\n\n // Avoid WebGL draw call when not rendering any data or values are incomplete\n // Note: async textures set as uniforms might still be loading.\n // Now that all uniforms have been updated, check if any texture\n // in the uniforms is not yet initialized, then we don't draw\n if (!this._areTexturesRenderable() || options.vertexCount === 0) {\n // (isInstanced && instanceCount === 0)\n return false;\n }\n\n this.device.gl.useProgram(this.handle);\n\n this.vertexArrayObject.bind(() => {\n const parameters = {...this.props.parameters, framebuffer: renderPass.props.framebuffer};\n\n const primitiveMode = getGLPrimitive(this.props.topology);\n const transformFeedback: any = null;\n if (transformFeedback) {\n transformFeedback.begin(primitiveMode);\n }\n\n // We have to apply bindings before every draw call since other draw calls will overwrite\n this._applyBindings();\n this._applyUniforms();\n\n // TODO - double context push/pop\n withDeviceParameters(this.device, parameters, () => {\n // TODO - Use polyfilled WebGL2RenderingContext instead of ANGLE extension\n if (isIndexed && isInstanced) {\n // ANGLE_instanced_arrays extension\n this.device.gl2.drawElementsInstanced(\n drawMode,\n vertexCount,\n indexType,\n firstVertex,\n instanceCount\n );\n // } else if (isIndexed && this.device.isWebGL2 && !isNaN(start) && !isNaN(end)) {\n // this.device.gl2.drawRangeElements(drawMode, start, end, vertexCount, indexType, offset);\n } else if (isIndexed) {\n this.device.gl.drawElements(drawMode, vertexCount, indexType, firstVertex);\n } else if (isInstanced) {\n this.device.gl2.drawArraysInstanced(drawMode, firstVertex, vertexCount, instanceCount);\n } else {\n this.device.gl.drawArrays(drawMode, firstVertex, vertexCount);\n }\n });\n\n if (transformFeedback) {\n transformFeedback.end();\n }\n });\n\n return true;\n }\n\n // setAttributes(attributes: Record<string, Buffer>): void {}\n // setBindings(bindings: Record<string, Binding>): void {}\n\n protected _compileAndLink() {\n const {gl} = this.device;\n gl.attachShader(this.handle, this.vs.handle);\n gl.attachShader(this.handle, this.fs.handle);\n log.time(LOG_PROGRAM_PERF_PRIORITY, `linkProgram for ${this.id}`)();\n gl.linkProgram(this.handle);\n log.timeEnd(LOG_PROGRAM_PERF_PRIORITY, `linkProgram for ${this.id}`)();\n\n // Avoid checking program linking error in production\n // @ts-expect-error\n if (gl.debug || log.level > 0) {\n const linked = gl.getProgramParameter(this.handle, gl.LINK_STATUS);\n if (!linked) {\n throw new Error(`Error linking: ${gl.getProgramInfoLog(this.handle)}`);\n }\n\n gl.validateProgram(this.handle);\n const validated = gl.getProgramParameter(this.handle, gl.VALIDATE_STATUS);\n if (!validated) {\n throw new Error(`Error validating: ${gl.getProgramInfoLog(this.handle)}`);\n }\n }\n }\n\n // PRIVATE METHODS\n\n /**\n * Checks if all texture-values uniforms are renderable (i.e. loaded)\n * Update a texture if needed (e.g. from video)\n * Note: This is currently done before every draw call\n */\n _areTexturesRenderable() {\n let texturesRenderable = true;\n\n for (const [name, texture] of Object.entries(this._textureUniforms)) {\n texture.update();\n texturesRenderable = texturesRenderable && texture.loaded;\n }\n\n for (const [name, texture] of Object.entries(this.bindings)) {\n // texture.update();\n if (texture.loaded !== undefined) {\n texturesRenderable = texturesRenderable && texture.loaded;\n }\n }\n\n return texturesRenderable;\n }\n\n /** Apply any bindings */\n _applyBindings() {\n this.device.gl.useProgram(this.handle);\n\n const {gl2} = this.device;\n\n let textureUnit = 0;\n let uniformBufferIndex = 0;\n for (const binding of this.layout.bindings) {\n const value = this.bindings[binding.name];\n if (!value) {\n throw new Error(`No value for binding ${binding.name} in ${this.id}`);\n }\n switch (binding.type) {\n case 'uniform':\n // Set buffer\n const {name} = binding;\n const location = gl2.getUniformBlockIndex(this.handle, name);\n if (location === GL.INVALID_INDEX) {\n throw new Error(`Invalid uniform block name ${name}`);\n }\n gl2.uniformBlockBinding(this.handle, uniformBufferIndex, location);\n // console.debug(binding, location);\n if (value instanceof WEBGLBuffer) {\n gl2.bindBufferBase(GL.UNIFORM_BUFFER, uniformBufferIndex, value.handle);\n } else {\n gl2.bindBufferRange(\n GL.UNIFORM_BUFFER,\n uniformBufferIndex,\n value.buffer.handle,\n value.offset || 0,\n value.size || value.buffer.byteLength - value.offset\n );\n }\n uniformBufferIndex += 1;\n break;\n\n case 'texture':\n if (!(value instanceof WEBGLTexture)) {\n throw new Error('texture');\n }\n const texture: WEBGLTexture = value;\n gl2.activeTexture(GL.TEXTURE0 + textureUnit);\n gl2.bindTexture(texture.target, texture.handle);\n // gl2.bindSampler(textureUnit, sampler.handle);\n textureUnit += 1;\n break;\n\n case 'sampler':\n // ignore\n break;\n\n case 'storage':\n case 'read-only-storage':\n throw new Error(`binding type '${binding.type}' not supported in WebGL`);\n }\n }\n }\n\n _applyUniforms() {\n for (const uniformLayout of this.layout.uniforms || []) {\n const {name, location, type, textureUnit} = uniformLayout;\n const value = this.uniforms[name] || textureUnit;\n if (value !== undefined) {\n setUniform(this.device.gl, location, type, value);\n }\n }\n }\n}\n\n/** Get the primitive type for transform feedback */\nfunction getDrawMode(\n topology: PrimitiveTopology\n): GL.POINTS | GL.LINES | GL.LINE_STRIP | GL.TRIANGLES | GL.TRIANGLE_STRIP {\n // prettier-ignore\n switch (topology) {\n case 'point-list': return GL.POINTS;\n case 'line-list': return GL.LINES;\n case 'line-strip': return GL.LINE_STRIP;\n case 'triangle-list': return GL.TRIANGLES;\n case 'triangle-strip': return GL.TRIANGLE_STRIP;\n default: throw new Error(topology);\n }\n}\n\n/** Get the primitive type for transform feedback */\nfunction getGLPrimitive(topology: PrimitiveTopology): GL.POINTS | GL.LINES | GL.TRIANGLES {\n // prettier-ignore\n switch (topology) {\n case 'point-list': return GL.POINTS;\n case 'line-list': return GL.LINES;\n case 'line-strip': return GL.LINES;\n case 'triangle-list': return GL.TRIANGLES;\n case 'triangle-strip': return GL.TRIANGLES;\n default: throw new Error(topology);\n }\n}\n\nfunction getAttributesByLocation(\n attributes: Record<string, Buffer>,\n layout: ShaderLayout\n): Record<number, Buffer> {\n const byLocation: Record<number, Buffer> = {};\n for (const [name, buffer] of Object.entries(attributes)) {\n const attribute = getAttributeLayout(layout, name);\n byLocation[attribute.location] = buffer;\n }\n return byLocation;\n}\n\nfunction getAttributeLayout(layout: ShaderLayout, name: string): AttributeLayout | undefined {\n return layout.attributes.find((binding) => binding.name === name);\n}\n\nfunction getBindingLayout(layout: ShaderLayout, name: string): BindingLayout {\n const binding = layout.bindings.find((binding) => binding.name === name);\n if (!binding) {\n throw new Error(`Unknown binding ${name}`);\n }\n return binding;\n}\n"],"file":"webgl-render-pipeline.js"}
1
+ {"version":3,"file":"webgl-render-pipeline.js","names":["RenderPipeline","cast","log","decodeVertexFormat","GL","getWebGLDataType","getShaderLayout","withDeviceParameters","withGLParameters","setUniform","WEBGLBuffer","WEBGLTexture","WEBGLVertexArrayObject","LOG_PROGRAM_PERF_PRIORITY","WEBGLRenderPipeline","constructor","device","props","_defineProperty","handle","gl","createProgram","setSpectorMetadata","id","vs","fs","varyings","bufferMode","SEPARATE_ATTRIBS","length","_this$device$gl","assertWebGL2","gl2","transformFeedbackVaryings","_compileAndLink","layout","vertexArrayObject","destroy","deleteProgram","destroyed","setIndexBuffer","indexBuffer","webglBuffer","setElementBuffer","_indexBuffer","setAttributes","attributes","name","buffer","Object","entries","attribute","getAttributeLayout","warn","concat","decoded","format","type","typeString","components","size","byteLength","stride","normalized","integer","divisor","stepMode","setBuffer","location","offset","setBindings","bindings","value","binding","find","Error","setUniforms","uniforms","assign","draw","options","_this$_indexBuffer","renderPass","getDefaultRenderPass","vertexCount","instanceCount","firstVertex","drawMode","getDrawMode","topology","isIndexed","Boolean","indexType","UNSIGNED_SHORT","UNSIGNED_INT","isInstanced","Number","_areTexturesRenderable","useProgram","bind","primitiveMode","getGLPrimitive","transformFeedback","begin","_applyBindings","_applyUniforms","parameters","framebuffer","_this$device$gl2","drawElementsInstanced","drawElements","_this$device$gl3","drawArraysInstanced","drawArrays","end","attachShader","time","linkProgram","timeEnd","debug","level","linked","getProgramParameter","LINK_STATUS","getProgramInfoLog","validateProgram","validated","VALIDATE_STATUS","texturesRenderable","texture","_textureUniforms","update","loaded","undefined","textureUnit","uniformBufferIndex","getUniformBlockIndex","INVALID_INDEX","uniformBlockBinding","bindBufferBase","UNIFORM_BUFFER","bindBufferRange","activeTexture","TEXTURE0","bindTexture","target","uniformLayout","POINTS","LINES","LINE_STRIP","LINE_LOOP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN"],"sources":["../../../src/adapter/resources/webgl-render-pipeline.ts"],"sourcesContent":["import type {\n RenderPipelineProps,\n RenderPass,\n Buffer,\n Binding,\n ShaderLayout,\n PrimitiveTopology,\n // BindingLayout,\n AttributeLayout\n} from '@luma.gl/api';\nimport {RenderPipeline, cast, log, decodeVertexFormat} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\n\nimport {getWebGLDataType} from '../converters/texture-formats';\nimport {getShaderLayout} from '../helpers/get-shader-layout';\nimport {withDeviceParameters, withGLParameters} from '../converters/device-parameters';\nimport {setUniform} from '../helpers/set-uniform';\n// import {copyUniform, checkUniformValues} from '../../classes/uniforms';\n\nimport {WebGLDevice} from '../webgl-device';\nimport {WEBGLBuffer} from './webgl-buffer';\nimport {WEBGLShader} from './webgl-shader';\nimport {WEBGLTexture} from './webgl-texture';\nimport {WEBGLVertexArrayObject} from '../objects/webgl-vertex-array-object';\n\nconst LOG_PROGRAM_PERF_PRIORITY = 4;\n\n/** Creates a new render pipeline */\nexport class WEBGLRenderPipeline extends RenderPipeline {\n device: WebGLDevice;\n handle: WebGLProgram;\n vs: WEBGLShader;\n fs: WEBGLShader;\n layout: ShaderLayout;\n\n // configuration: ProgramConfiguration;\n // Experimental flag to avoid deleting Program object while it is cached\n varyings: string[] | null = null;\n vertexArrayObject: WEBGLVertexArrayObject;\n _indexBuffer?: Buffer;\n uniforms: Record<string, any> = {};\n bindings: Record<string, any> = {};\n _textureUniforms: Record<string, any> = {};\n _textureIndexCounter: number = 0;\n _uniformCount: number = 0;\n _uniformSetters: Record<string, Function> = {}; // TODO are these used?\n\n constructor(device: WebGLDevice, props: RenderPipelineProps) {\n super(device, props);\n this.device = device;\n this.handle = this.props.handle || this.device.gl.createProgram();\n this.device.setSpectorMetadata(this.handle, {id: this.props.id});\n\n // Create shaders if needed\n this.vs = cast<WEBGLShader>(props.vs);\n this.fs = cast<WEBGLShader>(props.fs);\n // assert(this.vs.stage === 'vertex');\n // assert(this.fs.stage === 'fragment');\n\n // Setup varyings if supplied\n // @ts-expect-error WebGL only\n const {varyings, bufferMode = GL.SEPARATE_ATTRIBS} = props;\n if (varyings && varyings.length > 0) {\n this.device.assertWebGL2();\n this.varyings = varyings;\n this.device.gl2?.transformFeedbackVaryings(this.handle, varyings, bufferMode);\n }\n\n this._compileAndLink();\n\n this.layout = props.layout || getShaderLayout(this.device.gl, this.handle);\n this.vertexArrayObject = new WEBGLVertexArrayObject(this.device);\n }\n\n override destroy(): void {\n if (this.handle) {\n this.device.gl.deleteProgram(this.handle);\n // this.handle = null;\n this.destroyed = true;\n }\n }\n\n setIndexBuffer(indexBuffer: Buffer): void {\n const webglBuffer = cast<WEBGLBuffer>(indexBuffer);\n this.vertexArrayObject.setElementBuffer(webglBuffer);\n this._indexBuffer = indexBuffer;\n }\n\n /** @todo needed for portable model */\n setAttributes(attributes: Record<string, Buffer>): void {\n for (const [name, buffer] of Object.entries(attributes)) {\n const webglBuffer = cast<WEBGLBuffer>(buffer);\n const attribute = getAttributeLayout(this.layout, name);\n if (!attribute) {\n log.warn(`Ignoring buffer supplied for unknown attribute \"${name}\" in pipeline \"${this.id}\" (buffer \"${buffer.id}\")`)();\n continue; // eslint-disable-line no-continue\n }\n const decoded = decodeVertexFormat(attribute.format);\n const {type: typeString, components: size, byteLength: stride, normalized, integer} = decoded;\n const divisor = attribute.stepMode === 'instance' ? 1 : 0;\n const type = getWebGLDataType(typeString);\n this.vertexArrayObject.setBuffer(attribute.location, webglBuffer, {\n size,\n type,\n stride,\n offset: 0,\n normalized,\n integer,\n divisor\n });\n }\n }\n\n /** @todo needed for portable model */\n setBindings(bindings: Record<string, Binding>): void {\n // if (log.priority >= 2) {\n // checkUniformValues(uniforms, this.id, this._uniformSetters);\n // }\n\n for (const [name, value] of Object.entries(bindings)) {\n const binding = this.layout.bindings.find((binding) => binding.name === name);\n if (!binding) {\n log.warn(`Unknown binding ${name} in render pipeline ${this.id}`)();\n continue; // eslint-disable-line no-continue\n }\n if (!value) {\n log.warn(`Unsetting binding ${name} in render pipeline ${this.id}`)();\n }\n switch (binding.type) {\n case 'uniform':\n // @ts-expect-error\n if (!(value instanceof WEBGLBuffer) && !(value.buffer instanceof WEBGLBuffer)) {\n throw new Error('buffer value');\n }\n break;\n case 'texture':\n if (!(value instanceof WEBGLTexture)) {\n throw new Error('texture value');\n }\n break;\n case 'sampler':\n log.warn(`Ignoring sampler ${name}`)();\n break;\n default:\n throw new Error(binding.type);\n }\n\n this.bindings[name] = value;\n }\n }\n\n setUniforms(uniforms: Record<string, any>) {\n // TODO - check against layout\n Object.assign(this.uniforms, uniforms);\n }\n\n /** @todo needed for portable model\n * @note The WebGL API is offers many ways to draw things\n * This function unifies those ways into a single call using common parameters with sane defaults\n */\n draw(options: {\n renderPass?: RenderPass;\n vertexCount?: number;\n indexCount?: number;\n instanceCount?: number;\n firstVertex?: number;\n firstIndex?: number;\n firstInstance?: number;\n baseVertex?: number;\n }): boolean {\n const {\n renderPass = this.device.getDefaultRenderPass(),\n vertexCount,\n // indexCount,\n instanceCount,\n firstVertex = 0,\n // firstIndex,\n // firstInstance,\n // baseVertex\n } = options;\n\n const drawMode = getDrawMode(this.props.topology);\n const isIndexed: boolean = Boolean(this._indexBuffer);\n const indexType = this._indexBuffer?.props.indexType === 'uint16' ? GL.UNSIGNED_SHORT : GL.UNSIGNED_INT;\n const isInstanced: boolean = Number(options.instanceCount) > 0;\n\n // Avoid WebGL draw call when not rendering any data or values are incomplete\n // Note: async textures set as uniforms might still be loading.\n // Now that all uniforms have been updated, check if any texture\n // in the uniforms is not yet initialized, then we don't draw\n if (!this._areTexturesRenderable() || options.vertexCount === 0) {\n // (isInstanced && instanceCount === 0)\n return false;\n }\n\n this.device.gl.useProgram(this.handle);\n\n this.vertexArrayObject.bind(() => {\n const primitiveMode = getGLPrimitive(this.props.topology);\n const transformFeedback: any = null;\n if (transformFeedback) {\n transformFeedback.begin(primitiveMode);\n }\n\n // We have to apply bindings before every draw call since other draw calls will overwrite\n this._applyBindings();\n this._applyUniforms();\n\n // TODO - double context push/pop\n withDeviceParameters(this.device, this.props.parameters, () => {\n withGLParameters(this.device, {framebuffer: renderPass.props.framebuffer}, () => {\n // TODO - Use polyfilled WebGL2RenderingContext instead of ANGLE extension\n if (isIndexed && isInstanced) {\n // ANGLE_instanced_arrays extension\n this.device.gl2?.drawElementsInstanced(\n drawMode,\n vertexCount || 0, // indexCount?\n indexType,\n firstVertex,\n instanceCount || 0\n );\n // } else if (isIndexed && this.device.isWebGL2 && !isNaN(start) && !isNaN(end)) {\n // this.device.gl2.drawRangeElements(drawMode, start, end, vertexCount, indexType, offset);\n } else if (isIndexed) {\n this.device.gl.drawElements(drawMode, vertexCount || 0, indexType, firstVertex); // indexCount?\n } else if (isInstanced) {\n this.device.gl2?.drawArraysInstanced(drawMode, firstVertex, vertexCount || 0, instanceCount || 0);\n } else {\n this.device.gl.drawArrays(drawMode, firstVertex, vertexCount || 0);\n }\n });\n\n if (transformFeedback) {\n transformFeedback.end();\n }\n });\n });\n\n return true;\n }\n\n // setAttributes(attributes: Record<string, Buffer>): void {}\n // setBindings(bindings: Record<string, Binding>): void {}\n\n protected _compileAndLink() {\n const {gl} = this.device;\n gl.attachShader(this.handle, this.vs.handle);\n gl.attachShader(this.handle, this.fs.handle);\n log.time(LOG_PROGRAM_PERF_PRIORITY, `linkProgram for ${this.id}`)();\n gl.linkProgram(this.handle);\n log.timeEnd(LOG_PROGRAM_PERF_PRIORITY, `linkProgram for ${this.id}`)();\n\n // Avoid checking program linking error in production\n // @ts-expect-error\n if (gl.debug || log.level > 0) {\n const linked = gl.getProgramParameter(this.handle, gl.LINK_STATUS);\n if (!linked) {\n throw new Error(`Error linking: ${gl.getProgramInfoLog(this.handle)}`);\n }\n\n gl.validateProgram(this.handle);\n const validated = gl.getProgramParameter(this.handle, gl.VALIDATE_STATUS);\n if (!validated) {\n throw new Error(`Error validating: ${gl.getProgramInfoLog(this.handle)}`);\n }\n }\n }\n\n // PRIVATE METHODS\n\n /**\n * Checks if all texture-values uniforms are renderable (i.e. loaded)\n * Update a texture if needed (e.g. from video)\n * Note: This is currently done before every draw call\n */\n _areTexturesRenderable() {\n let texturesRenderable = true;\n\n for (const [, texture] of Object.entries(this._textureUniforms)) {\n texture.update();\n texturesRenderable = texturesRenderable && texture.loaded;\n }\n\n for (const [, texture] of Object.entries(this.bindings)) {\n // texture.update();\n if (texture.loaded !== undefined) {\n texturesRenderable = texturesRenderable && texture.loaded;\n }\n }\n\n return texturesRenderable;\n }\n\n /** Apply any bindings */\n _applyBindings() {\n this.device.gl.useProgram(this.handle);\n\n const {gl2} = this.device;\n if (!gl2) {\n throw new Error('bindings');\n }\n\n let textureUnit = 0;\n let uniformBufferIndex = 0;\n for (const binding of this.layout.bindings) {\n const value = this.bindings[binding.name];\n if (!value) {\n throw new Error(`No value for binding ${binding.name} in ${this.id}`);\n }\n switch (binding.type) {\n case 'uniform':\n // Set buffer\n const {name} = binding;\n const location = gl2.getUniformBlockIndex(this.handle, name);\n if (location === GL.INVALID_INDEX) {\n throw new Error(`Invalid uniform block name ${name}`);\n }\n gl2.uniformBlockBinding(this.handle, uniformBufferIndex, location);\n // console.debug(binding, location);\n if (value instanceof WEBGLBuffer) {\n gl2.bindBufferBase(GL.UNIFORM_BUFFER, uniformBufferIndex, value.handle);\n } else {\n gl2.bindBufferRange(\n GL.UNIFORM_BUFFER,\n uniformBufferIndex,\n value.buffer.handle,\n value.offset || 0,\n value.size || value.buffer.byteLength - value.offset\n );\n }\n uniformBufferIndex += 1;\n break;\n\n case 'texture':\n if (!(value instanceof WEBGLTexture)) {\n throw new Error('texture');\n }\n const texture: WEBGLTexture = value;\n gl2.activeTexture(GL.TEXTURE0 + textureUnit);\n gl2.bindTexture(texture.target, texture.handle);\n // gl2.bindSampler(textureUnit, sampler.handle);\n textureUnit += 1;\n break;\n\n case 'sampler':\n // ignore\n break;\n\n case 'storage':\n case 'read-only-storage':\n throw new Error(`binding type '${binding.type}' not supported in WebGL`);\n }\n }\n }\n\n _applyUniforms() {\n for (const uniformLayout of this.layout.uniforms || []) {\n const {name, location, type, textureUnit} = uniformLayout;\n const value = this.uniforms[name] || textureUnit;\n if (value !== undefined) {\n setUniform(this.device.gl, location, type, value);\n }\n }\n }\n}\n\n/** Get the primitive type for transform feedback */\nfunction getDrawMode(\n topology: PrimitiveTopology\n): GL.POINTS | GL.LINES | GL.LINE_STRIP | GL.LINE_LOOP | GL.TRIANGLES | GL.TRIANGLE_STRIP | GL.TRIANGLE_FAN {\n // prettier-ignore\n switch (topology) {\n case 'point-list': return GL.POINTS;\n case 'line-list': return GL.LINES;\n case 'line-strip': return GL.LINE_STRIP;\n case 'line-loop': return GL.LINE_LOOP;\n case 'triangle-list': return GL.TRIANGLES;\n case 'triangle-strip': return GL.TRIANGLE_STRIP;\n case 'triangle-fan': return GL.TRIANGLE_FAN;\n default: throw new Error(topology);\n }\n}\n\n/** Get the primitive type for transform feedback */\nfunction getGLPrimitive(topology: PrimitiveTopology): GL.POINTS | GL.LINES | GL.TRIANGLES {\n // prettier-ignore\n switch (topology) {\n case 'point-list': return GL.POINTS;\n case 'line-list': return GL.LINES;\n case 'line-strip': return GL.LINES;\n case 'line-loop': return GL.LINES;\n case 'triangle-list': return GL.TRIANGLES;\n case 'triangle-strip': return GL.TRIANGLES;\n case 'triangle-fan': return GL.TRIANGLES;\n default: throw new Error(topology);\n }\n}\n\n// function getAttributesByLocation(\n// attributes: Record<string, Buffer>,\n// layout: ShaderLayout\n// ): Record<number, Buffer> {\n// const byLocation: Record<number, Buffer> = {};\n// for (const [name, buffer] of Object.entries(attributes)) {\n// const attribute = getAttributeLayout(layout, name);\n// if (attribute) {\n// byLocation[attribute.location] = buffer;\n// }\n// }\n// return byLocation;\n// }\n\nfunction getAttributeLayout(layout: ShaderLayout, name: string): AttributeLayout | null {\n return layout.attributes.find((binding) => binding.name === name) || null;\n}\n\n/* TODO\nfunction getBindingLayout(layout: ShaderLayout, name: string): BindingLayout {\n const binding = layout.bindings.find((binding) => binding.name === name);\n if (!binding) {\n throw new Error(`Unknown binding ${name}`);\n }\n return binding;\n}\n*/\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { Sampler, SamplerProps } from '@luma.gl/api';
2
- import type { WebGLSamplerParameters } from '../../types/webgl';
3
- import type WebGLDevice from '../webgl-device';
2
+ import type { GLSamplerParameters } from '../../types/webgl';
3
+ import type { WebGLDevice } from '../webgl-device';
4
4
  /**
5
5
  * Sampler object -
6
6
  * Under WebGL2 we create an actual WebGL sampler
@@ -8,12 +8,13 @@ import type WebGLDevice from '../webgl-device';
8
8
  * so that they can be set directly on the texture
9
9
  * https://github.com/WebGLSamples/WebGL2Samples/blob/master/samples/sampler_object.html
10
10
  */
11
- export default class WEBGLSampler extends Sampler {
11
+ export declare class WEBGLSampler extends Sampler {
12
12
  readonly device: WebGLDevice;
13
13
  readonly handle: WebGLSampler;
14
- readonly parameters: WebGLSamplerParameters;
14
+ readonly parameters: GLSamplerParameters;
15
15
  constructor(device: WebGLDevice, props: SamplerProps);
16
16
  destroy(): void;
17
+ toString(): string;
17
18
  /** Set sampler parameters on the sampler */
18
19
  private _setSamplerParameters;
19
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"webgl-sampler.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgl-sampler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,YAAY,EAAC,MAAM,cAAc,CAAC;AAEnD,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,mBAAmB,CAAC;AAE9D,OAAO,KAAK,WAAW,MAAM,iBAAiB,CAAC;AAE/C;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,OAAO;IAC/C,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,sBAAsB,CAAC;gBAEhC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY;IAUpD,OAAO,IAAI,IAAI;IAQf,4CAA4C;IAC5C,OAAO,CAAC,qBAAqB;CAgB9B"}
1
+ {"version":3,"file":"webgl-sampler.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgl-sampler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,OAAO,EAAE,YAAY,EAAC,MAAM,cAAc,CAAC;AAEnD,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,mBAAmB,CAAC;AAE3D,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,iBAAiB,CAAC;AAEjD;;;;;;GAMG;AACH,qBAAa,YAAa,SAAQ,OAAO;IACvC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,mBAAmB,CAAC;gBAE7B,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY;IAU3C,OAAO,IAAI,IAAI;IAQf,QAAQ,IAAI,MAAM;IAI3B,4CAA4C;IAC5C,OAAO,CAAC,qBAAqB;CAgB9B"}
@@ -1,50 +1,42 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
2
  import { Sampler } from '@luma.gl/api';
3
3
  import GL from '@luma.gl/constants';
4
- import { convertSamplerParametersToWebGL } from '../converters/sampler-parameters';
5
- export default class WEBGLSampler extends Sampler {
4
+ import { convertSamplerParametersToWebGL } from "../converters/sampler-parameters.js";
5
+ export class WEBGLSampler extends Sampler {
6
6
  constructor(device, props) {
7
7
  super(device, props);
8
-
9
8
  _defineProperty(this, "device", void 0);
10
-
11
9
  _defineProperty(this, "handle", void 0);
12
-
13
10
  _defineProperty(this, "parameters", void 0);
14
-
15
11
  this.device = device;
16
12
  this.parameters = convertSamplerParametersToWebGL(props);
17
-
18
13
  if (this.device.isWebGL2) {
19
14
  this.handle = this.handle || this.device.gl2.createSampler();
20
-
21
15
  this._setSamplerParameters(this.parameters);
22
16
  }
23
17
  }
24
-
25
18
  destroy() {
26
19
  if (this.handle) {
27
20
  this.device.gl2.deleteSampler(this.handle);
28
21
  this.handle = undefined;
29
22
  }
30
23
  }
31
-
24
+ toString() {
25
+ return "Sampler(".concat(this.id, ",").concat(JSON.stringify(this.props), ")");
26
+ }
32
27
  _setSamplerParameters(parameters) {
33
28
  for (const [pname, value] of Object.entries(parameters)) {
34
29
  const param = Number(pname);
35
-
36
30
  switch (param) {
37
31
  case GL.TEXTURE_MIN_LOD:
38
32
  case GL.TEXTURE_MAX_LOD:
39
33
  this.device.gl2.samplerParameterf(this.handle, param, value);
40
34
  break;
41
-
42
35
  default:
43
36
  this.device.gl2.samplerParameteri(this.handle, param, value);
44
37
  break;
45
38
  }
46
39
  }
47
40
  }
48
-
49
41
  }
50
42
  //# sourceMappingURL=webgl-sampler.js.map