@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,446 +1,485 @@
1
+ // Tables describing WebGL parameters
1
2
  import GL from '@luma.gl/constants';
2
- import { isWebGL2 } from '../context/webgl-checks';
3
+ import { isWebGL2 } from '../context/webgl-checks.js';
4
+ // DEFAULT SETTINGS - FOR FAST CACHE INITIALIZATION AND CONTEXT RESETS
5
+ /* eslint-disable no-shadow */
3
6
  export const GL_PARAMETER_DEFAULTS = {
4
- [GL.BLEND]: false,
5
- [GL.BLEND_COLOR]: new Float32Array([0, 0, 0, 0]),
6
- [GL.BLEND_EQUATION_RGB]: GL.FUNC_ADD,
7
- [GL.BLEND_EQUATION_ALPHA]: GL.FUNC_ADD,
8
- [GL.BLEND_SRC_RGB]: GL.ONE,
9
- [GL.BLEND_DST_RGB]: GL.ZERO,
10
- [GL.BLEND_SRC_ALPHA]: GL.ONE,
11
- [GL.BLEND_DST_ALPHA]: GL.ZERO,
12
- [GL.COLOR_CLEAR_VALUE]: new Float32Array([0, 0, 0, 0]),
13
- [GL.COLOR_WRITEMASK]: [true, true, true, true],
14
- [GL.CULL_FACE]: false,
15
- [GL.CULL_FACE_MODE]: GL.BACK,
16
- [GL.DEPTH_TEST]: false,
17
- [GL.DEPTH_CLEAR_VALUE]: 1,
18
- [GL.DEPTH_FUNC]: GL.LESS,
19
- [GL.DEPTH_RANGE]: new Float32Array([0, 1]),
20
- [GL.DEPTH_WRITEMASK]: true,
21
- [GL.DITHER]: true,
22
- [GL.CURRENT_PROGRAM]: null,
23
- [GL.FRAMEBUFFER_BINDING]: null,
24
- [GL.RENDERBUFFER_BINDING]: null,
25
- [GL.VERTEX_ARRAY_BINDING]: null,
26
- [GL.ARRAY_BUFFER_BINDING]: null,
27
- [GL.FRONT_FACE]: GL.CCW,
28
- [GL.GENERATE_MIPMAP_HINT]: GL.DONT_CARE,
29
- [GL.LINE_WIDTH]: 1,
30
- [GL.POLYGON_OFFSET_FILL]: false,
31
- [GL.POLYGON_OFFSET_FACTOR]: 0,
32
- [GL.POLYGON_OFFSET_UNITS]: 0,
33
- [GL.SAMPLE_ALPHA_TO_COVERAGE]: false,
34
- [GL.SAMPLE_COVERAGE]: false,
35
- [GL.SAMPLE_COVERAGE_VALUE]: 1.0,
36
- [GL.SAMPLE_COVERAGE_INVERT]: false,
37
- [GL.SCISSOR_TEST]: false,
38
- [GL.SCISSOR_BOX]: new Int32Array([0, 0, 1024, 1024]),
39
- [GL.STENCIL_TEST]: false,
40
- [GL.STENCIL_CLEAR_VALUE]: 0,
41
- [GL.STENCIL_WRITEMASK]: 0xffffffff,
42
- [GL.STENCIL_BACK_WRITEMASK]: 0xffffffff,
43
- [GL.STENCIL_FUNC]: GL.ALWAYS,
44
- [GL.STENCIL_REF]: 0,
45
- [GL.STENCIL_VALUE_MASK]: 0xffffffff,
46
- [GL.STENCIL_BACK_FUNC]: GL.ALWAYS,
47
- [GL.STENCIL_BACK_REF]: 0,
48
- [GL.STENCIL_BACK_VALUE_MASK]: 0xffffffff,
49
- [GL.STENCIL_FAIL]: GL.KEEP,
50
- [GL.STENCIL_PASS_DEPTH_FAIL]: GL.KEEP,
51
- [GL.STENCIL_PASS_DEPTH_PASS]: GL.KEEP,
52
- [GL.STENCIL_BACK_FAIL]: GL.KEEP,
53
- [GL.STENCIL_BACK_PASS_DEPTH_FAIL]: GL.KEEP,
54
- [GL.STENCIL_BACK_PASS_DEPTH_PASS]: GL.KEEP,
55
- [GL.VIEWPORT]: [0, 0, 1024, 1024],
56
- [GL.PACK_ALIGNMENT]: 4,
57
- [GL.UNPACK_ALIGNMENT]: 4,
58
- [GL.UNPACK_FLIP_Y_WEBGL]: false,
59
- [GL.UNPACK_PREMULTIPLY_ALPHA_WEBGL]: false,
60
- [GL.UNPACK_COLORSPACE_CONVERSION_WEBGL]: GL.BROWSER_DEFAULT_WEBGL,
61
- [GL.TRANSFORM_FEEDBACK_BINDING]: null,
62
- [GL.COPY_READ_BUFFER_BINDING]: null,
63
- [GL.COPY_WRITE_BUFFER_BINDING]: null,
64
- [GL.PIXEL_PACK_BUFFER_BINDING]: null,
65
- [GL.PIXEL_UNPACK_BUFFER_BINDING]: null,
66
- [GL.FRAGMENT_SHADER_DERIVATIVE_HINT]: GL.DONT_CARE,
67
- [GL.READ_FRAMEBUFFER_BINDING]: null,
68
- [GL.RASTERIZER_DISCARD]: false,
69
- [GL.PACK_ROW_LENGTH]: 0,
70
- [GL.PACK_SKIP_PIXELS]: 0,
71
- [GL.PACK_SKIP_ROWS]: 0,
72
- [GL.UNPACK_ROW_LENGTH]: 0,
73
- [GL.UNPACK_IMAGE_HEIGHT]: 0,
74
- [GL.UNPACK_SKIP_PIXELS]: 0,
75
- [GL.UNPACK_SKIP_ROWS]: 0,
76
- [GL.UNPACK_SKIP_IMAGES]: 0
7
+ [GL.BLEND]: false,
8
+ [GL.BLEND_COLOR]: new Float32Array([0, 0, 0, 0]),
9
+ [GL.BLEND_EQUATION_RGB]: GL.FUNC_ADD,
10
+ [GL.BLEND_EQUATION_ALPHA]: GL.FUNC_ADD,
11
+ [GL.BLEND_SRC_RGB]: GL.ONE,
12
+ [GL.BLEND_DST_RGB]: GL.ZERO,
13
+ [GL.BLEND_SRC_ALPHA]: GL.ONE,
14
+ [GL.BLEND_DST_ALPHA]: GL.ZERO,
15
+ [GL.COLOR_CLEAR_VALUE]: new Float32Array([0, 0, 0, 0]),
16
+ [GL.COLOR_WRITEMASK]: [true, true, true, true],
17
+ [GL.CULL_FACE]: false,
18
+ [GL.CULL_FACE_MODE]: GL.BACK,
19
+ [GL.DEPTH_TEST]: false,
20
+ [GL.DEPTH_CLEAR_VALUE]: 1,
21
+ [GL.DEPTH_FUNC]: GL.LESS,
22
+ [GL.DEPTH_RANGE]: new Float32Array([0, 1]),
23
+ [GL.DEPTH_WRITEMASK]: true,
24
+ [GL.DITHER]: true,
25
+ [GL.CURRENT_PROGRAM]: null,
26
+ // FRAMEBUFFER_BINDING and DRAW_FRAMEBUFFER_BINDING(WebGL2) refer same state.
27
+ [GL.FRAMEBUFFER_BINDING]: null,
28
+ [GL.RENDERBUFFER_BINDING]: null,
29
+ [GL.VERTEX_ARRAY_BINDING]: null,
30
+ [GL.ARRAY_BUFFER_BINDING]: null,
31
+ [GL.FRONT_FACE]: GL.CCW,
32
+ [GL.GENERATE_MIPMAP_HINT]: GL.DONT_CARE,
33
+ [GL.LINE_WIDTH]: 1,
34
+ [GL.POLYGON_OFFSET_FILL]: false,
35
+ [GL.POLYGON_OFFSET_FACTOR]: 0,
36
+ [GL.POLYGON_OFFSET_UNITS]: 0,
37
+ [GL.SAMPLE_ALPHA_TO_COVERAGE]: false,
38
+ [GL.SAMPLE_COVERAGE]: false,
39
+ [GL.SAMPLE_COVERAGE_VALUE]: 1.0,
40
+ [GL.SAMPLE_COVERAGE_INVERT]: false,
41
+ [GL.SCISSOR_TEST]: false,
42
+ // Note: Dynamic value. If scissor test enabled we expect users to set correct scissor box
43
+ [GL.SCISSOR_BOX]: new Int32Array([0, 0, 1024, 1024]),
44
+ [GL.STENCIL_TEST]: false,
45
+ [GL.STENCIL_CLEAR_VALUE]: 0,
46
+ [GL.STENCIL_WRITEMASK]: 0xffffffff,
47
+ [GL.STENCIL_BACK_WRITEMASK]: 0xffffffff,
48
+ [GL.STENCIL_FUNC]: GL.ALWAYS,
49
+ [GL.STENCIL_REF]: 0,
50
+ [GL.STENCIL_VALUE_MASK]: 0xffffffff,
51
+ [GL.STENCIL_BACK_FUNC]: GL.ALWAYS,
52
+ [GL.STENCIL_BACK_REF]: 0,
53
+ [GL.STENCIL_BACK_VALUE_MASK]: 0xffffffff,
54
+ [GL.STENCIL_FAIL]: GL.KEEP,
55
+ [GL.STENCIL_PASS_DEPTH_FAIL]: GL.KEEP,
56
+ [GL.STENCIL_PASS_DEPTH_PASS]: GL.KEEP,
57
+ [GL.STENCIL_BACK_FAIL]: GL.KEEP,
58
+ [GL.STENCIL_BACK_PASS_DEPTH_FAIL]: GL.KEEP,
59
+ [GL.STENCIL_BACK_PASS_DEPTH_PASS]: GL.KEEP,
60
+ // Dynamic value: We use [0, 0, 1024, 1024] as default, but usually this is updated in each frame.
61
+ [GL.VIEWPORT]: [0, 0, 1024, 1024],
62
+ // WEBGL1 PIXEL PACK/UNPACK MODES
63
+ [GL.PACK_ALIGNMENT]: 4,
64
+ [GL.UNPACK_ALIGNMENT]: 4,
65
+ [GL.UNPACK_FLIP_Y_WEBGL]: false,
66
+ [GL.UNPACK_PREMULTIPLY_ALPHA_WEBGL]: false,
67
+ [GL.UNPACK_COLORSPACE_CONVERSION_WEBGL]: GL.BROWSER_DEFAULT_WEBGL,
68
+ // WEBGL2 / EXTENSIONS
69
+ // gl1: 'OES_standard_derivatives'
70
+ [GL.TRANSFORM_FEEDBACK_BINDING]: null,
71
+ [GL.COPY_READ_BUFFER_BINDING]: null,
72
+ [GL.COPY_WRITE_BUFFER_BINDING]: null,
73
+ [GL.PIXEL_PACK_BUFFER_BINDING]: null,
74
+ [GL.PIXEL_UNPACK_BUFFER_BINDING]: null,
75
+ [GL.FRAGMENT_SHADER_DERIVATIVE_HINT]: GL.DONT_CARE,
76
+ [GL.READ_FRAMEBUFFER_BINDING]: null,
77
+ [GL.RASTERIZER_DISCARD]: false,
78
+ [GL.PACK_ROW_LENGTH]: 0,
79
+ [GL.PACK_SKIP_PIXELS]: 0,
80
+ [GL.PACK_SKIP_ROWS]: 0,
81
+ [GL.UNPACK_ROW_LENGTH]: 0,
82
+ [GL.UNPACK_IMAGE_HEIGHT]: 0,
83
+ [GL.UNPACK_SKIP_PIXELS]: 0,
84
+ [GL.UNPACK_SKIP_ROWS]: 0,
85
+ [GL.UNPACK_SKIP_IMAGES]: 0
77
86
  };
