@luma.gl/webgl 9.2.0-alpha.1 → 9.2.0-alpha.2

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 (72) hide show
  1. package/dist/adapter/converters/sampler-parameters.js +13 -2
  2. package/dist/adapter/converters/sampler-parameters.js.map +1 -1
  3. package/dist/adapter/converters/webgl-shadertypes.d.ts.map +1 -1
  4. package/dist/adapter/converters/webgl-shadertypes.js +1 -2
  5. package/dist/adapter/converters/webgl-shadertypes.js.map +1 -1
  6. package/dist/adapter/converters/webgl-texture-table.d.ts.map +1 -1
  7. package/dist/adapter/converters/webgl-texture-table.js +15 -11
  8. package/dist/adapter/converters/webgl-texture-table.js.map +1 -1
  9. package/dist/adapter/converters/webgl-vertex-formats.d.ts.map +1 -1
  10. package/dist/adapter/converters/webgl-vertex-formats.js +1 -2
  11. package/dist/adapter/converters/webgl-vertex-formats.js.map +1 -1
  12. package/dist/adapter/helpers/webgl-texture-utils.d.ts +0 -217
  13. package/dist/adapter/helpers/webgl-texture-utils.d.ts.map +1 -1
  14. package/dist/adapter/helpers/webgl-texture-utils.js +3 -3
  15. package/dist/adapter/helpers/webgl-texture-utils.js.map +1 -1
  16. package/dist/adapter/resources/webgl-buffer.d.ts +7 -7
  17. package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
  18. package/dist/adapter/resources/webgl-buffer.js +24 -15
  19. package/dist/adapter/resources/webgl-buffer.js.map +1 -1
  20. package/dist/adapter/resources/webgl-command-buffer.d.ts +2 -1
  21. package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
  22. package/dist/adapter/resources/webgl-command-buffer.js +1 -0
  23. package/dist/adapter/resources/webgl-command-buffer.js.map +1 -1
  24. package/dist/adapter/resources/webgl-framebuffer.d.ts +2 -2
  25. package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
  26. package/dist/adapter/resources/webgl-framebuffer.js.map +1 -1
  27. package/dist/adapter/resources/webgl-query-set.d.ts +2 -2
  28. package/dist/adapter/resources/webgl-query-set.d.ts.map +1 -1
  29. package/dist/adapter/resources/webgl-query-set.js.map +1 -1
  30. package/dist/adapter/resources/webgl-render-pass.d.ts +1 -0
  31. package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
  32. package/dist/adapter/resources/webgl-render-pass.js +1 -0
  33. package/dist/adapter/resources/webgl-render-pass.js.map +1 -1
  34. package/dist/adapter/resources/webgl-render-pipeline.d.ts +2 -2
  35. package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
  36. package/dist/adapter/resources/webgl-render-pipeline.js +2 -1
  37. package/dist/adapter/resources/webgl-render-pipeline.js.map +1 -1
  38. package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
  39. package/dist/adapter/resources/webgl-texture.js +8 -5
  40. package/dist/adapter/resources/webgl-texture.js.map +1 -1
  41. package/dist/adapter/resources/webgl-vertex-array.d.ts +1 -1
  42. package/dist/adapter/webgl-adapter.d.ts +2 -1
  43. package/dist/adapter/webgl-adapter.d.ts.map +1 -1
  44. package/dist/adapter/webgl-adapter.js +35 -25
  45. package/dist/adapter/webgl-adapter.js.map +1 -1
  46. package/dist/adapter/webgl-device.d.ts +12 -4
  47. package/dist/adapter/webgl-device.d.ts.map +1 -1
  48. package/dist/adapter/webgl-device.js +60 -17
  49. package/dist/adapter/webgl-device.js.map +1 -1
  50. package/dist/context/debug/webgl-developer-tools.js +1 -0
  51. package/dist/context/debug/webgl-developer-tools.js.map +1 -1
  52. package/dist/dist.dev.js +124 -57
  53. package/dist/dist.min.js +2 -2
  54. package/dist/index.cjs +117 -57
  55. package/dist/index.cjs.map +2 -2
  56. package/package.json +4 -4
  57. package/src/adapter/converters/sampler-parameters.ts +13 -2
  58. package/src/adapter/converters/webgl-shadertypes.ts +1 -2
  59. package/src/adapter/converters/webgl-texture-table.ts +20 -14
  60. package/src/adapter/converters/webgl-vertex-formats.ts +1 -2
  61. package/src/adapter/helpers/webgl-texture-utils.ts +3 -224
  62. package/src/adapter/resources/webgl-buffer.ts +38 -20
  63. package/src/adapter/resources/webgl-command-buffer.ts +4 -3
  64. package/src/adapter/resources/webgl-command-encoder.ts +1 -1
  65. package/src/adapter/resources/webgl-framebuffer.ts +2 -2
  66. package/src/adapter/resources/webgl-query-set.ts +2 -2
  67. package/src/adapter/resources/webgl-render-pass.ts +1 -0
  68. package/src/adapter/resources/webgl-render-pipeline.ts +7 -3
  69. package/src/adapter/resources/webgl-texture.ts +8 -5
  70. package/src/adapter/webgl-adapter.ts +36 -28
  71. package/src/adapter/webgl-device.ts +85 -31
  72. package/src/context/debug/webgl-developer-tools.ts +1 -0
