@luma.gl/webgl 9.0.0-beta.5 → 9.0.0-beta.6
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 +71 -11
- package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
- package/dist/adapter/converters/sampler-parameters.js +3 -2
- 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 +10 -7
- package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
- package/dist/adapter/converters/texture-formats.js +76 -64
- package/dist/adapter/converters/vertex-formats.d.ts.map +1 -1
- package/dist/adapter/converters/vertex-formats.js +2 -1
- package/dist/adapter/device-helpers/webgl-device-features.d.ts +18 -5
- package/dist/adapter/device-helpers/webgl-device-features.d.ts.map +1 -1
- package/dist/adapter/device-helpers/webgl-device-features.js +77 -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 +17 -14
- 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 +2 -1
- package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
- package/dist/adapter/helpers/get-shader-layout.js +6 -5
- 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 +2 -1
- package/dist/adapter/helpers/webgl-topology-utils.d.ts.map +1 -1
- package/dist/adapter/helpers/webgl-topology-utils.js +2 -1
- 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 +24 -11
- 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 -100
- 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 +2 -1
- 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 +7 -6
- 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 +3 -2
- package/dist/adapter/resources/webgl-framebuffer.d.ts +6 -8
- package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-framebuffer.js +25 -23
- 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 +15 -7
- 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 +34 -49
- 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 +3 -2
- 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 +12 -6
- 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 +4 -3
- package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-texture.js +12 -7
- 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 +2 -2
- 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 +5 -4
- 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 +29 -27
- package/dist/adapter/webgl-device.d.ts.map +1 -1
- package/dist/adapter/webgl-device.js +90 -94
- package/dist/classic/accessor.d.ts.map +1 -1
- package/dist/classic/accessor.js +4 -3
- package/dist/classic/clear.d.ts.map +1 -1
- package/dist/classic/clear.js +3 -2
- 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 +5 -4
- 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 +2 -1
- package/dist/classic/typed-array-utils.d.ts.map +1 -1
- package/dist/classic/typed-array-utils.js +2 -1
- 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/helpers/create-browser-context.d.ts +35 -0
- 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/helpers/webgl-context-data.d.ts +13 -0
- 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.map +1 -1
- package/dist/context/parameters/unified-parameter-api.js +4 -3
- package/dist/context/parameters/webgl-parameter-tables.d.ts +10 -0
- package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
- package/dist/context/parameters/webgl-parameter-tables.js +29 -16
- 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 +1 -1
- package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
- package/dist/context/state-tracker/with-parameters.js +5 -4
- package/dist/dist.dev.js +941 -730
- package/dist/index.cjs +732 -565
- 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 +5 -5
- package/package.json +4 -4
- package/src/adapter/converters/device-parameters.ts +105 -16
- 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 +87 -66
- package/src/adapter/converters/vertex-formats.ts +3 -3
- package/src/adapter/device-helpers/webgl-device-features.ts +83 -51
- 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 +35 -13
- package/src/adapter/objects/webgl-resource.ts +6 -124
- 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 +3 -2
- package/src/adapter/resources/webgl-framebuffer.ts +34 -29
- package/src/adapter/resources/webgl-query-set.ts +171 -0
- package/src/adapter/resources/webgl-render-pass.ts +17 -8
- package/src/adapter/resources/webgl-render-pipeline.ts +41 -48
- 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 +9 -2
- 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 +94 -90
- package/src/classic/accessor.ts +5 -4
- package/src/classic/clear.ts +12 -6
- 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 +2 -1
- 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 +7 -2
- package/src/index.ts +3 -2
- package/src/types.ts +2 -1
- package/src/context/context/context-data.ts +0 -44
|
@@ -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
|
/**
|
|
@@ -64,7 +65,7 @@ export function createBrowserContext(
|
|
|
64
65
|
// Software GPU
|
|
65
66
|
|
|
66
67
|
// props.failIfMajorPerformanceCaveat = false;
|
|
67
|
-
|
|
68
|
+
|
|
68
69
|
// if (!gl && props.webgl1) {
|
|
69
70
|
// gl = canvas.getContext('webgl', props);
|
|
70
71
|
// }
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Stores luma.gl specific state associated with a context
|
|
7
|
+
*/
|
|
8
|
+
export interface WebGLContextData {
|
|
9
|
+
_polyfilled: boolean;
|
|
10
|
+
_extensions: Record<string, any>;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Gets luma.gl specific state from a context
|
|
15
|
+
* @returns context state
|
|
16
|
+
*/
|
|
17
|
+
export function getWebGLContextData(gl: WebGL2RenderingContext): WebGLContextData {
|
|
18
|
+
// @ts-expect-error
|
|
19
|
+
const luma = gl.luma as WebGLContextData | null;
|
|
20
|
+
if (!luma) {
|
|
21
|
+
const contextState: WebGLContextData = {
|
|
22
|
+
_polyfilled: false,
|
|
23
|
+
_extensions: {}
|
|
24
|
+
};
|
|
25
|
+
// @ts-expect-error
|
|
26
|
+
gl.luma = contextState;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// @ts-expect-error
|
|
30
|
+
return gl.luma;
|
|
31
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import {GLExtensions} from '@luma.gl/constants';
|
|
6
|
+
|
|
7
|
+
/** Ensure extensions are only requested once */
|
|
8
|
+
export function getWebGLExtension(
|
|
9
|
+
gl: WebGL2RenderingContext,
|
|
10
|
+
name: string,
|
|
11
|
+
extensions: GLExtensions
|
|
12
|
+
): unknown {
|
|
13
|
+
if (extensions[name] === undefined) {
|
|
14
|
+
extensions[name] = gl.getExtension(name) || null;
|
|
15
|
+
}
|
|
16
|
+
return extensions[name];
|
|
17
|
+
}
|
|
@@ -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
|
// Tables describing WebGL parameters
|
|
@@ -64,15 +65,7 @@ export const GL_PARAMETER_DEFAULTS: GLParameters = {
|
|
|
64
65
|
[GL.STENCIL_BACK_PASS_DEPTH_PASS]: GL.KEEP,
|
|
65
66
|
// Dynamic value: We use [0, 0, 1024, 1024] as default, but usually this is updated in each frame.
|
|
66
67
|
[GL.VIEWPORT]: [0, 0, 1024, 1024],
|
|
67
|
-
// WEBGL1 PIXEL PACK/UNPACK MODES
|
|
68
|
-
[GL.PACK_ALIGNMENT]: 4,
|
|
69
|
-
[GL.UNPACK_ALIGNMENT]: 4,
|
|
70
|
-
[GL.UNPACK_FLIP_Y_WEBGL]: false,
|
|
71
|
-
[GL.UNPACK_PREMULTIPLY_ALPHA_WEBGL]: false,
|
|
72
|
-
[GL.UNPACK_COLORSPACE_CONVERSION_WEBGL]: GL.BROWSER_DEFAULT_WEBGL,
|
|
73
68
|
|
|
74
|
-
// WEBGL2 / EXTENSIONS
|
|
75
|
-
// gl1: 'OES_standard_derivatives'
|
|
76
69
|
[GL.TRANSFORM_FEEDBACK_BINDING]: null,
|
|
77
70
|
[GL.COPY_READ_BUFFER_BINDING]: null,
|
|
78
71
|
[GL.COPY_WRITE_BUFFER_BINDING]: null,
|
|
@@ -81,6 +74,12 @@ export const GL_PARAMETER_DEFAULTS: GLParameters = {
|
|
|
81
74
|
[GL.FRAGMENT_SHADER_DERIVATIVE_HINT]: GL.DONT_CARE,
|
|
82
75
|
[GL.READ_FRAMEBUFFER_BINDING]: null,
|
|
83
76
|
[GL.RASTERIZER_DISCARD]: false,
|
|
77
|
+
|
|
78
|
+
[GL.PACK_ALIGNMENT]: 4,
|
|
79
|
+
[GL.UNPACK_ALIGNMENT]: 4,
|
|
80
|
+
[GL.UNPACK_FLIP_Y_WEBGL]: false,
|
|
81
|
+
[GL.UNPACK_PREMULTIPLY_ALPHA_WEBGL]: false,
|
|
82
|
+
[GL.UNPACK_COLORSPACE_CONVERSION_WEBGL]: GL.BROWSER_DEFAULT_WEBGL,
|
|
84
83
|
[GL.PACK_ROW_LENGTH]: 0,
|
|
85
84
|
[GL.PACK_SKIP_PIXELS]: 0,
|
|
86
85
|
[GL.PACK_SKIP_ROWS]: 0,
|
|
@@ -100,7 +99,7 @@ const pixelStorei = (gl: WebGL2RenderingContext, value: number | boolean, key: G
|
|
|
100
99
|
gl.pixelStorei(key, value);
|
|
101
100
|
|
|
102
101
|
const bindFramebuffer = (gl: WebGL2RenderingContext, value: unknown, key: GL) => {
|
|
103
|
-
const target =
|
|
102
|
+
const target = key === GL.FRAMEBUFFER_BINDING ? GL.DRAW_FRAMEBUFFER : GL.READ_FRAMEBUFFER;
|
|
104
103
|
return gl.bindFramebuffer(target, value);
|
|
105
104
|
};
|
|
106
105
|
|
|
@@ -137,13 +136,15 @@ export const GL_PARAMETER_SETTERS = {
|
|
|
137
136
|
[GL.BLEND_DST_ALPHA]: 'blendFunc',
|
|
138
137
|
[GL.COLOR_CLEAR_VALUE]: (gl: WebGL2RenderingContext, value: [number, number, number, number]) =>
|
|
139
138
|
gl.clearColor(...value),
|
|
140
|
-
[GL.COLOR_WRITEMASK]: (gl: WebGL2RenderingContext, value: [boolean, boolean, boolean, boolean]) =>
|
|
139
|
+
[GL.COLOR_WRITEMASK]: (gl: WebGL2RenderingContext, value: [boolean, boolean, boolean, boolean]) =>
|
|
140
|
+
gl.colorMask(...value),
|
|
141
141
|
[GL.CULL_FACE]: enable,
|
|
142
142
|
[GL.CULL_FACE_MODE]: (gl: WebGL2RenderingContext, value) => gl.cullFace(value),
|
|
143
143
|
[GL.DEPTH_TEST]: enable,
|
|
144
144
|
[GL.DEPTH_CLEAR_VALUE]: (gl: WebGL2RenderingContext, value) => gl.clearDepth(value),
|
|
145
145
|
[GL.DEPTH_FUNC]: (gl: WebGL2RenderingContext, value) => gl.depthFunc(value),
|
|
146
|
-
[GL.DEPTH_RANGE]: (gl: WebGL2RenderingContext, value: [number, number]) =>
|
|
146
|
+
[GL.DEPTH_RANGE]: (gl: WebGL2RenderingContext, value: [number, number]) =>
|
|
147
|
+
gl.depthRange(...value),
|
|
147
148
|
[GL.DEPTH_WRITEMASK]: (gl: WebGL2RenderingContext, value) => gl.depthMask(value),
|
|
148
149
|
[GL.DITHER]: enable,
|
|
149
150
|
[GL.FRAGMENT_SHADER_DERIVATIVE_HINT]: hint,
|
|
@@ -152,9 +153,8 @@ export const GL_PARAMETER_SETTERS = {
|
|
|
152
153
|
[GL.RENDERBUFFER_BINDING]: (gl: WebGL2RenderingContext, value) =>
|
|
153
154
|
gl.bindRenderbuffer(GL.RENDERBUFFER, value),
|
|
154
155
|
[GL.TRANSFORM_FEEDBACK_BINDING]: (gl: WebGL2RenderingContext, value) =>
|
|
155
|
-
|
|
156
|
-
[GL.VERTEX_ARRAY_BINDING]: (gl: WebGL2RenderingContext, value) =>
|
|
157
|
-
(gl ).bindVertexArray(value),
|
|
156
|
+
gl.bindTransformFeedback?.(GL.TRANSFORM_FEEDBACK, value),
|
|
157
|
+
[GL.VERTEX_ARRAY_BINDING]: (gl: WebGL2RenderingContext, value) => gl.bindVertexArray(value),
|
|
158
158
|
// NOTE: FRAMEBUFFER_BINDING and DRAW_FRAMEBUFFER_BINDING(WebGL2) refer same state.
|
|
159
159
|
[GL.FRAMEBUFFER_BINDING]: bindFramebuffer,
|
|
160
160
|
[GL.READ_FRAMEBUFFER_BINDING]: bindFramebuffer,
|
|
@@ -178,7 +178,8 @@ export const GL_PARAMETER_SETTERS = {
|
|
|
178
178
|
[GL.SAMPLE_COVERAGE_VALUE]: 'sampleCoverage',
|
|
179
179
|
[GL.SAMPLE_COVERAGE_INVERT]: 'sampleCoverage',
|
|
180
180
|
[GL.SCISSOR_TEST]: enable,
|
|
181
|
-
[GL.SCISSOR_BOX]: (gl: WebGL2RenderingContext, value: [number, number, number, number]) =>
|
|
181
|
+
[GL.SCISSOR_BOX]: (gl: WebGL2RenderingContext, value: [number, number, number, number]) =>
|
|
182
|
+
gl.scissor(...value),
|
|
182
183
|
[GL.STENCIL_TEST]: enable,
|
|
183
184
|
[GL.STENCIL_CLEAR_VALUE]: (gl: WebGL2RenderingContext, value) => gl.clearStencil(value),
|
|
184
185
|
[GL.STENCIL_WRITEMASK]: (gl: WebGL2RenderingContext, value) =>
|
|
@@ -197,17 +198,41 @@ export const GL_PARAMETER_SETTERS = {
|
|
|
197
198
|
[GL.STENCIL_BACK_FAIL]: 'stencilOpBack',
|
|
198
199
|
[GL.STENCIL_BACK_PASS_DEPTH_FAIL]: 'stencilOpBack',
|
|
199
200
|
[GL.STENCIL_BACK_PASS_DEPTH_PASS]: 'stencilOpBack',
|
|
200
|
-
[GL.VIEWPORT]: (gl: WebGL2RenderingContext, value: [number, number, number, number]) =>
|
|
201
|
+
[GL.VIEWPORT]: (gl: WebGL2RenderingContext, value: [number, number, number, number]) =>
|
|
202
|
+
gl.viewport(...value),
|
|
203
|
+
|
|
204
|
+
// WEBGL2 EXTENSIONS
|
|
201
205
|
|
|
202
|
-
//
|
|
206
|
+
// EXT_depth_clamp https://registry.khronos.org/webgl/extensions/EXT_depth_clamp/
|
|
207
|
+
|
|
208
|
+
[GL.DEPTH_CLAMP_EXT]: enable,
|
|
209
|
+
|
|
210
|
+
// WEBGL_provoking_vertex https://registry.khronos.org/webgl/extensions/WEBGL_provoking_vertex/
|
|
211
|
+
|
|
212
|
+
// [GL.PROVOKING_VERTEX_WEBL]: TODO - extension function needed
|
|
213
|
+
|
|
214
|
+
// WEBGL_polygon_mode https://registry.khronos.org/webgl/extensions/WEBGL_polygon_mode/
|
|
215
|
+
|
|
216
|
+
// POLYGON_MODE_WEBGL TODO - extension function needed
|
|
217
|
+
[GL.POLYGON_OFFSET_LINE_WEBGL]: enable,
|
|
218
|
+
|
|
219
|
+
// WEBGL_clip_cull_distance https://registry.khronos.org/webgl/extensions/WEBGL_clip_cull_distance/
|
|
220
|
+
|
|
221
|
+
[GL.CLIP_DISTANCE0_WEBGL]: enable,
|
|
222
|
+
[GL.CLIP_DISTANCE1_WEBGL]: enable,
|
|
223
|
+
[GL.CLIP_DISTANCE2_WEBGL]: enable,
|
|
224
|
+
[GL.CLIP_DISTANCE3_WEBGL]: enable,
|
|
225
|
+
[GL.CLIP_DISTANCE4_WEBGL]: enable,
|
|
226
|
+
[GL.CLIP_DISTANCE5_WEBGL]: enable,
|
|
227
|
+
[GL.CLIP_DISTANCE6_WEBGL]: enable,
|
|
228
|
+
[GL.CLIP_DISTANCE7_WEBGL]: enable,
|
|
229
|
+
|
|
230
|
+
// PIXEL PACK/UNPACK MODES
|
|
203
231
|
[GL.PACK_ALIGNMENT]: pixelStorei,
|
|
204
232
|
[GL.UNPACK_ALIGNMENT]: pixelStorei,
|
|
205
233
|
[GL.UNPACK_FLIP_Y_WEBGL]: pixelStorei,
|
|
206
234
|
[GL.UNPACK_PREMULTIPLY_ALPHA_WEBGL]: pixelStorei,
|
|
207
235
|
[GL.UNPACK_COLORSPACE_CONVERSION_WEBGL]: pixelStorei,
|
|
208
|
-
|
|
209
|
-
// WEBGL2 PIXEL PACK/UNPACK MODES
|
|
210
|
-
// RASTERIZER_DISCARD ...
|
|
211
236
|
[GL.PACK_ROW_LENGTH]: pixelStorei,
|
|
212
237
|
[GL.PACK_SKIP_PIXELS]: pixelStorei,
|
|
213
238
|
[GL.PACK_SKIP_ROWS]: pixelStorei,
|
|
@@ -224,22 +249,30 @@ export const GL_PARAMETER_SETTERS = {
|
|
|
224
249
|
const handle = framebuffer && 'handle' in framebuffer ? framebuffer.handle : framebuffer;
|
|
225
250
|
return gl.bindFramebuffer(GL.FRAMEBUFFER, handle);
|
|
226
251
|
},
|
|
227
|
-
blend: (gl: WebGL2RenderingContext, value) =>
|
|
228
|
-
|
|
252
|
+
blend: (gl: WebGL2RenderingContext, value) =>
|
|
253
|
+
value ? gl.enable(GL.BLEND) : gl.disable(GL.BLEND),
|
|
254
|
+
blendColor: (gl: WebGL2RenderingContext, value: [number, number, number, number]) =>
|
|
255
|
+
gl.blendColor(...value),
|
|
229
256
|
blendEquation: (gl: WebGL2RenderingContext, args: number | [number, number]) => {
|
|
230
|
-
const separateModes = typeof args === 'number' ? [args, args] as [number, number]: args;
|
|
257
|
+
const separateModes = typeof args === 'number' ? ([args, args] as [number, number]) : args;
|
|
231
258
|
gl.blendEquationSeparate(...separateModes);
|
|
232
259
|
},
|
|
233
|
-
blendFunc: (
|
|
234
|
-
|
|
260
|
+
blendFunc: (
|
|
261
|
+
gl: WebGL2RenderingContext,
|
|
262
|
+
args: [number, number] | [number, number, number, number]
|
|
263
|
+
) => {
|
|
264
|
+
const separateFuncs =
|
|
265
|
+
args?.length === 2 ? ([...args, ...args] as [number, number, number, number]) : args;
|
|
235
266
|
gl.blendFuncSeparate(...separateFuncs);
|
|
236
267
|
},
|
|
237
268
|
|
|
238
|
-
clearColor: (gl: WebGL2RenderingContext, value: [number, number, number, number]) =>
|
|
269
|
+
clearColor: (gl: WebGL2RenderingContext, value: [number, number, number, number]) =>
|
|
270
|
+
gl.clearColor(...value),
|
|
239
271
|
clearDepth: (gl: WebGL2RenderingContext, value) => gl.clearDepth(value),
|
|
240
272
|
clearStencil: (gl: WebGL2RenderingContext, value) => gl.clearStencil(value),
|
|
241
273
|
|
|
242
|
-
colorMask: (gl: WebGL2RenderingContext, value: [boolean, boolean, boolean, boolean]) =>
|
|
274
|
+
colorMask: (gl: WebGL2RenderingContext, value: [boolean, boolean, boolean, boolean]) =>
|
|
275
|
+
gl.colorMask(...value),
|
|
243
276
|
|
|
244
277
|
cull: (gl: WebGL2RenderingContext, value) =>
|
|
245
278
|
value ? gl.enable(GL.CULL_FACE) : gl.disable(GL.CULL_FACE),
|
|
@@ -267,13 +300,16 @@ export const GL_PARAMETER_SETTERS = {
|
|
|
267
300
|
|
|
268
301
|
polygonOffsetFill: (gl: WebGL2RenderingContext, value) =>
|
|
269
302
|
value ? gl.enable(GL.POLYGON_OFFSET_FILL) : gl.disable(GL.POLYGON_OFFSET_FILL),
|
|
270
|
-
polygonOffset: (gl: WebGL2RenderingContext, value: [number, number]) =>
|
|
303
|
+
polygonOffset: (gl: WebGL2RenderingContext, value: [number, number]) =>
|
|
304
|
+
gl.polygonOffset(...value),
|
|
271
305
|
|
|
272
|
-
sampleCoverage: (gl: WebGL2RenderingContext, value: [number, boolean?]) =>
|
|
306
|
+
sampleCoverage: (gl: WebGL2RenderingContext, value: [number, boolean?]) =>
|
|
307
|
+
gl.sampleCoverage(...value),
|
|
273
308
|
|
|
274
309
|
scissorTest: (gl: WebGL2RenderingContext, value) =>
|
|
275
310
|
value ? gl.enable(GL.SCISSOR_TEST) : gl.disable(GL.SCISSOR_TEST),
|
|
276
|
-
scissor: (gl: WebGL2RenderingContext, value: [number, number, number, number]) =>
|
|
311
|
+
scissor: (gl: WebGL2RenderingContext, value: [number, number, number, number]) =>
|
|
312
|
+
gl.scissor(...value),
|
|
277
313
|
|
|
278
314
|
stencilTest: (gl: WebGL2RenderingContext, value) =>
|
|
279
315
|
value ? gl.enable(GL.STENCIL_TEST) : gl.disable(GL.STENCIL_TEST),
|
|
@@ -296,7 +332,8 @@ export const GL_PARAMETER_SETTERS = {
|
|
|
296
332
|
gl.stencilOpSeparate(GL.BACK, backSfail, backDpfail, backDppass);
|
|
297
333
|
},
|
|
298
334
|
|
|
299
|
-
viewport: (gl: WebGL2RenderingContext, value: [number, number, number, number]) =>
|
|
335
|
+
viewport: (gl: WebGL2RenderingContext, value: [number, number, number, number]) =>
|
|
336
|
+
gl.viewport(...value)
|
|
300
337
|
};
|
|
301
338
|
|
|
302
339
|
function getValue(glEnum, values, cache) {
|
|
@@ -1,10 +1,15 @@
|
|
|
1
|
-
// luma.gl
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
2
3
|
// Copyright (c) vis.gl contributors
|
|
3
4
|
|
|
4
5
|
// Support for listening to context state changes and intercepting state queries
|
|
5
6
|
// NOTE: this system does not handle buffer bindings
|
|
6
7
|
import {assert} from '@luma.gl/core';
|
|
7
|
-
import {
|
|
8
|
+
import {
|
|
9
|
+
GL_PARAMETER_DEFAULTS,
|
|
10
|
+
GL_HOOKED_SETTERS,
|
|
11
|
+
NON_CACHE_PARAMETERS
|
|
12
|
+
} from '../parameters/webgl-parameter-tables';
|
|
8
13
|
import {setGLParameters, getGLParameters} from '../parameters/unified-parameter-api';
|
|
9
14
|
import {deepArrayEqual} from './deep-array-equal';
|
|
10
15
|
|
|
@@ -57,7 +62,8 @@ class GLState {
|
|
|
57
62
|
let valueChanged = false;
|
|
58
63
|
let oldValue; // = undefined
|
|
59
64
|
|
|
60
|
-
const oldValues: {[key: number | string]: any} | null =
|
|
65
|
+
const oldValues: {[key: number | string]: any} | null =
|
|
66
|
+
this.stateStack.length > 0 ? this.stateStack[this.stateStack.length - 1] : null;
|
|
61
67
|
|
|
62
68
|
for (const key in values) {
|
|
63
69
|
assert(key !== undefined);
|
|
@@ -152,7 +158,6 @@ export function pushContextState(gl: WebGL2RenderingContext): void {
|
|
|
152
158
|
glState.push();
|
|
153
159
|
}
|
|
154
160
|
|
|
155
|
-
|
|
156
161
|
/**
|
|
157
162
|
* Restores previously saved WebGL context state
|
|
158
163
|
*/
|
|
@@ -190,9 +195,9 @@ function installGetterOverride(gl: WebGL2RenderingContext, functionName: string)
|
|
|
190
195
|
// Optionally call the original function to do a "hard" query from the WebGL2RenderingContext
|
|
191
196
|
return glState.enable
|
|
192
197
|
? // Call the getter the params so that it can e.g. serve from a cache
|
|
193
|
-
|
|
198
|
+
glState.cache[pname]
|
|
194
199
|
: // Optionally call the original function to do a "hard" query from the WebGL2RenderingContext
|
|
195
|
-
|
|
200
|
+
originalGetterFunc(pname);
|
|
196
201
|
};
|
|
197
202
|
|
|
198
203
|
// Set the name of this anonymous function to help in debugging and profiling
|
|
@@ -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 {Device} from '@luma.gl/core';
|
|
@@ -14,7 +15,11 @@ import {pushContextState, popContextState} from './track-context-state';
|
|
|
14
15
|
* - Restores parameters
|
|
15
16
|
* - Returns the return value of the supplied function
|
|
16
17
|
*/
|
|
17
|
-
export function withGLParameters(
|
|
18
|
+
export function withGLParameters(
|
|
19
|
+
device: Device | WebGL2RenderingContext,
|
|
20
|
+
parameters: GLParameters & {nocatch?: boolean},
|
|
21
|
+
func: any
|
|
22
|
+
): any {
|
|
18
23
|
const webglDevice = WebGLDevice.attach(device);
|
|
19
24
|
const gl = webglDevice.gl;
|
|
20
25
|
|
package/src/index.ts
CHANGED
|
@@ -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
|
// luma.gl Base WebGL wrapper library
|
|
@@ -8,7 +9,7 @@
|
|
|
8
9
|
// Higher level abstractions can be built on these classes
|
|
9
10
|
|
|
10
11
|
// Types
|
|
11
|
-
export type {
|
|
12
|
+
export type {WebGLDeviceLimits} from './adapter/device-helpers/webgl-device-limits';
|
|
12
13
|
|
|
13
14
|
// WebGL adapter classes
|
|
14
15
|
export {WebGLDevice} from './adapter/webgl-device';
|
package/src/types.ts
CHANGED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
// luma.gl, MIT license
|
|
2
|
-
// Copyright (c) vis.gl contributors
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Stores luma.gl specific state associated with a context
|
|
6
|
-
*/
|
|
7
|
-
export interface WebGLContextData {
|
|
8
|
-
_polyfilled: boolean;
|
|
9
|
-
_extensions: Record<string, any>;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Gets luma.gl specific state from a context
|
|
14
|
-
* @returns context state
|
|
15
|
-
*/
|
|
16
|
-
export function getContextData(gl: WebGL2RenderingContext): WebGLContextData {
|
|
17
|
-
// @ts-expect-error
|
|
18
|
-
const luma = gl.luma as WebGLContextData | null;
|
|
19
|
-
if (!luma) {
|
|
20
|
-
const contextState: WebGLContextData = {
|
|
21
|
-
_polyfilled: false,
|
|
22
|
-
_extensions: {}
|
|
23
|
-
};
|
|
24
|
-
// @ts-expect-error
|
|
25
|
-
gl.luma = contextState;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
// @ts-expect-error
|
|
29
|
-
return gl.luma;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export function initializeExtensions(gl: WebGL2RenderingContext): void {
|
|
33
|
-
const contextState = getContextData(gl);
|
|
34
|
-
// `getSupportedExtensions` can return null when context is lost.
|
|
35
|
-
const EXTENSIONS = gl.getSupportedExtensions() || [];
|
|
36
|
-
// Generates warnings in Chrome
|
|
37
|
-
const IGNORE_EXTENSIONS = ['WEBGL_polygon_mode'];
|
|
38
|
-
for (const extensionName of EXTENSIONS) {
|
|
39
|
-
if (!IGNORE_EXTENSIONS.includes(extensionName)) {
|
|
40
|
-
const extension = gl.getExtension(extensionName);
|
|
41
|
-
contextState._extensions[extensionName] = extension;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
}
|