@luma.gl/webgl 9.1.0-alpha.1 → 9.1.0-alpha.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/dist/adapter/converters/device-parameters.d.ts.map +1 -1
  2. package/dist/adapter/converters/device-parameters.js +18 -11
  3. package/dist/adapter/converters/texture-formats.d.ts +1 -1
  4. package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
  5. package/dist/adapter/converters/texture-formats.js +9 -16
  6. package/dist/adapter/device-helpers/webgl-device-features.d.ts.map +1 -1
  7. package/dist/adapter/device-helpers/webgl-device-features.js +1 -3
  8. package/dist/adapter/helpers/format-utils.d.ts.map +1 -0
  9. package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
  10. package/dist/adapter/helpers/get-shader-layout.js +1 -3
  11. package/dist/adapter/helpers/typed-array-utils.d.ts.map +1 -0
  12. package/dist/adapter/helpers/webgl-texture-utils.d.ts +89 -22
  13. package/dist/adapter/helpers/webgl-texture-utils.d.ts.map +1 -1
  14. package/dist/adapter/helpers/webgl-texture-utils.js +220 -26
  15. package/dist/adapter/resources/webgl-framebuffer.js +1 -1
  16. package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
  17. package/dist/adapter/resources/webgl-render-pass.js +17 -4
  18. package/dist/adapter/resources/webgl-render-pipeline.d.ts +1 -3
  19. package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
  20. package/dist/adapter/resources/webgl-render-pipeline.js +1 -1
  21. package/dist/adapter/resources/webgl-shader.js +1 -1
  22. package/dist/adapter/resources/webgl-texture.d.ts +21 -3
  23. package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
  24. package/dist/adapter/resources/webgl-texture.js +49 -30
  25. package/dist/adapter/resources/webgl-transform-feedback.js +1 -1
  26. package/dist/adapter/resources/webgl-vertex-array.d.ts.map +1 -1
  27. package/dist/adapter/resources/webgl-vertex-array.js +3 -0
  28. package/dist/adapter/webgl-adapter.d.ts +21 -0
  29. package/dist/adapter/webgl-adapter.d.ts.map +1 -0
  30. package/dist/adapter/webgl-adapter.js +91 -0
  31. package/dist/adapter/webgl-device.d.ts +16 -29
  32. package/dist/adapter/webgl-device.d.ts.map +1 -1
  33. package/dist/adapter/webgl-device.js +34 -114
  34. package/dist/context/debug/spector-types.d.ts +1108 -0
  35. package/dist/context/debug/spector-types.d.ts.map +1 -0
  36. package/dist/context/debug/spector-types.js +697 -0
  37. package/dist/context/debug/spector.d.ts +12 -8
  38. package/dist/context/debug/spector.d.ts.map +1 -1
  39. package/dist/context/debug/spector.js +23 -17
  40. package/dist/context/polyfills/polyfill-webgl1-extensions.d.ts +9 -0
  41. package/dist/context/polyfills/polyfill-webgl1-extensions.d.ts.map +1 -0
  42. package/dist/context/polyfills/polyfill-webgl1-extensions.js +181 -0
  43. package/dist/context/state-tracker/webgl-state-tracker.d.ts +43 -0
  44. package/dist/context/state-tracker/webgl-state-tracker.d.ts.map +1 -0
  45. package/dist/context/state-tracker/{track-context-state.js → webgl-state-tracker.js} +44 -74
  46. package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
  47. package/dist/context/state-tracker/with-parameters.js +5 -4
  48. package/dist/deprecated/accessor.d.ts.map +1 -0
  49. package/dist/{classic → deprecated}/accessor.js +36 -1
  50. package/dist/deprecated/clear.d.ts.map +1 -0
  51. package/dist/{classic → deprecated}/clear.js +2 -0
  52. package/dist/dist.dev.js +816 -642
  53. package/dist/dist.min.js +2 -2
  54. package/dist/index.cjs +815 -648
  55. package/dist/index.cjs.map +4 -4
  56. package/dist/index.d.ts +4 -2
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +4 -3
  59. package/dist/utils/fill-array.d.ts +4 -4
  60. package/dist/utils/fill-array.d.ts.map +1 -1
  61. package/dist/utils/split-uniforms-and-bindings.d.ts +1 -1
  62. package/dist/utils/split-uniforms-and-bindings.d.ts.map +1 -1
  63. package/dist/utils/uid.d.ts +7 -0
  64. package/dist/utils/uid.d.ts.map +1 -0
  65. package/dist/utils/uid.js +14 -0
  66. package/package.json +5 -5
  67. package/src/adapter/converters/device-parameters.ts +18 -12
  68. package/src/adapter/converters/texture-formats.ts +12 -20
  69. package/src/adapter/device-helpers/webgl-device-features.ts +5 -3
  70. package/src/adapter/helpers/get-shader-layout.ts +1 -3
  71. package/src/adapter/helpers/webgl-texture-utils.ts +366 -44
  72. package/src/adapter/resources/webgl-framebuffer.ts +1 -1
  73. package/src/adapter/resources/webgl-render-pass.ts +20 -7
  74. package/src/adapter/resources/webgl-render-pipeline.ts +12 -4
  75. package/src/adapter/resources/webgl-shader.ts +1 -1
  76. package/src/adapter/resources/webgl-texture.ts +76 -30
  77. package/src/adapter/resources/webgl-transform-feedback.ts +1 -1
  78. package/src/adapter/resources/webgl-vertex-array.ts +3 -0
  79. package/src/adapter/webgl-adapter.ts +113 -0
  80. package/src/adapter/webgl-device.ts +45 -139
  81. package/src/context/debug/spector-types.ts +1154 -0
  82. package/src/context/debug/spector.ts +38 -29
  83. package/src/context/polyfills/polyfill-webgl1-extensions.ts +202 -0
  84. package/src/context/state-tracker/{track-context-state.ts → webgl-state-tracker.ts} +55 -94
  85. package/src/context/state-tracker/with-parameters.ts +5 -4
  86. package/src/{classic → deprecated}/accessor.ts +44 -3
  87. package/src/{classic → deprecated}/clear.ts +3 -1
  88. package/src/index.ts +6 -8
  89. package/src/utils/fill-array.ts +4 -4
  90. package/src/utils/split-uniforms-and-bindings.ts +3 -3
  91. package/src/utils/uid.ts +16 -0
  92. package/dist/classic/accessor.d.ts.map +0 -1
  93. package/dist/classic/clear.d.ts.map +0 -1
  94. package/dist/classic/copy-and-blit.d.ts +0 -63
  95. package/dist/classic/copy-and-blit.d.ts.map +0 -1
  96. package/dist/classic/copy-and-blit.js +0 -193
  97. package/dist/classic/format-utils.d.ts.map +0 -1
  98. package/dist/classic/typed-array-utils.d.ts.map +0 -1
  99. package/dist/context/state-tracker/track-context-state.d.ts +0 -22
  100. package/dist/context/state-tracker/track-context-state.d.ts.map +0 -1
  101. package/src/classic/copy-and-blit.ts +0 -318
  102. /package/dist/{classic → adapter/helpers}/format-utils.d.ts +0 -0
  103. /package/dist/{classic → adapter/helpers}/format-utils.js +0 -0
  104. /package/dist/{classic → adapter/helpers}/typed-array-utils.d.ts +0 -0
  105. /package/dist/{classic → adapter/helpers}/typed-array-utils.js +0 -0
  106. /package/dist/{classic → deprecated}/accessor.d.ts +0 -0
  107. /package/dist/{classic → deprecated}/clear.d.ts +0 -0
  108. /package/src/{classic → adapter/helpers}/format-utils.ts +0 -0
  109. /package/src/{classic → adapter/helpers}/typed-array-utils.ts +0 -0
