@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
@@ -14,7 +14,7 @@ import {
14
14
  SamplerParameters,
15
15
  TypedArray
16
16
  } from '@luma.gl/core';
17
- import {Texture, log, assert, isPowerOfTwo, loadImage, isObjectEmpty} from '@luma.gl/core';
17
+ import {Texture, log, assert, loadImage, isObjectEmpty} from '@luma.gl/core';
18
18
  import {GL, GLSamplerParameters} from '@luma.gl/constants';
19
19
  import {withGLParameters} from '../../context/state-tracker/with-parameters';
20
20
  import {
@@ -22,10 +22,7 @@ import {
22
22
  getWebGLTextureParameters,
23
23
  getTextureFormatBytesPerPixel
24
24
  } from '../converters/texture-formats';
25
- import {
26
- convertSamplerParametersToWebGL,
27
- updateSamplerParametersForNPOT
28
- } from '../converters/sampler-parameters';
25
+ import {convertSamplerParametersToWebGL} from '../converters/sampler-parameters';
29
26
  import {WebGLDevice} from '../webgl-device';
30
27
  import {WEBGLBuffer} from './webgl-buffer';
31
28
  import {WEBGLSampler} from './webgl-sampler';
@@ -151,8 +148,7 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
151
148
 
152
149
  readonly MAX_ATTRIBUTES: number;
153
150
  readonly device: WebGLDevice;
154
- readonly gl: WebGLRenderingContext;
155
- readonly gl2: WebGL2RenderingContext | null;
151
+ readonly gl: WebGL2RenderingContext;
156
152
  readonly handle: WebGLTexture;
157
153
 
158
154
  /** Sampler object (currently unused) */
@@ -194,7 +190,6 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
194
190
 
195
191
  this.device = device as WebGLDevice;
196
192
  this.gl = this.device.gl;
197
- this.gl2 = this.device.gl2;
198
193
  this.handle = this.props.handle || this.gl.createTexture();
199
194
  this.device.setSpectorMetadata(this.handle, {...this.props, data: typeof this.props.data}); // {name: this.props.id};
200
195
 
@@ -260,7 +255,7 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
260
255
 
261
256
  const {parameters = {} as Record<GL, any>} = props;
262
257
 
263
- const {pixels = null, pixelStore = {}, textureUnit = undefined} = props;
258
+ const {pixels = null, pixelStore = {}, textureUnit = undefined, mipmaps = true} = props;
264
259
 
265
260
  // pixels variable is for API compatibility purpose
266
261
  if (!data) {
@@ -270,10 +265,10 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
270
265
  data = pixels;
271
266
  }
272
267
 
273
- let {width, height, dataFormat, type, compressed = false, mipmaps = true} = props;
268
+ let {width, height, dataFormat, type, compressed = false} = props;
274
269
  const {depth = 0} = props;
275
270
 
276
- const glFormat = convertTextureFormatToGL(props.format, this.device.isWebGL2);
271
+ const glFormat = convertTextureFormatToGL(props.format);
277
272
 
278
273
  // Deduce width and height
279
274
  ({width, height, compressed, dataFormat, type} = this._deduceParameters({
@@ -300,11 +295,6 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
300
295
  this.gl.bindTexture(this.target, this.handle);
301
296
  }
302
297
 
303
- if (mipmaps && this.device.isWebGL1 && isNPOT(this.width, this.height)) {
304
- log.warn(`texture: ${this} is Non-Power-Of-Two, disabling mipmaps`)();
305
- mipmaps = false;
306
- }
307
-
308
298
  this.mipmaps = mipmaps;
309
299
 
310
300
  this.setImageData({
@@ -372,7 +362,6 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
372
362
  samplerProps = sampler as SamplerProps;
373
363
  }
374
364
 
375
- // TODO - technically, this is only needed in WebGL1. In WebGL2 we could always use the sampler.
376
365
  const parameters = convertSamplerParametersToWebGL(samplerProps);
377
366
  this._setSamplerParameters(parameters);
378
367
  return this;
@@ -418,11 +407,6 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
418
407
 
419
408
  // Call to regenerate mipmaps after modifying texture(s)
420
409
  generateMipmap(params = {}): this {
421
- if (this.device.isWebGL1 && isNPOT(this.width, this.height)) {
422
- log.warn(`texture: ${this} is Non-Power-Of-Two, disabling mipmaping`)();
423
- return this;
424
- }
425
-
426
410
  this.mipmaps = true;
427
411
 
428
412
  this.gl.bindTexture(this.target, this.handle);
@@ -500,8 +484,6 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
500
484
  let dataType = null;
501
485
  ({data, dataType} = this._getDataType({data, compressed}));
502
486
 
503
- let gl2;
504
-
505
487
  withGLParameters(this.gl, parameters, () => {
506
488
  switch (dataType) {
507
489
  case 'null':
@@ -518,8 +500,6 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
518
500
  );
519
501
  break;
520
502
  case 'typed-array':
521
- // Looks like this assert is not necessary, as offset is ignored under WebGL1
522
- // assert((offset === 0 || this.device.isWebGL2), 'offset supported in WebGL2 only');
523
503
  gl.texImage2D(
524
504
  target,
525
505
  level,
@@ -530,15 +510,13 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
530
510
  dataFormat,
531
511
  type,
532
512
  data,
533
- // @ts-expect-error
534
513
  offset
535
514
  );
536
515
  break;
537
516
  case 'buffer':
538
517
  // WebGL2 enables creating textures directly from a WebGL buffer
539
- gl2 = this.device.assertWebGL2();
540
- gl2.bindBuffer(GL.PIXEL_UNPACK_BUFFER, data.handle || data);
541
- gl2.texImage2D(
518
+ this.device.gl.bindBuffer(GL.PIXEL_UNPACK_BUFFER, data.handle || data);
519
+ this.device.gl.texImage2D(
542
520
  target,
543
521
  level,
544
522
  glFormat,
@@ -549,24 +527,20 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
549
527
  type,
550
528
  offset
551
529
  );
552
- gl2.bindBuffer(GL.PIXEL_UNPACK_BUFFER, null);
530
+ this.device.gl.bindBuffer(GL.PIXEL_UNPACK_BUFFER, null);
553
531
  break;
554
532
  case 'browser-object':
555
- if (this.device.isWebGL2) {
556
- gl.texImage2D(
557
- target,
558
- level,
559
- glFormat,
560
- width,
561
- height,
562
- 0 /* border*/,
563
- dataFormat,
564
- type,
565
- data
566
- );
567
- } else {
568
- gl.texImage2D(target, level, glFormat, dataFormat, type, data);
569
- }
533
+ gl.texImage2D(
534
+ target,
535
+ level,
536
+ glFormat,
537
+ width,
538
+ height,
539
+ 0 /* border*/,
540
+ dataFormat,
541
+ type,
542
+ data
543
+ );
570
544
  break;
571
545
  case 'compressed':
572
546
  for (const [levelIndex, levelData] of data.entries()) {
@@ -590,7 +564,7 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
590
564
  if (data && data.byteLength) {
591
565
  this.trackAllocatedMemory(data.byteLength, 'Texture');
592
566
  } else {
593
- const bytesPerPixel = getTextureFormatBytesPerPixel(this.props.format, this.device.isWebGL2);
567
+ const bytesPerPixel = getTextureFormatBytesPerPixel(this.props.format);
594
568
  this.trackAllocatedMemory(this.width * this.height * bytesPerPixel, 'Texture');
595
569
  }
596
570
 
@@ -659,22 +633,16 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
659
633
  } else if (data === null) {
660
634
  this.gl.texSubImage2D(target, level, x, y, width, height, dataFormat, type, null);
661
635
  } else if (ArrayBuffer.isView(data)) {
662
- // const gl2 = this.device.assertWebGL2();
663
- // @ts-expect-error last offset parameter is ignored under WebGL1
664
636
  this.gl.texSubImage2D(target, level, x, y, width, height, dataFormat, type, data, offset);
665
637
  } else if (typeof WebGLBuffer !== 'undefined' && data instanceof WebGLBuffer) {
666
638
  // WebGL2 allows us to create texture directly from a WebGL buffer
667
- const gl2 = this.device.assertWebGL2();
668
639
  // This texImage2D signature uses currently bound GL.PIXEL_UNPACK_BUFFER
669
- gl2.bindBuffer(GL.PIXEL_UNPACK_BUFFER, data);
670
- gl2.texSubImage2D(target, level, x, y, width, height, dataFormat, type, offset);
671
- gl2.bindBuffer(GL.PIXEL_UNPACK_BUFFER, null);
672
- } else if (this.device.isWebGL2) {
673
- // Assume data is a browser supported object (ImageData, Canvas, ...)
674
- const gl2 = this.device.assertWebGL2();
675
- gl2.texSubImage2D(target, level, x, y, width, height, dataFormat, type, data);
640
+ this.device.gl.bindBuffer(GL.PIXEL_UNPACK_BUFFER, data);
641
+ this.device.gl.texSubImage2D(target, level, x, y, width, height, dataFormat, type, offset);
642
+ this.device.gl.bindBuffer(GL.PIXEL_UNPACK_BUFFER, null);
676
643
  } else {
677
- this.gl.texSubImage2D(target, level, x, y, dataFormat, type, data);
644
+ // Assume data is a browser supported object (ImageData, Canvas, ...)
645
+ this.device.gl.texSubImage2D(target, level, x, y, width, height, dataFormat, type, data);
678
646
  }
679
647
  });
680
648
 
@@ -754,7 +722,7 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
754
722
  let {width, height, dataFormat, type, compressed} = opts;
755
723
 
756
724
  // Deduce format and type from format
757
- const parameters = getWebGLTextureParameters(format, this.device.isWebGL2);
725
+ const parameters = getWebGLTextureParameters(format);
758
726
  dataFormat = dataFormat || parameters.dataFormat;
759
727
  type = type || parameters.type;
760
728
  compressed = compressed || parameters.compressed;
@@ -910,11 +878,10 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
910
878
 
911
879
  this.gl.bindTexture(this.target, this.handle);
912
880
 
913
- const webglTextureFormat = getWebGLTextureParameters(format, this.device.isWebGL2);
881
+ const webglTextureFormat = getWebGLTextureParameters(format);
914
882
 
915
883
  withGLParameters(this.gl, parameters, () => {
916
884
  if (ArrayBuffer.isView(data)) {
917
- // @ts-expect-error
918
885
  this.gl.texImage3D(
919
886
  this.target,
920
887
  level,
@@ -931,7 +898,6 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
931
898
 
932
899
  if (data instanceof WEBGLBuffer) {
933
900
  this.gl.bindBuffer(GL.PIXEL_UNPACK_BUFFER, data.handle);
934
- // @ts-expect-error
935
901
  this.gl.texImage3D(
936
902
  this.target,
937
903
  level,
@@ -950,7 +916,7 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
950
916
  if (data && data.byteLength) {
951
917
  this.trackAllocatedMemory(data.byteLength, 'Texture');
952
918
  } else {
953
- const bytesPerPixel = getTextureFormatBytesPerPixel(this.props.format, this.device.isWebGL2);
919
+ const bytesPerPixel = getTextureFormatBytesPerPixel(this.props.format);
954
920
  this.trackAllocatedMemory(this.width * this.height * this.depth * bytesPerPixel, 'Texture');
955
921
  }
956
922
 
@@ -963,14 +929,8 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
963
929
 
964
930
  /**
965
931
  * Sets sampler parameters on texture
966
- * @note: Applies NPOT workaround if appropriate
967
932
  */
968
933
  _setSamplerParameters(parameters: GLSamplerParameters): void {
969
- // Work around WebGL1 sampling restrictions on NPOT textures
970
- if (this.device.isWebGL1 && isNPOT(this.width, this.height)) {
971
- parameters = updateSamplerParametersForNPOT(parameters);
972
- }
973
-
974
934
  // NPOT parameters may populate an empty object
975
935
  if (isObjectEmpty(parameters)) {
976
936
  return;
@@ -999,32 +959,6 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
999
959
  this.gl.bindTexture(this.target, null);
1000
960
  return;
1001
961
  }
1002
-
1003
- /** @deprecated For LegacyTexture subclass */
1004
- protected _getWebGL1NPOTParameterOverride(
1005
- pname: GL.TEXTURE_MIN_FILTER | GL.TEXTURE_WRAP_S | GL.TEXTURE_WRAP_T,
1006
- value: GL.LINEAR | GL.NEAREST
1007
- ): number {
1008
- // NOTE: Apply NPOT workaround
1009
- const npot = this.device.isWebGL1 && isNPOT(this.width, this.height);
1010
- if (npot) {
1011
- switch (pname) {
1012
- case GL.TEXTURE_MIN_FILTER:
1013
- if (value !== GL.LINEAR && value !== GL.NEAREST) {
1014
- // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_MIN_FILTER to LINEAR`)();
1015
- return GL.LINEAR;
1016
- }
1017
- break;
1018
- case GL.TEXTURE_WRAP_S:
1019
- case GL.TEXTURE_WRAP_T:
1020
- // if (value !== GL.CLAMP_TO_EDGE) { log.warn(`texture: ${this} is Non-Power-Of-Two, ${getKey(this.gl, pname)} to CLAMP_TO_EDGE`)(); }
1021
- return GL.CLAMP_TO_EDGE;
1022
- default:
1023
- break;
1024
- }
1025
- }
1026
- return value;
1027
- }
1028
962
  }
1029
963
 
1030
964
  // HELPERS
@@ -1049,14 +983,6 @@ function getWebGLTextureTarget(props: TextureProps) {
1049
983
  }
1050
984
  }
1051
985
 
1052
- function isNPOT(width: number, height: number): boolean {
1053
- // Width and height not available, avoid classifying as NPOT texture
1054
- if (!width || !height) {
1055
- return false;
1056
- }
1057
- return !isPowerOfTwo(width) || !isPowerOfTwo(height);
1058
- }
1059
-
1060
986
  function logParameters(parameters: Record<number, GL | number>) {
1061
987
  log.log(1, 'texture sampler parameters', parameters)();
1062
988
  }
@@ -7,7 +7,7 @@ import {getGLPrimitive} from '../helpers/webgl-topology-utils';
7
7
 
8
8
  export class WEBGLTransformFeedback extends TransformFeedback {
9
9
  readonly device: WebGLDevice;
10
- readonly gl2: WebGL2RenderingContext;
10
+ readonly gl: WebGL2RenderingContext;
11
11
  readonly handle: WebGLTransformFeedback;
12
12
 
13
13
  /**
@@ -29,10 +29,9 @@ export class WEBGLTransformFeedback extends TransformFeedback {
29
29
  constructor(device: WebGLDevice, props: TransformFeedbackProps) {
30
30
  super(device, props);
31
31
 
32
- device.assertWebGL2();
33
32
  this.device = device;
34
- this.gl2 = device.gl2;
35
- this.handle = this.props.handle || this.gl2.createTransformFeedback();
33
+ this.gl = device.gl;
34
+ this.handle = this.props.handle || this.gl.createTransformFeedback();
36
35
  this.layout = this.props.layout;
37
36
 
38
37
  if (props.buffers) {
@@ -43,24 +42,24 @@ export class WEBGLTransformFeedback extends TransformFeedback {
43
42
  }
44
43
 
45
44
  override destroy(): void {
46
- this.gl2.deleteTransformFeedback(this.handle);
45
+ this.gl.deleteTransformFeedback(this.handle);
47
46
  super.destroy();
48
47
  }
49
48
 
50
49
  begin(topology: PrimitiveTopology = 'point-list'): void {
51
- this.gl2.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, this.handle);
50
+ this.gl.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, this.handle);
52
51
  if (this.bindOnUse) {
53
52
  this._bindBuffers();
54
53
  }
55
- this.gl2.beginTransformFeedback(getGLPrimitive(topology));
54
+ this.gl.beginTransformFeedback(getGLPrimitive(topology));
56
55
  }
57
56
 
58
57
  end(): void {
59
- this.gl2.endTransformFeedback();
58
+ this.gl.endTransformFeedback();
60
59
  if (!this.bindOnUse) {
61
60
  this._unbindBuffers();
62
61
  }
63
- this.gl2.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, null);
62
+ this.gl.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, null);
64
63
  }
65
64
 
66
65
  // SUBCLASS
@@ -105,18 +104,18 @@ export class WEBGLTransformFeedback extends TransformFeedback {
105
104
 
106
105
  bind(funcOrHandle = this.handle) {
107
106
  if (typeof funcOrHandle !== 'function') {
108
- this.gl2.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, funcOrHandle);
107
+ this.gl.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, funcOrHandle);
109
108
  return this;
110
109
  }
111
110
 
112
111
  let value: unknown;
113
112
 
114
113
  if (!this._bound) {
115
- this.gl2.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, this.handle);
114
+ this.gl.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, this.handle);
116
115
  this._bound = true;
117
116
  value = funcOrHandle();
118
117
  this._bound = false;
119
- this.gl2.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, null);
118
+ this.gl.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, null);
120
119
  } else {
121
120
  value = funcOrHandle();
122
121
  }
@@ -171,7 +170,7 @@ export class WEBGLTransformFeedback extends TransformFeedback {
171
170
 
172
171
  protected _unbindBuffers(): void {
173
172
  for (const bufferIndex in this.buffers) {
174
- this.gl2.bindBufferBase(GL.TRANSFORM_FEEDBACK_BUFFER, Number(bufferIndex), null);
173
+ this.gl.bindBufferBase(GL.TRANSFORM_FEEDBACK_BUFFER, Number(bufferIndex), null);
175
174
  }
176
175
  }
177
176
 
@@ -183,9 +182,9 @@ export class WEBGLTransformFeedback extends TransformFeedback {
183
182
  ): void {
184
183
  const handle = buffer && (buffer as WEBGLBuffer).handle;
185
184
  if (!handle || byteLength === undefined) {
186
- this.gl2.bindBufferBase(GL.TRANSFORM_FEEDBACK_BUFFER, index, handle);
185
+ this.gl.bindBufferBase(GL.TRANSFORM_FEEDBACK_BUFFER, index, handle);
187
186
  } else {
188
- this.gl2.bindBufferRange(GL.TRANSFORM_FEEDBACK_BUFFER, index, handle, byteOffset, byteLength);
187
+ this.gl.bindBufferRange(GL.TRANSFORM_FEEDBACK_BUFFER, index, handle, byteOffset, byteLength);
189
188
  }
190
189
  }
191
190
  }
@@ -28,14 +28,14 @@ export class WEBGLVertexArray extends VertexArray {
28
28
 
29
29
  /** * Attribute 0 can not be disable on most desktop OpenGL based browsers */
30
30
  static isConstantAttributeZeroSupported(device: Device): boolean {
31
- return device.info.type === 'webgl2' || getBrowser() === 'Chrome';
31
+ return getBrowser() === 'Chrome';
32
32
  }
33
33
 
34
34
  // Create a VertexArray
35
35
  constructor(device: WebGLDevice, props?: VertexArrayProps) {
36
36
  super(device, props);
37
37
  this.device = device;
38
- this.handle = this.device.gl2.createVertexArray();
38
+ this.handle = this.device.gl.createVertexArray();
39
39
  }
40
40
 
41
41
  override destroy(): void {
@@ -44,7 +44,7 @@ export class WEBGLVertexArray extends VertexArray {
44
44
  this.buffer?.destroy();
45
45
  }
46
46
  if (this.handle) {
47
- this.device.gl2.deleteVertexArray(this.handle);
47
+ this.device.gl.deleteVertexArray(this.handle);
48
48
  // @ts-expect-error read-only/undefined
49
49
  this.handle = undefined!;
50
50
  }
@@ -66,9 +66,9 @@ export class WEBGLVertexArray extends VertexArray {
66
66
  throw new Error('Use .setBuffer()');
67
67
  }
68
68
  // In WebGL The GL.ELEMENT_ARRAY_BUFFER_BINDING is stored on the VertexArrayObject
69
- this.device.gl2.bindVertexArray(this.handle);
69
+ this.device.gl.bindVertexArray(this.handle);
70
70
  // TODO - this initial binding does not seem to take effect? see bindBeforeRender()
71
- this.device.gl2.bindBuffer(GL.ELEMENT_ARRAY_BUFFER, buffer ? buffer.handle : null);
71
+ this.device.gl.bindBuffer(GL.ELEMENT_ARRAY_BUFFER, buffer ? buffer.handle : null);
72
72
  // log.log(1, 'VertexArray.setIndexBuffer', indexBuffer)();
73
73
  // log.log(1, `Binding vertex array ${this.id}`, buffer?.id)();
74
74
 
@@ -85,14 +85,13 @@ export class WEBGLVertexArray extends VertexArray {
85
85
 
86
86
  const {size, type, stride, offset, normalized, integer, divisor} = this._getAccessor(location);
87
87
 
88
- this.device.gl2.bindVertexArray(this.handle);
88
+ this.device.gl.bindVertexArray(this.handle);
89
89
  // A non-zero buffer object must be bound to the GL_ARRAY_BUFFER target
90
90
  this.device.gl.bindBuffer(GL.ARRAY_BUFFER, buffer.handle);
91
91
 
92
92
  // WebGL2 supports *integer* data formats, i.e. GPU will see integer values
93
93
  if (integer) {
94
- this.device.assertWebGL2();
95
- this.device.gl2.vertexAttribIPointer(location, size, type, stride, offset);
94
+ this.device.gl.vertexAttribIPointer(location, size, type, stride, offset);
96
95
  } else {
97
96
  // Attaches ARRAY_BUFFER with specified buffer format to location
98
97
  this.device.gl.vertexAttribPointer(location, size, type, normalized, stride, offset);
@@ -101,7 +100,7 @@ export class WEBGLVertexArray extends VertexArray {
101
100
  // Mark as non-constant
102
101
  this.device.gl.enableVertexAttribArray(location);
103
102
  // Set the step mode 0=vertex, 1=instance
104
- this.device.gl2.vertexAttribDivisor(location, divisor || 0);
103
+ this.device.gl.vertexAttribDivisor(location, divisor || 0);
105
104
 
106
105
  this.attributes[location] = buffer;
107
106
  }
@@ -115,12 +114,12 @@ export class WEBGLVertexArray extends VertexArray {
115
114
  init = false;
116
115
 
117
116
  override bindBeforeRender(): void {
118
- this.device.gl2.bindVertexArray(this.handle);
117
+ this.device.gl.bindVertexArray(this.handle);
119
118
  // TODO - the initial bind does not seem to take effect.
120
119
  if (!this.init) {
121
120
  // log.log(1, `Binding vertex array ${this.id}`, this.indexBuffer?.id)();
122
121
  const webglBuffer = this.indexBuffer as WEBGLBuffer;
123
- this.device.gl2.bindBuffer(GL.ELEMENT_ARRAY_BUFFER, webglBuffer?.handle || null);
122
+ this.device.gl.bindBuffer(GL.ELEMENT_ARRAY_BUFFER, webglBuffer?.handle || null);
124
123
  this.init = true;
125
124
  }
126
125
  this._applyConstantAttributes();
@@ -130,8 +129,8 @@ export class WEBGLVertexArray extends VertexArray {
130
129
  // log.log(1, `Unbinding vertex array ${this.id}`)();
131
130
  // TODO technically this is not necessary, but we might be interfacing
132
131
  // with code that does not use vertex array objects
133
- this.device.gl2.bindVertexArray(null);
134
- // this.device.gl2.bindBuffer(GL.ELEMENT_ARRAY_BUFFER, null);
132
+ this.device.gl.bindVertexArray(null);
133
+ // this.device.gl.bindBuffer(GL.ELEMENT_ARRAY_BUFFER, null);
135
134
  }
136
135
 
137
136
  // Internal methods
@@ -161,13 +160,12 @@ export class WEBGLVertexArray extends VertexArray {
161
160
 
162
161
  // // WebGL2 supports *integer* data formats, i.e. GPU will see integer values
163
162
  // if (integer) {
164
- // this.device.assertWebGL2();
165
- // this.device.gl2.vertexAttribIPointer(location, size, type, stride, offset);
163
+ // this.device.gl.vertexAttribIPointer(location, size, type, stride, offset);
166
164
  // } else {
167
165
  // // Attaches ARRAY_BUFFER with specified buffer format to location
168
166
  // this.device.gl.vertexAttribPointer(location, size, type, normalized, stride, offset);
169
167
  // }
170
- // this.device.gl2.vertexAttribDivisor(location, divisor || 0);
168
+ // this.device.gl.vertexAttribDivisor(location, divisor || 0);
171
169
  // }
172
170
 
173
171
  /** Get an accessor from the */
@@ -206,13 +204,13 @@ export class WEBGLVertexArray extends VertexArray {
206
204
 
207
205
  if (enable || canDisableAttribute) {
208
206
  location = Number(location);
209
- this.device.gl2.bindVertexArray(this.handle);
207
+ this.device.gl.bindVertexArray(this.handle);
210
208
  if (enable) {
211
209
  this.device.gl.enableVertexAttribArray(location);
212
210
  } else {
213
211
  this.device.gl.disableVertexAttribArray(location);
214
212
  }
215
- this.device.gl2.bindVertexArray(null);
213
+ this.device.gl.bindVertexArray(null);
216
214
  }
217
215
  }
218
216
 
@@ -61,18 +61,12 @@ export class WebGLCanvasContext extends CanvasContext {
61
61
  this.setDevicePixelRatio(devicePixelRatio, options);
62
62
  return;
63
63
  }
64
-
65
- // Resize headless gl context
66
- const ext = this.device.gl.getExtension('STACKGL_resize_drawingbuffer');
67
- if (ext && options && 'width' in options && 'height' in options) {
68
- ext.resize(options.width, options.height);
69
- }
70
64
  }
71
65
 
72
66
  commit() {
73
67
  // gl.commit was ultimately removed from the WebGL standard??
74
68
  // if (this.offScreen && this.gl.commit) {
75
- // // @ts-expect-error gl.commit is not officially part of WebGLRenderingContext
69
+ // // @ts-expect-error gl.commit is not officially part of WebGL2RenderingContext
76
70
  // this.gl.commit();
77
71
  // }
78
72
  }