@luma.gl/webgl 9.1.0-alpha.2 → 9.1.0-beta.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.d.ts +3 -3
- package/dist/adapter/converters/device-parameters.d.ts.map +1 -1
- package/dist/adapter/converters/device-parameters.js +19 -11
- package/dist/adapter/converters/device-parameters.js.map +1 -0
- package/dist/adapter/converters/sampler-parameters.js +7 -4
- package/dist/adapter/converters/sampler-parameters.js.map +1 -0
- package/dist/adapter/converters/shader-formats.js +1 -0
- package/dist/adapter/converters/shader-formats.js.map +1 -0
- package/dist/adapter/converters/vertex-formats.js +1 -0
- package/dist/adapter/converters/vertex-formats.js.map +1 -0
- package/dist/adapter/converters/webgl-texture-table.d.ts +40 -0
- package/dist/adapter/converters/webgl-texture-table.d.ts.map +1 -0
- package/dist/adapter/converters/webgl-texture-table.js +304 -0
- package/dist/adapter/converters/webgl-texture-table.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 +2 -3
- package/dist/adapter/device-helpers/webgl-device-features.js.map +1 -0
- package/dist/adapter/device-helpers/webgl-device-info.js +1 -0
- package/dist/adapter/device-helpers/webgl-device-info.js.map +1 -0
- package/dist/adapter/device-helpers/webgl-device-limits.js +1 -0
- package/dist/adapter/device-helpers/webgl-device-limits.js.map +1 -0
- package/dist/adapter/helpers/decode-webgl-types.js +1 -0
- package/dist/adapter/helpers/decode-webgl-types.js.map +1 -0
- package/dist/adapter/helpers/format-utils.d.ts.map +1 -0
- package/dist/{classic → adapter/helpers}/format-utils.js +7 -0
- package/dist/adapter/helpers/format-utils.js.map +1 -0
- package/dist/adapter/helpers/get-shader-layout.d.ts +1 -1
- package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
- package/dist/adapter/helpers/get-shader-layout.js +5 -4
- package/dist/adapter/helpers/get-shader-layout.js.map +1 -0
- package/dist/adapter/helpers/parse-shader-compiler-log.js +1 -0
- package/dist/adapter/helpers/parse-shader-compiler-log.js.map +1 -0
- package/dist/adapter/helpers/set-uniform.js +1 -0
- package/dist/adapter/helpers/set-uniform.js.map +1 -0
- package/dist/adapter/helpers/typed-array-utils.d.ts.map +1 -0
- package/dist/{classic → adapter/helpers}/typed-array-utils.js +1 -0
- package/dist/adapter/helpers/typed-array-utils.js.map +1 -0
- package/dist/adapter/helpers/webgl-texture-utils.d.ts +100 -29
- package/dist/adapter/helpers/webgl-texture-utils.d.ts.map +1 -1
- package/dist/adapter/helpers/webgl-texture-utils.js +231 -240
- package/dist/adapter/helpers/webgl-texture-utils.js.map +1 -0
- package/dist/adapter/helpers/webgl-topology-utils.js +1 -0
- package/dist/adapter/helpers/webgl-topology-utils.js.map +1 -0
- package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-buffer.js +4 -1
- package/dist/adapter/resources/webgl-buffer.js.map +1 -0
- package/dist/adapter/resources/webgl-command-buffer.d.ts +59 -2
- package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-command-buffer.js +89 -32
- package/dist/adapter/resources/webgl-command-buffer.js.map +1 -0
- package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-command-encoder.js +4 -0
- package/dist/adapter/resources/webgl-command-encoder.js.map +1 -0
- package/dist/adapter/resources/webgl-external-texture.js +15 -0
- package/dist/adapter/resources/webgl-external-texture.js.map +1 -0
- package/dist/adapter/resources/webgl-framebuffer.d.ts +33 -35
- package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-framebuffer.js +71 -76
- package/dist/adapter/resources/webgl-framebuffer.js.map +1 -0
- package/dist/adapter/resources/webgl-query-set.js +1 -0
- package/dist/adapter/resources/webgl-query-set.js.map +1 -0
- package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-render-pass.js +49 -21
- package/dist/adapter/resources/webgl-render-pass.js.map +1 -0
- package/dist/adapter/resources/webgl-render-pipeline.d.ts +3 -4
- package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.js +45 -23
- package/dist/adapter/resources/webgl-render-pipeline.js.map +1 -0
- package/dist/adapter/resources/webgl-sampler.js +1 -0
- package/dist/adapter/resources/webgl-sampler.js.map +1 -0
- package/dist/adapter/resources/webgl-shader.d.ts +1 -0
- package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-shader.js +13 -6
- package/dist/adapter/resources/webgl-shader.js.map +1 -0
- package/dist/adapter/resources/webgl-texture-view.js +1 -0
- package/dist/adapter/resources/webgl-texture-view.js.map +1 -0
- package/dist/adapter/resources/webgl-texture.d.ts +33 -21
- package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-texture.js +172 -242
- package/dist/adapter/resources/webgl-texture.js.map +1 -0
- package/dist/adapter/resources/webgl-transform-feedback.js +1 -0
- package/dist/adapter/resources/webgl-transform-feedback.js.map +1 -0
- package/dist/adapter/resources/webgl-vertex-array.js +1 -0
- package/dist/adapter/resources/webgl-vertex-array.js.map +1 -0
- package/dist/adapter/webgl-adapter.d.ts +21 -0
- package/dist/adapter/webgl-adapter.d.ts.map +1 -0
- package/dist/adapter/webgl-adapter.js +86 -0
- package/dist/adapter/webgl-adapter.js.map +1 -0
- package/dist/adapter/webgl-canvas-context.d.ts +4 -6
- package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
- package/dist/adapter/webgl-canvas-context.js +13 -17
- package/dist/adapter/webgl-canvas-context.js.map +1 -0
- package/dist/adapter/webgl-device.d.ts +35 -46
- package/dist/adapter/webgl-device.d.ts.map +1 -1
- package/dist/adapter/webgl-device.js +100 -156
- package/dist/adapter/webgl-device.js.map +1 -0
- package/dist/context/debug/spector-types.d.ts +1108 -0
- package/dist/context/debug/spector-types.d.ts.map +1 -0
- package/dist/context/debug/spector-types.js +698 -0
- package/dist/context/debug/spector-types.js.map +1 -0
- package/dist/context/debug/spector.d.ts +12 -8
- package/dist/context/debug/spector.d.ts.map +1 -1
- package/dist/context/debug/spector.js +24 -17
- package/dist/context/debug/spector.js.map +1 -0
- package/dist/context/debug/webgl-developer-tools.d.ts +2 -3
- package/dist/context/debug/webgl-developer-tools.d.ts.map +1 -1
- package/dist/context/debug/webgl-developer-tools.js +7 -19
- package/dist/context/debug/webgl-developer-tools.js.map +1 -0
- package/dist/context/helpers/create-browser-context.d.ts +6 -22
- package/dist/context/helpers/create-browser-context.d.ts.map +1 -1
- package/dist/context/helpers/create-browser-context.js +41 -32
- package/dist/context/helpers/create-browser-context.js.map +1 -0
- package/dist/context/helpers/webgl-context-data.js +1 -0
- package/dist/context/helpers/webgl-context-data.js.map +1 -0
- package/dist/context/helpers/webgl-extensions.js +1 -0
- package/dist/context/helpers/webgl-extensions.js.map +1 -0
- package/dist/context/parameters/unified-parameter-api.js +1 -0
- package/dist/context/parameters/unified-parameter-api.js.map +1 -0
- 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 +3 -2
- package/dist/context/parameters/webgl-parameter-tables.js.map +1 -0
- package/dist/context/polyfills/polyfill-webgl1-extensions.d.ts +9 -0
- package/dist/context/polyfills/polyfill-webgl1-extensions.d.ts.map +1 -0
- package/dist/context/polyfills/polyfill-webgl1-extensions.js +182 -0
- package/dist/context/polyfills/polyfill-webgl1-extensions.js.map +1 -0
- package/dist/context/state-tracker/deep-array-equal.js +1 -0
- package/dist/context/state-tracker/deep-array-equal.js.map +1 -0
- package/dist/context/state-tracker/webgl-state-tracker.d.ts +43 -0
- package/dist/context/state-tracker/webgl-state-tracker.d.ts.map +1 -0
- package/dist/context/state-tracker/{track-context-state.js → webgl-state-tracker.js} +45 -74
- package/dist/context/state-tracker/webgl-state-tracker.js.map +1 -0
- package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
- package/dist/context/state-tracker/with-parameters.js +6 -4
- package/dist/context/state-tracker/with-parameters.js.map +1 -0
- package/dist/deprecated/accessor.d.ts.map +1 -0
- package/dist/{classic → deprecated}/accessor.js +37 -1
- package/dist/deprecated/accessor.js.map +1 -0
- package/dist/dist.dev.js +2397 -2430
- package/dist/dist.min.js +2 -2
- package/dist/index.cjs +2273 -2298
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +5 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -0
- package/dist/types.js +1 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/fill-array.d.ts +4 -4
- package/dist/utils/fill-array.d.ts.map +1 -1
- package/dist/utils/fill-array.js +1 -0
- package/dist/utils/fill-array.js.map +1 -0
- package/dist/utils/load-script.js +1 -0
- package/dist/utils/load-script.js.map +1 -0
- package/dist/utils/split-uniforms-and-bindings.d.ts +1 -1
- package/dist/utils/split-uniforms-and-bindings.d.ts.map +1 -1
- package/dist/utils/split-uniforms-and-bindings.js +1 -0
- package/dist/utils/split-uniforms-and-bindings.js.map +1 -0
- package/dist/utils/uid.d.ts +7 -0
- package/dist/utils/uid.d.ts.map +1 -0
- package/dist/utils/uid.js +15 -0
- package/dist/utils/uid.js.map +1 -0
- package/package.json +5 -5
- package/src/adapter/converters/device-parameters.ts +21 -15
- package/src/adapter/converters/sampler-parameters.ts +6 -4
- package/src/adapter/converters/webgl-texture-table.ts +404 -0
- package/src/adapter/device-helpers/webgl-device-features.ts +5 -3
- package/src/{classic → adapter/helpers}/format-utils.ts +6 -0
- package/src/adapter/helpers/get-shader-layout.ts +7 -4
- package/src/adapter/helpers/webgl-texture-utils.ts +410 -64
- package/src/adapter/resources/webgl-buffer.ts +3 -1
- package/src/adapter/resources/webgl-command-buffer.ts +125 -41
- package/src/adapter/resources/webgl-command-encoder.ts +6 -0
- package/src/adapter/resources/webgl-external-texture.ts +14 -0
- package/src/adapter/resources/webgl-framebuffer.ts +80 -86
- package/src/adapter/resources/webgl-render-pass.ts +72 -45
- package/src/adapter/resources/webgl-render-pipeline.ts +58 -27
- package/src/adapter/resources/webgl-shader.ts +15 -7
- package/src/adapter/resources/webgl-texture.ts +202 -274
- package/src/adapter/webgl-adapter.ts +105 -0
- package/src/adapter/webgl-canvas-context.ts +16 -19
- package/src/adapter/webgl-device.ts +144 -210
- package/src/context/debug/spector-types.ts +1154 -0
- package/src/context/debug/spector.ts +38 -29
- package/src/context/debug/webgl-developer-tools.ts +8 -31
- package/src/context/helpers/create-browser-context.ts +53 -63
- package/src/context/parameters/webgl-parameter-tables.ts +2 -2
- package/src/context/polyfills/polyfill-webgl1-extensions.ts +202 -0
- package/src/context/state-tracker/{track-context-state.ts → webgl-state-tracker.ts} +55 -94
- package/src/context/state-tracker/with-parameters.ts +5 -4
- package/src/{classic → deprecated}/accessor.ts +44 -3
- package/src/index.ts +7 -12
- package/src/utils/fill-array.ts +4 -4
- package/src/utils/split-uniforms-and-bindings.ts +3 -3
- package/src/utils/uid.ts +16 -0
- package/dist/adapter/converters/texture-formats.d.ts +0 -83
- package/dist/adapter/converters/texture-formats.d.ts.map +0 -1
- package/dist/adapter/converters/texture-formats.js +0 -518
- package/dist/classic/accessor.d.ts.map +0 -1
- package/dist/classic/clear.d.ts +0 -22
- package/dist/classic/clear.d.ts.map +0 -1
- package/dist/classic/clear.js +0 -86
- package/dist/classic/copy-and-blit.d.ts +0 -63
- package/dist/classic/copy-and-blit.d.ts.map +0 -1
- package/dist/classic/copy-and-blit.js +0 -193
- package/dist/classic/format-utils.d.ts.map +0 -1
- package/dist/classic/typed-array-utils.d.ts.map +0 -1
- package/dist/context/state-tracker/track-context-state.d.ts +0 -22
- package/dist/context/state-tracker/track-context-state.d.ts.map +0 -1
- package/src/adapter/converters/texture-formats.ts +0 -665
- package/src/classic/clear.ts +0 -115
- package/src/classic/copy-and-blit.ts +0 -318
- /package/dist/{classic → adapter/helpers}/format-utils.d.ts +0 -0
- /package/dist/{classic → adapter/helpers}/typed-array-utils.d.ts +0 -0
- /package/dist/{classic → deprecated}/accessor.d.ts +0 -0
- /package/src/{classic → adapter/helpers}/typed-array-utils.ts +0 -0
|
@@ -2,21 +2,15 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
|
-
import {NumericArray} from '@math.gl/types';
|
|
5
|
+
import {NumericArray, NumberArray4} from '@math.gl/types';
|
|
6
6
|
import {RenderPass, RenderPassProps, RenderPassParameters} from '@luma.gl/core';
|
|
7
7
|
import {WebGLDevice} from '../webgl-device';
|
|
8
8
|
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
|
-
import {pushContextState, popContextState} from '../../context/state-tracker/track-context-state';
|
|
12
11
|
import {WEBGLQuerySet} from './webgl-query-set';
|
|
12
|
+
import {WEBGLFramebuffer} from './webgl-framebuffer';
|
|
13
13
|
|
|
14
|
-
// Should collapse during minification
|
|
15
|
-
const GL_DEPTH_BUFFER_BIT = 0x00000100;
|
|
16
|
-
const GL_STENCIL_BUFFER_BIT = 0x00000400;
|
|
17
|
-
const GL_COLOR_BUFFER_BIT = 0x00004000;
|
|
18
|
-
|
|
19
|
-
const GL_COLOR = 0x1800;
|
|
20
14
|
const COLOR_CHANNELS = [0x1, 0x2, 0x4, 0x8]; // GPUColorWrite RED, GREEN, BLUE, ALPHA
|
|
21
15
|
|
|
22
16
|
export class WEBGLRenderPass extends RenderPass {
|
|
@@ -29,16 +23,42 @@ export class WEBGLRenderPass extends RenderPass {
|
|
|
29
23
|
super(device, props);
|
|
30
24
|
this.device = device;
|
|
31
25
|
|
|
26
|
+
// If no viewport is provided, apply reasonably defaults
|
|
27
|
+
let viewport;
|
|
28
|
+
if (!props?.parameters?.viewport) {
|
|
29
|
+
if (props?.framebuffer) {
|
|
30
|
+
// Set the viewport to the size of the framebuffer
|
|
31
|
+
const {width, height} = props.framebuffer;
|
|
32
|
+
viewport = [0, 0, width, height];
|
|
33
|
+
} else {
|
|
34
|
+
// Instead of using our own book-keeping, we can just read the values from the WebGL context
|
|
35
|
+
const [width, height] = device.getDefaultCanvasContext().getDrawingBufferSize();
|
|
36
|
+
viewport = [0, 0, width, height];
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
32
40
|
// TODO - do parameters (scissorRect) affect the clear operation?
|
|
33
|
-
|
|
34
|
-
this.setParameters(this.props.parameters);
|
|
41
|
+
this.device.pushState();
|
|
42
|
+
this.setParameters({viewport, ...this.props.parameters});
|
|
43
|
+
|
|
44
|
+
// Specify mapping of draw buffer locations to color attachments
|
|
45
|
+
const webglFramebuffer = this.props.framebuffer as WEBGLFramebuffer;
|
|
46
|
+
// Default framebuffers can only be set to GL.BACK or GL.NONE
|
|
47
|
+
if (webglFramebuffer?.handle) {
|
|
48
|
+
const drawBuffers = this.props.framebuffer.colorAttachments.map(
|
|
49
|
+
(_, i) => GL.COLOR_ATTACHMENT0 + i
|
|
50
|
+
);
|
|
51
|
+
this.device.gl.drawBuffers(drawBuffers);
|
|
52
|
+
} else {
|
|
53
|
+
this.device.gl.drawBuffers([GL.BACK]);
|
|
54
|
+
}
|
|
35
55
|
|
|
36
56
|
// Hack - for now WebGL draws in "immediate mode" (instead of queueing the operations)...
|
|
37
57
|
this.clear();
|
|
38
58
|
}
|
|
39
59
|
|
|
40
60
|
end(): void {
|
|
41
|
-
|
|
61
|
+
this.device.popState();
|
|
42
62
|
// should add commands to CommandEncoder.
|
|
43
63
|
}
|
|
44
64
|
|
|
@@ -72,11 +92,11 @@ export class WEBGLRenderPass extends RenderPass {
|
|
|
72
92
|
if (parameters.viewport) {
|
|
73
93
|
// WebGPU viewports are 6 coordinates (X, Y, Z)
|
|
74
94
|
if (parameters.viewport.length >= 6) {
|
|
75
|
-
glParameters.viewport = parameters.viewport.slice(0, 4);
|
|
95
|
+
glParameters.viewport = parameters.viewport.slice(0, 4) as NumberArray4;
|
|
76
96
|
glParameters.depthRange = [parameters.viewport[4], parameters.viewport[5]];
|
|
77
97
|
} else {
|
|
78
98
|
// WebGL viewports are 4 coordinates (X, Y)
|
|
79
|
-
glParameters.viewport = parameters.viewport;
|
|
99
|
+
glParameters.viewport = parameters.viewport as NumberArray4;
|
|
80
100
|
}
|
|
81
101
|
}
|
|
82
102
|
if (parameters.scissorRect) {
|
|
@@ -125,16 +145,24 @@ export class WEBGLRenderPass extends RenderPass {
|
|
|
125
145
|
|
|
126
146
|
let clearMask = 0;
|
|
127
147
|
|
|
128
|
-
if (this.props.
|
|
129
|
-
|
|
148
|
+
if (this.props.clearColors) {
|
|
149
|
+
this.props.clearColors.forEach((color, drawBufferIndex) => {
|
|
150
|
+
if (color) {
|
|
151
|
+
this.clearColorBuffer(drawBufferIndex, color);
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
if (this.props.clearColor !== false && this.props.clearColors === undefined) {
|
|
157
|
+
clearMask |= GL.COLOR_BUFFER_BIT;
|
|
130
158
|
glParameters.clearColor = this.props.clearColor;
|
|
131
159
|
}
|
|
132
160
|
if (this.props.clearDepth !== false) {
|
|
133
|
-
clearMask |=
|
|
161
|
+
clearMask |= GL.DEPTH_BUFFER_BIT;
|
|
134
162
|
glParameters.clearDepth = this.props.clearDepth;
|
|
135
163
|
}
|
|
136
164
|
if (this.props.clearStencil !== false) {
|
|
137
|
-
clearMask |=
|
|
165
|
+
clearMask |= GL.STENCIL_BUFFER_BIT;
|
|
138
166
|
glParameters.clearStencil = this.props.clearStencil;
|
|
139
167
|
}
|
|
140
168
|
|
|
@@ -143,11 +171,6 @@ export class WEBGLRenderPass extends RenderPass {
|
|
|
143
171
|
withGLParameters(this.device.gl, glParameters, () => {
|
|
144
172
|
this.device.gl.clear(clearMask);
|
|
145
173
|
});
|
|
146
|
-
|
|
147
|
-
// TODO - clear multiple color attachments
|
|
148
|
-
// for (attachment of this.framebuffer.colorAttachments) {
|
|
149
|
-
// this.clearColorBuffer
|
|
150
|
-
// }
|
|
151
174
|
}
|
|
152
175
|
}
|
|
153
176
|
|
|
@@ -158,40 +181,44 @@ export class WEBGLRenderPass extends RenderPass {
|
|
|
158
181
|
withGLParameters(this.device.gl, {framebuffer: this.props.framebuffer}, () => {
|
|
159
182
|
// Method selection per OpenGL ES 3 docs
|
|
160
183
|
switch (value.constructor) {
|
|
184
|
+
case Int8Array:
|
|
185
|
+
case Int16Array:
|
|
161
186
|
case Int32Array:
|
|
162
|
-
this.device.gl.clearBufferiv(
|
|
187
|
+
this.device.gl.clearBufferiv(GL.COLOR, drawBuffer, value);
|
|
163
188
|
break;
|
|
189
|
+
case Uint8Array:
|
|
190
|
+
case Uint8ClampedArray:
|
|
191
|
+
case Uint16Array:
|
|
164
192
|
case Uint32Array:
|
|
165
|
-
this.device.gl.clearBufferuiv(
|
|
193
|
+
this.device.gl.clearBufferuiv(GL.COLOR, drawBuffer, value);
|
|
166
194
|
break;
|
|
167
195
|
case Float32Array:
|
|
168
|
-
|
|
169
|
-
this.device.gl.clearBufferfv(GL_COLOR, drawBuffer, value);
|
|
196
|
+
this.device.gl.clearBufferfv(GL.COLOR, drawBuffer, value);
|
|
170
197
|
break;
|
|
198
|
+
default:
|
|
199
|
+
throw new Error('clearColorBuffer: color must be typed array');
|
|
171
200
|
}
|
|
172
201
|
});
|
|
173
202
|
}
|
|
174
203
|
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
// case GL_DEPTH:
|
|
181
|
-
// this.device.gl.clearBufferfv(GL_DEPTH, 0, [value]);
|
|
182
|
-
// break;
|
|
204
|
+
/*
|
|
205
|
+
clearDepthStencil() {
|
|
206
|
+
case GL.DEPTH:
|
|
207
|
+
this.device.gl.clearBufferfv(GL.DEPTH, 0, [value]);
|
|
208
|
+
break;
|
|
183
209
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
210
|
+
case GL_STENCIL:
|
|
211
|
+
this.device.gl.clearBufferiv(GL.STENCIL, 0, [value]);
|
|
212
|
+
break;
|
|
187
213
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
214
|
+
case GL.DEPTH_STENCIL:
|
|
215
|
+
const [depth, stencil] = value;
|
|
216
|
+
this.device.gl.clearBufferfi(GL.DEPTH_STENCIL, 0, depth, stencil);
|
|
217
|
+
break;
|
|
192
218
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
219
|
+
default:
|
|
220
|
+
assert(false, ERR_ARGUMENTS);
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
*/
|
|
197
224
|
}
|
|
@@ -2,14 +2,21 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
|
-
import type {
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
import type {
|
|
6
|
+
RenderPipelineProps,
|
|
7
|
+
RenderPipelineParameters,
|
|
8
|
+
PrimitiveTopology,
|
|
9
|
+
ShaderLayout,
|
|
10
|
+
UniformValue,
|
|
11
|
+
Binding,
|
|
12
|
+
RenderPass,
|
|
13
|
+
VertexArray
|
|
14
|
+
} from '@luma.gl/core';
|
|
8
15
|
import {RenderPipeline, log} from '@luma.gl/core';
|
|
9
16
|
// import {getAttributeInfosFromLayouts} from '@luma.gl/core';
|
|
10
17
|
import {GL} from '@luma.gl/constants';
|
|
11
18
|
|
|
12
|
-
import {
|
|
19
|
+
import {getShaderLayoutFromGLSL} from '../helpers/get-shader-layout';
|
|
13
20
|
import {withDeviceAndGLParameters} from '../converters/device-parameters';
|
|
14
21
|
import {setUniform} from '../helpers/set-uniform';
|
|
15
22
|
import {splitUniformsAndBindings} from '../../utils/split-uniforms-and-bindings';
|
|
@@ -50,11 +57,15 @@ export class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
50
57
|
_uniformCount: number = 0;
|
|
51
58
|
_uniformSetters: Record<string, Function> = {}; // TODO are these used?
|
|
52
59
|
|
|
60
|
+
override get [Symbol.toStringTag]() {
|
|
61
|
+
return 'WEBGLRenderPipeline';
|
|
62
|
+
}
|
|
63
|
+
|
|
53
64
|
constructor(device: WebGLDevice, props: RenderPipelineProps) {
|
|
54
65
|
super(device, props);
|
|
55
66
|
this.device = device;
|
|
56
67
|
this.handle = this.props.handle || this.device.gl.createProgram();
|
|
57
|
-
this.device.
|
|
68
|
+
this.device._setWebGLDebugMetadata(this.handle, this, {spector: {id: this.props.id}});
|
|
58
69
|
|
|
59
70
|
// Create shaders if needed
|
|
60
71
|
this.vs = props.vs as WEBGLShader;
|
|
@@ -71,10 +82,9 @@ export class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
71
82
|
}
|
|
72
83
|
|
|
73
84
|
this._linkShaders();
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
log.timeEnd(1, `RenderPipeline ${this.id} - shaderLayout introspection`)();
|
|
85
|
+
log.time(3, `RenderPipeline ${this.id} - shaderLayout introspection`)();
|
|
86
|
+
this.introspectedLayout = getShaderLayoutFromGLSL(this.device.gl, this.handle);
|
|
87
|
+
log.timeEnd(3, `RenderPipeline ${this.id} - shaderLayout introspection`)();
|
|
78
88
|
|
|
79
89
|
// Merge provided layout with introspected layout
|
|
80
90
|
this.shaderLayout = mergeShaderLayout(this.introspectedLayout, props.shaderLayout);
|
|
@@ -82,9 +92,13 @@ export class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
82
92
|
|
|
83
93
|
override destroy(): void {
|
|
84
94
|
if (this.handle) {
|
|
95
|
+
// log.error(`Deleting program ${this.id}`)();
|
|
96
|
+
this.device.gl.useProgram(null);
|
|
85
97
|
this.device.gl.deleteProgram(this.handle);
|
|
86
|
-
// this.handle = null;
|
|
87
98
|
this.destroyed = true;
|
|
99
|
+
// @ts-expect-error
|
|
100
|
+
this.handle.destroyed = true;
|
|
101
|
+
this.handle = null;
|
|
88
102
|
}
|
|
89
103
|
}
|
|
90
104
|
|
|
@@ -103,16 +117,17 @@ export class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
103
117
|
// and reference them as `app` from both GLSL and JS.
|
|
104
118
|
// TODO - this is rather hacky - we could also remap the name directly in the shader layout.
|
|
105
119
|
const binding =
|
|
106
|
-
this.shaderLayout.bindings.find(
|
|
107
|
-
this.shaderLayout.bindings.find(
|
|
120
|
+
this.shaderLayout.bindings.find(binding_ => binding_.name === name) ||
|
|
121
|
+
this.shaderLayout.bindings.find(binding_ => binding_.name === `${name}Uniforms`);
|
|
108
122
|
|
|
109
123
|
if (!binding) {
|
|
110
124
|
const validBindings = this.shaderLayout.bindings
|
|
111
|
-
.map(
|
|
125
|
+
.map(binding_ => `"${binding_.name}"`)
|
|
112
126
|
.join(', ');
|
|
113
127
|
if (!options?.disableWarnings) {
|
|
114
128
|
log.warn(
|
|
115
|
-
`
|
|
129
|
+
`No binding "${name}" in render pipeline "${this.id}", expected one of ${validBindings}`,
|
|
130
|
+
value
|
|
116
131
|
)();
|
|
117
132
|
}
|
|
118
133
|
continue; // eslint-disable-line no-continue
|
|
@@ -309,22 +324,37 @@ export class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
309
324
|
}
|
|
310
325
|
|
|
311
326
|
/** Report link status. First, check for shader compilation failures if linking fails */
|
|
312
|
-
_reportLinkStatus(status: 'success' | 'linking' | 'validation') {
|
|
327
|
+
async _reportLinkStatus(status: 'success' | 'linking' | 'validation'): Promise<void> {
|
|
313
328
|
switch (status) {
|
|
314
329
|
case 'success':
|
|
315
330
|
return;
|
|
316
331
|
|
|
317
332
|
default:
|
|
318
333
|
// First check for shader compilation failures if linking fails
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
334
|
+
switch (this.vs.compilationStatus) {
|
|
335
|
+
case 'error':
|
|
336
|
+
this.vs.debugShader();
|
|
337
|
+
throw new Error(`Error during compilation of shader ${this.vs.id}`);
|
|
338
|
+
case 'pending':
|
|
339
|
+
this.vs.asyncCompilationStatus.then(() => this.vs.debugShader());
|
|
340
|
+
break;
|
|
341
|
+
case 'success':
|
|
342
|
+
break;
|
|
322
343
|
}
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
344
|
+
|
|
345
|
+
switch (this.fs?.compilationStatus) {
|
|
346
|
+
case 'error':
|
|
347
|
+
this.fs.debugShader();
|
|
348
|
+
throw new Error(`Error during compilation of shader ${this.fs.id}`);
|
|
349
|
+
case 'pending':
|
|
350
|
+
this.fs.asyncCompilationStatus.then(() => this.fs.debugShader());
|
|
351
|
+
break;
|
|
352
|
+
case 'success':
|
|
353
|
+
break;
|
|
326
354
|
}
|
|
327
|
-
|
|
355
|
+
|
|
356
|
+
const linkErrorLog = this.device.gl.getProgramInfoLog(this.handle);
|
|
357
|
+
throw new Error(`Error during ${status}: ${linkErrorLog}`);
|
|
328
358
|
}
|
|
329
359
|
}
|
|
330
360
|
|
|
@@ -391,11 +421,12 @@ export class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
391
421
|
}
|
|
392
422
|
}
|
|
393
423
|
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
}
|
|
424
|
+
// TODO - remove this should be handled by ExternalTexture
|
|
425
|
+
// for (const [, texture] of Object.entries(this.bindings)) {
|
|
426
|
+
// if (texture instanceof WEBGLTexture) {
|
|
427
|
+
// texture.update();
|
|
428
|
+
// }
|
|
429
|
+
// }
|
|
399
430
|
|
|
400
431
|
return texturesRenderable;
|
|
401
432
|
}
|
|
@@ -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,19 +38,25 @@ 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
|
|
|
48
|
+
get asyncCompilationStatus(): Promise<'pending' | 'success' | 'error'> {
|
|
49
|
+
return this._waitForCompilationComplete().then(() => this.compilationStatus);
|
|
50
|
+
}
|
|
51
|
+
|
|
42
52
|
override async getCompilationInfo(): Promise<readonly CompilerMessage[]> {
|
|
43
53
|
await this._waitForCompilationComplete();
|
|
44
54
|
return this.getCompilationInfoSync();
|
|
45
55
|
}
|
|
46
56
|
|
|
47
57
|
override getCompilationInfoSync(): readonly CompilerMessage[] {
|
|
48
|
-
const
|
|
49
|
-
return
|
|
58
|
+
const shaderLog = this.device.gl.getShaderInfoLog(this.handle);
|
|
59
|
+
return shaderLog ? parseShaderCompilerLog(shaderLog) : [];
|
|
50
60
|
}
|
|
51
61
|
|
|
52
62
|
override getTranslatedSource(): string | null {
|
|
@@ -59,16 +69,14 @@ export class WEBGLShader extends Shader {
|
|
|
59
69
|
|
|
60
70
|
/** Compile a shader and get compilation status */
|
|
61
71
|
protected async _compile(source: string): Promise<void> {
|
|
62
|
-
|
|
63
|
-
source.startsWith('#version ') ? source : `#version 100\n${source}`;
|
|
64
|
-
source = addGLSLVersion(source);
|
|
72
|
+
source = source.startsWith('#version ') ? source : `#version 300 es\n${source}`;
|
|
65
73
|
|
|
66
74
|
const {gl} = this.device;
|
|
67
75
|
gl.shaderSource(this.handle, source);
|
|
68
76
|
gl.compileShader(this.handle);
|
|
69
77
|
|
|
70
78
|
// For performance reasons, avoid checking shader compilation errors on production
|
|
71
|
-
if (
|
|
79
|
+
if (!this.device.props.debug) {
|
|
72
80
|
this.compilationStatus = 'pending';
|
|
73
81
|
return;
|
|
74
82
|
}
|