@luma.gl/webgl 9.0.0-beta.5 → 9.0.0-beta.7
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.map +1 -1
- package/dist/adapter/converters/device-parameters.js +128 -71
- package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
- package/dist/adapter/converters/sampler-parameters.js +20 -19
- package/dist/adapter/converters/shader-formats.d.ts.map +1 -1
- package/dist/adapter/converters/shader-formats.js +40 -20
- package/dist/adapter/converters/texture-formats.d.ts +16 -11
- package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
- package/dist/adapter/converters/texture-formats.js +224 -205
- package/dist/adapter/converters/vertex-formats.d.ts.map +1 -1
- package/dist/adapter/converters/vertex-formats.js +22 -21
- package/dist/adapter/device-helpers/webgl-device-features.d.ts +19 -5
- package/dist/adapter/device-helpers/webgl-device-features.d.ts.map +1 -1
- package/dist/adapter/device-helpers/webgl-device-features.js +89 -43
- package/dist/adapter/device-helpers/webgl-device-info.d.ts +2 -1
- package/dist/adapter/device-helpers/webgl-device-info.d.ts.map +1 -1
- package/dist/adapter/device-helpers/webgl-device-info.js +22 -19
- package/dist/adapter/device-helpers/webgl-device-limits.d.ts +33 -48
- package/dist/adapter/device-helpers/webgl-device-limits.d.ts.map +1 -1
- package/dist/adapter/device-helpers/webgl-device-limits.js +42 -87
- package/dist/adapter/helpers/decode-webgl-types.d.ts.map +1 -1
- package/dist/adapter/helpers/decode-webgl-types.js +47 -46
- package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
- package/dist/adapter/helpers/get-shader-layout.js +35 -34
- package/dist/adapter/helpers/parse-shader-compiler-log.d.ts.map +1 -1
- package/dist/adapter/helpers/parse-shader-compiler-log.js +3 -2
- package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
- package/dist/adapter/helpers/set-uniform.js +42 -41
- package/dist/adapter/helpers/webgl-topology-utils.d.ts.map +1 -1
- package/dist/adapter/helpers/webgl-topology-utils.js +40 -39
- package/dist/adapter/objects/constants-to-keys.d.ts.map +1 -1
- package/dist/adapter/objects/constants-to-keys.js +2 -1
- package/dist/adapter/objects/webgl-renderbuffer.d.ts +2 -2
- package/dist/adapter/objects/webgl-renderbuffer.d.ts.map +1 -1
- package/dist/adapter/objects/webgl-renderbuffer.js +30 -17
- package/dist/adapter/objects/webgl-resource.d.ts +2 -24
- package/dist/adapter/objects/webgl-resource.d.ts.map +1 -1
- package/dist/adapter/objects/webgl-resource.js +6 -101
- package/dist/adapter/resources/webgl-buffer.d.ts +1 -1
- package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-buffer.js +16 -15
- package/dist/adapter/resources/webgl-command-buffer.d.ts +1 -1
- package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-command-buffer.js +32 -31
- package/dist/adapter/resources/webgl-command-encoder.d.ts +8 -3
- package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-command-encoder.js +4 -2
- package/dist/adapter/resources/webgl-external-texture.js +6 -5
- package/dist/adapter/resources/webgl-framebuffer.d.ts +6 -10
- package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-framebuffer.js +60 -53
- package/dist/adapter/resources/webgl-query-set.d.ts +44 -0
- package/dist/adapter/resources/webgl-query-set.d.ts.map +1 -0
- package/dist/adapter/resources/webgl-query-set.js +136 -0
- package/dist/adapter/resources/webgl-render-pass.d.ts +3 -1
- package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-render-pass.js +20 -12
- package/dist/adapter/resources/webgl-render-pipeline.d.ts +4 -5
- package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.js +52 -61
- package/dist/adapter/resources/webgl-sampler.d.ts +1 -1
- package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-sampler.js +5 -4
- package/dist/adapter/resources/webgl-shader.d.ts +3 -2
- package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-shader.js +15 -9
- package/dist/adapter/resources/webgl-texture-view.d.ts +14 -0
- package/dist/adapter/resources/webgl-texture-view.d.ts.map +1 -0
- package/dist/adapter/resources/webgl-texture-view.js +18 -0
- package/dist/adapter/resources/webgl-texture.d.ts +6 -4
- package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-texture.js +39 -32
- 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 +10 -10
- package/dist/adapter/resources/webgl-vertex-array.d.ts +3 -3
- package/dist/adapter/resources/webgl-vertex-array.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-vertex-array.js +10 -9
- package/dist/adapter/webgl-canvas-context.d.ts +2 -2
- package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
- package/dist/adapter/webgl-canvas-context.js +3 -2
- package/dist/adapter/webgl-device.d.ts +35 -30
- package/dist/adapter/webgl-device.d.ts.map +1 -1
- package/dist/adapter/webgl-device.js +110 -109
- package/dist/classic/accessor.d.ts.map +1 -1
- package/dist/classic/accessor.js +8 -7
- package/dist/classic/clear.d.ts.map +1 -1
- package/dist/classic/clear.js +5 -4
- package/dist/classic/copy-and-blit.d.ts +1 -1
- package/dist/classic/copy-and-blit.d.ts.map +1 -1
- package/dist/classic/copy-and-blit.js +19 -19
- package/dist/classic/format-utils.d.ts.map +1 -1
- package/dist/classic/format-utils.js +16 -15
- package/dist/classic/typed-array-utils.d.ts.map +1 -1
- package/dist/classic/typed-array-utils.js +20 -19
- package/dist/context/debug/spector.d.ts.map +1 -1
- package/dist/context/debug/spector.js +2 -1
- package/dist/context/debug/webgl-developer-tools.d.ts.map +1 -1
- package/dist/context/debug/webgl-developer-tools.js +7 -6
- package/dist/context/{context → helpers}/create-browser-context.d.ts.map +1 -1
- package/dist/context/{context → helpers}/create-browser-context.js +2 -1
- package/dist/context/{context/context-data.d.ts → helpers/webgl-context-data.d.ts} +2 -3
- package/dist/context/helpers/webgl-context-data.d.ts.map +1 -0
- package/dist/context/helpers/webgl-context-data.js +21 -0
- package/dist/context/helpers/webgl-extensions.d.ts +4 -0
- package/dist/context/helpers/webgl-extensions.d.ts.map +1 -0
- package/dist/context/helpers/webgl-extensions.js +10 -0
- package/dist/context/parameters/unified-parameter-api.d.ts +3 -4
- package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
- package/dist/context/parameters/unified-parameter-api.js +7 -11
- package/dist/context/parameters/webgl-parameter-tables.d.ts +12 -13
- package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
- package/dist/context/parameters/webgl-parameter-tables.js +302 -295
- package/dist/context/state-tracker/deep-array-equal.d.ts.map +1 -1
- package/dist/context/state-tracker/deep-array-equal.js +2 -1
- package/dist/context/state-tracker/track-context-state.d.ts.map +1 -1
- package/dist/context/state-tracker/track-context-state.js +5 -4
- package/dist/context/state-tracker/with-parameters.d.ts +2 -3
- package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
- package/dist/context/state-tracker/with-parameters.js +6 -8
- package/dist/dist.dev.js +1635 -1387
- package/dist/index.cjs +1766 -1534
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +25 -25
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -23
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -1
- package/dist.min.js +6 -6
- package/package.json +4 -4
- package/src/adapter/converters/device-parameters.ts +114 -27
- package/src/adapter/converters/sampler-parameters.ts +12 -3
- package/src/adapter/converters/shader-formats.ts +47 -22
- package/src/adapter/converters/texture-formats.ts +138 -114
- package/src/adapter/converters/vertex-formats.ts +3 -3
- package/src/adapter/device-helpers/webgl-device-features.ts +102 -50
- package/src/adapter/device-helpers/webgl-device-info.ts +28 -19
- package/src/adapter/device-helpers/webgl-device-limits.ts +46 -150
- package/src/adapter/helpers/decode-webgl-types.ts +13 -7
- package/src/adapter/helpers/get-shader-layout.ts +4 -3
- package/src/adapter/helpers/parse-shader-compiler-log.ts +10 -6
- package/src/adapter/helpers/set-uniform.ts +2 -1
- package/src/adapter/helpers/webgl-topology-utils.ts +10 -3
- package/src/adapter/objects/constants-to-keys.ts +2 -1
- package/src/adapter/objects/webgl-renderbuffer.ts +36 -14
- package/src/adapter/objects/webgl-resource.ts +7 -125
- package/src/adapter/resources/webgl-buffer.ts +4 -3
- package/src/adapter/resources/webgl-command-buffer.ts +5 -5
- package/src/adapter/resources/webgl-command-encoder.ts +14 -11
- package/src/adapter/resources/webgl-external-texture.ts +6 -5
- package/src/adapter/resources/webgl-framebuffer.ts +61 -53
- package/src/adapter/resources/webgl-query-set.ts +171 -0
- package/src/adapter/resources/webgl-render-pass.ts +20 -11
- package/src/adapter/resources/webgl-render-pipeline.ts +54 -54
- package/src/adapter/resources/webgl-sampler.ts +2 -1
- package/src/adapter/resources/webgl-shader.ts +12 -5
- package/src/adapter/resources/webgl-texture-view.ts +28 -0
- package/src/adapter/resources/webgl-texture.ts +14 -3
- package/src/adapter/resources/webgl-transform-feedback.ts +2 -7
- package/src/adapter/resources/webgl-vertex-array.ts +4 -3
- package/src/adapter/webgl-canvas-context.ts +6 -4
- package/src/adapter/webgl-device.ts +116 -107
- package/src/classic/accessor.ts +5 -4
- package/src/classic/clear.ts +14 -8
- package/src/classic/copy-and-blit.ts +11 -4
- package/src/classic/format-utils.ts +2 -1
- package/src/classic/typed-array-utils.ts +3 -7
- package/src/context/debug/spector.ts +9 -6
- package/src/context/debug/webgl-developer-tools.ts +27 -14
- package/src/context/{context → helpers}/create-browser-context.ts +3 -2
- package/src/context/helpers/webgl-context-data.ts +31 -0
- package/src/context/helpers/webgl-extensions.ts +17 -0
- package/src/context/parameters/unified-parameter-api.ts +6 -17
- package/src/context/parameters/webgl-parameter-tables.ts +69 -32
- package/src/context/state-tracker/deep-array-equal.ts +2 -1
- package/src/context/state-tracker/track-context-state.ts +11 -6
- package/src/context/state-tracker/with-parameters.ts +8 -8
- package/src/index.ts +7 -6
- package/src/types.ts +2 -1
- package/dist/adapter/device-helpers/device-features.d.ts +0 -6
- package/dist/adapter/device-helpers/device-features.d.ts.map +0 -1
- package/dist/adapter/device-helpers/device-features.js +0 -65
- package/dist/adapter/device-helpers/device-limits.d.ts +0 -50
- package/dist/adapter/device-helpers/device-limits.d.ts.map +0 -1
- package/dist/adapter/device-helpers/device-limits.js +0 -92
- package/dist/adapter/device-helpers/get-device-info.d.ts +0 -4
- package/dist/adapter/device-helpers/get-device-info.d.ts.map +0 -1
- package/dist/adapter/device-helpers/get-device-info.js +0 -87
- package/dist/context/context/context-data.d.ts.map +0 -1
- package/dist/context/context/context-data.js +0 -33
- package/src/context/context/context-data.ts +0 -44
- /package/dist/context/{context → helpers}/create-browser-context.d.ts +0 -0
|
@@ -1,16 +1,18 @@
|
|
|
1
|
-
// luma.gl
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
2
3
|
// Copyright (c) vis.gl contributors
|
|
3
4
|
import { RenderPipeline, cast, splitUniformsAndBindings, log } from '@luma.gl/core';
|
|
4
5
|
import { mergeShaderLayout } from '@luma.gl/core';
|
|
5
6
|
// import {mergeShaderLayout, getAttributeInfosFromLayouts} from '@luma.gl/core';
|
|
6
7
|
import { GL } from '@luma.gl/constants';
|
|
7
|
-
import { getShaderLayout } from
|
|
8
|
-
import { withDeviceAndGLParameters } from
|
|
9
|
-
import { setUniform } from
|
|
10
|
-
import { WEBGLBuffer } from
|
|
11
|
-
import { WEBGLFramebuffer } from
|
|
12
|
-
import { WEBGLTexture } from
|
|
13
|
-
import {
|
|
8
|
+
import { getShaderLayout } from "../helpers/get-shader-layout.js";
|
|
9
|
+
import { withDeviceAndGLParameters } from "../converters/device-parameters.js";
|
|
10
|
+
import { setUniform } from "../helpers/set-uniform.js";
|
|
11
|
+
import { WEBGLBuffer } from "./webgl-buffer.js";
|
|
12
|
+
import { WEBGLFramebuffer } from "./webgl-framebuffer.js";
|
|
13
|
+
import { WEBGLTexture } from "./webgl-texture.js";
|
|
14
|
+
import { WEBGLTextureView } from "./webgl-texture-view.js";
|
|
15
|
+
import { getGLDrawMode } from "../helpers/webgl-topology-utils.js";
|
|
14
16
|
const LOG_PROGRAM_PERF_PRIORITY = 4;
|
|
15
17
|
/** Creates a new render pipeline */
|
|
16
18
|
export class WEBGLRenderPipeline extends RenderPipeline {
|
|
@@ -44,13 +46,15 @@ export class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
44
46
|
// assert(this.fs.stage === 'fragment');
|
|
45
47
|
// Setup varyings if supplied
|
|
46
48
|
// @ts-expect-error WebGL only
|
|
47
|
-
const { varyings, bufferMode =
|
|
49
|
+
const { varyings, bufferMode = 35981 } = props;
|
|
48
50
|
if (varyings && varyings.length > 0) {
|
|
49
51
|
this.varyings = varyings;
|
|
50
52
|
this.device.gl.transformFeedbackVaryings(this.handle, varyings, bufferMode);
|
|
51
53
|
}
|
|
52
54
|
this._linkShaders();
|
|
55
|
+
log.time(0, `RenderPipeline ${this.id} - shaderLayout introspection`)();
|
|
53
56
|
this.introspectedLayout = getShaderLayout(this.device.gl, this.handle);
|
|
57
|
+
log.timeEnd(0, `RenderPipeline ${this.id} - shaderLayout introspection`)();
|
|
54
58
|
// Merge provided layout with introspected layout
|
|
55
59
|
this.shaderLayout = mergeShaderLayout(this.introspectedLayout, props.shaderLayout);
|
|
56
60
|
// WebGPU has more restrictive topology support than WebGL
|
|
@@ -102,7 +106,9 @@ export class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
102
106
|
}
|
|
103
107
|
break;
|
|
104
108
|
case 'texture':
|
|
105
|
-
if (!(value instanceof
|
|
109
|
+
if (!(value instanceof WEBGLTextureView ||
|
|
110
|
+
value instanceof WEBGLTexture ||
|
|
111
|
+
value instanceof WEBGLFramebuffer)) {
|
|
106
112
|
throw new Error('texture value');
|
|
107
113
|
}
|
|
108
114
|
break;
|
|
@@ -115,24 +121,11 @@ export class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
115
121
|
this.bindings[name] = value;
|
|
116
122
|
}
|
|
117
123
|
}
|
|
118
|
-
/** This function is @deprecated, use uniform buffers */
|
|
119
|
-
setUniforms(uniforms) {
|
|
120
|
-
const { bindings } = splitUniformsAndBindings(uniforms);
|
|
121
|
-
Object.keys(bindings).forEach(name => {
|
|
122
|
-
log.warn(`Unsupported value "${JSON.stringify(bindings[name])}" used in setUniforms() for key ${name}. Use setBindings() instead?`)();
|
|
123
|
-
});
|
|
124
|
-
// TODO - check against layout
|
|
125
|
-
Object.assign(this.uniforms, uniforms);
|
|
126
|
-
}
|
|
127
124
|
/** @todo needed for portable model
|
|
128
125
|
* @note The WebGL API is offers many ways to draw things
|
|
129
126
|
* This function unifies those ways into a single call using common parameters with sane defaults
|
|
130
127
|
*/
|
|
131
128
|
draw(options) {
|
|
132
|
-
// If we are using async linking, we need to wait until linking completes
|
|
133
|
-
if (this.linkStatus !== 'success') {
|
|
134
|
-
return false;
|
|
135
|
-
}
|
|
136
129
|
const { renderPass, vertexArray, vertexCount,
|
|
137
130
|
// indexCount,
|
|
138
131
|
instanceCount, firstVertex = 0,
|
|
@@ -144,14 +137,24 @@ export class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
144
137
|
const isIndexed = Boolean(vertexArray.indexBuffer);
|
|
145
138
|
const glIndexType = vertexArray.indexBuffer?.glIndexType;
|
|
146
139
|
const isInstanced = Number(instanceCount) > 0;
|
|
140
|
+
// If we are using async linking, we need to wait until linking completes
|
|
141
|
+
if (this.linkStatus !== 'success') {
|
|
142
|
+
log.info(2, `RenderPipeline:${this.id}.draw() aborted - waiting for shader linking`)();
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
147
145
|
// Avoid WebGL draw call when not rendering any data or values are incomplete
|
|
148
146
|
// Note: async textures set as uniforms might still be loading.
|
|
149
147
|
// Now that all uniforms have been updated, check if any texture
|
|
150
148
|
// in the uniforms is not yet initialized, then we don't draw
|
|
151
149
|
if (!this._areTexturesRenderable() || vertexCount === 0) {
|
|
152
|
-
|
|
150
|
+
log.info(2, `RenderPipeline:${this.id}.draw() aborted - textures not yet loaded`)();
|
|
153
151
|
return false;
|
|
154
152
|
}
|
|
153
|
+
// (isInstanced && instanceCount === 0)
|
|
154
|
+
if (vertexCount === 0) {
|
|
155
|
+
log.info(2, `RenderPipeline:${this.id}.draw() aborted - no vertices to draw`)();
|
|
156
|
+
return true;
|
|
157
|
+
}
|
|
155
158
|
this.device.gl.useProgram(this.handle);
|
|
156
159
|
// Note: Rebinds constant attributes before each draw call
|
|
157
160
|
vertexArray.bindBeforeRender(renderPass);
|
|
@@ -162,34 +165,8 @@ export class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
162
165
|
this._applyBindings();
|
|
163
166
|
this._applyUniforms();
|
|
164
167
|
const webglRenderPass = renderPass;
|
|
165
|
-
// // TODO - Use polyfilled WebGL2RenderingContext instead of ANGLE extension
|
|
166
|
-
// if (isIndexed && isInstanced) {
|
|
167
|
-
// // ANGLE_instanced_arrays extension
|
|
168
|
-
// this.device.gl.drawElementsInstanced(
|
|
169
|
-
// drawMode,
|
|
170
|
-
// vertexCount || 0, // indexCount?
|
|
171
|
-
// indexType,
|
|
172
|
-
// firstVertex,
|
|
173
|
-
// instanceCount || 0
|
|
174
|
-
// );
|
|
175
|
-
// // } else if (isIndexed && this.device.isWebGL2 && !isNaN(start) && !isNaN(end)) {
|
|
176
|
-
// // this.device.gldrawRangeElements(drawMode, start, end, vertexCount, indexType, offset);
|
|
177
|
-
// } else if (isIndexed) {
|
|
178
|
-
// this.device.gl.drawElements(drawMode, vertexCount || 0, indexType, firstVertex); // indexCount?
|
|
179
|
-
// } else if (isInstanced) {
|
|
180
|
-
// this.device.gl.drawArraysInstanced(
|
|
181
|
-
// drawMode,
|
|
182
|
-
// firstVertex,
|
|
183
|
-
// vertexCount || 0,
|
|
184
|
-
// instanceCount || 0
|
|
185
|
-
// );
|
|
186
|
-
// } else {
|
|
187
|
-
// this.device.gl.drawArrays(drawMode, firstVertex, vertexCount || 0);
|
|
188
|
-
// }
|
|
189
|
-
// });
|
|
190
168
|
withDeviceAndGLParameters(this.device, this.props.parameters, webglRenderPass.glParameters, () => {
|
|
191
169
|
if (isIndexed && isInstanced) {
|
|
192
|
-
// ANGLE_instanced_arrays extension
|
|
193
170
|
this.device.gl.drawElementsInstanced(glDrawMode, vertexCount || 0, // indexCount?
|
|
194
171
|
glIndexType, firstVertex, instanceCount || 0);
|
|
195
172
|
// } else if (isIndexed && this.device.isWebGL2 && !isNaN(start) && !isNaN(end)) {
|
|
@@ -211,6 +188,15 @@ export class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
211
188
|
vertexArray.unbindAfterRender(renderPass);
|
|
212
189
|
return true;
|
|
213
190
|
}
|
|
191
|
+
// DEPRECATED METHODS
|
|
192
|
+
setUniformsWebGL(uniforms) {
|
|
193
|
+
const { bindings } = splitUniformsAndBindings(uniforms);
|
|
194
|
+
Object.keys(bindings).forEach(name => {
|
|
195
|
+
log.warn(`Unsupported value "${JSON.stringify(bindings[name])}" used in setUniforms() for key ${name}. Use setBindings() instead?`)();
|
|
196
|
+
});
|
|
197
|
+
// TODO - check against layout
|
|
198
|
+
Object.assign(this.uniforms, uniforms);
|
|
199
|
+
}
|
|
214
200
|
// PRIVATE METHODS
|
|
215
201
|
// setAttributes(attributes: Record<string, Buffer>): void {}
|
|
216
202
|
// setBindings(bindings: Record<string, Binding>): void {}
|
|
@@ -225,7 +211,7 @@ export class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
225
211
|
if (log.level === 0) {
|
|
226
212
|
// return;
|
|
227
213
|
}
|
|
228
|
-
if (!this.device.features.has('
|
|
214
|
+
if (!this.device.features.has('compilation-status-async-webgl')) {
|
|
229
215
|
const status = this._getLinkStatus();
|
|
230
216
|
this._reportLinkStatus(status);
|
|
231
217
|
return;
|
|
@@ -262,13 +248,13 @@ export class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
262
248
|
*/
|
|
263
249
|
_getLinkStatus() {
|
|
264
250
|
const { gl } = this.device;
|
|
265
|
-
const linked = gl.getProgramParameter(this.handle,
|
|
251
|
+
const linked = gl.getProgramParameter(this.handle, 35714);
|
|
266
252
|
if (!linked) {
|
|
267
253
|
this.linkStatus = 'error';
|
|
268
254
|
return 'linking';
|
|
269
255
|
}
|
|
270
256
|
gl.validateProgram(this.handle);
|
|
271
|
-
const validated = gl.getProgramParameter(this.handle,
|
|
257
|
+
const validated = gl.getProgramParameter(this.handle, 35715);
|
|
272
258
|
if (!validated) {
|
|
273
259
|
this.linkStatus = 'error';
|
|
274
260
|
return 'validation';
|
|
@@ -281,13 +267,13 @@ export class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
281
267
|
const waitMs = async (ms) => await new Promise(resolve => setTimeout(resolve, ms));
|
|
282
268
|
const DELAY_MS = 10; // Shader compilation is typically quite fast (with some exceptions)
|
|
283
269
|
// If status polling is not available, we can't wait for completion. Just wait a little to minimize blocking
|
|
284
|
-
if (!this.device.features.has('
|
|
270
|
+
if (!this.device.features.has('compilation-status-async-webgl')) {
|
|
285
271
|
await waitMs(DELAY_MS);
|
|
286
272
|
return;
|
|
287
273
|
}
|
|
288
274
|
const { gl } = this.device;
|
|
289
275
|
for (;;) {
|
|
290
|
-
const complete = gl.getProgramParameter(this.handle,
|
|
276
|
+
const complete = gl.getProgramParameter(this.handle, 37297);
|
|
291
277
|
if (complete) {
|
|
292
278
|
return;
|
|
293
279
|
}
|
|
@@ -330,16 +316,16 @@ export class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
330
316
|
// Set buffer
|
|
331
317
|
const { name } = binding;
|
|
332
318
|
const location = gl.getUniformBlockIndex(this.handle, name);
|
|
333
|
-
if (location ===
|
|
319
|
+
if (location === 4294967295) {
|
|
334
320
|
throw new Error(`Invalid uniform block name ${name}`);
|
|
335
321
|
}
|
|
336
322
|
gl.uniformBlockBinding(this.handle, uniformBufferIndex, location);
|
|
337
323
|
// console.debug(binding, location);
|
|
338
324
|
if (value instanceof WEBGLBuffer) {
|
|
339
|
-
gl.bindBufferBase(
|
|
325
|
+
gl.bindBufferBase(35345, uniformBufferIndex, value.handle);
|
|
340
326
|
}
|
|
341
327
|
else {
|
|
342
|
-
gl.bindBufferRange(
|
|
328
|
+
gl.bindBufferRange(35345, uniformBufferIndex,
|
|
343
329
|
// @ts-expect-error
|
|
344
330
|
value.buffer.handle,
|
|
345
331
|
// @ts-expect-error
|
|
@@ -350,11 +336,16 @@ export class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
350
336
|
uniformBufferIndex += 1;
|
|
351
337
|
break;
|
|
352
338
|
case 'texture':
|
|
353
|
-
if (!(value instanceof
|
|
339
|
+
if (!(value instanceof WEBGLTextureView ||
|
|
340
|
+
value instanceof WEBGLTexture ||
|
|
341
|
+
value instanceof WEBGLFramebuffer)) {
|
|
354
342
|
throw new Error('texture');
|
|
355
343
|
}
|
|
356
344
|
let texture;
|
|
357
|
-
if (value instanceof
|
|
345
|
+
if (value instanceof WEBGLTextureView) {
|
|
346
|
+
texture = value.texture;
|
|
347
|
+
}
|
|
348
|
+
else if (value instanceof WEBGLTexture) {
|
|
358
349
|
texture = value;
|
|
359
350
|
}
|
|
360
351
|
else if (value instanceof WEBGLFramebuffer &&
|
|
@@ -365,7 +356,7 @@ export class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
365
356
|
else {
|
|
366
357
|
throw new Error('No texture');
|
|
367
358
|
}
|
|
368
|
-
gl.activeTexture(
|
|
359
|
+
gl.activeTexture(33984 + textureUnit);
|
|
369
360
|
gl.bindTexture(texture.target, texture.handle);
|
|
370
361
|
// gl.bindSampler(textureUnit, sampler.handle);
|
|
371
362
|
textureUnit += 1;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Sampler, SamplerProps } from '@luma.gl/core';
|
|
2
2
|
import { GLSamplerParameters } from '@luma.gl/constants';
|
|
3
|
-
import type { WebGLDevice } from
|
|
3
|
+
import type { WebGLDevice } from "../webgl-device.js";
|
|
4
4
|
/**
|
|
5
5
|
* Sampler object -
|
|
6
6
|
* so that they can be set directly on the texture
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgl-sampler.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgl-sampler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"webgl-sampler.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgl-sampler.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,OAAO,EAAE,YAAY,EAAC,MAAM,eAAe,CAAC;AACpD,OAAO,EAAK,mBAAmB,EAAC,MAAM,oBAAoB,CAAC;AAE3D,OAAO,KAAK,EAAC,WAAW,EAAC,2BAAwB;AAEjD;;;;GAIG;AACH,qBAAa,YAAa,SAAQ,OAAO;IACvC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,mBAAmB,CAAC;gBAE7B,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY;IAQ3C,OAAO,IAAI,IAAI;IAQf,QAAQ,IAAI,MAAM;IAI3B,4CAA4C;IAC5C,OAAO,CAAC,qBAAqB;CAgB9B"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
// luma.gl
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
2
3
|
// Copyright (c) vis.gl contributors
|
|
3
4
|
import { Sampler } from '@luma.gl/core';
|
|
4
5
|
import { GL } from '@luma.gl/constants';
|
|
5
|
-
import { convertSamplerParametersToWebGL } from
|
|
6
|
+
import { convertSamplerParametersToWebGL } from "../converters/sampler-parameters.js";
|
|
6
7
|
/**
|
|
7
8
|
* Sampler object -
|
|
8
9
|
* so that they can be set directly on the texture
|
|
@@ -36,8 +37,8 @@ export class WEBGLSampler extends Sampler {
|
|
|
36
37
|
// For now, pick the float version for parameters specified as GLfloat.
|
|
37
38
|
const param = Number(pname);
|
|
38
39
|
switch (param) {
|
|
39
|
-
case
|
|
40
|
-
case
|
|
40
|
+
case 33082:
|
|
41
|
+
case 33083:
|
|
41
42
|
this.device.gl.samplerParameterf(this.handle, param, value);
|
|
42
43
|
break;
|
|
43
44
|
default:
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Shader, ShaderProps, CompilerMessage } from '@luma.gl/core';
|
|
2
|
-
import { WebGLDevice } from
|
|
2
|
+
import { WebGLDevice } from "../webgl-device.js";
|
|
3
3
|
/**
|
|
4
4
|
* An immutable compiled shader program that execute portions of the GPU Pipeline
|
|
5
5
|
*/
|
|
@@ -10,6 +10,7 @@ export declare class WEBGLShader extends Shader {
|
|
|
10
10
|
destroy(): void;
|
|
11
11
|
getCompilationInfo(): Promise<readonly CompilerMessage[]>;
|
|
12
12
|
getCompilationInfoSync(): readonly CompilerMessage[];
|
|
13
|
+
getTranslatedSource(): string | null;
|
|
13
14
|
/** Compile a shader and get compilation status */
|
|
14
15
|
protected _compile(source: string): Promise<void>;
|
|
15
16
|
/** Use KHR_parallel_shader_compile extension if available */
|
|
@@ -18,7 +19,7 @@ export declare class WEBGLShader extends Shader {
|
|
|
18
19
|
* Get the shader compilation status
|
|
19
20
|
* TODO - Load log even when no error reported, to catch warnings?
|
|
20
21
|
* https://gamedev.stackexchange.com/questions/30429/how-to-detect-glsl-warnings
|
|
21
|
-
|
|
22
|
+
*/
|
|
22
23
|
protected _getCompilationStatus(): void;
|
|
23
24
|
}
|
|
24
25
|
//# sourceMappingURL=webgl-shader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgl-shader.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgl-shader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"webgl-shader.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgl-shader.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,MAAM,EAAE,WAAW,EAAE,eAAe,EAAM,MAAM,eAAe,CAAC;AAGxE,OAAO,EAAC,WAAW,EAAC,2BAAwB;AAE5C;;GAEG;AACH,qBAAa,WAAY,SAAQ,MAAM;IACrC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;gBAEjB,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW;IAgB1C,OAAO,IAAI,IAAI;IAST,kBAAkB,IAAI,OAAO,CAAC,SAAS,eAAe,EAAE,CAAC;IAK/D,sBAAsB;IAKtB,mBAAmB,IAAI,MAAM,GAAG,IAAI;IAQ7C,kDAAkD;cAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoCvD,6DAA6D;cAC7C,2BAA2B,IAAI,OAAO,CAAC,IAAI,CAAC;IAoB5D;;;;OAIG;IACH,SAAS,CAAC,qBAAqB;CAKhC"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
// luma.gl
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
2
3
|
// Copyright (c) vis.gl contributors
|
|
3
4
|
import { Shader, log } from '@luma.gl/core';
|
|
4
5
|
import { GL } from '@luma.gl/constants';
|
|
5
|
-
import { parseShaderCompilerLog } from
|
|
6
|
+
import { parseShaderCompilerLog } from "../helpers/parse-shader-compiler-log.js";
|
|
6
7
|
/**
|
|
7
8
|
* An immutable compiled shader program that execute portions of the GPU Pipeline
|
|
8
9
|
*/
|
|
@@ -14,10 +15,10 @@ export class WEBGLShader extends Shader {
|
|
|
14
15
|
this.device = device;
|
|
15
16
|
switch (this.props.stage) {
|
|
16
17
|
case 'vertex':
|
|
17
|
-
this.handle = this.props.handle || this.device.gl.createShader(
|
|
18
|
+
this.handle = this.props.handle || this.device.gl.createShader(35633);
|
|
18
19
|
break;
|
|
19
20
|
case 'fragment':
|
|
20
|
-
this.handle = this.props.handle || this.device.gl.createShader(
|
|
21
|
+
this.handle = this.props.handle || this.device.gl.createShader(35632);
|
|
21
22
|
break;
|
|
22
23
|
default:
|
|
23
24
|
throw new Error(this.props.stage);
|
|
@@ -40,6 +41,11 @@ export class WEBGLShader extends Shader {
|
|
|
40
41
|
const log = this.device.gl.getShaderInfoLog(this.handle);
|
|
41
42
|
return parseShaderCompilerLog(log);
|
|
42
43
|
}
|
|
44
|
+
getTranslatedSource() {
|
|
45
|
+
const extensions = this.device.getExtension('WEBGL_debug_shaders');
|
|
46
|
+
const ext = extensions.WEBGL_debug_shaders;
|
|
47
|
+
return ext?.getTranslatedShaderSource(this.handle);
|
|
48
|
+
}
|
|
43
49
|
// PRIVATE METHODS
|
|
44
50
|
/** Compile a shader and get compilation status */
|
|
45
51
|
async _compile(source) {
|
|
@@ -54,7 +60,7 @@ export class WEBGLShader extends Shader {
|
|
|
54
60
|
return;
|
|
55
61
|
}
|
|
56
62
|
// Sync case - slower, but advantage is that it throws in the constructor, making break on error more useful
|
|
57
|
-
if (!this.device.features.has('
|
|
63
|
+
if (!this.device.features.has('compilation-status-async-webgl')) {
|
|
58
64
|
this._getCompilationStatus();
|
|
59
65
|
if (this.compilationStatus === 'error') {
|
|
60
66
|
throw new Error(`GLSL compilation errors in ${this.props.stage} shader ${this.props.id}`);
|
|
@@ -76,13 +82,13 @@ export class WEBGLShader extends Shader {
|
|
|
76
82
|
const waitMs = async (ms) => await new Promise(resolve => setTimeout(resolve, ms));
|
|
77
83
|
const DELAY_MS = 10; // Shader compilation is typically quite fast (with some exceptions)
|
|
78
84
|
// If status polling is not available, we can't wait for completion. Just wait a little to minimize blocking
|
|
79
|
-
if (!this.device.features.has('
|
|
85
|
+
if (!this.device.features.has('compilation-status-async-webgl')) {
|
|
80
86
|
await waitMs(DELAY_MS);
|
|
81
87
|
return;
|
|
82
88
|
}
|
|
83
89
|
const { gl } = this.device;
|
|
84
90
|
for (;;) {
|
|
85
|
-
const complete = gl.getShaderParameter(this.handle,
|
|
91
|
+
const complete = gl.getShaderParameter(this.handle, 37297);
|
|
86
92
|
if (complete) {
|
|
87
93
|
return;
|
|
88
94
|
}
|
|
@@ -93,9 +99,9 @@ export class WEBGLShader extends Shader {
|
|
|
93
99
|
* Get the shader compilation status
|
|
94
100
|
* TODO - Load log even when no error reported, to catch warnings?
|
|
95
101
|
* https://gamedev.stackexchange.com/questions/30429/how-to-detect-glsl-warnings
|
|
96
|
-
|
|
102
|
+
*/
|
|
97
103
|
_getCompilationStatus() {
|
|
98
|
-
this.compilationStatus = this.device.gl.getShaderParameter(this.handle,
|
|
104
|
+
this.compilationStatus = this.device.gl.getShaderParameter(this.handle, 35713)
|
|
99
105
|
? 'success'
|
|
100
106
|
: 'error';
|
|
101
107
|
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Device, TextureViewProps } from '@luma.gl/core';
|
|
2
|
+
import { TextureView } from '@luma.gl/core';
|
|
3
|
+
import { WebGLDevice } from "../webgl-device.js";
|
|
4
|
+
import { WEBGLTexture } from "./webgl-texture.js";
|
|
5
|
+
export declare class WEBGLTextureView extends TextureView {
|
|
6
|
+
readonly device: WebGLDevice;
|
|
7
|
+
readonly gl: WebGL2RenderingContext;
|
|
8
|
+
readonly handle: WebGLTexture;
|
|
9
|
+
readonly texture: WEBGLTexture;
|
|
10
|
+
constructor(device: Device, props: TextureViewProps & {
|
|
11
|
+
texture: WEBGLTexture;
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=webgl-texture-view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webgl-texture-view.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgl-texture-view.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,MAAM,EAAE,gBAAgB,EAAC,MAAM,eAAe,CAAC;AAE5D,OAAO,EAAC,WAAW,EAAU,MAAM,eAAe,CAAC;AAEnD,OAAO,EAAC,WAAW,EAAC,2BAAwB;AAC5C,OAAO,EAAC,YAAY,EAAC,2BAAwB;AAE7C,qBAAa,gBAAiB,SAAQ,WAAW;IAC/C,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,EAAE,EAAE,sBAAsB,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAE9B,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;gBAEnB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG;QAAC,OAAO,EAAE,YAAY,CAAA;KAAC;CAS9E"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
// import {decodeTextureFormat} from '@luma.gl/core';
|
|
5
|
+
import { TextureView, Texture } from '@luma.gl/core';
|
|
6
|
+
export class WEBGLTextureView extends TextureView {
|
|
7
|
+
device;
|
|
8
|
+
gl;
|
|
9
|
+
handle;
|
|
10
|
+
texture;
|
|
11
|
+
constructor(device, props) {
|
|
12
|
+
super(device, { ...Texture.defaultProps, ...props });
|
|
13
|
+
this.device = device;
|
|
14
|
+
this.gl = this.device.gl;
|
|
15
|
+
this.handle = null;
|
|
16
|
+
this.texture = props.texture;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { Device, TextureProps, Sampler, SamplerProps, TypedArray } from '@luma.gl/core';
|
|
1
|
+
import { Device, TextureProps, TextureViewProps, Sampler, SamplerProps, TypedArray } from '@luma.gl/core';
|
|
2
2
|
import { Texture } from '@luma.gl/core';
|
|
3
3
|
import { GL, GLSamplerParameters } from '@luma.gl/constants';
|
|
4
|
-
import { WebGLDevice } from
|
|
5
|
-
import { WEBGLSampler } from
|
|
4
|
+
import { WebGLDevice } from "../webgl-device.js";
|
|
5
|
+
import { WEBGLSampler } from "./webgl-sampler.js";
|
|
6
|
+
import { WEBGLTextureView } from "./webgl-texture-view.js";
|
|
6
7
|
export type WEBGLTextureProps = TextureProps & {
|
|
7
8
|
/** @deprecated use props.sampler */
|
|
8
9
|
parameters?: Record<number, number>;
|
|
@@ -103,8 +104,8 @@ export declare class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
103
104
|
readonly device: WebGLDevice;
|
|
104
105
|
readonly gl: WebGL2RenderingContext;
|
|
105
106
|
readonly handle: WebGLTexture;
|
|
106
|
-
/** Sampler object (currently unused) */
|
|
107
107
|
sampler: WEBGLSampler;
|
|
108
|
+
view: WEBGLTextureView;
|
|
108
109
|
glFormat: GL;
|
|
109
110
|
type: GL;
|
|
110
111
|
dataFormat: GL;
|
|
@@ -134,6 +135,7 @@ export declare class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
134
135
|
constructor(device: Device, props: WEBGLTextureProps);
|
|
135
136
|
destroy(): void;
|
|
136
137
|
toString(): string;
|
|
138
|
+
createView(props: TextureViewProps): WEBGLTextureView;
|
|
137
139
|
initialize(props?: WEBGLTextureProps): this;
|
|
138
140
|
initializeCube(props?: WEBGLTextureProps): this;
|
|
139
141
|
setSampler(sampler?: Sampler | SamplerProps): this;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgl-texture.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgl-texture.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"webgl-texture.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgl-texture.ts"],"names":[],"mappings":"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"}
|