@luma.gl/webgl 9.3.0-alpha.9 → 9.3.1

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 (43) hide show
  1. package/dist/adapter/converters/webgl-shadertypes.js +1 -1
  2. package/dist/adapter/converters/webgl-shadertypes.js.map +1 -1
  3. package/dist/adapter/converters/webgl-texture-table.js +3 -3
  4. package/dist/adapter/converters/webgl-texture-table.js.map +1 -1
  5. package/dist/adapter/converters/webgl-vertex-formats.js +3 -3
  6. package/dist/adapter/converters/webgl-vertex-formats.js.map +1 -1
  7. package/dist/adapter/device-helpers/webgl-device-limits.js +1 -1
  8. package/dist/adapter/device-helpers/webgl-device-limits.js.map +1 -1
  9. package/dist/adapter/helpers/parse-shader-compiler-log.js +2 -2
  10. package/dist/adapter/helpers/parse-shader-compiler-log.js.map +1 -1
  11. package/dist/adapter/helpers/set-uniform.js +1 -1
  12. package/dist/adapter/helpers/set-uniform.js.map +1 -1
  13. package/dist/adapter/helpers/webgl-texture-utils.js +5 -5
  14. package/dist/adapter/helpers/webgl-texture-utils.js.map +1 -1
  15. package/dist/adapter/helpers/webgl-topology-utils.js +2 -2
  16. package/dist/adapter/helpers/webgl-topology-utils.js.map +1 -1
  17. package/dist/adapter/resources/webgl-command-buffer.d.ts +4 -4
  18. package/dist/adapter/resources/webgl-command-buffer.js +4 -4
  19. package/dist/adapter/resources/webgl-render-pipeline.js +25 -24
  20. package/dist/adapter/resources/webgl-render-pipeline.js.map +1 -1
  21. package/dist/adapter/resources/webgl-texture.js +9 -9
  22. package/dist/adapter/resources/webgl-texture.js.map +1 -1
  23. package/dist/adapter/webgl-device.d.ts.map +1 -1
  24. package/dist/adapter/webgl-device.js +4 -1
  25. package/dist/adapter/webgl-device.js.map +1 -1
  26. package/dist/context/debug/webgl-developer-tools.js +4 -2
  27. package/dist/context/debug/webgl-developer-tools.js.map +1 -1
  28. package/dist/dist.dev.js +28 -25
  29. package/dist/dist.min.js +2 -2
  30. package/package.json +3 -3
  31. package/src/adapter/converters/webgl-shadertypes.ts +1 -1
  32. package/src/adapter/converters/webgl-texture-table.ts +3 -3
  33. package/src/adapter/converters/webgl-vertex-formats.ts +3 -3
  34. package/src/adapter/device-helpers/webgl-device-limits.ts +1 -1
  35. package/src/adapter/helpers/parse-shader-compiler-log.ts +2 -2
  36. package/src/adapter/helpers/set-uniform.ts +1 -1
  37. package/src/adapter/helpers/webgl-texture-utils.ts +5 -5
  38. package/src/adapter/helpers/webgl-topology-utils.ts +2 -2
  39. package/src/adapter/resources/webgl-command-buffer.ts +4 -4
  40. package/src/adapter/resources/webgl-render-pipeline.ts +30 -30
  41. package/src/adapter/resources/webgl-texture.ts +9 -9
  42. package/src/adapter/webgl-device.ts +4 -1
  43. package/src/context/debug/webgl-developer-tools.ts +4 -2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@luma.gl/webgl",
3
- "version": "9.3.0-alpha.9",
3
+ "version": "9.3.1",
4
4
  "description": "WebGL2 adapter for the luma.gl core API",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -55,11 +55,11 @@
55
55
  "prepublishOnly": "npm run build-minified-bundle && npm run build-dev-bundle"
56
56
  },
57
57
  "peerDependencies": {
58
- "@luma.gl/core": "9.3.0-alpha.6"
58
+ "@luma.gl/core": "~9.3.0"
59
59
  },
60
60
  "dependencies": {
61
61
  "@math.gl/types": "^4.1.0",
62
62
  "@probe.gl/env": "^4.1.1"
63
63
  },
