@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,400 +1,338 @@
1
- import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
1
  import { RenderPipeline, cast, log, decodeVertexFormat } from '@luma.gl/api';
3
2
  import GL from '@luma.gl/constants';
4
- import { getWebGLDataType } from '../converters/texture-formats';
5
- import { getShaderLayout } from '../helpers/get-shader-layout';
6
- import { withDeviceParameters, withGLParameters } from '../converters/device-parameters';
7
- import { setUniform } from '../helpers/set-uniform';
8
- import WEBGLBuffer from './webgl-buffer';
9
- import WEBGLTexture from './webgl-texture';
10
- import WEBGLVertexArrayObject from '../objects/webgl-vertex-array-object';
3
+ import { getWebGLDataType } from '../converters/texture-formats.js';
4
+ import { getShaderLayout } from '../helpers/get-shader-layout.js';
5
+ import { withDeviceParameters, withGLParameters } from '../converters/device-parameters.js';
6
+ import { setUniform } from '../helpers/set-uniform.js';
7
+ import WEBGLBuffer from './webgl-buffer.js';
8
+ import WEBGLTexture from './webgl-texture.js';
9
+ import WEBGLVertexArrayObject from '../objects/webgl-vertex-array-object.js';
11
10
  const LOG_PROGRAM_PERF_PRIORITY = 4;
