@luma.gl/webgl 9.0.0-alpha.14 → 9.0.0-alpha.16

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 (367) hide show
  1. package/dist/adapter/converters/device-parameters.js +199 -136
  2. package/dist/adapter/converters/renderbuffer-formats.d.ts +1 -1
  3. package/dist/adapter/converters/renderbuffer-formats.d.ts.map +1 -1
  4. package/dist/adapter/converters/renderbuffer-formats.js +62 -176
  5. package/dist/adapter/converters/sampler-parameters.js +149 -206
  6. package/dist/adapter/converters/texture-formats.d.ts +2 -2
  7. package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
  8. package/dist/adapter/converters/texture-formats.js +437 -890
  9. package/dist/adapter/converters/vertex-formats.js +15 -33
  10. package/dist/adapter/device-helpers/device-features.js +119 -100
  11. package/dist/adapter/device-helpers/device-limits.d.ts +1 -1
  12. package/dist/adapter/device-helpers/device-limits.d.ts.map +1 -1
  13. package/dist/adapter/device-helpers/device-limits.js +88 -86
  14. package/dist/adapter/device-helpers/get-device-info.js +42 -43
  15. package/dist/adapter/device-helpers/is-old-ie.js +9 -6
  16. package/dist/adapter/helpers/attribute-utils.js +50 -74
  17. package/dist/adapter/helpers/get-shader-info.d.ts +9 -0
  18. package/dist/adapter/helpers/get-shader-info.d.ts.map +1 -0
  19. package/dist/adapter/helpers/get-shader-info.js +27 -0
  20. package/dist/adapter/helpers/get-shader-layout.js +307 -296
  21. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts +1 -1
  22. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts.map +1 -1
  23. package/dist/adapter/helpers/parse-shader-compiler-log.js +32 -33
  24. package/dist/adapter/helpers/set-uniform.js +67 -110
  25. package/dist/adapter/helpers/uniforms.js +80 -85
  26. package/dist/adapter/objects/constants-to-keys.js +33 -33
  27. package/dist/adapter/objects/webgl-renderbuffer.d.ts +1 -1
  28. package/dist/adapter/objects/webgl-renderbuffer.d.ts.map +1 -1
  29. package/dist/adapter/objects/webgl-renderbuffer.js +67 -86
  30. package/dist/adapter/objects/webgl-resource.js +213 -205
  31. package/dist/adapter/objects/webgl-vertex-array-object.d.ts +1 -1
  32. package/dist/adapter/objects/webgl-vertex-array-object.d.ts.map +1 -1
  33. package/dist/adapter/objects/webgl-vertex-array-object.js +74 -76
  34. package/dist/adapter/resources/webgl-buffer.js +150 -147
  35. package/dist/adapter/resources/webgl-command-buffer.d.ts +5 -5
  36. package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
  37. package/dist/adapter/resources/webgl-command-buffer.js +39 -55
  38. package/dist/adapter/resources/webgl-command-encoder.js +25 -49
  39. package/dist/adapter/resources/webgl-external-texture.js +91 -1
  40. package/dist/adapter/resources/webgl-framebuffer.d.ts +2 -2
  41. package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
  42. package/dist/adapter/resources/webgl-framebuffer.js +231 -258
  43. package/dist/adapter/resources/webgl-render-pass.d.ts +1 -1
  44. package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
  45. package/dist/adapter/resources/webgl-render-pass.js +8 -18
  46. package/dist/adapter/resources/webgl-render-pipeline.js +316 -378
  47. package/dist/adapter/resources/webgl-sampler.js +42 -47
  48. package/dist/adapter/resources/webgl-shader.d.ts +1 -2
  49. package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
  50. package/dist/adapter/resources/webgl-shader.js +58 -68
  51. package/dist/adapter/resources/webgl-texture.d.ts +5 -5
  52. package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
  53. package/dist/adapter/resources/webgl-texture.js +661 -815
  54. package/dist/adapter/webgl-canvas-context.js +55 -49
  55. package/dist/adapter/webgl-device.js +288 -338
  56. package/dist/bundle.js +1 -2
  57. package/dist/classic/accessor.js +120 -127
  58. package/dist/classic/buffer.d.ts +1 -1
  59. package/dist/classic/buffer.d.ts.map +1 -1
  60. package/dist/classic/buffer.js +325 -356
  61. package/dist/classic/typed-array-utils.d.ts +1 -1
  62. package/dist/classic/typed-array-utils.d.ts.map +1 -1
  63. package/dist/classic/typed-array-utils.js +91 -101
  64. package/dist/context/context/create-browser-context.d.ts +1 -2
  65. package/dist/context/context/create-browser-context.d.ts.map +1 -1
  66. package/dist/context/context/create-browser-context.js +61 -52
  67. package/dist/context/context/create-headless-context.d.ts +1 -1
  68. package/dist/context/context/create-headless-context.d.ts.map +1 -1
  69. package/dist/context/context/create-headless-context.js +26 -33
  70. package/dist/context/context/webgl-checks.js +25 -20
  71. package/dist/context/debug/spector.d.ts +1 -2
  72. package/dist/context/debug/spector.d.ts.map +1 -1
  73. package/dist/context/debug/spector.js +53 -62
  74. package/dist/context/debug/webgl-developer-tools.d.ts +1 -1
  75. package/dist/context/debug/webgl-developer-tools.d.ts.map +1 -1
  76. package/dist/context/debug/webgl-developer-tools.js +106 -93
  77. package/dist/context/parameters/unified-parameter-api.js +91 -55
  78. package/dist/context/parameters/webgl-parameter-tables.d.ts +1 -1
  79. package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
  80. package/dist/context/parameters/webgl-parameter-tables.js +462 -423
  81. package/dist/context/polyfill/context-data.js +16 -12
  82. package/dist/context/polyfill/get-parameter-polyfill.js +91 -76
  83. package/dist/context/polyfill/polyfill-context.js +75 -80
  84. package/dist/context/polyfill/polyfill-table.js +133 -139
  85. package/dist/context/polyfill/polyfill-vertex-array-object.js +255 -297
  86. package/dist/context/state-tracker/deep-array-equal.js +16 -18
  87. package/dist/context/state-tracker/track-context-state.js +183 -161
  88. package/dist/context/state-tracker/with-parameters.js +43 -35
  89. package/dist/dist.min.js +1 -0
  90. package/dist/es5/adapter/converters/device-parameters.js +3 -38
  91. package/dist/es5/adapter/converters/device-parameters.js.map +1 -1
  92. package/dist/es5/adapter/converters/renderbuffer-formats.js +2 -14
  93. package/dist/es5/adapter/converters/renderbuffer-formats.js.map +1 -1
  94. package/dist/es5/adapter/converters/sampler-parameters.js +2 -65
  95. package/dist/es5/adapter/converters/sampler-parameters.js.map +1 -1
  96. package/dist/es5/adapter/converters/texture-formats.js +9 -81
  97. package/dist/es5/adapter/converters/texture-formats.js.map +1 -1
  98. package/dist/es5/adapter/converters/vertex-formats.js +0 -12
  99. package/dist/es5/adapter/converters/vertex-formats.js.map +1 -1
  100. package/dist/es5/adapter/device-helpers/device-features.js +6 -40
  101. package/dist/es5/adapter/device-helpers/device-features.js.map +1 -1
  102. package/dist/es5/adapter/device-helpers/device-limits.js +0 -10
  103. package/dist/es5/adapter/device-helpers/device-limits.js.map +1 -1
  104. package/dist/es5/adapter/device-helpers/get-device-info.js +0 -10
  105. package/dist/es5/adapter/device-helpers/get-device-info.js.map +1 -1
  106. package/dist/es5/adapter/device-helpers/is-old-ie.js +0 -1
  107. package/dist/es5/adapter/device-helpers/is-old-ie.js.map +1 -1
  108. package/dist/es5/adapter/helpers/attribute-utils.js +3 -25
  109. package/dist/es5/adapter/helpers/attribute-utils.js.map +1 -1
  110. package/dist/es5/adapter/helpers/get-shader-info.js +31 -0
  111. package/dist/es5/adapter/helpers/get-shader-info.js.map +1 -0
  112. package/dist/es5/adapter/helpers/get-shader-layout.js +23 -101
  113. package/dist/es5/adapter/helpers/get-shader-layout.js.map +1 -1
  114. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js +6 -24
  115. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js.map +1 -1
  116. package/dist/es5/adapter/helpers/set-uniform.js +0 -33
  117. package/dist/es5/adapter/helpers/set-uniform.js.map +1 -1
  118. package/dist/es5/adapter/helpers/uniforms.js +13 -37
  119. package/dist/es5/adapter/helpers/uniforms.js.map +1 -1
  120. package/dist/es5/adapter/objects/constants-to-keys.js +1 -12
  121. package/dist/es5/adapter/objects/constants-to-keys.js.map +1 -1
  122. package/dist/es5/adapter/objects/webgl-renderbuffer.js +5 -33
  123. package/dist/es5/adapter/objects/webgl-renderbuffer.js.map +1 -1
  124. package/dist/es5/adapter/objects/webgl-resource.js +6 -60
  125. package/dist/es5/adapter/objects/webgl-resource.js.map +1 -1
  126. package/dist/es5/adapter/objects/webgl-vertex-array-object.js +7 -35
  127. package/dist/es5/adapter/objects/webgl-vertex-array-object.js.map +1 -1
  128. package/dist/es5/adapter/resources/webgl-buffer.js +20 -66
  129. package/dist/es5/adapter/resources/webgl-buffer.js.map +1 -1
  130. package/dist/es5/adapter/resources/webgl-command-buffer.js +6 -32
  131. package/dist/es5/adapter/resources/webgl-command-buffer.js.map +1 -1
  132. package/dist/es5/adapter/resources/webgl-command-encoder.js +0 -18
  133. package/dist/es5/adapter/resources/webgl-command-encoder.js.map +1 -1
  134. package/dist/es5/adapter/resources/webgl-external-texture.js.map +1 -1
  135. package/dist/es5/adapter/resources/webgl-framebuffer.js +10 -82
  136. package/dist/es5/adapter/resources/webgl-framebuffer.js.map +1 -1
  137. package/dist/es5/adapter/resources/webgl-render-pass.js +2 -19
  138. package/dist/es5/adapter/resources/webgl-render-pass.js.map +1 -1
  139. package/dist/es5/adapter/resources/webgl-render-pipeline.js +24 -133
  140. package/dist/es5/adapter/resources/webgl-render-pipeline.js.map +1 -1
  141. package/dist/es5/adapter/resources/webgl-sampler.js +2 -28
  142. package/dist/es5/adapter/resources/webgl-sampler.js.map +1 -1
  143. package/dist/es5/adapter/resources/webgl-shader.js +13 -52
  144. package/dist/es5/adapter/resources/webgl-shader.js.map +1 -1
  145. package/dist/es5/adapter/resources/webgl-texture.js +137 -291
  146. package/dist/es5/adapter/resources/webgl-texture.js.map +1 -1
  147. package/dist/es5/adapter/webgl-canvas-context.js +0 -24
  148. package/dist/es5/adapter/webgl-canvas-context.js.map +1 -1
  149. package/dist/es5/adapter/webgl-device.js +40 -127
  150. package/dist/es5/adapter/webgl-device.js.map +1 -1
  151. package/dist/es5/bundle.js +0 -1
  152. package/dist/es5/bundle.js.map +1 -1
  153. package/dist/es5/classic/accessor.js +1 -31
  154. package/dist/es5/classic/accessor.js.map +1 -1
  155. package/dist/es5/classic/buffer.js +32 -102
  156. package/dist/es5/classic/buffer.js.map +1 -1
  157. package/dist/es5/classic/typed-array-utils.js +10 -37
  158. package/dist/es5/classic/typed-array-utils.js.map +1 -1
  159. package/dist/es5/context/context/create-browser-context.js +4 -21
  160. package/dist/es5/context/context/create-browser-context.js.map +1 -1
  161. package/dist/es5/context/context/create-headless-context.js +8 -21
  162. package/dist/es5/context/context/create-headless-context.js.map +1 -1
  163. package/dist/es5/context/context/webgl-checks.js +4 -14
  164. package/dist/es5/context/context/webgl-checks.js.map +1 -1
  165. package/dist/es5/context/debug/spector.js +20 -54
  166. package/dist/es5/context/debug/spector.js.map +1 -1
  167. package/dist/es5/context/debug/webgl-developer-tools.js +19 -65
  168. package/dist/es5/context/debug/webgl-developer-tools.js.map +1 -1
  169. package/dist/es5/context/parameters/unified-parameter-api.js +3 -28
  170. package/dist/es5/context/parameters/unified-parameter-api.js.map +1 -1
  171. package/dist/es5/context/parameters/webgl-parameter-tables.js +18 -65
  172. package/dist/es5/context/parameters/webgl-parameter-tables.js.map +1 -1
  173. package/dist/es5/context/polyfill/context-data.js +0 -3
  174. package/dist/es5/context/polyfill/context-data.js.map +1 -1
  175. package/dist/es5/context/polyfill/get-parameter-polyfill.js +0 -12
  176. package/dist/es5/context/polyfill/get-parameter-polyfill.js.map +1 -1
  177. package/dist/es5/context/polyfill/polyfill-context.js +8 -33
  178. package/dist/es5/context/polyfill/polyfill-context.js.map +1 -1
  179. package/dist/es5/context/polyfill/polyfill-table.js +3 -27
  180. package/dist/es5/context/polyfill/polyfill-table.js.map +1 -1
  181. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js +0 -70
  182. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js.map +1 -1
  183. package/dist/es5/context/state-tracker/deep-array-equal.js +0 -5
  184. package/dist/es5/context/state-tracker/deep-array-equal.js.map +1 -1
  185. package/dist/es5/context/state-tracker/track-context-state.js +10 -53
  186. package/dist/es5/context/state-tracker/track-context-state.js.map +1 -1
  187. package/dist/es5/context/state-tracker/with-parameters.js +1 -13
  188. package/dist/es5/context/state-tracker/with-parameters.js.map +1 -1
  189. package/dist/es5/index.js +72 -99
  190. package/dist/es5/index.js.map +1 -1
  191. package/dist/es5/init.js +0 -3
  192. package/dist/es5/init.js.map +1 -1
  193. package/dist/es5/types/webgl.js +0 -1
  194. package/dist/es5/types/webgl.js.map +1 -1
  195. package/dist/es5/types.js.map +1 -1
  196. package/dist/esm/adapter/converters/device-parameters.js +0 -20
  197. package/dist/esm/adapter/converters/device-parameters.js.map +1 -1
  198. package/dist/esm/adapter/converters/renderbuffer-formats.js +0 -4
  199. package/dist/esm/adapter/converters/renderbuffer-formats.js.map +1 -1
  200. package/dist/esm/adapter/converters/sampler-parameters.js +2 -57
  201. package/dist/esm/adapter/converters/sampler-parameters.js.map +1 -1
  202. package/dist/esm/adapter/converters/texture-formats.js +8 -52
  203. package/dist/esm/adapter/converters/texture-formats.js.map +1 -1
  204. package/dist/esm/adapter/converters/vertex-formats.js +0 -9
  205. package/dist/esm/adapter/converters/vertex-formats.js.map +1 -1
  206. package/dist/esm/adapter/device-helpers/device-features.js +2 -19
  207. package/dist/esm/adapter/device-helpers/device-features.js.map +1 -1
  208. package/dist/esm/adapter/device-helpers/device-limits.js +0 -3
  209. package/dist/esm/adapter/device-helpers/device-limits.js.map +1 -1
  210. package/dist/esm/adapter/device-helpers/get-device-info.js +0 -6
  211. package/dist/esm/adapter/device-helpers/get-device-info.js.map +1 -1
  212. package/dist/esm/adapter/device-helpers/is-old-ie.js +2 -1
  213. package/dist/esm/adapter/device-helpers/is-old-ie.js.map +1 -1
  214. package/dist/esm/adapter/helpers/attribute-utils.js +0 -17
  215. package/dist/esm/adapter/helpers/attribute-utils.js.map +1 -1
  216. package/dist/esm/adapter/helpers/get-shader-info.js +25 -0
  217. package/dist/esm/adapter/helpers/get-shader-info.js.map +1 -0
  218. package/dist/esm/adapter/helpers/get-shader-layout.js +2 -48
  219. package/dist/esm/adapter/helpers/get-shader-layout.js.map +1 -1
  220. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js +0 -7
  221. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js.map +1 -1
  222. package/dist/esm/adapter/helpers/set-uniform.js +0 -30
  223. package/dist/esm/adapter/helpers/set-uniform.js.map +1 -1
  224. package/dist/esm/adapter/helpers/uniforms.js +0 -10
  225. package/dist/esm/adapter/helpers/uniforms.js.map +1 -1
  226. package/dist/esm/adapter/objects/constants-to-keys.js +0 -7
  227. package/dist/esm/adapter/objects/constants-to-keys.js.map +1 -1
  228. package/dist/esm/adapter/objects/webgl-renderbuffer.js +2 -18
  229. package/dist/esm/adapter/objects/webgl-renderbuffer.js.map +1 -1
  230. package/dist/esm/adapter/objects/webgl-resource.js +10 -57
  231. package/dist/esm/adapter/objects/webgl-resource.js.map +1 -1
  232. package/dist/esm/adapter/objects/webgl-vertex-array-object.js +5 -15
  233. package/dist/esm/adapter/objects/webgl-vertex-array-object.js.map +1 -1
  234. package/dist/esm/adapter/resources/webgl-buffer.js +12 -40
  235. package/dist/esm/adapter/resources/webgl-buffer.js.map +1 -1
  236. package/dist/esm/adapter/resources/webgl-command-buffer.js +2 -17
  237. package/dist/esm/adapter/resources/webgl-command-buffer.js.map +1 -1
  238. package/dist/esm/adapter/resources/webgl-command-encoder.js +0 -12
  239. package/dist/esm/adapter/resources/webgl-command-encoder.js.map +1 -1
  240. package/dist/esm/adapter/resources/webgl-external-texture.js.map +1 -1
  241. package/dist/esm/adapter/resources/webgl-framebuffer.js +0 -60
  242. package/dist/esm/adapter/resources/webgl-framebuffer.js.map +1 -1
  243. package/dist/esm/adapter/resources/webgl-render-pass.js +1 -8
  244. package/dist/esm/adapter/resources/webgl-render-pass.js.map +1 -1
  245. package/dist/esm/adapter/resources/webgl-render-pipeline.js +0 -89
  246. package/dist/esm/adapter/resources/webgl-render-pipeline.js.map +1 -1
  247. package/dist/esm/adapter/resources/webgl-sampler.js +0 -12
  248. package/dist/esm/adapter/resources/webgl-sampler.js.map +1 -1
  249. package/dist/esm/adapter/resources/webgl-shader.js +2 -16
  250. package/dist/esm/adapter/resources/webgl-shader.js.map +1 -1
  251. package/dist/esm/adapter/resources/webgl-texture.js +36 -154
  252. package/dist/esm/adapter/resources/webgl-texture.js.map +1 -1
  253. package/dist/esm/adapter/webgl-canvas-context.js +0 -14
  254. package/dist/esm/adapter/webgl-canvas-context.js.map +1 -1
  255. package/dist/esm/adapter/webgl-device.js +19 -89
  256. package/dist/esm/adapter/webgl-device.js.map +1 -1
  257. package/dist/esm/bundle.js +0 -1
  258. package/dist/esm/bundle.js.map +1 -1
  259. package/dist/esm/classic/accessor.js +10 -34
  260. package/dist/esm/classic/accessor.js.map +1 -1
  261. package/dist/esm/classic/buffer.js +15 -71
  262. package/dist/esm/classic/buffer.js.map +1 -1
  263. package/dist/esm/classic/typed-array-utils.js +0 -20
  264. package/dist/esm/classic/typed-array-utils.js.map +1 -1
  265. package/dist/esm/context/context/create-browser-context.js +6 -14
  266. package/dist/esm/context/context/create-browser-context.js.map +1 -1
  267. package/dist/esm/context/context/create-headless-context.js +2 -6
  268. package/dist/esm/context/context/create-headless-context.js.map +1 -1
  269. package/dist/esm/context/context/webgl-checks.js +0 -3
  270. package/dist/esm/context/context/webgl-checks.js.map +1 -1
  271. package/dist/esm/context/debug/spector.js +2 -14
  272. package/dist/esm/context/debug/spector.js.map +1 -1
  273. package/dist/esm/context/debug/webgl-developer-tools.js +4 -22
  274. package/dist/esm/context/debug/webgl-developer-tools.js.map +1 -1
  275. package/dist/esm/context/parameters/unified-parameter-api.js +2 -13
  276. package/dist/esm/context/parameters/unified-parameter-api.js.map +1 -1
  277. package/dist/esm/context/parameters/webgl-parameter-tables.js +0 -19
  278. package/dist/esm/context/parameters/webgl-parameter-tables.js.map +1 -1
  279. package/dist/esm/context/polyfill/context-data.js +0 -2
  280. package/dist/esm/context/polyfill/context-data.js.map +1 -1
  281. package/dist/esm/context/polyfill/get-parameter-polyfill.js +0 -5
  282. package/dist/esm/context/polyfill/get-parameter-polyfill.js.map +1 -1
  283. package/dist/esm/context/polyfill/polyfill-context.js +14 -21
  284. package/dist/esm/context/polyfill/polyfill-context.js.map +1 -1
  285. package/dist/esm/context/polyfill/polyfill-table.js +0 -23
  286. package/dist/esm/context/polyfill/polyfill-table.js.map +1 -1
  287. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js +0 -70
  288. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js.map +1 -1
  289. package/dist/esm/context/state-tracker/deep-array-equal.js +0 -4
  290. package/dist/esm/context/state-tracker/deep-array-equal.js.map +1 -1
  291. package/dist/esm/context/state-tracker/track-context-state.js +11 -45
  292. package/dist/esm/context/state-tracker/track-context-state.js.map +1 -1
  293. package/dist/esm/context/state-tracker/with-parameters.js +0 -6
  294. package/dist/esm/context/state-tracker/with-parameters.js.map +1 -1
  295. package/dist/esm/index.js.map +1 -1
  296. package/dist/esm/init.js.map +1 -1
  297. package/dist/esm/types/webgl.js.map +1 -1
  298. package/dist/esm/types.js.map +1 -1
  299. package/dist/index.js +39 -25
  300. package/dist/init.js +1 -2
  301. package/dist/types/webgl.d.ts +20 -20
  302. package/dist/types/webgl.d.ts.map +1 -1
  303. package/dist/types/webgl.js +0 -1
  304. package/dist/types.d.ts +1 -1
  305. package/dist/types.d.ts.map +1 -1
  306. package/dist/types.js +0 -1
  307. package/package.json +8 -8
  308. package/src/adapter/helpers/get-shader-info.ts +37 -0
  309. package/src/adapter/helpers/parse-shader-compiler-log.ts +1 -1
  310. package/src/adapter/resources/webgl-render-pass.ts +1 -1
  311. package/src/adapter/resources/webgl-shader.ts +2 -2
  312. package/src/adapter/webgl-device.ts +1 -1
  313. package/src/context/debug/webgl-developer-tools.ts +0 -1
  314. package/src/types/webgl.ts +4 -4
  315. package/dist/adapter/converters/device-parameters.js.map +0 -1
  316. package/dist/adapter/converters/renderbuffer-formats.js.map +0 -1
  317. package/dist/adapter/converters/sampler-parameters.js.map +0 -1
  318. package/dist/adapter/converters/texture-formats.js.map +0 -1
  319. package/dist/adapter/converters/vertex-formats.js.map +0 -1
  320. package/dist/adapter/device-helpers/device-features.js.map +0 -1
  321. package/dist/adapter/device-helpers/device-limits.js.map +0 -1
  322. package/dist/adapter/device-helpers/get-device-info.js.map +0 -1
  323. package/dist/adapter/device-helpers/is-old-ie.js.map +0 -1
  324. package/dist/adapter/helpers/attribute-utils.js.map +0 -1
  325. package/dist/adapter/helpers/get-shader-layout.js.map +0 -1
  326. package/dist/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  327. package/dist/adapter/helpers/set-uniform.js.map +0 -1
  328. package/dist/adapter/helpers/uniforms.js.map +0 -1
  329. package/dist/adapter/objects/constants-to-keys.js.map +0 -1
  330. package/dist/adapter/objects/webgl-renderbuffer.js.map +0 -1
  331. package/dist/adapter/objects/webgl-resource.js.map +0 -1
  332. package/dist/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  333. package/dist/adapter/resources/webgl-buffer.js.map +0 -1
  334. package/dist/adapter/resources/webgl-command-buffer.js.map +0 -1
  335. package/dist/adapter/resources/webgl-command-encoder.js.map +0 -1
  336. package/dist/adapter/resources/webgl-external-texture.js.map +0 -1
  337. package/dist/adapter/resources/webgl-framebuffer.js.map +0 -1
  338. package/dist/adapter/resources/webgl-render-pass.js.map +0 -1
  339. package/dist/adapter/resources/webgl-render-pipeline.js.map +0 -1
  340. package/dist/adapter/resources/webgl-sampler.js.map +0 -1
  341. package/dist/adapter/resources/webgl-shader.js.map +0 -1
  342. package/dist/adapter/resources/webgl-texture.js.map +0 -1
  343. package/dist/adapter/webgl-canvas-context.js.map +0 -1
  344. package/dist/adapter/webgl-device.js.map +0 -1
  345. package/dist/bundle.js.map +0 -1
  346. package/dist/classic/accessor.js.map +0 -1
  347. package/dist/classic/buffer.js.map +0 -1
  348. package/dist/classic/typed-array-utils.js.map +0 -1
  349. package/dist/context/context/create-browser-context.js.map +0 -1
  350. package/dist/context/context/create-headless-context.js.map +0 -1
  351. package/dist/context/context/webgl-checks.js.map +0 -1
  352. package/dist/context/debug/spector.js.map +0 -1
  353. package/dist/context/debug/webgl-developer-tools.js.map +0 -1
  354. package/dist/context/parameters/unified-parameter-api.js.map +0 -1
  355. package/dist/context/parameters/webgl-parameter-tables.js.map +0 -1
  356. package/dist/context/polyfill/context-data.js.map +0 -1
  357. package/dist/context/polyfill/get-parameter-polyfill.js.map +0 -1
  358. package/dist/context/polyfill/polyfill-context.js.map +0 -1
  359. package/dist/context/polyfill/polyfill-table.js.map +0 -1
  360. package/dist/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  361. package/dist/context/state-tracker/deep-array-equal.js.map +0 -1
  362. package/dist/context/state-tracker/track-context-state.js.map +0 -1
  363. package/dist/context/state-tracker/with-parameters.js.map +0 -1
  364. package/dist/index.js.map +0 -1
  365. package/dist/init.js.map +0 -1
  366. package/dist/types/webgl.js.map +0 -1
  367. package/dist/types.js.map +0 -1
