@luma.gl/webgl 9.0.0-alpha.11 → 9.0.0-alpha.12

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 (229) hide show
  1. package/dist/adapter/converters/device-parameters.js +1 -12
  2. package/dist/adapter/converters/device-parameters.js.map +1 -1
  3. package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
  4. package/dist/adapter/converters/texture-formats.js +0 -9
  5. package/dist/adapter/converters/texture-formats.js.map +1 -1
  6. package/dist/adapter/converters/vertex-formats.d.ts.map +1 -1
  7. package/dist/adapter/converters/vertex-formats.js +3 -0
  8. package/dist/adapter/converters/vertex-formats.js.map +1 -1
  9. package/dist/adapter/device-helpers/device-features.d.ts.map +1 -1
  10. package/dist/adapter/device-helpers/device-features.js.map +1 -1
  11. package/dist/adapter/device-helpers/get-device-info.js +4 -0
  12. package/dist/adapter/device-helpers/get-device-info.js.map +1 -1
  13. package/dist/adapter/helpers/get-shader-layout.d.ts +1 -1
  14. package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
  15. package/dist/adapter/helpers/get-shader-layout.js +2 -4
  16. package/dist/adapter/helpers/get-shader-layout.js.map +1 -1
  17. package/dist/adapter/helpers/set-uniform.js +1 -1
  18. package/dist/adapter/helpers/set-uniform.js.map +1 -1
  19. package/dist/adapter/objects/constants-to-keys.d.ts.map +1 -1
  20. package/dist/adapter/objects/constants-to-keys.js.map +1 -1
  21. package/dist/adapter/objects/webgl-renderbuffer.d.ts.map +1 -1
  22. package/dist/adapter/objects/webgl-renderbuffer.js +1 -1
  23. package/dist/adapter/objects/webgl-renderbuffer.js.map +1 -1
  24. package/dist/adapter/objects/webgl-resource.d.ts +2 -4
  25. package/dist/adapter/objects/webgl-resource.d.ts.map +1 -1
  26. package/dist/adapter/objects/webgl-resource.js +1 -7
  27. package/dist/adapter/objects/webgl-resource.js.map +1 -1
  28. package/dist/adapter/objects/webgl-vertex-array-object.d.ts.map +1 -1
  29. package/dist/adapter/objects/webgl-vertex-array-object.js.map +1 -1
  30. package/dist/adapter/resources/webgl-buffer.d.ts +0 -1
  31. package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
  32. package/dist/adapter/resources/webgl-buffer.js +0 -2
  33. package/dist/adapter/resources/webgl-buffer.js.map +1 -1
  34. package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -1
  35. package/dist/adapter/resources/webgl-command-encoder.js.map +1 -1
  36. package/dist/adapter/resources/webgl-framebuffer.d.ts +0 -1
  37. package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
  38. package/dist/adapter/resources/webgl-framebuffer.js +2 -2
  39. package/dist/adapter/resources/webgl-framebuffer.js.map +1 -1
  40. package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
  41. package/dist/adapter/resources/webgl-render-pipeline.js +4 -32
  42. package/dist/adapter/resources/webgl-render-pipeline.js.map +1 -1
  43. package/dist/adapter/resources/webgl-sampler.d.ts +1 -0
  44. package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
  45. package/dist/adapter/resources/webgl-sampler.js +4 -0
  46. package/dist/adapter/resources/webgl-sampler.js.map +1 -1
  47. package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
  48. package/dist/adapter/resources/webgl-shader.js.map +1 -1
  49. package/dist/adapter/resources/webgl-texture.d.ts +2 -2
  50. package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
  51. package/dist/adapter/resources/webgl-texture.js +1 -3
  52. package/dist/adapter/resources/webgl-texture.js.map +1 -1
  53. package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
  54. package/dist/adapter/webgl-canvas-context.js +3 -0
  55. package/dist/adapter/webgl-canvas-context.js.map +1 -1
  56. package/dist/adapter/webgl-device.d.ts +2 -3
  57. package/dist/adapter/webgl-device.d.ts.map +1 -1
  58. package/dist/adapter/webgl-device.js +5 -4
  59. package/dist/adapter/webgl-device.js.map +1 -1
  60. package/dist/classic/buffer.d.ts.map +1 -1
  61. package/dist/classic/buffer.js.map +1 -1
  62. package/dist/context/debug/webgl-developer-tools.js +1 -7
  63. package/dist/context/debug/webgl-developer-tools.js.map +1 -1
  64. package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
  65. package/dist/context/parameters/unified-parameter-api.js.map +1 -1
  66. package/dist/context/parameters/webgl-parameter-tables.d.ts +103 -103
  67. package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
  68. package/dist/context/parameters/webgl-parameter-tables.js +15 -14
  69. package/dist/context/parameters/webgl-parameter-tables.js.map +1 -1
  70. package/dist/context/{context/context-state.d.ts → polyfill/context-data.d.ts} +3 -3
  71. package/dist/context/polyfill/context-data.d.ts.map +1 -0
  72. package/dist/context/polyfill/context-data.js +14 -0
  73. package/dist/context/polyfill/context-data.js.map +1 -0
  74. package/dist/context/polyfill/get-parameter-polyfill.d.ts +1 -1
  75. package/dist/context/polyfill/get-parameter-polyfill.d.ts.map +1 -1
  76. package/dist/context/polyfill/get-parameter-polyfill.js.map +1 -1
  77. package/dist/context/polyfill/polyfill-context.js +4 -4
  78. package/dist/context/polyfill/polyfill-context.js.map +1 -1
  79. package/dist/context/polyfill/polyfill-table.d.ts +7 -7
  80. package/dist/context/polyfill/polyfill-table.d.ts.map +1 -1
  81. package/dist/context/polyfill/polyfill-table.js +5 -4
  82. package/dist/context/polyfill/polyfill-table.js.map +1 -1
  83. package/dist/context/state-tracker/track-context-state.d.ts.map +1 -1
  84. package/dist/context/state-tracker/track-context-state.js +0 -1
  85. package/dist/context/state-tracker/track-context-state.js.map +1 -1
  86. package/dist/context/state-tracker/with-parameters.js +1 -1
  87. package/dist/context/state-tracker/with-parameters.js.map +1 -1
  88. package/dist/es5/adapter/converters/device-parameters.js +1 -12
  89. package/dist/es5/adapter/converters/device-parameters.js.map +1 -1
  90. package/dist/es5/adapter/converters/texture-formats.js +1 -10
  91. package/dist/es5/adapter/converters/texture-formats.js.map +1 -1
  92. package/dist/es5/adapter/converters/vertex-formats.js +3 -0
  93. package/dist/es5/adapter/converters/vertex-formats.js.map +1 -1
  94. package/dist/es5/adapter/device-helpers/device-features.js.map +1 -1
  95. package/dist/es5/adapter/device-helpers/get-device-info.js +4 -0
  96. package/dist/es5/adapter/device-helpers/get-device-info.js.map +1 -1
  97. package/dist/es5/adapter/helpers/get-shader-layout.js +2 -4
  98. package/dist/es5/adapter/helpers/get-shader-layout.js.map +1 -1
  99. package/dist/es5/adapter/helpers/set-uniform.js +1 -1
  100. package/dist/es5/adapter/helpers/set-uniform.js.map +1 -1
  101. package/dist/es5/adapter/objects/constants-to-keys.js.map +1 -1
  102. package/dist/es5/adapter/objects/webgl-renderbuffer.js +1 -1
  103. package/dist/es5/adapter/objects/webgl-renderbuffer.js.map +1 -1
  104. package/dist/es5/adapter/objects/webgl-resource.js +1 -6
  105. package/dist/es5/adapter/objects/webgl-resource.js.map +1 -1
  106. package/dist/es5/adapter/objects/webgl-vertex-array-object.js.map +1 -1
  107. package/dist/es5/adapter/resources/webgl-buffer.js +0 -1
  108. package/dist/es5/adapter/resources/webgl-buffer.js.map +1 -1
  109. package/dist/es5/adapter/resources/webgl-command-encoder.js.map +1 -1
  110. package/dist/es5/adapter/resources/webgl-framebuffer.js +2 -1
  111. package/dist/es5/adapter/resources/webgl-framebuffer.js.map +1 -1
  112. package/dist/es5/adapter/resources/webgl-render-pipeline.js +2 -38
  113. package/dist/es5/adapter/resources/webgl-render-pipeline.js.map +1 -1
  114. package/dist/es5/adapter/resources/webgl-sampler.js +5 -0
  115. package/dist/es5/adapter/resources/webgl-sampler.js.map +1 -1
  116. package/dist/es5/adapter/resources/webgl-shader.js.map +1 -1
  117. package/dist/es5/adapter/resources/webgl-texture.js +1 -7
  118. package/dist/es5/adapter/resources/webgl-texture.js.map +1 -1
  119. package/dist/es5/adapter/webgl-canvas-context.js +2 -0
  120. package/dist/es5/adapter/webgl-canvas-context.js.map +1 -1
  121. package/dist/es5/adapter/webgl-device.js +4 -3
  122. package/dist/es5/adapter/webgl-device.js.map +1 -1
  123. package/dist/es5/classic/buffer.js.map +1 -1
  124. package/dist/es5/context/debug/webgl-developer-tools.js +1 -7
  125. package/dist/es5/context/debug/webgl-developer-tools.js.map +1 -1
  126. package/dist/es5/context/parameters/unified-parameter-api.js.map +1 -1
  127. package/dist/es5/context/parameters/webgl-parameter-tables.js +10 -9
  128. package/dist/es5/context/parameters/webgl-parameter-tables.js.map +1 -1
  129. package/dist/es5/context/polyfill/context-data.js +21 -0
  130. package/dist/es5/context/polyfill/context-data.js.map +1 -0
  131. package/dist/es5/context/polyfill/get-parameter-polyfill.js.map +1 -1
  132. package/dist/es5/context/polyfill/polyfill-context.js +4 -4
  133. package/dist/es5/context/polyfill/polyfill-context.js.map +1 -1
  134. package/dist/es5/context/polyfill/polyfill-table.js +5 -4
  135. package/dist/es5/context/polyfill/polyfill-table.js.map +1 -1
  136. package/dist/es5/context/state-tracker/track-context-state.js +0 -1
  137. package/dist/es5/context/state-tracker/track-context-state.js.map +1 -1
  138. package/dist/es5/context/state-tracker/with-parameters.js +4 -2
  139. package/dist/es5/context/state-tracker/with-parameters.js.map +1 -1
  140. package/dist/esm/adapter/converters/device-parameters.js +1 -12
  141. package/dist/esm/adapter/converters/device-parameters.js.map +1 -1
  142. package/dist/esm/adapter/converters/texture-formats.js +0 -9
  143. package/dist/esm/adapter/converters/texture-formats.js.map +1 -1
  144. package/dist/esm/adapter/converters/vertex-formats.js +3 -0
  145. package/dist/esm/adapter/converters/vertex-formats.js.map +1 -1
  146. package/dist/esm/adapter/device-helpers/device-features.js.map +1 -1
  147. package/dist/esm/adapter/device-helpers/get-device-info.js +4 -0
  148. package/dist/esm/adapter/device-helpers/get-device-info.js.map +1 -1
  149. package/dist/esm/adapter/helpers/get-shader-layout.js +2 -4
  150. package/dist/esm/adapter/helpers/get-shader-layout.js.map +1 -1
  151. package/dist/esm/adapter/helpers/set-uniform.js +1 -1
  152. package/dist/esm/adapter/helpers/set-uniform.js.map +1 -1
  153. package/dist/esm/adapter/objects/constants-to-keys.js.map +1 -1
  154. package/dist/esm/adapter/objects/webgl-renderbuffer.js +1 -1
  155. package/dist/esm/adapter/objects/webgl-renderbuffer.js.map +1 -1
  156. package/dist/esm/adapter/objects/webgl-resource.js +1 -7
  157. package/dist/esm/adapter/objects/webgl-resource.js.map +1 -1
  158. package/dist/esm/adapter/objects/webgl-vertex-array-object.js.map +1 -1
  159. package/dist/esm/adapter/resources/webgl-buffer.js +0 -2
  160. package/dist/esm/adapter/resources/webgl-buffer.js.map +1 -1
  161. package/dist/esm/adapter/resources/webgl-command-encoder.js.map +1 -1
  162. package/dist/esm/adapter/resources/webgl-framebuffer.js +2 -2
  163. package/dist/esm/adapter/resources/webgl-framebuffer.js.map +1 -1
  164. package/dist/esm/adapter/resources/webgl-render-pipeline.js +4 -32
  165. package/dist/esm/adapter/resources/webgl-render-pipeline.js.map +1 -1
  166. package/dist/esm/adapter/resources/webgl-sampler.js +4 -0
  167. package/dist/esm/adapter/resources/webgl-sampler.js.map +1 -1
  168. package/dist/esm/adapter/resources/webgl-shader.js.map +1 -1
  169. package/dist/esm/adapter/resources/webgl-texture.js +1 -3
  170. package/dist/esm/adapter/resources/webgl-texture.js.map +1 -1
  171. package/dist/esm/adapter/webgl-canvas-context.js +3 -0
  172. package/dist/esm/adapter/webgl-canvas-context.js.map +1 -1
  173. package/dist/esm/adapter/webgl-device.js +5 -4
  174. package/dist/esm/adapter/webgl-device.js.map +1 -1
  175. package/dist/esm/classic/buffer.js.map +1 -1
  176. package/dist/esm/context/debug/webgl-developer-tools.js +1 -7
  177. package/dist/esm/context/debug/webgl-developer-tools.js.map +1 -1
  178. package/dist/esm/context/parameters/unified-parameter-api.js.map +1 -1
  179. package/dist/esm/context/parameters/webgl-parameter-tables.js +15 -14
  180. package/dist/esm/context/parameters/webgl-parameter-tables.js.map +1 -1
  181. package/dist/esm/context/polyfill/context-data.js +14 -0
  182. package/dist/esm/context/polyfill/context-data.js.map +1 -0
  183. package/dist/esm/context/polyfill/get-parameter-polyfill.js.map +1 -1
  184. package/dist/esm/context/polyfill/polyfill-context.js +4 -4
  185. package/dist/esm/context/polyfill/polyfill-context.js.map +1 -1
  186. package/dist/esm/context/polyfill/polyfill-table.js +5 -4
  187. package/dist/esm/context/polyfill/polyfill-table.js.map +1 -1
  188. package/dist/esm/context/state-tracker/track-context-state.js +0 -1
  189. package/dist/esm/context/state-tracker/track-context-state.js.map +1 -1
  190. package/dist/esm/context/state-tracker/with-parameters.js +1 -1
  191. package/dist/esm/context/state-tracker/with-parameters.js.map +1 -1
  192. package/package.json +4 -4
  193. package/src/adapter/converters/device-parameters.ts +11 -11
  194. package/src/adapter/converters/texture-formats.ts +12 -12
  195. package/src/adapter/converters/vertex-formats.ts +1 -0
  196. package/src/adapter/device-helpers/device-features.ts +0 -1
  197. package/src/adapter/device-helpers/get-device-info.ts +5 -1
  198. package/src/adapter/helpers/get-shader-layout.ts +18 -15
  199. package/src/adapter/helpers/set-uniform.ts +1 -1
  200. package/src/adapter/objects/constants-to-keys.ts +4 -1
  201. package/src/adapter/objects/webgl-renderbuffer.ts +5 -5
  202. package/src/adapter/objects/webgl-resource.ts +7 -12
  203. package/src/adapter/objects/webgl-vertex-array-object.ts +4 -4
  204. package/src/adapter/resources/webgl-buffer.ts +4 -4
  205. package/src/adapter/resources/webgl-command-encoder.ts +4 -4
  206. package/src/adapter/resources/webgl-framebuffer.ts +6 -5
  207. package/src/adapter/resources/webgl-render-pipeline.ts +24 -23
  208. package/src/adapter/resources/webgl-sampler.ts +5 -1
  209. package/src/adapter/resources/webgl-shader.ts +1 -1
  210. package/src/adapter/resources/webgl-texture.ts +5 -7
  211. package/src/adapter/webgl-canvas-context.ts +1 -0
  212. package/src/adapter/webgl-device.ts +10 -12
  213. package/src/classic/buffer.ts +7 -4
  214. package/src/context/debug/webgl-developer-tools.ts +7 -7
  215. package/src/context/parameters/unified-parameter-api.ts +1 -1
  216. package/src/context/parameters/webgl-parameter-tables.ts +113 -94
  217. package/src/context/{context/context-state.ts → polyfill/context-data.ts} +6 -10
  218. package/src/context/polyfill/get-parameter-polyfill.ts +7 -6
  219. package/src/context/polyfill/polyfill-context.ts +5 -5
  220. package/src/context/polyfill/polyfill-table.ts +14 -13
  221. package/src/context/state-tracker/track-context-state.ts +0 -1
  222. package/src/context/state-tracker/with-parameters.ts +2 -1
  223. package/dist/context/context/context-state.d.ts.map +0 -1
  224. package/dist/context/context/context-state.js +0 -21
  225. package/dist/context/context/context-state.js.map +0 -1
  226. package/dist/es5/context/context/context-state.js +0 -26
  227. package/dist/es5/context/context/context-state.js.map +0 -1
  228. package/dist/esm/context/context/context-state.js +0 -21
  229. package/dist/esm/context/context/context-state.js.map +0 -1
