@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,9 +1,9 @@
|
|
|
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
|
|
5
6
|
import {GL, GLParameters} from '@luma.gl/constants';
|
|
6
|
-
import {isWebGL2} from '../context/webgl-checks';
|
|
7
7
|
|
|
8
8
|
// DEFAULT SETTINGS - FOR FAST CACHE INITIALIZATION AND CONTEXT RESETS
|
|
9
9
|
|
|
@@ -65,15 +65,7 @@ export const GL_PARAMETER_DEFAULTS: GLParameters = {
|
|
|
65
65
|
[GL.STENCIL_BACK_PASS_DEPTH_PASS]: GL.KEEP,
|
|
66
66
|
// Dynamic value: We use [0, 0, 1024, 1024] as default, but usually this is updated in each frame.
|
|
67
67
|
[GL.VIEWPORT]: [0, 0, 1024, 1024],
|
|
68
|
-
// WEBGL1 PIXEL PACK/UNPACK MODES
|
|
69
|
-
[GL.PACK_ALIGNMENT]: 4,
|
|
70
|
-
[GL.UNPACK_ALIGNMENT]: 4,
|
|
71
|
-
[GL.UNPACK_FLIP_Y_WEBGL]: false,
|
|
72
|
-
[GL.UNPACK_PREMULTIPLY_ALPHA_WEBGL]: false,
|
|
73
|
-
[GL.UNPACK_COLORSPACE_CONVERSION_WEBGL]: GL.BROWSER_DEFAULT_WEBGL,
|
|
74
68
|
|
|
75
|
-
// WEBGL2 / EXTENSIONS
|
|
76
|
-
// gl1: 'OES_standard_derivatives'
|
|
77
69
|
[GL.TRANSFORM_FEEDBACK_BINDING]: null,
|
|
78
70
|
[GL.COPY_READ_BUFFER_BINDING]: null,
|
|
79
71
|
[GL.COPY_WRITE_BUFFER_BINDING]: null,
|
|
@@ -82,6 +74,12 @@ export const GL_PARAMETER_DEFAULTS: GLParameters = {
|
|
|
82
74
|
[GL.FRAGMENT_SHADER_DERIVATIVE_HINT]: GL.DONT_CARE,
|
|
83
75
|
[GL.READ_FRAMEBUFFER_BINDING]: null,
|
|
84
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,
|
|
85
83
|
[GL.PACK_ROW_LENGTH]: 0,
|
|
86
84
|
[GL.PACK_SKIP_PIXELS]: 0,
|
|
87
85
|
[GL.PACK_SKIP_ROWS]: 0,
|
|
@@ -94,24 +92,18 @@ export const GL_PARAMETER_DEFAULTS: GLParameters = {
|
|
|
94
92
|
|
|
95
93
|
// SETTER TABLES - ENABLES SETTING ANY PARAMETER WITH A COMMON API
|
|
96
94
|
|
|
97
|
-
const enable = (gl:
|
|
95
|
+
const enable = (gl: WebGL2RenderingContext, value: unknown, key: GL) =>
|
|
98
96
|
value ? gl.enable(key) : gl.disable(key);
|
|
99
|
-
const hint = (gl:
|
|
100
|
-
const pixelStorei = (gl:
|
|
97
|
+
const hint = (gl: WebGL2RenderingContext, value: GL, key: GL) => gl.hint(key, value);
|
|
98
|
+
const pixelStorei = (gl: WebGL2RenderingContext, value: number | boolean, key: GL) =>
|
|
101
99
|
gl.pixelStorei(key, value);
|
|
102
100
|
|
|
103
|
-
const bindFramebuffer = (gl:
|
|
104
|
-
|
|
105
|
-
if (key === GL.FRAMEBUFFER_BINDING) {
|
|
106
|
-
target = isWebGL2(gl) ? GL.DRAW_FRAMEBUFFER : GL.FRAMEBUFFER;
|
|
107
|
-
} else {
|
|
108
|
-
// GL.READ_FRAMEBUFFER_BINDING
|
|
109
|
-
target = GL.READ_FRAMEBUFFER;
|
|
110
|
-
}
|
|
101
|
+
const bindFramebuffer = (gl: WebGL2RenderingContext, value: unknown, key: GL) => {
|
|
102
|
+
const target = key === GL.FRAMEBUFFER_BINDING ? GL.DRAW_FRAMEBUFFER : GL.READ_FRAMEBUFFER;
|
|
111
103
|
return gl.bindFramebuffer(target, value);
|
|
112
104
|
};
|
|
113
105
|
|
|
114
|
-
const bindBuffer = (gl:
|
|
106
|
+
const bindBuffer = (gl: WebGL2RenderingContext, value: unknown, key: GL) => {
|
|
115
107
|
const bindingMap: Partial<Record<GL, GL>> = {
|
|
116
108
|
[GL.ARRAY_BUFFER_BINDING]: GL.ARRAY_BUFFER,
|
|
117
109
|
[GL.COPY_READ_BUFFER_BINDING]: GL.COPY_READ_BUFFER,
|
|
@@ -134,7 +126,7 @@ function isArray(array: unknown): boolean {
|
|
|
134
126
|
// NOTE: When value type is a string, it will be handled by 'GL_COMPOSITE_PARAMETER_SETTERS'
|
|
135
127
|
export const GL_PARAMETER_SETTERS = {
|
|
136
128
|
[GL.BLEND]: enable,
|
|
137
|
-
[GL.BLEND_COLOR]: (gl:
|
|
129
|
+
[GL.BLEND_COLOR]: (gl: WebGL2RenderingContext, value: [number, number, number, number]) =>
|
|
138
130
|
gl.blendColor(...value),
|
|
139
131
|
[GL.BLEND_EQUATION_RGB]: 'blendEquation',
|
|
140
132
|
[GL.BLEND_EQUATION_ALPHA]: 'blendEquation',
|
|
@@ -142,26 +134,27 @@ export const GL_PARAMETER_SETTERS = {
|
|
|
142
134
|
[GL.BLEND_DST_RGB]: 'blendFunc',
|
|
143
135
|
[GL.BLEND_SRC_ALPHA]: 'blendFunc',
|
|
144
136
|
[GL.BLEND_DST_ALPHA]: 'blendFunc',
|
|
145
|
-
[GL.COLOR_CLEAR_VALUE]: (gl:
|
|
137
|
+
[GL.COLOR_CLEAR_VALUE]: (gl: WebGL2RenderingContext, value: [number, number, number, number]) =>
|
|
146
138
|
gl.clearColor(...value),
|
|
147
|
-
[GL.COLOR_WRITEMASK]: (gl:
|
|
139
|
+
[GL.COLOR_WRITEMASK]: (gl: WebGL2RenderingContext, value: [boolean, boolean, boolean, boolean]) =>
|
|
140
|
+
gl.colorMask(...value),
|
|
148
141
|
[GL.CULL_FACE]: enable,
|
|
149
|
-
[GL.CULL_FACE_MODE]: (gl:
|
|
142
|
+
[GL.CULL_FACE_MODE]: (gl: WebGL2RenderingContext, value) => gl.cullFace(value),
|
|
150
143
|
[GL.DEPTH_TEST]: enable,
|
|
151
|
-
[GL.DEPTH_CLEAR_VALUE]: (gl:
|
|
152
|
-
[GL.DEPTH_FUNC]: (gl:
|
|
153
|
-
[GL.DEPTH_RANGE]: (gl:
|
|
154
|
-
|
|
144
|
+
[GL.DEPTH_CLEAR_VALUE]: (gl: WebGL2RenderingContext, value) => gl.clearDepth(value),
|
|
145
|
+
[GL.DEPTH_FUNC]: (gl: WebGL2RenderingContext, value) => gl.depthFunc(value),
|
|
146
|
+
[GL.DEPTH_RANGE]: (gl: WebGL2RenderingContext, value: [number, number]) =>
|
|
147
|
+
gl.depthRange(...value),
|
|
148
|
+
[GL.DEPTH_WRITEMASK]: (gl: WebGL2RenderingContext, value) => gl.depthMask(value),
|
|
155
149
|
[GL.DITHER]: enable,
|
|
156
150
|
[GL.FRAGMENT_SHADER_DERIVATIVE_HINT]: hint,
|
|
157
151
|
|
|
158
|
-
[GL.CURRENT_PROGRAM]: (gl:
|
|
159
|
-
[GL.RENDERBUFFER_BINDING]: (gl:
|
|
152
|
+
[GL.CURRENT_PROGRAM]: (gl: WebGL2RenderingContext, value) => gl.useProgram(value),
|
|
153
|
+
[GL.RENDERBUFFER_BINDING]: (gl: WebGL2RenderingContext, value) =>
|
|
160
154
|
gl.bindRenderbuffer(GL.RENDERBUFFER, value),
|
|
161
|
-
[GL.TRANSFORM_FEEDBACK_BINDING]: (gl:
|
|
162
|
-
|
|
163
|
-
[GL.VERTEX_ARRAY_BINDING]: (gl:
|
|
164
|
-
(gl as WebGL2RenderingContext).bindVertexArray(value),
|
|
155
|
+
[GL.TRANSFORM_FEEDBACK_BINDING]: (gl: WebGL2RenderingContext, value) =>
|
|
156
|
+
gl.bindTransformFeedback?.(GL.TRANSFORM_FEEDBACK, value),
|
|
157
|
+
[GL.VERTEX_ARRAY_BINDING]: (gl: WebGL2RenderingContext, value) => gl.bindVertexArray(value),
|
|
165
158
|
// NOTE: FRAMEBUFFER_BINDING and DRAW_FRAMEBUFFER_BINDING(WebGL2) refer same state.
|
|
166
159
|
[GL.FRAMEBUFFER_BINDING]: bindFramebuffer,
|
|
167
160
|
[GL.READ_FRAMEBUFFER_BINDING]: bindFramebuffer,
|
|
@@ -173,9 +166,9 @@ export const GL_PARAMETER_SETTERS = {
|
|
|
173
166
|
[GL.PIXEL_PACK_BUFFER_BINDING]: bindBuffer,
|
|
174
167
|
[GL.PIXEL_UNPACK_BUFFER_BINDING]: bindBuffer,
|
|
175
168
|
|
|
176
|
-
[GL.FRONT_FACE]: (gl:
|
|
169
|
+
[GL.FRONT_FACE]: (gl: WebGL2RenderingContext, value) => gl.frontFace(value),
|
|
177
170
|
[GL.GENERATE_MIPMAP_HINT]: hint,
|
|
178
|
-
[GL.LINE_WIDTH]: (gl:
|
|
171
|
+
[GL.LINE_WIDTH]: (gl: WebGL2RenderingContext, value) => gl.lineWidth(value),
|
|
179
172
|
[GL.POLYGON_OFFSET_FILL]: enable,
|
|
180
173
|
[GL.POLYGON_OFFSET_FACTOR]: 'polygonOffset',
|
|
181
174
|
[GL.POLYGON_OFFSET_UNITS]: 'polygonOffset',
|
|
@@ -185,12 +178,13 @@ export const GL_PARAMETER_SETTERS = {
|
|
|
185
178
|
[GL.SAMPLE_COVERAGE_VALUE]: 'sampleCoverage',
|
|
186
179
|
[GL.SAMPLE_COVERAGE_INVERT]: 'sampleCoverage',
|
|
187
180
|
[GL.SCISSOR_TEST]: enable,
|
|
188
|
-
[GL.SCISSOR_BOX]: (gl:
|
|
181
|
+
[GL.SCISSOR_BOX]: (gl: WebGL2RenderingContext, value: [number, number, number, number]) =>
|
|
182
|
+
gl.scissor(...value),
|
|
189
183
|
[GL.STENCIL_TEST]: enable,
|
|
190
|
-
[GL.STENCIL_CLEAR_VALUE]: (gl:
|
|
191
|
-
[GL.STENCIL_WRITEMASK]: (gl:
|
|
184
|
+
[GL.STENCIL_CLEAR_VALUE]: (gl: WebGL2RenderingContext, value) => gl.clearStencil(value),
|
|
185
|
+
[GL.STENCIL_WRITEMASK]: (gl: WebGL2RenderingContext, value) =>
|
|
192
186
|
gl.stencilMaskSeparate(GL.FRONT, value),
|
|
193
|
-
[GL.STENCIL_BACK_WRITEMASK]: (gl:
|
|
187
|
+
[GL.STENCIL_BACK_WRITEMASK]: (gl: WebGL2RenderingContext, value) =>
|
|
194
188
|
gl.stencilMaskSeparate(GL.BACK, value),
|
|
195
189
|
[GL.STENCIL_FUNC]: 'stencilFuncFront',
|
|
196
190
|
[GL.STENCIL_REF]: 'stencilFuncFront',
|
|
@@ -204,17 +198,41 @@ export const GL_PARAMETER_SETTERS = {
|
|
|
204
198
|
[GL.STENCIL_BACK_FAIL]: 'stencilOpBack',
|
|
205
199
|
[GL.STENCIL_BACK_PASS_DEPTH_FAIL]: 'stencilOpBack',
|
|
206
200
|
[GL.STENCIL_BACK_PASS_DEPTH_PASS]: 'stencilOpBack',
|
|
207
|
-
[GL.VIEWPORT]: (gl:
|
|
201
|
+
[GL.VIEWPORT]: (gl: WebGL2RenderingContext, value: [number, number, number, number]) =>
|
|
202
|
+
gl.viewport(...value),
|
|
203
|
+
|
|
204
|
+
// WEBGL2 EXTENSIONS
|
|
208
205
|
|
|
209
|
-
//
|
|
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
|
|
210
231
|
[GL.PACK_ALIGNMENT]: pixelStorei,
|
|
211
232
|
[GL.UNPACK_ALIGNMENT]: pixelStorei,
|
|
212
233
|
[GL.UNPACK_FLIP_Y_WEBGL]: pixelStorei,
|
|
213
234
|
[GL.UNPACK_PREMULTIPLY_ALPHA_WEBGL]: pixelStorei,
|
|
214
235
|
[GL.UNPACK_COLORSPACE_CONVERSION_WEBGL]: pixelStorei,
|
|
215
|
-
|
|
216
|
-
// WEBGL2 PIXEL PACK/UNPACK MODES
|
|
217
|
-
// RASTERIZER_DISCARD ...
|
|
218
236
|
[GL.PACK_ROW_LENGTH]: pixelStorei,
|
|
219
237
|
[GL.PACK_SKIP_PIXELS]: pixelStorei,
|
|
220
238
|
[GL.PACK_SKIP_ROWS]: pixelStorei,
|
|
@@ -225,85 +243,97 @@ export const GL_PARAMETER_SETTERS = {
|
|
|
225
243
|
[GL.UNPACK_SKIP_IMAGES]: pixelStorei,
|
|
226
244
|
|
|
227
245
|
// Function-style setters
|
|
228
|
-
framebuffer: (gl:
|
|
246
|
+
framebuffer: (gl: WebGL2RenderingContext, framebuffer) => {
|
|
229
247
|
// accepts 1) a WebGLFramebuffer 2) null (default framebuffer), or 3) luma.gl Framebuffer class
|
|
230
248
|
// framebuffer is null when restoring to default framebuffer, otherwise use the WebGL handle.
|
|
231
249
|
const handle = framebuffer && 'handle' in framebuffer ? framebuffer.handle : framebuffer;
|
|
232
250
|
return gl.bindFramebuffer(GL.FRAMEBUFFER, handle);
|
|
233
251
|
},
|
|
234
|
-
blend: (gl:
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
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),
|
|
256
|
+
blendEquation: (gl: WebGL2RenderingContext, args: number | [number, number]) => {
|
|
257
|
+
const separateModes = typeof args === 'number' ? ([args, args] as [number, number]) : args;
|
|
238
258
|
gl.blendEquationSeparate(...separateModes);
|
|
239
259
|
},
|
|
240
|
-
blendFunc: (
|
|
241
|
-
|
|
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;
|
|
242
266
|
gl.blendFuncSeparate(...separateFuncs);
|
|
243
267
|
},
|
|
244
268
|
|
|
245
|
-
clearColor: (gl:
|
|
246
|
-
|
|
247
|
-
|
|
269
|
+
clearColor: (gl: WebGL2RenderingContext, value: [number, number, number, number]) =>
|
|
270
|
+
gl.clearColor(...value),
|
|
271
|
+
clearDepth: (gl: WebGL2RenderingContext, value) => gl.clearDepth(value),
|
|
272
|
+
clearStencil: (gl: WebGL2RenderingContext, value) => gl.clearStencil(value),
|
|
248
273
|
|
|
249
|
-
colorMask: (gl:
|
|
274
|
+
colorMask: (gl: WebGL2RenderingContext, value: [boolean, boolean, boolean, boolean]) =>
|
|
275
|
+
gl.colorMask(...value),
|
|
250
276
|
|
|
251
|
-
cull: (gl:
|
|
277
|
+
cull: (gl: WebGL2RenderingContext, value) =>
|
|
252
278
|
value ? gl.enable(GL.CULL_FACE) : gl.disable(GL.CULL_FACE),
|
|
253
|
-
cullFace: (gl:
|
|
279
|
+
cullFace: (gl: WebGL2RenderingContext, value) => gl.cullFace(value),
|
|
254
280
|
|
|
255
|
-
depthTest: (gl:
|
|
281
|
+
depthTest: (gl: WebGL2RenderingContext, value) =>
|
|
256
282
|
value ? gl.enable(GL.DEPTH_TEST) : gl.disable(GL.DEPTH_TEST),
|
|
257
|
-
depthFunc: (gl:
|
|
258
|
-
depthMask: (gl:
|
|
259
|
-
depthRange: (gl:
|
|
283
|
+
depthFunc: (gl: WebGL2RenderingContext, value) => gl.depthFunc(value),
|
|
284
|
+
depthMask: (gl: WebGL2RenderingContext, value) => gl.depthMask(value),
|
|
285
|
+
depthRange: (gl: WebGL2RenderingContext, value: [number, number]) => gl.depthRange(...value),
|
|
260
286
|
|
|
261
|
-
dither: (gl:
|
|
287
|
+
dither: (gl: WebGL2RenderingContext, value) =>
|
|
262
288
|
value ? gl.enable(GL.DITHER) : gl.disable(GL.DITHER),
|
|
263
289
|
|
|
264
|
-
derivativeHint: (gl:
|
|
290
|
+
derivativeHint: (gl: WebGL2RenderingContext, value) => {
|
|
265
291
|
// gl1: 'OES_standard_derivatives'
|
|
266
292
|
gl.hint(GL.FRAGMENT_SHADER_DERIVATIVE_HINT, value);
|
|
267
293
|
},
|
|
268
294
|
|
|
269
|
-
frontFace: (gl:
|
|
295
|
+
frontFace: (gl: WebGL2RenderingContext, value) => gl.frontFace(value),
|
|
270
296
|
|
|
271
|
-
mipmapHint: (gl:
|
|
297
|
+
mipmapHint: (gl: WebGL2RenderingContext, value) => gl.hint(GL.GENERATE_MIPMAP_HINT, value),
|
|
272
298
|
|
|
273
|
-
lineWidth: (gl:
|
|
299
|
+
lineWidth: (gl: WebGL2RenderingContext, value) => gl.lineWidth(value),
|
|
274
300
|
|
|
275
|
-
polygonOffsetFill: (gl:
|
|
301
|
+
polygonOffsetFill: (gl: WebGL2RenderingContext, value) =>
|
|
276
302
|
value ? gl.enable(GL.POLYGON_OFFSET_FILL) : gl.disable(GL.POLYGON_OFFSET_FILL),
|
|
277
|
-
polygonOffset: (gl:
|
|
303
|
+
polygonOffset: (gl: WebGL2RenderingContext, value: [number, number]) =>
|
|
304
|
+
gl.polygonOffset(...value),
|
|
278
305
|
|
|
279
|
-
sampleCoverage: (gl:
|
|
306
|
+
sampleCoverage: (gl: WebGL2RenderingContext, value: [number, boolean?]) =>
|
|
307
|
+
gl.sampleCoverage(...value),
|
|
280
308
|
|
|
281
|
-
scissorTest: (gl:
|
|
309
|
+
scissorTest: (gl: WebGL2RenderingContext, value) =>
|
|
282
310
|
value ? gl.enable(GL.SCISSOR_TEST) : gl.disable(GL.SCISSOR_TEST),
|
|
283
|
-
scissor: (gl:
|
|
311
|
+
scissor: (gl: WebGL2RenderingContext, value: [number, number, number, number]) =>
|
|
312
|
+
gl.scissor(...value),
|
|
284
313
|
|
|
285
|
-
stencilTest: (gl:
|
|
314
|
+
stencilTest: (gl: WebGL2RenderingContext, value) =>
|
|
286
315
|
value ? gl.enable(GL.STENCIL_TEST) : gl.disable(GL.STENCIL_TEST),
|
|
287
|
-
stencilMask: (gl:
|
|
316
|
+
stencilMask: (gl: WebGL2RenderingContext, value) => {
|
|
288
317
|
value = isArray(value) ? value : [value, value];
|
|
289
318
|
const [mask, backMask] = value;
|
|
290
319
|
gl.stencilMaskSeparate(GL.FRONT, mask);
|
|
291
320
|
gl.stencilMaskSeparate(GL.BACK, backMask);
|
|
292
321
|
},
|
|
293
|
-
stencilFunc: (gl:
|
|
322
|
+
stencilFunc: (gl: WebGL2RenderingContext, args) => {
|
|
294
323
|
args = isArray(args) && args.length === 3 ? [...args, ...args] : args;
|
|
295
324
|
const [func, ref, mask, backFunc, backRef, backMask] = args;
|
|
296
325
|
gl.stencilFuncSeparate(GL.FRONT, func, ref, mask);
|
|
297
326
|
gl.stencilFuncSeparate(GL.BACK, backFunc, backRef, backMask);
|
|
298
327
|
},
|
|
299
|
-
stencilOp: (gl:
|
|
328
|
+
stencilOp: (gl: WebGL2RenderingContext, args) => {
|
|
300
329
|
args = isArray(args) && args.length === 3 ? [...args, ...args] : args;
|
|
301
330
|
const [sfail, dpfail, dppass, backSfail, backDpfail, backDppass] = args;
|
|
302
331
|
gl.stencilOpSeparate(GL.FRONT, sfail, dpfail, dppass);
|
|
303
332
|
gl.stencilOpSeparate(GL.BACK, backSfail, backDpfail, backDppass);
|
|
304
333
|
},
|
|
305
334
|
|
|
306
|
-
viewport: (gl:
|
|
335
|
+
viewport: (gl: WebGL2RenderingContext, value: [number, number, number, number]) =>
|
|
336
|
+
gl.viewport(...value)
|
|
307
337
|
};
|
|
308
338
|
|
|
309
339
|
function getValue(glEnum, values, cache) {
|
|
@@ -312,50 +342,50 @@ function getValue(glEnum, values, cache) {
|
|
|
312
342
|
|
|
313
343
|
// COMPOSITE_WEBGL_PARAMETER_
|
|
314
344
|
export const GL_COMPOSITE_PARAMETER_SETTERS = {
|
|
315
|
-
blendEquation: (gl:
|
|
345
|
+
blendEquation: (gl: WebGL2RenderingContext, values, cache) =>
|
|
316
346
|
gl.blendEquationSeparate(
|
|
317
347
|
getValue(GL.BLEND_EQUATION_RGB, values, cache),
|
|
318
348
|
getValue(GL.BLEND_EQUATION_ALPHA, values, cache)
|
|
319
349
|
),
|
|
320
|
-
blendFunc: (gl:
|
|
350
|
+
blendFunc: (gl: WebGL2RenderingContext, values, cache) =>
|
|
321
351
|
gl.blendFuncSeparate(
|
|
322
352
|
getValue(GL.BLEND_SRC_RGB, values, cache),
|
|
323
353
|
getValue(GL.BLEND_DST_RGB, values, cache),
|
|
324
354
|
getValue(GL.BLEND_SRC_ALPHA, values, cache),
|
|
325
355
|
getValue(GL.BLEND_DST_ALPHA, values, cache)
|
|
326
356
|
),
|
|
327
|
-
polygonOffset: (gl:
|
|
357
|
+
polygonOffset: (gl: WebGL2RenderingContext, values, cache) =>
|
|
328
358
|
gl.polygonOffset(
|
|
329
359
|
getValue(GL.POLYGON_OFFSET_FACTOR, values, cache),
|
|
330
360
|
getValue(GL.POLYGON_OFFSET_UNITS, values, cache)
|
|
331
361
|
),
|
|
332
|
-
sampleCoverage: (gl:
|
|
362
|
+
sampleCoverage: (gl: WebGL2RenderingContext, values, cache) =>
|
|
333
363
|
gl.sampleCoverage(
|
|
334
364
|
getValue(GL.SAMPLE_COVERAGE_VALUE, values, cache),
|
|
335
365
|
getValue(GL.SAMPLE_COVERAGE_INVERT, values, cache)
|
|
336
366
|
),
|
|
337
|
-
stencilFuncFront: (gl:
|
|
367
|
+
stencilFuncFront: (gl: WebGL2RenderingContext, values, cache) =>
|
|
338
368
|
gl.stencilFuncSeparate(
|
|
339
369
|
GL.FRONT,
|
|
340
370
|
getValue(GL.STENCIL_FUNC, values, cache),
|
|
341
371
|
getValue(GL.STENCIL_REF, values, cache),
|
|
342
372
|
getValue(GL.STENCIL_VALUE_MASK, values, cache)
|
|
343
373
|
),
|
|
344
|
-
stencilFuncBack: (gl:
|
|
374
|
+
stencilFuncBack: (gl: WebGL2RenderingContext, values, cache) =>
|
|
345
375
|
gl.stencilFuncSeparate(
|
|
346
376
|
GL.BACK,
|
|
347
377
|
getValue(GL.STENCIL_BACK_FUNC, values, cache),
|
|
348
378
|
getValue(GL.STENCIL_BACK_REF, values, cache),
|
|
349
379
|
getValue(GL.STENCIL_BACK_VALUE_MASK, values, cache)
|
|
350
380
|
),
|
|
351
|
-
stencilOpFront: (gl:
|
|
381
|
+
stencilOpFront: (gl: WebGL2RenderingContext, values, cache) =>
|
|
352
382
|
gl.stencilOpSeparate(
|
|
353
383
|
GL.FRONT,
|
|
354
384
|
getValue(GL.STENCIL_FAIL, values, cache),
|
|
355
385
|
getValue(GL.STENCIL_PASS_DEPTH_FAIL, values, cache),
|
|
356
386
|
getValue(GL.STENCIL_PASS_DEPTH_PASS, values, cache)
|
|
357
387
|
),
|
|
358
|
-
stencilOpBack: (gl:
|
|
388
|
+
stencilOpBack: (gl: WebGL2RenderingContext, values, cache) =>
|
|
359
389
|
gl.stencilOpSeparate(
|
|
360
390
|
GL.BACK,
|
|
361
391
|
getValue(GL.STENCIL_BACK_FAIL, values, cache),
|
|
@@ -589,7 +619,7 @@ export const GL_HOOKED_SETTERS = {
|
|
|
589
619
|
|
|
590
620
|
// GETTER TABLE - FOR READING OUT AN ENTIRE CONTEXT
|
|
591
621
|
|
|
592
|
-
const isEnabled = (gl:
|
|
622
|
+
const isEnabled = (gl: WebGL2RenderingContext, key) => gl.isEnabled(key);
|
|
593
623
|
|
|
594
624
|
// Exceptions for any keys that cannot be queried by gl.getParameters
|
|
595
625
|
export const GL_PARAMETER_GETTERS = {
|
|
@@ -602,8 +632,6 @@ export const GL_PARAMETER_GETTERS = {
|
|
|
602
632
|
[GL.SAMPLE_COVERAGE]: isEnabled,
|
|
603
633
|
[GL.SCISSOR_TEST]: isEnabled,
|
|
604
634
|
[GL.STENCIL_TEST]: isEnabled,
|
|
605
|
-
|
|
606
|
-
// WebGL 2
|
|
607
635
|
[GL.RASTERIZER_DISCARD]: isEnabled
|
|
608
636
|
};
|
|
609
637
|
|
|
@@ -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
|
|
|
@@ -12,7 +17,7 @@ import {deepArrayEqual} from './deep-array-equal';
|
|
|
12
17
|
|
|
13
18
|
/* eslint-disable no-shadow */
|
|
14
19
|
class GLState {
|
|
15
|
-
gl:
|
|
20
|
+
gl: WebGL2RenderingContext;
|
|
16
21
|
program: unknown = null;
|
|
17
22
|
stateStack: object[] = [];
|
|
18
23
|
enable = true;
|
|
@@ -20,7 +25,7 @@ class GLState {
|
|
|
20
25
|
log;
|
|
21
26
|
|
|
22
27
|
constructor(
|
|
23
|
-
gl:
|
|
28
|
+
gl: WebGL2RenderingContext,
|
|
24
29
|
{
|
|
25
30
|
copyState = false, // Copy cache from params (slow) or initialize from WebGL defaults (fast)
|
|
26
31
|
log = () => {} // Logging function, called when gl parameter change calls are actually issued
|
|
@@ -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);
|
|
@@ -84,7 +90,7 @@ class GLState {
|
|
|
84
90
|
}
|
|
85
91
|
}
|
|
86
92
|
|
|
87
|
-
function getContextState(gl:
|
|
93
|
+
function getContextState(gl: WebGL2RenderingContext): GLState {
|
|
88
94
|
// @ts-expect-error
|
|
89
95
|
return gl.state as GLState;
|
|
90
96
|
}
|
|
@@ -100,13 +106,13 @@ function getContextState(gl: WebGLRenderingContext): GLState {
|
|
|
100
106
|
* temporarily modifying, and then restoring state.
|
|
101
107
|
*/
|
|
102
108
|
export function trackContextState(
|
|
103
|
-
gl:
|
|
109
|
+
gl: WebGL2RenderingContext,
|
|
104
110
|
options?: {
|
|
105
111
|
enable?: boolean;
|
|
106
112
|
copyState?: boolean;
|
|
107
113
|
log?: any;
|
|
108
114
|
}
|
|
109
|
-
):
|
|
115
|
+
): WebGL2RenderingContext {
|
|
110
116
|
const {enable = true, copyState} = options;
|
|
111
117
|
assert(copyState !== undefined);
|
|
112
118
|
// @ts-expect-error
|
|
@@ -143,7 +149,7 @@ export function trackContextState(
|
|
|
143
149
|
/**
|
|
144
150
|
* Saves current WebGL context state onto an internal per-context stack
|
|
145
151
|
*/
|
|
146
|
-
export function pushContextState(gl:
|
|
152
|
+
export function pushContextState(gl: WebGL2RenderingContext): void {
|
|
147
153
|
let glState = getContextState(gl);
|
|
148
154
|
if (!glState) {
|
|
149
155
|
trackContextState(gl, {copyState: false});
|
|
@@ -152,11 +158,10 @@ export function pushContextState(gl: WebGLRenderingContext): void {
|
|
|
152
158
|
glState.push();
|
|
153
159
|
}
|
|
154
160
|
|
|
155
|
-
|
|
156
161
|
/**
|
|
157
162
|
* Restores previously saved WebGL context state
|
|
158
163
|
*/
|
|
159
|
-
export function popContextState(gl:
|
|
164
|
+
export function popContextState(gl: WebGL2RenderingContext): void {
|
|
160
165
|
const glState = getContextState(gl);
|
|
161
166
|
assert(glState);
|
|
162
167
|
glState.pop();
|
|
@@ -165,13 +170,13 @@ export function popContextState(gl: WebGLRenderingContext): void {
|
|
|
165
170
|
// HELPER FUNCTIONS - INSTALL GET/SET INTERCEPTORS (SPYS) ON THE CONTEXT
|
|
166
171
|
|
|
167
172
|
/**
|
|
168
|
-
// Overrides a
|
|
173
|
+
// Overrides a WebGL2RenderingContext state "getter" function
|
|
169
174
|
// to return values directly from cache
|
|
170
175
|
* @param gl
|
|
171
176
|
* @param functionName
|
|
172
177
|
*/
|
|
173
|
-
function installGetterOverride(gl:
|
|
174
|
-
// Get the original function from the
|
|
178
|
+
function installGetterOverride(gl: WebGL2RenderingContext, functionName: string) {
|
|
179
|
+
// Get the original function from the WebGL2RenderingContext
|
|
175
180
|
const originalGetterFunc = gl[functionName].bind(gl);
|
|
176
181
|
|
|
177
182
|
// Wrap it with a spy so that we can update our state cache when it gets called
|
|
@@ -187,12 +192,12 @@ function installGetterOverride(gl: WebGLRenderingContext, functionName: string)
|
|
|
187
192
|
glState.cache[pname] = originalGetterFunc(pname);
|
|
188
193
|
}
|
|
189
194
|
|
|
190
|
-
// Optionally call the original function to do a "hard" query from the
|
|
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
|
-
|
|
194
|
-
: // Optionally call the original function to do a "hard" query from the
|
|
195
|
-
|
|
198
|
+
glState.cache[pname]
|
|
199
|
+
: // Optionally call the original function to do a "hard" query from the WebGL2RenderingContext
|
|
200
|
+
originalGetterFunc(pname);
|
|
196
201
|
};
|
|
197
202
|
|
|
198
203
|
// Set the name of this anonymous function to help in debugging and profiling
|
|
@@ -203,7 +208,7 @@ function installGetterOverride(gl: WebGLRenderingContext, functionName: string)
|
|
|
203
208
|
}
|
|
204
209
|
|
|
205
210
|
/**
|
|
206
|
-
// Overrides a
|
|
211
|
+
// Overrides a WebGL2RenderingContext state "setter" function
|
|
207
212
|
// to call a setter spy before the actual setter. Allows us to keep a cache
|
|
208
213
|
// updated with a copy of the WebGL context state.
|
|
209
214
|
* @param gl
|
|
@@ -211,9 +216,10 @@ function installGetterOverride(gl: WebGLRenderingContext, functionName: string)
|
|
|
211
216
|
* @param setter
|
|
212
217
|
* @returns
|
|
213
218
|
*/
|
|
214
|
-
function installSetterSpy(gl:
|
|
215
|
-
// Get the original function from the
|
|
219
|
+
function installSetterSpy(gl: WebGL2RenderingContext, functionName: string, setter: Function) {
|
|
220
|
+
// Get the original function from the WebGL2RenderingContext
|
|
216
221
|
if (!gl[functionName]) {
|
|
222
|
+
// TODO - remove?
|
|
217
223
|
// This could happen if we try to intercept WebGL2 method on a WebGL1 context
|
|
218
224
|
return;
|
|
219
225
|
}
|
|
@@ -228,7 +234,7 @@ function installSetterSpy(gl: WebGLRenderingContext, functionName: string, sette
|
|
|
228
234
|
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
229
235
|
const {valueChanged, oldValue} = setter(glState._updateCache, ...params);
|
|
230
236
|
|
|
231
|
-
// Call the original
|
|
237
|
+
// Call the original WebGL2RenderingContext func to make sure the context actually gets updated
|
|
232
238
|
if (valueChanged) {
|
|
233
239
|
originalSetterFunc(...params);
|
|
234
240
|
}
|
|
@@ -248,7 +254,7 @@ function installSetterSpy(gl: WebGLRenderingContext, functionName: string, sette
|
|
|
248
254
|
});
|
|
249
255
|
}
|
|
250
256
|
|
|
251
|
-
function installProgramSpy(gl:
|
|
257
|
+
function installProgramSpy(gl: WebGL2RenderingContext): void {
|
|
252
258
|
const originalUseProgram = gl.useProgram.bind(gl);
|
|
253
259
|
|
|
254
260
|
gl.useProgram = function useProgramLuma(handle) {
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
// luma.gl
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
2
3
|
// Copyright (c) vis.gl contributors
|
|
3
4
|
|
|
4
|
-
import type {Device} from '@luma.gl/core';
|
|
5
|
-
import {WebGLDevice} from '../../adapter/webgl-device';
|
|
6
5
|
import {GLParameters, setGLParameters} from '../parameters/unified-parameter-api';
|
|
7
6
|
import {pushContextState, popContextState} from './track-context-state';
|
|
8
7
|
|
|
@@ -14,13 +13,14 @@ import {pushContextState, popContextState} from './track-context-state';
|
|
|
14
13
|
* - Restores parameters
|
|
15
14
|
* - Returns the return value of the supplied function
|
|
16
15
|
*/
|
|
17
|
-
export function withGLParameters(
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
16
|
+
export function withGLParameters(
|
|
17
|
+
gl: WebGL2RenderingContext,
|
|
18
|
+
parameters: GLParameters & {nocatch?: boolean},
|
|
19
|
+
func: any
|
|
20
|
+
): any {
|
|
21
21
|
if (isObjectEmpty(parameters)) {
|
|
22
22
|
// Avoid setting state if no parameters provided. Just call and return
|
|
23
|
-
return func(
|
|
23
|
+
return func(gl);
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
const {nocatch = true} = parameters;
|