@luma.gl/webgl 9.0.0-beta.3 → 9.0.0-beta.5

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