@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
@@ -3,7 +3,6 @@
3
3
 
4
4
  // Tables describing WebGL parameters
5
5
  import {GL, GLParameters} from '@luma.gl/constants';
6
- import {isWebGL2} from '../context/webgl-checks';
7
6
 
8
7
  // DEFAULT SETTINGS - FOR FAST CACHE INITIALIZATION AND CONTEXT RESETS
9
8
 
@@ -94,24 +93,18 @@ export const GL_PARAMETER_DEFAULTS: GLParameters = {
94
93
 
95
94
  // SETTER TABLES - ENABLES SETTING ANY PARAMETER WITH A COMMON API
96
95
 
97
- const enable = (gl: WebGLRenderingContext, value: unknown, key: GL) =>
96
+ const enable = (gl: WebGL2RenderingContext, value: unknown, key: GL) =>
98
97
  value ? gl.enable(key) : gl.disable(key);
99
- const hint = (gl: WebGLRenderingContext, value: GL, key: GL) => gl.hint(key, value);
100
- const pixelStorei = (gl: WebGLRenderingContext, value: number | boolean, key: GL) =>
98
+ const hint = (gl: WebGL2RenderingContext, value: GL, key: GL) => gl.hint(key, value);
99
+ const pixelStorei = (gl: WebGL2RenderingContext, value: number | boolean, key: GL) =>
101
100
  gl.pixelStorei(key, value);
102
101
 
103
- const bindFramebuffer = (gl: WebGLRenderingContext, value: unknown, key: GL) => {
104
- let target;
105
- if (key === GL.FRAMEBUFFER_BINDING) {
106
- target = isWebGL2(gl) ? GL.DRAW_FRAMEBUFFER : GL.FRAMEBUFFER;
107
- } else {
108
- // GL.READ_FRAMEBUFFER_BINDING
109
- target = GL.READ_FRAMEBUFFER;
110
- }
102
+ const bindFramebuffer = (gl: WebGL2RenderingContext, value: unknown, key: GL) => {
103
+ const target = (key === GL.FRAMEBUFFER_BINDING) ? GL.DRAW_FRAMEBUFFER : GL.READ_FRAMEBUFFER;
111
104
  return gl.bindFramebuffer(target, value);
112
105
  };
113
106
 
114
- const bindBuffer = (gl: WebGLRenderingContext, value: unknown, key: GL) => {
107
+ const bindBuffer = (gl: WebGL2RenderingContext, value: unknown, key: GL) => {
115
108
  const bindingMap: Partial<Record<GL, GL>> = {
116
109
  [GL.ARRAY_BUFFER_BINDING]: GL.ARRAY_BUFFER,
117
110
  [GL.COPY_READ_BUFFER_BINDING]: GL.COPY_READ_BUFFER,
@@ -134,7 +127,7 @@ function isArray(array: unknown): boolean {
134
127
  // NOTE: When value type is a string, it will be handled by 'GL_COMPOSITE_PARAMETER_SETTERS'
135
128
  export const GL_PARAMETER_SETTERS = {
136
129
  [GL.BLEND]: enable,
137
- [GL.BLEND_COLOR]: (gl: WebGLRenderingContext, value: [number, number, number, number]) =>
130
+ [GL.BLEND_COLOR]: (gl: WebGL2RenderingContext, value: [number, number, number, number]) =>
138
131
  gl.blendColor(...value),
139
132
  [GL.BLEND_EQUATION_RGB]: 'blendEquation',
140
133
  [GL.BLEND_EQUATION_ALPHA]: 'blendEquation',
@@ -142,26 +135,26 @@ export const GL_PARAMETER_SETTERS = {
142
135
  [GL.BLEND_DST_RGB]: 'blendFunc',
143
136
  [GL.BLEND_SRC_ALPHA]: 'blendFunc',
144
137
  [GL.BLEND_DST_ALPHA]: 'blendFunc',
145
- [GL.COLOR_CLEAR_VALUE]: (gl: WebGLRenderingContext, value: [number, number, number, number]) =>
138
+ [GL.COLOR_CLEAR_VALUE]: (gl: WebGL2RenderingContext, value: [number, number, number, number]) =>
146
139
  gl.clearColor(...value),
147
- [GL.COLOR_WRITEMASK]: (gl: WebGLRenderingContext, value: [boolean, boolean, boolean, boolean]) => gl.colorMask(...value),
140
+ [GL.COLOR_WRITEMASK]: (gl: WebGL2RenderingContext, value: [boolean, boolean, boolean, boolean]) => gl.colorMask(...value),
148
141
  [GL.CULL_FACE]: enable,
149
- [GL.CULL_FACE_MODE]: (gl: WebGLRenderingContext, value) => gl.cullFace(value),
142
+ [GL.CULL_FACE_MODE]: (gl: WebGL2RenderingContext, value) => gl.cullFace(value),
150
143
  [GL.DEPTH_TEST]: enable,
151
- [GL.DEPTH_CLEAR_VALUE]: (gl: WebGLRenderingContext, value) => gl.clearDepth(value),
152
- [GL.DEPTH_FUNC]: (gl: WebGLRenderingContext, value) => gl.depthFunc(value),
153
- [GL.DEPTH_RANGE]: (gl: WebGLRenderingContext, value: [number, number]) => gl.depthRange(...value),
154
- [GL.DEPTH_WRITEMASK]: (gl: WebGLRenderingContext, value) => gl.depthMask(value),
144
+ [GL.DEPTH_CLEAR_VALUE]: (gl: WebGL2RenderingContext, value) => gl.clearDepth(value),
145
+ [GL.DEPTH_FUNC]: (gl: WebGL2RenderingContext, value) => gl.depthFunc(value),
146
+ [GL.DEPTH_RANGE]: (gl: WebGL2RenderingContext, value: [number, number]) => gl.depthRange(...value),
147
+ [GL.DEPTH_WRITEMASK]: (gl: WebGL2RenderingContext, value) => gl.depthMask(value),
155
148
  [GL.DITHER]: enable,
156
149
  [GL.FRAGMENT_SHADER_DERIVATIVE_HINT]: hint,
157
150
 
158
- [GL.CURRENT_PROGRAM]: (gl: WebGLRenderingContext, value) => gl.useProgram(value),
159
- [GL.RENDERBUFFER_BINDING]: (gl: WebGLRenderingContext, value) =>
151
+ [GL.CURRENT_PROGRAM]: (gl: WebGL2RenderingContext, value) => gl.useProgram(value),
152
+ [GL.RENDERBUFFER_BINDING]: (gl: WebGL2RenderingContext, value) =>
160
153
  gl.bindRenderbuffer(GL.RENDERBUFFER, value),
161
- [GL.TRANSFORM_FEEDBACK_BINDING]: (gl: WebGLRenderingContext, value) =>
162
- (gl as WebGL2RenderingContext).bindTransformFeedback?.(GL.TRANSFORM_FEEDBACK, value),
163
- [GL.VERTEX_ARRAY_BINDING]: (gl: WebGLRenderingContext, value) =>
164
- (gl as WebGL2RenderingContext).bindVertexArray(value),
154
+ [GL.TRANSFORM_FEEDBACK_BINDING]: (gl: WebGL2RenderingContext, value) =>
155
+ (gl ).bindTransformFeedback?.(GL.TRANSFORM_FEEDBACK, value),
156
+ [GL.VERTEX_ARRAY_BINDING]: (gl: WebGL2RenderingContext, value) =>
157
+ (gl ).bindVertexArray(value),
165
158
  // NOTE: FRAMEBUFFER_BINDING and DRAW_FRAMEBUFFER_BINDING(WebGL2) refer same state.
166
159
  [GL.FRAMEBUFFER_BINDING]: bindFramebuffer,
167
160
  [GL.READ_FRAMEBUFFER_BINDING]: bindFramebuffer,
@@ -173,9 +166,9 @@ export const GL_PARAMETER_SETTERS = {
173
166
  [GL.PIXEL_PACK_BUFFER_BINDING]: bindBuffer,
174
167
  [GL.PIXEL_UNPACK_BUFFER_BINDING]: bindBuffer,
175
168
 
176
- [GL.FRONT_FACE]: (gl: WebGLRenderingContext, value) => gl.frontFace(value),
169
+ [GL.FRONT_FACE]: (gl: WebGL2RenderingContext, value) => gl.frontFace(value),
177
170
  [GL.GENERATE_MIPMAP_HINT]: hint,
178
- [GL.LINE_WIDTH]: (gl: WebGLRenderingContext, value) => gl.lineWidth(value),
171
+ [GL.LINE_WIDTH]: (gl: WebGL2RenderingContext, value) => gl.lineWidth(value),
179
172
  [GL.POLYGON_OFFSET_FILL]: enable,
180
173
  [GL.POLYGON_OFFSET_FACTOR]: 'polygonOffset',
181
174
  [GL.POLYGON_OFFSET_UNITS]: 'polygonOffset',
@@ -185,12 +178,12 @@ export const GL_PARAMETER_SETTERS = {
185
178
  [GL.SAMPLE_COVERAGE_VALUE]: 'sampleCoverage',
186
179
  [GL.SAMPLE_COVERAGE_INVERT]: 'sampleCoverage',
187
180
  [GL.SCISSOR_TEST]: enable,
188
- [GL.SCISSOR_BOX]: (gl: WebGLRenderingContext, value: [number, number, number, number]) => gl.scissor(...value),
181
+ [GL.SCISSOR_BOX]: (gl: WebGL2RenderingContext, value: [number, number, number, number]) => gl.scissor(...value),
189
182
  [GL.STENCIL_TEST]: enable,
190
- [GL.STENCIL_CLEAR_VALUE]: (gl: WebGLRenderingContext, value) => gl.clearStencil(value),
191
- [GL.STENCIL_WRITEMASK]: (gl: WebGLRenderingContext, value) =>
183
+ [GL.STENCIL_CLEAR_VALUE]: (gl: WebGL2RenderingContext, value) => gl.clearStencil(value),
184
+ [GL.STENCIL_WRITEMASK]: (gl: WebGL2RenderingContext, value) =>
192
185
  gl.stencilMaskSeparate(GL.FRONT, value),
193
- [GL.STENCIL_BACK_WRITEMASK]: (gl: WebGLRenderingContext, value) =>
186
+ [GL.STENCIL_BACK_WRITEMASK]: (gl: WebGL2RenderingContext, value) =>
194
187
  gl.stencilMaskSeparate(GL.BACK, value),
195
188
  [GL.STENCIL_FUNC]: 'stencilFuncFront',
196
189
  [GL.STENCIL_REF]: 'stencilFuncFront',
@@ -204,7 +197,7 @@ export const GL_PARAMETER_SETTERS = {
204
197
  [GL.STENCIL_BACK_FAIL]: 'stencilOpBack',
205
198
  [GL.STENCIL_BACK_PASS_DEPTH_FAIL]: 'stencilOpBack',
206
199
  [GL.STENCIL_BACK_PASS_DEPTH_PASS]: 'stencilOpBack',
207
- [GL.VIEWPORT]: (gl: WebGLRenderingContext, value: [number, number, number, number]) => gl.viewport(...value),
200
+ [GL.VIEWPORT]: (gl: WebGL2RenderingContext, value: [number, number, number, number]) => gl.viewport(...value),
208
201
 
209
202
  // WEBGL1 PIXEL PACK/UNPACK MODES
210
203
  [GL.PACK_ALIGNMENT]: pixelStorei,
@@ -225,85 +218,85 @@ export const GL_PARAMETER_SETTERS = {
225
218
  [GL.UNPACK_SKIP_IMAGES]: pixelStorei,
226
219
 
227
220
  // Function-style setters
228
- framebuffer: (gl: WebGLRenderingContext, framebuffer) => {
221
+ framebuffer: (gl: WebGL2RenderingContext, framebuffer) => {
229
222
  // accepts 1) a WebGLFramebuffer 2) null (default framebuffer), or 3) luma.gl Framebuffer class
230
223
  // framebuffer is null when restoring to default framebuffer, otherwise use the WebGL handle.
231
224
  const handle = framebuffer && 'handle' in framebuffer ? framebuffer.handle : framebuffer;
232
225
  return gl.bindFramebuffer(GL.FRAMEBUFFER, handle);
233
226
  },
234
- blend: (gl: WebGLRenderingContext, value) => (value ? gl.enable(GL.BLEND) : gl.disable(GL.BLEND)),
235
- blendColor: (gl: WebGLRenderingContext, value: [number, number, number, number]) => gl.blendColor(...value),
236
- blendEquation: (gl: WebGLRenderingContext, args: number | [number, number]) => {
227
+ blend: (gl: WebGL2RenderingContext, value) => (value ? gl.enable(GL.BLEND) : gl.disable(GL.BLEND)),
228
+ blendColor: (gl: WebGL2RenderingContext, value: [number, number, number, number]) => gl.blendColor(...value),
229
+ blendEquation: (gl: WebGL2RenderingContext, args: number | [number, number]) => {
237
230
  const separateModes = typeof args === 'number' ? [args, args] as [number, number]: args;
238
231
  gl.blendEquationSeparate(...separateModes);
239
232
  },
240
- blendFunc: (gl: WebGLRenderingContext, args: [number, number] | [number, number, number, number]) => {
233
+ blendFunc: (gl: WebGL2RenderingContext, args: [number, number] | [number, number, number, number]) => {
241
234
  const separateFuncs = args?.length === 2 ? [...args, ...args] as [number, number, number, number] : args;
242
235
  gl.blendFuncSeparate(...separateFuncs);
243
236
  },
244
237
 
245
- clearColor: (gl: WebGLRenderingContext, value: [number, number, number, number]) => gl.clearColor(...value),
246
- clearDepth: (gl: WebGLRenderingContext, value) => gl.clearDepth(value),
247
- clearStencil: (gl: WebGLRenderingContext, value) => gl.clearStencil(value),
238
+ clearColor: (gl: WebGL2RenderingContext, value: [number, number, number, number]) => gl.clearColor(...value),
239
+ clearDepth: (gl: WebGL2RenderingContext, value) => gl.clearDepth(value),
240
+ clearStencil: (gl: WebGL2RenderingContext, value) => gl.clearStencil(value),
248
241
 
249
- colorMask: (gl: WebGLRenderingContext, value: [boolean, boolean, boolean, boolean]) => gl.colorMask(...value),
242
+ colorMask: (gl: WebGL2RenderingContext, value: [boolean, boolean, boolean, boolean]) => gl.colorMask(...value),
250
243
 
251
- cull: (gl: WebGLRenderingContext, value) =>
244
+ cull: (gl: WebGL2RenderingContext, value) =>
252
245
  value ? gl.enable(GL.CULL_FACE) : gl.disable(GL.CULL_FACE),
253
- cullFace: (gl: WebGLRenderingContext, value) => gl.cullFace(value),
246
+ cullFace: (gl: WebGL2RenderingContext, value) => gl.cullFace(value),
254
247
 
255
- depthTest: (gl: WebGLRenderingContext, value) =>
248
+ depthTest: (gl: WebGL2RenderingContext, value) =>
256
249
  value ? gl.enable(GL.DEPTH_TEST) : gl.disable(GL.DEPTH_TEST),
257
- depthFunc: (gl: WebGLRenderingContext, value) => gl.depthFunc(value),
258
- depthMask: (gl: WebGLRenderingContext, value) => gl.depthMask(value),
259
- depthRange: (gl: WebGLRenderingContext, value: [number, number]) => gl.depthRange(...value),
250
+ depthFunc: (gl: WebGL2RenderingContext, value) => gl.depthFunc(value),
251
+ depthMask: (gl: WebGL2RenderingContext, value) => gl.depthMask(value),
252
+ depthRange: (gl: WebGL2RenderingContext, value: [number, number]) => gl.depthRange(...value),
260
253
 
261
- dither: (gl: WebGLRenderingContext, value) =>
254
+ dither: (gl: WebGL2RenderingContext, value) =>
262
255
  value ? gl.enable(GL.DITHER) : gl.disable(GL.DITHER),
263
256
 
264
- derivativeHint: (gl: WebGLRenderingContext, value) => {
257
+ derivativeHint: (gl: WebGL2RenderingContext, value) => {
265
258
  // gl1: 'OES_standard_derivatives'
266
259
  gl.hint(GL.FRAGMENT_SHADER_DERIVATIVE_HINT, value);
267
260
  },
268
261
 
269
- frontFace: (gl: WebGLRenderingContext, value) => gl.frontFace(value),
262
+ frontFace: (gl: WebGL2RenderingContext, value) => gl.frontFace(value),
270
263
 
271
- mipmapHint: (gl: WebGLRenderingContext, value) => gl.hint(GL.GENERATE_MIPMAP_HINT, value),
264
+ mipmapHint: (gl: WebGL2RenderingContext, value) => gl.hint(GL.GENERATE_MIPMAP_HINT, value),
272
265
 
273
- lineWidth: (gl: WebGLRenderingContext, value) => gl.lineWidth(value),
266
+ lineWidth: (gl: WebGL2RenderingContext, value) => gl.lineWidth(value),
274
267
 
275
- polygonOffsetFill: (gl: WebGLRenderingContext, value) =>
268
+ polygonOffsetFill: (gl: WebGL2RenderingContext, value) =>
276
269
  value ? gl.enable(GL.POLYGON_OFFSET_FILL) : gl.disable(GL.POLYGON_OFFSET_FILL),
277
- polygonOffset: (gl: WebGLRenderingContext, value: [number, number]) => gl.polygonOffset(...value),
270
+ polygonOffset: (gl: WebGL2RenderingContext, value: [number, number]) => gl.polygonOffset(...value),
278
271
 
279
- sampleCoverage: (gl: WebGLRenderingContext, value: [number, boolean?]) => gl.sampleCoverage(...value),
272
+ sampleCoverage: (gl: WebGL2RenderingContext, value: [number, boolean?]) => gl.sampleCoverage(...value),
280
273
 
281
- scissorTest: (gl: WebGLRenderingContext, value) =>
274
+ scissorTest: (gl: WebGL2RenderingContext, value) =>
282
275
  value ? gl.enable(GL.SCISSOR_TEST) : gl.disable(GL.SCISSOR_TEST),
283
- scissor: (gl: WebGLRenderingContext, value: [number, number, number, number]) => gl.scissor(...value),
276
+ scissor: (gl: WebGL2RenderingContext, value: [number, number, number, number]) => gl.scissor(...value),
284
277
 
285
- stencilTest: (gl: WebGLRenderingContext, value) =>
278
+ stencilTest: (gl: WebGL2RenderingContext, value) =>
286
279
  value ? gl.enable(GL.STENCIL_TEST) : gl.disable(GL.STENCIL_TEST),
287
- stencilMask: (gl: WebGLRenderingContext, value) => {
280
+ stencilMask: (gl: WebGL2RenderingContext, value) => {
288
281
  value = isArray(value) ? value : [value, value];
289
282
  const [mask, backMask] = value;
290
283
  gl.stencilMaskSeparate(GL.FRONT, mask);
291
284
  gl.stencilMaskSeparate(GL.BACK, backMask);
292
285
  },
293
- stencilFunc: (gl: WebGLRenderingContext, args) => {
286
+ stencilFunc: (gl: WebGL2RenderingContext, args) => {
294
287
  args = isArray(args) && args.length === 3 ? [...args, ...args] : args;
295
288
  const [func, ref, mask, backFunc, backRef, backMask] = args;
296
289
  gl.stencilFuncSeparate(GL.FRONT, func, ref, mask);
297
290
  gl.stencilFuncSeparate(GL.BACK, backFunc, backRef, backMask);
298
291
  },
299
- stencilOp: (gl: WebGLRenderingContext, args) => {
292
+ stencilOp: (gl: WebGL2RenderingContext, args) => {
300
293
  args = isArray(args) && args.length === 3 ? [...args, ...args] : args;
301
294
  const [sfail, dpfail, dppass, backSfail, backDpfail, backDppass] = args;
302
295
  gl.stencilOpSeparate(GL.FRONT, sfail, dpfail, dppass);
303
296
  gl.stencilOpSeparate(GL.BACK, backSfail, backDpfail, backDppass);
304
297
  },
305
298
 
306
- viewport: (gl: WebGLRenderingContext, value: [number, number, number, number]) => gl.viewport(...value)
299
+ viewport: (gl: WebGL2RenderingContext, value: [number, number, number, number]) => gl.viewport(...value)
307
300
  };
308
301
 
309
302
  function getValue(glEnum, values, cache) {
@@ -312,50 +305,50 @@ function getValue(glEnum, values, cache) {
312
305
 
313
306
  // COMPOSITE_WEBGL_PARAMETER_
314
307
  export const GL_COMPOSITE_PARAMETER_SETTERS = {
315
- blendEquation: (gl: WebGLRenderingContext, values, cache) =>
308
+ blendEquation: (gl: WebGL2RenderingContext, values, cache) =>
316
309
  gl.blendEquationSeparate(
317
310
  getValue(GL.BLEND_EQUATION_RGB, values, cache),
318
311
  getValue(GL.BLEND_EQUATION_ALPHA, values, cache)
319
312
  ),
320
- blendFunc: (gl: WebGLRenderingContext, values, cache) =>
313
+ blendFunc: (gl: WebGL2RenderingContext, values, cache) =>
321
314
  gl.blendFuncSeparate(
322
315
  getValue(GL.BLEND_SRC_RGB, values, cache),
323
316
  getValue(GL.BLEND_DST_RGB, values, cache),
324
317
  getValue(GL.BLEND_SRC_ALPHA, values, cache),
325
318
  getValue(GL.BLEND_DST_ALPHA, values, cache)
326
319
  ),
327
- polygonOffset: (gl: WebGLRenderingContext, values, cache) =>
320
+ polygonOffset: (gl: WebGL2RenderingContext, values, cache) =>
328
321
  gl.polygonOffset(
329
322
  getValue(GL.POLYGON_OFFSET_FACTOR, values, cache),
330
323
  getValue(GL.POLYGON_OFFSET_UNITS, values, cache)
331
324
  ),
332
- sampleCoverage: (gl: WebGLRenderingContext, values, cache) =>
325
+ sampleCoverage: (gl: WebGL2RenderingContext, values, cache) =>
333
326
  gl.sampleCoverage(
334
327
  getValue(GL.SAMPLE_COVERAGE_VALUE, values, cache),
335
328
  getValue(GL.SAMPLE_COVERAGE_INVERT, values, cache)
336
329
  ),
337
- stencilFuncFront: (gl: WebGLRenderingContext, values, cache) =>
330
+ stencilFuncFront: (gl: WebGL2RenderingContext, values, cache) =>
338
331
  gl.stencilFuncSeparate(
339
332
  GL.FRONT,
340
333
  getValue(GL.STENCIL_FUNC, values, cache),
341
334
  getValue(GL.STENCIL_REF, values, cache),
342
335
  getValue(GL.STENCIL_VALUE_MASK, values, cache)
343
336
  ),
344
- stencilFuncBack: (gl: WebGLRenderingContext, values, cache) =>
337
+ stencilFuncBack: (gl: WebGL2RenderingContext, values, cache) =>
345
338
  gl.stencilFuncSeparate(
346
339
  GL.BACK,
347
340
  getValue(GL.STENCIL_BACK_FUNC, values, cache),
348
341
  getValue(GL.STENCIL_BACK_REF, values, cache),
349
342
  getValue(GL.STENCIL_BACK_VALUE_MASK, values, cache)
350
343
  ),
351
- stencilOpFront: (gl: WebGLRenderingContext, values, cache) =>
344
+ stencilOpFront: (gl: WebGL2RenderingContext, values, cache) =>
352
345
  gl.stencilOpSeparate(
353
346
  GL.FRONT,
354
347
  getValue(GL.STENCIL_FAIL, values, cache),
355
348
  getValue(GL.STENCIL_PASS_DEPTH_FAIL, values, cache),
356
349
  getValue(GL.STENCIL_PASS_DEPTH_PASS, values, cache)
357
350
  ),
358
- stencilOpBack: (gl: WebGLRenderingContext, values, cache) =>
351
+ stencilOpBack: (gl: WebGL2RenderingContext, values, cache) =>
359
352
  gl.stencilOpSeparate(
360
353
  GL.BACK,
361
354
  getValue(GL.STENCIL_BACK_FAIL, values, cache),
@@ -589,7 +582,7 @@ export const GL_HOOKED_SETTERS = {
589
582
 
590
583
  // GETTER TABLE - FOR READING OUT AN ENTIRE CONTEXT
591
584
 
592
- const isEnabled = (gl: WebGLRenderingContext, key) => gl.isEnabled(key);
585
+ const isEnabled = (gl: WebGL2RenderingContext, key) => gl.isEnabled(key);
593
586
 
594
587
  // Exceptions for any keys that cannot be queried by gl.getParameters
595
588
  export const GL_PARAMETER_GETTERS = {
@@ -602,8 +595,6 @@ export const GL_PARAMETER_GETTERS = {
602
595
  [GL.SAMPLE_COVERAGE]: isEnabled,
603
596
  [GL.SCISSOR_TEST]: isEnabled,
604
597
  [GL.STENCIL_TEST]: isEnabled,
605
-
606
- // WebGL 2
607
598
  [GL.RASTERIZER_DISCARD]: isEnabled
608
599
  };
609
600
 
@@ -12,7 +12,7 @@ import {deepArrayEqual} from './deep-array-equal';
12
12
 
13
13
  /* eslint-disable no-shadow */
14
14
  class GLState {
15
- gl: WebGLRenderingContext;
15
+ gl: WebGL2RenderingContext;
16
16
  program: unknown = null;
17
17
  stateStack: object[] = [];
18
18
  enable = true;
@@ -20,7 +20,7 @@ class GLState {
20
20
  log;
21
21
 
22
22
  constructor(
23
- gl: WebGLRenderingContext,
23
+ gl: WebGL2RenderingContext,
24
24
  {
25
25
  copyState = false, // Copy cache from params (slow) or initialize from WebGL defaults (fast)
26
26
  log = () => {} // Logging function, called when gl parameter change calls are actually issued
@@ -84,7 +84,7 @@ class GLState {
84
84
  }
85
85
  }
86
86
 
87
- function getContextState(gl: WebGLRenderingContext): GLState {
87
+ function getContextState(gl: WebGL2RenderingContext): GLState {
88
88
  // @ts-expect-error
89
89
  return gl.state as GLState;
90
90
  }
@@ -100,13 +100,13 @@ function getContextState(gl: WebGLRenderingContext): GLState {
100
100
  * temporarily modifying, and then restoring state.
101
101
  */
102
102
  export function trackContextState(
103
- gl: WebGLRenderingContext,
103
+ gl: WebGL2RenderingContext,
104
104
  options?: {
105
105
  enable?: boolean;
106
106
  copyState?: boolean;
107
107
  log?: any;
108
108
  }
109
- ): WebGLRenderingContext {
109
+ ): WebGL2RenderingContext {
110
110
  const {enable = true, copyState} = options;
111
111
  assert(copyState !== undefined);
112
112
  // @ts-expect-error
@@ -143,7 +143,7 @@ export function trackContextState(
143
143
  /**
144
144
  * Saves current WebGL context state onto an internal per-context stack
145
145
  */
146
- export function pushContextState(gl: WebGLRenderingContext): void {
146
+ export function pushContextState(gl: WebGL2RenderingContext): void {
147
147
  let glState = getContextState(gl);
148
148
  if (!glState) {
149
149
  trackContextState(gl, {copyState: false});
@@ -156,7 +156,7 @@ export function pushContextState(gl: WebGLRenderingContext): void {
156
156
  /**
157
157
  * Restores previously saved WebGL context state
158
158
  */
159
- export function popContextState(gl: WebGLRenderingContext): void {
159
+ export function popContextState(gl: WebGL2RenderingContext): void {
160
160
  const glState = getContextState(gl);
161
161
  assert(glState);
162
162
  glState.pop();
@@ -165,13 +165,13 @@ export function popContextState(gl: WebGLRenderingContext): void {
165
165
  // HELPER FUNCTIONS - INSTALL GET/SET INTERCEPTORS (SPYS) ON THE CONTEXT
166
166
 
167
167
  /**
168
- // Overrides a WebGLRenderingContext state "getter" function
168
+ // Overrides a WebGL2RenderingContext state "getter" function
169
169
  // to return values directly from cache
170
170
  * @param gl
171
171
  * @param functionName
172
172
  */
173
- function installGetterOverride(gl: WebGLRenderingContext, functionName: string) {
174
- // Get the original function from the WebGLRenderingContext
173
+ function installGetterOverride(gl: WebGL2RenderingContext, functionName: string) {
174
+ // Get the original function from the WebGL2RenderingContext
175
175
  const originalGetterFunc = gl[functionName].bind(gl);
176
176
 
177
177
  // Wrap it with a spy so that we can update our state cache when it gets called
@@ -187,11 +187,11 @@ function installGetterOverride(gl: WebGLRenderingContext, functionName: string)
187
187
  glState.cache[pname] = originalGetterFunc(pname);
188
188
  }
189
189
 
190
- // Optionally call the original function to do a "hard" query from the WebGLRenderingContext
190
+ // Optionally call the original function to do a "hard" query from the WebGL2RenderingContext
191
191
  return glState.enable
192
192
  ? // Call the getter the params so that it can e.g. serve from a cache
193
193
  glState.cache[pname]
194
- : // Optionally call the original function to do a "hard" query from the WebGLRenderingContext
194
+ : // Optionally call the original function to do a "hard" query from the WebGL2RenderingContext
195
195
  originalGetterFunc(pname);
196
196
  };
197
197
 
@@ -203,7 +203,7 @@ function installGetterOverride(gl: WebGLRenderingContext, functionName: string)
203
203
  }
204
204
 
205
205
  /**
206
- // Overrides a WebGLRenderingContext state "setter" function
206
+ // Overrides a WebGL2RenderingContext state "setter" function
207
207
  // to call a setter spy before the actual setter. Allows us to keep a cache
208
208
  // updated with a copy of the WebGL context state.
209
209
  * @param gl
@@ -211,9 +211,10 @@ function installGetterOverride(gl: WebGLRenderingContext, functionName: string)
211
211
  * @param setter
212
212
  * @returns
213
213
  */
214
- function installSetterSpy(gl: WebGLRenderingContext, functionName: string, setter: Function) {
215
- // Get the original function from the WebGLRenderingContext
214
+ function installSetterSpy(gl: WebGL2RenderingContext, functionName: string, setter: Function) {
215
+ // Get the original function from the WebGL2RenderingContext
216
216
  if (!gl[functionName]) {
217
+ // TODO - remove?
217
218
  // This could happen if we try to intercept WebGL2 method on a WebGL1 context
218
219
  return;
219
220
  }
@@ -228,7 +229,7 @@ function installSetterSpy(gl: WebGLRenderingContext, functionName: string, sette
228
229
  // eslint-disable-next-line @typescript-eslint/unbound-method
229
230
  const {valueChanged, oldValue} = setter(glState._updateCache, ...params);
230
231
 
231
- // Call the original WebGLRenderingContext func to make sure the context actually gets updated
232
+ // Call the original WebGL2RenderingContext func to make sure the context actually gets updated
232
233
  if (valueChanged) {
233
234
  originalSetterFunc(...params);
234
235
  }
@@ -248,7 +249,7 @@ function installSetterSpy(gl: WebGLRenderingContext, functionName: string, sette
248
249
  });
249
250
  }
250
251
 
251
- function installProgramSpy(gl: WebGLRenderingContext): void {
252
+ function installProgramSpy(gl: WebGL2RenderingContext): void {
252
253
  const originalUseProgram = gl.useProgram.bind(gl);
253
254
 
254
255
  gl.useProgram = function useProgramLuma(handle) {
@@ -14,7 +14,7 @@ import {pushContextState, popContextState} from './track-context-state';
14
14
  * - Restores parameters
15
15
  * - Returns the return value of the supplied function
16
16
  */
17
- export function withGLParameters(device: Device | WebGLRenderingContext, parameters: GLParameters & {nocatch?: boolean}, func: any): any {
17
+ export function withGLParameters(device: Device | WebGL2RenderingContext, parameters: GLParameters & {nocatch?: boolean}, func: any): any {
18
18
  const webglDevice = WebGLDevice.attach(device);
19
19
  const gl = webglDevice.gl;
20
20
 
package/src/index.ts CHANGED
@@ -8,9 +8,7 @@
8
8
  // Higher level abstractions can be built on these classes
9
9
 
10
10
  // Types
11
- export type {WebGLLimits} from './adapter/device-helpers/device-limits';
12
-
13
- export {registerHeadlessGL} from './context/context/create-headless-context';
11
+ export type {WebGLLimits} from './adapter/device-helpers/webgl-device-limits';
14
12
 
15
13
  // WebGL adapter classes
16
14
  export {WebGLDevice} from './adapter/webgl-device';
@@ -43,24 +41,13 @@ export {WEBGLTransformFeedback} from './adapter/resources/webgl-transform-feedba
43
41
  export {Accessor} from './classic/accessor';
44
42
  export type {AccessorObject} from './types';
45
43
 
46
- export {
47
- isWebGL,
48
- isWebGL2,
49
- getWebGL2Context,
50
- assertWebGLContext,
51
- assertWebGL2Context
52
- } from './context/context/webgl-checks';
53
-
54
44
  // Unified parameter API
55
45
 
56
46
  export {setDeviceParameters, withDeviceParameters} from './adapter/converters/device-parameters';
57
47
 
58
48
  // HELPERS - EXPERIMENTAL
59
49
  export {getShaderLayout} from './adapter/helpers/get-shader-layout';
60
- export {
61
- convertGLToTextureFormat,
62
- _checkFloat32ColorAttachment
63
- } from './adapter/converters/texture-formats';
50
+ export {convertGLToTextureFormat} from './adapter/converters/texture-formats';
64
51
 
65
52
  // TEST EXPORTS
66
53
  export {TEXTURE_FORMATS as _TEXTURE_FORMATS} from './adapter/converters/texture-formats';
@@ -72,8 +59,6 @@ export {
72
59
  pushContextState,
73
60
  popContextState
74
61
  } from './context/state-tracker/track-context-state';
75
- // Polyfills (supports a subset of WebGL2 APIs on WebGL1 contexts)
76
- export {polyfillContext} from './context/polyfill/polyfill-context';
77
62
 
78
63
  export {
79
64
  resetGLParameters,
@@ -1 +0,0 @@
1
- {"version":3,"file":"device-parameters.js","names":["log","isObjectEmpty","pushContextState","popContextState","setGLParameters","WebGLDevice","withDeviceAndGLParameters","device","parameters","glParameters","func","gl","setDeviceParameters","withGLParameters","withDeviceParameters","webglDevice","attach","cullMode","disable","enable","cullFace","frontFace","map","ccw","cw","depthBias","undefined","polygonOffset","depthBiasSlopeScale","depthWriteEnabled","depthMask","mapBoolean","depthCompare","depthFunc","convertCompareFunction","stencilWriteMask","mask","stencilMaskSeparate","stencilReadMask","warn","stencilCompare","glValue","stencilFuncSeparate","stencilPassOperation","stencilFailOperation","stencilDepthFailOperation","dppass","convertStencilOperation","sfail","dpfail","stencilOpSeparate","blendColorOperation","blendAlphaOperation","colorEquation","convertBlendOperationToEquation","alphaEquation","blendEquationSeparate","colorSrcFactor","convertBlendFactorToFunction","blendColorSrcFactor","colorDstFactor","blendColorDstFactor","alphaSrcFactor","blendAlphaSrcFactor","alphaDstFactor","blendAlphaDstFactor","blendFuncSeparate","parameter","value","never","less","equal","greater","always","convertToCompareFunction","keep","zero","replace","invert","message","valueMap","Error"],"sources":["../../../src/adapter/converters/device-parameters.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport {\n Device,\n Parameters,\n CompareFunction,\n StencilOperation,\n log,\n isObjectEmpty,\n BlendOperation,\n BlendFactor\n} from '@luma.gl/core';\nimport {GL} from '@luma.gl/constants';\nimport type {GLBlendEquation, GLBlendFunction, GLParameters} from '@luma.gl/constants';\nimport {pushContextState, popContextState} from '../../context/state-tracker/track-context-state';\nimport {setGLParameters} from '../../context/parameters/unified-parameter-api';\nimport {WebGLDevice} from '../webgl-device';\n\n/* eslint-disable no-unused-expressions */ // For expression ? gl.enable() : gl.disable()\n\n/**\n * Execute a function with a set of temporary WebGL parameter overrides\n * - Saves current \"global\" WebGL context settings\n * - Sets the supplies WebGL context parameters,\n * - Executes supplied function\n * - Restores parameters\n * - Returns the return value of the supplied function\n */\nexport function withDeviceAndGLParameters<T = unknown>(\n device: Device, \n parameters: Parameters,\n glParameters: GLParameters,\n func: (device?: Device) => T\n): T {\n if (isObjectEmpty(parameters)) {\n // Avoid setting state if no parameters provided. Just call and return\n return func(device);\n }\n\n // Wrap in a try-catch to ensure that parameters are restored on exceptions\n // @ts-expect-error\n pushContextState(device.gl);\n try {\n setDeviceParameters(device, parameters);\n setGLParameters(device, glParameters);\n return func(device);\n } finally {\n // @ts-expect-error\n popContextState(device.gl);\n }\n}\n\n/**\n * Execute a function with a set of temporary WebGL parameter overrides\n * - Saves current \"global\" WebGL context settings\n * - Sets the supplies WebGL context parameters,\n * - Executes supplied function\n * - Restores parameters\n * - Returns the return value of the supplied function\n * @deprecated use withDeviceParameters instead\n */\nexport function withGLParameters<T = unknown>(\n device: Device,\n parameters: GLParameters,\n func: (device?: Device) => T\n): T {\n if (isObjectEmpty(parameters)) {\n // Avoid setting state if no parameters provided. Just call and return\n return func(device);\n }\n\n // Wrap in a try-catch to ensure that parameters are restored on exceptions\n // @ts-expect-error\n pushContextState(device.gl);\n try {\n setGLParameters(device, parameters);\n return func(device);\n } finally {\n // @ts-expect-error\n popContextState(device.gl);\n }\n}\n\n/**\n * Execute a function with a set of temporary WebGL parameter overrides\n * - Saves current \"global\" WebGL context settings\n * - Sets the supplies WebGL context parameters,\n * - Executes supplied function\n * - Restores parameters\n * - Returns the return value of the supplied function\n */\nexport function withDeviceParameters<T = unknown>(\n device: Device,\n parameters: Parameters,\n func: (device?: Device) => T\n): T {\n if (isObjectEmpty(parameters)) {\n // Avoid setting state if no parameters provided. Just call and return\n return func(device);\n }\n\n // Wrap in a try-catch to ensure that parameters are restored on exceptions\n // @ts-expect-error\n pushContextState(device.gl);\n try {\n setDeviceParameters(device, parameters);\n return func(device);\n } finally {\n // @ts-expect-error\n popContextState(device.gl);\n }\n}\n\n/** Set WebGPU Style Parameters */\nexport function setDeviceParameters(device: Device, parameters: Parameters) {\n const webglDevice = WebGLDevice.attach(device);\n const {gl} = webglDevice;\n\n // RASTERIZATION SETTINGS\n if (parameters.cullMode) {\n switch (parameters.cullMode) {\n case 'none':\n gl.disable(GL.CULL_FACE);\n break;\n case 'front':\n gl.enable(GL.CULL_FACE);\n gl.cullFace(GL.FRONT);\n break;\n case 'back':\n gl.enable(GL.CULL_FACE);\n gl.cullFace(GL.BACK);\n break;\n }\n }\n\n if (parameters.frontFace) {\n gl.frontFace(\n map('frontFace', parameters.frontFace, {\n ccw: GL.CCW,\n cw: GL.CW\n })\n );\n }\n\n if (parameters.depthBias !== undefined) {\n gl.polygonOffset(parameters.depthBias, parameters.depthBiasSlopeScale || 0);\n }\n\n // depthBiasSlopeScale: {\n // // Handled by depthBias\n // },\n\n // DEPTH STENCIL\n\n if (parameters.depthWriteEnabled !== undefined) {\n gl.depthMask(mapBoolean('depthWriteEnabled', parameters.depthWriteEnabled));\n }\n\n if (parameters.depthCompare) {\n parameters.depthCompare !== 'always' ? gl.enable(GL.DEPTH_TEST) : gl.disable(GL.DEPTH_TEST);\n gl.depthFunc(convertCompareFunction('depthCompare', parameters.depthCompare));\n }\n\n if (parameters.stencilWriteMask) {\n const mask = parameters.stencilWriteMask;\n gl.stencilMaskSeparate(GL.FRONT, mask);\n gl.stencilMaskSeparate(GL.BACK, mask);\n }\n\n if (parameters.stencilReadMask) {\n // stencilReadMask is handle inside stencil***Compare.\n log.warn('stencilReadMask not supported under WebGL');\n }\n\n if (parameters.stencilCompare) {\n const mask = parameters.stencilReadMask || 0xffffffff;\n const glValue = convertCompareFunction('depthCompare', parameters.stencilCompare);\n // TODO - ensure back doesn't overwrite\n parameters.stencilCompare !== 'always'\n ? gl.enable(GL.STENCIL_TEST)\n : gl.disable(GL.STENCIL_TEST);\n gl.stencilFuncSeparate(GL.FRONT, glValue, 0, mask);\n gl.stencilFuncSeparate(GL.BACK, glValue, 0, mask);\n }\n\n if (\n parameters.stencilPassOperation &&\n parameters.stencilFailOperation &&\n parameters.stencilDepthFailOperation\n ) {\n const dppass = convertStencilOperation('stencilPassOperation', parameters.stencilPassOperation);\n const sfail = convertStencilOperation('stencilFailOperation', parameters.stencilFailOperation);\n const dpfail = convertStencilOperation(\n 'stencilDepthFailOperation',\n parameters.stencilDepthFailOperation\n );\n gl.stencilOpSeparate(GL.FRONT, sfail, dpfail, dppass);\n gl.stencilOpSeparate(GL.BACK, sfail, dpfail, dppass);\n }\n\n // stencilDepthFailOperation() {\n // // handled by stencilPassOperation\n // },\n\n // stencilFailOperation() {\n // // handled by stencilPassOperation\n // },\n\n // COLOR STATE\n\n if (parameters.blendColorOperation || parameters.blendAlphaOperation) {\n gl.enable(GL.BLEND);\n\n const colorEquation = convertBlendOperationToEquation('blendColorOperation', parameters.blendColorOperation || 'add');\n const alphaEquation = convertBlendOperationToEquation('blendAlphaOperation', parameters.blendAlphaOperation || 'add');\n gl.blendEquationSeparate(colorEquation, alphaEquation);\n\n const colorSrcFactor = convertBlendFactorToFunction('blendColorSrcFactor', parameters.blendColorSrcFactor || 'one');\n const colorDstFactor = convertBlendFactorToFunction('blendColorDstFactor', parameters.blendColorDstFactor || 'zero');\n const alphaSrcFactor = convertBlendFactorToFunction('blendAlphaSrcFactor', parameters.blendAlphaSrcFactor || 'one');\n const alphaDstFactor = convertBlendFactorToFunction('blendAlphaDstFactor', parameters.blendAlphaDstFactor || 'zero');\n gl.blendFuncSeparate(colorSrcFactor, colorDstFactor, alphaSrcFactor, alphaDstFactor);\n }\n}\n\n/*\n rasterizationState: {\n cullMode: \"back\",\n },\n\n depthStencilState: {\n depthWriteEnabled: true,\n depthCompare: \"less\",\n format: \"depth24plus-stencil8\",\n },\n\n colorStates: [\n {\n format: \"bgra8unorm\",\n // colorBlend.srcFactor = wgpu::BlendFactor::SrcAlpha;\n // colorBlend.dstFactor = wgpu::BlendFactor::OneMinusSrcAlpha;\n // alphaBlend.srcFactor = wgpu::BlendFactor::SrcAlpha;\n // alphaBlend.dstFactor = wgpu::BlendFactor::OneMinusSrcAlpha;\n },\n ],\n });\n*/\n\nexport function convertCompareFunction(parameter: string, value: CompareFunction): GL {\n return map(parameter, value, {\n never: GL.NEVER,\n less: GL.LESS,\n equal: GL.EQUAL,\n 'less-equal': GL.LEQUAL,\n greater: GL.GREATER,\n 'not-equal': GL.NOTEQUAL,\n 'greater-equal': GL.GEQUAL,\n always: GL.ALWAYS\n });\n}\n\nexport function convertToCompareFunction(parameter: string, value: GL): CompareFunction {\n return map(parameter, value, {\n [GL.NEVER]: 'never',\n [GL.LESS]: 'less',\n [GL.EQUAL]: 'equal',\n [GL.LEQUAL]: 'less-equal',\n [GL.GREATER]: 'greater',\n [GL.NOTEQUAL]: 'not-equal',\n [GL.GEQUAL]: 'greater-equal',\n [GL.ALWAYS]: 'always'\n });\n}\n\nfunction convertStencilOperation(parameter: string, value: StencilOperation): GL {\n return map(parameter, value, {\n keep: GL.KEEP,\n zero: GL.ZERO,\n replace: GL.REPLACE,\n invert: GL.INVERT,\n 'increment-clamp': GL.INCR,\n 'decrement-clamp': GL.DECR,\n 'increment-wrap': GL.INCR_WRAP,\n 'decrement-wrap': GL.DECR_WRAP\n });\n}\n\nfunction convertBlendOperationToEquation(parameter: string, value: BlendOperation): GLBlendEquation {\n return map(parameter, value, {\n 'add': GL.FUNC_ADD,\n 'subtract': GL.FUNC_SUBTRACT,\n 'reverse-subtract': GL.FUNC_REVERSE_SUBTRACT,\n // When using a WebGL 2 context, the following values are available additionally:\n 'min': GL.MIN,\n 'max': GL.MAX\n } as Record<BlendOperation, GLBlendEquation>);\n}\n\nfunction convertBlendFactorToFunction(parameter: string, value: BlendFactor): GLBlendFunction {\n return map(parameter, value, {\n 'one': GL.ONE,\n 'zero': GL.ZERO,\n 'src-color': GL.SRC_COLOR,\n 'one-minus-src-color': GL.ONE_MINUS_SRC_COLOR,\n 'dst-color': GL.DST_COLOR,\n 'one-minus-dst-color': GL.ONE_MINUS_DST_COLOR,\n 'src-alpha': GL.SRC_ALPHA,\n 'one-minus-src-alpha': GL.ONE_MINUS_SRC_ALPHA,\n 'dst-alpha': GL.DST_ALPHA,\n 'one-minus-dst-alpha': GL.ONE_MINUS_DST_ALPHA,\n } as Record<BlendFactor, GLBlendFunction>);\n}\n\nfunction message(parameter: string, value: any): string {\n return `Illegal parameter ${value} for ${parameter}`;\n}\n\nfunction map(parameter: string, value: any, valueMap: Record<string, any>): any {\n if (!(value in valueMap)) {\n throw new Error(message(parameter, value));\n }\n return valueMap[value];\n}\n\nfunction mapBoolean(parameter: string, value: boolean): boolean {\n return value;\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"sampler-parameters.js","names":["convertCompareFunction","convertSamplerParametersToWebGL","props","params","addressModeU","convertAddressMode","addressModeV","addressModeW","magFilter","convertMaxFilterMode","minFilter","mipmapFilter","convertMinFilterMode","lodMinClamp","undefined","lodMaxClamp","type","compare","maxAnisotropy","updateSamplerParametersForNPOT","parameters","newParameters","addressMode","maxFilter"],"sources":["../../../src/adapter/converters/sampler-parameters.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\n// SAMPLER FILTERS\nimport {SamplerProps} from '@luma.gl/core';\nimport {GL, GLSamplerParameters} from '@luma.gl/constants';\nimport {convertCompareFunction} from './device-parameters';\n\n/**\n * Convert WebGPU-style sampler props to WebGL\n * @param props\n * @returns\n */\nexport function convertSamplerParametersToWebGL(props: SamplerProps): GLSamplerParameters {\n const params: GLSamplerParameters = {};\n if (props.addressModeU) {\n params[GL.TEXTURE_WRAP_S] = convertAddressMode(props.addressModeU);\n }\n if (props.addressModeV) {\n params[GL.TEXTURE_WRAP_T] = convertAddressMode(props.addressModeV);\n }\n if (props.addressModeW) {\n params[GL.TEXTURE_WRAP_R] = convertAddressMode(props.addressModeW);\n }\n if (props.magFilter) {\n params[GL.TEXTURE_MAG_FILTER] = convertMaxFilterMode(props.magFilter);\n }\n if (props.minFilter || props.mipmapFilter) {\n // TODO - arbitrary choice of linear?\n params[GL.TEXTURE_MIN_FILTER] = convertMinFilterMode(\n props.minFilter || 'linear',\n props.mipmapFilter\n );\n }\n if (props.lodMinClamp !== undefined) {\n params[GL.TEXTURE_MIN_LOD] = props.lodMinClamp;\n }\n if (props.lodMaxClamp !== undefined) {\n params[GL.TEXTURE_MAX_LOD] = props.lodMaxClamp;\n }\n if (props.type === 'comparison-sampler') {\n // Setting prop.compare turns this into a comparison sampler\n params[GL.TEXTURE_COMPARE_MODE] = GL.COMPARE_REF_TO_TEXTURE;\n }\n if (props.compare) {\n params[GL.TEXTURE_COMPARE_FUNC] = convertCompareFunction('compare', props.compare);\n }\n // Note depends on WebGL extension\n if (props.maxAnisotropy) {\n params[GL.TEXTURE_MAX_ANISOTROPY_EXT] = props.maxAnisotropy;\n }\n return params;\n}\n\n/**\n * Override sampler settings that are not supported by Non-Power-of-Two textures in WebGL1.\n */\nexport function updateSamplerParametersForNPOT(\n parameters: GLSamplerParameters\n): GLSamplerParameters {\n const newParameters = {...parameters};\n if (parameters[GL.TEXTURE_MIN_FILTER] !== GL.NEAREST) {\n // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_MIN_FILTER to LINEAR`)();\n newParameters[GL.TEXTURE_MIN_FILTER] = GL.LINEAR;\n }\n // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_WRAP_S to CLAMP_TO_EDGE`)();\n newParameters[GL.TEXTURE_WRAP_S] = GL.CLAMP_TO_EDGE;\n newParameters[GL.TEXTURE_WRAP_T] = GL.CLAMP_TO_EDGE;\n return newParameters;\n}\n\n// HELPERS\n\n/** Convert address more */\nfunction convertAddressMode(addressMode: 'clamp-to-edge' | 'repeat' | 'mirror-repeat'): GL.CLAMP_TO_EDGE | GL.REPEAT | GL.MIRRORED_REPEAT {\n switch (addressMode) {\n case 'clamp-to-edge':\n return GL.CLAMP_TO_EDGE;\n case 'repeat':\n return GL.REPEAT;\n case 'mirror-repeat':\n return GL.MIRRORED_REPEAT;\n }\n}\n\nfunction convertMaxFilterMode(maxFilter: 'nearest' | 'linear'): GL.NEAREST | GL.LINEAR {\n switch (maxFilter) {\n case 'nearest':\n return GL.NEAREST;\n case 'linear':\n return GL.LINEAR;\n }\n}\n\n/**\n * WebGPU has separate min filter and mipmap filter,\n * WebGL is combined and effectively offers 6 options\n */\nfunction convertMinFilterMode(\n minFilter: 'nearest' | 'linear',\n mipmapFilter?: 'nearest' | 'linear'\n): GL.NEAREST | GL.LINEAR | GL.NEAREST_MIPMAP_NEAREST | GL.LINEAR_MIPMAP_NEAREST | GL.NEAREST_MIPMAP_LINEAR | GL.LINEAR_MIPMAP_LINEAR {\n if (!mipmapFilter) {\n return convertMaxFilterMode(minFilter);\n }\n switch (minFilter) {\n case 'nearest':\n return mipmapFilter === 'nearest' ? GL.NEAREST_MIPMAP_NEAREST : GL.NEAREST_MIPMAP_LINEAR;\n case 'linear':\n return mipmapFilter === 'nearest' ? GL.LINEAR_MIPMAP_NEAREST : GL.LINEAR_MIPMAP_LINEAR;\n }\n}\n"],"mappings":"SAMQA,sBAAsB;AAO9B,OAAO,SAASC,+BAA+BA,CAACC,KAAmB,EAAuB;EACxF,MAAMC,MAA2B,GAAG,CAAC,CAAC;EACtC,IAAID,KAAK,CAACE,YAAY,EAAE;IACtBD,MAAM,OAAmB,GAAGE,kBAAkB,CAACH,KAAK,CAACE,YAAY,CAAC;EACpE;EACA,IAAIF,KAAK,CAACI,YAAY,EAAE;IACtBH,MAAM,OAAmB,GAAGE,kBAAkB,CAACH,KAAK,CAACI,YAAY,CAAC;EACpE;EACA,IAAIJ,KAAK,CAACK,YAAY,EAAE;IACtBJ,MAAM,OAAmB,GAAGE,kBAAkB,CAACH,KAAK,CAACK,YAAY,CAAC;EACpE;EACA,IAAIL,KAAK,CAACM,SAAS,EAAE;IACnBL,MAAM,OAAuB,GAAGM,oBAAoB,CAACP,KAAK,CAACM,SAAS,CAAC;EACvE;EACA,IAAIN,KAAK,CAACQ,SAAS,IAAIR,KAAK,CAACS,YAAY,EAAE;IAEzCR,MAAM,OAAuB,GAAGS,oBAAoB,CAClDV,KAAK,CAACQ,SAAS,IAAI,QAAQ,EAC3BR,KAAK,CAACS,YACR,CAAC;EACH;EACA,IAAIT,KAAK,CAACW,WAAW,KAAKC,SAAS,EAAE;IACnCX,MAAM,OAAoB,GAAGD,KAAK,CAACW,WAAW;EAChD;EACA,IAAIX,KAAK,CAACa,WAAW,KAAKD,SAAS,EAAE;IACnCX,MAAM,OAAoB,GAAGD,KAAK,CAACa,WAAW;EAChD;EACA,IAAIb,KAAK,CAACc,IAAI,KAAK,oBAAoB,EAAE;IAEvCb,MAAM,OAAyB,QAA4B;EAC7D;EACA,IAAID,KAAK,CAACe,OAAO,EAAE;IACjBd,MAAM,OAAyB,GAAGH,sBAAsB,CAAC,SAAS,EAAEE,KAAK,CAACe,OAAO,CAAC;EACpF;EAEA,IAAIf,KAAK,CAACgB,aAAa,EAAE;IACvBf,MAAM,OAA+B,GAAGD,KAAK,CAACgB,aAAa;EAC7D;EACA,OAAOf,MAAM;AACf;AAKA,OAAO,SAASgB,8BAA8BA,CAC5CC,UAA+B,EACV;EACrB,MAAMC,aAAa,GAAG;IAAC,GAAGD;EAAU,CAAC;EACrC,IAAIA,UAAU,OAAuB,SAAe,EAAE;IAEpDC,aAAa,OAAuB,OAAY;EAClD;EAEAA,aAAa,OAAmB,QAAmB;EACnDA,aAAa,OAAmB,QAAmB;EACnD,OAAOA,aAAa;AACtB;AAKA,SAAShB,kBAAkBA,CAACiB,WAAyD,EAAqD;EACxI,QAAQA,WAAW;IACjB,KAAK,eAAe;MAClB;IACF,KAAK,QAAQ;MACX;IACF,KAAK,eAAe;MAClB;EACJ;AACF;AAEA,SAASb,oBAAoBA,CAACc,SAA+B,EAA0B;EACrF,QAAQA,SAAS;IACf,KAAK,SAAS;MACZ;IACF,KAAK,QAAQ;MACX;EACJ;AACF;AAMA,SAASX,oBAAoBA,CAC3BF,SAA+B,EAC/BC,YAAmC,EACiG;EACpI,IAAI,CAACA,YAAY,EAAE;IACjB,OAAOF,oBAAoB,CAACC,SAAS,CAAC;EACxC;EACA,QAAQA,SAAS;IACf,KAAK,SAAS;MACZ,OAAOC,YAAY,KAAK,SAAS,cAAuD;IAC1F,KAAK,QAAQ;MACX,OAAOA,YAAY,KAAK,SAAS,cAAqD;EAC1F;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"shader-formats.js","names":["getShaderAttributeTypeFromGL","type","components","dataType","getShaderDataTypeFromGL","Error","String","getGLFromShaderDataType"],"sources":["../../../src/adapter/converters/shader-formats.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport {GL} from '@luma.gl/constants';\nimport {ShaderAttributeType, ShaderDataType} from '@luma.gl/core';\n\n/** Get shader attribute type from GL constants */\nexport function getShaderAttributeTypeFromGL(type: GL, components: 1 | 2 | 3 | 4): ShaderAttributeType {\n const dataType = getShaderDataTypeFromGL(type);\n switch (components) {\n case 1: return dataType;\n case 2: return `vec2<${dataType}>`;\n case 3: return `vec2<${dataType}>`;\n case 4: return `vec2<${dataType}>`;\n default: throw new Error(String(components));\n }\n}\n\n/** Get shader data type from GL constants */\nexport function getShaderDataTypeFromGL(type: GL): ShaderDataType {\n switch (type) {\n case GL.INT: return 'i32';\n case GL.UNSIGNED_INT: return 'u32';\n case GL.SHORT: return 'i32';\n case GL.UNSIGNED_SHORT: return 'u32';\n case GL.BYTE: return 'i32';\n case GL.UNSIGNED_BYTE: return 'u32';\n case GL.FLOAT: return 'f32';\n case GL.HALF_FLOAT: return 'f16';\n default: throw new Error(String(type));\n }\n}\n\n/** GetGL constant from shader data type */\nexport function getGLFromShaderDataType(type: ShaderDataType): GL.INT | GL.UNSIGNED_INT | GL.FLOAT | GL.HALF_FLOAT {\n switch (type) {\n // TODO\n case 'i32': return GL.INT;\n case 'u32': return GL.UNSIGNED_INT;\n case 'f32': return GL.FLOAT;\n case 'f16': return GL.HALF_FLOAT;\n default: throw new Error(String(type));\n }\n}\n"],"mappings":"AAOA,OAAO,SAASA,4BAA4BA,CAACC,IAAQ,EAAEC,UAAyB,EAAuB;EACrG,MAAMC,QAAQ,GAAGC,uBAAuB,CAACH,IAAI,CAAC;EAC9C,QAAQC,UAAU;IAChB,KAAK,CAAC;MAAE,OAAOC,QAAQ;IACvB,KAAK,CAAC;MAAE,OAAQ,QAAOA,QAAS,GAAE;IAClC,KAAK,CAAC;MAAE,OAAQ,QAAOA,QAAS,GAAE;IAClC,KAAK,CAAC;MAAE,OAAQ,QAAOA,QAAS,GAAE;IAClC;MAAS,MAAM,IAAIE,KAAK,CAACC,MAAM,CAACJ,UAAU,CAAC,CAAC;EAC9C;AACF;AAGA,OAAO,SAASE,uBAAuBA,CAACH,IAAQ,EAAkB;EAChE,QAAQA,IAAI;IACV;MAAa,OAAO,KAAK;IACzB;MAAsB,OAAO,KAAK;IAClC;MAAe,OAAO,KAAK;IAC3B;MAAwB,OAAO,KAAK;IACpC;MAAc,OAAO,KAAK;IAC1B;MAAuB,OAAO,KAAK;IACnC;MAAe,OAAO,KAAK;IAC3B;MAAoB,OAAO,KAAK;IAChC;MAAS,MAAM,IAAII,KAAK,CAACC,MAAM,CAACL,IAAI,CAAC,CAAC;EACxC;AACF;AAGA,OAAO,SAASM,uBAAuBA,CAACN,IAAoB,EAAuD;EACjH,QAAQA,IAAI;IAEV,KAAK,KAAK;MAAE;IACZ,KAAK,KAAK;MAAE;IACZ,KAAK,KAAK;MAAE;IACZ,KAAK,KAAK;MAAE;IACZ;MAAS,MAAM,IAAII,KAAK,CAACC,MAAM,CAACL,IAAI,CAAC,CAAC;EACxC;AACF"}