78
-
87
+ // SETTER TABLES - ENABLES SETTING ANY PARAMETER WITH A COMMON API
79
88
  const enable = (gl, value, key) => value ? gl.enable(key) : gl.disable(key);
80
-
81
89
  const hint = (gl, value, key) => gl.hint(key, value);
82
-
83
90
  const pixelStorei = (gl, value, key) => gl.pixelStorei(key, value);
84
-
85
91
  const bindFramebuffer = (gl, value, key) => {
86
- let target;
87
-
88
- if (key === GL.FRAMEBUFFER_BINDING) {
89
- target = isWebGL2(gl) ? GL.DRAW_FRAMEBUFFER : GL.FRAMEBUFFER;
90
- } else {
91
- target = GL.READ_FRAMEBUFFER;
92
- }
93
-
94
- return gl.bindFramebuffer(target, value);
92
+ let target;
93
+ if (key === GL.FRAMEBUFFER_BINDING) {
94
+ target = isWebGL2(gl) ? GL.DRAW_FRAMEBUFFER : GL.FRAMEBUFFER;
95
+ }
96
+ else {
97
+ // GL.READ_FRAMEBUFFER_BINDING
98
+ target = GL.READ_FRAMEBUFFER;
99
+ }
100
+ return gl.bindFramebuffer(target, value);
95
101
  };
96
-
97
102
  const bindBuffer = (gl, value, key) => {
98
- const bindingMap = {
99
- [GL.ARRAY_BUFFER_BINDING]: GL.ARRAY_BUFFER,
100
- [GL.COPY_READ_BUFFER_BINDING]: GL.COPY_READ_BUFFER,
101
- [GL.COPY_WRITE_BUFFER_BINDING]: GL.COPY_WRITE_BUFFER,
102
- [GL.PIXEL_PACK_BUFFER_BINDING]: GL.PIXEL_PACK_BUFFER,
103
- [GL.PIXEL_UNPACK_BUFFER_BINDING]: GL.PIXEL_UNPACK_BUFFER
104
- };
105
- const target = bindingMap[key];
106
- gl.bindBuffer(target, value);
103
+ const bindingMap = {
104
+ [GL.ARRAY_BUFFER_BINDING]: GL.ARRAY_BUFFER,
105
+ [GL.COPY_READ_BUFFER_BINDING]: GL.COPY_READ_BUFFER,
106
+ [GL.COPY_WRITE_BUFFER_BINDING]: GL.COPY_WRITE_BUFFER,
107
+ [GL.PIXEL_PACK_BUFFER_BINDING]: GL.PIXEL_PACK_BUFFER,
108
+ [GL.PIXEL_UNPACK_BUFFER_BINDING]: GL.PIXEL_UNPACK_BUFFER
109
+ };
110
+ const target = bindingMap[key];
111
+ gl.bindBuffer(target, value);
107
112
  };
108
-
113
+ // Utility
109
114
  function isArray(array) {
110
- return Array.isArray(array) || ArrayBuffer.isView(array) && !(array instanceof DataView);
115
+ return Array.isArray(array) || (ArrayBuffer.isView(array) && !(array instanceof DataView));
111
116
  }