@@ -91,11 +91,13 @@ export const GL_PARAMETER_DEFAULTS: GLParameters = {
91
91
 
92
92
  // SETTER TABLES - ENABLES SETTING ANY PARAMETER WITH A COMMON API
93
93
 
94
- const enable = (gl, value, key) => (value ? gl.enable(key) : gl.disable(key));
95
- const hint = (gl, value, key) => gl.hint(key, value);
96
- const pixelStorei = (gl, value, key) => gl.pixelStorei(key, value);
94
+ const enable = (gl: WebGLRenderingContext, value: unknown, key: GL) =>
95
+ value ? gl.enable(key) : gl.disable(key);
96
+ const hint = (gl: WebGLRenderingContext, value: GL, key: GL) => gl.hint(key, value);
97
+ const pixelStorei = (gl: WebGLRenderingContext, value: number | boolean, key: GL) =>
98
+ gl.pixelStorei(key, value);
97
99
 
98
- const bindFramebuffer = (gl, value, key) => {
100
+ const bindFramebuffer = (gl: WebGLRenderingContext, value: unknown, key: GL) => {
99
101
  let target;
100
102
  if (key === GL.FRAMEBUFFER_BINDING) {
101
103
  target = isWebGL2(gl) ? GL.DRAW_FRAMEBUFFER : GL.FRAMEBUFFER;
@@ -106,21 +108,22 @@ const bindFramebuffer = (gl, value, key) => {
106
108
  return gl.bindFramebuffer(target, value);
107
109
  };
108
110
 
109
- const bindBuffer = (gl, value, key) => {
110
- const target = ({
111
- [GL.ARRAY_BUFFER_BINDING]: [GL.ARRAY_BUFFER],
112
- [GL.COPY_READ_BUFFER_BINDING]: [GL.COPY_READ_BUFFER],
113
- [GL.COPY_WRITE_BUFFER_BINDING]: [GL.COPY_WRITE_BUFFER],
114
- [GL.PIXEL_PACK_BUFFER_BINDING]: [GL.PIXEL_PACK_BUFFER],
115
- [GL.PIXEL_UNPACK_BUFFER_BINDING]: [GL.PIXEL_UNPACK_BUFFER]
116
- })[key];
111
+ const bindBuffer = (gl: WebGLRenderingContext, value: unknown, key: GL) => {
112
+ const bindingMap: Partial<Record<GL, GL>> = {
113
+ [GL.ARRAY_BUFFER_BINDING]: GL.ARRAY_BUFFER,
114
+ [GL.COPY_READ_BUFFER_BINDING]: GL.COPY_READ_BUFFER,
115
+ [GL.COPY_WRITE_BUFFER_BINDING]: GL.COPY_WRITE_BUFFER,
116
+ [GL.PIXEL_PACK_BUFFER_BINDING]: GL.PIXEL_PACK_BUFFER,
117
+ [GL.PIXEL_UNPACK_BUFFER_BINDING]: GL.PIXEL_UNPACK_BUFFER
118
+ };
119
+ const target = bindingMap[key];
117
120
 
118
121
  gl.bindBuffer(target, value);
119
122
  };
120
123
 
121
124
  // Utility
122
- function isArray(array) {
123
- return Array.isArray(array) || ArrayBuffer.isView(array);
125
+ function isArray(array: unknown): boolean {
126
+ return Array.isArray(array) || (ArrayBuffer.isView(array) && !(array instanceof DataView));
124
127
  }
125
128
 
126
129
  // Map from WebGL parameter names to corresponding WebGL setter functions
@@ -128,29 +131,34 @@ function isArray(array) {
128
131
  // NOTE: When value type is a string, it will be handled by 'GL_COMPOSITE_PARAMETER_SETTERS'
129
132
  export const GL_PARAMETER_SETTERS = {
130
133
  [GL.BLEND]: enable,
131
- [GL.BLEND_COLOR]: (gl, value) => gl.blendColor(...value),
134
+ [GL.BLEND_COLOR]: (gl: WebGLRenderingContext, value: [number, number, number, number]) =>
135
+ gl.blendColor(...value),
132
136
  [GL.BLEND_EQUATION_RGB]: 'blendEquation',
133
137
  [GL.BLEND_EQUATION_ALPHA]: 'blendEquation',
134
138
  [GL.BLEND_SRC_RGB]: 'blendFunc',
135
139
  [GL.BLEND_DST_RGB]: 'blendFunc',
136
140
  [GL.BLEND_SRC_ALPHA]: 'blendFunc',
137
141
  [GL.BLEND_DST_ALPHA]: 'blendFunc',
138
- [GL.COLOR_CLEAR_VALUE]: (gl, value) => gl.clearColor(...value),
139
- [GL.COLOR_WRITEMASK]: (gl, value) => gl.colorMask(...value),
142
+ [GL.COLOR_CLEAR_VALUE]: (gl: WebGLRenderingContext, value: [number, number, number, number]) =>
143
+ gl.clearColor(...value),
144
+ [GL.COLOR_WRITEMASK]: (gl: WebGLRenderingContext, value: [boolean, boolean, boolean, boolean]) => gl.colorMask(...value),
140
145
  [GL.CULL_FACE]: enable,
141
- [GL.CULL_FACE_MODE]: (gl, value) => gl.cullFace(value),
146
+ [GL.CULL_FACE_MODE]: (gl: WebGLRenderingContext, value) => gl.cullFace(value),
142
147
  [GL.DEPTH_TEST]: enable,
143
- [GL.DEPTH_CLEAR_VALUE]: (gl, value) => gl.clearDepth(value),
144
- [GL.DEPTH_FUNC]: (gl, value) => gl.depthFunc(value),
145
- [GL.DEPTH_RANGE]: (gl, value) => gl.depthRange(...value),
146
- [GL.DEPTH_WRITEMASK]: (gl, value) => gl.depthMask(value),
148
+ [GL.DEPTH_CLEAR_VALUE]: (gl: WebGLRenderingContext, value) => gl.clearDepth(value),
149
+ [GL.DEPTH_FUNC]: (gl: WebGLRenderingContext, value) => gl.depthFunc(value),
150
+ [GL.DEPTH_RANGE]: (gl: WebGLRenderingContext, value: [number, number]) => gl.depthRange(...value),
151
+ [GL.DEPTH_WRITEMASK]: (gl: WebGLRenderingContext, value) => gl.depthMask(value),
147
152
  [GL.DITHER]: enable,
148
153
  [GL.FRAGMENT_SHADER_DERIVATIVE_HINT]: hint,
149
154
 
150
- [GL.CURRENT_PROGRAM]: (gl, value) => gl.useProgram(value),
151
- [GL.RENDERBUFFER_BINDING]: (gl, value) => gl.bindRenderbuffer(GL.RENDERBUFFER, value),
152
- [GL.TRANSFORM_FEEDBACK_BINDING]: (gl, value) => gl.bindTransformFeedback?.(GL.TRANSFORM_FEEDBACK, value),
153
- [GL.VERTEX_ARRAY_BINDING]: (gl, value) => gl.bindVertexArray(value),
155
+ [GL.CURRENT_PROGRAM]: (gl: WebGLRenderingContext, value) => gl.useProgram(value),
156
+ [GL.RENDERBUFFER_BINDING]: (gl: WebGLRenderingContext, value) =>
157
+ gl.bindRenderbuffer(GL.RENDERBUFFER, value),
158
+ [GL.TRANSFORM_FEEDBACK_BINDING]: (gl: WebGLRenderingContext, value) =>
159
+ (gl as WebGL2RenderingContext).bindTransformFeedback?.(GL.TRANSFORM_FEEDBACK, value),
160
+ [GL.VERTEX_ARRAY_BINDING]: (gl: WebGLRenderingContext, value) =>
161
+ (gl as WebGL2RenderingContext).bindVertexArray(value),
154
162
  // NOTE: FRAMEBUFFER_BINDING and DRAW_FRAMEBUFFER_BINDING(WebGL2) refer same state.
155
163
  [GL.FRAMEBUFFER_BINDING]: bindFramebuffer,
156
164
  [GL.READ_FRAMEBUFFER_BINDING]: bindFramebuffer,
@@ -162,9 +170,9 @@ export const GL_PARAMETER_SETTERS = {
162
170
  [GL.PIXEL_PACK_BUFFER_BINDING]: bindBuffer,
163
171
  [GL.PIXEL_UNPACK_BUFFER_BINDING]: bindBuffer,
164
172
 
165
- [GL.FRONT_FACE]: (gl, value) => gl.frontFace(value),
173
+ [GL.FRONT_FACE]: (gl: WebGLRenderingContext, value) => gl.frontFace(value),
166
174
  [GL.GENERATE_MIPMAP_HINT]: hint,
167
- [GL.LINE_WIDTH]: (gl, value) => gl.lineWidth(value),
175
+ [GL.LINE_WIDTH]: (gl: WebGLRenderingContext, value) => gl.lineWidth(value),
168
176
  [GL.POLYGON_OFFSET_FILL]: enable,
169
177
  [GL.POLYGON_OFFSET_FACTOR]: 'polygonOffset',
170
178
  [GL.POLYGON_OFFSET_UNITS]: 'polygonOffset',
@@ -174,11 +182,13 @@ export const GL_PARAMETER_SETTERS = {
174
182
  [GL.SAMPLE_COVERAGE_VALUE]: 'sampleCoverage',
175
183
  [GL.SAMPLE_COVERAGE_INVERT]: 'sampleCoverage',
176
184
  [GL.SCISSOR_TEST]: enable,
177
- [GL.SCISSOR_BOX]: (gl, value) => gl.scissor(...value),
185
+ [GL.SCISSOR_BOX]: (gl: WebGLRenderingContext, value: [number, number, number, number]) => gl.scissor(...value),
178
186
  [GL.STENCIL_TEST]: enable,
179
- [GL.STENCIL_CLEAR_VALUE]: (gl, value) => gl.clearStencil(value),
180
- [GL.STENCIL_WRITEMASK]: (gl, value) => gl.stencilMaskSeparate(GL.FRONT, value),
181
- [GL.STENCIL_BACK_WRITEMASK]: (gl, value) => gl.stencilMaskSeparate(GL.BACK, value),
187
+ [GL.STENCIL_CLEAR_VALUE]: (gl: WebGLRenderingContext, value) => gl.clearStencil(value),
188
+ [GL.STENCIL_WRITEMASK]: (gl: WebGLRenderingContext, value) =>
189
+ gl.stencilMaskSeparate(GL.FRONT, value),
190
+ [GL.STENCIL_BACK_WRITEMASK]: (gl: WebGLRenderingContext, value) =>
191
+ gl.stencilMaskSeparate(GL.BACK, value),
182
192
  [GL.STENCIL_FUNC]: 'stencilFuncFront',
183
193
  [GL.STENCIL_REF]: 'stencilFuncFront',
184
194
  [GL.STENCIL_VALUE_MASK]: 'stencilFuncFront',
@@ -191,7 +201,7 @@ export const GL_PARAMETER_SETTERS = {
191
201
  [GL.STENCIL_BACK_FAIL]: 'stencilOpBack',
192
202
  [GL.STENCIL_BACK_PASS_DEPTH_FAIL]: 'stencilOpBack',
193
203
  [GL.STENCIL_BACK_PASS_DEPTH_PASS]: 'stencilOpBack',
194
- [GL.VIEWPORT]: (gl, value) => gl.viewport(...value),
204
+ [GL.VIEWPORT]: (gl: WebGLRenderingContext, value: [number, number, number, number]) => gl.viewport(...value),
195
205
 
196
206
  // WEBGL1 PIXEL PACK/UNPACK MODES
197
207
  [GL.PACK_ALIGNMENT]: pixelStorei,
@@ -212,80 +222,85 @@ export const GL_PARAMETER_SETTERS = {
212
222
  [GL.UNPACK_SKIP_IMAGES]: pixelStorei,
213
223
 
214
224
  // Function-style setters
215
- framebuffer: (gl, framebuffer) => {
225
+ framebuffer: (gl: WebGLRenderingContext, framebuffer) => {
216
226
  // accepts 1) a WebGLFramebuffer 2) null (default framebuffer), or 3) luma.gl Framebuffer class
217
227
  // framebuffer is null when restoring to default framebuffer, otherwise use the WebGL handle.
218
228
  const handle = framebuffer && 'handle' in framebuffer ? framebuffer.handle : framebuffer;
219
229
  return gl.bindFramebuffer(GL.FRAMEBUFFER, handle);
220
230
  },
221
- blend: (gl, value) => (value ? gl.enable(GL.BLEND) : gl.disable(GL.BLEND)),
222
- blendColor: (gl, value) => gl.blendColor(...value),
223
- blendEquation: (gl, args) => {
224
- args = isArray(args) ? args : [args, args];
225
- gl.blendEquationSeparate(...args);
231
+ blend: (gl: WebGLRenderingContext, value) => (value ? gl.enable(GL.BLEND) : gl.disable(GL.BLEND)),
232
+ blendColor: (gl: WebGLRenderingContext, value: [number, number, number, number]) => gl.blendColor(...value),
233
+ blendEquation: (gl: WebGLRenderingContext, args: number | [number, number]) => {
234
+ const separateModes = typeof args === 'number' ? [args, args] as [number, number]: args;
235
+ gl.blendEquationSeparate(...separateModes);
226
236
  },
227
- blendFunc: (gl, args) => {
228
- args = isArray(args) && args.length === 2 ? [...args, ...args] : args;
229
- gl.blendFuncSeparate(...args);
237
+ blendFunc: (gl: WebGLRenderingContext, args: [number, number] | [number, number, number, number]) => {
238
+ const separateFuncs = args?.length === 2 ? [...args, ...args] as [number, number, number, number] : args;
239
+ gl.blendFuncSeparate(...separateFuncs);
230
240
  },
231
241
 
232
- clearColor: (gl, value) => gl.clearColor(...value),
233
- clearDepth: (gl, value) => gl.clearDepth(value),
234
- clearStencil: (gl, value) => gl.clearStencil(value),
242
+ clearColor: (gl: WebGLRenderingContext, value: [number, number, number, number]) => gl.clearColor(...value),
243
+ clearDepth: (gl: WebGLRenderingContext, value) => gl.clearDepth(value),
244
+ clearStencil: (gl: WebGLRenderingContext, value) => gl.clearStencil(value),
235
245
 
236
- colorMask: (gl, value) => gl.colorMask(...value),
246
+ colorMask: (gl: WebGLRenderingContext, value: [boolean, boolean, boolean, boolean]) => gl.colorMask(...value),
237
247
 
238
- cull: (gl, value) => (value ? gl.enable(GL.CULL_FACE) : gl.disable(GL.CULL_FACE)),
239
- cullFace: (gl, value) => gl.cullFace(value),
248
+ cull: (gl: WebGLRenderingContext, value) =>
249
+ value ? gl.enable(GL.CULL_FACE) : gl.disable(GL.CULL_FACE),
250
+ cullFace: (gl: WebGLRenderingContext, value) => gl.cullFace(value),
240
251
 
241
- depthTest: (gl, value) => (value ? gl.enable(GL.DEPTH_TEST) : gl.disable(GL.DEPTH_TEST)),
242
- depthFunc: (gl, value) => gl.depthFunc(value),
243
- depthMask: (gl, value) => gl.depthMask(value),
244
- depthRange: (gl, value) => gl.depthRange(...value),
252
+ depthTest: (gl: WebGLRenderingContext, value) =>
253
+ value ? gl.enable(GL.DEPTH_TEST) : gl.disable(GL.DEPTH_TEST),
254
+ depthFunc: (gl: WebGLRenderingContext, value) => gl.depthFunc(value),
255
+ depthMask: (gl: WebGLRenderingContext, value) => gl.depthMask(value),
256
+ depthRange: (gl: WebGLRenderingContext, value: [number, number]) => gl.depthRange(...value),
245
257
 
246
- dither: (gl, value) => (value ? gl.enable(GL.DITHER) : gl.disable(GL.DITHER)),
258
+ dither: (gl: WebGLRenderingContext, value) =>
259
+ value ? gl.enable(GL.DITHER) : gl.disable(GL.DITHER),
247
260
 
248
- derivativeHint: (gl, value) => {
261
+ derivativeHint: (gl: WebGLRenderingContext, value) => {
249
262
  // gl1: 'OES_standard_derivatives'
250
263
  gl.hint(GL.FRAGMENT_SHADER_DERIVATIVE_HINT, value);
251
264
  },
252
265
 
253
- frontFace: (gl, value) => gl.frontFace(value),
266
+ frontFace: (gl: WebGLRenderingContext, value) => gl.frontFace(value),
254
267
 
255
- mipmapHint: (gl, value) => gl.hint(GL.GENERATE_MIPMAP_HINT, value),
268
+ mipmapHint: (gl: WebGLRenderingContext, value) => gl.hint(GL.GENERATE_MIPMAP_HINT, value),
256
269
 
257
- lineWidth: (gl, value) => gl.lineWidth(value),
270
+ lineWidth: (gl: WebGLRenderingContext, value) => gl.lineWidth(value),
258
271
 
259
- polygonOffsetFill: (gl, value) =>
272
+ polygonOffsetFill: (gl: WebGLRenderingContext, value) =>
260
273
  value ? gl.enable(GL.POLYGON_OFFSET_FILL) : gl.disable(GL.POLYGON_OFFSET_FILL),
261
- polygonOffset: (gl, value) => gl.polygonOffset(...value),
274
+ polygonOffset: (gl: WebGLRenderingContext, value: [number, number]) => gl.polygonOffset(...value),
262
275
 
263
- sampleCoverage: (gl, value) => gl.sampleCoverage(...value),
276
+ sampleCoverage: (gl: WebGLRenderingContext, value: [number, boolean?]) => gl.sampleCoverage(...value),
264
277
 
265
- scissorTest: (gl, value) => (value ? gl.enable(GL.SCISSOR_TEST) : gl.disable(GL.SCISSOR_TEST)),
266
- scissor: (gl, value) => gl.scissor(...value),
278
+ scissorTest: (gl: WebGLRenderingContext, value) =>
279
+ value ? gl.enable(GL.SCISSOR_TEST) : gl.disable(GL.SCISSOR_TEST),
280
+ scissor: (gl: WebGLRenderingContext, value: [number, number, number, number]) => gl.scissor(...value),
267
281
 
268
- stencilTest: (gl, value) => (value ? gl.enable(GL.STENCIL_TEST) : gl.disable(GL.STENCIL_TEST)),
269
- stencilMask: (gl, value) => {
282
+ stencilTest: (gl: WebGLRenderingContext, value) =>
283
+ value ? gl.enable(GL.STENCIL_TEST) : gl.disable(GL.STENCIL_TEST),
284
+ stencilMask: (gl: WebGLRenderingContext, value) => {
270
285
  value = isArray(value) ? value : [value, value];
271
286
  const [mask, backMask] = value;
272
287
  gl.stencilMaskSeparate(GL.FRONT, mask);
273
288
  gl.stencilMaskSeparate(GL.BACK, backMask);
274
289
  },
275
- stencilFunc: (gl, args) => {
290
+ stencilFunc: (gl: WebGLRenderingContext, args) => {
276
291
  args = isArray(args) && args.length === 3 ? [...args, ...args] : args;
277
292
  const [func, ref, mask, backFunc, backRef, backMask] = args;
278
293
  gl.stencilFuncSeparate(GL.FRONT, func, ref, mask);
279
294
  gl.stencilFuncSeparate(GL.BACK, backFunc, backRef, backMask);
280
295
  },
281
- stencilOp: (gl, args) => {
296
+ stencilOp: (gl: WebGLRenderingContext, args) => {
282
297
  args = isArray(args) && args.length === 3 ? [...args, ...args] : args;
283
298
  const [sfail, dpfail, dppass, backSfail, backDpfail, backDppass] = args;
284
299
  gl.stencilOpSeparate(GL.FRONT, sfail, dpfail, dppass);
285
300
  gl.stencilOpSeparate(GL.BACK, backSfail, backDpfail, backDppass);
286
301
  },
287
302
 
288
- viewport: (gl, value) => gl.viewport(...value)
303
+ viewport: (gl: WebGLRenderingContext, value: [number, number, number, number]) => gl.viewport(...value)
289
304
  };
290
305
 
291
306
  function getValue(glEnum, values, cache) {
@@ -294,50 +309,50 @@ function getValue(glEnum, values, cache) {
294
309
 
295
310
  // COMPOSITE_WEBGL_PARAMETER_
296
311
  export const GL_COMPOSITE_PARAMETER_SETTERS = {
297
- blendEquation: (gl, values, cache) =>
312
+ blendEquation: (gl: WebGLRenderingContext, values, cache) =>
298
313
  gl.blendEquationSeparate(
299
314
  getValue(GL.BLEND_EQUATION_RGB, values, cache),
300
315
  getValue(GL.BLEND_EQUATION_ALPHA, values, cache)
301
316
  ),
302
- blendFunc: (gl, values, cache) =>
317
+ blendFunc: (gl: WebGLRenderingContext, values, cache) =>
303
318
  gl.blendFuncSeparate(
304
319
  getValue(GL.BLEND_SRC_RGB, values, cache),
305
320
  getValue(GL.BLEND_DST_RGB, values, cache),
306
321
  getValue(GL.BLEND_SRC_ALPHA, values, cache),
307
322
  getValue(GL.BLEND_DST_ALPHA, values, cache)
308
323
  ),
309
- polygonOffset: (gl, values, cache) =>
324
+ polygonOffset: (gl: WebGLRenderingContext, values, cache) =>
310
325
  gl.polygonOffset(
311
326
  getValue(GL.POLYGON_OFFSET_FACTOR, values, cache),
312
327
  getValue(GL.POLYGON_OFFSET_UNITS, values, cache)
313
328
  ),
314
- sampleCoverage: (gl, values, cache) =>
329
+ sampleCoverage: (gl: WebGLRenderingContext, values, cache) =>
315
330
  gl.sampleCoverage(
316
331
  getValue(GL.SAMPLE_COVERAGE_VALUE, values, cache),
317
332
  getValue(GL.SAMPLE_COVERAGE_INVERT, values, cache)
318
333
  ),
319
- stencilFuncFront: (gl, values, cache) =>
334
+ stencilFuncFront: (gl: WebGLRenderingContext, values, cache) =>
320
335
  gl.stencilFuncSeparate(
321
336
  GL.FRONT,
322
337
  getValue(GL.STENCIL_FUNC, values, cache),
323
338
  getValue(GL.STENCIL_REF, values, cache),
324
339
  getValue(GL.STENCIL_VALUE_MASK, values, cache)
325
340
  ),
326
- stencilFuncBack: (gl, values, cache) =>
341
+ stencilFuncBack: (gl: WebGLRenderingContext, values, cache) =>
327
342
  gl.stencilFuncSeparate(
328
343
  GL.BACK,
329
344
  getValue(GL.STENCIL_BACK_FUNC, values, cache),
330
345
  getValue(GL.STENCIL_BACK_REF, values, cache),
331
346
  getValue(GL.STENCIL_BACK_VALUE_MASK, values, cache)
332
347
  ),
333
- stencilOpFront: (gl, values, cache) =>
348
+ stencilOpFront: (gl: WebGLRenderingContext, values, cache) =>
334
349
  gl.stencilOpSeparate(
335
350
  GL.FRONT,
336
351
  getValue(GL.STENCIL_FAIL, values, cache),
337
352
  getValue(GL.STENCIL_PASS_DEPTH_FAIL, values, cache),
338
353
  getValue(GL.STENCIL_PASS_DEPTH_PASS, values, cache)
339
354
  ),
340
- stencilOpBack: (gl, values, cache) =>
355
+ stencilOpBack: (gl: WebGLRenderingContext, values, cache) =>
341
356
  gl.stencilOpSeparate(
342
357
  GL.BACK,
343
358
  getValue(GL.STENCIL_BACK_FAIL, values, cache),
@@ -352,36 +367,40 @@ type UpdateFunc = (params: Record<string, any>) => void;
352
367
  export const GL_HOOKED_SETTERS = {
353
368
  // GENERIC SETTERS
354
369
 
355
- enable: (update: UpdateFunc, capability) =>
370
+ enable: (update: UpdateFunc, capability: GL) =>
356
371
  update({
357
372
  [capability]: true
358
373
  }),
359
- disable: (update: UpdateFunc, capability) =>
374
+ disable: (update: UpdateFunc, capability: GL) =>
360
375
  update({
361
376
  [capability]: false
362
377
  }),
363
- pixelStorei: (update: UpdateFunc, pname, value) =>
378
+ pixelStorei: (update: UpdateFunc, pname: GL, value) =>
364
379
  update({
365
380
  [pname]: value
366
381
  }),
367
- hint: (update: UpdateFunc, pname, hint) =>
382
+ hint: (update: UpdateFunc, pname: GL, hint: GL) =>
368
383
  update({
369
384
  [pname]: hint
370
385
  }),
371
386
 
372
387
  // SPECIFIC SETTERS
373
- useProgram: (update: UpdateFunc, value) => update({
374
- [GL.CURRENT_PROGRAM]: value,
375
- }),
376
- bindRenderbuffer: (update: UpdateFunc, target, value) => update({
377
- [GL.RENDERBUFFER_BINDING]: value
378
- }),
379
- bindTransformFeedback: (update: UpdateFunc, target, value) => update({
380
- [GL.TRANSFORM_FEEDBACK_BINDING]: value
381
- }),
382
- bindVertexArray: (update: UpdateFunc, value) => update({
383
- [GL.VERTEX_ARRAY_BINDING]: value
384
- }),
388
+ useProgram: (update: UpdateFunc, value) =>
389
+ update({
390
+ [GL.CURRENT_PROGRAM]: value
391
+ }),
392
+ bindRenderbuffer: (update: UpdateFunc, target, value) =>
393
+ update({
394
+ [GL.RENDERBUFFER_BINDING]: value
395
+ }),
396
+ bindTransformFeedback: (update: UpdateFunc, target, value) =>
397
+ update({
398
+ [GL.TRANSFORM_FEEDBACK_BINDING]: value
399
+ }),
400
+ bindVertexArray: (update: UpdateFunc, value) =>
401
+ update({
402
+ [GL.VERTEX_ARRAY_BINDING]: value
403
+ }),
385
404
 
386
405
  bindFramebuffer: (update: UpdateFunc, target, framebuffer) => {
387
406
  switch (target) {
@@ -399,13 +418,13 @@ export const GL_HOOKED_SETTERS = {
399
418
  }
400
419
  },
401
420
  bindBuffer: (update: UpdateFunc, target, buffer) => {
402
- const pname = ({
421
+ const pname = {
403
422
  [GL.ARRAY_BUFFER]: [GL.ARRAY_BUFFER_BINDING],
404
423
  [GL.COPY_READ_BUFFER]: [GL.COPY_READ_BUFFER_BINDING],
405
424
  [GL.COPY_WRITE_BUFFER]: [GL.COPY_WRITE_BUFFER_BINDING],
406
425
  [GL.PIXEL_PACK_BUFFER]: [GL.PIXEL_PACK_BUFFER_BINDING],
407
426
  [GL.PIXEL_UNPACK_BUFFER]: [GL.PIXEL_UNPACK_BUFFER_BINDING]
408
- })[target];
427
+ }[target];
409
428
 
410
429
  if (pname) {
411
430
  return update({[pname]: buffer});
@@ -567,7 +586,7 @@ export const GL_HOOKED_SETTERS = {
567
586
 
568
587
  // GETTER TABLE - FOR READING OUT AN ENTIRE CONTEXT
569
588
 
570
- const isEnabled = (gl, key) => gl.isEnabled(key);
589
+ const isEnabled = (gl: WebGLRenderingContext, key) => gl.isEnabled(key);
571
590
 
572
591
  // Exceptions for any keys that cannot be queried by gl.getParameters
573
592
  export const GL_PARAMETER_GETTERS = {
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Stores luma.gl specific state associated with a context
3
3
  */
4
- export interface ContextState {
4
+ export interface WebGLContextData {
5
5
  _polyfilled: boolean;
6
6
  _extensions: Record<string, any>;
7
7
  }
@@ -10,22 +10,18 @@ export interface ContextState {
10
10
  * Gets luma.gl specific state from a context
11
11
  * @returns context state
12
12
  */
13
- export function getContextState(gl: WebGLRenderingContext): ContextState {
13
+ export function getContextData(gl: WebGLRenderingContext): WebGLContextData {
14
14
  // @ts-expect-error
15
- const {device, luma} = gl;
16
- if (device) {
17
- return device as ContextState;
18
- }
15
+ const luma = gl.luma as WebGLContextData | null;
19
16
  if (!luma) {
20
- const contextState: ContextState = {
17
+ const contextState: WebGLContextData = {
21
18
  _polyfilled: false,
22
19
  _extensions: {}
23
20
  };
24
21
  // @ts-expect-error
25
22
  gl.luma = contextState;
26
23
  }
27
- throw new Error('context state without device');
28
24
 
29
- // // @ts-expect-error
30
- // return gl.luma;
25
+ // @ts-expect-error
26
+ return gl.luma;
31
27
  }
@@ -31,7 +31,7 @@ const WEBGL_PARAMETERS = {
31
31
  [GL.SAMPLES]: getWebGL2ValueOrZero,
32
32
 
33
33
  // WebGL2 extension context parameters
34
- [GL_GPU_DISJOINT_EXT]: (gl, getParameter) => {
34
+ [GL_GPU_DISJOINT_EXT]: (gl: WebGLRenderingContext, getParameter) => {
35
35
  const ext = isWebGL2(gl)
36
36
  ? gl.getExtension(EXT_disjoint_timer_query_webgl2)
37
37
  : gl.getExtension(EXT_disjoint_timer_query);
@@ -39,18 +39,19 @@ const WEBGL_PARAMETERS = {
39
39
  },
40
40
 
41
41
  // Extension fixed values
42
- [GL_UNMASKED_VENDOR_WEBGL]: (gl, getParameter) => {
42
+ [GL_UNMASKED_VENDOR_WEBGL]: (gl: WebGLRenderingContext, getParameter) => {
43
43
  const ext = gl.getExtension(WEBGL_debug_renderer_info);
44
44
  return getParameter((ext && ext.UNMASKED_VENDOR_WEBGL) || GL.VENDOR);
45
45
  },
46
46
 
47
- [GL_UNMASKED_RENDERER_WEBGL]: (gl, getParameter) => {
47
+ [GL_UNMASKED_RENDERER_WEBGL]: (gl: WebGLRenderingContext, getParameter) => {
48
48
  const ext = gl.getExtension(WEBGL_debug_renderer_info);
49
49
  return getParameter((ext && ext.UNMASKED_RENDERER_WEBGL) || GL.RENDERER);
50
50
  },
51
51
 
52
52
  // Extension LIMITS
53
- [GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT]: (gl, getParameter) => {
53
+ [GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT]: (gl: WebGLRenderingContext, getParameter) => {
54
+ // @ts-ignore TODO - store these on the device instance instead...
54
55
  const ext = gl.luma?.extensions?.[EXT_texture_filter_anisotropic] ||
55
56
  gl.getExtension('EXT_texture_filter_anisotropic');
56
57
  return ext ? getParameter(ext.MAX_TEXTURE_MAX_ANISOTROPY_EXT) : 1.0;
@@ -60,7 +61,7 @@ const WEBGL_PARAMETERS = {
60
61
  [GL.MAX_3D_TEXTURE_SIZE]: getWebGL2ValueOrZero,
61
62
  [GL.MAX_ARRAY_TEXTURE_LAYERS]: getWebGL2ValueOrZero,
62
63
  [GL.MAX_CLIENT_WAIT_TIMEOUT_WEBGL]: getWebGL2ValueOrZero,
63
- [GL.MAX_COLOR_ATTACHMENTS]: (gl, getParameter) => {
64
+ [GL.MAX_COLOR_ATTACHMENTS]: (gl: WebGLRenderingContext, getParameter) => {
64
65
  if (!isWebGL2(gl)) {
65
66
  const ext = gl.getExtension(WEBGL_draw_buffers);
66
67
  return ext ? getParameter(ext.MAX_COLOR_ATTACHMENTS_WEBGL) : 0;
@@ -108,7 +109,7 @@ const WEBGL_PARAMETERS = {
108
109
 
109
110
  // A "replacement" gl.getParameter that accepts "enums" from extensions and WebGL2
110
111
  // and returns reasonably safe defaults
111
- export function getParameterPolyfill(gl, originalGetParameter, pname) {
112
+ export function getParameterPolyfill(gl: WebGLRenderingContext, originalGetParameter, pname) {
112
113
  // Return mock limits (usually 0) for WebGL2 constants to ensure these
113
114
  // can be queries without error
114
115
  const limit = WEBGL_PARAMETERS[pname];
@@ -11,13 +11,13 @@ import {assert} from '@luma.gl/api';
11
11
  import {polyfillVertexArrayObject} from './polyfill-vertex-array-object';
12
12
 
13
13
  import {WEBGL2_CONTEXT_POLYFILLS, WEBGL2_CONTEXT_OVERRIDES} from './polyfill-table';
14
- import {getContextState} from '../context/context-state';
14
+ import {getContextData} from './context-data';
15
15
 
16
16
  /**
17
17
  * Registers extensions, polyfills or mock functions for extensions in the polyfills list
18
18
  */
19
19
  export function polyfillContext(gl: WebGLRenderingContext): WebGL2RenderingContext {
20
- const contextState = getContextState(gl);
20
+ const contextState = getContextData(gl);
21
21
 
22
22
  if (!contextState._polyfilled) {
23
23
  polyfillVertexArrayObject(gl);
@@ -32,7 +32,7 @@ export function polyfillContext(gl: WebGLRenderingContext): WebGL2RenderingConte
32
32
  }
33
33
 
34
34
  function initializeExtensions(gl: WebGLRenderingContext): void {
35
- const contextState = getContextState(gl);
35
+ const contextState = getContextData(gl);
36
36
  // `getSupportedExtensions` can return null when context is lost.
37
37
  const EXTENSIONS = gl.getSupportedExtensions() || [];
38
38
  for (const extensionName of EXTENSIONS) {
@@ -42,7 +42,7 @@ function initializeExtensions(gl: WebGLRenderingContext): void {
42
42
  }
43
43
 
44
44
  function installPolyfills(gl: WebGLRenderingContext, polyfills): void {
45
- const contextState = getContextState(gl);
45
+ const contextState = getContextData(gl);
46
46
  for (const extension of Object.getOwnPropertyNames(polyfills)) {
47
47
  if (extension !== 'overrides') {
48
48
  polyfillExtension(gl, {extension, target: contextState, target2: gl});
@@ -84,7 +84,7 @@ function polyfillExtension(gl: WebGLRenderingContext, {extension, target, target
84
84
  }
85
85
 
86
86
  /** Install simple overrides (mostly get* functions) */
87
- function installOverrides(gl, {target, target2}) {
87
+ function installOverrides(gl: WebGLRenderingContext, {target, target2}) {
88
88
  Object.keys(WEBGL2_CONTEXT_OVERRIDES).forEach((key) => {
89
89
  if (typeof WEBGL2_CONTEXT_OVERRIDES[key] === 'function') {
90
90
  // install an override, if no implementation was detected
@@ -3,7 +3,7 @@ import GL from '@luma.gl/constants';
3
3
  import {isWebGL2} from '../context/webgl-checks';
4
4
 
5
5
  import {getParameterPolyfill} from './get-parameter-polyfill';
6
- import {getContextState} from '../context/context-state';
6
+ import {getContextData} from './context-data';
7
7
 
8
8
  const OES_vertex_array_object = 'OES_vertex_array_object';
9
9
  const ANGLE_instanced_arrays = 'ANGLE_instanced_arrays';
@@ -14,14 +14,14 @@ const EXT_texture_filter_anisotropic = 'EXT_texture_filter_anisotropic';
14
14
  const ERR_VAO_NOT_SUPPORTED = 'VertexArray requires WebGL2 or OES_vertex_array_object extension';
15
15
 
16
16
  // Return object with webgl2 flag and an extension
17
- function getExtensionData(gl, extension) {
17
+ function getExtensionData(gl: WebGLRenderingContext, extension: string) {
18
18
  return {
19
19
  webgl2: isWebGL2(gl),
20
20
  ext: gl.getExtension(extension)
21
21
  };
22
22
  }
23
23
 
24
- // function mapExtensionConstant(gl, constant) {
24
+ // function mapExtensionConstant(gl: WebGLRenderingContext, constant) {
25
25
  // switch (constant) {
26
26
  // case ext.FRAGMENT_SHADER_DERIVATIVE_HINT_OES: return GL.FRAGMENT_SHADER_DERIVATIVE_HINT;
27
27
  // }
@@ -46,7 +46,7 @@ export const WEBGL2_CONTEXT_POLYFILLS = {
46
46
  // VERTEX_ATTRIB_ARRAY_DIVISOR: 'VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE'
47
47
  // }
48
48
  },
49
- vertexAttribDivisor(location, divisor) {
49
+ vertexAttribDivisor(location: number, divisor: number) {
50
50
  // Accept divisor 0 even if instancing is not supported (0 = no instancing)
51
51
  assert(divisor === 0, 'WebGL instanced rendering not supported');
52
52
  },
@@ -74,11 +74,11 @@ export const WEBGL2_CONTEXT_POLYFILLS = {
74
74
  assert(false);
75
75
  },
76
76
  endQuery: () => {},
77
- getQuery(handle, pname) {
77
+ getQuery(handle, pname: string) {
78
78
  return this.getQueryObject(handle, pname);
79
79
  },
80
80
  // The WebGL1 extension uses getQueryObject rather then getQueryParameter
81
- getQueryParameter(handle, pname) {
81
+ getQueryParameter(handle, pname: string) {
82
82
  return this.getQueryObject(handle, pname);
83
83
  },
84
84
  getQueryObject: (handle: unknown, pname: unknown) => {}
@@ -87,7 +87,7 @@ export const WEBGL2_CONTEXT_POLYFILLS = {
87
87
 
88
88
  export const WEBGL2_CONTEXT_OVERRIDES = {
89
89
  // Ensure readBuffer is a no-op
90
- readBuffer: (gl, originalFunc, attachment) => {
90
+ readBuffer: (gl: WebGLRenderingContext, originalFunc, attachment) => {
91
91
  if (isWebGL2(gl)) {
92
92
  originalFunc(attachment);
93
93
  } else {
@@ -95,7 +95,7 @@ export const WEBGL2_CONTEXT_OVERRIDES = {
95
95
  }
96
96
  },
97
97
  // Override for getVertexAttrib that returns sane values for non-WebGL1 constants
98
- getVertexAttrib: (gl, originalFunc, location, pname) => {
98
+ getVertexAttrib: (gl: WebGLRenderingContext, originalFunc, location, pname) => {
99
99
  // const gl = this; // eslint-disable-line
100
100
  const {webgl2, ext} = getExtensionData(gl, ANGLE_instanced_arrays);
101
101
 
@@ -115,7 +115,7 @@ export const WEBGL2_CONTEXT_OVERRIDES = {
115
115
  return result !== undefined ? result : originalFunc(location, pname);
116
116
  },
117
117
  // Handle transform feedback and uniform block queries in WebGL1
118
- getProgramParameter: (gl, originalFunc, program, pname) => {
118
+ getProgramParameter: (gl: WebGLRenderingContext, originalFunc, program, pname) => {
119
119
  if (!isWebGL2(gl)) {
120
120
  switch (pname) {
121
121
  case GL.TRANSFORM_FEEDBACK_BUFFER_MODE:
@@ -129,7 +129,7 @@ export const WEBGL2_CONTEXT_OVERRIDES = {
129
129
  }
130
130
  return originalFunc(program, pname);
131
131
  },
132
- getInternalformatParameter: (gl, originalFunc, target, format, pname) => {
132
+ getInternalformatParameter: (gl: WebGLRenderingContext, originalFunc, target, format, pname) => {
133
133
  if (!isWebGL2(gl)) {
134
134
  switch (pname) {
135
135
  case GL.SAMPLES:
@@ -137,13 +137,14 @@ export const WEBGL2_CONTEXT_OVERRIDES = {
137
137
  default:
138
138
  }
139
139
  }
140
- return gl.getInternalformatParameter(target, format, pname);
140
+ const gl2 = gl as WebGL2RenderingContext;
141
+ return gl2.getInternalformatParameter(target, format, pname);
141
142
  },
142
143
  getTexParameter(gl, originalFunc, target, pname) {
143
144
  switch (pname) {
144
145
  case GL.TEXTURE_MAX_ANISOTROPY_EXT:
145
- const contextState = getContextState(gl);
146
- const {_extensions} = contextState;
146
+ const contextData = getContextData(gl);
147
+ const {_extensions} = contextData;
147
148
  const ext = _extensions[EXT_texture_filter_anisotropic];
148
149
  pname = (ext && ext.TEXTURE_MAX_ANISOTROPY_EXT) || GL.TEXTURE_MAX_ANISOTROPY_EXT;
149
150
  break;
@@ -108,7 +108,6 @@ function getContextState(gl: WebGLRenderingContext): GLState {
108
108
  assert(copyState !== undefined);
109
109
  // @ts-expect-error
110
110
  if (!gl.state) {
111
- const global_ = typeof global !== 'undefined' ? global : window;
112
111
  // @ts-ignore
113
112
  // const {polyfillContext} = global_;
114
113
  // if (polyfillContext) {
@@ -1,5 +1,5 @@
1
1
  import type {Device} from '@luma.gl/api';
2
- import {WebGLDevice} from '../..';
2
+ import {default as WebGLDevice} from '../../adapter/webgl-device';
3
3
  import {GLParameters, setParameters} from '../parameters/unified-parameter-api';
4
4
  import {pushContextState, popContextState} from './track-context-state';
5
5
 
@@ -48,6 +48,7 @@ import {pushContextState, popContextState} from './track-context-state';
48
48
 
49
49
  // Returns true if given object is empty, false otherwise.
50
50
  function isObjectEmpty(object) {
51
+ // @ts-ignore - dummy key variable
51
52
  for (const key in object) {
52
53
  return false;
53
54
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"context-state.d.ts","sourceRoot":"","sources":["../../../src/context/context/context-state.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAClC;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,qBAAqB,GAAG,YAAY,CAkBvE"}