@luma.gl/webgl 9.0.0-beta.1 → 9.0.0-beta.10
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 +295 -156
- package/dist/adapter/converters/sampler-parameters.d.ts +0 -4
- package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
- package/dist/adapter/converters/sampler-parameters.js +73 -67
- package/dist/adapter/converters/shader-formats.d.ts.map +1 -1
- package/dist/adapter/converters/shader-formats.js +53 -46
- package/dist/adapter/converters/texture-formats.d.ts +17 -21
- package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
- package/dist/adapter/converters/texture-formats.js +481 -879
- package/dist/adapter/converters/vertex-formats.d.ts.map +1 -1
- package/dist/adapter/converters/vertex-formats.js +53 -61
- package/dist/adapter/device-helpers/webgl-device-features.d.ts +20 -0
- package/dist/adapter/device-helpers/webgl-device-features.d.ts.map +1 -0
- package/dist/adapter/device-helpers/webgl-device-features.js +98 -0
- package/dist/adapter/device-helpers/webgl-device-info.d.ts +5 -0
- package/dist/adapter/device-helpers/webgl-device-info.d.ts.map +1 -0
- package/dist/adapter/device-helpers/webgl-device-info.js +90 -0
- package/dist/adapter/device-helpers/webgl-device-limits.d.ts +35 -0
- package/dist/adapter/device-helpers/webgl-device-limits.d.ts.map +1 -0
- package/dist/adapter/device-helpers/webgl-device-limits.js +47 -0
- package/dist/adapter/helpers/decode-webgl-types.d.ts.map +1 -1
- package/dist/adapter/helpers/decode-webgl-types.js +88 -76
- 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 +261 -225
- package/dist/adapter/helpers/parse-shader-compiler-log.d.ts.map +1 -1
- package/dist/adapter/helpers/parse-shader-compiler-log.js +47 -37
- package/dist/adapter/helpers/set-uniform.d.ts +1 -1
- package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
- package/dist/adapter/helpers/set-uniform.js +68 -82
- package/dist/adapter/helpers/webgl-topology-utils.d.ts.map +1 -1
- package/dist/adapter/helpers/webgl-topology-utils.js +78 -93
- package/dist/adapter/objects/constants-to-keys.d.ts +1 -1
- package/dist/adapter/objects/constants-to-keys.d.ts.map +1 -1
- package/dist/adapter/objects/constants-to-keys.js +19 -12
- 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 +86 -77
- package/dist/adapter/objects/webgl-resource.d.ts +3 -25
- package/dist/adapter/objects/webgl-resource.d.ts.map +1 -1
- package/dist/adapter/objects/webgl-resource.js +102 -147
- package/dist/adapter/resources/webgl-buffer.d.ts +3 -4
- package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-buffer.js +159 -117
- 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 +266 -168
- 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 +33 -39
- package/dist/adapter/resources/webgl-external-texture.js +93 -1
- package/dist/adapter/resources/webgl-framebuffer.d.ts +8 -12
- package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-framebuffer.js +174 -139
- 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 +124 -90
- package/dist/adapter/resources/webgl-render-pipeline.d.ts +15 -6
- package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.js +362 -221
- package/dist/adapter/resources/webgl-sampler.d.ts +1 -3
- package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-sampler.js +43 -33
- package/dist/adapter/resources/webgl-shader.d.ts +12 -2
- package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-shader.js +114 -47
- 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 +8 -10
- package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-texture.js +616 -694
- package/dist/adapter/resources/webgl-transform-feedback.d.ts +2 -2
- package/dist/adapter/resources/webgl-transform-feedback.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-transform-feedback.js +141 -143
- 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 +229 -157
- 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 +58 -36
- package/dist/adapter/webgl-device.d.ts +50 -44
- package/dist/adapter/webgl-device.d.ts.map +1 -1
- package/dist/adapter/webgl-device.js +427 -352
- package/dist/classic/accessor.d.ts.map +1 -1
- package/dist/classic/accessor.js +132 -101
- package/dist/classic/clear.d.ts +2 -2
- package/dist/classic/clear.d.ts.map +1 -1
- package/dist/classic/clear.js +73 -72
- 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 +174 -175
- package/dist/classic/format-utils.d.ts +2 -2
- package/dist/classic/format-utils.d.ts.map +1 -1
- package/dist/classic/format-utils.js +39 -32
- package/dist/classic/typed-array-utils.d.ts.map +1 -1
- package/dist/classic/typed-array-utils.js +96 -81
- package/dist/context/debug/spector.d.ts.map +1 -1
- package/dist/context/debug/spector.js +55 -50
- package/dist/context/debug/webgl-developer-tools.d.ts +1 -2
- package/dist/context/debug/webgl-developer-tools.d.ts.map +1 -1
- package/dist/context/debug/webgl-developer-tools.js +104 -77
- package/dist/context/{context → helpers}/create-browser-context.d.ts +1 -6
- package/dist/context/helpers/create-browser-context.d.ts.map +1 -0
- package/dist/context/helpers/create-browser-context.js +67 -0
- package/dist/context/{polyfill/context-data.d.ts → helpers/webgl-context-data.d.ts} +2 -2
- 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 +92 -47
- package/dist/context/parameters/webgl-parameter-tables.d.ts +109 -99
- package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
- package/dist/context/parameters/webgl-parameter-tables.js +463 -404
- package/dist/context/state-tracker/deep-array-equal.d.ts.map +1 -1
- package/dist/context/state-tracker/deep-array-equal.js +19 -14
- package/dist/context/state-tracker/track-context-state.d.ts +4 -4
- package/dist/context/state-tracker/track-context-state.d.ts.map +1 -1
- package/dist/context/state-tracker/track-context-state.js +188 -123
- 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 +42 -28
- package/dist/dist.dev.js +4465 -7235
- package/dist/dist.min.js +10 -0
- package/dist/index.cjs +2146 -3116
- package/dist/index.cjs.map +7 -0
- package/dist/index.d.ts +25 -31
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -10
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +3 -1
- package/dist.min.js +9 -42
- package/package.json +10 -15
- package/src/adapter/converters/device-parameters.ts +114 -28
- package/src/adapter/converters/sampler-parameters.ts +12 -20
- package/src/adapter/converters/shader-formats.ts +47 -22
- package/src/adapter/converters/texture-formats.ts +183 -227
- package/src/adapter/converters/vertex-formats.ts +3 -3
- package/src/adapter/device-helpers/webgl-device-features.ts +121 -0
- package/src/adapter/device-helpers/{get-device-info.ts → webgl-device-info.ts} +30 -22
- package/src/adapter/device-helpers/webgl-device-limits.ts +53 -0
- package/src/adapter/helpers/decode-webgl-types.ts +13 -7
- package/src/adapter/helpers/get-shader-layout.ts +21 -31
- package/src/adapter/helpers/parse-shader-compiler-log.ts +10 -6
- package/src/adapter/helpers/set-uniform.ts +3 -4
- package/src/adapter/helpers/webgl-topology-utils.ts +10 -3
- package/src/adapter/objects/constants-to-keys.ts +3 -2
- package/src/adapter/objects/webgl-renderbuffer.ts +38 -16
- package/src/adapter/objects/webgl-resource.ts +8 -141
- package/src/adapter/resources/webgl-buffer.ts +10 -14
- package/src/adapter/resources/webgl-command-buffer.ts +24 -34
- package/src/adapter/resources/webgl-command-encoder.ts +14 -11
- package/src/adapter/resources/webgl-external-texture.ts +7 -7
- package/src/adapter/resources/webgl-framebuffer.ts +65 -58
- package/src/adapter/resources/webgl-query-set.ts +171 -0
- package/src/adapter/resources/webgl-render-pass.ts +27 -18
- package/src/adapter/resources/webgl-render-pipeline.ts +148 -73
- package/src/adapter/resources/webgl-sampler.ts +7 -10
- package/src/adapter/resources/webgl-shader.ts +65 -11
- package/src/adapter/resources/webgl-texture-view.ts +28 -0
- package/src/adapter/resources/webgl-texture.ts +43 -106
- package/src/adapter/resources/webgl-transform-feedback.ts +16 -22
- package/src/adapter/resources/webgl-vertex-array.ts +20 -21
- package/src/adapter/webgl-canvas-context.ts +7 -11
- package/src/adapter/webgl-device.ts +142 -162
- package/src/classic/accessor.ts +5 -4
- package/src/classic/clear.ts +25 -20
- package/src/classic/copy-and-blit.ts +12 -6
- 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 +31 -20
- package/src/context/{context → helpers}/create-browser-context.ts +9 -33
- package/src/context/{polyfill/context-data.ts → helpers/webgl-context-data.ts} +3 -2
- 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 +118 -90
- package/src/context/state-tracker/deep-array-equal.ts +2 -1
- package/src/context/state-tracker/track-context-state.ts +29 -23
- package/src/context/state-tracker/with-parameters.ts +8 -8
- package/src/index.ts +16 -56
- package/src/types.ts +2 -1
- package/dist/adapter/converters/device-parameters.js.map +0 -1
- package/dist/adapter/converters/sampler-parameters.js.map +0 -1
- package/dist/adapter/converters/shader-formats.js.map +0 -1
- package/dist/adapter/converters/texture-formats.js.map +0 -1
- package/dist/adapter/converters/vertex-formats.js.map +0 -1
- package/dist/adapter/device-helpers/device-features.d.ts +0 -9
- package/dist/adapter/device-helpers/device-features.d.ts.map +0 -1
- package/dist/adapter/device-helpers/device-features.js +0 -96
- package/dist/adapter/device-helpers/device-features.js.map +0 -1
- package/dist/adapter/device-helpers/device-limits.d.ts +0 -52
- package/dist/adapter/device-helpers/device-limits.d.ts.map +0 -1
- package/dist/adapter/device-helpers/device-limits.js +0 -87
- package/dist/adapter/device-helpers/device-limits.js.map +0 -1
- 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 -71
- package/dist/adapter/device-helpers/get-device-info.js.map +0 -1
- package/dist/adapter/device-helpers/is-old-ie.d.ts +0 -2
- package/dist/adapter/device-helpers/is-old-ie.d.ts.map +0 -1
- package/dist/adapter/device-helpers/is-old-ie.js +0 -9
- package/dist/adapter/device-helpers/is-old-ie.js.map +0 -1
- package/dist/adapter/helpers/decode-webgl-types.js.map +0 -1
- package/dist/adapter/helpers/get-shader-layout.js.map +0 -1
- package/dist/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
- package/dist/adapter/helpers/set-uniform.js.map +0 -1
- package/dist/adapter/helpers/webgl-topology-utils.js.map +0 -1
- package/dist/adapter/objects/constants-to-keys.js.map +0 -1
- package/dist/adapter/objects/webgl-renderbuffer.js.map +0 -1
- package/dist/adapter/objects/webgl-resource.js.map +0 -1
- package/dist/adapter/resources/webgl-buffer.js.map +0 -1
- package/dist/adapter/resources/webgl-command-buffer.js.map +0 -1
- package/dist/adapter/resources/webgl-command-encoder.js.map +0 -1
- package/dist/adapter/resources/webgl-external-texture.js.map +0 -1
- package/dist/adapter/resources/webgl-framebuffer.js.map +0 -1
- package/dist/adapter/resources/webgl-render-pass.js.map +0 -1
- package/dist/adapter/resources/webgl-render-pipeline.js.map +0 -1
- package/dist/adapter/resources/webgl-sampler.js.map +0 -1
- package/dist/adapter/resources/webgl-shader.js.map +0 -1
- package/dist/adapter/resources/webgl-texture.js.map +0 -1
- package/dist/adapter/resources/webgl-transform-feedback.js.map +0 -1
- package/dist/adapter/resources/webgl-vertex-array.js.map +0 -1
- package/dist/adapter/webgl-canvas-context.js.map +0 -1
- package/dist/adapter/webgl-device.js.map +0 -1
- package/dist/classic/accessor.js.map +0 -1
- package/dist/classic/clear.js.map +0 -1
- package/dist/classic/copy-and-blit.js.map +0 -1
- package/dist/classic/format-utils.js.map +0 -1
- package/dist/classic/typed-array-utils.js.map +0 -1
- package/dist/context/context/create-browser-context.d.ts.map +0 -1
- package/dist/context/context/create-browser-context.js +0 -53
- package/dist/context/context/create-browser-context.js.map +0 -1
- package/dist/context/context/create-headless-context.d.ts +0 -9
- package/dist/context/context/create-headless-context.d.ts.map +0 -1
- package/dist/context/context/create-headless-context.js +0 -42
- package/dist/context/context/create-headless-context.js.map +0 -1
- package/dist/context/context/webgl-checks.d.ts +0 -13
- package/dist/context/context/webgl-checks.d.ts.map +0 -1
- package/dist/context/context/webgl-checks.js +0 -31
- package/dist/context/context/webgl-checks.js.map +0 -1
- package/dist/context/debug/spector.js.map +0 -1
- package/dist/context/debug/webgl-developer-tools.js.map +0 -1
- package/dist/context/parameters/unified-parameter-api.js.map +0 -1
- package/dist/context/parameters/webgl-parameter-tables.js.map +0 -1
- package/dist/context/polyfill/context-data.d.ts.map +0 -1
- package/dist/context/polyfill/context-data.js +0 -12
- package/dist/context/polyfill/context-data.js.map +0 -1
- package/dist/context/polyfill/get-parameter-polyfill.d.ts +0 -2
- package/dist/context/polyfill/get-parameter-polyfill.d.ts.map +0 -1
- package/dist/context/polyfill/get-parameter-polyfill.js +0 -85
- package/dist/context/polyfill/get-parameter-polyfill.js.map +0 -1
- package/dist/context/polyfill/polyfill-context.d.ts +0 -5
- package/dist/context/polyfill/polyfill-context.d.ts.map +0 -1
- package/dist/context/polyfill/polyfill-context.js +0 -87
- package/dist/context/polyfill/polyfill-context.js.map +0 -1
- package/dist/context/polyfill/polyfill-table.d.ts +0 -48
- package/dist/context/polyfill/polyfill-table.d.ts.map +0 -1
- package/dist/context/polyfill/polyfill-table.js +0 -137
- package/dist/context/polyfill/polyfill-table.js.map +0 -1
- package/dist/context/polyfill/polyfill-vertex-array-object.d.ts +0 -2
- package/dist/context/polyfill/polyfill-vertex-array-object.d.ts.map +0 -1
- package/dist/context/polyfill/polyfill-vertex-array-object.js +0 -265
- package/dist/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
- package/dist/context/state-tracker/deep-array-equal.js.map +0 -1
- package/dist/context/state-tracker/track-context-state.js.map +0 -1
- package/dist/context/state-tracker/with-parameters.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/types.js.map +0 -1
- package/src/adapter/device-helpers/device-features.ts +0 -161
- package/src/adapter/device-helpers/device-limits.ts +0 -155
- package/src/adapter/device-helpers/is-old-ie.ts +0 -14
- package/src/context/context/create-headless-context.ts +0 -51
- package/src/context/context/webgl-checks.ts +0 -51
- package/src/context/polyfill/get-parameter-polyfill.ts +0 -122
- package/src/context/polyfill/polyfill-context.ts +0 -104
- package/src/context/polyfill/polyfill-table.ts +0 -167
- package/src/context/polyfill/polyfill-vertex-array-object.ts +0 -365
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
// luma.gl
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
2
3
|
// Copyright (c) vis.gl contributors
|
|
3
4
|
|
|
4
5
|
import type {UniformValue, RenderPipelineProps, Binding} from '@luma.gl/core';
|
|
@@ -19,7 +20,7 @@ import {WEBGLBuffer} from './webgl-buffer';
|
|
|
19
20
|
import {WEBGLShader} from './webgl-shader';
|
|
20
21
|
import {WEBGLFramebuffer} from './webgl-framebuffer';
|
|
21
22
|
import {WEBGLTexture} from './webgl-texture';
|
|
22
|
-
|
|
23
|
+
import {WEBGLTextureView} from './webgl-texture-view';
|
|
23
24
|
import {WEBGLRenderPass} from './webgl-render-pass';
|
|
24
25
|
import {WEBGLTransformFeedback} from './webgl-transform-feedback';
|
|
25
26
|
import {getGLDrawMode} from '../helpers/webgl-topology-utils';
|
|
@@ -65,14 +66,16 @@ export class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
65
66
|
// @ts-expect-error WebGL only
|
|
66
67
|
const {varyings, bufferMode = GL.SEPARATE_ATTRIBS} = props;
|
|
67
68
|
if (varyings && varyings.length > 0) {
|
|
68
|
-
this.device.assertWebGL2();
|
|
69
69
|
this.varyings = varyings;
|
|
70
|
-
this.device.
|
|
70
|
+
this.device.gl.transformFeedbackVaryings(this.handle, varyings, bufferMode);
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
-
this.
|
|
73
|
+
this._linkShaders();
|
|
74
74
|
|
|
75
|
+
log.time(0, `RenderPipeline ${this.id} - shaderLayout introspection`)();
|
|
75
76
|
this.introspectedLayout = getShaderLayout(this.device.gl, this.handle);
|
|
77
|
+
log.timeEnd(0, `RenderPipeline ${this.id} - shaderLayout introspection`)();
|
|
78
|
+
|
|
76
79
|
// Merge provided layout with introspected layout
|
|
77
80
|
this.shaderLayout = mergeShaderLayout(this.introspectedLayout, props.shaderLayout);
|
|
78
81
|
|
|
@@ -80,7 +83,9 @@ export class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
80
83
|
switch (this.props.topology) {
|
|
81
84
|
case 'triangle-fan-webgl':
|
|
82
85
|
case 'line-loop-webgl':
|
|
83
|
-
log.warn(
|
|
86
|
+
log.warn(
|
|
87
|
+
`Primitive topology ${this.props.topology} is deprecated and will be removed in v9.1`
|
|
88
|
+
);
|
|
84
89
|
break;
|
|
85
90
|
default:
|
|
86
91
|
}
|
|
@@ -132,7 +137,13 @@ export class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
132
137
|
}
|
|
133
138
|
break;
|
|
134
139
|
case 'texture':
|
|
135
|
-
if (
|
|
140
|
+
if (
|
|
141
|
+
!(
|
|
142
|
+
value instanceof WEBGLTextureView ||
|
|
143
|
+
value instanceof WEBGLTexture ||
|
|
144
|
+
value instanceof WEBGLFramebuffer
|
|
145
|
+
)
|
|
146
|
+
) {
|
|
136
147
|
throw new Error('texture value');
|
|
137
148
|
}
|
|
138
149
|
break;
|
|
@@ -147,18 +158,6 @@ export class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
147
158
|
}
|
|
148
159
|
}
|
|
149
160
|
|
|
150
|
-
/** This function is @deprecated, use uniform buffers */
|
|
151
|
-
setUniforms(uniforms: Record<string, UniformValue>) {
|
|
152
|
-
const {bindings} = splitUniformsAndBindings(uniforms);
|
|
153
|
-
Object.keys(bindings).forEach(name => {
|
|
154
|
-
log.warn(
|
|
155
|
-
`Unsupported value "${JSON.stringify(bindings[name])}" used in setUniforms() for key ${name}. Use setBindings() instead?`
|
|
156
|
-
)();
|
|
157
|
-
});
|
|
158
|
-
// TODO - check against layout
|
|
159
|
-
Object.assign(this.uniforms, uniforms);
|
|
160
|
-
}
|
|
161
|
-
|
|
162
161
|
/** @todo needed for portable model
|
|
163
162
|
* @note The WebGL API is offers many ways to draw things
|
|
164
163
|
* This function unifies those ways into a single call using common parameters with sane defaults
|
|
@@ -194,15 +193,27 @@ export class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
194
193
|
const glIndexType = (vertexArray.indexBuffer as WEBGLBuffer)?.glIndexType;
|
|
195
194
|
const isInstanced: boolean = Number(instanceCount) > 0;
|
|
196
195
|
|
|
196
|
+
// If we are using async linking, we need to wait until linking completes
|
|
197
|
+
if (this.linkStatus !== 'success') {
|
|
198
|
+
log.info(2, `RenderPipeline:${this.id}.draw() aborted - waiting for shader linking`)();
|
|
199
|
+
return false;
|
|
200
|
+
}
|
|
201
|
+
|
|
197
202
|
// Avoid WebGL draw call when not rendering any data or values are incomplete
|
|
198
203
|
// Note: async textures set as uniforms might still be loading.
|
|
199
204
|
// Now that all uniforms have been updated, check if any texture
|
|
200
205
|
// in the uniforms is not yet initialized, then we don't draw
|
|
201
206
|
if (!this._areTexturesRenderable() || vertexCount === 0) {
|
|
202
|
-
|
|
207
|
+
log.info(2, `RenderPipeline:${this.id}.draw() aborted - textures not yet loaded`)();
|
|
203
208
|
return false;
|
|
204
209
|
}
|
|
205
210
|
|
|
211
|
+
// (isInstanced && instanceCount === 0)
|
|
212
|
+
if (vertexCount === 0) {
|
|
213
|
+
log.info(2, `RenderPipeline:${this.id}.draw() aborted - no vertices to draw`)();
|
|
214
|
+
return true;
|
|
215
|
+
}
|
|
216
|
+
|
|
206
217
|
this.device.gl.useProgram(this.handle);
|
|
207
218
|
|
|
208
219
|
// Note: Rebinds constant attributes before each draw call
|
|
@@ -217,31 +228,6 @@ export class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
217
228
|
this._applyUniforms();
|
|
218
229
|
|
|
219
230
|
const webglRenderPass = renderPass as WEBGLRenderPass;
|
|
220
|
-
// // TODO - Use polyfilled WebGL2RenderingContext instead of ANGLE extension
|
|
221
|
-
// if (isIndexed && isInstanced) {
|
|
222
|
-
// // ANGLE_instanced_arrays extension
|
|
223
|
-
// this.device.gl2?.drawElementsInstanced(
|
|
224
|
-
// drawMode,
|
|
225
|
-
// vertexCount || 0, // indexCount?
|
|
226
|
-
// indexType,
|
|
227
|
-
// firstVertex,
|
|
228
|
-
// instanceCount || 0
|
|
229
|
-
// );
|
|
230
|
-
// // } else if (isIndexed && this.device.isWebGL2 && !isNaN(start) && !isNaN(end)) {
|
|
231
|
-
// // this.device.gl2.drawRangeElements(drawMode, start, end, vertexCount, indexType, offset);
|
|
232
|
-
// } else if (isIndexed) {
|
|
233
|
-
// this.device.gl.drawElements(drawMode, vertexCount || 0, indexType, firstVertex); // indexCount?
|
|
234
|
-
// } else if (isInstanced) {
|
|
235
|
-
// this.device.gl2?.drawArraysInstanced(
|
|
236
|
-
// drawMode,
|
|
237
|
-
// firstVertex,
|
|
238
|
-
// vertexCount || 0,
|
|
239
|
-
// instanceCount || 0
|
|
240
|
-
// );
|
|
241
|
-
// } else {
|
|
242
|
-
// this.device.gl.drawArrays(drawMode, firstVertex, vertexCount || 0);
|
|
243
|
-
// }
|
|
244
|
-
// });
|
|
245
231
|
|
|
246
232
|
withDeviceAndGLParameters(
|
|
247
233
|
this.device,
|
|
@@ -249,8 +235,7 @@ export class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
249
235
|
webglRenderPass.glParameters,
|
|
250
236
|
() => {
|
|
251
237
|
if (isIndexed && isInstanced) {
|
|
252
|
-
|
|
253
|
-
this.device.gl2?.drawElementsInstanced(
|
|
238
|
+
this.device.gl.drawElementsInstanced(
|
|
254
239
|
glDrawMode,
|
|
255
240
|
vertexCount || 0, // indexCount?
|
|
256
241
|
glIndexType,
|
|
@@ -258,11 +243,11 @@ export class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
258
243
|
instanceCount || 0
|
|
259
244
|
);
|
|
260
245
|
// } else if (isIndexed && this.device.isWebGL2 && !isNaN(start) && !isNaN(end)) {
|
|
261
|
-
// this.device.
|
|
246
|
+
// this.device.gldrawRangeElements(glDrawMode, start, end, vertexCount, glIndexType, offset);
|
|
262
247
|
} else if (isIndexed) {
|
|
263
248
|
this.device.gl.drawElements(glDrawMode, vertexCount || 0, glIndexType, firstVertex); // indexCount?
|
|
264
249
|
} else if (isInstanced) {
|
|
265
|
-
this.device.
|
|
250
|
+
this.device.gl.drawArraysInstanced(
|
|
266
251
|
glDrawMode,
|
|
267
252
|
firstVertex,
|
|
268
253
|
vertexCount || 0,
|
|
@@ -283,10 +268,27 @@ export class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
283
268
|
return true;
|
|
284
269
|
}
|
|
285
270
|
|
|
271
|
+
// DEPRECATED METHODS
|
|
272
|
+
|
|
273
|
+
override setUniformsWebGL(uniforms: Record<string, UniformValue>) {
|
|
274
|
+
const {bindings} = splitUniformsAndBindings(uniforms);
|
|
275
|
+
Object.keys(bindings).forEach(name => {
|
|
276
|
+
log.warn(
|
|
277
|
+
`Unsupported value "${JSON.stringify(
|
|
278
|
+
bindings[name]
|
|
279
|
+
)}" used in setUniforms() for key ${name}. Use setBindings() instead?`
|
|
280
|
+
)();
|
|
281
|
+
});
|
|
282
|
+
// TODO - check against layout
|
|
283
|
+
Object.assign(this.uniforms, uniforms);
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
// PRIVATE METHODS
|
|
287
|
+
|
|
286
288
|
// setAttributes(attributes: Record<string, Buffer>): void {}
|
|
287
289
|
// setBindings(bindings: Record<string, Binding>): void {}
|
|
288
290
|
|
|
289
|
-
protected
|
|
291
|
+
protected async _linkShaders() {
|
|
290
292
|
const {gl} = this.device;
|
|
291
293
|
gl.attachShader(this.handle, this.vs.handle);
|
|
292
294
|
gl.attachShader(this.handle, this.fs.handle);
|
|
@@ -294,25 +296,89 @@ export class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
294
296
|
gl.linkProgram(this.handle);
|
|
295
297
|
log.timeEnd(LOG_PROGRAM_PERF_PRIORITY, `linkProgram for ${this.id}`)();
|
|
296
298
|
|
|
297
|
-
// Avoid checking program linking error in production
|
|
298
|
-
|
|
299
|
-
if (!gl.debug && log.level === 0) {
|
|
299
|
+
// TODO Avoid checking program linking error in production
|
|
300
|
+
if (log.level === 0) {
|
|
300
301
|
// return;
|
|
301
302
|
}
|
|
302
303
|
|
|
304
|
+
if (!this.device.features.has('compilation-status-async-webgl')) {
|
|
305
|
+
const status = this._getLinkStatus();
|
|
306
|
+
this._reportLinkStatus(status);
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
// async case
|
|
311
|
+
log.once(1, 'RenderPipeline linking is asynchronous')();
|
|
312
|
+
await this._waitForLinkComplete();
|
|
313
|
+
log.info(2, `RenderPipeline ${this.id} - async linking complete: ${this.linkStatus}`)();
|
|
314
|
+
const status = this._getLinkStatus();
|
|
315
|
+
this._reportLinkStatus(status);
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
/** Report link status. First, check for shader compilation failures if linking fails */
|
|
319
|
+
_reportLinkStatus(status: 'success' | 'linking' | 'validation') {
|
|
320
|
+
switch (status) {
|
|
321
|
+
case 'success':
|
|
322
|
+
return;
|
|
323
|
+
|
|
324
|
+
default:
|
|
325
|
+
// First check for shader compilation failures if linking fails
|
|
326
|
+
if (this.vs.compilationStatus === 'error') {
|
|
327
|
+
this.vs.debugShader();
|
|
328
|
+
throw new Error(`Error during compilation of shader ${this.vs.id}`);
|
|
329
|
+
}
|
|
330
|
+
if (this.fs?.compilationStatus === 'error') {
|
|
331
|
+
this.vs.debugShader();
|
|
332
|
+
throw new Error(`Error during compilation of shader ${this.fs.id}`);
|
|
333
|
+
}
|
|
334
|
+
throw new Error(`Error during ${status}: ${this.device.gl.getProgramInfoLog(this.handle)}`);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
/**
|
|
339
|
+
* Get the shader compilation status
|
|
340
|
+
* TODO - Load log even when no error reported, to catch warnings?
|
|
341
|
+
* https://gamedev.stackexchange.com/questions/30429/how-to-detect-glsl-warnings
|
|
342
|
+
*/
|
|
343
|
+
_getLinkStatus(): 'success' | 'linking' | 'validation' {
|
|
344
|
+
const {gl} = this.device;
|
|
303
345
|
const linked = gl.getProgramParameter(this.handle, gl.LINK_STATUS);
|
|
304
346
|
if (!linked) {
|
|
305
|
-
|
|
347
|
+
this.linkStatus = 'error';
|
|
348
|
+
return 'linking';
|
|
306
349
|
}
|
|
307
350
|
|
|
308
351
|
gl.validateProgram(this.handle);
|
|
309
352
|
const validated = gl.getProgramParameter(this.handle, gl.VALIDATE_STATUS);
|
|
310
353
|
if (!validated) {
|
|
311
|
-
|
|
354
|
+
this.linkStatus = 'error';
|
|
355
|
+
return 'validation';
|
|
312
356
|
}
|
|
357
|
+
|
|
358
|
+
this.linkStatus = 'success';
|
|
359
|
+
return 'success';
|
|
313
360
|
}
|
|
314
361
|
|
|
315
|
-
|
|
362
|
+
/** Use KHR_parallel_shader_compile extension if available */
|
|
363
|
+
async _waitForLinkComplete(): Promise<void> {
|
|
364
|
+
const waitMs = async (ms: number) => await new Promise(resolve => setTimeout(resolve, ms));
|
|
365
|
+
const DELAY_MS = 10; // Shader compilation is typically quite fast (with some exceptions)
|
|
366
|
+
|
|
367
|
+
// If status polling is not available, we can't wait for completion. Just wait a little to minimize blocking
|
|
368
|
+
if (!this.device.features.has('compilation-status-async-webgl')) {
|
|
369
|
+
await waitMs(DELAY_MS);
|
|
370
|
+
return;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
const {gl} = this.device;
|
|
374
|
+
for (;;) {
|
|
375
|
+
const complete = gl.getProgramParameter(this.handle, GL.COMPLETION_STATUS_KHR);
|
|
376
|
+
if (complete) {
|
|
377
|
+
return;
|
|
378
|
+
}
|
|
379
|
+
await waitMs(DELAY_MS);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
316
382
|
|
|
317
383
|
/**
|
|
318
384
|
* Checks if all texture-values uniforms are renderable (i.e. loaded)
|
|
@@ -334,13 +400,14 @@ export class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
334
400
|
|
|
335
401
|
/** Apply any bindings (before each draw call) */
|
|
336
402
|
_applyBindings() {
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
if (!gl2) {
|
|
341
|
-
throw new Error('bindings');
|
|
403
|
+
// If we are using async linking, we need to wait until linking completes
|
|
404
|
+
if (this.linkStatus !== 'success') {
|
|
405
|
+
return;
|
|
342
406
|
}
|
|
343
407
|
|
|
408
|
+
const {gl} = this.device;
|
|
409
|
+
gl.useProgram(this.handle);
|
|
410
|
+
|
|
344
411
|
let textureUnit = 0;
|
|
345
412
|
let uniformBufferIndex = 0;
|
|
346
413
|
for (const binding of this.shaderLayout.bindings) {
|
|
@@ -354,16 +421,16 @@ export class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
354
421
|
case 'uniform':
|
|
355
422
|
// Set buffer
|
|
356
423
|
const {name} = binding;
|
|
357
|
-
const location =
|
|
358
|
-
if (location as GL === GL.INVALID_INDEX) {
|
|
424
|
+
const location = gl.getUniformBlockIndex(this.handle, name);
|
|
425
|
+
if ((location as GL) === GL.INVALID_INDEX) {
|
|
359
426
|
throw new Error(`Invalid uniform block name ${name}`);
|
|
360
427
|
}
|
|
361
|
-
|
|
428
|
+
gl.uniformBlockBinding(this.handle, uniformBufferIndex, location);
|
|
362
429
|
// console.debug(binding, location);
|
|
363
430
|
if (value instanceof WEBGLBuffer) {
|
|
364
|
-
|
|
431
|
+
gl.bindBufferBase(GL.UNIFORM_BUFFER, uniformBufferIndex, value.handle);
|
|
365
432
|
} else {
|
|
366
|
-
|
|
433
|
+
gl.bindBufferRange(
|
|
367
434
|
GL.UNIFORM_BUFFER,
|
|
368
435
|
uniformBufferIndex,
|
|
369
436
|
// @ts-expect-error
|
|
@@ -378,27 +445,35 @@ export class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
378
445
|
break;
|
|
379
446
|
|
|
380
447
|
case 'texture':
|
|
381
|
-
if (
|
|
448
|
+
if (
|
|
449
|
+
!(
|
|
450
|
+
value instanceof WEBGLTextureView ||
|
|
451
|
+
value instanceof WEBGLTexture ||
|
|
452
|
+
value instanceof WEBGLFramebuffer
|
|
453
|
+
)
|
|
454
|
+
) {
|
|
382
455
|
throw new Error('texture');
|
|
383
456
|
}
|
|
384
457
|
let texture: WEBGLTexture;
|
|
385
|
-
if (value instanceof
|
|
458
|
+
if (value instanceof WEBGLTextureView) {
|
|
459
|
+
texture = value.texture;
|
|
460
|
+
} else if (value instanceof WEBGLTexture) {
|
|
386
461
|
texture = value;
|
|
387
462
|
} else if (
|
|
388
463
|
value instanceof WEBGLFramebuffer &&
|
|
389
|
-
value.colorAttachments[0] instanceof
|
|
464
|
+
value.colorAttachments[0] instanceof WEBGLTextureView
|
|
390
465
|
) {
|
|
391
466
|
log.warn(
|
|
392
467
|
'Passing framebuffer in texture binding may be deprecated. Use fbo.colorAttachments[0] instead'
|
|
393
468
|
)();
|
|
394
|
-
texture = value.colorAttachments[0];
|
|
469
|
+
texture = value.colorAttachments[0].texture;
|
|
395
470
|
} else {
|
|
396
471
|
throw new Error('No texture');
|
|
397
472
|
}
|
|
398
473
|
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
//
|
|
474
|
+
gl.activeTexture(GL.TEXTURE0 + textureUnit);
|
|
475
|
+
gl.bindTexture(texture.target, texture.handle);
|
|
476
|
+
// gl.bindSampler(textureUnit, sampler.handle);
|
|
402
477
|
textureUnit += 1;
|
|
403
478
|
break;
|
|
404
479
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
// luma.gl
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
2
3
|
// Copyright (c) vis.gl contributors
|
|
3
4
|
|
|
4
5
|
import {Sampler, SamplerProps} from '@luma.gl/core';
|
|
@@ -8,8 +9,6 @@ import type {WebGLDevice} from '../webgl-device';
|
|
|
8
9
|
|
|
9
10
|
/**
|
|
10
11
|
* Sampler object -
|
|
11
|
-
* Under WebGL2 we create an actual WebGL sampler
|
|
12
|
-
* Under WebGL1, we just store the sampler parameters
|
|
13
12
|
* so that they can be set directly on the texture
|
|
14
13
|
* https://github.com/WebGLSamples/WebGL2Samples/blob/master/samples/sampler_object.html
|
|
15
14
|
*/
|
|
@@ -22,15 +21,13 @@ export class WEBGLSampler extends Sampler {
|
|
|
22
21
|
super(device, props);
|
|
23
22
|
this.device = device;
|
|
24
23
|
this.parameters = convertSamplerParametersToWebGL(props);
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
this._setSamplerParameters(this.parameters);
|
|
28
|
-
}
|
|
24
|
+
this.handle = this.handle || this.device.gl.createSampler();
|
|
25
|
+
this._setSamplerParameters(this.parameters);
|
|
29
26
|
}
|
|
30
27
|
|
|
31
28
|
override destroy(): void {
|
|
32
29
|
if (this.handle) {
|
|
33
|
-
this.device.
|
|
30
|
+
this.device.gl.deleteSampler(this.handle);
|
|
34
31
|
// @ts-expect-error read-only/undefined
|
|
35
32
|
this.handle = undefined;
|
|
36
33
|
}
|
|
@@ -49,10 +46,10 @@ export class WEBGLSampler extends Sampler {
|
|
|
49
46
|
switch (param) {
|
|
50
47
|
case GL.TEXTURE_MIN_LOD:
|
|
51
48
|
case GL.TEXTURE_MAX_LOD:
|
|
52
|
-
this.device.
|
|
49
|
+
this.device.gl.samplerParameterf(this.handle, param, value);
|
|
53
50
|
break;
|
|
54
51
|
default:
|
|
55
|
-
this.device.
|
|
52
|
+
this.device.gl.samplerParameteri(this.handle, param, value);
|
|
56
53
|
break;
|
|
57
54
|
}
|
|
58
55
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
// luma.gl
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
2
3
|
// Copyright (c) vis.gl contributors
|
|
3
4
|
|
|
4
|
-
import {Shader, ShaderProps, CompilerMessage} from '@luma.gl/core';
|
|
5
|
+
import {Shader, ShaderProps, CompilerMessage, log} from '@luma.gl/core';
|
|
5
6
|
import {GL} from '@luma.gl/constants';
|
|
6
7
|
import {parseShaderCompilerLog} from '../helpers/parse-shader-compiler-log';
|
|
7
8
|
import {WebGLDevice} from '../webgl-device';
|
|
@@ -39,6 +40,7 @@ export class WEBGLShader extends Shader {
|
|
|
39
40
|
}
|
|
40
41
|
|
|
41
42
|
override async getCompilationInfo(): Promise<readonly CompilerMessage[]> {
|
|
43
|
+
await this._waitForCompilationComplete();
|
|
42
44
|
return this.getCompilationInfoSync();
|
|
43
45
|
}
|
|
44
46
|
|
|
@@ -47,9 +49,16 @@ export class WEBGLShader extends Shader {
|
|
|
47
49
|
return parseShaderCompilerLog(log);
|
|
48
50
|
}
|
|
49
51
|
|
|
52
|
+
override getTranslatedSource(): string | null {
|
|
53
|
+
const extensions = this.device.getExtension('WEBGL_debug_shaders');
|
|
54
|
+
const ext = extensions.WEBGL_debug_shaders;
|
|
55
|
+
return ext?.getTranslatedShaderSource(this.handle);
|
|
56
|
+
}
|
|
57
|
+
|
|
50
58
|
// PRIVATE METHODS
|
|
51
59
|
|
|
52
|
-
|
|
60
|
+
/** Compile a shader and get compilation status */
|
|
61
|
+
protected async _compile(source: string): Promise<void> {
|
|
53
62
|
const addGLSLVersion = (source: string) =>
|
|
54
63
|
source.startsWith('#version ') ? source : `#version 100\n${source}`;
|
|
55
64
|
source = addGLSLVersion(source);
|
|
@@ -58,18 +67,64 @@ export class WEBGLShader extends Shader {
|
|
|
58
67
|
gl.shaderSource(this.handle, source);
|
|
59
68
|
gl.compileShader(this.handle);
|
|
60
69
|
|
|
61
|
-
//
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
70
|
+
// For performance reasons, avoid checking shader compilation errors on production
|
|
71
|
+
if (log.level === 0) {
|
|
72
|
+
this.compilationStatus = 'pending';
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
65
75
|
|
|
66
|
-
//
|
|
76
|
+
// Sync case - slower, but advantage is that it throws in the constructor, making break on error more useful
|
|
77
|
+
if (!this.device.features.has('compilation-status-async-webgl')) {
|
|
78
|
+
this._getCompilationStatus();
|
|
79
|
+
if (this.compilationStatus === 'error') {
|
|
80
|
+
throw new Error(`GLSL compilation errors in ${this.props.stage} shader ${this.props.id}`);
|
|
81
|
+
}
|
|
82
|
+
// The `Shader` base class will determine if debug window should be opened based on this.compilationStatus
|
|
83
|
+
this.debugShader();
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// async case
|
|
88
|
+
log.once(1, 'Shader compilation is asynchronous')();
|
|
89
|
+
await this._waitForCompilationComplete();
|
|
90
|
+
log.info(2, `Shader ${this.id} - async compilation complete: ${this.compilationStatus}`)();
|
|
91
|
+
this._getCompilationStatus();
|
|
92
|
+
|
|
93
|
+
// The `Shader` base class will determine if debug window should be opened based on this.compilationStatus
|
|
67
94
|
this.debugShader();
|
|
95
|
+
}
|
|
68
96
|
|
|
69
|
-
|
|
70
|
-
|
|
97
|
+
/** Use KHR_parallel_shader_compile extension if available */
|
|
98
|
+
protected async _waitForCompilationComplete(): Promise<void> {
|
|
99
|
+
const waitMs = async (ms: number) => await new Promise(resolve => setTimeout(resolve, ms));
|
|
100
|
+
const DELAY_MS = 10; // Shader compilation is typically quite fast (with some exceptions)
|
|
101
|
+
|
|
102
|
+
// If status polling is not available, we can't wait for completion. Just wait a little to minimize blocking
|
|
103
|
+
if (!this.device.features.has('compilation-status-async-webgl')) {
|
|
104
|
+
await waitMs(DELAY_MS);
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
const {gl} = this.device;
|
|
109
|
+
for (;;) {
|
|
110
|
+
const complete = gl.getShaderParameter(this.handle, GL.COMPLETION_STATUS_KHR);
|
|
111
|
+
if (complete) {
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
await waitMs(DELAY_MS);
|
|
71
115
|
}
|
|
72
116
|
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Get the shader compilation status
|
|
120
|
+
* TODO - Load log even when no error reported, to catch warnings?
|
|
121
|
+
* https://gamedev.stackexchange.com/questions/30429/how-to-detect-glsl-warnings
|
|
122
|
+
*/
|
|
123
|
+
protected _getCompilationStatus() {
|
|
124
|
+
this.compilationStatus = this.device.gl.getShaderParameter(this.handle, GL.COMPILE_STATUS)
|
|
125
|
+
? 'success'
|
|
126
|
+
: 'error';
|
|
127
|
+
}
|
|
73
128
|
}
|
|
74
129
|
|
|
75
130
|
// TODO - Original code from luma.gl v8 - keep until new debug functionality has matured
|
|
@@ -81,4 +136,3 @@ export class WEBGLShader extends Shader {
|
|
|
81
136
|
// log.error(`GLSL compilation errors in ${shaderDescription}\n${formattedLog}`)();
|
|
82
137
|
// displayShaderLog(parsedLog, source, shaderName);
|
|
83
138
|
// }
|
|
84
|
-
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import type {Device, TextureViewProps} from '@luma.gl/core';
|
|
6
|
+
// import {decodeTextureFormat} from '@luma.gl/core';
|
|
7
|
+
import {TextureView, Texture} from '@luma.gl/core';
|
|
8
|
+
|
|
9
|
+
import {WebGLDevice} from '../webgl-device';
|
|
10
|
+
import {WEBGLTexture} from './webgl-texture';
|
|
11
|
+
|
|
12
|
+
export class WEBGLTextureView extends TextureView {
|
|
13
|
+
readonly device: WebGLDevice;
|
|
14
|
+
readonly gl: WebGL2RenderingContext;
|
|
15
|
+
readonly handle: WebGLTexture;
|
|
16
|
+
|
|
17
|
+
readonly texture: WEBGLTexture;
|
|
18
|
+
|
|
19
|
+
constructor(device: Device, props: TextureViewProps & {texture: WEBGLTexture}) {
|
|
20
|
+
super(device, {...Texture.defaultProps, ...props});
|
|
21
|
+
|
|
22
|
+
this.device = device as WebGLDevice;
|
|
23
|
+
this.gl = this.device.gl;
|
|
24
|
+
this.handle = null;
|
|
25
|
+
|
|
26
|
+
this.texture = props.texture;
|
|
27
|
+
}
|
|
28
|
+
}
|