@@ -1,66 +1,38 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
9
-
10
8
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
-
12
9
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
-
14
10
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
15
-
16
11
  var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
17
-
18
12
  var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
19
-
20
13
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
21
-
22
14
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
23
-
24
15
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
25
-
26
16
  var _api = require("@luma.gl/api");
27
-
28
17
  var _constants = _interopRequireDefault(require("@luma.gl/constants"));
29
-
30
18
  var _textureFormats = require("../converters/texture-formats");
31
-
32
19
  var _getShaderLayout = require("../helpers/get-shader-layout");
33
-
34
20
  var _deviceParameters = require("../converters/device-parameters");
35
-
36
21
  var _setUniform = require("../helpers/set-uniform");
37
-
38
22
  var _webglBuffer = _interopRequireDefault(require("./webgl-buffer"));
39
-
40
23
  var _webglTexture = _interopRequireDefault(require("./webgl-texture"));
41
-
42
24
  var _webglVertexArrayObject = _interopRequireDefault(require("../objects/webgl-vertex-array-object"));
43
-
44
25
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
45
-
46
26
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
47
-
48
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
49
-
27
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
50
28
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
51
-
52
29
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
53
-
54
30
  var LOG_PROGRAM_PERF_PRIORITY = 4;
55
-
56
31
  var WEBGLRenderPipeline = function (_RenderPipeline) {
57
32
  (0, _inherits2.default)(WEBGLRenderPipeline, _RenderPipeline);
58
-
59
33
  var _super = _createSuper(WEBGLRenderPipeline);
60
-
61
34
  function WEBGLRenderPipeline(device, props) {
62
35
  var _this;
63
-
64
36
  (0, _classCallCheck2.default)(this, WEBGLRenderPipeline);
65
37
  _this = _super.call(this, device, props);
66
38
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "device", void 0);
@@ -85,25 +57,19 @@ var WEBGLRenderPipeline = function (_RenderPipeline) {
85
57
  _this.vs = (0, _api.cast)(props.vs);
86
58
  _this.fs = (0, _api.cast)(props.fs);
87
59
  var varyings = props.varyings,
88
- _props$bufferMode = props.bufferMode,
89
- bufferMode = _props$bufferMode === void 0 ? _constants.default.SEPARATE_ATTRIBS : _props$bufferMode;
90
-
60
+ _props$bufferMode = props.bufferMode,
61
+ bufferMode = _props$bufferMode === void 0 ? _constants.default.SEPARATE_ATTRIBS : _props$bufferMode;
91
62
  if (varyings && varyings.length > 0) {
92
63
  var _this$device$gl;
93
-
94
64
  _this.device.assertWebGL2();
95
-
96
65
  _this.varyings = varyings;
97
66
  (_this$device$gl = _this.device.gl2) === null || _this$device$gl === void 0 ? void 0 : _this$device$gl.transformFeedbackVaryings(_this.handle, varyings, bufferMode);
98
67
  }
99
-
100
68
  _this._compileAndLink();
101
-
102
69
  _this.layout = props.layout || (0, _getShaderLayout.getShaderLayout)(_this.device.gl, _this.handle);
103
70
  _this.vertexArrayObject = new _webglVertexArrayObject.default(_this.device);
104
71
  return _this;
105
72
  }
106
-
107
73
  (0, _createClass2.default)(WEBGLRenderPipeline, [{
108
74
  key: "destroy",
109
75
  value: function destroy() {
@@ -124,24 +90,20 @@ var WEBGLRenderPipeline = function (_RenderPipeline) {
124
90
  value: function setAttributes(attributes) {
125
91
  for (var _i = 0, _Object$entries = Object.entries(attributes); _i < _Object$entries.length; _i++) {
126
92
  var _Object$entries$_i = (0, _slicedToArray2.default)(_Object$entries[_i], 2),
127
- name = _Object$entries$_i[0],
128
- buffer = _Object$entries$_i[1];
129
-
93
+ name = _Object$entries$_i[0],
94
+ buffer = _Object$entries$_i[1];
130
95
  var webglBuffer = (0, _api.cast)(buffer);
131
96
  var attribute = getAttributeLayout(this.layout, name);
132
-
133
97
  if (!attribute) {
134
98
  _api.log.warn("Ignoring buffer supplied for unknown attribute \"".concat(name, "\" in pipeline \"").concat(this.id, "\" (buffer \"").concat(buffer.id, "\")"))();
135
-
136
99
  continue;
137
100
  }
138
-
139
101
  var decoded = (0, _api.decodeVertexFormat)(attribute.format);
140
102
  var typeString = decoded.type,
141
- size = decoded.components,
142
- stride = decoded.byteLength,
143
- normalized = decoded.normalized,
144
- integer = decoded.integer;
103
+ size = decoded.components,
104
+ stride = decoded.byteLength,
105
+ normalized = decoded.normalized,
106
+ integer = decoded.integer;
145
107
  var divisor = attribute.stepMode === 'instance' ? 1 : 0;
146
108
  var type = (0, _textureFormats.getWebGLDataType)(typeString);
147
109
  this.vertexArrayObject.setBuffer(attribute.location, webglBuffer, {
@@ -159,56 +121,41 @@ var WEBGLRenderPipeline = function (_RenderPipeline) {
159
121
  key: "setBindings",
160
122
  value: function setBindings(bindings) {
161
123
  var _this2 = this;
162
-
163
124
  var _loop = function _loop() {
164
125
  var _Object$entries2$_i = (0, _slicedToArray2.default)(_Object$entries2[_i2], 2),
165
- name = _Object$entries2$_i[0],
166
- value = _Object$entries2$_i[1];
167
-
126
+ name = _Object$entries2$_i[0],
127
+ value = _Object$entries2$_i[1];
168
128
  var binding = _this2.layout.bindings.find(function (binding) {
169
129
  return binding.name === name;
170
130
  });
171
-
172
131
  if (!binding) {
173
132
  _api.log.warn("Unknown binding ".concat(name, " in render pipeline ").concat(_this2.id))();
174
-
175
133
  return "continue";
176
134
  }
177
-
178
135
  if (!value) {
179
136
  _api.log.warn("Unsetting binding ".concat(name, " in render pipeline ").concat(_this2.id))();
180
137
  }
181
-
182
138
  switch (binding.type) {
183
139
  case 'uniform':
184
140
  if (!(value instanceof _webglBuffer.default) && !(value.buffer instanceof _webglBuffer.default)) {
185
141
  throw new Error('buffer value');
186
142
  }
187
-
188
143
  break;
189
-
190
144
  case 'texture':
191
145
  if (!(value instanceof _webglTexture.default)) {
192
146
  throw new Error('texture value');
193
147
  }
194
-
195
148
  break;
196
-
197
149
  case 'sampler':
198
150
  _api.log.warn("Ignoring sampler ".concat(name))();
199
-
200
151
  break;
201
-
202
152
  default:
203
153
  throw new Error(binding.type);
204
154
  }
205
-
206
155
  _this2.bindings[name] = value;
207
156
  };
208
-
209
157
  for (var _i2 = 0, _Object$entries2 = Object.entries(bindings); _i2 < _Object$entries2.length; _i2++) {
210
158
  var _ret = _loop();
211
-
212
159
  if (_ret === "continue") continue;
213
160
  }
214
161
  }
@@ -221,55 +168,45 @@ var WEBGLRenderPipeline = function (_RenderPipeline) {
221
168
  key: "draw",
222
169
  value: function draw(options) {
223
170
  var _this$_indexBuffer,
224
- _this3 = this;
225
-
171
+ _this3 = this;
226
172
  var _options$renderPass = options.renderPass,
227
- renderPass = _options$renderPass === void 0 ? this.device.getDefaultRenderPass() : _options$renderPass,
228
- vertexCount = options.vertexCount,
229
- instanceCount = options.instanceCount,
230
- _options$firstVertex = options.firstVertex,
231
- firstVertex = _options$firstVertex === void 0 ? 0 : _options$firstVertex;
173
+ renderPass = _options$renderPass === void 0 ? this.device.getDefaultRenderPass() : _options$renderPass,
174
+ vertexCount = options.vertexCount,
175
+ instanceCount = options.instanceCount,
176
+ _options$firstVertex = options.firstVertex,
177
+ firstVertex = _options$firstVertex === void 0 ? 0 : _options$firstVertex;
232
178
  var drawMode = getDrawMode(this.props.topology);
233
179
  var isIndexed = Boolean(this._indexBuffer);
234
180
  var indexType = ((_this$_indexBuffer = this._indexBuffer) === null || _this$_indexBuffer === void 0 ? void 0 : _this$_indexBuffer.props.indexType) === 'uint16' ? _constants.default.UNSIGNED_SHORT : _constants.default.UNSIGNED_INT;
235
181
  var isInstanced = Number(options.instanceCount) > 0;
236
-
237
182
  if (!this._areTexturesRenderable() || options.vertexCount === 0) {
238
183
  return false;
239
184
  }
240
-
241
185
  this.device.gl.useProgram(this.handle);
242
186
  this.vertexArrayObject.bind(function () {
243
187
  var primitiveMode = getGLPrimitive(_this3.props.topology);
244
188
  var transformFeedback = null;
245
-
246
189
  if (transformFeedback) {
247
190
  transformFeedback.begin(primitiveMode);
248
191
  }
249
-
250
192
  _this3._applyBindings();
251
-
252
193
  _this3._applyUniforms();
253
-
254
194
  (0, _deviceParameters.withDeviceParameters)(_this3.device, _this3.props.parameters, function () {
255
195
  (0, _deviceParameters.withGLParameters)(_this3.device, {
256
196
  framebuffer: renderPass.props.framebuffer
257
197
  }, function () {
258
198
  if (isIndexed && isInstanced) {
259
199
  var _this3$device$gl;
260
-
261
200
  (_this3$device$gl = _this3.device.gl2) === null || _this3$device$gl === void 0 ? void 0 : _this3$device$gl.drawElementsInstanced(drawMode, vertexCount || 0, indexType, firstVertex, instanceCount || 0);
262
201
  } else if (isIndexed) {
263
202
  _this3.device.gl.drawElements(drawMode, vertexCount || 0, indexType, firstVertex);
264
203
  } else if (isInstanced) {
265
204
  var _this3$device$gl2;
266
-
267
205
  (_this3$device$gl2 = _this3.device.gl2) === null || _this3$device$gl2 === void 0 ? void 0 : _this3$device$gl2.drawArraysInstanced(drawMode, firstVertex, vertexCount || 0, instanceCount || 0);
268
206
  } else {
269
207
  _this3.device.gl.drawArrays(drawMode, firstVertex, vertexCount || 0);
270
208
  }
271
209
  });
272
-
273
210
  if (transformFeedback) {
274
211
  transformFeedback.end();
275
212
  }
@@ -283,23 +220,16 @@ var WEBGLRenderPipeline = function (_RenderPipeline) {
283
220
  var gl = this.device.gl;
284
221
  gl.attachShader(this.handle, this.vs.handle);
285
222
  gl.attachShader(this.handle, this.fs.handle);
286
-
287
223
  _api.log.time(LOG_PROGRAM_PERF_PRIORITY, "linkProgram for ".concat(this.id))();
288
-
289
224
  gl.linkProgram(this.handle);
290
-
291
225
  _api.log.timeEnd(LOG_PROGRAM_PERF_PRIORITY, "linkProgram for ".concat(this.id))();
292
-
293
226
  if (gl.debug || _api.log.level > 0) {
294
227
  var linked = gl.getProgramParameter(this.handle, gl.LINK_STATUS);
295
-
296
228
  if (!linked) {
297
229
  throw new Error("Error linking: ".concat(gl.getProgramInfoLog(this.handle)));
298
230
  }
299
-
300
231
  gl.validateProgram(this.handle);
301
232
  var validated = gl.getProgramParameter(this.handle, gl.VALIDATE_STATUS);
302
-
303
233
  if (!validated) {
304
234
  throw new Error("Error validating: ".concat(gl.getProgramInfoLog(this.handle)));
305
235
  }
@@ -309,24 +239,19 @@ var WEBGLRenderPipeline = function (_RenderPipeline) {
309
239
  key: "_areTexturesRenderable",
310
240
  value: function _areTexturesRenderable() {
311
241
  var texturesRenderable = true;
312
-
313
242
  for (var _i3 = 0, _Object$entries3 = Object.entries(this._textureUniforms); _i3 < _Object$entries3.length; _i3++) {
314
243
  var _Object$entries3$_i = (0, _slicedToArray2.default)(_Object$entries3[_i3], 2),
315
- texture = _Object$entries3$_i[1];
316
-
244
+ texture = _Object$entries3$_i[1];
317
245
  texture.update();
318
246
  texturesRenderable = texturesRenderable && texture.loaded;
319
247
  }
320
-
321
248
  for (var _i4 = 0, _Object$entries4 = Object.entries(this.bindings); _i4 < _Object$entries4.length; _i4++) {
322
249
  var _Object$entries4$_i = (0, _slicedToArray2.default)(_Object$entries4[_i4], 2),
323
- _texture = _Object$entries4$_i[1];
324
-
250
+ _texture = _Object$entries4$_i[1];
325
251
  if (_texture.loaded !== undefined) {
326
252
  texturesRenderable = texturesRenderable && _texture.loaded;
327
253
  }
328
254
  }
329
-
330
255
  return texturesRenderable;
331
256
  }
332
257
  }, {
@@ -334,60 +259,46 @@ var WEBGLRenderPipeline = function (_RenderPipeline) {
334
259
  value: function _applyBindings() {
335
260
  this.device.gl.useProgram(this.handle);
336
261
  var gl2 = this.device.gl2;
337
-
338
262
  if (!gl2) {
339
263
  throw new Error('bindings');
340
264
  }
341
-
342
265
  var textureUnit = 0;
343
266
  var uniformBufferIndex = 0;
344
-
345
267
  var _iterator = _createForOfIteratorHelper(this.layout.bindings),
346
- _step;
347
-
268
+ _step;
348
269
  try {
349
270
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
350
271
  var binding = _step.value;
351
272
  var value = this.bindings[binding.name];
352
-
353
273
  if (!value) {
354
274
  throw new Error("No value for binding ".concat(binding.name, " in ").concat(this.id));
355
275
  }
356
-
357
276
  switch (binding.type) {
358
277
  case 'uniform':
359
278
  var name = binding.name;
360
279
  var location = gl2.getUniformBlockIndex(this.handle, name);
361
-
362
280
  if (location === _constants.default.INVALID_INDEX) {
363
281
  throw new Error("Invalid uniform block name ".concat(name));
364
282
  }
365
-
366
283
  gl2.uniformBlockBinding(this.handle, uniformBufferIndex, location);
367
-
368
284
  if (value instanceof _webglBuffer.default) {
369
285
  gl2.bindBufferBase(_constants.default.UNIFORM_BUFFER, uniformBufferIndex, value.handle);
370
286
  } else {
371
287
  gl2.bindBufferRange(_constants.default.UNIFORM_BUFFER, uniformBufferIndex, value.buffer.handle, value.offset || 0, value.size || value.buffer.byteLength - value.offset);
372
288
  }
373
-
374
289
  uniformBufferIndex += 1;
375
290
  break;
376
-
377
291
  case 'texture':
378
292
  if (!(value instanceof _webglTexture.default)) {
379
293
  throw new Error('texture');
380
294
  }
381
-
382
295
  var texture = value;
383
296
  gl2.activeTexture(_constants.default.TEXTURE0 + textureUnit);
384
297
  gl2.bindTexture(texture.target, texture.handle);
385
298
  textureUnit += 1;
386
299
  break;
387
-
388
300
  case 'sampler':
389
301
  break;
390
-
391
302
  case 'storage':
392
303
  case 'read-only-storage':
393
304
  throw new Error("binding type '".concat(binding.type, "' not supported in WebGL"));
@@ -403,17 +314,15 @@ var WEBGLRenderPipeline = function (_RenderPipeline) {
403
314
  key: "_applyUniforms",
404
315
  value: function _applyUniforms() {
405
316
  var _iterator2 = _createForOfIteratorHelper(this.layout.uniforms || []),
406
- _step2;
407
-
317
+ _step2;
408
318
  try {
409
319
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
410
320
  var uniformLayout = _step2.value;
411
321
  var name = uniformLayout.name,
412
- location = uniformLayout.location,
413
- type = uniformLayout.type,
414
- textureUnit = uniformLayout.textureUnit;
322
+ location = uniformLayout.location,
323
+ type = uniformLayout.type,
324
+ textureUnit = uniformLayout.textureUnit;
415
325
  var value = this.uniforms[name] || textureUnit;
416
-
417
326
  if (value !== undefined) {
418
327
  (0, _setUniform.setUniform)(this.device.gl, location, type, value);
419
328
  }
@@ -427,65 +336,47 @@ var WEBGLRenderPipeline = function (_RenderPipeline) {
427
336
  }]);
428
337
  return WEBGLRenderPipeline;
429
338
  }(_api.RenderPipeline);
430
-
431
339
  exports.default = WEBGLRenderPipeline;
432
-
433
340
  function getDrawMode(topology) {
434
341
  switch (topology) {
435
342
  case 'point-list':
436
343
  return _constants.default.POINTS;
437
-
438
344
  case 'line-list':
439
345
  return _constants.default.LINES;
440
-
441
346
  case 'line-strip':
442
347
  return _constants.default.LINE_STRIP;
443
-
444
348
  case 'line-loop':
445
349
  return _constants.default.LINE_LOOP;
446
-
447
350
  case 'triangle-list':
448
351
  return _constants.default.TRIANGLES;
449
-
450
352
  case 'triangle-strip':
451
353
  return _constants.default.TRIANGLE_STRIP;
452
-
453
354
  case 'triangle-fan':
454
355
  return _constants.default.TRIANGLE_FAN;
455
-
456
356
  default:
457
357
  throw new Error(topology);
458
358
  }
459
359
  }
460
-
461
360
  function getGLPrimitive(topology) {
462
361
  switch (topology) {
463
362
  case 'point-list':
464
363
  return _constants.default.POINTS;
465
-
466
364
  case 'line-list':
467
365
  return _constants.default.LINES;
468
-
469
366
  case 'line-strip':
470
367
  return _constants.default.LINES;
471
-
472
368
  case 'line-loop':
473
369
  return _constants.default.LINES;
474
-
475
370
  case 'triangle-list':
476
371
  return _constants.default.TRIANGLES;
477
-
478
372
  case 'triangle-strip':
479
373
  return _constants.default.TRIANGLES;
480
-
481
374
  case 'triangle-fan':
482
375
  return _constants.default.TRIANGLES;
483
-
484
376
  default:
485
377
  throw new Error(topology);
486
378
  }
487
379
  }
488
-
489
380
  function getAttributeLayout(layout, name) {
490
381
  return layout.attributes.find(function (binding) {
491
382
  return binding.name === name;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/adapter/resources/webgl-render-pipeline.ts"],"names":["LOG_PROGRAM_PERF_PRIORITY","WEBGLRenderPipeline","device","props","handle","gl","createProgram","__SPECTOR_Metadata","id","vs","fs","varyings","bufferMode","GL","SEPARATE_ATTRIBS","length","assertWebGL2","gl2","transformFeedbackVaryings","_compileAndLink","layout","vertexArrayObject","WEBGLVertexArrayObject","deleteProgram","destroyed","indexBuffer","webglBuffer","setElementBuffer","_indexBuffer","attributes","Object","entries","name","buffer","attribute","getAttributeLayout","log","warn","decoded","format","typeString","type","size","components","stride","byteLength","normalized","integer","divisor","stepMode","setBuffer","location","offset","bindings","value","binding","find","WEBGLBuffer","Error","WEBGLTexture","uniforms","assign","options","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","drawElementsInstanced","drawElements","drawArraysInstanced","drawArrays","end","attachShader","time","linkProgram","timeEnd","debug","level","linked","getProgramParameter","LINK_STATUS","getProgramInfoLog","validateProgram","validated","VALIDATE_STATUS","texturesRenderable","_textureUniforms","texture","update","loaded","undefined","textureUnit","uniformBufferIndex","getUniformBlockIndex","INVALID_INDEX","uniformBlockBinding","bindBufferBase","UNIFORM_BUFFER","bindBufferRange","activeTexture","TEXTURE0","bindTexture","target","uniformLayout","RenderPipeline","POINTS","LINES","LINE_STRIP","LINE_LOOP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN"],"mappings":"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","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 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[] | 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 // @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 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;\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;\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"],"file":"webgl-render-pipeline.js"}
1
+ {"version":3,"file":"webgl-render-pipeline.js","names":["_api","require","_constants","_interopRequireDefault","_textureFormats","_getShaderLayout","_deviceParameters","_setUniform","_webglBuffer","_webglTexture","_webglVertexArrayObject","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","i","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","Object","prototype","toString","slice","constructor","name","from","test","arr","len","arr2","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","Reflect","construct","arguments","apply","_possibleConstructorReturn2","sham","Proxy","Boolean","valueOf","LOG_PROGRAM_PERF_PRIORITY","WEBGLRenderPipeline","_RenderPipeline","_inherits2","_super","device","props","_this","_classCallCheck2","_defineProperty2","_assertThisInitialized2","handle","gl","createProgram","__SPECTOR_Metadata","id","vs","cast","fs","varyings","_props$bufferMode","bufferMode","GL","SEPARATE_ATTRIBS","_this$device$gl","assertWebGL2","gl2","transformFeedbackVaryings","_compileAndLink","layout","getShaderLayout","vertexArrayObject","WEBGLVertexArrayObject","_createClass2","key","destroy","deleteProgram","destroyed","setIndexBuffer","indexBuffer","webglBuffer","setElementBuffer","_indexBuffer","setAttributes","attributes","_i","_Object$entries","entries","_Object$entries$_i","_slicedToArray2","buffer","attribute","getAttributeLayout","log","warn","concat","decoded","decodeVertexFormat","format","typeString","type","size","components","stride","byteLength","normalized","integer","divisor","stepMode","getWebGLDataType","setBuffer","location","offset","setBindings","bindings","_this2","_loop","_Object$entries2$_i","_Object$entries2","_i2","binding","find","WEBGLBuffer","Error","WEBGLTexture","_ret","setUniforms","uniforms","assign","draw","options","_this$_indexBuffer","_this3","_options$renderPass","renderPass","getDefaultRenderPass","vertexCount","instanceCount","_options$firstVertex","firstVertex","drawMode","getDrawMode","topology","isIndexed","indexType","UNSIGNED_SHORT","UNSIGNED_INT","isInstanced","Number","_areTexturesRenderable","useProgram","bind","primitiveMode","getGLPrimitive","transformFeedback","begin","_applyBindings","_applyUniforms","withDeviceParameters","parameters","withGLParameters","framebuffer","_this3$device$gl","drawElementsInstanced","drawElements","_this3$device$gl2","drawArraysInstanced","drawArrays","end","attachShader","time","linkProgram","timeEnd","debug","level","linked","getProgramParameter","LINK_STATUS","getProgramInfoLog","validateProgram","validated","VALIDATE_STATUS","texturesRenderable","_i3","_Object$entries3","_textureUniforms","_Object$entries3$_i","texture","update","loaded","_i4","_Object$entries4","_Object$entries4$_i","undefined","textureUnit","uniformBufferIndex","_iterator","_step","getUniformBlockIndex","INVALID_INDEX","uniformBlockBinding","bindBufferBase","UNIFORM_BUFFER","bindBufferRange","activeTexture","TEXTURE0","bindTexture","target","_iterator2","_step2","uniformLayout","setUniform","RenderPipeline","exports","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 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[] | 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 // @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 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;\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;\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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"}