112
-
117
+ // Map from WebGL parameter names to corresponding WebGL setter functions
118
+ // WegGL constants are read by parameter names, but set by function names
119
+ // NOTE: When value type is a string, it will be handled by 'GL_COMPOSITE_PARAMETER_SETTERS'
113
120
  export const GL_PARAMETER_SETTERS = {
114
- [GL.BLEND]: enable,
115
- [GL.BLEND_COLOR]: (gl, value) => gl.blendColor(...value),
116
- [GL.BLEND_EQUATION_RGB]: 'blendEquation',
117
- [GL.BLEND_EQUATION_ALPHA]: 'blendEquation',
118
- [GL.BLEND_SRC_RGB]: 'blendFunc',
119
- [GL.BLEND_DST_RGB]: 'blendFunc',
120
- [GL.BLEND_SRC_ALPHA]: 'blendFunc',
121
- [GL.BLEND_DST_ALPHA]: 'blendFunc',
122
- [GL.COLOR_CLEAR_VALUE]: (gl, value) => gl.clearColor(...value),
123
- [GL.COLOR_WRITEMASK]: (gl, value) => gl.colorMask(...value),
124
- [GL.CULL_FACE]: enable,
125
- [GL.CULL_FACE_MODE]: (gl, value) => gl.cullFace(value),
126
- [GL.DEPTH_TEST]: enable,
127
- [GL.DEPTH_CLEAR_VALUE]: (gl, value) => gl.clearDepth(value),
128
- [GL.DEPTH_FUNC]: (gl, value) => gl.depthFunc(value),
129
- [GL.DEPTH_RANGE]: (gl, value) => gl.depthRange(...value),
130
- [GL.DEPTH_WRITEMASK]: (gl, value) => gl.depthMask(value),
131
- [GL.DITHER]: enable,
132
- [GL.FRAGMENT_SHADER_DERIVATIVE_HINT]: hint,
133
- [GL.CURRENT_PROGRAM]: (gl, value) => gl.useProgram(value),
134
- [GL.RENDERBUFFER_BINDING]: (gl, value) => gl.bindRenderbuffer(GL.RENDERBUFFER, value),
135
- [GL.TRANSFORM_FEEDBACK_BINDING]: (gl, value) => {
136
- var _bindTransformFeedbac, _ref;
137
-
138
- return (_bindTransformFeedbac = (_ref = gl).bindTransformFeedback) === null || _bindTransformFeedbac === void 0 ? void 0 : _bindTransformFeedbac.call(_ref, GL.TRANSFORM_FEEDBACK, value);
139
- },
140
- [GL.VERTEX_ARRAY_BINDING]: (gl, value) => gl.bindVertexArray(value),
141
- [GL.FRAMEBUFFER_BINDING]: bindFramebuffer,
142
- [GL.READ_FRAMEBUFFER_BINDING]: bindFramebuffer,
143
- [GL.ARRAY_BUFFER_BINDING]: bindBuffer,
144
- [GL.COPY_READ_BUFFER_BINDING]: bindBuffer,
145
- [GL.COPY_WRITE_BUFFER_BINDING]: bindBuffer,
146
- [GL.PIXEL_PACK_BUFFER_BINDING]: bindBuffer,
147
- [GL.PIXEL_UNPACK_BUFFER_BINDING]: bindBuffer,
148
- [GL.FRONT_FACE]: (gl, value) => gl.frontFace(value),
149
- [GL.GENERATE_MIPMAP_HINT]: hint,
150
- [GL.LINE_WIDTH]: (gl, value) => gl.lineWidth(value),
151
- [GL.POLYGON_OFFSET_FILL]: enable,
152
- [GL.POLYGON_OFFSET_FACTOR]: 'polygonOffset',
153
- [GL.POLYGON_OFFSET_UNITS]: 'polygonOffset',
154
- [GL.RASTERIZER_DISCARD]: enable,
155
- [GL.SAMPLE_ALPHA_TO_COVERAGE]: enable,
156
- [GL.SAMPLE_COVERAGE]: enable,
157
- [GL.SAMPLE_COVERAGE_VALUE]: 'sampleCoverage',
158
- [GL.SAMPLE_COVERAGE_INVERT]: 'sampleCoverage',
159
- [GL.SCISSOR_TEST]: enable,
160
- [GL.SCISSOR_BOX]: (gl, value) => gl.scissor(...value),
161
- [GL.STENCIL_TEST]: enable,
162
- [GL.STENCIL_CLEAR_VALUE]: (gl, value) => gl.clearStencil(value),
163
- [GL.STENCIL_WRITEMASK]: (gl, value) => gl.stencilMaskSeparate(GL.FRONT, value),
164
- [GL.STENCIL_BACK_WRITEMASK]: (gl, value) => gl.stencilMaskSeparate(GL.BACK, value),
165
- [GL.STENCIL_FUNC]: 'stencilFuncFront',
166
- [GL.STENCIL_REF]: 'stencilFuncFront',
167
- [GL.STENCIL_VALUE_MASK]: 'stencilFuncFront',
168
- [GL.STENCIL_BACK_FUNC]: 'stencilFuncBack',
169
- [GL.STENCIL_BACK_REF]: 'stencilFuncBack',
170
- [GL.STENCIL_BACK_VALUE_MASK]: 'stencilFuncBack',
171
- [GL.STENCIL_FAIL]: 'stencilOpFront',
172
- [GL.STENCIL_PASS_DEPTH_FAIL]: 'stencilOpFront',
173
- [GL.STENCIL_PASS_DEPTH_PASS]: 'stencilOpFront',
174
- [GL.STENCIL_BACK_FAIL]: 'stencilOpBack',
175
- [GL.STENCIL_BACK_PASS_DEPTH_FAIL]: 'stencilOpBack',
176
- [GL.STENCIL_BACK_PASS_DEPTH_PASS]: 'stencilOpBack',
177
- [GL.VIEWPORT]: (gl, value) => gl.viewport(...value),
178
- [GL.PACK_ALIGNMENT]: pixelStorei,
179
- [GL.UNPACK_ALIGNMENT]: pixelStorei,
180
- [GL.UNPACK_FLIP_Y_WEBGL]: pixelStorei,
181
- [GL.UNPACK_PREMULTIPLY_ALPHA_WEBGL]: pixelStorei,
182
- [GL.UNPACK_COLORSPACE_CONVERSION_WEBGL]: pixelStorei,
183
- [GL.PACK_ROW_LENGTH]: pixelStorei,
184
- [GL.PACK_SKIP_PIXELS]: pixelStorei,
185
- [GL.PACK_SKIP_ROWS]: pixelStorei,
186
- [GL.UNPACK_ROW_LENGTH]: pixelStorei,
187
- [GL.UNPACK_IMAGE_HEIGHT]: pixelStorei,
188
- [GL.UNPACK_SKIP_PIXELS]: pixelStorei,
189
- [GL.UNPACK_SKIP_ROWS]: pixelStorei,
190
- [GL.UNPACK_SKIP_IMAGES]: pixelStorei,
191
- framebuffer: (gl, framebuffer) => {
192
- const handle = framebuffer && 'handle' in framebuffer ? framebuffer.handle : framebuffer;
193
- return gl.bindFramebuffer(GL.FRAMEBUFFER, handle);
194
- },
195
- blend: (gl, value) => value ? gl.enable(GL.BLEND) : gl.disable(GL.BLEND),
196
- blendColor: (gl, value) => gl.blendColor(...value),
197
- blendEquation: (gl, args) => {
198
- const separateModes = typeof args === 'number' ? [args, args] : args;
199
- gl.blendEquationSeparate(...separateModes);
200
- },
201
- blendFunc: (gl, args) => {
202
- const separateFuncs = (args === null || args === void 0 ? void 0 : args.length) === 2 ? [...args, ...args] : args;
203
- gl.blendFuncSeparate(...separateFuncs);
204
- },
205
- clearColor: (gl, value) => gl.clearColor(...value),
206
- clearDepth: (gl, value) => gl.clearDepth(value),
207
- clearStencil: (gl, value) => gl.clearStencil(value),
208
- colorMask: (gl, value) => gl.colorMask(...value),
209
- cull: (gl, value) => value ? gl.enable(GL.CULL_FACE) : gl.disable(GL.CULL_FACE),
210
- cullFace: (gl, value) => gl.cullFace(value),
211
- depthTest: (gl, value) => value ? gl.enable(GL.DEPTH_TEST) : gl.disable(GL.DEPTH_TEST),
212
- depthFunc: (gl, value) => gl.depthFunc(value),
213
- depthMask: (gl, value) => gl.depthMask(value),
214
- depthRange: (gl, value) => gl.depthRange(...value),
215
- dither: (gl, value) => value ? gl.enable(GL.DITHER) : gl.disable(GL.DITHER),
216
- derivativeHint: (gl, value) => {
217
- gl.hint(GL.FRAGMENT_SHADER_DERIVATIVE_HINT, value);
218
- },
219
- frontFace: (gl, value) => gl.frontFace(value),
220
- mipmapHint: (gl, value) => gl.hint(GL.GENERATE_MIPMAP_HINT, value),
221
- lineWidth: (gl, value) => gl.lineWidth(value),
222
- polygonOffsetFill: (gl, value) => value ? gl.enable(GL.POLYGON_OFFSET_FILL) : gl.disable(GL.POLYGON_OFFSET_FILL),
223
- polygonOffset: (gl, value) => gl.polygonOffset(...value),
224
- sampleCoverage: (gl, value) => gl.sampleCoverage(...value),
225
- scissorTest: (gl, value) => value ? gl.enable(GL.SCISSOR_TEST) : gl.disable(GL.SCISSOR_TEST),
226
- scissor: (gl, value) => gl.scissor(...value),
227
- stencilTest: (gl, value) => value ? gl.enable(GL.STENCIL_TEST) : gl.disable(GL.STENCIL_TEST),
228
- stencilMask: (gl, value) => {
229
- value = isArray(value) ? value : [value, value];
230
- const [mask, backMask] = value;
231
- gl.stencilMaskSeparate(GL.FRONT, mask);
232
- gl.stencilMaskSeparate(GL.BACK, backMask);
233
- },
234
- stencilFunc: (gl, args) => {
235
- args = isArray(args) && args.length === 3 ? [...args, ...args] : args;
236
- const [func, ref, mask, backFunc, backRef, backMask] = args;
237
- gl.stencilFuncSeparate(GL.FRONT, func, ref, mask);
238
- gl.stencilFuncSeparate(GL.BACK, backFunc, backRef, backMask);
239
- },
240
- stencilOp: (gl, args) => {
241
- args = isArray(args) && args.length === 3 ? [...args, ...args] : args;
242
- const [sfail, dpfail, dppass, backSfail, backDpfail, backDppass] = args;
243
- gl.stencilOpSeparate(GL.FRONT, sfail, dpfail, dppass);
244
- gl.stencilOpSeparate(GL.BACK, backSfail, backDpfail, backDppass);
245
- },
246
- viewport: (gl, value) => gl.viewport(...value)
121
+ [GL.BLEND]: enable,
122
+ [GL.BLEND_COLOR]: (gl, value) => gl.blendColor(...value),
123
+ [GL.BLEND_EQUATION_RGB]: 'blendEquation',
124
+ [GL.BLEND_EQUATION_ALPHA]: 'blendEquation',
125
+ [GL.BLEND_SRC_RGB]: 'blendFunc',
126
+ [GL.BLEND_DST_RGB]: 'blendFunc',
127
+ [GL.BLEND_SRC_ALPHA]: 'blendFunc',
128
+ [GL.BLEND_DST_ALPHA]: 'blendFunc',
129
+ [GL.COLOR_CLEAR_VALUE]: (gl, value) => gl.clearColor(...value),
130
+ [GL.COLOR_WRITEMASK]: (gl, value) => gl.colorMask(...value),
131
+ [GL.CULL_FACE]: enable,
132
+ [GL.CULL_FACE_MODE]: (gl, value) => gl.cullFace(value),
133
+ [GL.DEPTH_TEST]: enable,
134
+ [GL.DEPTH_CLEAR_VALUE]: (gl, value) => gl.clearDepth(value),
135
+ [GL.DEPTH_FUNC]: (gl, value) => gl.depthFunc(value),
136
+ [GL.DEPTH_RANGE]: (gl, value) => gl.depthRange(...value),
137
+ [GL.DEPTH_WRITEMASK]: (gl, value) => gl.depthMask(value),
138
+ [GL.DITHER]: enable,
139
+ [GL.FRAGMENT_SHADER_DERIVATIVE_HINT]: hint,
140
+ [GL.CURRENT_PROGRAM]: (gl, value) => gl.useProgram(value),
141
+ [GL.RENDERBUFFER_BINDING]: (gl, value) => gl.bindRenderbuffer(GL.RENDERBUFFER, value),
142
+ [GL.TRANSFORM_FEEDBACK_BINDING]: (gl, value) => gl.bindTransformFeedback?.(GL.TRANSFORM_FEEDBACK, value),
143
+ [GL.VERTEX_ARRAY_BINDING]: (gl, value) => gl.bindVertexArray(value),
144
+ // NOTE: FRAMEBUFFER_BINDING and DRAW_FRAMEBUFFER_BINDING(WebGL2) refer same state.
145
+ [GL.FRAMEBUFFER_BINDING]: bindFramebuffer,
146
+ [GL.READ_FRAMEBUFFER_BINDING]: bindFramebuffer,
147
+ // Buffers
148
+ [GL.ARRAY_BUFFER_BINDING]: bindBuffer,
149
+ [GL.COPY_READ_BUFFER_BINDING]: bindBuffer,
150
+ [GL.COPY_WRITE_BUFFER_BINDING]: bindBuffer,
151
+ [GL.PIXEL_PACK_BUFFER_BINDING]: bindBuffer,
152
+ [GL.PIXEL_UNPACK_BUFFER_BINDING]: bindBuffer,
153
+ [GL.FRONT_FACE]: (gl, value) => gl.frontFace(value),
154
+ [GL.GENERATE_MIPMAP_HINT]: hint,
155
+ [GL.LINE_WIDTH]: (gl, value) => gl.lineWidth(value),
156
+ [GL.POLYGON_OFFSET_FILL]: enable,
157
+ [GL.POLYGON_OFFSET_FACTOR]: 'polygonOffset',
158
+ [GL.POLYGON_OFFSET_UNITS]: 'polygonOffset',
159
+ [GL.RASTERIZER_DISCARD]: enable,
160
+ [GL.SAMPLE_ALPHA_TO_COVERAGE]: enable,
161
+ [GL.SAMPLE_COVERAGE]: enable,
162
+ [GL.SAMPLE_COVERAGE_VALUE]: 'sampleCoverage',
163
+ [GL.SAMPLE_COVERAGE_INVERT]: 'sampleCoverage',
164
+ [GL.SCISSOR_TEST]: enable,
165
+ [GL.SCISSOR_BOX]: (gl, value) => gl.scissor(...value),
166
+ [GL.STENCIL_TEST]: enable,
167
+ [GL.STENCIL_CLEAR_VALUE]: (gl, value) => gl.clearStencil(value),
168
+ [GL.STENCIL_WRITEMASK]: (gl, value) => gl.stencilMaskSeparate(GL.FRONT, value),
169
+ [GL.STENCIL_BACK_WRITEMASK]: (gl, value) => gl.stencilMaskSeparate(GL.BACK, value),
170
+ [GL.STENCIL_FUNC]: 'stencilFuncFront',
171
+ [GL.STENCIL_REF]: 'stencilFuncFront',
172
+ [GL.STENCIL_VALUE_MASK]: 'stencilFuncFront',
173
+ [GL.STENCIL_BACK_FUNC]: 'stencilFuncBack',
174
+ [GL.STENCIL_BACK_REF]: 'stencilFuncBack',
175
+ [GL.STENCIL_BACK_VALUE_MASK]: 'stencilFuncBack',
176
+ [GL.STENCIL_FAIL]: 'stencilOpFront',
177
+ [GL.STENCIL_PASS_DEPTH_FAIL]: 'stencilOpFront',
178
+ [GL.STENCIL_PASS_DEPTH_PASS]: 'stencilOpFront',
179
+ [GL.STENCIL_BACK_FAIL]: 'stencilOpBack',
180
+ [GL.STENCIL_BACK_PASS_DEPTH_FAIL]: 'stencilOpBack',
181
+ [GL.STENCIL_BACK_PASS_DEPTH_PASS]: 'stencilOpBack',
182
+ [GL.VIEWPORT]: (gl, value) => gl.viewport(...value),
183
+ // WEBGL1 PIXEL PACK/UNPACK MODES
184
+ [GL.PACK_ALIGNMENT]: pixelStorei,
185
+ [GL.UNPACK_ALIGNMENT]: pixelStorei,
186
+ [GL.UNPACK_FLIP_Y_WEBGL]: pixelStorei,
187
+ [GL.UNPACK_PREMULTIPLY_ALPHA_WEBGL]: pixelStorei,
188
+ [GL.UNPACK_COLORSPACE_CONVERSION_WEBGL]: pixelStorei,
189
+ // WEBGL2 PIXEL PACK/UNPACK MODES
190
+ // RASTERIZER_DISCARD ...
191
+ [GL.PACK_ROW_LENGTH]: pixelStorei,
192
+ [GL.PACK_SKIP_PIXELS]: pixelStorei,
193
+ [GL.PACK_SKIP_ROWS]: pixelStorei,
194
+ [GL.UNPACK_ROW_LENGTH]: pixelStorei,
195
+ [GL.UNPACK_IMAGE_HEIGHT]: pixelStorei,
196
+ [GL.UNPACK_SKIP_PIXELS]: pixelStorei,
197
+ [GL.UNPACK_SKIP_ROWS]: pixelStorei,
198
+ [GL.UNPACK_SKIP_IMAGES]: pixelStorei,
199
+ // Function-style setters
200
+ framebuffer: (gl, framebuffer) => {
201
+ // accepts 1) a WebGLFramebuffer 2) null (default framebuffer), or 3) luma.gl Framebuffer class
202
+ // framebuffer is null when restoring to default framebuffer, otherwise use the WebGL handle.
203
+ const handle = framebuffer && 'handle' in framebuffer ? framebuffer.handle : framebuffer;
204
+ return gl.bindFramebuffer(GL.FRAMEBUFFER, handle);
205
+ },
206
+ blend: (gl, value) => (value ? gl.enable(GL.BLEND) : gl.disable(GL.BLEND)),
207
+ blendColor: (gl, value) => gl.blendColor(...value),
208
+ blendEquation: (gl, args) => {
209
+ const separateModes = typeof args === 'number' ? [args, args] : args;
210
+ gl.blendEquationSeparate(...separateModes);
211
+ },
212
+ blendFunc: (gl, args) => {
213
+ const separateFuncs = args?.length === 2 ? [...args, ...args] : args;
214
+ gl.blendFuncSeparate(...separateFuncs);
215
+ },
216
+ clearColor: (gl, value) => gl.clearColor(...value),
217
+ clearDepth: (gl, value) => gl.clearDepth(value),
218
+ clearStencil: (gl, value) => gl.clearStencil(value),
219
+ colorMask: (gl, value) => gl.colorMask(...value),
220
+ cull: (gl, value) => value ? gl.enable(GL.CULL_FACE) : gl.disable(GL.CULL_FACE),
221
+ cullFace: (gl, value) => gl.cullFace(value),
222
+ depthTest: (gl, value) => value ? gl.enable(GL.DEPTH_TEST) : gl.disable(GL.DEPTH_TEST),
223
+ depthFunc: (gl, value) => gl.depthFunc(value),
224
+ depthMask: (gl, value) => gl.depthMask(value),
225
+ depthRange: (gl, value) => gl.depthRange(...value),
226
+ dither: (gl, value) => value ? gl.enable(GL.DITHER) : gl.disable(GL.DITHER),
227
+ derivativeHint: (gl, value) => {
228
+ // gl1: 'OES_standard_derivatives'
229
+ gl.hint(GL.FRAGMENT_SHADER_DERIVATIVE_HINT, value);
230
+ },
231
+ frontFace: (gl, value) => gl.frontFace(value),
232
+ mipmapHint: (gl, value) => gl.hint(GL.GENERATE_MIPMAP_HINT, value),
233
+ lineWidth: (gl, value) => gl.lineWidth(value),
234
+ polygonOffsetFill: (gl, value) => value ? gl.enable(GL.POLYGON_OFFSET_FILL) : gl.disable(GL.POLYGON_OFFSET_FILL),
235
+ polygonOffset: (gl, value) => gl.polygonOffset(...value),
236
+ sampleCoverage: (gl, value) => gl.sampleCoverage(...value),
237
+ scissorTest: (gl, value) => value ? gl.enable(GL.SCISSOR_TEST) : gl.disable(GL.SCISSOR_TEST),
238
+ scissor: (gl, value) => gl.scissor(...value),
239
+ stencilTest: (gl, value) => value ? gl.enable(GL.STENCIL_TEST) : gl.disable(GL.STENCIL_TEST),
240
+ stencilMask: (gl, value) => {
241
+ value = isArray(value) ? value : [value, value];
242
+ const [mask, backMask] = value;
243
+ gl.stencilMaskSeparate(GL.FRONT, mask);
244
+ gl.stencilMaskSeparate(GL.BACK, backMask);
245
+ },
246
+ stencilFunc: (gl, args) => {
247
+ args = isArray(args) && args.length === 3 ? [...args, ...args] : args;
248
+ const [func, ref, mask, backFunc, backRef, backMask] = args;
249
+ gl.stencilFuncSeparate(GL.FRONT, func, ref, mask);
250
+ gl.stencilFuncSeparate(GL.BACK, backFunc, backRef, backMask);
251
+ },
252
+ stencilOp: (gl, args) => {
253
+ args = isArray(args) && args.length === 3 ? [...args, ...args] : args;
254
+ const [sfail, dpfail, dppass, backSfail, backDpfail, backDppass] = args;
255
+ gl.stencilOpSeparate(GL.FRONT, sfail, dpfail, dppass);
256
+ gl.stencilOpSeparate(GL.BACK, backSfail, backDpfail, backDppass);
257
+ },
258
+ viewport: (gl, value) => gl.viewport(...value)
247
259
  };