11
+ /** Creates a new render pipeline */
12
12
  export default class WEBGLRenderPipeline extends RenderPipeline {
13
- constructor(device, props) {
14
- super(device, props);
15
-
16
- _defineProperty(this, "device", void 0);
17
-
18
- _defineProperty(this, "handle", void 0);
19
-
20
- _defineProperty(this, "vs", void 0);
21
-
22
- _defineProperty(this, "fs", void 0);
23
-
24
- _defineProperty(this, "layout", void 0);
25
-
26
- _defineProperty(this, "varyings", null);
27
-
28
- _defineProperty(this, "vertexArrayObject", void 0);
29
-
30
- _defineProperty(this, "_indexBuffer", void 0);
31
-
32
- _defineProperty(this, "uniforms", {});
33
-
34
- _defineProperty(this, "bindings", {});
35
-
36
- _defineProperty(this, "_textureUniforms", {});
37
-
38
- _defineProperty(this, "_textureIndexCounter", 0);
39
-
40
- _defineProperty(this, "_uniformCount", 0);
41
-
42
- _defineProperty(this, "_uniformSetters", {});
43
-
44
- this.device = device;
45
- this.handle = this.props.handle || this.device.gl.createProgram();
46
- this.handle.__SPECTOR_Metadata = {
47
- id: this.props.id
48
- };
49
- this.vs = cast(props.vs);
50
- this.fs = cast(props.fs);
51
- const {
52
- varyings,
53
- bufferMode = GL.SEPARATE_ATTRIBS
54
- } = props;
55
-
56
- if (varyings && varyings.length > 0) {
57
- var _this$device$gl;
58
-
59
- this.device.assertWebGL2();
60
- this.varyings = varyings;
61
- (_this$device$gl = this.device.gl2) === null || _this$device$gl === void 0 ? void 0 : _this$device$gl.transformFeedbackVaryings(this.handle, varyings, bufferMode);
62
- }
63
-
64
- this._compileAndLink();
65
-
66
- this.layout = props.layout || getShaderLayout(this.device.gl, this.handle);
67
- this.vertexArrayObject = new WEBGLVertexArrayObject(this.device);
68
- }
69
-
70
- destroy() {
71
- if (this.handle) {
72
- this.device.gl.deleteProgram(this.handle);
73
- this.destroyed = true;
13
+ constructor(device, props) {
14
+ super(device, props);
15
+ // configuration: ProgramConfiguration;
16
+ // Experimental flag to avoid deleting Program object while it is cached
17
+ this.varyings = null;
18
+ this.uniforms = {};
19
+ this.bindings = {};
20
+ this._textureUniforms = {};
21
+ this._textureIndexCounter = 0;
22
+ this._uniformCount = 0;
23
+ this._uniformSetters = {}; // TODO are these used?
24
+ this.device = device;
25
+ this.handle = this.props.handle || this.device.gl.createProgram();
26
+ // @ts-expect-error
27
+ this.handle.__SPECTOR_Metadata = { id: this.props.id };
28
+ // Create shaders if needed
29
+ this.vs = cast(props.vs);
30
+ this.fs = cast(props.fs);
31
+ // assert(this.vs.stage === 'vertex');
32
+ // assert(this.fs.stage === 'fragment');
33
+ // Setup varyings if supplied
34
+ // @ts-expect-error WebGL only
35
+ const { varyings, bufferMode = GL.SEPARATE_ATTRIBS } = props;
36
+ if (varyings && varyings.length > 0) {
37
+ this.device.assertWebGL2();
38
+ this.varyings = varyings;
39
+ this.device.gl2?.transformFeedbackVaryings(this.handle, varyings, bufferMode);
40
+ }
41
+ this._compileAndLink();
42
+ this.layout = props.layout || getShaderLayout(this.device.gl, this.handle);
43
+ this.vertexArrayObject = new WEBGLVertexArrayObject(this.device);
74
44
  }
75
- }
76
-
77
- setIndexBuffer(indexBuffer) {
78
- const webglBuffer = cast(indexBuffer);
79
- this.vertexArrayObject.setElementBuffer(webglBuffer);
80
- this._indexBuffer = indexBuffer;
81
- }
82
-
83
- setAttributes(attributes) {
84
- for (const [name, buffer] of Object.entries(attributes)) {
85
- const webglBuffer = cast(buffer);
86
- const attribute = getAttributeLayout(this.layout, name);
87
-
88
- if (!attribute) {
89
- log.warn("Ignoring buffer supplied for unknown attribute \"".concat(name, "\" in pipeline \"").concat(this.id, "\" (buffer \"").concat(buffer.id, "\")"))();
90
- continue;
91
- }
92
-
93
- const decoded = decodeVertexFormat(attribute.format);
94
- const {
95
- type: typeString,
96
- components: size,
97
- byteLength: stride,
98
- normalized,
99
- integer
100
- } = decoded;
101
- const divisor = attribute.stepMode === 'instance' ? 1 : 0;
102
- const type = getWebGLDataType(typeString);
103
- this.vertexArrayObject.setBuffer(attribute.location, webglBuffer, {
104
- size,
105
- type,
106
- stride,
107
- offset: 0,
108
- normalized,
109
- integer,
110
- divisor
111
- });
45
+ destroy() {
46
+ if (this.handle) {
47
+ this.device.gl.deleteProgram(this.handle);
48
+ // this.handle = null;
49
+ this.destroyed = true;
50
+ }
112
51
  }
113
- }
114
-
115
- setBindings(bindings) {
116
- for (const [name, value] of Object.entries(bindings)) {
117
- const binding = this.layout.bindings.find(binding => binding.name === name);
118
-
119
- if (!binding) {
120
- log.warn("Unknown binding ".concat(name, " in render pipeline ").concat(this.id))();
121
- continue;
122
- }
123
-
124
- if (!value) {
125
- log.warn("Unsetting binding ".concat(name, " in render pipeline ").concat(this.id))();
126
- }
127
-
128
- switch (binding.type) {
129
- case 'uniform':
130
- if (!(value instanceof WEBGLBuffer) && !(value.buffer instanceof WEBGLBuffer)) {
131
- throw new Error('buffer value');
132
- }
133
-
134
- break;
135
-
136
- case 'texture':
137
- if (!(value instanceof WEBGLTexture)) {
138
- throw new Error('texture value');
139
- }
140
-
141
- break;
142
-
143
- case 'sampler':
144
- log.warn("Ignoring sampler ".concat(name))();
145
- break;
146
-
147
- default:
148
- throw new Error(binding.type);
149
- }
150
-
151
- this.bindings[name] = value;
52
+ setIndexBuffer(indexBuffer) {
53
+ const webglBuffer = cast(indexBuffer);
54
+ this.vertexArrayObject.setElementBuffer(webglBuffer);
55
+ this._indexBuffer = indexBuffer;
152
56
  }
153
- }
154
-
155
- setUniforms(uniforms) {
156
- Object.assign(this.uniforms, uniforms);
157
- }
158
-
159
- draw(options) {
160
- var _this$_indexBuffer;
161
-
162
- const {
163
- renderPass = this.device.getDefaultRenderPass(),
164
- vertexCount,
165
- instanceCount,
166
- firstVertex = 0
167
- } = options;
168
- const drawMode = getDrawMode(this.props.topology);
169
- const isIndexed = Boolean(this._indexBuffer);
170
- const indexType = ((_this$_indexBuffer = this._indexBuffer) === null || _this$_indexBuffer === void 0 ? void 0 : _this$_indexBuffer.props.indexType) === 'uint16' ? GL.UNSIGNED_SHORT : GL.UNSIGNED_INT;
171
- const isInstanced = Number(options.instanceCount) > 0;
172
-
173
- if (!this._areTexturesRenderable() || options.vertexCount === 0) {
174
- return false;
57
+ /** @todo needed for portable model */
58
+ setAttributes(attributes) {
59
+ for (const [name, buffer] of Object.entries(attributes)) {
60
+ const webglBuffer = cast(buffer);
61
+ const attribute = getAttributeLayout(this.layout, name);
62
+ if (!attribute) {
63
+ log.warn(`Ignoring buffer supplied for unknown attribute "${name}" in pipeline "${this.id}" (buffer "${buffer.id}")`)();
64
+ continue;
65
+ }
66
+ const decoded = decodeVertexFormat(attribute.format);
67
+ const { type: typeString, components: size, byteLength: stride, normalized, integer } = decoded;
68
+ const divisor = attribute.stepMode === 'instance' ? 1 : 0;
69
+ const type = getWebGLDataType(typeString);
70
+ this.vertexArrayObject.setBuffer(attribute.location, webglBuffer, {
71
+ size,
72
+ type,
73
+ stride,
74
+ offset: 0,
75
+ normalized,
76
+ integer,
77
+ divisor
78
+ });
79
+ }
175
80
  }
176
-
177
- this.device.gl.useProgram(this.handle);
178
- this.vertexArrayObject.bind(() => {
179
- const primitiveMode = getGLPrimitive(this.props.topology);
180
- const transformFeedback = null;
181
-
182
- if (transformFeedback) {
183
- transformFeedback.begin(primitiveMode);
184
- }
185
-
186
- this._applyBindings();
187
-
188
- this._applyUniforms();
189
-
190
- withDeviceParameters(this.device, this.props.parameters, () => {
191
- withGLParameters(this.device, {
192
- framebuffer: renderPass.props.framebuffer
193
- }, () => {
194
- if (isIndexed && isInstanced) {
195
- var _this$device$gl2;
196
-
197
- (_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);
198
- } else if (isIndexed) {
199
- this.device.gl.drawElements(drawMode, vertexCount || 0, indexType, firstVertex);
200
- } else if (isInstanced) {
201
- var _this$device$gl3;
202
-
203
- (_this$device$gl3 = this.device.gl2) === null || _this$device$gl3 === void 0 ? void 0 : _this$device$gl3.drawArraysInstanced(drawMode, firstVertex, vertexCount || 0, instanceCount || 0);
204
- } else {
205
- this.device.gl.drawArrays(drawMode, firstVertex, vertexCount || 0);
206
- }
207
- });
208
-
209
- if (transformFeedback) {
210
- transformFeedback.end();
81
+ /** @todo needed for portable model */
82
+ setBindings(bindings) {
83
+ // if (log.priority >= 2) {
84
+ // checkUniformValues(uniforms, this.id, this._uniformSetters);
85
+ // }
86
+ for (const [name, value] of Object.entries(bindings)) {
87
+ const binding = this.layout.bindings.find((binding) => binding.name === name);
88
+ if (!binding) {
89
+ log.warn(`Unknown binding ${name} in render pipeline ${this.id}`)();
90
+ continue;
91
+ }
92
+ if (!value) {
93
+ log.warn(`Unsetting binding ${name} in render pipeline ${this.id}`)();
94
+ }
95
+ switch (binding.type) {
96
+ case 'uniform':
97
+ // @ts-expect-error
98
+ if (!(value instanceof WEBGLBuffer) && !(value.buffer instanceof WEBGLBuffer)) {
99
+ throw new Error('buffer value');
100
+ }
101
+ break;
102
+ case 'texture':
103
+ if (!(value instanceof WEBGLTexture)) {
104
+ throw new Error('texture value');
105
+ }
106
+ break;
107
+ case 'sampler':
108
+ log.warn(`Ignoring sampler ${name}`)();
109
+ break;
110
+ default:
111
+ throw new Error(binding.type);
112
+ }
113
+ this.bindings[name] = value;
211
114
  }
212
- });
213
- });
214
- return true;
215
- }
216
-
217
- _compileAndLink() {
218
- const {
219
- gl
220
- } = this.device;
221
- gl.attachShader(this.handle, this.vs.handle);
222
- gl.attachShader(this.handle, this.fs.handle);
223
- log.time(LOG_PROGRAM_PERF_PRIORITY, "linkProgram for ".concat(this.id))();
224
- gl.linkProgram(this.handle);
225
- log.timeEnd(LOG_PROGRAM_PERF_PRIORITY, "linkProgram for ".concat(this.id))();
226
-
227
- if (gl.debug || log.level > 0) {
228
- const linked = gl.getProgramParameter(this.handle, gl.LINK_STATUS);
229
-
230
- if (!linked) {
231
- throw new Error("Error linking: ".concat(gl.getProgramInfoLog(this.handle)));
232
- }
233
-
234
- gl.validateProgram(this.handle);
235
- const validated = gl.getProgramParameter(this.handle, gl.VALIDATE_STATUS);
236
-
237
- if (!validated) {
238
- throw new Error("Error validating: ".concat(gl.getProgramInfoLog(this.handle)));
239
- }
240
115
  }
241
- }
242
-
243
- _areTexturesRenderable() {
244
- let texturesRenderable = true;
245
-
246
- for (const [, texture] of Object.entries(this._textureUniforms)) {
247
- texture.update();
248
- texturesRenderable = texturesRenderable && texture.loaded;
116
+ setUniforms(uniforms) {
117
+ // TODO - check against layout
118
+ Object.assign(this.uniforms, uniforms);
249
119
  }
250
-
251
- for (const [, texture] of Object.entries(this.bindings)) {
252
- if (texture.loaded !== undefined) {
253
- texturesRenderable = texturesRenderable && texture.loaded;
254
- }
120
+ /** @todo needed for portable model
121
+ * @note The WebGL API is offers many ways to draw things
122
+ * This function unifies those ways into a single call using common parameters with sane defaults
123
+ */
124
+ draw(options) {
125
+ const { renderPass = this.device.getDefaultRenderPass(), vertexCount,
126
+ // indexCount,
127
+ instanceCount, firstVertex = 0,
128
+ // firstIndex,
129
+ // firstInstance,
130
+ // baseVertex
131
+ } = options;
132
+ const drawMode = getDrawMode(this.props.topology);
133
+ const isIndexed = Boolean(this._indexBuffer);
134
+ const indexType = this._indexBuffer?.props.indexType === 'uint16' ? GL.UNSIGNED_SHORT : GL.UNSIGNED_INT;
135
+ const isInstanced = Number(options.instanceCount) > 0;
136
+ // Avoid WebGL draw call when not rendering any data or values are incomplete
137
+ // Note: async textures set as uniforms might still be loading.
138
+ // Now that all uniforms have been updated, check if any texture
139
+ // in the uniforms is not yet initialized, then we don't draw
140
+ if (!this._areTexturesRenderable() || options.vertexCount === 0) {
141
+ // (isInstanced && instanceCount === 0)
142
+ return false;
143
+ }
144
+ this.device.gl.useProgram(this.handle);
145
+ this.vertexArrayObject.bind(() => {
146
+ const primitiveMode = getGLPrimitive(this.props.topology);
147
+ const transformFeedback = null;
148
+ if (transformFeedback) {
149
+ transformFeedback.begin(primitiveMode);
150
+ }
151
+ // We have to apply bindings before every draw call since other draw calls will overwrite
152
+ this._applyBindings();
153
+ this._applyUniforms();
154
+ // TODO - double context push/pop
155
+ withDeviceParameters(this.device, this.props.parameters, () => {
156
+ withGLParameters(this.device, { framebuffer: renderPass.props.framebuffer }, () => {
157
+ // TODO - Use polyfilled WebGL2RenderingContext instead of ANGLE extension
158
+ if (isIndexed && isInstanced) {
159
+ // ANGLE_instanced_arrays extension
160
+ this.device.gl2?.drawElementsInstanced(drawMode, vertexCount || 0, // indexCount?
161
+ indexType, firstVertex, instanceCount || 0);
162
+ // } else if (isIndexed && this.device.isWebGL2 && !isNaN(start) && !isNaN(end)) {
163
+ // this.device.gl2.drawRangeElements(drawMode, start, end, vertexCount, indexType, offset);
164
+ }
165
+ else if (isIndexed) {
166
+ this.device.gl.drawElements(drawMode, vertexCount || 0, indexType, firstVertex); // indexCount?
167
+ }
168
+ else if (isInstanced) {
169
+ this.device.gl2?.drawArraysInstanced(drawMode, firstVertex, vertexCount || 0, instanceCount || 0);
170
+ }
171
+ else {
172
+ this.device.gl.drawArrays(drawMode, firstVertex, vertexCount || 0);
173
+ }
174
+ });
175
+ if (transformFeedback) {
176
+ transformFeedback.end();
177
+ }
178
+ });
179
+ });
180
+ return true;
255
181
  }
256
-
257
- return texturesRenderable;
258
- }
259
-
260
- _applyBindings() {
261
- this.device.gl.useProgram(this.handle);
262
- const {
263
- gl2
264
- } = this.device;
265
-
266
- if (!gl2) {
267
- throw new Error('bindings');
182
+ // setAttributes(attributes: Record<string, Buffer>): void {}
183
+ // setBindings(bindings: Record<string, Binding>): void {}
184
+ _compileAndLink() {
185
+ const { gl } = this.device;
186
+ gl.attachShader(this.handle, this.vs.handle);
187
+ gl.attachShader(this.handle, this.fs.handle);
188
+ log.time(LOG_PROGRAM_PERF_PRIORITY, `linkProgram for ${this.id}`)();
189
+ gl.linkProgram(this.handle);
190
+ log.timeEnd(LOG_PROGRAM_PERF_PRIORITY, `linkProgram for ${this.id}`)();
191
+ // Avoid checking program linking error in production
192
+ // @ts-expect-error
193
+ if (gl.debug || log.level > 0) {
194
+ const linked = gl.getProgramParameter(this.handle, gl.LINK_STATUS);
195
+ if (!linked) {
196
+ throw new Error(`Error linking: ${gl.getProgramInfoLog(this.handle)}`);
197
+ }
198
+ gl.validateProgram(this.handle);
199
+ const validated = gl.getProgramParameter(this.handle, gl.VALIDATE_STATUS);
200
+ if (!validated) {
201
+ throw new Error(`Error validating: ${gl.getProgramInfoLog(this.handle)}`);
202
+ }
203
+ }
268
204
  }
269
-
270
- let textureUnit = 0;
271
- let uniformBufferIndex = 0;
272
-
273
- for (const binding of this.layout.bindings) {
274
- const value = this.bindings[binding.name];
275
-
276
- if (!value) {
277
- throw new Error("No value for binding ".concat(binding.name, " in ").concat(this.id));
278
- }
279
-
280
- switch (binding.type) {
281
- case 'uniform':
282
- const {
283
- name
284
- } = binding;
285
- const location = gl2.getUniformBlockIndex(this.handle, name);
286
-
287
- if (location === GL.INVALID_INDEX) {
288
- throw new Error("Invalid uniform block name ".concat(name));
289
- }
290
-
291
- gl2.uniformBlockBinding(this.handle, uniformBufferIndex, location);
292
-
293
- if (value instanceof WEBGLBuffer) {
294
- gl2.bindBufferBase(GL.UNIFORM_BUFFER, uniformBufferIndex, value.handle);
295
- } else {
296
- gl2.bindBufferRange(GL.UNIFORM_BUFFER, uniformBufferIndex, value.buffer.handle, value.offset || 0, value.size || value.buffer.byteLength - value.offset);
297
- }
298
-
299
- uniformBufferIndex += 1;
300
- break;
301
-
302
- case 'texture':
303
- if (!(value instanceof WEBGLTexture)) {
304
- throw new Error('texture');
305
- }
306
-
307
- const texture = value;
308
- gl2.activeTexture(GL.TEXTURE0 + textureUnit);
309
- gl2.bindTexture(texture.target, texture.handle);
310
- textureUnit += 1;
311
- break;
312
-
313
- case 'sampler':
314
- break;
315
-
316
- case 'storage':
317
- case 'read-only-storage':
318
- throw new Error("binding type '".concat(binding.type, "' not supported in WebGL"));
319
- }
205
+ // PRIVATE METHODS
206
+ /**
207
+ * Checks if all texture-values uniforms are renderable (i.e. loaded)
208
+ * Update a texture if needed (e.g. from video)
209
+ * Note: This is currently done before every draw call
210
+ */
211
+ _areTexturesRenderable() {
212
+ let texturesRenderable = true;
213
+ for (const [, texture] of Object.entries(this._textureUniforms)) {
214
+ texture.update();
215
+ texturesRenderable = texturesRenderable && texture.loaded;
216
+ }
217
+ for (const [, texture] of Object.entries(this.bindings)) {
218
+ // texture.update();
219
+ if (texture.loaded !== undefined) {
220
+ texturesRenderable = texturesRenderable && texture.loaded;
221
+ }
222
+ }
223
+ return texturesRenderable;
320
224
  }
321
- }
322
-
323
- _applyUniforms() {
324
- for (const uniformLayout of this.layout.uniforms || []) {
325
- const {
326
- name,
327
- location,
328
- type,
329
- textureUnit
330
- } = uniformLayout;
331
- const value = this.uniforms[name] || textureUnit;
332
-
333
- if (value !== undefined) {
334
- setUniform(this.device.gl, location, type, value);
335
- }
225
+ /** Apply any bindings */
226
+ _applyBindings() {
227
+ this.device.gl.useProgram(this.handle);
228
+ const { gl2 } = this.device;
229
+ if (!gl2) {
230
+ throw new Error('bindings');
231
+ }
232
+ let textureUnit = 0;
233
+ let uniformBufferIndex = 0;
234
+ for (const binding of this.layout.bindings) {
235
+ const value = this.bindings[binding.name];
236
+ if (!value) {
237
+ throw new Error(`No value for binding ${binding.name} in ${this.id}`);
238
+ }
239
+ switch (binding.type) {
240
+ case 'uniform':
241
+ // Set buffer
242
+ const { name } = binding;
243
+ const location = gl2.getUniformBlockIndex(this.handle, name);
244
+ if (location === GL.INVALID_INDEX) {
245
+ throw new Error(`Invalid uniform block name ${name}`);
246
+ }
247
+ gl2.uniformBlockBinding(this.handle, uniformBufferIndex, location);
248
+ // console.debug(binding, location);
249
+ if (value instanceof WEBGLBuffer) {
250
+ gl2.bindBufferBase(GL.UNIFORM_BUFFER, uniformBufferIndex, value.handle);
251
+ }
252
+ else {
253
+ gl2.bindBufferRange(GL.UNIFORM_BUFFER, uniformBufferIndex, value.buffer.handle, value.offset || 0, value.size || value.buffer.byteLength - value.offset);
254
+ }
255
+ uniformBufferIndex += 1;
256
+ break;
257
+ case 'texture':
258
+ if (!(value instanceof WEBGLTexture)) {
259
+ throw new Error('texture');
260
+ }
261
+ const texture = value;
262
+ gl2.activeTexture(GL.TEXTURE0 + textureUnit);
263
+ gl2.bindTexture(texture.target, texture.handle);
264
+ // gl2.bindSampler(textureUnit, sampler.handle);
265
+ textureUnit += 1;
266
+ break;
267
+ case 'sampler':
268
+ // ignore
269
+ break;
270
+ case 'storage':
271
+ case 'read-only-storage':
272
+ throw new Error(`binding type '${binding.type}' not supported in WebGL`);
273
+ }
274
+ }
275
+ }
276
+ _applyUniforms() {
277
+ for (const uniformLayout of this.layout.uniforms || []) {
278
+ const { name, location, type, textureUnit } = uniformLayout;
279
+ const value = this.uniforms[name] || textureUnit;
280
+ if (value !== undefined) {
281
+ setUniform(this.device.gl, location, type, value);
282
+ }
283
+ }
336
284
  }
337
- }
338
-
339
285
  }
340
-
286
+ /** Get the primitive type for transform feedback */
341
287
  function getDrawMode(topology) {
342
- switch (topology) {
343
- case 'point-list':
344
- return GL.POINTS;
345
-
346
- case 'line-list':
347
- return GL.LINES;
348
-
349
- case 'line-strip':
350
- return GL.LINE_STRIP;
351
-
352
- case 'line-loop':
353
- return GL.LINE_LOOP;
354
-
355
- case 'triangle-list':
356
- return GL.TRIANGLES;
357
-
358
- case 'triangle-strip':
359
- return GL.TRIANGLE_STRIP;
360
-
361
- case 'triangle-fan':
362
- return GL.TRIANGLE_FAN;
363
-
364
- default:
365
- throw new Error(topology);
366
- }
288
+ // prettier-ignore
289
+ switch (topology) {
290
+ case 'point-list': return GL.POINTS;
291
+ case 'line-list': return GL.LINES;
292
+ case 'line-strip': return GL.LINE_STRIP;
293
+ case 'line-loop': return GL.LINE_LOOP;
294
+ case 'triangle-list': return GL.TRIANGLES;
295
+ case 'triangle-strip': return GL.TRIANGLE_STRIP;
296
+ case 'triangle-fan': return GL.TRIANGLE_FAN;
297
+ default: throw new Error(topology);
298
+ }
367
299
  }
368
-
300
+ /** Get the primitive type for transform feedback */
369
301
  function getGLPrimitive(topology) {
370
- switch (topology) {
371
- case 'point-list':
372
- return GL.POINTS;
373
-
374
- case 'line-list':
375
- return GL.LINES;
376
-
377
- case 'line-strip':
378
- return GL.LINES;
379
-
380
- case 'line-loop':
381
- return GL.LINES;
382
-
383
- case 'triangle-list':
384
- return GL.TRIANGLES;
385
-
386
- case 'triangle-strip':
387
- return GL.TRIANGLES;
388
-
389
- case 'triangle-fan':
390
- return GL.TRIANGLES;
391
-
392
- default:
393
- throw new Error(topology);
394
- }
302
+ // prettier-ignore
303
+ switch (topology) {
304
+ case 'point-list': return GL.POINTS;
305
+ case 'line-list': return GL.LINES;
306
+ case 'line-strip': return GL.LINES;
307
+ case 'line-loop': return GL.LINES;
308
+ case 'triangle-list': return GL.TRIANGLES;
309
+ case 'triangle-strip': return GL.TRIANGLES;
310
+ case 'triangle-fan': return GL.TRIANGLES;
311
+ default: throw new Error(topology);
312
+ }
395
313
  }
396
-
314
+ // function getAttributesByLocation(
315
+ // attributes: Record<string, Buffer>,
316
+ // layout: ShaderLayout
317
+ // ): Record<number, Buffer> {
318
+ // const byLocation: Record<number, Buffer> = {};
319
+ // for (const [name, buffer] of Object.entries(attributes)) {
320
+ // const attribute = getAttributeLayout(layout, name);
321
+ // if (attribute) {
322
+ // byLocation[attribute.location] = buffer;
323
+ // }
324
+ // }
325
+ // return byLocation;
326
+ // }
397
327
  function getAttributeLayout(layout, name) {
398
- return layout.attributes.find(binding => binding.name === name) || null;
328
+ return layout.attributes.find((binding) => binding.name === name) || null;
329
+ }
330
+ /* TODO
331
+ function getBindingLayout(layout: ShaderLayout, name: string): BindingLayout {
332
+ const binding = layout.bindings.find((binding) => binding.name === name);
333
+ if (!binding) {
334
+ throw new Error(`Unknown binding ${name}`);
335
+ }
336
+ return binding;
399
337
  }
400
- //# sourceMappingURL=webgl-render-pipeline.js.map
338
+ */