64
- "gitHead": "737b0f752b3f8a6ae920b394d5ca028427275b37"
64
+ "gitHead": "c13ab4389f5616e6f7f21bfa4e113ac600e6ecab"
65
65
  }
@@ -38,7 +38,7 @@ export function getTextureBindingFromGLSamplerType(
38
38
  /** Get vertex format from GL constants */
39
39
  export function getVertexFormatFromGL(type: GLDataType, components: 1 | 2 | 3 | 4): VertexFormat {
40
40
  const base = getVertexTypeFromGL(type);
41
- // prettier-ignore
41
+ // biome-ignore format: preserve layout
42
42
  switch (components) {
43
43
  case 1: return base;
44
44
  case 2: return `${base}x2`;
@@ -44,7 +44,7 @@ type TextureFeatureDefinition = {
44
44
  features?: DeviceFeature[];
45
45
  };
46
46
 
47
- // prettier-ignore
47
+ // biome-ignore format: preserve layout
48
48
  export const TEXTURE_FEATURES: Partial<Record<DeviceFeature, TextureFeatureDefinition>> = {
49
49
  'float32-renderable-webgl': {extensions: [EXT_color_buffer_float]},
50
50
  'float16-renderable-webgl': {extensions: ['EXT_color_buffer_half_float']},
@@ -137,7 +137,7 @@ type WebGLFormatInfo = {
137
137
  * Texture format data -
138
138
  * Exported but can change without notice
139
139
  */
140
- // prettier-ignore
140
+ // biome-ignore format: preserve layout
141
141
  export const WEBGL_TEXTURE_FORMATS: Record<TextureFormat, WebGLFormatInfo> = {
142
142
  // 8-bit formats
143
143
  'r8unorm': {gl: GL.R8, rb: true},
@@ -478,7 +478,7 @@ export function getWebGLPixelDataFormat(
478
478
  if (format === GL.RGBA || format === GL.RGB) {
479
479
  return format;
480
480
  }
481
- // prettier-ignore
481
+ // biome-ignore format: preserve layout
482
482
  switch (channels) {
483
483
  case 'r': return integer && !normalized ? GL.RED_INTEGER : GL.RED;
484
484
  case 'rg': return integer && !normalized ? GL.RG_INTEGER : GL.RG;
@@ -18,7 +18,7 @@ type GLDataType =
18
18
  /** Get vertex format from GL constants */
19
19
  export function getVertexFormatFromGL(type: GLDataType, components: 1 | 2 | 3 | 4): VertexFormat {
20
20
  const base = getVertexTypeFromGL(type);
21
- // prettier-ignore
21
+ // biome-ignore format: preserve layout
22
22
  switch (components) {
23
23
  case 1: return base;
24
24
  case 2: return `${base}x2`;
@@ -32,7 +32,7 @@ export function getVertexFormatFromGL(type: GLDataType, components: 1 | 2 | 3 |
32
32
 
33
33
  /** Get data type from GL constants */
34
34
  export function getVertexTypeFromGL(type: GLDataType, normalized = false): NormalizedDataType {
35
- // prettier-ignore
35
+ // biome-ignore format: preserve layout
36
36
  switch (type) {
37
37
  // WebGPU does not support normalized 32 bit integer attributes
38
38
  case GL.INT: return normalized ? 'sint32' : 'sint32';
@@ -59,7 +59,7 @@ export function getGLFromVertexType(
59
59
  | GL.INT
60
60
  | GL.HALF_FLOAT
61
61
  | GL.FLOAT {
62
- // prettier-ignore
62
+ // biome-ignore format: preserve layout
63
63
  switch (dataType) {
64
64
  case 'uint8': return GL.UNSIGNED_BYTE;
65
65
  case 'sint8': return GL.BYTE;
@@ -5,7 +5,7 @@
5
5
  import {DeviceLimits} from '@luma.gl/core';
6
6
  import {GL} from '@luma.gl/webgl/constants';
7
7
 
8
- // prettier-ignore
8
+ // biome-ignore format: preserve layout
9
9
  export class WebGLDeviceLimits extends DeviceLimits {
10
10
  get maxTextureDimension1D() { return 0; } // WebGL does not support 1D textures
11
11
  get maxTextureDimension2D() { return this.getParameter(GL.MAX_TEXTURE_SIZE); }
@@ -59,12 +59,12 @@ export function parseShaderCompilerLog(errLog: string): readonly CompilerMessage
59
59
  }
60
60
 
61
61
  let lineNum = parseInt(lineNumber, 10);
62
- if (isNaN(lineNum)) {
62
+ if (Number.isNaN(lineNum)) {
63
63
  lineNum = 0;
64
64
  }
65
65
 
66
66
  let linePos = parseInt(linePosition, 10);
67
- if (isNaN(linePos)) {
67
+ if (Number.isNaN(linePos)) {
68
68
  linePos = 0;
69
69
  }
70
70
 
@@ -28,7 +28,7 @@ export function setUniform(
28
28
  }
29
29
  const arrayValue = typeof uniformValue === 'number' ? [uniformValue] : uniformValue;
30
30
 
31
- // prettier-ignore
31
+ // biome-ignore format: preserve layout
32
32
  switch (type) {
33
33
  case GL.SAMPLER_2D:
34
34
  case GL.SAMPLER_CUBE:
@@ -102,10 +102,10 @@ export function copyGPUBufferToMipLevel(
102
102
  // 3 dimensional textures requires 3D texture functions
103
103
  if (compressed) {
104
104
  // TODO enable extension?
105
- // prettier-ignore
105
+ // biome-ignore format: preserve layout
106
106
  gl.compressedTexSubImage3D(glTarget, mipLevel, x, y, z, width, height, depth, glFormat, byteLength, byteOffset);
107
107
  } else {
108
- // prettier-ignore
108
+ // biome-ignore format: preserve layout
109
109
  gl.texSubImage3D(glTarget, mipLevel, x, y, z, width, height, depth, glFormat, glType, byteOffset);
110
110
  }
111
111
  break;
@@ -113,10 +113,10 @@ export function copyGPUBufferToMipLevel(
113
113
  case '2d':
114
114
  case 'cube':
115
115
  if (compressed) {
116
- // prettier-ignore
116
+ // biome-ignore format: preserve layout
117
117
  gl.compressedTexSubImage2D(glTarget, mipLevel, x, y, width, height, glFormat, byteLength, byteOffset);
118
118
  } else {
119
- // prettier-ignore
119
+ // biome-ignore format: preserve layout
120
120
  gl.texSubImage2D(glTarget, mipLevel, x, y, width, height, BORDER, glFormat, byteOffset);
121
121
  }
122
122
  break;
@@ -132,7 +132,7 @@ export function copyGPUBufferToMipLevel(
132
132
  export function getWebGLTextureTarget(
133
133
  dimension: '1d' | '2d' | '2d-array' | 'cube' | 'cube-array' | '3d'
134
134
  ): GLTextureTarget {
135
- // prettier-ignore
135
+ // biome-ignore format: preserve layout
136
136
  switch (dimension) {
137
137
  case '1d': break; // not supported in any WebGL version
138
138
  case '2d': return GL.TEXTURE_2D; // supported in WebGL1
@@ -81,7 +81,7 @@ export function getGLDrawMode(
81
81
  | GL.TRIANGLES
82
82
  | GL.TRIANGLE_STRIP
83
83
  | GL.TRIANGLE_FAN {
84
- // prettier-ignore
84
+ // biome-ignore format: preserve layout
85
85
  switch (topology) {
86
86
  case 'point-list': return GL.POINTS;
87
87
  case 'line-list': return GL.LINES;
@@ -94,7 +94,7 @@ export function getGLDrawMode(
94
94
 
95
95
  /** Get the primitive type for transform feedback */
96
96
  export function getGLPrimitive(topology: PrimitiveTopology): GL.POINTS | GL.LINES | GL.TRIANGLES {
97
- // prettier-ignore
97
+ // biome-ignore format: preserve layout
98
98
  switch (topology) {
99
99
  case 'point-list': return GL.POINTS;
100
100
  case 'line-list': return GL.LINES;
@@ -345,10 +345,10 @@ function _clearTexture(device: WebGLDevice, options: ClearTextureOptions) {
345
345
  case '2d-array':
346
346
  case '3d':
347
347
  if (compressed) {
348
- // prettier-ignore
348
+ // biome-ignore format: preserve layout
349
349
  device.gl.compressedTexImage3D(glTarget, mipLevel, glInternalFormat, width, height, depth, BORDER, null);
350
350
  } else {
351
- // prettier-ignore
351
+ // biome-ignore format: preserve layout
352
352
  device.gl.texImage3D( glTarget, mipLevel, glInternalFormat, width, height, depth, BORDER, glFormat, glType, null);
353
353
  }
354
354
  break;
@@ -356,10 +356,10 @@ function _clearTexture(device: WebGLDevice, options: ClearTextureOptions) {
356
356
  case '2d':
357
357
  case 'cube':
358
358
  if (compressed) {
359
- // prettier-ignore
359
+ // biome-ignore format: preserve layout
360
360
  device.gl.compressedTexImage2D(glTarget, mipLevel, glInternalFormat, width, height, BORDER, null);
361
361
  } else {
362
- // prettier-ignore
362
+ // biome-ignore format: preserve layout
363
363
  device.gl.texImage2D(glTarget, mipLevel, glInternalFormat, width, height, BORDER, glFormat, glType, null);
364
364
  }
365
365
  break;
@@ -114,37 +114,37 @@ export class WEBGLRenderPipeline extends RenderPipeline {
114
114
  value
115
115
  )();
116
116
  }
117
- continue;
118
- }
119
- if (!value) {
120
- log.warn(`Unsetting binding "${name}" in render pipeline "${this.id}"`)();
121
- }
122
- switch (binding.type) {
123
- case 'uniform':
124
- // @ts-expect-error
125
- if (!(value instanceof WEBGLBuffer) && !(value.buffer instanceof WEBGLBuffer)) {
126
- throw new Error('buffer value');
127
- }
128
- break;
129
- case 'texture':
130
- if (
131
- !(
132
- value instanceof WEBGLTextureView ||
133
- value instanceof WEBGLTexture ||
134
- value instanceof WEBGLFramebuffer
135
- )
136
- ) {
137
- throw new Error(`${this} Bad texture binding for ${name}`);
138
- }
139
- break;
140
- case 'sampler':
141
- log.warn(`Ignoring sampler ${name}`)();
142
- break;
143
- default:
144
- throw new Error(binding.type);
145
- }
117
+ } else {
118
+ if (!value) {
119
+ log.warn(`Unsetting binding "${name}" in render pipeline "${this.id}"`)();
120
+ }
121
+ switch (binding.type) {
122
+ case 'uniform':
123
+ // @ts-expect-error
124
+ if (!(value instanceof WEBGLBuffer) && !(value.buffer instanceof WEBGLBuffer)) {
125
+ throw new Error('buffer value');
126
+ }
127
+ break;
128
+ case 'texture':
129
+ if (
130
+ !(
131
+ value instanceof WEBGLTextureView ||
132
+ value instanceof WEBGLTexture ||
133
+ value instanceof WEBGLFramebuffer
134
+ )
135
+ ) {
136
+ throw new Error(`${this} Bad texture binding for ${name}`);
137
+ }
138
+ break;
139
+ case 'sampler':
140
+ log.warn(`Ignoring sampler ${name}`)();
141
+ break;
142
+ default:
143
+ throw new Error(binding.type);
144
+ }
146
145
 
147
- this.bindings[name] = value;
146
+ this.bindings[name] = value;
147
+ }
148
148
  }
149
149
  }
150
150
 
@@ -191,12 +191,12 @@ export class WEBGLTexture extends Texture {
191
191
  switch (this.dimension) {
192
192
  case '2d':
193
193
  case 'cube':
194
- // prettier-ignore
194
+ // biome-ignore format: preserve layout
195
195
  this.gl.texSubImage2D(glTarget, mipLevel, x, y, width, height, glFormat, glType, image);
196
196
  break;
197
197
  case '2d-array':
198
198
  case '3d':
199
- // prettier-ignore
199
+ // biome-ignore format: preserve layout
200
200
  this.gl.texSubImage3D(glTarget, mipLevel, x, y, z, width, height, depth, glFormat, glType, image);
201
201
  break;
202
202
  default:
@@ -367,14 +367,14 @@ export class WEBGLTexture extends Texture {
367
367
  case 'cube':
368
368
  if (compressed) {
369
369
  if (isFullMipUpload) {
370
- // prettier-ignore
370
+ // biome-ignore format: preserve layout
371
371
  this.gl.compressedTexImage2D(glTarget, mipLevel, glFormat, width, height, 0, compressedData);
372
372
  } else {
373
- // prettier-ignore
373
+ // biome-ignore format: preserve layout
374
374
  this.gl.compressedTexSubImage2D(glTarget, mipLevel, x, y, width, height, glFormat, compressedData);
375
375
  }
376
376
  } else {
377
- // prettier-ignore
377
+ // biome-ignore format: preserve layout
378
378
  this.gl.texSubImage2D(glTarget, mipLevel, x, y, width, height, glFormat, glType, typedArray, sourceElementOffset);
379
379
  }
380
380
  break;
@@ -382,7 +382,7 @@ export class WEBGLTexture extends Texture {
382
382
  case '3d':
383
383
  if (compressed) {
384
384
  if (isFullMipUpload) {
385
- // prettier-ignore
385
+ // biome-ignore format: preserve layout
386
386
  this.gl.compressedTexImage3D(
387
387
  glTarget,
388
388
  mipLevel,
@@ -394,7 +394,7 @@ export class WEBGLTexture extends Texture {
394
394
  compressedData
395
395
  );
396
396
  } else {
397
- // prettier-ignore
397
+ // biome-ignore format: preserve layout
398
398
  this.gl.compressedTexSubImage3D(
399
399
  glTarget,
400
400
  mipLevel,
@@ -409,7 +409,7 @@ export class WEBGLTexture extends Texture {
409
409
  );
410
410
  }
411
411
  } else {
412
- // prettier-ignore
412
+ // biome-ignore format: preserve layout
413
413
  this.gl.texSubImage3D(glTarget, mipLevel, x, y, z, width, height, depthOrArrayLayers, glFormat, glType, typedArray, sourceElementOffset);
414
414
  }
415
415
  break;
@@ -722,7 +722,7 @@ function getWebGLTextureSourceElementOffset(
722
722
  export function getWebGLTextureTarget(
723
723
  dimension: '1d' | '2d' | '2d-array' | 'cube' | 'cube-array' | '3d'
724
724
  ): GLTextureTarget {
725
- // prettier-ignore
725
+ // biome-ignore format: preserve layout
726
726
  switch (dimension) {
727
727
  case '1d': break; // not supported in any WebGL version
728
728
  case '2d': return GL.TEXTURE_2D; // supported in WebGL1
@@ -233,7 +233,10 @@ export class WebGLDevice extends Device {
233
233
  const contextData = getWebGLContextData(this.handle);
234
234
  contextData.device = this; // Update GL context: Link webgl context back to device
235
235
 
236
- this.extensions = contextData.extensions || (contextData.extensions = {});
236
+ if (!contextData.extensions) {
237
+ contextData.extensions = {};
238
+ }
239
+ this.extensions = contextData.extensions;
237
240
 
238
241
  // initialize luma Device fields
239
242
  this.info = getDeviceInfo(this.gl, this.extensions);
@@ -139,7 +139,8 @@ function onGLError(
139
139
  'color: white; background: red; padding: 2px 6px; border-radius: 3px;',
140
140
  message
141
141
  )();
142
- debugger; // eslint-disable-line
142
+ // biome-ignore lint/suspicious/noDebugger: pause immediately on WebGL debug utility errors.
143
+ debugger;
143
144
  throw new Error(message);
144
145
  }
145
146
 
@@ -163,7 +164,8 @@ function onValidateGLFunc(
163
164
  for (const arg of functionArgs) {
164
165
  if (arg === undefined) {
165
166
  functionString = functionString || getFunctionString(functionName, functionArgs);
166
- debugger; // eslint-disable-line
167
+ // biome-ignore lint/suspicious/noDebugger: pause when validating undefined WebGL call arguments.
168
+ debugger;
167
169
  // throw new Error(`Undefined argument: ${functionString}`);
168
170
  }
169
171
  }