248
-
249
260
  function getValue(glEnum, values, cache) {
250
- return values[glEnum] !== undefined ? values[glEnum] : cache[glEnum];
261
+ return values[glEnum] !== undefined ? values[glEnum] : cache[glEnum];
251
262
  }
252
-
263
+ // COMPOSITE_WEBGL_PARAMETER_
253
264
  export const GL_COMPOSITE_PARAMETER_SETTERS = {
254
- blendEquation: (gl, values, cache) => gl.blendEquationSeparate(getValue(GL.BLEND_EQUATION_RGB, values, cache), getValue(GL.BLEND_EQUATION_ALPHA, values, cache)),
255
- blendFunc: (gl, values, cache) => gl.blendFuncSeparate(getValue(GL.BLEND_SRC_RGB, values, cache), getValue(GL.BLEND_DST_RGB, values, cache), getValue(GL.BLEND_SRC_ALPHA, values, cache), getValue(GL.BLEND_DST_ALPHA, values, cache)),
256
- polygonOffset: (gl, values, cache) => gl.polygonOffset(getValue(GL.POLYGON_OFFSET_FACTOR, values, cache), getValue(GL.POLYGON_OFFSET_UNITS, values, cache)),
257
- sampleCoverage: (gl, values, cache) => gl.sampleCoverage(getValue(GL.SAMPLE_COVERAGE_VALUE, values, cache), getValue(GL.SAMPLE_COVERAGE_INVERT, values, cache)),
258
- stencilFuncFront: (gl, values, cache) => gl.stencilFuncSeparate(GL.FRONT, getValue(GL.STENCIL_FUNC, values, cache), getValue(GL.STENCIL_REF, values, cache), getValue(GL.STENCIL_VALUE_MASK, values, cache)),
259
- stencilFuncBack: (gl, values, cache) => gl.stencilFuncSeparate(GL.BACK, getValue(GL.STENCIL_BACK_FUNC, values, cache), getValue(GL.STENCIL_BACK_REF, values, cache), getValue(GL.STENCIL_BACK_VALUE_MASK, values, cache)),
260
- stencilOpFront: (gl, values, cache) => gl.stencilOpSeparate(GL.FRONT, getValue(GL.STENCIL_FAIL, values, cache), getValue(GL.STENCIL_PASS_DEPTH_FAIL, values, cache), getValue(GL.STENCIL_PASS_DEPTH_PASS, values, cache)),
261
- stencilOpBack: (gl, values, cache) => gl.stencilOpSeparate(GL.BACK, getValue(GL.STENCIL_BACK_FAIL, values, cache), getValue(GL.STENCIL_BACK_PASS_DEPTH_FAIL, values, cache), getValue(GL.STENCIL_BACK_PASS_DEPTH_PASS, values, cache))
265
+ blendEquation: (gl, values, cache) => gl.blendEquationSeparate(getValue(GL.BLEND_EQUATION_RGB, values, cache), getValue(GL.BLEND_EQUATION_ALPHA, values, cache)),
266
+ blendFunc: (gl, values, cache) => gl.blendFuncSeparate(getValue(GL.BLEND_SRC_RGB, values, cache), getValue(GL.BLEND_DST_RGB, values, cache), getValue(GL.BLEND_SRC_ALPHA, values, cache), getValue(GL.BLEND_DST_ALPHA, values, cache)),
267
+ polygonOffset: (gl, values, cache) => gl.polygonOffset(getValue(GL.POLYGON_OFFSET_FACTOR, values, cache), getValue(GL.POLYGON_OFFSET_UNITS, values, cache)),
268
+ sampleCoverage: (gl, values, cache) => gl.sampleCoverage(getValue(GL.SAMPLE_COVERAGE_VALUE, values, cache), getValue(GL.SAMPLE_COVERAGE_INVERT, values, cache)),
269
+ stencilFuncFront: (gl, values, cache) => gl.stencilFuncSeparate(GL.FRONT, getValue(GL.STENCIL_FUNC, values, cache), getValue(GL.STENCIL_REF, values, cache), getValue(GL.STENCIL_VALUE_MASK, values, cache)),
270
+ stencilFuncBack: (gl, values, cache) => gl.stencilFuncSeparate(GL.BACK, getValue(GL.STENCIL_BACK_FUNC, values, cache), getValue(GL.STENCIL_BACK_REF, values, cache), getValue(GL.STENCIL_BACK_VALUE_MASK, values, cache)),
271
+ stencilOpFront: (gl, values, cache) => gl.stencilOpSeparate(GL.FRONT, getValue(GL.STENCIL_FAIL, values, cache), getValue(GL.STENCIL_PASS_DEPTH_FAIL, values, cache), getValue(GL.STENCIL_PASS_DEPTH_PASS, values, cache)),
272
+ stencilOpBack: (gl, values, cache) => gl.stencilOpSeparate(GL.BACK, getValue(GL.STENCIL_BACK_FAIL, values, cache), getValue(GL.STENCIL_BACK_PASS_DEPTH_FAIL, values, cache), getValue(GL.STENCIL_BACK_PASS_DEPTH_PASS, values, cache))
262
273
  };
