@luma.gl/webgl 9.2.0-alpha.1 → 9.2.0-alpha.3
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.
- package/dist/adapter/converters/sampler-parameters.js +13 -2
- package/dist/adapter/converters/sampler-parameters.js.map +1 -1
- package/dist/adapter/converters/webgl-shadertypes.d.ts.map +1 -1
- package/dist/adapter/converters/webgl-shadertypes.js +1 -2
- package/dist/adapter/converters/webgl-shadertypes.js.map +1 -1
- package/dist/adapter/converters/webgl-texture-table.d.ts.map +1 -1
- package/dist/adapter/converters/webgl-texture-table.js +15 -11
- package/dist/adapter/converters/webgl-texture-table.js.map +1 -1
- package/dist/adapter/converters/webgl-vertex-formats.d.ts.map +1 -1
- package/dist/adapter/converters/webgl-vertex-formats.js +1 -2
- package/dist/adapter/converters/webgl-vertex-formats.js.map +1 -1
- package/dist/adapter/helpers/webgl-texture-utils.d.ts +0 -217
- package/dist/adapter/helpers/webgl-texture-utils.d.ts.map +1 -1
- package/dist/adapter/helpers/webgl-texture-utils.js +3 -3
- package/dist/adapter/helpers/webgl-texture-utils.js.map +1 -1
- package/dist/adapter/resources/webgl-buffer.d.ts +7 -7
- package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-buffer.js +24 -15
- package/dist/adapter/resources/webgl-buffer.js.map +1 -1
- package/dist/adapter/resources/webgl-command-buffer.d.ts +2 -1
- package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-command-buffer.js +1 -0
- package/dist/adapter/resources/webgl-command-buffer.js.map +1 -1
- package/dist/adapter/resources/webgl-framebuffer.d.ts +2 -2
- package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-framebuffer.js.map +1 -1
- package/dist/adapter/resources/webgl-query-set.d.ts +2 -2
- package/dist/adapter/resources/webgl-query-set.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-query-set.js.map +1 -1
- package/dist/adapter/resources/webgl-render-pass.d.ts +1 -0
- package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-render-pass.js +1 -0
- package/dist/adapter/resources/webgl-render-pass.js.map +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.d.ts +2 -2
- package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.js +2 -1
- package/dist/adapter/resources/webgl-render-pipeline.js.map +1 -1
- package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-texture.js +8 -5
- package/dist/adapter/resources/webgl-texture.js.map +1 -1
- package/dist/adapter/resources/webgl-vertex-array.d.ts +1 -1
- package/dist/adapter/webgl-adapter.d.ts +2 -1
- package/dist/adapter/webgl-adapter.d.ts.map +1 -1
- package/dist/adapter/webgl-adapter.js +35 -25
- package/dist/adapter/webgl-adapter.js.map +1 -1
- package/dist/adapter/webgl-device.d.ts +12 -4
- package/dist/adapter/webgl-device.d.ts.map +1 -1
- package/dist/adapter/webgl-device.js +60 -17
- package/dist/adapter/webgl-device.js.map +1 -1
- package/dist/context/debug/webgl-developer-tools.js +1 -0
- package/dist/context/debug/webgl-developer-tools.js.map +1 -1
- package/dist/dist.dev.js +124 -57
- package/dist/dist.min.js +2 -2
- package/dist/index.cjs +117 -57
- package/dist/index.cjs.map +2 -2
- package/package.json +4 -4
- package/src/adapter/converters/sampler-parameters.ts +13 -2
- package/src/adapter/converters/webgl-shadertypes.ts +1 -2
- package/src/adapter/converters/webgl-texture-table.ts +20 -14
- package/src/adapter/converters/webgl-vertex-formats.ts +1 -2
- package/src/adapter/helpers/webgl-texture-utils.ts +3 -224
- package/src/adapter/resources/webgl-buffer.ts +38 -20
- package/src/adapter/resources/webgl-command-buffer.ts +4 -3
- package/src/adapter/resources/webgl-command-encoder.ts +1 -1
- package/src/adapter/resources/webgl-framebuffer.ts +2 -2
- package/src/adapter/resources/webgl-query-set.ts +2 -2
- package/src/adapter/resources/webgl-render-pass.ts +1 -0
- package/src/adapter/resources/webgl-render-pipeline.ts +7 -3
- package/src/adapter/resources/webgl-texture.ts +8 -5
- package/src/adapter/webgl-adapter.ts +36 -28
- package/src/adapter/webgl-device.ts +85 -31
- 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 =
|
|
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 =
|
|
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
|
|
1322
|
-
"r16snorm
|
|
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
|
|
1343
|
-
"rg16snorm
|
|
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
|
|
1366
|
-
"rgba16snorm
|
|
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
|
-
|
|
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,
|
|
1931
|
+
this.gl.bufferSubData(glTarget, byteOffset, dataView, srcOffset, byteLength);
|
|
1929
1932
|
} else {
|
|
1930
|
-
this.gl.bufferSubData(glTarget, byteOffset,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
2434
|
+
switch (minFilter) {
|
|
2435
|
+
case "nearest":
|
|
2436
|
+
return 9984;
|
|
2437
|
+
case "linear":
|
|
2438
|
+
return 9985;
|
|
2439
|
+
}
|
|
2440
|
+
break;
|
|
2425
2441
|
case "linear":
|
|
2426
|
-
|
|
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(
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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
|
|
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
|
|
4872
|
-
*
|
|
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
|
|
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
|
|
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({
|
|
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
|
-
|
|
5126
|
-
|
|
5127
|
-
|
|
5128
|
-
|
|
5129
|
-
|
|
5130
|
-
|
|
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();
|