package/dist/index.cjs CHANGED
@@ -1213,7 +1213,10 @@ function getTextureFormatWebGL(format) {
1213
1213
  var _a;
1214
1214
  const formatData = WEBGL_TEXTURE_FORMATS[format];
1215
1215
  const webglFormat = convertTextureFormatToGL(format);
1216
- const decoded = (0, import_core3.getTextureFormatInfo)(format);
1216
+ const decoded = import_core3.textureFormatDecoder.getInfo(format);
1217
+ if (decoded.compressed) {
1218
+ formatData.dataFormat = webglFormat;
1219
+ }
1217
1220
  return {
1218
1221
  internalFormat: webglFormat,
1219
1222
  format: (formatData == null ? void 0 : formatData.dataFormat) || getWebGLPixelDataFormat(decoded.channels, decoded.integer, decoded.normalized, webglFormat),
@@ -1223,7 +1226,7 @@ function getTextureFormatWebGL(format) {
1223
1226
  };
1224
1227
  }
1225
1228
  function getDepthStencilAttachmentWebGL(format) {
1226
- const formatInfo = (0, import_core3.getTextureFormatInfo)(format);
1229
+ const formatInfo = import_core3.textureFormatDecoder.getInfo(format);
1227
1230
  switch (formatInfo.attachment) {
1228
1231
  case "depth":
1229
1232
  return 36096;
@@ -1318,8 +1321,8 @@ var init_webgl_texture_table = __esm({
1318
1321
  "r16uint": { gl: 33332, rb: true },
1319
1322
  "r16sint": { gl: 33331, rb: true },
1320
1323
  "r16float": { gl: 33325, rb: true },
1321
- "r16unorm-webgl": { gl: 33322, rb: true },
1322
- "r16snorm-webgl": { gl: 36760 },
1324
+ "r16unorm": { gl: 33322, rb: true },
1325
+ "r16snorm": { gl: 36760 },
1323
1326
  // Packed 16-bit formats
1324
1327
  "rgba4unorm-webgl": { gl: 32854, rb: true },
1325
1328
  "rgb565unorm-webgl": { gl: 36194, rb: true },
@@ -1327,7 +1330,7 @@ var init_webgl_texture_table = __esm({
1327
1330
  // 24-bit formats
1328
1331
  "rgb8unorm-webgl": { gl: 32849 },
1329
1332
  "rgb8snorm-webgl": { gl: 36758 },
1330
- // 32-bit formats
1333
+ // 32-bit formats
1331
1334
  "rgba8unorm": { gl: 32856 },
1332
1335
  "rgba8unorm-srgb": { gl: 35907 },
1333
1336
  "rgba8snorm": { gl: 36759 },
@@ -1339,8 +1342,8 @@ var init_webgl_texture_table = __esm({
1339
1342
  "rg16uint": { gl: 33338 },
1340
1343
  "rg16sint": { gl: 33337 },
1341
1344
  "rg16float": { gl: 33327, rb: true },
1342
- "rg16unorm-webgl": { gl: 33324 },
1343
- "rg16snorm-webgl": { gl: 36761 },
1345
+ "rg16unorm": { gl: 33324 },
1346
+ "rg16snorm": { gl: 36761 },
1344
1347
  "r32uint": { gl: 33334, rb: true },
1345
1348
  "r32sint": { gl: 33333, rb: true },
1346
1349
  "r32float": { gl: 33326 },
@@ -1362,8 +1365,8 @@ var init_webgl_texture_table = __esm({
1362
1365
  "rgba16uint": { gl: 36214, rb: true },
1363
1366
  "rgba16sint": { gl: 36232, rb: true },
1364
1367
  "rgba16float": { gl: 34842 },
1365
- "rgba16unorm-webgl": { gl: 32859, rb: true },
1366
- "rgba16snorm-webgl": { gl: 36763 },
1368
+ "rgba16unorm": { gl: 32859, rb: true },
1369
+ "rgba16snorm": { gl: 36763 },
1367
1370
  // 96-bit formats (deprecated!)
1368
1371
  "rgb32float-webgl": { gl: 34837, x: EXT_color_buffer_float, dataFormat: 6407, types: [5126] },
1369
1372
  // 128-bit formats
@@ -1881,7 +1884,15 @@ var init_webgl_buffer = __esm({
1881
1884
  this._initWithByteLength(props.byteLength || 0);
1882
1885
  }
1883
1886
  }
1884
- // PRIVATE METHODS
1887
+ destroy() {
1888
+ if (!this.destroyed && this.handle) {
1889
+ this.removeStats();
1890
+ this.trackDeallocatedMemory();
1891
+ this.gl.deleteBuffer(this.handle);
1892
+ this.destroyed = true;
1893
+ this.handle = null;
1894
+ }
1895
+ }
1885
1896
  /** Allocate a new buffer and initialize to contents of typed array */
1886
1897
  _initWithData(data, byteOffset = 0, byteLength = data.byteLength + byteOffset) {
1887
1898
  const glTarget = this.glTarget;
@@ -1910,33 +1921,32 @@ var init_webgl_buffer = __esm({
1910
1921
  this.trackAllocatedMemory(byteLength);
1911
1922
  return this;
1912
1923
  }
1913
- destroy() {
1914
- if (!this.destroyed && this.handle) {
1915
- this.removeStats();
1916
- this.trackDeallocatedMemory();
1917
- this.gl.deleteBuffer(this.handle);
1918
- this.destroyed = true;
1919
- this.handle = null;
1920
- }
1921
- }
1922
1924
  write(data, byteOffset = 0) {
1925
+ const dataView = ArrayBuffer.isView(data) ? data : new Uint8Array(data);
1923
1926
  const srcOffset = 0;
1924
1927
  const byteLength = void 0;
1925
1928
  const glTarget = 36663;
1926
1929
  this.gl.bindBuffer(glTarget, this.handle);
1927
1930
  if (srcOffset !== 0 || byteLength !== void 0) {
1928
- this.gl.bufferSubData(glTarget, byteOffset, data, srcOffset, byteLength);
1931
+ this.gl.bufferSubData(glTarget, byteOffset, dataView, srcOffset, byteLength);
1929
1932
  } else {
1930
- this.gl.bufferSubData(glTarget, byteOffset, data);
1933
+ this.gl.bufferSubData(glTarget, byteOffset, dataView);
1931
1934
  }
1932
1935
  this.gl.bindBuffer(glTarget, null);
1933
1936
  this._setDebugData(data, byteOffset, data.byteLength);
1934
1937
  }
1935
- /** Asynchronously read data from the buffer */
1938
+ async mapAndWriteAsync(callback, byteOffset = 0, byteLength = this.byteLength - byteOffset) {
1939
+ const arrayBuffer = new ArrayBuffer(byteLength);
1940
+ await callback(arrayBuffer, "copied");
1941
+ this.write(arrayBuffer, byteOffset);
1942
+ }
1936
1943
  async readAsync(byteOffset = 0, byteLength) {
1937
1944
  return this.readSyncWebGL(byteOffset, byteLength);
1938
1945
  }
1939
- /** Synchronously read data from the buffer. WebGL only. */
1946
+ async mapAndReadAsync(callback, byteOffset = 0, byteLength) {
1947
+ const data = await this.readAsync(byteOffset, byteLength);
1948
+ return await callback(data.buffer, "copied");
1949
+ }
1940
1950
  readSyncWebGL(byteOffset = 0, byteLength) {
1941
1951
  byteLength = byteLength ?? this.byteLength - byteOffset;
1942
1952
  const data = new Uint8Array(byteLength);
@@ -2421,9 +2431,20 @@ function convertMinFilterMode(minFilter, mipmapFilter = "none") {
2421
2431
  case "none":
2422
2432
  return convertMaxFilterMode(minFilter);
2423
2433
  case "nearest":
2424
- return minFilter === "nearest" ? 9984 : 9986;
2434
+ switch (minFilter) {
2435
+ case "nearest":
2436
+ return 9984;
2437
+ case "linear":
2438
+ return 9985;
2439
+ }
2440
+ break;
2425
2441
  case "linear":
2426
- return minFilter === "nearest" ? 9985 : 9987;
2442
+ switch (minFilter) {
2443
+ case "nearest":
2444
+ return 9986;
2445
+ case "linear":
2446
+ return 9987;
2447
+ }
2427
2448
  }
2428
2449
  }
2429
2450
  var import_constants12;
@@ -2656,10 +2677,10 @@ var init_webgl_texture = __esm({
2656
2677
  const { mipLevel = 0, byteOffset = 0, x = 0, y = 0, z = 0 } = options;
2657
2678
  const { glFormat, glType, compressed } = this;
2658
2679
  const glTarget = getWebGLCubeFaceTarget(this.glTarget, this.dimension, depth);
2659
- const glParameters = {
2680
+ const glParameters = !this.compressed ? {
2660
2681
  [3314]: options.bytesPerRow,
2661
2682
  [32878]: options.rowsPerImage
2662
- };
2683
+ } : {};
2663
2684
  this.gl.bindTexture(glTarget, this.handle);
2664
2685
  withGLParameters(this.gl, glParameters, () => {
2665
2686
  switch (this.dimension) {
@@ -2733,7 +2754,7 @@ var init_webgl_texture = __esm({
2733
2754
  * Sets sampler parameters on texture
2734
2755
  */
2735
2756
  _setSamplerParameters(parameters) {
2736
- import_core13.log.log(1, `${this.id} sampler parameters`, this.device.getGLKeys(parameters))();
2757
+ import_core13.log.log(2, `${this.id} sampler parameters`, this.device.getGLKeys(parameters))();
2737
2758
  this.gl.bindTexture(this.glTarget, this.handle);
2738
2759
  for (const [pname, pvalue] of Object.entries(parameters)) {
2739
2760
  const param = Number(pname);
@@ -3445,7 +3466,8 @@ var init_webgl_render_pipeline = __esm({
3445
3466
  break;
3446
3467
  }
3447
3468
  const linkErrorLog = this.device.gl.getProgramInfoLog(this.handle);
3448
- this.device.reportError(new Error(`${errorType} during ${status}: ${linkErrorLog}`));
3469
+ this.device.reportError(new Error(`${errorType} during ${status}: ${linkErrorLog}`), this)();
3470
+ this.device.debug();
3449
3471
  }
3450
3472
  }
3451
3473
  /**
@@ -3738,6 +3760,7 @@ var init_webgl_command_buffer = __esm({
3738
3760
  init_webgl_texture_table();
3739
3761
  WEBGLCommandBuffer = class extends import_core16.CommandBuffer {
3740
3762
  device;
3763
+ handle = null;
3741
3764
  commands = [];
3742
3765
  constructor(device) {
3743
3766
  super(device, {});
@@ -3779,6 +3802,7 @@ var init_webgl_render_pass = __esm({
3779
3802
  COLOR_CHANNELS = [1, 2, 4, 8];
3780
3803
  WEBGLRenderPass = class extends import_core17.RenderPass {
3781
3804
  device;
3805
+ handle = null;
3782
3806
  /** Parameters that should be applied before each draw call */
3783
3807
  glParameters = {};
3784
3808
  constructor(device, props) {
@@ -4620,7 +4644,7 @@ function readPixelsToArray(source, options) {
4620
4644
  sourceFormat ||= (texture == null ? void 0 : texture.glFormat) || 6408;
4621
4645
  sourceType ||= (texture == null ? void 0 : texture.glType) || 5121;
4622
4646
  target2 = getPixelArray(target2, sourceType, sourceFormat, sourceWidth, sourceHeight, sourceDepth);
4623
- const signedType = (0, import_core22.getDataTypeFromTypedArray)(target2);
4647
+ const signedType = (0, import_core22.getDataType)(target2);
4624
4648
  sourceType = sourceType || convertDataTypeToGLDataType(signedType);
4625
4649
  const prevHandle = gl.bindFramebuffer(36160, handle);
4626
4650
  gl.readBuffer(36064 + sourceAttachment);
@@ -4685,7 +4709,7 @@ function getPixelArray(pixelArray, glType, glFormat, width, height, depth) {
4685
4709
  }
4686
4710
  glType ||= 5121;
4687
4711
  const shaderType = convertGLDataTypeToDataType(glType);
4688
- const ArrayType = (0, import_core22.getTypedArrayFromDataType)(shaderType);
4712
+ const ArrayType = (0, import_core22.getTypedArrayConstructor)(shaderType);
4689
4713
  const components = glFormatToComponents(glFormat);
4690
4714
  return new ArrayType(width * height * components);
4691
4715
  }
@@ -4773,6 +4797,7 @@ var init_webgl_device = __esm({
4773
4797
  // Public `Device` API
4774
4798
  /** type of this device */
4775
4799
  type = "webgl";
4800
+ // Use the ! assertion to handle the case where _reuseDevices causes the constructor to return early
4776
4801
  /** The underlying WebGL context */
4777
4802
  handle;
4778
4803
  features;
@@ -4786,7 +4811,6 @@ var init_webgl_device = __esm({
4786
4811
  _resolveContextLost;
4787
4812
  /** WebGL2 context. */
4788
4813
  gl;
4789
- debug = false;
4790
4814
  /** Store constants */
4791
4815
  // @ts-ignore TODO fix
4792
4816
  _constants;
@@ -4798,16 +4822,27 @@ var init_webgl_device = __esm({
4798
4822
  //
4799
4823
  // Public API
4800
4824
  //
4825
+ get [Symbol.toStringTag]() {
4826
+ return "WebGLDevice";
4827
+ }
4801
4828
  toString() {
4802
4829
  return `${this[Symbol.toStringTag]}(${this.id})`;
4803
4830
  }
4831
+ isVertexFormatSupported(format) {
4832
+ switch (format) {
4833
+ case "unorm8x4-bgra":
4834
+ return false;
4835
+ default:
4836
+ return true;
4837
+ }
4838
+ }
4804
4839
  constructor(props) {
4805
4840
  var _a, _b;
4806
4841
  super({ ...props, id: props.id || uid("webgl-device") });
4807
- if (!props.createCanvasContext) {
4842
+ const canvasContextProps = import_core23.Device._getCanvasContextProps(props);
4843
+ if (!canvasContextProps) {
4808
4844
  throw new Error("WebGLDevice requires props.createCanvasContext to be set");
4809
4845
  }
4810
- const canvasContextProps = props.createCanvasContext === true ? {} : props.createCanvasContext;
4811
4846
  let device = (_b = (_a = canvasContextProps.canvas) == null ? void 0 : _a.gl) == null ? void 0 : _b.device;
4812
4847
  if (device) {
4813
4848
  throw new Error(`WebGL context already attached to device ${device.id}`);
@@ -4823,7 +4858,8 @@ var init_webgl_device = __esm({
4823
4858
  if (props.powerPreference !== void 0) {
4824
4859
  webglContextAttributes.powerPreference = props.powerPreference;
4825
4860
  }
4826
- const gl = createBrowserContext(this.canvasContext.canvas, {
4861
+ const externalGLContext = this.props._handle;
4862
+ const gl = externalGLContext || createBrowserContext(this.canvasContext.canvas, {
4827
4863
  onContextLost: (event) => {
4828
4864
  var _a2;
4829
4865
  return (_a2 = this._resolveContextLost) == null ? void 0 : _a2.call(this, {
@@ -4839,6 +4875,11 @@ var init_webgl_device = __esm({
4839
4875
  }
4840
4876
  device = gl.device;
4841
4877
  if (device) {
4878
+ if (props._reuseDevices) {
4879
+ import_core23.log.log(1, `Not creating a new Device, instead returning a reference to Device ${device.id} already attached to WebGL context`, device)();
4880
+ device._reused = true;
4881
+ return device;
4882
+ }
4842
4883
  throw new Error(`WebGL context already attached to device ${device.id}`);
4843
4884
  }
4844
4885
  this.handle = gl;
@@ -4868,15 +4909,27 @@ var init_webgl_device = __esm({
4868
4909
  this.commandEncoder = new WEBGLCommandEncoder(this, { id: `${this}-command-encoder` });
4869
4910
  }
4870
4911
  /**
4871
- * Destroys the context
4872
- * @note Has no effect for WebGL browser contexts, there is no browser API for destroying contexts
4912
+ * Destroys the device
4913
+ *
4914
+ * @note "Detaches" from the WebGL context unless _reuseDevices is true.
4915
+ *
4916
+ * @note The underlying WebGL context is not immediately destroyed,
4917
+ * but may be destroyed later through normal JavaScript garbage collection.
4918
+ * This is a fundamental limitation since WebGL does not offer any
4919
+ * browser API for destroying WebGL contexts.
4873
4920
  */
4874
4921
  destroy() {
4922
+ if (!this.props._reuseDevices && !this._reused) {
4923
+ delete this.gl.device;
4924
+ }
4875
4925
  }
4876
4926
  get isLost() {
4877
4927
  return this.gl.isContextLost();
4878
4928
  }
4879
4929
  // IMPLEMENTATION OF ABSTRACT DEVICE
4930
+ getTextureByteAlignment() {
4931
+ return 4;
4932
+ }
4880
4933
  createCanvasContext(props) {
4881
4934
  throw new Error("WebGL only supports a single canvas");
4882
4935
  }
@@ -5053,7 +5106,7 @@ var init_webgl_device = __esm({
5053
5106
  */
5054
5107
  _setWebGLDebugMetadata(handle, resource, options) {
5055
5108
  handle.luma = resource;
5056
- const spectorMetadata = { props: options.spector, id: options.spector.id };
5109
+ const spectorMetadata = { props: options.spector, id: options.spector["id"] };
5057
5110
  handle.__SPECTOR_Metadata = spectorMetadata;
5058
5111
  }
5059
5112
  };
@@ -5102,7 +5155,8 @@ var init_webgl_adapter = __esm({
5102
5155
  }
5103
5156
  /**
5104
5157
  * Get a device instance from a GL context
5105
- * Creates and instruments the device if not already created
5158
+ * Creates a WebGLCanvasContext against the contexts canvas
5159
+ * @note autoResize will be disabled, assuming that whoever created the external context will be handling resizes.
5106
5160
  * @param gl
5107
5161
  * @returns
5108
5162
  */
@@ -5117,30 +5171,36 @@ var init_webgl_adapter = __esm({
5117
5171
  if (!isWebGL(gl)) {
5118
5172
  throw new Error("Invalid WebGL2RenderingContext");
5119
5173
  }
5120
- return new WebGLDevice2({ _handle: gl });
5174
+ return new WebGLDevice2({
5175
+ _handle: gl,
5176
+ createCanvasContext: { canvas: gl.canvas, autoResize: false }
5177
+ });
5121
5178
  }
5122
5179
  async create(props = {}) {
5123
5180
  const { WebGLDevice: WebGLDevice2 } = await Promise.resolve().then(() => (init_webgl_device(), webgl_device_exports));
5124
5181
  import_core24.log.groupCollapsed(LOG_LEVEL2, "WebGLDevice created")();
5125
- const promises = [];
5126
- if (props.debugWebGL || props.debug) {
5127
- promises.push(loadWebGLDeveloperTools());
5128
- }
5129
- if (props.debugSpectorJS) {
5130
- promises.push(loadSpectorJS(props));
5131
- }
5132
- const results = await Promise.allSettled(promises);
5133
- for (const result of results) {
5134
- if (result.status === "rejected") {
5135
- import_core24.log.error(`Failed to initialize debug libraries ${result.reason}`)();
5182
+ try {
5183
+ const promises = [];
5184
+ if (props.debugWebGL || props.debug) {
5185
+ promises.push(loadWebGLDeveloperTools());
5186
+ }
5187
+ if (props.debugSpectorJS) {
5188
+ promises.push(loadSpectorJS(props));
5136
5189
  }
5190
+ const results = await Promise.allSettled(promises);
5191
+ for (const result of results) {
5192
+ if (result.status === "rejected") {
5193
+ import_core24.log.error(`Failed to initialize debug libraries ${result.reason}`)();
5194
+ }
5195
+ }
5196
+ const device = new WebGLDevice2(props);
5197
+ const message2 = `${device._reused ? "Reusing" : "Created"} device with WebGL2 ${device.props.debug ? "debug " : ""}context: ${device.info.vendor}, ${device.info.renderer} for canvas: ${device.canvasContext.id}`;
5198
+ import_core24.log.probe(LOG_LEVEL2, message2)();
5199
+ import_core24.log.table(LOG_LEVEL2, device.info)();
5200
+ return device;
5201
+ } finally {
5202
+ import_core24.log.groupEnd(LOG_LEVEL2)();
5137
5203
  }
5138
- const device = new WebGLDevice2(props);
5139
- const message2 = `Created ${device.type}${device.debug ? " debug" : ""} context: ${device.info.vendor}, ${device.info.renderer} for canvas: ${device.canvasContext.id}`;
5140
- import_core24.log.probe(LOG_LEVEL2, message2)();
5141
- import_core24.log.table(LOG_LEVEL2, device.info)();
5142
- import_core24.log.groupEnd(LOG_LEVEL2)();
5143
- return device;
5144
5204
  }
5145
5205
  };
5146
5206
  webgl2Adapter = new WebGLAdapter();