274
+ // Setter functions intercepted for cache updates
263
275
  export const GL_HOOKED_SETTERS = {
264
- enable: (update, capability) => update({
265
- [capability]: true
266
- }),
267
- disable: (update, capability) => update({
268
- [capability]: false
269
- }),
270
- pixelStorei: (update, pname, value) => update({
271
- [pname]: value
272
- }),
273
- hint: (update, pname, hint) => update({
274
- [pname]: hint
275
- }),
276
- useProgram: (update, value) => update({
277
- [GL.CURRENT_PROGRAM]: value
278
- }),
279
- bindRenderbuffer: (update, target, value) => update({
280
- [GL.RENDERBUFFER_BINDING]: value
281
- }),
282
- bindTransformFeedback: (update, target, value) => update({
283
- [GL.TRANSFORM_FEEDBACK_BINDING]: value
284
- }),
285
- bindVertexArray: (update, value) => update({
286
- [GL.VERTEX_ARRAY_BINDING]: value
287
- }),
288
- bindFramebuffer: (update, target, framebuffer) => {
289
- switch (target) {
290
- case GL.FRAMEBUFFER:
291
- return update({
292
- [GL.DRAW_FRAMEBUFFER_BINDING]: framebuffer,
293
- [GL.READ_FRAMEBUFFER_BINDING]: framebuffer
294
- });
295
-
296
- case GL.DRAW_FRAMEBUFFER:
297
- return update({
298
- [GL.DRAW_FRAMEBUFFER_BINDING]: framebuffer
299
- });
300
-
301
- case GL.READ_FRAMEBUFFER:
302
- return update({
303
- [GL.READ_FRAMEBUFFER_BINDING]: framebuffer
304
- });
305
-
306
- default:
307
- return null;
308
- }
309
- },
310
- bindBuffer: (update, target, buffer) => {
311
- const pname = {
312
- [GL.ARRAY_BUFFER]: [GL.ARRAY_BUFFER_BINDING],
313
- [GL.COPY_READ_BUFFER]: [GL.COPY_READ_BUFFER_BINDING],
314
- [GL.COPY_WRITE_BUFFER]: [GL.COPY_WRITE_BUFFER_BINDING],
315
- [GL.PIXEL_PACK_BUFFER]: [GL.PIXEL_PACK_BUFFER_BINDING],
316
- [GL.PIXEL_UNPACK_BUFFER]: [GL.PIXEL_UNPACK_BUFFER_BINDING]
317
- }[target];
318
-
319
- if (pname) {
320
- return update({
321
- [pname]: buffer
322
- });
323
- }
324
-
325
- return {
326
- valueChanged: true
327
- };
328
- },
329
- blendColor: (update, r, g, b, a) => update({
330
- [GL.BLEND_COLOR]: new Float32Array([r, g, b, a])
331
- }),
332
- blendEquation: (update, mode) => update({
333
- [GL.BLEND_EQUATION_RGB]: mode,
334
- [GL.BLEND_EQUATION_ALPHA]: mode
335
- }),
336
- blendEquationSeparate: (update, modeRGB, modeAlpha) => update({
337
- [GL.BLEND_EQUATION_RGB]: modeRGB,
338
- [GL.BLEND_EQUATION_ALPHA]: modeAlpha
339
- }),
340
- blendFunc: (update, src, dst) => update({
341
- [GL.BLEND_SRC_RGB]: src,
342
- [GL.BLEND_DST_RGB]: dst,
343
- [GL.BLEND_SRC_ALPHA]: src,
344
- [GL.BLEND_DST_ALPHA]: dst
345
- }),
346
- blendFuncSeparate: (update, srcRGB, dstRGB, srcAlpha, dstAlpha) => update({
347
- [GL.BLEND_SRC_RGB]: srcRGB,
348
- [GL.BLEND_DST_RGB]: dstRGB,
349
- [GL.BLEND_SRC_ALPHA]: srcAlpha,
350
- [GL.BLEND_DST_ALPHA]: dstAlpha
351
- }),
352
- clearColor: (update, r, g, b, a) => update({
353
- [GL.COLOR_CLEAR_VALUE]: new Float32Array([r, g, b, a])
354
- }),
355
- clearDepth: (update, depth) => update({
356
- [GL.DEPTH_CLEAR_VALUE]: depth
357
- }),
358
- clearStencil: (update, s) => update({
359
- [GL.STENCIL_CLEAR_VALUE]: s
360
- }),
361
- colorMask: (update, r, g, b, a) => update({
362
- [GL.COLOR_WRITEMASK]: [r, g, b, a]
363
- }),
364
- cullFace: (update, mode) => update({
365
- [GL.CULL_FACE_MODE]: mode
366
- }),
367
- depthFunc: (update, func) => update({
368
- [GL.DEPTH_FUNC]: func
369
- }),
370
- depthRange: (update, zNear, zFar) => update({
371
- [GL.DEPTH_RANGE]: new Float32Array([zNear, zFar])
372
- }),
373
- depthMask: (update, mask) => update({
374
- [GL.DEPTH_WRITEMASK]: mask
375
- }),
376
- frontFace: (update, face) => update({
377
- [GL.FRONT_FACE]: face
378
- }),
379
- lineWidth: (update, width) => update({
380
- [GL.LINE_WIDTH]: width
381
- }),
382
- polygonOffset: (update, factor, units) => update({
383
- [GL.POLYGON_OFFSET_FACTOR]: factor,
384
- [GL.POLYGON_OFFSET_UNITS]: units
385
- }),
386
- sampleCoverage: (update, value, invert) => update({
387
- [GL.SAMPLE_COVERAGE_VALUE]: value,
388
- [GL.SAMPLE_COVERAGE_INVERT]: invert
389
- }),
390
- scissor: (update, x, y, width, height) => update({
391
- [GL.SCISSOR_BOX]: new Int32Array([x, y, width, height])
392
- }),
393
- stencilMask: (update, mask) => update({
394
- [GL.STENCIL_WRITEMASK]: mask,
395
- [GL.STENCIL_BACK_WRITEMASK]: mask
396
- }),
397
- stencilMaskSeparate: (update, face, mask) => update({
398
- [face === GL.FRONT ? GL.STENCIL_WRITEMASK : GL.STENCIL_BACK_WRITEMASK]: mask
399
- }),
400
- stencilFunc: (update, func, ref, mask) => update({
401
- [GL.STENCIL_FUNC]: func,
402
- [GL.STENCIL_REF]: ref,
403
- [GL.STENCIL_VALUE_MASK]: mask,
404
- [GL.STENCIL_BACK_FUNC]: func,
405
- [GL.STENCIL_BACK_REF]: ref,
406
- [GL.STENCIL_BACK_VALUE_MASK]: mask
407
- }),
408
- stencilFuncSeparate: (update, face, func, ref, mask) => update({
409
- [face === GL.FRONT ? GL.STENCIL_FUNC : GL.STENCIL_BACK_FUNC]: func,
410
- [face === GL.FRONT ? GL.STENCIL_REF : GL.STENCIL_BACK_REF]: ref,
411
- [face === GL.FRONT ? GL.STENCIL_VALUE_MASK : GL.STENCIL_BACK_VALUE_MASK]: mask
412
- }),
413
- stencilOp: (update, fail, zfail, zpass) => update({
414
- [GL.STENCIL_FAIL]: fail,
415
- [GL.STENCIL_PASS_DEPTH_FAIL]: zfail,
416
- [GL.STENCIL_PASS_DEPTH_PASS]: zpass,
417
- [GL.STENCIL_BACK_FAIL]: fail,
418
- [GL.STENCIL_BACK_PASS_DEPTH_FAIL]: zfail,
419
- [GL.STENCIL_BACK_PASS_DEPTH_PASS]: zpass
420
- }),
421
- stencilOpSeparate: (update, face, fail, zfail, zpass) => update({
422
- [face === GL.FRONT ? GL.STENCIL_FAIL : GL.STENCIL_BACK_FAIL]: fail,
423
- [face === GL.FRONT ? GL.STENCIL_PASS_DEPTH_FAIL : GL.STENCIL_BACK_PASS_DEPTH_FAIL]: zfail,
424
- [face === GL.FRONT ? GL.STENCIL_PASS_DEPTH_PASS : GL.STENCIL_BACK_PASS_DEPTH_PASS]: zpass
425
- }),
426
- viewport: (update, x, y, width, height) => update({
427
- [GL.VIEWPORT]: [x, y, width, height]
428
- })
276
+ // GENERIC SETTERS
277
+ enable: (update, capability) => update({
278
+ [capability]: true
279
+ }),
280
+ disable: (update, capability) => update({
281
+ [capability]: false
282
+ }),
283
+ pixelStorei: (update, pname, value) => update({
284
+ [pname]: value
285
+ }),
286
+ hint: (update, pname, hint) => update({
287
+ [pname]: hint
288
+ }),
289
+ // SPECIFIC SETTERS
290
+ useProgram: (update, value) => update({
291
+ [GL.CURRENT_PROGRAM]: value
292
+ }),
293
+ bindRenderbuffer: (update, target, value) => update({
294
+ [GL.RENDERBUFFER_BINDING]: value
295
+ }),
296
+ bindTransformFeedback: (update, target, value) => update({
297
+ [GL.TRANSFORM_FEEDBACK_BINDING]: value
298
+ }),
299
+ bindVertexArray: (update, value) => update({
300
+ [GL.VERTEX_ARRAY_BINDING]: value
301
+ }),
302
+ bindFramebuffer: (update, target, framebuffer) => {
303
+ switch (target) {
304
+ case GL.FRAMEBUFFER:
305
+ return update({
306
+ [GL.DRAW_FRAMEBUFFER_BINDING]: framebuffer,
307
+ [GL.READ_FRAMEBUFFER_BINDING]: framebuffer
308
+ });
309
+ case GL.DRAW_FRAMEBUFFER:
310
+ return update({ [GL.DRAW_FRAMEBUFFER_BINDING]: framebuffer });
311
+ case GL.READ_FRAMEBUFFER:
312
+ return update({ [GL.READ_FRAMEBUFFER_BINDING]: framebuffer });
313
+ default:
314
+ return null;
315
+ }
316
+ },
317
+ bindBuffer: (update, target, buffer) => {
318
+ const pname = {
319
+ [GL.ARRAY_BUFFER]: [GL.ARRAY_BUFFER_BINDING],
320
+ [GL.COPY_READ_BUFFER]: [GL.COPY_READ_BUFFER_BINDING],
321
+ [GL.COPY_WRITE_BUFFER]: [GL.COPY_WRITE_BUFFER_BINDING],
322
+ [GL.PIXEL_PACK_BUFFER]: [GL.PIXEL_PACK_BUFFER_BINDING],
323
+ [GL.PIXEL_UNPACK_BUFFER]: [GL.PIXEL_UNPACK_BUFFER_BINDING]
324
+ }[target];
325
+ if (pname) {
326
+ return update({ [pname]: buffer });
327
+ }
328
+ // targets that should not be cached
329
+ return { valueChanged: true };
330
+ },
331
+ blendColor: (update, r, g, b, a) => update({
332
+ [GL.BLEND_COLOR]: new Float32Array([r, g, b, a])
333
+ }),
334
+ blendEquation: (update, mode) => update({
335
+ [GL.BLEND_EQUATION_RGB]: mode,
336
+ [GL.BLEND_EQUATION_ALPHA]: mode
337
+ }),
338
+ blendEquationSeparate: (update, modeRGB, modeAlpha) => update({
339
+ [GL.BLEND_EQUATION_RGB]: modeRGB,
340
+ [GL.BLEND_EQUATION_ALPHA]: modeAlpha
341
+ }),
342
+ blendFunc: (update, src, dst) => update({
343
+ [GL.BLEND_SRC_RGB]: src,
344
+ [GL.BLEND_DST_RGB]: dst,
345
+ [GL.BLEND_SRC_ALPHA]: src,
346
+ [GL.BLEND_DST_ALPHA]: dst
347
+ }),
348
+ blendFuncSeparate: (update, srcRGB, dstRGB, srcAlpha, dstAlpha) => update({
349
+ [GL.BLEND_SRC_RGB]: srcRGB,
350
+ [GL.BLEND_DST_RGB]: dstRGB,
351
+ [GL.BLEND_SRC_ALPHA]: srcAlpha,
352
+ [GL.BLEND_DST_ALPHA]: dstAlpha
353
+ }),
354
+ clearColor: (update, r, g, b, a) => update({
355
+ [GL.COLOR_CLEAR_VALUE]: new Float32Array([r, g, b, a])
356
+ }),
357
+ clearDepth: (update, depth) => update({
358
+ [GL.DEPTH_CLEAR_VALUE]: depth
359
+ }),
360
+ clearStencil: (update, s) => update({
361
+ [GL.STENCIL_CLEAR_VALUE]: s
362
+ }),
363
+ colorMask: (update, r, g, b, a) => update({
364
+ [GL.COLOR_WRITEMASK]: [r, g, b, a]
365
+ }),
366
+ cullFace: (update, mode) => update({
367
+ [GL.CULL_FACE_MODE]: mode
368
+ }),
369
+ depthFunc: (update, func) => update({
370
+ [GL.DEPTH_FUNC]: func
371
+ }),
372
+ depthRange: (update, zNear, zFar) => update({
373
+ [GL.DEPTH_RANGE]: new Float32Array([zNear, zFar])
374
+ }),
375
+ depthMask: (update, mask) => update({
376
+ [GL.DEPTH_WRITEMASK]: mask
377
+ }),
378
+ frontFace: (update, face) => update({
379
+ [GL.FRONT_FACE]: face
380
+ }),
381
+ lineWidth: (update, width) => update({
382
+ [GL.LINE_WIDTH]: width
383
+ }),
384
+ polygonOffset: (update, factor, units) => update({
385
+ [GL.POLYGON_OFFSET_FACTOR]: factor,
386
+ [GL.POLYGON_OFFSET_UNITS]: units
387
+ }),
388
+ sampleCoverage: (update, value, invert) => update({
389
+ [GL.SAMPLE_COVERAGE_VALUE]: value,
390
+ [GL.SAMPLE_COVERAGE_INVERT]: invert
391
+ }),
392
+ scissor: (update, x, y, width, height) => update({
393
+ [GL.SCISSOR_BOX]: new Int32Array([x, y, width, height])
394
+ }),
395
+ stencilMask: (update, mask) => update({
396
+ [GL.STENCIL_WRITEMASK]: mask,
397
+ [GL.STENCIL_BACK_WRITEMASK]: mask
398
+ }),
399
+ stencilMaskSeparate: (update, face, mask) => update({
400
+ [face === GL.FRONT ? GL.STENCIL_WRITEMASK : GL.STENCIL_BACK_WRITEMASK]: mask
401
+ }),
402
+ stencilFunc: (update, func, ref, mask) => update({
403
+ [GL.STENCIL_FUNC]: func,
404
+ [GL.STENCIL_REF]: ref,
405
+ [GL.STENCIL_VALUE_MASK]: mask,
406
+ [GL.STENCIL_BACK_FUNC]: func,
407
+ [GL.STENCIL_BACK_REF]: ref,
408
+ [GL.STENCIL_BACK_VALUE_MASK]: mask
409
+ }),
410
+ stencilFuncSeparate: (update, face, func, ref, mask) => update({
411
+ [face === GL.FRONT ? GL.STENCIL_FUNC : GL.STENCIL_BACK_FUNC]: func,
412
+ [face === GL.FRONT ? GL.STENCIL_REF : GL.STENCIL_BACK_REF]: ref,
413
+ [face === GL.FRONT ? GL.STENCIL_VALUE_MASK : GL.STENCIL_BACK_VALUE_MASK]: mask
414
+ }),
415
+ stencilOp: (update, fail, zfail, zpass) => update({
416
+ [GL.STENCIL_FAIL]: fail,
417
+ [GL.STENCIL_PASS_DEPTH_FAIL]: zfail,
418
+ [GL.STENCIL_PASS_DEPTH_PASS]: zpass,
419
+ [GL.STENCIL_BACK_FAIL]: fail,
420
+ [GL.STENCIL_BACK_PASS_DEPTH_FAIL]: zfail,
421
+ [GL.STENCIL_BACK_PASS_DEPTH_PASS]: zpass
422
+ }),
423
+ stencilOpSeparate: (update, face, fail, zfail, zpass) => update({
424
+ [face === GL.FRONT ? GL.STENCIL_FAIL : GL.STENCIL_BACK_FAIL]: fail,
425
+ [face === GL.FRONT ? GL.STENCIL_PASS_DEPTH_FAIL : GL.STENCIL_BACK_PASS_DEPTH_FAIL]: zfail,
426
+ [face === GL.FRONT ? GL.STENCIL_PASS_DEPTH_PASS : GL.STENCIL_BACK_PASS_DEPTH_PASS]: zpass
427
+ }),
428
+ viewport: (update, x, y, width, height) => update({
429
+ [GL.VIEWPORT]: [x, y, width, height]
430
+ })
429
431
  };
