@luma.gl/webgl 9.0.0-beta.3 → 9.0.0-beta.5
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.js +240 -158
- 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 -68
- package/dist/adapter/converters/shader-formats.js +33 -46
- package/dist/adapter/converters/texture-formats.d.ts +9 -18
- package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
- package/dist/adapter/converters/texture-formats.js +454 -871
- package/dist/adapter/converters/vertex-formats.js +52 -61
- package/dist/adapter/device-helpers/device-features.d.ts +2 -5
- package/dist/adapter/device-helpers/device-features.d.ts.map +1 -1
- package/dist/adapter/device-helpers/device-features.js +56 -87
- package/dist/adapter/device-helpers/device-limits.d.ts +2 -4
- package/dist/adapter/device-helpers/device-limits.d.ts.map +1 -1
- package/dist/adapter/device-helpers/device-limits.js +88 -83
- package/dist/adapter/device-helpers/get-device-info.d.ts +1 -1
- package/dist/adapter/device-helpers/get-device-info.d.ts.map +1 -1
- package/dist/adapter/device-helpers/get-device-info.js +79 -63
- package/dist/adapter/device-helpers/webgl-device-features.d.ts +6 -0
- package/dist/adapter/device-helpers/webgl-device-features.d.ts.map +1 -0
- package/dist/adapter/device-helpers/webgl-device-features.js +52 -0
- package/dist/adapter/device-helpers/webgl-device-info.d.ts +4 -0
- package/dist/adapter/device-helpers/webgl-device-info.d.ts.map +1 -0
- package/dist/adapter/device-helpers/webgl-device-info.js +87 -0
- package/dist/adapter/device-helpers/webgl-device-limits.d.ts +50 -0
- package/dist/adapter/device-helpers/webgl-device-limits.d.ts.map +1 -0
- package/dist/adapter/device-helpers/webgl-device-limits.js +92 -0
- package/dist/adapter/helpers/decode-webgl-types.js +87 -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 -226
- package/dist/adapter/helpers/parse-shader-compiler-log.js +46 -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 +67 -82
- package/dist/adapter/helpers/webgl-topology-utils.js +77 -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 +18 -12
- package/dist/adapter/objects/webgl-renderbuffer.js +76 -80
- package/dist/adapter/objects/webgl-resource.d.ts +1 -1
- package/dist/adapter/objects/webgl-resource.d.ts.map +1 -1
- package/dist/adapter/objects/webgl-resource.js +204 -154
- package/dist/adapter/resources/webgl-buffer.d.ts +2 -3
- package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-buffer.js +160 -119
- package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-command-buffer.js +268 -171
- package/dist/adapter/resources/webgl-command-encoder.js +32 -40
- package/dist/adapter/resources/webgl-external-texture.js +92 -1
- package/dist/adapter/resources/webgl-framebuffer.d.ts +2 -2
- package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-framebuffer.js +167 -139
- package/dist/adapter/resources/webgl-render-pass.js +121 -95
- package/dist/adapter/resources/webgl-render-pipeline.d.ts +11 -1
- package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.js +378 -228
- package/dist/adapter/resources/webgl-sampler.d.ts +0 -2
- package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-sampler.js +43 -34
- package/dist/adapter/resources/webgl-shader.d.ts +10 -1
- package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-shader.js +106 -45
- package/dist/adapter/resources/webgl-texture.d.ts +2 -6
- package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-texture.js +614 -699
- 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 +143 -145
- package/dist/adapter/resources/webgl-vertex-array.d.ts +1 -1
- package/dist/adapter/resources/webgl-vertex-array.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-vertex-array.js +229 -158
- package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
- package/dist/adapter/webgl-canvas-context.js +58 -37
- package/dist/adapter/webgl-device.d.ts +7 -15
- package/dist/adapter/webgl-device.d.ts.map +1 -1
- package/dist/adapter/webgl-device.js +440 -381
- package/dist/classic/accessor.js +132 -102
- package/dist/classic/clear.d.ts +2 -2
- package/dist/classic/clear.d.ts.map +1 -1
- package/dist/classic/clear.js +73 -73
- package/dist/classic/copy-and-blit.d.ts.map +1 -1
- package/dist/classic/copy-and-blit.js +176 -177
- package/dist/classic/format-utils.d.ts +2 -2
- package/dist/classic/format-utils.js +38 -32
- package/dist/classic/typed-array-utils.js +95 -81
- package/dist/context/{polyfill → context}/context-data.d.ts +2 -1
- package/dist/context/context/context-data.d.ts.map +1 -0
- package/dist/context/context/context-data.js +33 -0
- package/dist/context/context/create-browser-context.d.ts +1 -6
- package/dist/context/context/create-browser-context.d.ts.map +1 -1
- package/dist/context/context/create-browser-context.js +62 -49
- package/dist/context/debug/spector.js +54 -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 +102 -76
- package/dist/context/parameters/unified-parameter-api.d.ts +3 -3
- package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
- package/dist/context/parameters/unified-parameter-api.js +95 -46
- package/dist/context/parameters/webgl-parameter-tables.d.ts +110 -99
- package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
- package/dist/context/parameters/webgl-parameter-tables.js +456 -404
- package/dist/context/state-tracker/deep-array-equal.js +18 -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 +190 -126
- 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 +45 -29
- package/dist/dist.dev.js +2568 -3786
- package/dist/index.cjs +1346 -2464
- package/dist/index.cjs.map +7 -0
- package/dist/index.d.ts +2 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +36 -26
- package/dist/types.js +2 -1
- package/dist.min.js +9 -42
- package/package.json +11 -15
- package/src/adapter/converters/device-parameters.ts +0 -1
- package/src/adapter/converters/sampler-parameters.ts +0 -17
- package/src/adapter/converters/texture-formats.ts +86 -154
- package/src/adapter/device-helpers/webgl-device-features.ts +69 -0
- package/src/adapter/device-helpers/{get-device-info.ts → webgl-device-info.ts} +3 -4
- package/src/adapter/device-helpers/{device-limits.ts → webgl-device-limits.ts} +25 -23
- package/src/adapter/helpers/get-shader-layout.ts +17 -28
- package/src/adapter/helpers/set-uniform.ts +1 -3
- package/src/adapter/objects/constants-to-keys.ts +1 -1
- package/src/adapter/objects/webgl-renderbuffer.ts +4 -4
- package/src/adapter/objects/webgl-resource.ts +3 -18
- package/src/adapter/resources/webgl-buffer.ts +6 -11
- package/src/adapter/resources/webgl-command-buffer.ts +20 -30
- package/src/adapter/resources/webgl-external-texture.ts +2 -3
- package/src/adapter/resources/webgl-framebuffer.ts +4 -5
- package/src/adapter/resources/webgl-render-pass.ts +7 -7
- package/src/adapter/resources/webgl-render-pipeline.ts +106 -31
- package/src/adapter/resources/webgl-sampler.ts +5 -9
- package/src/adapter/resources/webgl-shader.ts +57 -10
- package/src/adapter/resources/webgl-texture.ts +29 -103
- package/src/adapter/resources/webgl-transform-feedback.ts +14 -15
- package/src/adapter/resources/webgl-vertex-array.ts +16 -18
- package/src/adapter/webgl-canvas-context.ts +1 -7
- package/src/adapter/webgl-device.ts +18 -67
- package/src/classic/clear.ts +13 -14
- package/src/classic/copy-and-blit.ts +1 -2
- package/src/context/context/context-data.ts +44 -0
- package/src/context/context/create-browser-context.ts +7 -32
- package/src/context/debug/webgl-developer-tools.ts +6 -8
- package/src/context/parameters/unified-parameter-api.ts +3 -3
- package/src/context/parameters/webgl-parameter-tables.ts +66 -75
- package/src/context/state-tracker/track-context-state.ts +18 -17
- package/src/context/state-tracker/with-parameters.ts +1 -1
- package/src/index.ts +2 -17
- 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.js.map +0 -1
- package/dist/adapter/device-helpers/device-limits.js.map +0 -1
- 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.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/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/context-data.ts +0 -30
- 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
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
|
|
4
4
|
// Tables describing WebGL parameters
|
|
5
5
|
import {GL, GLParameters} from '@luma.gl/constants';
|
|
6
|
-
import {isWebGL2} from '../context/webgl-checks';
|
|
7
6
|
|
|
8
7
|
// DEFAULT SETTINGS - FOR FAST CACHE INITIALIZATION AND CONTEXT RESETS
|
|
9
8
|
|
|
@@ -94,24 +93,18 @@ export const GL_PARAMETER_DEFAULTS: GLParameters = {
|
|
|
94
93
|
|
|
95
94
|
// SETTER TABLES - ENABLES SETTING ANY PARAMETER WITH A COMMON API
|
|
96
95
|
|
|
97
|
-
const enable = (gl:
|
|
96
|
+
const enable = (gl: WebGL2RenderingContext, value: unknown, key: GL) =>
|
|
98
97
|
value ? gl.enable(key) : gl.disable(key);
|
|
99
|
-
const hint = (gl:
|
|
100
|
-
const pixelStorei = (gl:
|
|
98
|
+
const hint = (gl: WebGL2RenderingContext, value: GL, key: GL) => gl.hint(key, value);
|
|
99
|
+
const pixelStorei = (gl: WebGL2RenderingContext, value: number | boolean, key: GL) =>
|
|
101
100
|
gl.pixelStorei(key, value);
|
|
102
101
|
|
|
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
|
-
}
|
|
102
|
+
const bindFramebuffer = (gl: WebGL2RenderingContext, value: unknown, key: GL) => {
|
|
103
|
+
const target = (key === GL.FRAMEBUFFER_BINDING) ? GL.DRAW_FRAMEBUFFER : GL.READ_FRAMEBUFFER;
|
|
111
104
|
return gl.bindFramebuffer(target, value);
|
|
112
105
|
};
|
|
113
106
|
|
|
114
|
-
const bindBuffer = (gl:
|
|
107
|
+
const bindBuffer = (gl: WebGL2RenderingContext, value: unknown, key: GL) => {
|
|
115
108
|
const bindingMap: Partial<Record<GL, GL>> = {
|
|
116
109
|
[GL.ARRAY_BUFFER_BINDING]: GL.ARRAY_BUFFER,
|
|
117
110
|
[GL.COPY_READ_BUFFER_BINDING]: GL.COPY_READ_BUFFER,
|
|
@@ -134,7 +127,7 @@ function isArray(array: unknown): boolean {
|
|
|
134
127
|
// NOTE: When value type is a string, it will be handled by 'GL_COMPOSITE_PARAMETER_SETTERS'
|
|
135
128
|
export const GL_PARAMETER_SETTERS = {
|
|
136
129
|
[GL.BLEND]: enable,
|
|
137
|
-
[GL.BLEND_COLOR]: (gl:
|
|
130
|
+
[GL.BLEND_COLOR]: (gl: WebGL2RenderingContext, value: [number, number, number, number]) =>
|
|
138
131
|
gl.blendColor(...value),
|
|
139
132
|
[GL.BLEND_EQUATION_RGB]: 'blendEquation',
|
|
140
133
|
[GL.BLEND_EQUATION_ALPHA]: 'blendEquation',
|
|
@@ -142,26 +135,26 @@ export const GL_PARAMETER_SETTERS = {
|
|
|
142
135
|
[GL.BLEND_DST_RGB]: 'blendFunc',
|
|
143
136
|
[GL.BLEND_SRC_ALPHA]: 'blendFunc',
|
|
144
137
|
[GL.BLEND_DST_ALPHA]: 'blendFunc',
|
|
145
|
-
[GL.COLOR_CLEAR_VALUE]: (gl:
|
|
138
|
+
[GL.COLOR_CLEAR_VALUE]: (gl: WebGL2RenderingContext, value: [number, number, number, number]) =>
|
|
146
139
|
gl.clearColor(...value),
|
|
147
|
-
[GL.COLOR_WRITEMASK]: (gl:
|
|
140
|
+
[GL.COLOR_WRITEMASK]: (gl: WebGL2RenderingContext, value: [boolean, boolean, boolean, boolean]) => 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
|
-
[GL.DEPTH_WRITEMASK]: (gl:
|
|
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]) => gl.depthRange(...value),
|
|
147
|
+
[GL.DEPTH_WRITEMASK]: (gl: WebGL2RenderingContext, value) => gl.depthMask(value),
|
|
155
148
|
[GL.DITHER]: enable,
|
|
156
149
|
[GL.FRAGMENT_SHADER_DERIVATIVE_HINT]: hint,
|
|
157
150
|
|
|
158
|
-
[GL.CURRENT_PROGRAM]: (gl:
|
|
159
|
-
[GL.RENDERBUFFER_BINDING]: (gl:
|
|
151
|
+
[GL.CURRENT_PROGRAM]: (gl: WebGL2RenderingContext, value) => gl.useProgram(value),
|
|
152
|
+
[GL.RENDERBUFFER_BINDING]: (gl: WebGL2RenderingContext, value) =>
|
|
160
153
|
gl.bindRenderbuffer(GL.RENDERBUFFER, value),
|
|
161
|
-
[GL.TRANSFORM_FEEDBACK_BINDING]: (gl:
|
|
162
|
-
(gl
|
|
163
|
-
[GL.VERTEX_ARRAY_BINDING]: (gl:
|
|
164
|
-
(gl
|
|
154
|
+
[GL.TRANSFORM_FEEDBACK_BINDING]: (gl: WebGL2RenderingContext, value) =>
|
|
155
|
+
(gl ).bindTransformFeedback?.(GL.TRANSFORM_FEEDBACK, value),
|
|
156
|
+
[GL.VERTEX_ARRAY_BINDING]: (gl: WebGL2RenderingContext, value) =>
|
|
157
|
+
(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,12 @@ 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]) => gl.scissor(...value),
|
|
189
182
|
[GL.STENCIL_TEST]: enable,
|
|
190
|
-
[GL.STENCIL_CLEAR_VALUE]: (gl:
|
|
191
|
-
[GL.STENCIL_WRITEMASK]: (gl:
|
|
183
|
+
[GL.STENCIL_CLEAR_VALUE]: (gl: WebGL2RenderingContext, value) => gl.clearStencil(value),
|
|
184
|
+
[GL.STENCIL_WRITEMASK]: (gl: WebGL2RenderingContext, value) =>
|
|
192
185
|
gl.stencilMaskSeparate(GL.FRONT, value),
|
|
193
|
-
[GL.STENCIL_BACK_WRITEMASK]: (gl:
|
|
186
|
+
[GL.STENCIL_BACK_WRITEMASK]: (gl: WebGL2RenderingContext, value) =>
|
|
194
187
|
gl.stencilMaskSeparate(GL.BACK, value),
|
|
195
188
|
[GL.STENCIL_FUNC]: 'stencilFuncFront',
|
|
196
189
|
[GL.STENCIL_REF]: 'stencilFuncFront',
|
|
@@ -204,7 +197,7 @@ export const GL_PARAMETER_SETTERS = {
|
|
|
204
197
|
[GL.STENCIL_BACK_FAIL]: 'stencilOpBack',
|
|
205
198
|
[GL.STENCIL_BACK_PASS_DEPTH_FAIL]: 'stencilOpBack',
|
|
206
199
|
[GL.STENCIL_BACK_PASS_DEPTH_PASS]: 'stencilOpBack',
|
|
207
|
-
[GL.VIEWPORT]: (gl:
|
|
200
|
+
[GL.VIEWPORT]: (gl: WebGL2RenderingContext, value: [number, number, number, number]) => gl.viewport(...value),
|
|
208
201
|
|
|
209
202
|
// WEBGL1 PIXEL PACK/UNPACK MODES
|
|
210
203
|
[GL.PACK_ALIGNMENT]: pixelStorei,
|
|
@@ -225,85 +218,85 @@ export const GL_PARAMETER_SETTERS = {
|
|
|
225
218
|
[GL.UNPACK_SKIP_IMAGES]: pixelStorei,
|
|
226
219
|
|
|
227
220
|
// Function-style setters
|
|
228
|
-
framebuffer: (gl:
|
|
221
|
+
framebuffer: (gl: WebGL2RenderingContext, framebuffer) => {
|
|
229
222
|
// accepts 1) a WebGLFramebuffer 2) null (default framebuffer), or 3) luma.gl Framebuffer class
|
|
230
223
|
// framebuffer is null when restoring to default framebuffer, otherwise use the WebGL handle.
|
|
231
224
|
const handle = framebuffer && 'handle' in framebuffer ? framebuffer.handle : framebuffer;
|
|
232
225
|
return gl.bindFramebuffer(GL.FRAMEBUFFER, handle);
|
|
233
226
|
},
|
|
234
|
-
blend: (gl:
|
|
235
|
-
blendColor: (gl:
|
|
236
|
-
blendEquation: (gl:
|
|
227
|
+
blend: (gl: WebGL2RenderingContext, value) => (value ? gl.enable(GL.BLEND) : gl.disable(GL.BLEND)),
|
|
228
|
+
blendColor: (gl: WebGL2RenderingContext, value: [number, number, number, number]) => gl.blendColor(...value),
|
|
229
|
+
blendEquation: (gl: WebGL2RenderingContext, args: number | [number, number]) => {
|
|
237
230
|
const separateModes = typeof args === 'number' ? [args, args] as [number, number]: args;
|
|
238
231
|
gl.blendEquationSeparate(...separateModes);
|
|
239
232
|
},
|
|
240
|
-
blendFunc: (gl:
|
|
233
|
+
blendFunc: (gl: WebGL2RenderingContext, args: [number, number] | [number, number, number, number]) => {
|
|
241
234
|
const separateFuncs = args?.length === 2 ? [...args, ...args] as [number, number, number, number] : args;
|
|
242
235
|
gl.blendFuncSeparate(...separateFuncs);
|
|
243
236
|
},
|
|
244
237
|
|
|
245
|
-
clearColor: (gl:
|
|
246
|
-
clearDepth: (gl:
|
|
247
|
-
clearStencil: (gl:
|
|
238
|
+
clearColor: (gl: WebGL2RenderingContext, value: [number, number, number, number]) => gl.clearColor(...value),
|
|
239
|
+
clearDepth: (gl: WebGL2RenderingContext, value) => gl.clearDepth(value),
|
|
240
|
+
clearStencil: (gl: WebGL2RenderingContext, value) => gl.clearStencil(value),
|
|
248
241
|
|
|
249
|
-
colorMask: (gl:
|
|
242
|
+
colorMask: (gl: WebGL2RenderingContext, value: [boolean, boolean, boolean, boolean]) => gl.colorMask(...value),
|
|
250
243
|
|
|
251
|
-
cull: (gl:
|
|
244
|
+
cull: (gl: WebGL2RenderingContext, value) =>
|
|
252
245
|
value ? gl.enable(GL.CULL_FACE) : gl.disable(GL.CULL_FACE),
|
|
253
|
-
cullFace: (gl:
|
|
246
|
+
cullFace: (gl: WebGL2RenderingContext, value) => gl.cullFace(value),
|
|
254
247
|
|
|
255
|
-
depthTest: (gl:
|
|
248
|
+
depthTest: (gl: WebGL2RenderingContext, value) =>
|
|
256
249
|
value ? gl.enable(GL.DEPTH_TEST) : gl.disable(GL.DEPTH_TEST),
|
|
257
|
-
depthFunc: (gl:
|
|
258
|
-
depthMask: (gl:
|
|
259
|
-
depthRange: (gl:
|
|
250
|
+
depthFunc: (gl: WebGL2RenderingContext, value) => gl.depthFunc(value),
|
|
251
|
+
depthMask: (gl: WebGL2RenderingContext, value) => gl.depthMask(value),
|
|
252
|
+
depthRange: (gl: WebGL2RenderingContext, value: [number, number]) => gl.depthRange(...value),
|
|
260
253
|
|
|
261
|
-
dither: (gl:
|
|
254
|
+
dither: (gl: WebGL2RenderingContext, value) =>
|
|
262
255
|
value ? gl.enable(GL.DITHER) : gl.disable(GL.DITHER),
|
|
263
256
|
|
|
264
|
-
derivativeHint: (gl:
|
|
257
|
+
derivativeHint: (gl: WebGL2RenderingContext, value) => {
|
|
265
258
|
// gl1: 'OES_standard_derivatives'
|
|
266
259
|
gl.hint(GL.FRAGMENT_SHADER_DERIVATIVE_HINT, value);
|
|
267
260
|
},
|
|
268
261
|
|
|
269
|
-
frontFace: (gl:
|
|
262
|
+
frontFace: (gl: WebGL2RenderingContext, value) => gl.frontFace(value),
|
|
270
263
|
|
|
271
|
-
mipmapHint: (gl:
|
|
264
|
+
mipmapHint: (gl: WebGL2RenderingContext, value) => gl.hint(GL.GENERATE_MIPMAP_HINT, value),
|
|
272
265
|
|
|
273
|
-
lineWidth: (gl:
|
|
266
|
+
lineWidth: (gl: WebGL2RenderingContext, value) => gl.lineWidth(value),
|
|
274
267
|
|
|
275
|
-
polygonOffsetFill: (gl:
|
|
268
|
+
polygonOffsetFill: (gl: WebGL2RenderingContext, value) =>
|
|
276
269
|
value ? gl.enable(GL.POLYGON_OFFSET_FILL) : gl.disable(GL.POLYGON_OFFSET_FILL),
|
|
277
|
-
polygonOffset: (gl:
|
|
270
|
+
polygonOffset: (gl: WebGL2RenderingContext, value: [number, number]) => gl.polygonOffset(...value),
|
|
278
271
|
|
|
279
|
-
sampleCoverage: (gl:
|
|
272
|
+
sampleCoverage: (gl: WebGL2RenderingContext, value: [number, boolean?]) => gl.sampleCoverage(...value),
|
|
280
273
|
|
|
281
|
-
scissorTest: (gl:
|
|
274
|
+
scissorTest: (gl: WebGL2RenderingContext, value) =>
|
|
282
275
|
value ? gl.enable(GL.SCISSOR_TEST) : gl.disable(GL.SCISSOR_TEST),
|
|
283
|
-
scissor: (gl:
|
|
276
|
+
scissor: (gl: WebGL2RenderingContext, value: [number, number, number, number]) => gl.scissor(...value),
|
|
284
277
|
|
|
285
|
-
stencilTest: (gl:
|
|
278
|
+
stencilTest: (gl: WebGL2RenderingContext, value) =>
|
|
286
279
|
value ? gl.enable(GL.STENCIL_TEST) : gl.disable(GL.STENCIL_TEST),
|
|
287
|
-
stencilMask: (gl:
|
|
280
|
+
stencilMask: (gl: WebGL2RenderingContext, value) => {
|
|
288
281
|
value = isArray(value) ? value : [value, value];
|
|
289
282
|
const [mask, backMask] = value;
|
|
290
283
|
gl.stencilMaskSeparate(GL.FRONT, mask);
|
|
291
284
|
gl.stencilMaskSeparate(GL.BACK, backMask);
|
|
292
285
|
},
|
|
293
|
-
stencilFunc: (gl:
|
|
286
|
+
stencilFunc: (gl: WebGL2RenderingContext, args) => {
|
|
294
287
|
args = isArray(args) && args.length === 3 ? [...args, ...args] : args;
|
|
295
288
|
const [func, ref, mask, backFunc, backRef, backMask] = args;
|
|
296
289
|
gl.stencilFuncSeparate(GL.FRONT, func, ref, mask);
|
|
297
290
|
gl.stencilFuncSeparate(GL.BACK, backFunc, backRef, backMask);
|
|
298
291
|
},
|
|
299
|
-
stencilOp: (gl:
|
|
292
|
+
stencilOp: (gl: WebGL2RenderingContext, args) => {
|
|
300
293
|
args = isArray(args) && args.length === 3 ? [...args, ...args] : args;
|
|
301
294
|
const [sfail, dpfail, dppass, backSfail, backDpfail, backDppass] = args;
|
|
302
295
|
gl.stencilOpSeparate(GL.FRONT, sfail, dpfail, dppass);
|
|
303
296
|
gl.stencilOpSeparate(GL.BACK, backSfail, backDpfail, backDppass);
|
|
304
297
|
},
|
|
305
298
|
|
|
306
|
-
viewport: (gl:
|
|
299
|
+
viewport: (gl: WebGL2RenderingContext, value: [number, number, number, number]) => gl.viewport(...value)
|
|
307
300
|
};
|
|
308
301
|
|
|
309
302
|
function getValue(glEnum, values, cache) {
|
|
@@ -312,50 +305,50 @@ function getValue(glEnum, values, cache) {
|
|
|
312
305
|
|
|
313
306
|
// COMPOSITE_WEBGL_PARAMETER_
|
|
314
307
|
export const GL_COMPOSITE_PARAMETER_SETTERS = {
|
|
315
|
-
blendEquation: (gl:
|
|
308
|
+
blendEquation: (gl: WebGL2RenderingContext, values, cache) =>
|
|
316
309
|
gl.blendEquationSeparate(
|
|
317
310
|
getValue(GL.BLEND_EQUATION_RGB, values, cache),
|
|
318
311
|
getValue(GL.BLEND_EQUATION_ALPHA, values, cache)
|
|
319
312
|
),
|
|
320
|
-
blendFunc: (gl:
|
|
313
|
+
blendFunc: (gl: WebGL2RenderingContext, values, cache) =>
|
|
321
314
|
gl.blendFuncSeparate(
|
|
322
315
|
getValue(GL.BLEND_SRC_RGB, values, cache),
|
|
323
316
|
getValue(GL.BLEND_DST_RGB, values, cache),
|
|
324
317
|
getValue(GL.BLEND_SRC_ALPHA, values, cache),
|
|
325
318
|
getValue(GL.BLEND_DST_ALPHA, values, cache)
|
|
326
319
|
),
|
|
327
|
-
polygonOffset: (gl:
|
|
320
|
+
polygonOffset: (gl: WebGL2RenderingContext, values, cache) =>
|
|
328
321
|
gl.polygonOffset(
|
|
329
322
|
getValue(GL.POLYGON_OFFSET_FACTOR, values, cache),
|
|
330
323
|
getValue(GL.POLYGON_OFFSET_UNITS, values, cache)
|
|
331
324
|
),
|
|
332
|
-
sampleCoverage: (gl:
|
|
325
|
+
sampleCoverage: (gl: WebGL2RenderingContext, values, cache) =>
|
|
333
326
|
gl.sampleCoverage(
|
|
334
327
|
getValue(GL.SAMPLE_COVERAGE_VALUE, values, cache),
|
|
335
328
|
getValue(GL.SAMPLE_COVERAGE_INVERT, values, cache)
|
|
336
329
|
),
|
|
337
|
-
stencilFuncFront: (gl:
|
|
330
|
+
stencilFuncFront: (gl: WebGL2RenderingContext, values, cache) =>
|
|
338
331
|
gl.stencilFuncSeparate(
|
|
339
332
|
GL.FRONT,
|
|
340
333
|
getValue(GL.STENCIL_FUNC, values, cache),
|
|
341
334
|
getValue(GL.STENCIL_REF, values, cache),
|
|
342
335
|
getValue(GL.STENCIL_VALUE_MASK, values, cache)
|
|
343
336
|
),
|
|
344
|
-
stencilFuncBack: (gl:
|
|
337
|
+
stencilFuncBack: (gl: WebGL2RenderingContext, values, cache) =>
|
|
345
338
|
gl.stencilFuncSeparate(
|
|
346
339
|
GL.BACK,
|
|
347
340
|
getValue(GL.STENCIL_BACK_FUNC, values, cache),
|
|
348
341
|
getValue(GL.STENCIL_BACK_REF, values, cache),
|
|
349
342
|
getValue(GL.STENCIL_BACK_VALUE_MASK, values, cache)
|
|
350
343
|
),
|
|
351
|
-
stencilOpFront: (gl:
|
|
344
|
+
stencilOpFront: (gl: WebGL2RenderingContext, values, cache) =>
|
|
352
345
|
gl.stencilOpSeparate(
|
|
353
346
|
GL.FRONT,
|
|
354
347
|
getValue(GL.STENCIL_FAIL, values, cache),
|
|
355
348
|
getValue(GL.STENCIL_PASS_DEPTH_FAIL, values, cache),
|
|
356
349
|
getValue(GL.STENCIL_PASS_DEPTH_PASS, values, cache)
|
|
357
350
|
),
|
|
358
|
-
stencilOpBack: (gl:
|
|
351
|
+
stencilOpBack: (gl: WebGL2RenderingContext, values, cache) =>
|
|
359
352
|
gl.stencilOpSeparate(
|
|
360
353
|
GL.BACK,
|
|
361
354
|
getValue(GL.STENCIL_BACK_FAIL, values, cache),
|
|
@@ -589,7 +582,7 @@ export const GL_HOOKED_SETTERS = {
|
|
|
589
582
|
|
|
590
583
|
// GETTER TABLE - FOR READING OUT AN ENTIRE CONTEXT
|
|
591
584
|
|
|
592
|
-
const isEnabled = (gl:
|
|
585
|
+
const isEnabled = (gl: WebGL2RenderingContext, key) => gl.isEnabled(key);
|
|
593
586
|
|
|
594
587
|
// Exceptions for any keys that cannot be queried by gl.getParameters
|
|
595
588
|
export const GL_PARAMETER_GETTERS = {
|
|
@@ -602,8 +595,6 @@ export const GL_PARAMETER_GETTERS = {
|
|
|
602
595
|
[GL.SAMPLE_COVERAGE]: isEnabled,
|
|
603
596
|
[GL.SCISSOR_TEST]: isEnabled,
|
|
604
597
|
[GL.STENCIL_TEST]: isEnabled,
|
|
605
|
-
|
|
606
|
-
// WebGL 2
|
|
607
598
|
[GL.RASTERIZER_DISCARD]: isEnabled
|
|
608
599
|
};
|
|
609
600
|
|
|
@@ -12,7 +12,7 @@ import {deepArrayEqual} from './deep-array-equal';
|
|
|
12
12
|
|
|
13
13
|
/* eslint-disable no-shadow */
|
|
14
14
|
class GLState {
|
|
15
|
-
gl:
|
|
15
|
+
gl: WebGL2RenderingContext;
|
|
16
16
|
program: unknown = null;
|
|
17
17
|
stateStack: object[] = [];
|
|
18
18
|
enable = true;
|
|
@@ -20,7 +20,7 @@ class GLState {
|
|
|
20
20
|
log;
|
|
21
21
|
|
|
22
22
|
constructor(
|
|
23
|
-
gl:
|
|
23
|
+
gl: WebGL2RenderingContext,
|
|
24
24
|
{
|
|
25
25
|
copyState = false, // Copy cache from params (slow) or initialize from WebGL defaults (fast)
|
|
26
26
|
log = () => {} // Logging function, called when gl parameter change calls are actually issued
|
|
@@ -84,7 +84,7 @@ class GLState {
|
|
|
84
84
|
}
|
|
85
85
|
}
|
|
86
86
|
|
|
87
|
-
function getContextState(gl:
|
|
87
|
+
function getContextState(gl: WebGL2RenderingContext): GLState {
|
|
88
88
|
// @ts-expect-error
|
|
89
89
|
return gl.state as GLState;
|
|
90
90
|
}
|
|
@@ -100,13 +100,13 @@ function getContextState(gl: WebGLRenderingContext): GLState {
|
|
|
100
100
|
* temporarily modifying, and then restoring state.
|
|
101
101
|
*/
|
|
102
102
|
export function trackContextState(
|
|
103
|
-
gl:
|
|
103
|
+
gl: WebGL2RenderingContext,
|
|
104
104
|
options?: {
|
|
105
105
|
enable?: boolean;
|
|
106
106
|
copyState?: boolean;
|
|
107
107
|
log?: any;
|
|
108
108
|
}
|
|
109
|
-
):
|
|
109
|
+
): WebGL2RenderingContext {
|
|
110
110
|
const {enable = true, copyState} = options;
|
|
111
111
|
assert(copyState !== undefined);
|
|
112
112
|
// @ts-expect-error
|
|
@@ -143,7 +143,7 @@ export function trackContextState(
|
|
|
143
143
|
/**
|
|
144
144
|
* Saves current WebGL context state onto an internal per-context stack
|
|
145
145
|
*/
|
|
146
|
-
export function pushContextState(gl:
|
|
146
|
+
export function pushContextState(gl: WebGL2RenderingContext): void {
|
|
147
147
|
let glState = getContextState(gl);
|
|
148
148
|
if (!glState) {
|
|
149
149
|
trackContextState(gl, {copyState: false});
|
|
@@ -156,7 +156,7 @@ export function pushContextState(gl: WebGLRenderingContext): void {
|
|
|
156
156
|
/**
|
|
157
157
|
* Restores previously saved WebGL context state
|
|
158
158
|
*/
|
|
159
|
-
export function popContextState(gl:
|
|
159
|
+
export function popContextState(gl: WebGL2RenderingContext): void {
|
|
160
160
|
const glState = getContextState(gl);
|
|
161
161
|
assert(glState);
|
|
162
162
|
glState.pop();
|
|
@@ -165,13 +165,13 @@ export function popContextState(gl: WebGLRenderingContext): void {
|
|
|
165
165
|
// HELPER FUNCTIONS - INSTALL GET/SET INTERCEPTORS (SPYS) ON THE CONTEXT
|
|
166
166
|
|
|
167
167
|
/**
|
|
168
|
-
// Overrides a
|
|
168
|
+
// Overrides a WebGL2RenderingContext state "getter" function
|
|
169
169
|
// to return values directly from cache
|
|
170
170
|
* @param gl
|
|
171
171
|
* @param functionName
|
|
172
172
|
*/
|
|
173
|
-
function installGetterOverride(gl:
|
|
174
|
-
// Get the original function from the
|
|
173
|
+
function installGetterOverride(gl: WebGL2RenderingContext, functionName: string) {
|
|
174
|
+
// Get the original function from the WebGL2RenderingContext
|
|
175
175
|
const originalGetterFunc = gl[functionName].bind(gl);
|
|
176
176
|
|
|
177
177
|
// Wrap it with a spy so that we can update our state cache when it gets called
|
|
@@ -187,11 +187,11 @@ function installGetterOverride(gl: WebGLRenderingContext, functionName: string)
|
|
|
187
187
|
glState.cache[pname] = originalGetterFunc(pname);
|
|
188
188
|
}
|
|
189
189
|
|
|
190
|
-
// Optionally call the original function to do a "hard" query from the
|
|
190
|
+
// Optionally call the original function to do a "hard" query from the WebGL2RenderingContext
|
|
191
191
|
return glState.enable
|
|
192
192
|
? // Call the getter the params so that it can e.g. serve from a cache
|
|
193
193
|
glState.cache[pname]
|
|
194
|
-
: // Optionally call the original function to do a "hard" query from the
|
|
194
|
+
: // Optionally call the original function to do a "hard" query from the WebGL2RenderingContext
|
|
195
195
|
originalGetterFunc(pname);
|
|
196
196
|
};
|
|
197
197
|
|
|
@@ -203,7 +203,7 @@ function installGetterOverride(gl: WebGLRenderingContext, functionName: string)
|
|
|
203
203
|
}
|
|
204
204
|
|
|
205
205
|
/**
|
|
206
|
-
// Overrides a
|
|
206
|
+
// Overrides a WebGL2RenderingContext state "setter" function
|
|
207
207
|
// to call a setter spy before the actual setter. Allows us to keep a cache
|
|
208
208
|
// updated with a copy of the WebGL context state.
|
|
209
209
|
* @param gl
|
|
@@ -211,9 +211,10 @@ function installGetterOverride(gl: WebGLRenderingContext, functionName: string)
|
|
|
211
211
|
* @param setter
|
|
212
212
|
* @returns
|
|
213
213
|
*/
|
|
214
|
-
function installSetterSpy(gl:
|
|
215
|
-
// Get the original function from the
|
|
214
|
+
function installSetterSpy(gl: WebGL2RenderingContext, functionName: string, setter: Function) {
|
|
215
|
+
// Get the original function from the WebGL2RenderingContext
|
|
216
216
|
if (!gl[functionName]) {
|
|
217
|
+
// TODO - remove?
|
|
217
218
|
// This could happen if we try to intercept WebGL2 method on a WebGL1 context
|
|
218
219
|
return;
|
|
219
220
|
}
|
|
@@ -228,7 +229,7 @@ function installSetterSpy(gl: WebGLRenderingContext, functionName: string, sette
|
|
|
228
229
|
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
229
230
|
const {valueChanged, oldValue} = setter(glState._updateCache, ...params);
|
|
230
231
|
|
|
231
|
-
// Call the original
|
|
232
|
+
// Call the original WebGL2RenderingContext func to make sure the context actually gets updated
|
|
232
233
|
if (valueChanged) {
|
|
233
234
|
originalSetterFunc(...params);
|
|
234
235
|
}
|
|
@@ -248,7 +249,7 @@ function installSetterSpy(gl: WebGLRenderingContext, functionName: string, sette
|
|
|
248
249
|
});
|
|
249
250
|
}
|
|
250
251
|
|
|
251
|
-
function installProgramSpy(gl:
|
|
252
|
+
function installProgramSpy(gl: WebGL2RenderingContext): void {
|
|
252
253
|
const originalUseProgram = gl.useProgram.bind(gl);
|
|
253
254
|
|
|
254
255
|
gl.useProgram = function useProgramLuma(handle) {
|
|
@@ -14,7 +14,7 @@ import {pushContextState, popContextState} from './track-context-state';
|
|
|
14
14
|
* - Restores parameters
|
|
15
15
|
* - Returns the return value of the supplied function
|
|
16
16
|
*/
|
|
17
|
-
export function withGLParameters(device: Device |
|
|
17
|
+
export function withGLParameters(device: Device | WebGL2RenderingContext, parameters: GLParameters & {nocatch?: boolean}, func: any): any {
|
|
18
18
|
const webglDevice = WebGLDevice.attach(device);
|
|
19
19
|
const gl = webglDevice.gl;
|
|
20
20
|
|
package/src/index.ts
CHANGED
|
@@ -8,9 +8,7 @@
|
|
|
8
8
|
// Higher level abstractions can be built on these classes
|
|
9
9
|
|
|
10
10
|
// Types
|
|
11
|
-
export type {WebGLLimits} from './adapter/device-helpers/device-limits';
|
|
12
|
-
|
|
13
|
-
export {registerHeadlessGL} from './context/context/create-headless-context';
|
|
11
|
+
export type {WebGLLimits} from './adapter/device-helpers/webgl-device-limits';
|
|
14
12
|
|
|
15
13
|
// WebGL adapter classes
|
|
16
14
|
export {WebGLDevice} from './adapter/webgl-device';
|
|
@@ -43,24 +41,13 @@ export {WEBGLTransformFeedback} from './adapter/resources/webgl-transform-feedba
|
|
|
43
41
|
export {Accessor} from './classic/accessor';
|
|
44
42
|
export type {AccessorObject} from './types';
|
|
45
43
|
|
|
46
|
-
export {
|
|
47
|
-
isWebGL,
|
|
48
|
-
isWebGL2,
|
|
49
|
-
getWebGL2Context,
|
|
50
|
-
assertWebGLContext,
|
|
51
|
-
assertWebGL2Context
|
|
52
|
-
} from './context/context/webgl-checks';
|
|
53
|
-
|
|
54
44
|
// Unified parameter API
|
|
55
45
|
|
|
56
46
|
export {setDeviceParameters, withDeviceParameters} from './adapter/converters/device-parameters';
|
|
57
47
|
|
|
58
48
|
// HELPERS - EXPERIMENTAL
|
|
59
49
|
export {getShaderLayout} from './adapter/helpers/get-shader-layout';
|
|
60
|
-
export {
|
|
61
|
-
convertGLToTextureFormat,
|
|
62
|
-
_checkFloat32ColorAttachment
|
|
63
|
-
} from './adapter/converters/texture-formats';
|
|
50
|
+
export {convertGLToTextureFormat} from './adapter/converters/texture-formats';
|
|
64
51
|
|
|
65
52
|
// TEST EXPORTS
|
|
66
53
|
export {TEXTURE_FORMATS as _TEXTURE_FORMATS} from './adapter/converters/texture-formats';
|
|
@@ -72,8 +59,6 @@ export {
|
|
|
72
59
|
pushContextState,
|
|
73
60
|
popContextState
|
|
74
61
|
} from './context/state-tracker/track-context-state';
|
|
75
|
-
// Polyfills (supports a subset of WebGL2 APIs on WebGL1 contexts)
|
|
76
|
-
export {polyfillContext} from './context/polyfill/polyfill-context';
|
|
77
62
|
|
|
78
63
|
export {
|
|
79
64
|
resetGLParameters,
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"device-parameters.js","names":["log","isObjectEmpty","pushContextState","popContextState","setGLParameters","WebGLDevice","withDeviceAndGLParameters","device","parameters","glParameters","func","gl","setDeviceParameters","withGLParameters","withDeviceParameters","webglDevice","attach","cullMode","disable","enable","cullFace","frontFace","map","ccw","cw","depthBias","undefined","polygonOffset","depthBiasSlopeScale","depthWriteEnabled","depthMask","mapBoolean","depthCompare","depthFunc","convertCompareFunction","stencilWriteMask","mask","stencilMaskSeparate","stencilReadMask","warn","stencilCompare","glValue","stencilFuncSeparate","stencilPassOperation","stencilFailOperation","stencilDepthFailOperation","dppass","convertStencilOperation","sfail","dpfail","stencilOpSeparate","blendColorOperation","blendAlphaOperation","colorEquation","convertBlendOperationToEquation","alphaEquation","blendEquationSeparate","colorSrcFactor","convertBlendFactorToFunction","blendColorSrcFactor","colorDstFactor","blendColorDstFactor","alphaSrcFactor","blendAlphaSrcFactor","alphaDstFactor","blendAlphaDstFactor","blendFuncSeparate","parameter","value","never","less","equal","greater","always","convertToCompareFunction","keep","zero","replace","invert","message","valueMap","Error"],"sources":["../../../src/adapter/converters/device-parameters.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport {\n Device,\n Parameters,\n CompareFunction,\n StencilOperation,\n log,\n isObjectEmpty,\n BlendOperation,\n BlendFactor\n} from '@luma.gl/core';\nimport {GL} from '@luma.gl/constants';\nimport type {GLBlendEquation, GLBlendFunction, GLParameters} from '@luma.gl/constants';\nimport {pushContextState, popContextState} from '../../context/state-tracker/track-context-state';\nimport {setGLParameters} from '../../context/parameters/unified-parameter-api';\nimport {WebGLDevice} from '../webgl-device';\n\n/* eslint-disable no-unused-expressions */ // For expression ? gl.enable() : gl.disable()\n\n/**\n * Execute a function with a set of temporary WebGL parameter overrides\n * - Saves current \"global\" WebGL context settings\n * - Sets the supplies WebGL context parameters,\n * - Executes supplied function\n * - Restores parameters\n * - Returns the return value of the supplied function\n */\nexport function withDeviceAndGLParameters<T = unknown>(\n device: Device, \n parameters: Parameters,\n glParameters: GLParameters,\n func: (device?: Device) => T\n): T {\n if (isObjectEmpty(parameters)) {\n // Avoid setting state if no parameters provided. Just call and return\n return func(device);\n }\n\n // Wrap in a try-catch to ensure that parameters are restored on exceptions\n // @ts-expect-error\n pushContextState(device.gl);\n try {\n setDeviceParameters(device, parameters);\n setGLParameters(device, glParameters);\n return func(device);\n } finally {\n // @ts-expect-error\n popContextState(device.gl);\n }\n}\n\n/**\n * Execute a function with a set of temporary WebGL parameter overrides\n * - Saves current \"global\" WebGL context settings\n * - Sets the supplies WebGL context parameters,\n * - Executes supplied function\n * - Restores parameters\n * - Returns the return value of the supplied function\n * @deprecated use withDeviceParameters instead\n */\nexport function withGLParameters<T = unknown>(\n device: Device,\n parameters: GLParameters,\n func: (device?: Device) => T\n): T {\n if (isObjectEmpty(parameters)) {\n // Avoid setting state if no parameters provided. Just call and return\n return func(device);\n }\n\n // Wrap in a try-catch to ensure that parameters are restored on exceptions\n // @ts-expect-error\n pushContextState(device.gl);\n try {\n setGLParameters(device, parameters);\n return func(device);\n } finally {\n // @ts-expect-error\n popContextState(device.gl);\n }\n}\n\n/**\n * Execute a function with a set of temporary WebGL parameter overrides\n * - Saves current \"global\" WebGL context settings\n * - Sets the supplies WebGL context parameters,\n * - Executes supplied function\n * - Restores parameters\n * - Returns the return value of the supplied function\n */\nexport function withDeviceParameters<T = unknown>(\n device: Device,\n parameters: Parameters,\n func: (device?: Device) => T\n): T {\n if (isObjectEmpty(parameters)) {\n // Avoid setting state if no parameters provided. Just call and return\n return func(device);\n }\n\n // Wrap in a try-catch to ensure that parameters are restored on exceptions\n // @ts-expect-error\n pushContextState(device.gl);\n try {\n setDeviceParameters(device, parameters);\n return func(device);\n } finally {\n // @ts-expect-error\n popContextState(device.gl);\n }\n}\n\n/** Set WebGPU Style Parameters */\nexport function setDeviceParameters(device: Device, parameters: Parameters) {\n const webglDevice = WebGLDevice.attach(device);\n const {gl} = webglDevice;\n\n // RASTERIZATION SETTINGS\n if (parameters.cullMode) {\n switch (parameters.cullMode) {\n case 'none':\n gl.disable(GL.CULL_FACE);\n break;\n case 'front':\n gl.enable(GL.CULL_FACE);\n gl.cullFace(GL.FRONT);\n break;\n case 'back':\n gl.enable(GL.CULL_FACE);\n gl.cullFace(GL.BACK);\n break;\n }\n }\n\n if (parameters.frontFace) {\n gl.frontFace(\n map('frontFace', parameters.frontFace, {\n ccw: GL.CCW,\n cw: GL.CW\n })\n );\n }\n\n if (parameters.depthBias !== undefined) {\n gl.polygonOffset(parameters.depthBias, parameters.depthBiasSlopeScale || 0);\n }\n\n // depthBiasSlopeScale: {\n // // Handled by depthBias\n // },\n\n // DEPTH STENCIL\n\n if (parameters.depthWriteEnabled !== undefined) {\n gl.depthMask(mapBoolean('depthWriteEnabled', parameters.depthWriteEnabled));\n }\n\n if (parameters.depthCompare) {\n parameters.depthCompare !== 'always' ? gl.enable(GL.DEPTH_TEST) : gl.disable(GL.DEPTH_TEST);\n gl.depthFunc(convertCompareFunction('depthCompare', parameters.depthCompare));\n }\n\n if (parameters.stencilWriteMask) {\n const mask = parameters.stencilWriteMask;\n gl.stencilMaskSeparate(GL.FRONT, mask);\n gl.stencilMaskSeparate(GL.BACK, mask);\n }\n\n if (parameters.stencilReadMask) {\n // stencilReadMask is handle inside stencil***Compare.\n log.warn('stencilReadMask not supported under WebGL');\n }\n\n if (parameters.stencilCompare) {\n const mask = parameters.stencilReadMask || 0xffffffff;\n const glValue = convertCompareFunction('depthCompare', parameters.stencilCompare);\n // TODO - ensure back doesn't overwrite\n parameters.stencilCompare !== 'always'\n ? gl.enable(GL.STENCIL_TEST)\n : gl.disable(GL.STENCIL_TEST);\n gl.stencilFuncSeparate(GL.FRONT, glValue, 0, mask);\n gl.stencilFuncSeparate(GL.BACK, glValue, 0, mask);\n }\n\n if (\n parameters.stencilPassOperation &&\n parameters.stencilFailOperation &&\n parameters.stencilDepthFailOperation\n ) {\n const dppass = convertStencilOperation('stencilPassOperation', parameters.stencilPassOperation);\n const sfail = convertStencilOperation('stencilFailOperation', parameters.stencilFailOperation);\n const dpfail = convertStencilOperation(\n 'stencilDepthFailOperation',\n parameters.stencilDepthFailOperation\n );\n gl.stencilOpSeparate(GL.FRONT, sfail, dpfail, dppass);\n gl.stencilOpSeparate(GL.BACK, sfail, dpfail, dppass);\n }\n\n // stencilDepthFailOperation() {\n // // handled by stencilPassOperation\n // },\n\n // stencilFailOperation() {\n // // handled by stencilPassOperation\n // },\n\n // COLOR STATE\n\n if (parameters.blendColorOperation || parameters.blendAlphaOperation) {\n gl.enable(GL.BLEND);\n\n const colorEquation = convertBlendOperationToEquation('blendColorOperation', parameters.blendColorOperation || 'add');\n const alphaEquation = convertBlendOperationToEquation('blendAlphaOperation', parameters.blendAlphaOperation || 'add');\n gl.blendEquationSeparate(colorEquation, alphaEquation);\n\n const colorSrcFactor = convertBlendFactorToFunction('blendColorSrcFactor', parameters.blendColorSrcFactor || 'one');\n const colorDstFactor = convertBlendFactorToFunction('blendColorDstFactor', parameters.blendColorDstFactor || 'zero');\n const alphaSrcFactor = convertBlendFactorToFunction('blendAlphaSrcFactor', parameters.blendAlphaSrcFactor || 'one');\n const alphaDstFactor = convertBlendFactorToFunction('blendAlphaDstFactor', parameters.blendAlphaDstFactor || 'zero');\n gl.blendFuncSeparate(colorSrcFactor, colorDstFactor, alphaSrcFactor, alphaDstFactor);\n }\n}\n\n/*\n rasterizationState: {\n cullMode: \"back\",\n },\n\n depthStencilState: {\n depthWriteEnabled: true,\n depthCompare: \"less\",\n format: \"depth24plus-stencil8\",\n },\n\n colorStates: [\n {\n format: \"bgra8unorm\",\n // colorBlend.srcFactor = wgpu::BlendFactor::SrcAlpha;\n // colorBlend.dstFactor = wgpu::BlendFactor::OneMinusSrcAlpha;\n // alphaBlend.srcFactor = wgpu::BlendFactor::SrcAlpha;\n // alphaBlend.dstFactor = wgpu::BlendFactor::OneMinusSrcAlpha;\n },\n ],\n });\n*/\n\nexport function convertCompareFunction(parameter: string, value: CompareFunction): GL {\n return map(parameter, value, {\n never: GL.NEVER,\n less: GL.LESS,\n equal: GL.EQUAL,\n 'less-equal': GL.LEQUAL,\n greater: GL.GREATER,\n 'not-equal': GL.NOTEQUAL,\n 'greater-equal': GL.GEQUAL,\n always: GL.ALWAYS\n });\n}\n\nexport function convertToCompareFunction(parameter: string, value: GL): CompareFunction {\n return map(parameter, value, {\n [GL.NEVER]: 'never',\n [GL.LESS]: 'less',\n [GL.EQUAL]: 'equal',\n [GL.LEQUAL]: 'less-equal',\n [GL.GREATER]: 'greater',\n [GL.NOTEQUAL]: 'not-equal',\n [GL.GEQUAL]: 'greater-equal',\n [GL.ALWAYS]: 'always'\n });\n}\n\nfunction convertStencilOperation(parameter: string, value: StencilOperation): GL {\n return map(parameter, value, {\n keep: GL.KEEP,\n zero: GL.ZERO,\n replace: GL.REPLACE,\n invert: GL.INVERT,\n 'increment-clamp': GL.INCR,\n 'decrement-clamp': GL.DECR,\n 'increment-wrap': GL.INCR_WRAP,\n 'decrement-wrap': GL.DECR_WRAP\n });\n}\n\nfunction convertBlendOperationToEquation(parameter: string, value: BlendOperation): GLBlendEquation {\n return map(parameter, value, {\n 'add': GL.FUNC_ADD,\n 'subtract': GL.FUNC_SUBTRACT,\n 'reverse-subtract': GL.FUNC_REVERSE_SUBTRACT,\n // When using a WebGL 2 context, the following values are available additionally:\n 'min': GL.MIN,\n 'max': GL.MAX\n } as Record<BlendOperation, GLBlendEquation>);\n}\n\nfunction convertBlendFactorToFunction(parameter: string, value: BlendFactor): GLBlendFunction {\n return map(parameter, value, {\n 'one': GL.ONE,\n 'zero': GL.ZERO,\n 'src-color': GL.SRC_COLOR,\n 'one-minus-src-color': GL.ONE_MINUS_SRC_COLOR,\n 'dst-color': GL.DST_COLOR,\n 'one-minus-dst-color': GL.ONE_MINUS_DST_COLOR,\n 'src-alpha': GL.SRC_ALPHA,\n 'one-minus-src-alpha': GL.ONE_MINUS_SRC_ALPHA,\n 'dst-alpha': GL.DST_ALPHA,\n 'one-minus-dst-alpha': GL.ONE_MINUS_DST_ALPHA,\n } as Record<BlendFactor, GLBlendFunction>);\n}\n\nfunction message(parameter: string, value: any): string {\n return `Illegal parameter ${value} for ${parameter}`;\n}\n\nfunction map(parameter: string, value: any, valueMap: Record<string, any>): any {\n if (!(value in valueMap)) {\n throw new Error(message(parameter, value));\n }\n return valueMap[value];\n}\n\nfunction mapBoolean(parameter: string, value: boolean): boolean {\n return value;\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sampler-parameters.js","names":["convertCompareFunction","convertSamplerParametersToWebGL","props","params","addressModeU","convertAddressMode","addressModeV","addressModeW","magFilter","convertMaxFilterMode","minFilter","mipmapFilter","convertMinFilterMode","lodMinClamp","undefined","lodMaxClamp","type","compare","maxAnisotropy","updateSamplerParametersForNPOT","parameters","newParameters","addressMode","maxFilter"],"sources":["../../../src/adapter/converters/sampler-parameters.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\n// SAMPLER FILTERS\nimport {SamplerProps} from '@luma.gl/core';\nimport {GL, GLSamplerParameters} from '@luma.gl/constants';\nimport {convertCompareFunction} from './device-parameters';\n\n/**\n * Convert WebGPU-style sampler props to WebGL\n * @param props\n * @returns\n */\nexport function convertSamplerParametersToWebGL(props: SamplerProps): GLSamplerParameters {\n const params: GLSamplerParameters = {};\n if (props.addressModeU) {\n params[GL.TEXTURE_WRAP_S] = convertAddressMode(props.addressModeU);\n }\n if (props.addressModeV) {\n params[GL.TEXTURE_WRAP_T] = convertAddressMode(props.addressModeV);\n }\n if (props.addressModeW) {\n params[GL.TEXTURE_WRAP_R] = convertAddressMode(props.addressModeW);\n }\n if (props.magFilter) {\n params[GL.TEXTURE_MAG_FILTER] = convertMaxFilterMode(props.magFilter);\n }\n if (props.minFilter || props.mipmapFilter) {\n // TODO - arbitrary choice of linear?\n params[GL.TEXTURE_MIN_FILTER] = convertMinFilterMode(\n props.minFilter || 'linear',\n props.mipmapFilter\n );\n }\n if (props.lodMinClamp !== undefined) {\n params[GL.TEXTURE_MIN_LOD] = props.lodMinClamp;\n }\n if (props.lodMaxClamp !== undefined) {\n params[GL.TEXTURE_MAX_LOD] = props.lodMaxClamp;\n }\n if (props.type === 'comparison-sampler') {\n // Setting prop.compare turns this into a comparison sampler\n params[GL.TEXTURE_COMPARE_MODE] = GL.COMPARE_REF_TO_TEXTURE;\n }\n if (props.compare) {\n params[GL.TEXTURE_COMPARE_FUNC] = convertCompareFunction('compare', props.compare);\n }\n // Note depends on WebGL extension\n if (props.maxAnisotropy) {\n params[GL.TEXTURE_MAX_ANISOTROPY_EXT] = props.maxAnisotropy;\n }\n return params;\n}\n\n/**\n * Override sampler settings that are not supported by Non-Power-of-Two textures in WebGL1.\n */\nexport function updateSamplerParametersForNPOT(\n parameters: GLSamplerParameters\n): GLSamplerParameters {\n const newParameters = {...parameters};\n if (parameters[GL.TEXTURE_MIN_FILTER] !== GL.NEAREST) {\n // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_MIN_FILTER to LINEAR`)();\n newParameters[GL.TEXTURE_MIN_FILTER] = GL.LINEAR;\n }\n // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_WRAP_S to CLAMP_TO_EDGE`)();\n newParameters[GL.TEXTURE_WRAP_S] = GL.CLAMP_TO_EDGE;\n newParameters[GL.TEXTURE_WRAP_T] = GL.CLAMP_TO_EDGE;\n return newParameters;\n}\n\n// HELPERS\n\n/** Convert address more */\nfunction convertAddressMode(addressMode: 'clamp-to-edge' | 'repeat' | 'mirror-repeat'): GL.CLAMP_TO_EDGE | GL.REPEAT | GL.MIRRORED_REPEAT {\n switch (addressMode) {\n case 'clamp-to-edge':\n return GL.CLAMP_TO_EDGE;\n case 'repeat':\n return GL.REPEAT;\n case 'mirror-repeat':\n return GL.MIRRORED_REPEAT;\n }\n}\n\nfunction convertMaxFilterMode(maxFilter: 'nearest' | 'linear'): GL.NEAREST | GL.LINEAR {\n switch (maxFilter) {\n case 'nearest':\n return GL.NEAREST;\n case 'linear':\n return GL.LINEAR;\n }\n}\n\n/**\n * WebGPU has separate min filter and mipmap filter,\n * WebGL is combined and effectively offers 6 options\n */\nfunction convertMinFilterMode(\n minFilter: 'nearest' | 'linear',\n mipmapFilter?: 'nearest' | 'linear'\n): GL.NEAREST | GL.LINEAR | GL.NEAREST_MIPMAP_NEAREST | GL.LINEAR_MIPMAP_NEAREST | GL.NEAREST_MIPMAP_LINEAR | GL.LINEAR_MIPMAP_LINEAR {\n if (!mipmapFilter) {\n return convertMaxFilterMode(minFilter);\n }\n switch (minFilter) {\n case 'nearest':\n return mipmapFilter === 'nearest' ? GL.NEAREST_MIPMAP_NEAREST : GL.NEAREST_MIPMAP_LINEAR;\n case 'linear':\n return mipmapFilter === 'nearest' ? GL.LINEAR_MIPMAP_NEAREST : GL.LINEAR_MIPMAP_LINEAR;\n }\n}\n"],"mappings":"SAMQA,sBAAsB;AAO9B,OAAO,SAASC,+BAA+BA,CAACC,KAAmB,EAAuB;EACxF,MAAMC,MAA2B,GAAG,CAAC,CAAC;EACtC,IAAID,KAAK,CAACE,YAAY,EAAE;IACtBD,MAAM,OAAmB,GAAGE,kBAAkB,CAACH,KAAK,CAACE,YAAY,CAAC;EACpE;EACA,IAAIF,KAAK,CAACI,YAAY,EAAE;IACtBH,MAAM,OAAmB,GAAGE,kBAAkB,CAACH,KAAK,CAACI,YAAY,CAAC;EACpE;EACA,IAAIJ,KAAK,CAACK,YAAY,EAAE;IACtBJ,MAAM,OAAmB,GAAGE,kBAAkB,CAACH,KAAK,CAACK,YAAY,CAAC;EACpE;EACA,IAAIL,KAAK,CAACM,SAAS,EAAE;IACnBL,MAAM,OAAuB,GAAGM,oBAAoB,CAACP,KAAK,CAACM,SAAS,CAAC;EACvE;EACA,IAAIN,KAAK,CAACQ,SAAS,IAAIR,KAAK,CAACS,YAAY,EAAE;IAEzCR,MAAM,OAAuB,GAAGS,oBAAoB,CAClDV,KAAK,CAACQ,SAAS,IAAI,QAAQ,EAC3BR,KAAK,CAACS,YACR,CAAC;EACH;EACA,IAAIT,KAAK,CAACW,WAAW,KAAKC,SAAS,EAAE;IACnCX,MAAM,OAAoB,GAAGD,KAAK,CAACW,WAAW;EAChD;EACA,IAAIX,KAAK,CAACa,WAAW,KAAKD,SAAS,EAAE;IACnCX,MAAM,OAAoB,GAAGD,KAAK,CAACa,WAAW;EAChD;EACA,IAAIb,KAAK,CAACc,IAAI,KAAK,oBAAoB,EAAE;IAEvCb,MAAM,OAAyB,QAA4B;EAC7D;EACA,IAAID,KAAK,CAACe,OAAO,EAAE;IACjBd,MAAM,OAAyB,GAAGH,sBAAsB,CAAC,SAAS,EAAEE,KAAK,CAACe,OAAO,CAAC;EACpF;EAEA,IAAIf,KAAK,CAACgB,aAAa,EAAE;IACvBf,MAAM,OAA+B,GAAGD,KAAK,CAACgB,aAAa;EAC7D;EACA,OAAOf,MAAM;AACf;AAKA,OAAO,SAASgB,8BAA8BA,CAC5CC,UAA+B,EACV;EACrB,MAAMC,aAAa,GAAG;IAAC,GAAGD;EAAU,CAAC;EACrC,IAAIA,UAAU,OAAuB,SAAe,EAAE;IAEpDC,aAAa,OAAuB,OAAY;EAClD;EAEAA,aAAa,OAAmB,QAAmB;EACnDA,aAAa,OAAmB,QAAmB;EACnD,OAAOA,aAAa;AACtB;AAKA,SAAShB,kBAAkBA,CAACiB,WAAyD,EAAqD;EACxI,QAAQA,WAAW;IACjB,KAAK,eAAe;MAClB;IACF,KAAK,QAAQ;MACX;IACF,KAAK,eAAe;MAClB;EACJ;AACF;AAEA,SAASb,oBAAoBA,CAACc,SAA+B,EAA0B;EACrF,QAAQA,SAAS;IACf,KAAK,SAAS;MACZ;IACF,KAAK,QAAQ;MACX;EACJ;AACF;AAMA,SAASX,oBAAoBA,CAC3BF,SAA+B,EAC/BC,YAAmC,EACiG;EACpI,IAAI,CAACA,YAAY,EAAE;IACjB,OAAOF,oBAAoB,CAACC,SAAS,CAAC;EACxC;EACA,QAAQA,SAAS;IACf,KAAK,SAAS;MACZ,OAAOC,YAAY,KAAK,SAAS,cAAuD;IAC1F,KAAK,QAAQ;MACX,OAAOA,YAAY,KAAK,SAAS,cAAqD;EAC1F;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shader-formats.js","names":["getShaderAttributeTypeFromGL","type","components","dataType","getShaderDataTypeFromGL","Error","String","getGLFromShaderDataType"],"sources":["../../../src/adapter/converters/shader-formats.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport {GL} from '@luma.gl/constants';\nimport {ShaderAttributeType, ShaderDataType} from '@luma.gl/core';\n\n/** Get shader attribute type from GL constants */\nexport function getShaderAttributeTypeFromGL(type: GL, components: 1 | 2 | 3 | 4): ShaderAttributeType {\n const dataType = getShaderDataTypeFromGL(type);\n switch (components) {\n case 1: return dataType;\n case 2: return `vec2<${dataType}>`;\n case 3: return `vec2<${dataType}>`;\n case 4: return `vec2<${dataType}>`;\n default: throw new Error(String(components));\n }\n}\n\n/** Get shader data type from GL constants */\nexport function getShaderDataTypeFromGL(type: GL): ShaderDataType {\n switch (type) {\n case GL.INT: return 'i32';\n case GL.UNSIGNED_INT: return 'u32';\n case GL.SHORT: return 'i32';\n case GL.UNSIGNED_SHORT: return 'u32';\n case GL.BYTE: return 'i32';\n case GL.UNSIGNED_BYTE: return 'u32';\n case GL.FLOAT: return 'f32';\n case GL.HALF_FLOAT: return 'f16';\n default: throw new Error(String(type));\n }\n}\n\n/** GetGL constant from shader data type */\nexport function getGLFromShaderDataType(type: ShaderDataType): GL.INT | GL.UNSIGNED_INT | GL.FLOAT | GL.HALF_FLOAT {\n switch (type) {\n // TODO\n case 'i32': return GL.INT;\n case 'u32': return GL.UNSIGNED_INT;\n case 'f32': return GL.FLOAT;\n case 'f16': return GL.HALF_FLOAT;\n default: throw new Error(String(type));\n }\n}\n"],"mappings":"AAOA,OAAO,SAASA,4BAA4BA,CAACC,IAAQ,EAAEC,UAAyB,EAAuB;EACrG,MAAMC,QAAQ,GAAGC,uBAAuB,CAACH,IAAI,CAAC;EAC9C,QAAQC,UAAU;IAChB,KAAK,CAAC;MAAE,OAAOC,QAAQ;IACvB,KAAK,CAAC;MAAE,OAAQ,QAAOA,QAAS,GAAE;IAClC,KAAK,CAAC;MAAE,OAAQ,QAAOA,QAAS,GAAE;IAClC,KAAK,CAAC;MAAE,OAAQ,QAAOA,QAAS,GAAE;IAClC;MAAS,MAAM,IAAIE,KAAK,CAACC,MAAM,CAACJ,UAAU,CAAC,CAAC;EAC9C;AACF;AAGA,OAAO,SAASE,uBAAuBA,CAACH,IAAQ,EAAkB;EAChE,QAAQA,IAAI;IACV;MAAa,OAAO,KAAK;IACzB;MAAsB,OAAO,KAAK;IAClC;MAAe,OAAO,KAAK;IAC3B;MAAwB,OAAO,KAAK;IACpC;MAAc,OAAO,KAAK;IAC1B;MAAuB,OAAO,KAAK;IACnC;MAAe,OAAO,KAAK;IAC3B;MAAoB,OAAO,KAAK;IAChC;MAAS,MAAM,IAAII,KAAK,CAACC,MAAM,CAACL,IAAI,CAAC,CAAC;EACxC;AACF;AAGA,OAAO,SAASM,uBAAuBA,CAACN,IAAoB,EAAuD;EACjH,QAAQA,IAAI;IAEV,KAAK,KAAK;MAAE;IACZ,KAAK,KAAK;MAAE;IACZ,KAAK,KAAK;MAAE;IACZ,KAAK,KAAK;MAAE;IACZ;MAAS,MAAM,IAAII,KAAK,CAACC,MAAM,CAACL,IAAI,CAAC,CAAC;EACxC;AACF"}
|