@luma.gl/webgl 9.1.0-beta.9 → 9.2.0-alpha.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.
- package/dist/adapter/converters/device-parameters.js +14 -9
- package/dist/adapter/converters/device-parameters.js.map +1 -1
- package/dist/adapter/converters/shader-formats.d.ts +67 -8
- package/dist/adapter/converters/shader-formats.d.ts.map +1 -1
- package/dist/adapter/converters/shader-formats.js +82 -52
- package/dist/adapter/converters/shader-formats.js.map +1 -1
- package/dist/adapter/converters/webgl-shadertypes.d.ts +20 -0
- package/dist/adapter/converters/webgl-shadertypes.d.ts.map +1 -0
- package/dist/adapter/converters/webgl-shadertypes.js +123 -0
- package/dist/adapter/converters/webgl-shadertypes.js.map +1 -0
- package/dist/adapter/converters/webgl-texture-table.js +6 -6
- package/dist/adapter/converters/webgl-texture-table.js.map +1 -1
- package/dist/adapter/converters/{vertex-formats.d.ts → webgl-vertex-formats.d.ts} +4 -4
- package/dist/adapter/converters/webgl-vertex-formats.d.ts.map +1 -0
- package/dist/adapter/converters/{vertex-formats.js → webgl-vertex-formats.js} +1 -1
- package/dist/adapter/converters/webgl-vertex-formats.js.map +1 -0
- package/dist/adapter/device-helpers/webgl-device-features.d.ts.map +1 -1
- package/dist/adapter/device-helpers/webgl-device-features.js.map +1 -1
- package/dist/adapter/device-helpers/webgl-device-limits.d.ts +1 -1
- package/dist/adapter/device-helpers/webgl-device-limits.d.ts.map +1 -1
- package/dist/adapter/device-helpers/webgl-device-limits.js +1 -1
- package/dist/adapter/device-helpers/webgl-device-limits.js.map +1 -1
- package/dist/adapter/helpers/format-utils.d.ts +3 -2
- package/dist/adapter/helpers/format-utils.d.ts.map +1 -1
- package/dist/adapter/helpers/format-utils.js.map +1 -1
- package/dist/adapter/helpers/{get-shader-layout.d.ts → get-shader-layout-from-glsl.d.ts} +1 -1
- package/dist/adapter/helpers/get-shader-layout-from-glsl.d.ts.map +1 -0
- package/dist/adapter/helpers/{get-shader-layout.js → get-shader-layout-from-glsl.js} +12 -35
- package/dist/adapter/helpers/get-shader-layout-from-glsl.js.map +1 -0
- package/dist/adapter/helpers/set-uniform.d.ts +2 -2
- package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
- package/dist/adapter/helpers/set-uniform.js.map +1 -1
- package/dist/adapter/helpers/webgl-texture-utils.d.ts +2 -25
- package/dist/adapter/helpers/webgl-texture-utils.d.ts.map +1 -1
- package/dist/adapter/helpers/webgl-texture-utils.js +10 -99
- package/dist/adapter/helpers/webgl-texture-utils.js.map +1 -1
- package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-buffer.js +5 -3
- package/dist/adapter/resources/webgl-buffer.js.map +1 -1
- package/dist/adapter/resources/webgl-command-buffer.d.ts +2 -2
- package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-command-buffer.js +4 -4
- package/dist/adapter/resources/webgl-command-buffer.js.map +1 -1
- package/dist/adapter/resources/webgl-command-encoder.d.ts +6 -2
- package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-command-encoder.js +9 -4
- package/dist/adapter/resources/webgl-command-encoder.js.map +1 -1
- package/dist/adapter/resources/webgl-external-texture.js +1 -0
- package/dist/adapter/resources/webgl-external-texture.js.map +1 -1
- package/dist/adapter/resources/webgl-framebuffer.js +2 -2
- package/dist/adapter/resources/webgl-framebuffer.js.map +1 -1
- package/dist/adapter/resources/webgl-query-set.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-query-set.js +5 -1
- package/dist/adapter/resources/webgl-query-set.js.map +1 -1
- package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-render-pass.js +11 -6
- package/dist/adapter/resources/webgl-render-pass.js.map +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.d.ts +3 -3
- package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.js +27 -24
- package/dist/adapter/resources/webgl-render-pipeline.js.map +1 -1
- package/dist/adapter/resources/webgl-sampler.js +1 -1
- package/dist/adapter/resources/webgl-sampler.js.map +1 -1
- package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-shader.js +9 -2
- package/dist/adapter/resources/webgl-shader.js.map +1 -1
- package/dist/adapter/resources/webgl-texture-view.js +1 -1
- package/dist/adapter/resources/webgl-texture-view.js.map +1 -1
- package/dist/adapter/resources/webgl-texture.d.ts +21 -66
- package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-texture.js +148 -319
- package/dist/adapter/resources/webgl-texture.js.map +1 -1
- package/dist/adapter/resources/webgl-transform-feedback.d.ts +1 -1
- package/dist/adapter/resources/webgl-transform-feedback.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-transform-feedback.js +1 -1
- package/dist/adapter/resources/webgl-transform-feedback.js.map +1 -1
- package/dist/adapter/resources/webgl-vertex-array.d.ts +1 -1
- package/dist/adapter/resources/webgl-vertex-array.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-vertex-array.js +3 -2
- package/dist/adapter/resources/webgl-vertex-array.js.map +1 -1
- package/dist/adapter/webgl-adapter.d.ts +4 -3
- package/dist/adapter/webgl-adapter.d.ts.map +1 -1
- package/dist/adapter/webgl-adapter.js +16 -7
- package/dist/adapter/webgl-adapter.js.map +1 -1
- package/dist/adapter/webgl-canvas-context.d.ts +3 -24
- package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
- package/dist/adapter/webgl-canvas-context.js +5 -44
- package/dist/adapter/webgl-canvas-context.js.map +1 -1
- package/dist/adapter/webgl-device.d.ts +17 -20
- package/dist/adapter/webgl-device.d.ts.map +1 -1
- package/dist/adapter/webgl-device.js +30 -28
- package/dist/adapter/webgl-device.js.map +1 -1
- package/dist/context/debug/spector-types.d.ts.map +1 -1
- package/dist/context/debug/spector-types.js +3 -0
- package/dist/context/debug/spector-types.js.map +1 -1
- package/dist/context/debug/spector.js.map +1 -1
- package/dist/context/debug/webgl-developer-tools.js.map +1 -1
- package/dist/context/helpers/webgl-extensions.d.ts.map +1 -1
- package/dist/context/helpers/webgl-extensions.js +3 -0
- package/dist/context/helpers/webgl-extensions.js.map +1 -1
- package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
- package/dist/context/parameters/unified-parameter-api.js +7 -0
- package/dist/context/parameters/unified-parameter-api.js.map +1 -1
- package/dist/context/parameters/webgl-parameter-tables.d.ts +1 -1
- package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
- package/dist/context/parameters/webgl-parameter-tables.js +1 -0
- package/dist/context/parameters/webgl-parameter-tables.js.map +1 -1
- package/dist/context/polyfills/polyfill-webgl1-extensions.d.ts.map +1 -1
- package/dist/context/polyfills/polyfill-webgl1-extensions.js +1 -0
- package/dist/context/polyfills/polyfill-webgl1-extensions.js.map +1 -1
- package/dist/context/state-tracker/deep-array-equal.d.ts +2 -1
- package/dist/context/state-tracker/deep-array-equal.d.ts.map +1 -1
- package/dist/context/state-tracker/deep-array-equal.js +4 -5
- package/dist/context/state-tracker/deep-array-equal.js.map +1 -1
- package/dist/context/state-tracker/webgl-state-tracker.d.ts.map +1 -1
- package/dist/context/state-tracker/webgl-state-tracker.js +4 -1
- package/dist/context/state-tracker/webgl-state-tracker.js.map +1 -1
- package/dist/context/state-tracker/with-parameters.js.map +1 -1
- package/dist/dist.dev.js +4720 -4771
- package/dist/dist.min.js +2 -2
- package/dist/index.cjs +3849 -3938
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +1 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -3
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
- package/src/adapter/converters/device-parameters.ts +19 -9
- package/src/adapter/converters/shader-formats.ts +50 -24
- package/src/adapter/converters/webgl-shadertypes.ts +152 -0
- package/src/adapter/converters/webgl-texture-table.ts +9 -9
- package/src/adapter/converters/{vertex-formats.ts → webgl-vertex-formats.ts} +3 -3
- package/src/adapter/device-helpers/webgl-device-features.ts +1 -1
- package/src/adapter/device-helpers/webgl-device-limits.ts +1 -1
- package/src/adapter/helpers/format-utils.ts +2 -2
- package/src/adapter/helpers/{get-shader-layout.ts → get-shader-layout-from-glsl.ts} +20 -50
- package/src/adapter/helpers/set-uniform.ts +2 -2
- package/src/adapter/helpers/webgl-texture-utils.ts +12 -127
- package/src/adapter/resources/webgl-buffer.ts +5 -3
- package/src/adapter/resources/webgl-command-buffer.ts +5 -5
- package/src/adapter/resources/webgl-command-encoder.ts +17 -8
- package/src/adapter/resources/webgl-framebuffer.ts +2 -2
- package/src/adapter/resources/webgl-query-set.ts +5 -1
- package/src/adapter/resources/webgl-render-pass.ts +15 -9
- package/src/adapter/resources/webgl-render-pipeline.ts +32 -35
- package/src/adapter/resources/webgl-sampler.ts +1 -1
- package/src/adapter/resources/webgl-shader.ts +11 -2
- package/src/adapter/resources/webgl-texture-view.ts +1 -1
- package/src/adapter/resources/webgl-texture.ts +180 -393
- package/src/adapter/resources/webgl-transform-feedback.ts +2 -2
- package/src/adapter/resources/webgl-vertex-array.ts +4 -3
- package/src/adapter/webgl-adapter.ts +20 -8
- package/src/adapter/webgl-canvas-context.ts +7 -47
- package/src/adapter/webgl-device.ts +46 -41
- package/src/context/debug/spector-types.ts +5 -0
- package/src/context/debug/spector.ts +1 -1
- package/src/context/debug/webgl-developer-tools.ts +8 -3
- package/src/context/helpers/webgl-extensions.ts +3 -0
- package/src/context/parameters/unified-parameter-api.ts +9 -2
- package/src/context/parameters/webgl-parameter-tables.ts +2 -0
- package/src/context/polyfills/polyfill-webgl1-extensions.ts +1 -0
- package/src/context/state-tracker/deep-array-equal.ts +11 -6
- package/src/context/state-tracker/webgl-state-tracker.ts +5 -1
- package/src/context/state-tracker/with-parameters.ts +1 -1
- package/src/index.ts +1 -5
- package/dist/adapter/converters/vertex-formats.d.ts.map +0 -1
- package/dist/adapter/converters/vertex-formats.js.map +0 -1
- package/dist/adapter/helpers/decode-webgl-types.d.ts +0 -26
- package/dist/adapter/helpers/decode-webgl-types.d.ts.map +0 -1
- package/dist/adapter/helpers/decode-webgl-types.js +0 -102
- package/dist/adapter/helpers/decode-webgl-types.js.map +0 -1
- package/dist/adapter/helpers/get-shader-layout.d.ts.map +0 -1
- package/dist/adapter/helpers/get-shader-layout.js.map +0 -1
- package/dist/adapter/helpers/typed-array-utils.d.ts +0 -44
- package/dist/adapter/helpers/typed-array-utils.d.ts.map +0 -1
- package/dist/adapter/helpers/typed-array-utils.js +0 -107
- package/dist/adapter/helpers/typed-array-utils.js.map +0 -1
- package/dist/deprecated/accessor.d.ts +0 -53
- package/dist/deprecated/accessor.d.ts.map +0 -1
- package/dist/deprecated/accessor.js +0 -177
- package/dist/deprecated/accessor.js.map +0 -1
- package/dist/utils/split-uniforms-and-bindings.d.ts +0 -9
- package/dist/utils/split-uniforms-and-bindings.d.ts.map +0 -1
- package/dist/utils/split-uniforms-and-bindings.js +0 -21
- package/dist/utils/split-uniforms-and-bindings.js.map +0 -1
- package/src/adapter/helpers/decode-webgl-types.ts +0 -134
- package/src/adapter/helpers/typed-array-utils.ts +0 -129
- package/src/deprecated/accessor.ts +0 -225
- package/src/utils/split-uniforms-and-bindings.ts +0 -31
|
@@ -2,13 +2,10 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
|
-
//
|
|
6
|
-
// WebGL... the texture API from hell... hopefully made simpler
|
|
7
|
-
//
|
|
5
|
+
// @ts-nocheck This file will be deleted in upcoming refactor
|
|
8
6
|
|
|
9
|
-
import {
|
|
10
|
-
import
|
|
11
|
-
import {Buffer, Texture, Framebuffer, FramebufferProps} from '@luma.gl/core';
|
|
7
|
+
import type {Buffer, Texture, FramebufferProps} from '@luma.gl/core';
|
|
8
|
+
import {Framebuffer, getTypedArrayFromDataType, getDataTypeFromTypedArray} from '@luma.gl/core';
|
|
12
9
|
import {
|
|
13
10
|
GL,
|
|
14
11
|
GLTextureTarget,
|
|
@@ -18,12 +15,12 @@ import {
|
|
|
18
15
|
GLDataType
|
|
19
16
|
} from '@luma.gl/constants';
|
|
20
17
|
|
|
18
|
+
import {convertDataTypeToGLDataType} from '../converters/webgl-shadertypes';
|
|
21
19
|
import {WEBGLFramebuffer} from '../resources/webgl-framebuffer';
|
|
22
|
-
import {getGLTypeFromTypedArray, getTypedArrayFromGLType} from './typed-array-utils';
|
|
23
20
|
import {glFormatToComponents, glTypeToBytes} from './format-utils';
|
|
24
21
|
import {WEBGLBuffer} from '../resources/webgl-buffer';
|
|
25
22
|
import {WEBGLTexture} from '../resources/webgl-texture';
|
|
26
|
-
import {
|
|
23
|
+
import {convertGLDataTypeToDataType} from '../converters/shader-formats';
|
|
27
24
|
|
|
28
25
|
/** A "border" parameter is required in many WebGL texture APIs, but must always be 0... */
|
|
29
26
|
const BORDER = 0;
|
|
@@ -83,120 +80,6 @@ export type WebGLCopyTextureOptions = {
|
|
|
83
80
|
byteLength?: number;
|
|
84
81
|
};
|
|
85
82
|
|
|
86
|
-
/**
|
|
87
|
-
* Initializes a texture memory space
|
|
88
|
-
* Clear all the textures and mip levels of a two-dimensional or array texture at the same time.
|
|
89
|
-
* On some implementations faster than repeatedly setting levels
|
|
90
|
-
*
|
|
91
|
-
* @note From WebGL 2 spec section 3.7.6:
|
|
92
|
-
* @see https://registry.khronos.org/webgl/specs/latest/2.0/
|
|
93
|
-
* - The image contents are set as if a buffer of sufficient size initialized to 0 would be passed to each level's texImage2D/3D
|
|
94
|
-
* - texStorage2D should be considered a preferred alternative to texImage2D. It may have lower memory costs than texImage2D in some implementations.
|
|
95
|
-
* - Once texStorage*D has been called, the texture is immutable and can only be updated with texSubImage*(), not texImage()
|
|
96
|
-
*/
|
|
97
|
-
export function initializeTextureStorage(
|
|
98
|
-
gl: WebGL2RenderingContext,
|
|
99
|
-
levels: number,
|
|
100
|
-
options: WebGLSetTextureOptions
|
|
101
|
-
): void {
|
|
102
|
-
const {dimension, width, height, depth = 0} = options;
|
|
103
|
-
const {glInternalFormat} = options;
|
|
104
|
-
const glTarget = options.glTarget; // getWebGLCubeFaceTarget(options.glTarget, dimension, depth);
|
|
105
|
-
switch (dimension) {
|
|
106
|
-
case '2d-array':
|
|
107
|
-
case '3d':
|
|
108
|
-
gl.texStorage3D(glTarget, levels, glInternalFormat, width, height, depth);
|
|
109
|
-
break;
|
|
110
|
-
|
|
111
|
-
default:
|
|
112
|
-
gl.texStorage2D(glTarget, levels, glInternalFormat, width, height);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Copy a region of compressed data from a GPU memory buffer into this texture.
|
|
118
|
-
*/
|
|
119
|
-
export function copyExternalImageToMipLevel(
|
|
120
|
-
gl: WebGL2RenderingContext,
|
|
121
|
-
handle: WebGLTexture,
|
|
122
|
-
image: ExternalImage,
|
|
123
|
-
options: WebGLCopyTextureOptions & {flipY?: boolean}
|
|
124
|
-
): void {
|
|
125
|
-
const {width, height} = options;
|
|
126
|
-
const {dimension, depth = 0, mipLevel = 0} = options;
|
|
127
|
-
const {x = 0, y = 0, z = 0} = options;
|
|
128
|
-
const {glFormat, glType} = options;
|
|
129
|
-
|
|
130
|
-
const glTarget = getWebGLCubeFaceTarget(options.glTarget, dimension, depth);
|
|
131
|
-
|
|
132
|
-
const glParameters = options.flipY ? {[GL.UNPACK_FLIP_Y_WEBGL]: true} : {};
|
|
133
|
-
withGLParameters(gl, glParameters, () => {
|
|
134
|
-
switch (dimension) {
|
|
135
|
-
case '2d-array':
|
|
136
|
-
case '3d':
|
|
137
|
-
gl.bindTexture(glTarget, handle);
|
|
138
|
-
// prettier-ignore
|
|
139
|
-
gl.texSubImage3D(glTarget, mipLevel, x, y, z, width, height, depth, glFormat, glType, image);
|
|
140
|
-
gl.bindTexture(glTarget, null);
|
|
141
|
-
break;
|
|
142
|
-
|
|
143
|
-
case '2d':
|
|
144
|
-
case 'cube':
|
|
145
|
-
gl.bindTexture(glTarget, handle);
|
|
146
|
-
// prettier-ignore
|
|
147
|
-
gl.texSubImage2D(glTarget, mipLevel, x, y, width, height, glFormat, glType, image);
|
|
148
|
-
gl.bindTexture(glTarget, null);
|
|
149
|
-
break;
|
|
150
|
-
|
|
151
|
-
default:
|
|
152
|
-
throw new Error(dimension);
|
|
153
|
-
}
|
|
154
|
-
});
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
/**
|
|
158
|
-
* Copy a region of data from a CPU memory buffer into this texture.
|
|
159
|
-
*/
|
|
160
|
-
export function copyCPUDataToMipLevel(
|
|
161
|
-
gl: WebGL2RenderingContext,
|
|
162
|
-
typedArray: TypedArray,
|
|
163
|
-
options: WebGLCopyTextureOptions
|
|
164
|
-
): void {
|
|
165
|
-
const {dimension, width, height, depth = 0, mipLevel = 0, byteOffset = 0} = options;
|
|
166
|
-
const {x = 0, y = 0, z = 0} = options;
|
|
167
|
-
const {glFormat, glType, compressed} = options;
|
|
168
|
-
const glTarget = getWebGLCubeFaceTarget(options.glTarget, dimension, depth);
|
|
169
|
-
|
|
170
|
-
// gl.bindTexture(glTarget, null);
|
|
171
|
-
|
|
172
|
-
switch (dimension) {
|
|
173
|
-
case '2d-array':
|
|
174
|
-
case '3d':
|
|
175
|
-
if (compressed) {
|
|
176
|
-
// prettier-ignore
|
|
177
|
-
gl.compressedTexSubImage3D(glTarget, mipLevel, x, y, z, width, height, depth, glFormat, typedArray, byteOffset); // , byteLength
|
|
178
|
-
} else {
|
|
179
|
-
// prettier-ignore
|
|
180
|
-
gl.texSubImage3D(glTarget, mipLevel, x, y, z, width, height, depth, glFormat, glType, typedArray, byteOffset); // , byteLength
|
|
181
|
-
}
|
|
182
|
-
break;
|
|
183
|
-
|
|
184
|
-
case '2d':
|
|
185
|
-
case 'cube':
|
|
186
|
-
if (compressed) {
|
|
187
|
-
// prettier-ignore
|
|
188
|
-
gl.compressedTexSubImage2D(glTarget, mipLevel, x, y, width, height, glFormat, typedArray, byteOffset); // , byteLength
|
|
189
|
-
} else {
|
|
190
|
-
// prettier-ignore
|
|
191
|
-
gl.texSubImage2D(glTarget, mipLevel, x, y, width, height, glFormat, glType, typedArray, byteOffset); // , byteLength
|
|
192
|
-
}
|
|
193
|
-
break;
|
|
194
|
-
|
|
195
|
-
default:
|
|
196
|
-
throw new Error(dimension);
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
|
|
200
83
|
/**
|
|
201
84
|
* Copy a region of compressed data from a GPU memory buffer into this texture.
|
|
202
85
|
*/
|
|
@@ -570,7 +453,8 @@ export function readPixelsToArray(
|
|
|
570
453
|
target = getPixelArray(target, sourceType, sourceFormat, sourceWidth, sourceHeight, sourceDepth);
|
|
571
454
|
|
|
572
455
|
// Pixel array available, if necessary, deduce type from it.
|
|
573
|
-
|
|
456
|
+
const signedType = getDataTypeFromTypedArray(target);
|
|
457
|
+
sourceType = sourceType || convertDataTypeToGLDataType(signedType);
|
|
574
458
|
|
|
575
459
|
// Note: luma.gl overrides bindFramebuffer so that we can reliably restore the previous framebuffer (this is the only function for which we do that)
|
|
576
460
|
const prevHandle = gl.bindFramebuffer(
|
|
@@ -717,7 +601,7 @@ export function copyToTexture(
|
|
|
717
601
|
texture = destinationTexture;
|
|
718
602
|
width = Number.isFinite(width) ? width : texture.width;
|
|
719
603
|
height = Number.isFinite(height) ? height : texture.height;
|
|
720
|
-
texture?.
|
|
604
|
+
texture?._bind(0);
|
|
721
605
|
// @ts-ignore
|
|
722
606
|
textureTarget = texture.target;
|
|
723
607
|
} else {
|
|
@@ -769,7 +653,7 @@ export function copyToTexture(
|
|
|
769
653
|
}
|
|
770
654
|
}
|
|
771
655
|
if (texture) {
|
|
772
|
-
texture.
|
|
656
|
+
texture._unbind();
|
|
773
657
|
}
|
|
774
658
|
// @ts-expect-error
|
|
775
659
|
device.gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);
|
|
@@ -817,10 +701,11 @@ function getPixelArray(
|
|
|
817
701
|
if (pixelArray) {
|
|
818
702
|
return pixelArray;
|
|
819
703
|
}
|
|
820
|
-
// const formatInfo =
|
|
704
|
+
// const formatInfo = getTextureFormatInfo(format);
|
|
821
705
|
// Allocate pixel array if not already available, using supplied type
|
|
822
706
|
glType ||= GL.UNSIGNED_BYTE;
|
|
823
|
-
const
|
|
707
|
+
const shaderType = convertGLDataTypeToDataType(glType);
|
|
708
|
+
const ArrayType = getTypedArrayFromDataType(shaderType);
|
|
824
709
|
const components = glFormatToComponents(glFormat);
|
|
825
710
|
// TODO - check for composite type (components = 1).
|
|
826
711
|
return new ArrayType(width * height * components) as Uint8Array | Uint16Array | Float32Array;
|
|
@@ -21,9 +21,9 @@ export class WEBGLBuffer extends Buffer {
|
|
|
21
21
|
readonly glIndexType: GL.UNSIGNED_SHORT | GL.UNSIGNED_INT = GL.UNSIGNED_SHORT;
|
|
22
22
|
|
|
23
23
|
/** Number of bytes allocated on the GPU for this buffer */
|
|
24
|
-
byteLength: number;
|
|
24
|
+
byteLength: number = 0;
|
|
25
25
|
/** Number of bytes used */
|
|
26
|
-
bytesUsed: number;
|
|
26
|
+
bytesUsed: number = 0;
|
|
27
27
|
|
|
28
28
|
constructor(device: WebGLDevice, props: BufferProps = {}) {
|
|
29
29
|
super(device, props);
|
|
@@ -33,7 +33,9 @@ export class WEBGLBuffer extends Buffer {
|
|
|
33
33
|
|
|
34
34
|
const handle = typeof props === 'object' ? props.handle : undefined;
|
|
35
35
|
this.handle = handle || this.gl.createBuffer();
|
|
36
|
-
device.
|
|
36
|
+
device._setWebGLDebugMetadata(this.handle, this, {
|
|
37
|
+
spector: {...this.props, data: typeof this.props.data}
|
|
38
|
+
});
|
|
37
39
|
|
|
38
40
|
// - In WebGL1, need to make sure we use GL.ELEMENT_ARRAY_BUFFER when initializing element buffers
|
|
39
41
|
// otherwise buffer type will lock to generic (non-element) buffer
|
|
@@ -73,7 +73,7 @@ export class WEBGLCommandBuffer extends CommandBuffer {
|
|
|
73
73
|
this.device = device;
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
-
|
|
76
|
+
_executeCommands(commands: Command[] = this.commands) {
|
|
77
77
|
for (const command of commands) {
|
|
78
78
|
switch (command.name) {
|
|
79
79
|
case 'copy-buffer-to-buffer':
|
|
@@ -285,13 +285,13 @@ function _copyTextureToTexture(device: WebGLDevice, options: CopyTextureToTextur
|
|
|
285
285
|
// TODO - support gl.readBuffer (WebGL2 only)
|
|
286
286
|
// const prevBuffer = gl.readBuffer(attachment);
|
|
287
287
|
|
|
288
|
-
let texture: WEBGLTexture
|
|
288
|
+
let texture: WEBGLTexture;
|
|
289
289
|
let textureTarget: GL;
|
|
290
290
|
if (destinationTexture instanceof WEBGLTexture) {
|
|
291
291
|
texture = destinationTexture;
|
|
292
292
|
width = Number.isFinite(width) ? width : texture.width;
|
|
293
293
|
height = Number.isFinite(height) ? height : texture.height;
|
|
294
|
-
texture.
|
|
294
|
+
texture._bind(0);
|
|
295
295
|
textureTarget = texture.glTarget;
|
|
296
296
|
} else {
|
|
297
297
|
throw new Error('invalid destination');
|
|
@@ -329,7 +329,7 @@ function _copyTextureToTexture(device: WebGLDevice, options: CopyTextureToTextur
|
|
|
329
329
|
}
|
|
330
330
|
|
|
331
331
|
if (texture) {
|
|
332
|
-
texture.
|
|
332
|
+
texture._unbind();
|
|
333
333
|
}
|
|
334
334
|
device.gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle);
|
|
335
335
|
if (destroyFramebuffer) {
|
|
@@ -413,7 +413,7 @@ function getFramebuffer(source: Texture | Framebuffer): {
|
|
|
413
413
|
* Returns number of components in a specific readPixels WebGL format
|
|
414
414
|
* @todo use shadertypes utils instead?
|
|
415
415
|
*/
|
|
416
|
-
export function glFormatToComponents(format): 1 | 2 | 3 | 4 {
|
|
416
|
+
export function glFormatToComponents(format: GL): 1 | 2 | 3 | 4 {
|
|
417
417
|
switch (format) {
|
|
418
418
|
case GL.ALPHA:
|
|
419
419
|
case GL.R32F:
|
|
@@ -4,21 +4,26 @@
|
|
|
4
4
|
|
|
5
5
|
import {CommandEncoder, CommandEncoderProps} from '@luma.gl/core';
|
|
6
6
|
import type {
|
|
7
|
+
RenderPassProps,
|
|
8
|
+
ComputePass,
|
|
9
|
+
ComputePassProps,
|
|
10
|
+
QuerySet,
|
|
11
|
+
Buffer,
|
|
7
12
|
CopyBufferToBufferOptions,
|
|
8
13
|
CopyBufferToTextureOptions,
|
|
9
14
|
CopyTextureToBufferOptions,
|
|
10
|
-
CopyTextureToTextureOptions
|
|
15
|
+
CopyTextureToTextureOptions
|
|
11
16
|
// ClearTextureOptions,
|
|
12
17
|
// ReadTextureOptions,
|
|
13
|
-
QuerySet,
|
|
14
|
-
Buffer
|
|
15
18
|
} from '@luma.gl/core';
|
|
16
19
|
|
|
17
20
|
import {WEBGLCommandBuffer} from './webgl-command-buffer';
|
|
21
|
+
import {WEBGLRenderPass} from './webgl-render-pass';
|
|
18
22
|
import {WebGLDevice} from '../webgl-device';
|
|
19
23
|
|
|
20
24
|
export class WEBGLCommandEncoder extends CommandEncoder {
|
|
21
25
|
readonly device: WebGLDevice;
|
|
26
|
+
readonly handle = null;
|
|
22
27
|
|
|
23
28
|
readonly commandBuffer: WEBGLCommandBuffer;
|
|
24
29
|
|
|
@@ -30,13 +35,17 @@ export class WEBGLCommandEncoder extends CommandEncoder {
|
|
|
30
35
|
|
|
31
36
|
override destroy(): void {}
|
|
32
37
|
|
|
33
|
-
override finish():
|
|
34
|
-
this.commandBuffer
|
|
38
|
+
override finish(): WEBGLCommandBuffer {
|
|
39
|
+
return this.commandBuffer;
|
|
35
40
|
}
|
|
36
41
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
42
|
+
beginRenderPass(props: RenderPassProps): WEBGLRenderPass {
|
|
43
|
+
return new WEBGLRenderPass(this.device, props);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
beginComputePass(props: ComputePassProps): ComputePass {
|
|
47
|
+
throw new Error('ComputePass not supported in WebGL');
|
|
48
|
+
}
|
|
40
49
|
|
|
41
50
|
copyBufferToBuffer(options: CopyBufferToBufferOptions): void {
|
|
42
51
|
this.commandBuffer.commands.push({name: 'copy-buffer-to-buffer', options});
|
|
@@ -33,8 +33,8 @@ export class WEBGLFramebuffer extends Framebuffer {
|
|
|
33
33
|
this.props.handle || isDefaultFramebuffer ? this.props.handle : this.gl.createFramebuffer();
|
|
34
34
|
|
|
35
35
|
if (!isDefaultFramebuffer) {
|
|
36
|
-
// default framebuffer handle is null, so we can't set
|
|
37
|
-
device.
|
|
36
|
+
// default framebuffer handle is null, so we can't set debug metadata...
|
|
37
|
+
device._setWebGLDebugMetadata(this.handle, this, {spector: this.props});
|
|
38
38
|
|
|
39
39
|
// Auto create textures for attachments if needed
|
|
40
40
|
this.autoCreateAttachmentTextures();
|
|
@@ -27,7 +27,11 @@ export class WEBGLQuerySet extends QuerySet {
|
|
|
27
27
|
throw new Error('WebGL QuerySet can only have one value');
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
const handle = this.device.gl.createQuery();
|
|
31
|
+
if (!handle) {
|
|
32
|
+
throw new Error('WebGL query not supported');
|
|
33
|
+
}
|
|
34
|
+
this.handle = handle;
|
|
31
35
|
Object.seal(this);
|
|
32
36
|
}
|
|
33
37
|
|
|
@@ -9,21 +9,22 @@ import {GL, GLParameters} from '@luma.gl/constants';
|
|
|
9
9
|
import {withGLParameters} from '../../context/state-tracker/with-parameters';
|
|
10
10
|
import {setGLParameters} from '../../context/parameters/unified-parameter-api';
|
|
11
11
|
import {WEBGLQuerySet} from './webgl-query-set';
|
|
12
|
+
import {WEBGLFramebuffer} from './webgl-framebuffer';
|
|
12
13
|
|
|
13
|
-
const COLOR_CHANNELS = [0x1, 0x2, 0x4, 0x8]; // GPUColorWrite RED, GREEN, BLUE, ALPHA
|
|
14
|
+
const COLOR_CHANNELS: NumberArray4 = [0x1, 0x2, 0x4, 0x8]; // GPUColorWrite RED, GREEN, BLUE, ALPHA
|
|
14
15
|
|
|
15
16
|
export class WEBGLRenderPass extends RenderPass {
|
|
16
17
|
readonly device: WebGLDevice;
|
|
17
18
|
|
|
18
19
|
/** Parameters that should be applied before each draw call */
|
|
19
|
-
glParameters: GLParameters;
|
|
20
|
+
glParameters: GLParameters = {};
|
|
20
21
|
|
|
21
22
|
constructor(device: WebGLDevice, props: RenderPassProps) {
|
|
22
23
|
super(device, props);
|
|
23
24
|
this.device = device;
|
|
24
25
|
|
|
25
26
|
// If no viewport is provided, apply reasonably defaults
|
|
26
|
-
let viewport;
|
|
27
|
+
let viewport: NumberArray4 | undefined;
|
|
27
28
|
if (!props?.parameters?.viewport) {
|
|
28
29
|
if (props?.framebuffer) {
|
|
29
30
|
// Set the viewport to the size of the framebuffer
|
|
@@ -31,7 +32,7 @@ export class WEBGLRenderPass extends RenderPass {
|
|
|
31
32
|
viewport = [0, 0, width, height];
|
|
32
33
|
} else {
|
|
33
34
|
// Instead of using our own book-keeping, we can just read the values from the WebGL context
|
|
34
|
-
const [width, height] = device.
|
|
35
|
+
const [width, height] = device.getDefaultCanvasContext().getDrawingBufferSize();
|
|
35
36
|
viewport = [0, 0, width, height];
|
|
36
37
|
}
|
|
37
38
|
}
|
|
@@ -41,7 +42,9 @@ export class WEBGLRenderPass extends RenderPass {
|
|
|
41
42
|
this.setParameters({viewport, ...this.props.parameters});
|
|
42
43
|
|
|
43
44
|
// Specify mapping of draw buffer locations to color attachments
|
|
44
|
-
|
|
45
|
+
const webglFramebuffer = this.props.framebuffer as WEBGLFramebuffer;
|
|
46
|
+
// Default framebuffers can only be set to GL.BACK or GL.NONE
|
|
47
|
+
if (this.props.framebuffer && webglFramebuffer?.handle) {
|
|
45
48
|
const drawBuffers = this.props.framebuffer.colorAttachments.map(
|
|
46
49
|
(_, i) => GL.COLOR_ATTACHMENT0 + i
|
|
47
50
|
);
|
|
@@ -90,7 +93,10 @@ export class WEBGLRenderPass extends RenderPass {
|
|
|
90
93
|
// WebGPU viewports are 6 coordinates (X, Y, Z)
|
|
91
94
|
if (parameters.viewport.length >= 6) {
|
|
92
95
|
glParameters.viewport = parameters.viewport.slice(0, 4) as NumberArray4;
|
|
93
|
-
glParameters.depthRange = [
|
|
96
|
+
glParameters.depthRange = [
|
|
97
|
+
parameters.viewport[4] as number,
|
|
98
|
+
parameters.viewport[5] as number
|
|
99
|
+
];
|
|
94
100
|
} else {
|
|
95
101
|
// WebGL viewports are 4 coordinates (X, Y)
|
|
96
102
|
glParameters.viewport = parameters.viewport as NumberArray4;
|
|
@@ -108,12 +114,12 @@ export class WEBGLRenderPass extends RenderPass {
|
|
|
108
114
|
console.warn('RenderPassParameters.stencilReference not yet implemented in WebGL');
|
|
109
115
|
// parameters.stencilFunc = [func, ref, mask];
|
|
110
116
|
// Does this work?
|
|
111
|
-
|
|
117
|
+
glParameters[GL.STENCIL_REF] = parameters.stencilReference;
|
|
112
118
|
}
|
|
113
119
|
|
|
114
|
-
if (parameters
|
|
120
|
+
if ('colorMask' in parameters) {
|
|
115
121
|
glParameters.colorMask = COLOR_CHANNELS.map(channel =>
|
|
116
|
-
Boolean(channel & parameters.colorMask)
|
|
122
|
+
Boolean(channel & (parameters.colorMask as number))
|
|
117
123
|
);
|
|
118
124
|
}
|
|
119
125
|
|
|
@@ -16,10 +16,9 @@ import {RenderPipeline, log} from '@luma.gl/core';
|
|
|
16
16
|
// import {getAttributeInfosFromLayouts} from '@luma.gl/core';
|
|
17
17
|
import {GL} from '@luma.gl/constants';
|
|
18
18
|
|
|
19
|
-
import {getShaderLayoutFromGLSL} from '../helpers/get-shader-layout';
|
|
19
|
+
import {getShaderLayoutFromGLSL} from '../helpers/get-shader-layout-from-glsl';
|
|
20
20
|
import {withDeviceAndGLParameters} from '../converters/device-parameters';
|
|
21
21
|
import {setUniform} from '../helpers/set-uniform';
|
|
22
|
-
import {splitUniformsAndBindings} from '../../utils/split-uniforms-and-bindings';
|
|
23
22
|
// import {copyUniform, checkUniformValues} from '../../classes/uniforms';
|
|
24
23
|
|
|
25
24
|
import {WebGLDevice} from '../webgl-device';
|
|
@@ -57,11 +56,15 @@ export class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
57
56
|
_uniformCount: number = 0;
|
|
58
57
|
_uniformSetters: Record<string, Function> = {}; // TODO are these used?
|
|
59
58
|
|
|
59
|
+
override get [Symbol.toStringTag]() {
|
|
60
|
+
return 'WEBGLRenderPipeline';
|
|
61
|
+
}
|
|
62
|
+
|
|
60
63
|
constructor(device: WebGLDevice, props: RenderPipelineProps) {
|
|
61
64
|
super(device, props);
|
|
62
65
|
this.device = device;
|
|
63
66
|
this.handle = this.props.handle || this.device.gl.createProgram();
|
|
64
|
-
this.device.
|
|
67
|
+
this.device._setWebGLDebugMetadata(this.handle, this, {spector: {id: this.props.id}});
|
|
65
68
|
|
|
66
69
|
// Create shaders if needed
|
|
67
70
|
this.vs = props.vs as WEBGLShader;
|
|
@@ -78,20 +81,26 @@ export class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
78
81
|
}
|
|
79
82
|
|
|
80
83
|
this._linkShaders();
|
|
81
|
-
|
|
82
|
-
log.time(1, `RenderPipeline ${this.id} - shaderLayout introspection`)();
|
|
84
|
+
log.time(3, `RenderPipeline ${this.id} - shaderLayout introspection`)();
|
|
83
85
|
this.introspectedLayout = getShaderLayoutFromGLSL(this.device.gl, this.handle);
|
|
84
|
-
log.timeEnd(
|
|
86
|
+
log.timeEnd(3, `RenderPipeline ${this.id} - shaderLayout introspection`)();
|
|
85
87
|
|
|
86
88
|
// Merge provided layout with introspected layout
|
|
87
|
-
this.shaderLayout =
|
|
89
|
+
this.shaderLayout = props.shaderLayout
|
|
90
|
+
? mergeShaderLayout(this.introspectedLayout, props.shaderLayout)
|
|
91
|
+
: this.introspectedLayout;
|
|
88
92
|
}
|
|
89
93
|
|
|
90
94
|
override destroy(): void {
|
|
91
95
|
if (this.handle) {
|
|
96
|
+
// log.error(`Deleting program ${this.id}`)();
|
|
97
|
+
this.device.gl.useProgram(null);
|
|
92
98
|
this.device.gl.deleteProgram(this.handle);
|
|
93
|
-
// this.handle = null;
|
|
94
99
|
this.destroyed = true;
|
|
100
|
+
// @ts-expect-error
|
|
101
|
+
this.handle.destroyed = true;
|
|
102
|
+
// @ts-ignore
|
|
103
|
+
this.handle = null;
|
|
95
104
|
}
|
|
96
105
|
}
|
|
97
106
|
|
|
@@ -143,7 +152,7 @@ export class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
143
152
|
value instanceof WEBGLFramebuffer
|
|
144
153
|
)
|
|
145
154
|
) {
|
|
146
|
-
throw new Error(
|
|
155
|
+
throw new Error(`${this} Bad texture binding for ${name}`);
|
|
147
156
|
}
|
|
148
157
|
break;
|
|
149
158
|
case 'sampler':
|
|
@@ -269,21 +278,6 @@ export class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
269
278
|
return true;
|
|
270
279
|
}
|
|
271
280
|
|
|
272
|
-
// DEPRECATED METHODS
|
|
273
|
-
|
|
274
|
-
override setUniformsWebGL(uniforms: Record<string, UniformValue>) {
|
|
275
|
-
const {bindings} = splitUniformsAndBindings(uniforms);
|
|
276
|
-
Object.keys(bindings).forEach(name => {
|
|
277
|
-
log.warn(
|
|
278
|
-
`Unsupported value "${JSON.stringify(
|
|
279
|
-
bindings[name]
|
|
280
|
-
)}" used in setUniforms() for key ${name}. Use setBindings() instead?`
|
|
281
|
-
)();
|
|
282
|
-
});
|
|
283
|
-
// TODO - check against layout
|
|
284
|
-
Object.assign(this.uniforms, uniforms);
|
|
285
|
-
}
|
|
286
|
-
|
|
287
281
|
// PRIVATE METHODS
|
|
288
282
|
|
|
289
283
|
// setAttributes(attributes: Record<string, Buffer>): void {}
|
|
@@ -317,19 +311,21 @@ export class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
317
311
|
}
|
|
318
312
|
|
|
319
313
|
/** Report link status. First, check for shader compilation failures if linking fails */
|
|
320
|
-
async _reportLinkStatus(status: 'success' | '
|
|
314
|
+
async _reportLinkStatus(status: 'success' | 'link-error' | 'validation-error'): Promise<void> {
|
|
321
315
|
switch (status) {
|
|
322
316
|
case 'success':
|
|
323
317
|
return;
|
|
324
318
|
|
|
325
319
|
default:
|
|
320
|
+
const errorType = status === 'link-error' ? 'Link error' : 'Validation error';
|
|
326
321
|
// First check for shader compilation failures if linking fails
|
|
327
322
|
switch (this.vs.compilationStatus) {
|
|
328
323
|
case 'error':
|
|
329
324
|
this.vs.debugShader();
|
|
330
|
-
throw new Error(
|
|
325
|
+
throw new Error(`${this} ${errorType} during compilation of ${this.vs}`);
|
|
331
326
|
case 'pending':
|
|
332
|
-
this.vs.asyncCompilationStatus
|
|
327
|
+
await this.vs.asyncCompilationStatus;
|
|
328
|
+
this.vs.debugShader();
|
|
333
329
|
break;
|
|
334
330
|
case 'success':
|
|
335
331
|
break;
|
|
@@ -338,16 +334,17 @@ export class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
338
334
|
switch (this.fs?.compilationStatus) {
|
|
339
335
|
case 'error':
|
|
340
336
|
this.fs.debugShader();
|
|
341
|
-
throw new Error(
|
|
337
|
+
throw new Error(`${this} ${errorType} during compilation of ${this.fs}`);
|
|
342
338
|
case 'pending':
|
|
343
|
-
this.fs.asyncCompilationStatus
|
|
339
|
+
await this.fs.asyncCompilationStatus;
|
|
340
|
+
this.fs.debugShader();
|
|
344
341
|
break;
|
|
345
342
|
case 'success':
|
|
346
343
|
break;
|
|
347
344
|
}
|
|
348
345
|
|
|
349
346
|
const linkErrorLog = this.device.gl.getProgramInfoLog(this.handle);
|
|
350
|
-
|
|
347
|
+
this.device.reportError(new Error(`${errorType} during ${status}: ${linkErrorLog}`));
|
|
351
348
|
}
|
|
352
349
|
}
|
|
353
350
|
|
|
@@ -356,19 +353,19 @@ export class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
356
353
|
* TODO - Load log even when no error reported, to catch warnings?
|
|
357
354
|
* https://gamedev.stackexchange.com/questions/30429/how-to-detect-glsl-warnings
|
|
358
355
|
*/
|
|
359
|
-
_getLinkStatus(): 'success' | '
|
|
356
|
+
_getLinkStatus(): 'success' | 'link-error' | 'validation-error' {
|
|
360
357
|
const {gl} = this.device;
|
|
361
|
-
const linked = gl.getProgramParameter(this.handle,
|
|
358
|
+
const linked = gl.getProgramParameter(this.handle, GL.LINK_STATUS);
|
|
362
359
|
if (!linked) {
|
|
363
360
|
this.linkStatus = 'error';
|
|
364
|
-
return '
|
|
361
|
+
return 'link-error';
|
|
365
362
|
}
|
|
366
363
|
|
|
367
364
|
gl.validateProgram(this.handle);
|
|
368
|
-
const validated = gl.getProgramParameter(this.handle,
|
|
365
|
+
const validated = gl.getProgramParameter(this.handle, GL.VALIDATE_STATUS);
|
|
369
366
|
if (!validated) {
|
|
370
367
|
this.linkStatus = 'error';
|
|
371
|
-
return 'validation';
|
|
368
|
+
return 'validation-error';
|
|
372
369
|
}
|
|
373
370
|
|
|
374
371
|
this.linkStatus = 'success';
|
|
@@ -21,7 +21,7 @@ export class WEBGLSampler extends Sampler {
|
|
|
21
21
|
super(device, props);
|
|
22
22
|
this.device = device;
|
|
23
23
|
this.parameters = convertSamplerParametersToWebGL(props);
|
|
24
|
-
this.handle =
|
|
24
|
+
this.handle = props.handle || this.device.gl.createSampler();
|
|
25
25
|
this._setSamplerParameters(this.parameters);
|
|
26
26
|
}
|
|
27
27
|
|
|
@@ -27,6 +27,10 @@ export class WEBGLShader extends Shader {
|
|
|
27
27
|
default:
|
|
28
28
|
throw new Error(this.props.stage);
|
|
29
29
|
}
|
|
30
|
+
|
|
31
|
+
// default framebuffer handle is null, so we can't set spector metadata...
|
|
32
|
+
device._setWebGLDebugMetadata(this.handle, this, {spector: this.props});
|
|
33
|
+
|
|
30
34
|
this._compile(this.source);
|
|
31
35
|
}
|
|
32
36
|
|
|
@@ -34,13 +38,18 @@ export class WEBGLShader extends Shader {
|
|
|
34
38
|
if (this.handle) {
|
|
35
39
|
this.removeStats();
|
|
36
40
|
this.device.gl.deleteShader(this.handle);
|
|
37
|
-
// this.handle = null;
|
|
38
41
|
this.destroyed = true;
|
|
42
|
+
// @ts-expect-error
|
|
43
|
+
this.handle.destroyed = true;
|
|
44
|
+
// this.handle = null;
|
|
39
45
|
}
|
|
40
46
|
}
|
|
41
47
|
|
|
42
48
|
get asyncCompilationStatus(): Promise<'pending' | 'success' | 'error'> {
|
|
43
|
-
return this._waitForCompilationComplete().then(() =>
|
|
49
|
+
return this._waitForCompilationComplete().then(() => {
|
|
50
|
+
this._getCompilationStatus();
|
|
51
|
+
return this.compilationStatus;
|
|
52
|
+
});
|
|
44
53
|
}
|
|
45
54
|
|
|
46
55
|
override async getCompilationInfo(): Promise<readonly CompilerMessage[]> {
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
5
|
import type {Device, TextureViewProps} from '@luma.gl/core';
|
|
6
|
-
// import {
|
|
6
|
+
// import {getTextureFormatInfo} from '@luma.gl/core';
|
|
7
7
|
import {TextureView, Texture} from '@luma.gl/core';
|
|
8
8
|
|
|
9
9
|
import {WebGLDevice} from '../webgl-device';
|