430
-
432
+ // GETTER TABLE - FOR READING OUT AN ENTIRE CONTEXT
431
433
  const isEnabled = (gl, key) => gl.isEnabled(key);
432
-
434
+ // Exceptions for any keys that cannot be queried by gl.getParameters
433
435
  export const GL_PARAMETER_GETTERS = {
434
- [GL.BLEND]: isEnabled,
435
- [GL.CULL_FACE]: isEnabled,
436
- [GL.DEPTH_TEST]: isEnabled,
437
- [GL.DITHER]: isEnabled,
438
- [GL.POLYGON_OFFSET_FILL]: isEnabled,
439
- [GL.SAMPLE_ALPHA_TO_COVERAGE]: isEnabled,
440
- [GL.SAMPLE_COVERAGE]: isEnabled,
441
- [GL.SCISSOR_TEST]: isEnabled,
442
- [GL.STENCIL_TEST]: isEnabled,
443
- [GL.RASTERIZER_DISCARD]: isEnabled
436
+ [GL.BLEND]: isEnabled,
437
+ [GL.CULL_FACE]: isEnabled,
438
+ [GL.DEPTH_TEST]: isEnabled,
439
+ [GL.DITHER]: isEnabled,
440
+ [GL.POLYGON_OFFSET_FILL]: isEnabled,
441
+ [GL.SAMPLE_ALPHA_TO_COVERAGE]: isEnabled,
442
+ [GL.SAMPLE_COVERAGE]: isEnabled,
443
+ [GL.SCISSOR_TEST]: isEnabled,
444
+ [GL.STENCIL_TEST]: isEnabled,
445
+ // WebGL 2
446
+ [GL.RASTERIZER_DISCARD]: isEnabled
444
447
  };