@@ -1,8 +1,11 @@
1
1
  // luma.gl
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
- // import {Buffer} from '@luma.gl/core';
4
+ import { Framebuffer } from '@luma.gl/core';
5
5
  import { GL } from '@luma.gl/constants';
6
+ import { getGLTypeFromTypedArray, getTypedArrayFromGLType } from "./typed-array-utils.js";
7
+ import { glFormatToComponents, glTypeToBytes } from "./format-utils.js";
8
+ import { WEBGLTexture } from "../resources/webgl-texture.js";
6
9
  /** A "border" parameter is required in many WebGL texture APIs, but must always be 0... */
7
10
  const BORDER = 0;
8
11
  /**
@@ -19,7 +22,7 @@ const BORDER = 0;
19
22
  export function initializeTextureStorage(gl, levels, options) {
20
23
  const { dimension, width, height, depth = 0 } = options;
21
24
  const { glInternalFormat } = options;
22
- const glTarget = options.glTarget; // getCubeTargetWebGL(options.glTarget, dimension, depth);
25
+ const glTarget = options.glTarget; // getWebGLCubeFaceTarget(options.glTarget, dimension, depth);
23
26
  switch (dimension) {
24
27
  case '2d-array':
25
28
  case '3d':
@@ -32,23 +35,26 @@ export function initializeTextureStorage(gl, levels, options) {
32
35
  /**
33
36
  * Copy a region of compressed data from a GPU memory buffer into this texture.
34
37
  */
