@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,182 +1,204 @@
1
- import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
1
+ // Support for listening to context state changes and intercepting state queries
2
+ // NOTE: this system does not handle buffer bindings
2
3
  import { assert } from '@luma.gl/api';
3
- import { GL_PARAMETER_DEFAULTS, GL_HOOKED_SETTERS, NON_CACHE_PARAMETERS } from '../parameters/webgl-parameter-tables';
4
- import { setParameters, getParameters } from '../parameters/unified-parameter-api';
5
- import { deepArrayEqual } from './deep-array-equal';
6
-
4
+ import { GL_PARAMETER_DEFAULTS, GL_HOOKED_SETTERS, NON_CACHE_PARAMETERS } from '../parameters/webgl-parameter-tables.js';
5
+ import { setParameters, getParameters } from '../parameters/unified-parameter-api.js';
6
+ import { deepArrayEqual } from './deep-array-equal.js';
7
+ // HELPER CLASS - GLState
8
+ /* eslint-disable no-shadow */
7
9
  class GLState {
8
- constructor(gl, {
9
- copyState = false,
10
- log = () => {}
11
- } = {}) {
12
- _defineProperty(this, "gl", void 0);
13
-
14
- _defineProperty(this, "program", null);
15
-
16
- _defineProperty(this, "stateStack", []);
17
-
18
- _defineProperty(this, "enable", true);
19
-
20
- _defineProperty(this, "cache", void 0);
21
-
22
- _defineProperty(this, "log", void 0);
23
-
24
- this.gl = gl;
25
- this.cache = copyState ? getParameters(gl) : Object.assign({}, GL_PARAMETER_DEFAULTS);
26
- this.log = log;
27
- this._updateCache = this._updateCache.bind(this);
28
- Object.seal(this);
29
- }
30
-
31
- push(values = {}) {
32
- this.stateStack.push({});
33
- }
34
-
35
- pop() {
36
- assert(this.stateStack.length > 0);
37
- const oldValues = this.stateStack[this.stateStack.length - 1];
38
- setParameters(this.gl, oldValues);
39
- this.stateStack.pop();
40
- }
41
-
42
- _updateCache(values) {
43
- let valueChanged = false;
44
- let oldValue;
45
- const oldValues = this.stateStack.length > 0 ? this.stateStack[this.stateStack.length - 1] : null;
46
-
47
- for (const key in values) {
48
- assert(key !== undefined);
49
- const value = values[key];
50
- const cached = this.cache[key];
51
-
52
- if (!deepArrayEqual(value, cached)) {
53
- valueChanged = true;
54
- oldValue = cached;
55
-
56
- if (oldValues && !(key in oldValues)) {
57
- oldValues[key] = cached;
10
+ constructor(gl, { copyState = false, // Copy cache from params (slow) or initialize from WebGL defaults (fast)
11
+ log = () => { } // Logging function, called when gl parameter change calls are actually issued
12
+ } = {}) {
13
+ this.program = null;
14
+ this.stateStack = [];
15
+ this.enable = true;
16
+ this.gl = gl;
17
+ this.cache = copyState ? getParameters(gl) : Object.assign({}, GL_PARAMETER_DEFAULTS);
18
+ this.log = log;
19
+ this._updateCache = this._updateCache.bind(this);
20
+ Object.seal(this);
21
+ }
22
+ push(values = {}) {
23
+ this.stateStack.push({});
24
+ }
25
+ pop() {
26
+ assert(this.stateStack.length > 0);
27
+ // Use the saved values in the state stack to restore parameters
28
+ const oldValues = this.stateStack[this.stateStack.length - 1];
29
+ setParameters(this.gl, oldValues);
30
+ // Don't pop until we have reset parameters (to make sure other "stack frames" are not affected)
31
+ this.stateStack.pop();
32
+ }
33
+ /**
34
+ // interceptor for context set functions - update our cache and our stack
35
+ // values (Object) - the key values for this setter
36
+ * @param values
37
+ * @returns
38
+ */
39
+ _updateCache(values) {
40
+ let valueChanged = false;
41
+ let oldValue; // = undefined
42
+ const oldValues = this.stateStack.length > 0 ? this.stateStack[this.stateStack.length - 1] : null;
43
+ for (const key in values) {
44
+ assert(key !== undefined);
45
+ const value = values[key];
46
+ const cached = this.cache[key];
47
+ // Check that value hasn't already been shadowed
48
+ if (!deepArrayEqual(value, cached)) {
49
+ valueChanged = true;
50
+ oldValue = cached;
51
+ // First, save current value being shadowed
52
+ // If a state stack frame is active, save the current parameter values for pop
53
+ // but first check that value hasn't already been shadowed and saved
54
+ if (oldValues && !(key in oldValues)) {
55
+ oldValues[key] = cached;
56
+ }
57
+ // Save current value being shadowed
58
+ this.cache[key] = value;
59
+ }
58
60
  }
59
-
60
- this.cache[key] = value;
61
- }
61
+ return { valueChanged, oldValue };
62
62
  }
63
-
64
- return {
65
- valueChanged,
66
- oldValue
67
- };
68
- }
69
-
70
63
  }
71
-
72
64
  function getContextState(gl) {
73
- return gl.state;
65
+ // @ts-expect-error
66
+ return gl.state;
74
67
  }
75
-
68
+ // PUBLIC API
69
+ /**
70
+ * Initialize WebGL state caching on a context
71
+ * can be called multiple times to enable/disable
72
+ *
73
+ * @note After calling this function, context state will be cached
74
+ * gl.state.push() and gl.state.pop() will be available for saving,
75
+ * temporarily modifying, and then restoring state.
76
+ */
76
77
  export function trackContextState(gl, options) {
77
- const {
78
- enable = true,
79
- copyState
80
- } = options;
81
- assert(copyState !== undefined);
82
-
83
- if (!gl.state) {
84
- gl.state = new GLState(gl, {
85
- copyState
86
- });
87
- installProgramSpy(gl);
88
-
89
- for (const key in GL_HOOKED_SETTERS) {
90
- const setter = GL_HOOKED_SETTERS[key];
91
- installSetterSpy(gl, key, setter);
78
+ const { enable = true, copyState } = options;
79
+ assert(copyState !== undefined);
80
+ // @ts-expect-error
81
+ if (!gl.state) {
82
+ // @ts-ignore
83
+ // const {polyfillContext} = global_;
84
+ // if (polyfillContext) {
85
+ // polyfillContext(gl);
86
+ // }
87
+ // Create a state cache
88
+ // @ts-expect-error
89
+ gl.state = new GLState(gl, { copyState });
90
+ installProgramSpy(gl);
91
+ // intercept all setter functions in the table
92
+ for (const key in GL_HOOKED_SETTERS) {
93
+ const setter = GL_HOOKED_SETTERS[key];
94
+ installSetterSpy(gl, key, setter);
95
+ }
96
+ // intercept all getter functions in the table
97
+ installGetterOverride(gl, 'getParameter');
98
+ installGetterOverride(gl, 'isEnabled');
92
99
  }
93
-
94
- installGetterOverride(gl, 'getParameter');
95
- installGetterOverride(gl, 'isEnabled');
96
- }
97
-
98
- const glState = getContextState(gl);
99
- glState.enable = enable;
100
- return gl;
100
+ const glState = getContextState(gl);
101
+ glState.enable = enable;
102
+ return gl;
101
103
  }
104
+ /**
105
+ * Saves current WebGL context state onto an internal per-context stack
106
+ */
102
107
  export function pushContextState(gl) {
103
- let glState = getContextState(gl);
104
-
105
- if (!glState) {
106
- trackContextState(gl, {
107
- copyState: false
108
- });
109
- glState = getContextState(gl);
110
- }
111
-
112
- glState.push();
108
+ let glState = getContextState(gl);
109
+ if (!glState) {
110
+ trackContextState(gl, { copyState: false });
111
+ glState = getContextState(gl);
112
+ }
113
+ glState.push();
113
114
  }
115
+ /**
116
+ * Restores previously saved WebGL context state
117
+ */
114
118
  export function popContextState(gl) {
115
- const glState = getContextState(gl);
116
- assert(glState);
117
- glState.pop();
119
+ const glState = getContextState(gl);
120
+ assert(glState);
121
+ glState.pop();
118
122
  }
119
-
123
+ // HELPER FUNCTIONS - INSTALL GET/SET INTERCEPTORS (SPYS) ON THE CONTEXT
124
+ /**
125
+ // Overrides a WebGLRenderingContext state "getter" function
126
+ // to return values directly from cache
127
+ * @param gl
128
+ * @param functionName
129
+ */
120
130
  function installGetterOverride(gl, functionName) {
121
- const originalGetterFunc = gl[functionName].bind(gl);
122
-
123
- gl[functionName] = function get(pname) {
124
- if (pname === undefined || NON_CACHE_PARAMETERS.has(pname)) {
125
- return originalGetterFunc(pname);
126
- }
127
-
128
- const glState = getContextState(gl);
129
-
130
- if (!(pname in glState.cache)) {
131
- glState.cache[pname] = originalGetterFunc(pname);
132
- }
133
-
134
- return glState.enable ? glState.cache[pname] : originalGetterFunc(pname);
135
- };
136
-
137
- Object.defineProperty(gl[functionName], 'name', {
138
- value: "".concat(functionName, "-from-cache"),
139
- configurable: false
140
- });
131
+ // Get the original function from the WebGLRenderingContext
132
+ const originalGetterFunc = gl[functionName].bind(gl);
133
+ // Wrap it with a spy so that we can update our state cache when it gets called
134
+ gl[functionName] = function get(pname) {
135
+ if (pname === undefined || NON_CACHE_PARAMETERS.has(pname)) {
136
+ // Invalid or blacklisted parameter, do not cache
137
+ return originalGetterFunc(pname);
138
+ }
139
+ const glState = getContextState(gl);
140
+ if (!(pname in glState.cache)) {
141
+ // WebGL limits are not prepopulated in the cache, call the original getter when first queried.
142
+ glState.cache[pname] = originalGetterFunc(pname);
143
+ }
144
+ // Optionally call the original function to do a "hard" query from the WebGLRenderingContext
145
+ return glState.enable
146
+ ? // Call the getter the params so that it can e.g. serve from a cache
147
+ glState.cache[pname]
148
+ : // Optionally call the original function to do a "hard" query from the WebGLRenderingContext
149
+ originalGetterFunc(pname);
150
+ };
151
+ // Set the name of this anonymous function to help in debugging and profiling
152
+ Object.defineProperty(gl[functionName], 'name', {
153
+ value: `${functionName}-from-cache`,
154
+ configurable: false
155
+ });
141
156
  }
142
-
157
+ /**
158
+ // Overrides a WebGLRenderingContext state "setter" function
159
+ // to call a setter spy before the actual setter. Allows us to keep a cache
160
+ // updated with a copy of the WebGL context state.
161
+ * @param gl
162
+ * @param functionName
163
+ * @param setter
164
+ * @returns
165
+ */
143
166
  function installSetterSpy(gl, functionName, setter) {
144
- if (!gl[functionName]) {
145
- return;
146
- }
147
-
148
- const originalSetterFunc = gl[functionName].bind(gl);
149
-
150
- gl[functionName] = function set(...params) {
151
- const glState = getContextState(gl);
152
- const {
153
- valueChanged,
154
- oldValue
155
- } = setter(glState._updateCache, ...params);
156
-
157
- if (valueChanged) {
158
- originalSetterFunc(...params);
167
+ // Get the original function from the WebGLRenderingContext
168
+ if (!gl[functionName]) {
169
+ // This could happen if we try to intercept WebGL2 method on a WebGL1 context
170
+ return;
159
171
  }
160
-
161
- return oldValue;
162
- };
163
-
164
- Object.defineProperty(gl[functionName], 'name', {
165
- value: "".concat(functionName, "-to-cache"),
166
- configurable: false
167
- });
172
+ const originalSetterFunc = gl[functionName].bind(gl);
173
+ // Wrap it with a spy so that we can update our state cache when it gets called
174
+ gl[functionName] = function set(...params) {
175
+ // Update the value
176
+ // Call the setter with the state cache and the params so that it can store the parameters
177
+ const glState = getContextState(gl);
178
+ const { valueChanged, oldValue } = setter(glState._updateCache, ...params);
179
+ // Call the original WebGLRenderingContext func to make sure the context actually gets updated
180
+ if (valueChanged) {
181
+ originalSetterFunc(...params);
182
+ }
183
+ // Note: if the original function fails to set the value, our state cache will be bad
184
+ // No solution for this at the moment, but assuming that this is unlikely to be a real problem
185
+ // We could call the setter after the originalSetterFunc. Concern is that this would
186
+ // cause different behavior in debug mode, where originalSetterFunc can throw exceptions
187
+ return oldValue;
188
+ };
189
+ // Set the name of this anonymous function to help in debugging and profiling
190
+ Object.defineProperty(gl[functionName], 'name', {
191
+ value: `${functionName}-to-cache`,
192
+ configurable: false
193
+ });
168
194
  }
169
-
170
195
  function installProgramSpy(gl) {
171
- const originalUseProgram = gl.useProgram.bind(gl);
172
-
173
- gl.useProgram = function useProgramLuma(handle) {
174
- const glState = getContextState(gl);
175
-
176
- if (glState.program !== handle) {
177
- originalUseProgram(handle);
178
- glState.program = handle;
179
- }
180
- };
196
+ const originalUseProgram = gl.useProgram.bind(gl);
197
+ gl.useProgram = function useProgramLuma(handle) {
198
+ const glState = getContextState(gl);
199
+ if (glState.program !== handle) {
200
+ originalUseProgram(handle);
201
+ glState.program = handle;
202
+ }
203
+ };
181
204
  }
182
- //# sourceMappingURL=track-context-state.js.map
@@ -1,40 +1,48 @@
1
- import { default as WebGLDevice } from '../../adapter/webgl-device';
2
- import { setParameters } from '../parameters/unified-parameter-api';
3
- import { pushContextState, popContextState } from './track-context-state';
1
+ import { default as WebGLDevice } from '../../adapter/webgl-device.js';
2
+ import { setParameters } from '../parameters/unified-parameter-api.js';
3
+ import { pushContextState, popContextState } from './track-context-state.js';
4
+ /**
5
+ * Execute a function with a set of temporary WebGL parameter overrides
6
+ * - Saves current "global" WebGL context settings
7
+ * - Sets the supplies WebGL context parameters,
8
+ * - Executes supplied function
9
+ * - Restores parameters
10
+ * - Returns the return value of the supplied function
11
+ */
4
12
  export function withParameters(device, parameters, func) {
5
- const webglDevice = WebGLDevice.attach(device);
6
- const gl = webglDevice.gl;
7
-
8
- if (isObjectEmpty(parameters)) {
9
- return func(device);
10
- }
11
-
12
- const {
13
- nocatch = true
14
- } = parameters;
15
- pushContextState(gl);
16
- setParameters(gl, parameters);
17
- let value;
18
-
19
- if (nocatch) {
20
- value = func(gl);
21
- popContextState(gl);
22
- } else {
23
- try {
24
- value = func(gl);
25
- } finally {
26
- popContextState(gl);
13
+ const webglDevice = WebGLDevice.attach(device);
14
+ const gl = webglDevice.gl;
15
+ if (isObjectEmpty(parameters)) {
16
+ // Avoid setting state if no parameters provided. Just call and return
17
+ return func(device);
27
18
  }
28
- }
29
-
30
- return value;
19
+ const { nocatch = true } = parameters;
20
+ pushContextState(gl);
21
+ setParameters(gl, parameters);
22
+ // Setup is done, call the function
23
+ let value;
24
+ if (nocatch) {
25
+ // Avoid try catch to minimize stack size impact for safe execution paths
26
+ value = func(gl);
27
+ popContextState(gl);
28
+ }
29
+ else {
30
+ // Wrap in a try-catch to ensure that parameters are restored on exceptions
31
+ try {
32
+ value = func(gl);
33
+ }
34
+ finally {
35
+ popContextState(gl);
36
+ }
37
+ }
38
+ return value;
31
39
  }
32
-
40
+ // Helpers
41
+ // Returns true if given object is empty, false otherwise.
33
42
  function isObjectEmpty(object) {
34
- for (const key in object) {
35
- return false;
36
- }
37
-
38
- return true;
43
+ // @ts-ignore - dummy key variable
44
+ for (const key in object) {
45
+ return false;
46
+ }
47
+ return true;
39
48
  }
40
- //# sourceMappingURL=with-parameters.js.map