445
- export const NON_CACHE_PARAMETERS = new Set([GL.ACTIVE_TEXTURE, GL.TRANSFORM_FEEDBACK_ACTIVE, GL.TRANSFORM_FEEDBACK_PAUSED, GL.TRANSFORM_FEEDBACK_BUFFER_BINDING, GL.UNIFORM_BUFFER_BINDING, GL.ELEMENT_ARRAY_BUFFER_BINDING, GL.IMPLEMENTATION_COLOR_READ_FORMAT, GL.IMPLEMENTATION_COLOR_READ_TYPE, GL.READ_BUFFER, GL.DRAW_BUFFER0, GL.DRAW_BUFFER1, GL.DRAW_BUFFER2, GL.DRAW_BUFFER3, GL.DRAW_BUFFER4, GL.DRAW_BUFFER5, GL.DRAW_BUFFER6, GL.DRAW_BUFFER7, GL.DRAW_BUFFER8, GL.DRAW_BUFFER9, GL.DRAW_BUFFER10, GL.DRAW_BUFFER11, GL.DRAW_BUFFER12, GL.DRAW_BUFFER13, GL.DRAW_BUFFER14, GL.DRAW_BUFFER15, GL.SAMPLER_BINDING, GL.TEXTURE_BINDING_2D, GL.TEXTURE_BINDING_2D_ARRAY, GL.TEXTURE_BINDING_3D, GL.TEXTURE_BINDING_CUBE_MAP]);
446
- //# sourceMappingURL=webgl-parameter-tables.js.map
448
+ export const NON_CACHE_PARAMETERS = new Set([
449
+ // setter not intercepted
450
+ GL.ACTIVE_TEXTURE,
451
+ GL.TRANSFORM_FEEDBACK_ACTIVE,
452
+ GL.TRANSFORM_FEEDBACK_PAUSED,
453
+ // setters bindBufferRange/bindBufferBase cannot be pruned based on cache
454
+ GL.TRANSFORM_FEEDBACK_BUFFER_BINDING,
455
+ GL.UNIFORM_BUFFER_BINDING,
456
+ // states depending on VERTEX_ARRAY_BINDING
457
+ GL.ELEMENT_ARRAY_BUFFER_BINDING,
458
+ // states depending on READ_FRAMEBUFFER_BINDING
459
+ GL.IMPLEMENTATION_COLOR_READ_FORMAT,
460
+ GL.IMPLEMENTATION_COLOR_READ_TYPE,
461
+ // states depending on FRAMEBUFFER_BINDING
462
+ GL.READ_BUFFER,
463
+ GL.DRAW_BUFFER0,
464
+ GL.DRAW_BUFFER1,
465
+ GL.DRAW_BUFFER2,
466
+ GL.DRAW_BUFFER3,
467
+ GL.DRAW_BUFFER4,
468
+ GL.DRAW_BUFFER5,
469
+ GL.DRAW_BUFFER6,
470
+ GL.DRAW_BUFFER7,
471
+ GL.DRAW_BUFFER8,
472
+ GL.DRAW_BUFFER9,
473
+ GL.DRAW_BUFFER10,
474
+ GL.DRAW_BUFFER11,
475
+ GL.DRAW_BUFFER12,
476
+ GL.DRAW_BUFFER13,
477
+ GL.DRAW_BUFFER14,
478
+ GL.DRAW_BUFFER15,
479
+ // states depending on ACTIVE_TEXTURE
480
+ GL.SAMPLER_BINDING,
481
+ GL.TEXTURE_BINDING_2D,
482
+ GL.TEXTURE_BINDING_2D_ARRAY,
483
+ GL.TEXTURE_BINDING_3D,
484
+ GL.TEXTURE_BINDING_CUBE_MAP
485
+ ]);