35
- export function copyCPUImageToMipLevel(gl, image, options) {
36
- const { dimension, width, height, depth = 0, level = 0 } = options;
38
+ export function copyExternalImageToMipLevel(gl, handle, image, options) {
39
+ const { width, height } = options;
40
+ const { dimension, depth = 0, mipLevel = 0 } = options;
37
41
  const { x = 0, y = 0, z = 0 } = options;
38
42
  const { glFormat, glType } = options;
39
- const glTarget = getCubeTargetWebGL(options.glTarget, dimension, depth);
40
- // width = size.width,
41
- // height = size.height
43
+ const glTarget = getWebGLCubeFaceTarget(options.glTarget, dimension, depth);
42
44
  switch (dimension) {
43
45
  case '2d-array':
44
46
  case '3d':
47
+ gl.bindTexture(glTarget, handle);
45
48
  // prettier-ignore
46
- gl.texSubImage3D(glTarget, level, x, y, z, width, height, depth, glFormat, glType, image);
49
+ gl.texSubImage3D(glTarget, mipLevel, x, y, z, width, height, depth, glFormat, glType, image);
50
+ gl.bindTexture(glTarget, null);
47
51
  break;
48
52
  case '2d':
49
53
  case 'cube':
54
+ gl.bindTexture(glTarget, handle);
50
55
  // prettier-ignore
51
- gl.texSubImage2D(glTarget, level, x, y, width, height, glFormat, glType, image);
56
+ gl.texSubImage2D(glTarget, mipLevel, x, y, width, height, glFormat, glType, image);
57
+ gl.bindTexture(glTarget, null);
52
58
  break;
53
59
  default:
54
60
  throw new Error(dimension);
@@ -58,31 +64,32 @@ export function copyCPUImageToMipLevel(gl, image, options) {
58
64
  * Copy a region of data from a CPU memory buffer into this texture.
59
65
  */
60
66
  export function copyCPUDataToMipLevel(gl, typedArray, options) {
61
- const { dimension, width, height, depth = 0, level = 0, byteOffset = 0 } = options;
67
+ const { dimension, width, height, depth = 0, mipLevel = 0, byteOffset = 0 } = options;
62
68
  const { x = 0, y = 0, z = 0 } = options;
63
69
  const { glFormat, glType, compressed } = options;
64
- const glTarget = getCubeTargetWebGL(options.glTarget, dimension, depth);
70
+ const glTarget = getWebGLCubeFaceTarget(options.glTarget, dimension, depth);
71
+ // gl.bindTexture(glTarget, null);
65
72
  switch (dimension) {
66
73
  case '2d-array':
67
74
  case '3d':
68
75
  if (compressed) {
69
76
  // prettier-ignore
70
- gl.compressedTexSubImage3D(glTarget, level, x, y, z, width, height, depth, glFormat, typedArray, byteOffset); // , byteLength
77
+ gl.compressedTexSubImage3D(glTarget, mipLevel, x, y, z, width, height, depth, glFormat, typedArray, byteOffset); // , byteLength
71
78
  }
72
79
  else {
73
80
  // prettier-ignore
74
- gl.texSubImage3D(glTarget, level, x, y, z, width, height, depth, glFormat, glType, typedArray, byteOffset); // , byteLength
81
+ gl.texSubImage3D(glTarget, mipLevel, x, y, z, width, height, depth, glFormat, glType, typedArray, byteOffset); // , byteLength
75
82
  }
76
83
  break;
77
84
  case '2d':
78
85
  case 'cube':
79
86
  if (compressed) {
80
87
  // prettier-ignore
81
- gl.compressedTexSubImage2D(glTarget, level, x, y, width, height, glFormat, typedArray, byteOffset); // , byteLength
88
+ gl.compressedTexSubImage2D(glTarget, mipLevel, x, y, width, height, glFormat, typedArray, byteOffset); // , byteLength
82
89
  }
83
90
  else {
84
91
  // prettier-ignore
85
- gl.texSubImage2D(glTarget, level, x, y, width, height, glFormat, glType, typedArray, byteOffset); // , byteLength
92
+ gl.texSubImage2D(glTarget, mipLevel, x, y, width, height, glFormat, glType, typedArray, byteOffset); // , byteLength
86
93
  }
87
94
  break;
88
95
  default:
@@ -93,10 +100,10 @@ export function copyCPUDataToMipLevel(gl, typedArray, options) {
93
100
  * Copy a region of compressed data from a GPU memory buffer into this texture.
94
101
  */
95
102
  export function copyGPUBufferToMipLevel(gl, webglBuffer, byteLength, options) {
96
- const { dimension, width, height, depth = 0, level = 0, byteOffset = 0 } = options;
103
+ const { dimension, width, height, depth = 0, mipLevel = 0, byteOffset = 0 } = options;
97
104
  const { x = 0, y = 0, z = 0 } = options;
98
105
  const { glFormat, glType, compressed } = options;
99
- const glTarget = getCubeTargetWebGL(options.glTarget, dimension, depth);
106
+ const glTarget = getWebGLCubeFaceTarget(options.glTarget, dimension, depth);
100
107
  gl.bindBuffer(35052, webglBuffer);
101
108
  switch (dimension) {
102
109
  case '2d-array':
@@ -105,22 +112,22 @@ export function copyGPUBufferToMipLevel(gl, webglBuffer, byteLength, options) {
105
112
  if (compressed) {
106
113
  // TODO enable extension?
107
114
  // prettier-ignore
108
- gl.compressedTexSubImage3D(glTarget, level, x, y, z, width, height, depth, glFormat, byteLength, byteOffset);
115
+ gl.compressedTexSubImage3D(glTarget, mipLevel, x, y, z, width, height, depth, glFormat, byteLength, byteOffset);
109
116
  }
110
117
  else {
111
118
  // prettier-ignore
112
- gl.texSubImage3D(glTarget, level, x, y, z, width, height, depth, glFormat, glType, byteOffset);
119
+ gl.texSubImage3D(glTarget, mipLevel, x, y, z, width, height, depth, glFormat, glType, byteOffset);
113
120
  }
114
121
  break;
115
122
  case '2d':
116
123
  case 'cube':
117
124
  if (compressed) {
118
125
  // prettier-ignore
119
- gl.compressedTexSubImage2D(glTarget, level, x, y, width, height, glFormat, byteLength, byteOffset);
126
+ gl.compressedTexSubImage2D(glTarget, mipLevel, x, y, width, height, glFormat, byteLength, byteOffset);
120
127
  }
121
128
  else {
122
129
  // prettier-ignore
123
- gl.texSubImage2D(glTarget, level, x, y, width, height, BORDER, glFormat, byteOffset);
130
+ gl.texSubImage2D(glTarget, mipLevel, x, y, width, height, BORDER, glFormat, byteOffset);
124
131
  }
125
132
  break;
126
133
  default:
@@ -143,9 +150,10 @@ export function getWebGLTextureTarget(dimension) {
143
150
  }
144
151
  /**
145
152
  * In WebGL, cube maps specify faces by overriding target instead of using the depth parameter.
153
+ * @note We still bind the texture using GL.TEXTURE_CUBE_MAP, but we need to use the face-specific target when setting mip levels.
146
154
  * @returns glTarget unchanged, if dimension !== 'cube'.
147
155
  */
148
- function getCubeTargetWebGL(glTarget, dimension, level) {
156
+ export function getWebGLCubeFaceTarget(glTarget, dimension, level) {
149
157
  return dimension === 'cube' ? 34069 + level : glTarget;
150
158
  }
151
159
  // texImage methods
@@ -156,7 +164,7 @@ function getCubeTargetWebGL(glTarget, dimension, level) {
156
164
  export function clearMipLevel(gl: WebGL2RenderingContext, options: WebGLSetTextureOptions): void {
157
165
  const {dimension, width, height, depth = 0, level = 0} = options;
158
166
  const {glInternalFormat, glFormat, glType, compressed} = options;
159
- const glTarget = getCubeTargetWebGL(options.glTarget, dimension, depth);
167
+ const glTarget = getWebGLCubeFaceTarget(options.glTarget, dimension, depth);
160
168
 
161
169
  switch (dimension) {
162
170
  case '2d-array':
@@ -199,7 +207,7 @@ export function setMipLevelFromExternalImage(
199
207
  const {dimension, width, height, depth = 0, level = 0} = options;
200
208
  const {glInternalFormat, glType} = options;
201
209
 
202
- const glTarget = getCubeTargetWebGL(options.glTarget, dimension, depth);
210
+ const glTarget = getWebGLCubeFaceTarget(options.glTarget, dimension, depth);
203
211
 
204
212
  // TODO - we can't change texture width (due to WebGPU limitations) -
205
213
  // and the width/heigh of an external image is implicit, so why do we need to extract it?
@@ -250,7 +258,7 @@ export function setMipLevelFromTypedArray(
250
258
  const {dimension, width, height, depth = 0, level = 0, offset = 0} = options;
251
259
  const {glInternalFormat, glFormat, glType, compressed} = options;
252
260
 
253
- const glTarget = getCubeTargetWebGL(options.glTarget, dimension, depth);
261
+ const glTarget = getWebGLCubeFaceTarget(options.glTarget, dimension, depth);
254
262
 
255
263
  withGLParameters(gl, parameters, () => {
256
264
  switch (dimension) {
@@ -329,7 +337,7 @@ export function setMipLevelFromGPUBuffer(
329
337
  ): void {
330
338
  const {dimension, width, height, depth = 0, level = 0, byteOffset = 0} = options;
331
339
  const {glInternalFormat, glFormat, glType, compressed} = options;
332
- const glTarget = getCubeTargetWebGL(options.glTarget, dimension, depth);
340
+ const glTarget = getWebGLCubeFaceTarget(options.glTarget, dimension, depth);
333
341
 
334
342
  const webglBuffer = buffer as WEBGLBuffer;
335
343
  const imageSize = buffer.byteLength;
@@ -366,3 +374,189 @@ export function setMipLevelFromGPUBuffer(
366
374
  gl.bindBuffer(GL.PIXEL_UNPACK_BUFFER, null);
367
375
  }
368
376
  */
377
+ /**
378
+ * Copies data from a type or a Texture object into ArrayBuffer object.
379
+ * App can provide targetPixelArray or have it auto allocated by this method
380
+ * newly allocated by this method unless provided by app.
381
+ * @deprecated Use CommandEncoder.copyTextureToBuffer and Buffer.read
382
+ * @note Slow requires roundtrip to GPU
383
+ *
384
+ * @param source
385
+ * @param options
386
+ * @returns pixel array,
387
+ */
388
+ export function readPixelsToArray(source, options) {
389
+ const { sourceX = 0, sourceY = 0, sourceAttachment = 36064 // TODO - support gl.readBuffer
390
+ } = options || {};
391
+ let { target = null,
392
+ // following parameters are auto deduced if not provided
393
+ sourceWidth, sourceHeight, sourceDepth, sourceFormat, sourceType } = options || {};
394
+ const { framebuffer, deleteFramebuffer } = getFramebuffer(source);
395
+ // assert(framebuffer);
396
+ const { gl, handle } = framebuffer;
397
+ const attachment = sourceAttachment - 36064;
398
+ sourceWidth ||= framebuffer.width;
399
+ sourceHeight ||= framebuffer.height;
400
+ // TODO - Set and unset gl.readBuffer
401
+ // if (sourceAttachment === GL.COLOR_ATTACHMENT0 && handle === null) {
402
+ // sourceAttachment = GL.FRONT;
403
+ // }
404
+ sourceDepth = framebuffer.colorAttachments[attachment]?.texture?.depth || 1;
405
+ sourceFormat ||= framebuffer.colorAttachments[attachment]?.texture?.glFormat || 6408;
406
+ // Deduce the type from color attachment if not provided.
407
+ sourceType ||= framebuffer.colorAttachments[attachment]?.texture?.glType || 5121;
408
+ // Deduce type and allocated pixelArray if needed
409
+ target = getPixelArray(target, sourceType, sourceFormat, sourceWidth, sourceHeight, sourceDepth);
410
+ // Pixel array available, if necessary, deduce type from it.
411
+ sourceType = sourceType || getGLTypeFromTypedArray(target);
412
+ const prevHandle = gl.bindFramebuffer(36160, handle);
413
+ gl.readPixels(sourceX, sourceY, sourceWidth, sourceHeight, sourceFormat, sourceType, target);
414
+ // @ts-expect-error
415
+ gl.bindFramebuffer(36160, prevHandle || null);
416
+ if (deleteFramebuffer) {
417
+ framebuffer.destroy();
418
+ }
419
+ return target;
420
+ }
421
+ /**
422
+ * Copies data from a Framebuffer or a Texture object into a Buffer object.
423
+ * NOTE: doesn't wait for copy to be complete, it programs GPU to perform a DMA transffer.
424
+ * @deprecated Use CommandEncoder
425
+ * @param source
426
+ * @param options
427
+ */
428
+ export function readPixelsToBuffer(source, options) {
429
+ const { target, sourceX = 0, sourceY = 0, sourceFormat = 6408, targetByteOffset = 0 } = options || {};
430
+ // following parameters are auto deduced if not provided
431
+ let { sourceWidth, sourceHeight, sourceType } = options || {};
432
+ const { framebuffer, deleteFramebuffer } = getFramebuffer(source);
433
+ // assert(framebuffer);
434
+ sourceWidth = sourceWidth || framebuffer.width;
435
+ sourceHeight = sourceHeight || framebuffer.height;
436
+ // Asynchronous read (PIXEL_PACK_BUFFER) is WebGL2 only feature
437
+ const webglFramebuffer = framebuffer;
438
+ // deduce type if not available.
439
+ sourceType = sourceType || 5121;
440
+ let webglBufferTarget = target;
441
+ if (!webglBufferTarget) {
442
+ // Create new buffer with enough size
443
+ const components = glFormatToComponents(sourceFormat);
444
+ const byteCount = glTypeToBytes(sourceType);
445
+ const byteLength = targetByteOffset + sourceWidth * sourceHeight * components * byteCount;
446
+ webglBufferTarget = webglFramebuffer.device.createBuffer({ byteLength });
447
+ }
448
+ // TODO(donmccurdy): Do we have tests to confirm this is working?
449
+ const commandEncoder = source.device.createCommandEncoder();
450
+ commandEncoder.copyTextureToBuffer({
451
+ source: source,
452
+ width: sourceWidth,
453
+ height: sourceHeight,
454
+ origin: [sourceX, sourceY],
455
+ destination: webglBufferTarget,
456
+ byteOffset: targetByteOffset
457
+ });
458
+ commandEncoder.destroy();
459
+ if (deleteFramebuffer) {
460
+ framebuffer.destroy();
461
+ }
462
+ return webglBufferTarget;
463
+ }
464
+ /**
465
+ * Copy a rectangle from a Framebuffer or Texture object into a texture (at an offset)
466
+ * @deprecated Use CommandEncoder
467
+ */
468
+ // eslint-disable-next-line complexity, max-statements
469
+ export function copyToTexture(source, target, options) {
470
+ const { sourceX = 0, sourceY = 0,
471
+ // attachment = GL.COLOR_ATTACHMENT0, // TODO - support gl.readBuffer
472
+ targetMipmaplevel = 0, targetInternalFormat = 6408 } = options || {};
473
+ let { targetX, targetY, targetZ, width, // defaults to target width
474
+ height // defaults to target height
475
+ } = options || {};
476
+ const { framebuffer, deleteFramebuffer } = getFramebuffer(source);
477
+ // assert(framebuffer);
478
+ const webglFramebuffer = framebuffer;
479
+ const { device, handle } = webglFramebuffer;
480
+ const isSubCopy = typeof targetX !== 'undefined' ||
481
+ typeof targetY !== 'undefined' ||
482
+ typeof targetZ !== 'undefined';
483
+ targetX = targetX || 0;
484
+ targetY = targetY || 0;
485
+ targetZ = targetZ || 0;
486
+ const prevHandle = device.gl.bindFramebuffer(36160, handle);
487
+ // TODO - support gl.readBuffer (WebGL2 only)
488
+ // const prevBuffer = gl.readBuffer(attachment);
489
+ // assert(target);
490
+ let texture = null;
491
+ let textureTarget;
492
+ if (target instanceof WEBGLTexture) {
493
+ texture = target;
494
+ width = Number.isFinite(width) ? width : texture.width;
495
+ height = Number.isFinite(height) ? height : texture.height;
496
+ texture?.bind(0);
497
+ // @ts-ignore
498
+ textureTarget = texture.target;
499
+ }
500
+ else {
501
+ // @ts-ignore
502
+ textureTarget = target;
503
+ }
504
+ if (!isSubCopy) {
505
+ device.gl.copyTexImage2D(textureTarget, targetMipmaplevel, targetInternalFormat, sourceX, sourceY, width, height, 0 /* border must be 0 */);
506
+ }
507
+ else {
508
+ switch (textureTarget) {
509
+ case 3553:
510
+ case 34067:
511
+ device.gl.copyTexSubImage2D(textureTarget, targetMipmaplevel, targetX, targetY, sourceX, sourceY, width, height);
512
+ break;
513
+ case 35866:
514
+ case 32879:
515
+ device.gl.copyTexSubImage3D(textureTarget, targetMipmaplevel, targetX, targetY, targetZ, sourceX, sourceY, width, height);
516
+ break;
517
+ default:
518
+ }
519
+ }
520
+ if (texture) {
521
+ texture.unbind();
522
+ }
523
+ // @ts-expect-error
524
+ device.gl.bindFramebuffer(36160, prevHandle || null);
525
+ if (deleteFramebuffer) {
526
+ framebuffer.destroy();
527
+ }
528
+ return texture;
529
+ }
530
+ function getFramebuffer(source) {
531
+ if (!(source instanceof Framebuffer)) {
532
+ return { framebuffer: toFramebuffer(source), deleteFramebuffer: true };
533
+ }
534
+ return { framebuffer: source, deleteFramebuffer: false };
535
+ }
536
+ /**
537
+ * Wraps a given texture into a framebuffer object, that can be further used
538
+ * to read data from the texture object.
539
+ */
540
+ export function toFramebuffer(texture, props) {
541
+ const { device, width, height, id } = texture;
542
+ const framebuffer = device.createFramebuffer({
543
+ ...props,
544
+ id: `framebuffer-for-${id}`,
545
+ width,
546
+ height,
547
+ colorAttachments: [texture]
548
+ });
549
+ return framebuffer;
550
+ }
551
+ // eslint-disable-next-line max-params
552
+ function getPixelArray(pixelArray, type, format, width, height, depth) {
553
+ if (pixelArray) {
554
+ return pixelArray;
555
+ }
556
+ // Allocate pixel array if not already available, using supplied type
557
+ type = type || 5121;
558
+ const ArrayType = getTypedArrayFromGLType(type, { clamped: false });
559
+ const components = glFormatToComponents(format);
560
+ // TODO - check for composite type (components = 1).
561
+ return new ArrayType(width * height * components);
562
+ }
@@ -123,7 +123,7 @@ export class WEBGLFramebuffer extends Framebuffer {
123
123
  switch (texture.glTarget) {
124
124
  case 35866:
125
125
  case 32879:
126
- gl.framebufferTextureLayer(36160, attachment, texture.glTarget, level, layer);
126
+ gl.framebufferTextureLayer(36160, attachment, texture.handle, level, layer);
127
127
  break;
128
128
  case 34067:
129
129
  // layer must be a cubemap face (or if index, converted to cube map face)
@@ -1 +1 @@
1
- {"version":3,"file":"webgl-render-pass.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgl-render-pass.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAC,UAAU,EAAE,eAAe,EAAE,oBAAoB,EAAC,MAAM,eAAe,CAAC;AAChF,OAAO,EAAC,WAAW,EAAC,2BAAwB;AAC5C,OAAO,EAAK,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAcpD,qBAAa,eAAgB,SAAQ,UAAU;IAC7C,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAE7B,8DAA8D;IAC9D,YAAY,EAAE,YAAY,CAAC;gBAEf,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,eAAe;IAYvD,GAAG,IAAI,IAAI;IAKX,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IACxC,aAAa,IAAI,IAAI;IACrB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAO5C;;OAEG;IACH,aAAa,CAAC,UAAU,GAAE,oBAAyB,GAAG,IAAI;IAmD1D,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAKpC,iBAAiB,IAAI,IAAI;IAOlC;;OAEG;IACH,SAAS,CAAC,KAAK,IAAI,IAAI;IA+BvB;;OAEG;IACH,SAAS,CAAC,gBAAgB,CAAC,UAAU,GAAE,MAAU,EAAE,KAAK,GAAE,YAA2B;CAwCtF"}
1
+ {"version":3,"file":"webgl-render-pass.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgl-render-pass.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,YAAY,EAAe,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAC,UAAU,EAAE,eAAe,EAAE,oBAAoB,EAAC,MAAM,eAAe,CAAC;AAChF,OAAO,EAAC,WAAW,EAAC,2BAAwB;AAC5C,OAAO,EAAK,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAapD,qBAAa,eAAgB,SAAQ,UAAU;IAC7C,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAE7B,8DAA8D;IAC9D,YAAY,EAAE,YAAY,CAAC;gBAEf,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,eAAe;IA0BvD,GAAG,IAAI,IAAI;IAKX,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IACxC,aAAa,IAAI,IAAI;IACrB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAO5C;;OAEG;IACH,aAAa,CAAC,UAAU,GAAE,oBAAyB,GAAG,IAAI;IAmD1D,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAKpC,iBAAiB,IAAI,IAAI;IAOlC;;OAEG;IACH,SAAS,CAAC,KAAK,IAAI,IAAI;IA+BvB;;OAEG;IACH,SAAS,CAAC,gBAAgB,CAAC,UAAU,GAAE,MAAU,EAAE,KAAK,GAAE,YAA2B;CAwCtF"}
@@ -5,7 +5,6 @@ import { RenderPass } from '@luma.gl/core';
5
5
  import { GL } from '@luma.gl/constants';
6
6
  import { withGLParameters } from "../../context/state-tracker/with-parameters.js";
7
7
  import { setGLParameters } from "../../context/parameters/unified-parameter-api.js";
8
- import { pushContextState, popContextState } from "../../context/state-tracker/track-context-state.js";
9
8
  // Should collapse during minification
10
9
  const GL_DEPTH_BUFFER_BIT = 0x00000100;
11
10
  const GL_STENCIL_BUFFER_BIT = 0x00000400;
@@ -19,14 +18,28 @@ export class WEBGLRenderPass extends RenderPass {
19
18
  constructor(device, props) {
20
19
  super(device, props);
21
20
  this.device = device;
21
+ // If no viewport is provided, apply reasonably defaults
22
+ let viewport;
23
+ if (!props?.parameters?.viewport) {
24
+ if (props?.framebuffer) {
25
+ // Set the viewport to the size of the framebuffer
26
+ const { width, height } = props.framebuffer;
27
+ viewport = [0, 0, width, height];
28
+ }
29
+ else {
30
+ // Instead of using our own book-keeping, we can just read the values from the WebGL context
31
+ const [width, height] = device.getCanvasContext().getDrawingBufferSize();
32
+ viewport = [0, 0, width, height];
33
+ }
34
+ }
22
35
  // TODO - do parameters (scissorRect) affect the clear operation?
23
- pushContextState(this.device.gl);
24
- this.setParameters(this.props.parameters);
36
+ this.device.pushState();
37
+ this.setParameters({ viewport, ...this.props.parameters });
25
38
  // Hack - for now WebGL draws in "immediate mode" (instead of queueing the operations)...
26
39
  this.clear();
27
40
  }
28
41
  end() {
29
- popContextState(this.device.gl);
42
+ this.device.popState();
30
43
  // should add commands to CommandEncoder.
31
44
  }
32
45
  pushDebugGroup(groupLabel) { }
@@ -1,6 +1,4 @@
1
- import type { RenderPipelineProps, RenderPipelineParameters, PrimitiveTopology } from '@luma.gl/core';
2
- import type { ShaderLayout, UniformValue, Binding } from '@luma.gl/core';
3
- import type { RenderPass, VertexArray } from '@luma.gl/core';
1
+ import type { RenderPipelineProps, RenderPipelineParameters, PrimitiveTopology, ShaderLayout, UniformValue, Binding, RenderPass, VertexArray } from '@luma.gl/core';
4
2
  import { RenderPipeline } from '@luma.gl/core';
5
3
  import { WebGLDevice } from "../webgl-device.js";
6
4
  import { WEBGLShader } from "./webgl-shader.js";
@@ -1 +1 @@
1
- {"version":3,"file":"webgl-render-pipeline.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgl-render-pipeline.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,mBAAmB,EAAE,wBAAwB,EAAE,iBAAiB,EAAC,MAAM,eAAe,CAAC;AACpG,OAAO,KAAK,EAAC,YAAY,EAAE,YAAY,EAAE,OAAO,EAAC,MAAM,eAAe,CAAC;AACvE,OAAO,KAAK,EAAC,UAAU,EAAE,WAAW,EAAC,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAC,cAAc,EAAM,MAAM,eAAe,CAAC;AAUlD,OAAO,EAAC,WAAW,EAAC,2BAAwB;AAE5C,OAAO,EAAC,WAAW,EAAC,0BAAuB;AAK3C,OAAO,EAAC,sBAAsB,EAAC,sCAAmC;AAKlE,oCAAoC;AACpC,qBAAa,mBAAoB,SAAQ,cAAc;IACrD,yDAAyD;IACzD,MAAM,EAAE,WAAW,CAAC;IACpB,yCAAyC;IACzC,MAAM,EAAE,YAAY,CAAC;IACrB,oBAAoB;IACpB,EAAE,EAAE,WAAW,CAAC;IAChB,sBAAsB;IACtB,EAAE,EAAE,WAAW,CAAC;IAChB,mEAAmE;IACnE,kBAAkB,EAAE,YAAY,CAAC;IAEjC,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAM;IAC5C,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IACvC,qBAAqB;IACrB,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAQ;IAEjC,aAAa,EAAE,MAAM,CAAK;IAC1B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAM;gBAEnC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,mBAAmB;IA8BlD,OAAO,IAAI,IAAI;IAQxB;;;OAGG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE;QAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAC,GAAG,IAAI;IAyD3F;;;OAGG;IACH,IAAI,CAAC,OAAO,EAAE;QACZ,UAAU,EAAE,UAAU,CAAC;QACvB,UAAU,CAAC,EAAE,wBAAwB,CAAC;QACtC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;QAC7B,WAAW,EAAE,WAAW,CAAC;QACzB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,iBAAiB,CAAC,EAAE,sBAAsB,CAAC;KAC5C,GAAG,OAAO;IAgGF,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC;cAkBhD,YAAY;IA2B5B,wFAAwF;IACxF,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,YAAY;IAmB9D;;;;OAIG;IACH,cAAc,IAAI,SAAS,GAAG,SAAS,GAAG,YAAY;IAmBtD,6DAA6D;IACvD,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAoB3C;;;;OAIG;IACH,sBAAsB;IAsBtB,iDAAiD;IACjD,cAAc;IAyFd;;;OAGG;IACH,cAAc;CASf"}
1
+ {"version":3,"file":"webgl-render-pipeline.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgl-render-pipeline.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,mBAAmB,EACnB,wBAAwB,EACxB,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,OAAO,EACP,UAAU,EACV,WAAW,EACZ,MAAM,eAAe,CAAC;AACvB,OAAO,EAAC,cAAc,EAAM,MAAM,eAAe,CAAC;AAUlD,OAAO,EAAC,WAAW,EAAC,2BAAwB;AAE5C,OAAO,EAAC,WAAW,EAAC,0BAAuB;AAK3C,OAAO,EAAC,sBAAsB,EAAC,sCAAmC;AAKlE,oCAAoC;AACpC,qBAAa,mBAAoB,SAAQ,cAAc;IACrD,yDAAyD;IACzD,MAAM,EAAE,WAAW,CAAC;IACpB,yCAAyC;IACzC,MAAM,EAAE,YAAY,CAAC;IACrB,oBAAoB;IACpB,EAAE,EAAE,WAAW,CAAC;IAChB,sBAAsB;IACtB,EAAE,EAAE,WAAW,CAAC;IAChB,mEAAmE;IACnE,kBAAkB,EAAE,YAAY,CAAC;IAEjC,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAM;IAC5C,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IACvC,qBAAqB;IACrB,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAQ;IAEjC,aAAa,EAAE,MAAM,CAAK;IAC1B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAM;gBAEnC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,mBAAmB;IA8BlD,OAAO,IAAI,IAAI;IAQxB;;;OAGG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE;QAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAC,GAAG,IAAI;IA0D3F;;;OAGG;IACH,IAAI,CAAC,OAAO,EAAE;QACZ,UAAU,EAAE,UAAU,CAAC;QACvB,UAAU,CAAC,EAAE,wBAAwB,CAAC;QACtC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;QAC7B,WAAW,EAAE,WAAW,CAAC;QACzB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,iBAAiB,CAAC,EAAE,sBAAsB,CAAC;KAC5C,GAAG,OAAO;IAgGF,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC;cAkBhD,YAAY;IA2B5B,wFAAwF;IACxF,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,YAAY;IAmB9D;;;;OAIG;IACH,cAAc,IAAI,SAAS,GAAG,SAAS,GAAG,YAAY;IAmBtD,6DAA6D;IACvD,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAoB3C;;;;OAIG;IACH,sBAAsB;IAsBtB,iDAAiD;IACjD,cAAc;IAyFd;;;OAGG;IACH,cAAc;CASf"}
@@ -85,7 +85,7 @@ export class WEBGLRenderPipeline extends RenderPipeline {
85
85
  .map(binding => `"${binding.name}"`)
86
86
  .join(', ');
87
87
  if (!options?.disableWarnings) {
88
- log.warn(`Unknown binding "${name}" in render pipeline "${this.id}", expected one of ${validBindings}`)();
88
+ log.warn(`No binding "${name}" in render pipeline "${this.id}", expected one of ${validBindings}`, value)();
89
89
  }
90
90
  continue; // eslint-disable-line no-continue
91
91
  }
@@ -49,7 +49,7 @@ export class WEBGLShader extends Shader {
49
49
  // PRIVATE METHODS
50
50
  /** Compile a shader and get compilation status */
51
51
  async _compile(source) {
52
- const addGLSLVersion = (source) => source.startsWith('#version ') ? source : `#version 100\n${source}`;
52
+ const addGLSLVersion = (source) => source.startsWith('#version ') ? source : `#version 300 es\n${source}`;
53
53
  source = addGLSLVersion(source);
54
54
  const { gl } = this.device;
55
55
  gl.shaderSource(this.handle, source);
@@ -1,4 +1,4 @@
1
- import type { Device, TextureProps, TextureViewProps, Sampler, SamplerProps, TextureCubeFace, Texture1DData, Texture2DData, Texture3DData, TextureCubeData, TextureArrayData, TextureCubeArrayData } from '@luma.gl/core';
1
+ import type { Device, TextureProps, TextureViewProps, Sampler, SamplerProps, TextureCubeFace, ExternalImage, Texture1DData, Texture2DData, Texture3DData, TextureCubeData, TextureArrayData, TextureCubeArrayData } from '@luma.gl/core';
2
2
  import { Texture } from '@luma.gl/core';
3
3
  import { GL, GLPixelType, GLSamplerParameters, GLTexelDataFormat, GLTextureTarget } from '@luma.gl/constants';
4
4
  import { WebGLDevice } from "../webgl-device.js";
@@ -52,9 +52,27 @@ export declare class WEBGLTexture extends Texture {
52
52
  /** Update external texture (video frame or canvas) */
53
53
  update(): void;
54
54
  generateMipmap(params?: {}): void;
55
+ copyExternalImage(options: {
56
+ image: ExternalImage;
57
+ sourceX?: number;
58
+ sourceY?: number;
59
+ width?: number;
60
+ height?: number;
61
+ depth?: number;
62
+ mipLevel?: number;
63
+ x?: number;
64
+ y?: number;
65
+ z?: number;
66
+ aspect?: 'all' | 'stencil-only' | 'depth-only';
67
+ colorSpace?: 'srgb';
68
+ premultipliedAlpha?: boolean;
69
+ }): {
70
+ width: number;
71
+ height: number;
72
+ };
55
73
  setTexture1DData(data: Texture1DData): void;
56
74
  /** Set a simple texture */
57
- setTexture2DData(lodData: Texture2DData, depth?: number, glTarget?: GLTextureTarget): void;
75
+ setTexture2DData(lodData: Texture2DData, depth?: number): void;
58
76
  /**
59
77
  * Sets a 3D texture
60
78
  * @param data
@@ -89,7 +107,7 @@ export declare class WEBGLTexture extends Texture {
89
107
  * Copy a region of data from a CPU memory buffer into this texture.
90
108
  * @todo - GLUnpackParameters parameters
91
109
  */
92
- protected _setMipLevel(depth: number, level: number, textureData: Texture2DData, offset?: number): void;
110
+ protected _setMipLevel(depth: number, mipLevel: number, textureData: Texture2DData, glTarget?: GL): void;
93
111
  getActiveUnit(): number;
94
112
  bind(textureUnit?: number): number;
95
113
  unbind(textureUnit?: number): number | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"webgl-texture.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgl-texture.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webgl-texture.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgl-texture.ts"],"names":[],"mappings":"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"}