@luma.gl/webgl 9.0.0-alpha.10 → 9.0.0-alpha.12
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 +1 -12
- package/dist/adapter/converters/device-parameters.js.map +1 -1
- package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
- package/dist/adapter/converters/texture-formats.js +0 -9
- package/dist/adapter/converters/texture-formats.js.map +1 -1
- package/dist/adapter/converters/vertex-formats.d.ts.map +1 -1
- package/dist/adapter/converters/vertex-formats.js +3 -0
- package/dist/adapter/converters/vertex-formats.js.map +1 -1
- package/dist/adapter/device-helpers/device-features.d.ts.map +1 -1
- package/dist/adapter/device-helpers/device-features.js.map +1 -1
- package/dist/adapter/device-helpers/get-device-info.js +4 -0
- package/dist/adapter/device-helpers/get-device-info.js.map +1 -1
- 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 +2 -4
- package/dist/adapter/helpers/get-shader-layout.js.map +1 -1
- package/dist/adapter/helpers/set-uniform.js +1 -1
- package/dist/adapter/helpers/set-uniform.js.map +1 -1
- package/dist/adapter/objects/constants-to-keys.d.ts.map +1 -1
- package/dist/adapter/objects/constants-to-keys.js.map +1 -1
- package/dist/adapter/objects/webgl-renderbuffer.d.ts.map +1 -1
- package/dist/adapter/objects/webgl-renderbuffer.js +1 -1
- package/dist/adapter/objects/webgl-renderbuffer.js.map +1 -1
- package/dist/adapter/objects/webgl-resource.d.ts +2 -4
- package/dist/adapter/objects/webgl-resource.d.ts.map +1 -1
- package/dist/adapter/objects/webgl-resource.js +1 -7
- package/dist/adapter/objects/webgl-resource.js.map +1 -1
- package/dist/adapter/objects/webgl-vertex-array-object.d.ts.map +1 -1
- package/dist/adapter/objects/webgl-vertex-array-object.js.map +1 -1
- package/dist/adapter/resources/webgl-buffer.d.ts +0 -1
- package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-buffer.js +0 -2
- package/dist/adapter/resources/webgl-buffer.js.map +1 -1
- package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-command-encoder.js.map +1 -1
- package/dist/adapter/resources/webgl-framebuffer.d.ts +0 -1
- package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-framebuffer.js +2 -2
- package/dist/adapter/resources/webgl-framebuffer.js.map +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.js +4 -32
- package/dist/adapter/resources/webgl-render-pipeline.js.map +1 -1
- package/dist/adapter/resources/webgl-sampler.d.ts +1 -0
- package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-sampler.js +4 -0
- package/dist/adapter/resources/webgl-sampler.js.map +1 -1
- package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-shader.js.map +1 -1
- package/dist/adapter/resources/webgl-texture.d.ts +2 -2
- package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-texture.js +1 -3
- package/dist/adapter/resources/webgl-texture.js.map +1 -1
- package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
- package/dist/adapter/webgl-canvas-context.js +4 -3
- package/dist/adapter/webgl-canvas-context.js.map +1 -1
- package/dist/adapter/webgl-device.d.ts +34 -29
- package/dist/adapter/webgl-device.d.ts.map +1 -1
- package/dist/adapter/webgl-device.js +37 -28
- package/dist/adapter/webgl-device.js.map +1 -1
- package/dist/classic/buffer.d.ts.map +1 -1
- package/dist/classic/buffer.js.map +1 -1
- package/dist/context/debug/webgl-developer-tools.js +1 -7
- package/dist/context/debug/webgl-developer-tools.js.map +1 -1
- package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
- package/dist/context/parameters/unified-parameter-api.js.map +1 -1
- package/dist/context/parameters/webgl-parameter-tables.d.ts +103 -103
- package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
- package/dist/context/parameters/webgl-parameter-tables.js +15 -14
- package/dist/context/parameters/webgl-parameter-tables.js.map +1 -1
- package/dist/context/polyfill/context-data.d.ts +13 -0
- package/dist/context/polyfill/context-data.d.ts.map +1 -0
- package/dist/context/polyfill/context-data.js +14 -0
- package/dist/context/polyfill/context-data.js.map +1 -0
- package/dist/context/polyfill/get-parameter-polyfill.d.ts +1 -1
- package/dist/context/polyfill/get-parameter-polyfill.d.ts.map +1 -1
- package/dist/context/polyfill/get-parameter-polyfill.js.map +1 -1
- package/dist/context/polyfill/polyfill-context.js +4 -4
- package/dist/context/polyfill/polyfill-context.js.map +1 -1
- package/dist/context/polyfill/polyfill-table.d.ts +7 -7
- package/dist/context/polyfill/polyfill-table.d.ts.map +1 -1
- package/dist/context/polyfill/polyfill-table.js +5 -4
- package/dist/context/polyfill/polyfill-table.js.map +1 -1
- package/dist/context/state-tracker/track-context-state.d.ts.map +1 -1
- package/dist/context/state-tracker/track-context-state.js +0 -1
- package/dist/context/state-tracker/track-context-state.js.map +1 -1
- package/dist/context/state-tracker/with-parameters.js +1 -1
- package/dist/context/state-tracker/with-parameters.js.map +1 -1
- package/dist/es5/adapter/converters/device-parameters.js +1 -12
- package/dist/es5/adapter/converters/device-parameters.js.map +1 -1
- package/dist/es5/adapter/converters/texture-formats.js +1 -10
- package/dist/es5/adapter/converters/texture-formats.js.map +1 -1
- package/dist/es5/adapter/converters/vertex-formats.js +3 -0
- package/dist/es5/adapter/converters/vertex-formats.js.map +1 -1
- package/dist/es5/adapter/device-helpers/device-features.js.map +1 -1
- package/dist/es5/adapter/device-helpers/get-device-info.js +4 -0
- package/dist/es5/adapter/device-helpers/get-device-info.js.map +1 -1
- package/dist/es5/adapter/helpers/get-shader-layout.js +2 -4
- package/dist/es5/adapter/helpers/get-shader-layout.js.map +1 -1
- package/dist/es5/adapter/helpers/set-uniform.js +1 -1
- package/dist/es5/adapter/helpers/set-uniform.js.map +1 -1
- package/dist/es5/adapter/objects/constants-to-keys.js.map +1 -1
- package/dist/es5/adapter/objects/webgl-renderbuffer.js +1 -1
- package/dist/es5/adapter/objects/webgl-renderbuffer.js.map +1 -1
- package/dist/es5/adapter/objects/webgl-resource.js +1 -6
- package/dist/es5/adapter/objects/webgl-resource.js.map +1 -1
- package/dist/es5/adapter/objects/webgl-vertex-array-object.js.map +1 -1
- package/dist/es5/adapter/resources/webgl-buffer.js +0 -1
- package/dist/es5/adapter/resources/webgl-buffer.js.map +1 -1
- package/dist/es5/adapter/resources/webgl-command-encoder.js.map +1 -1
- package/dist/es5/adapter/resources/webgl-framebuffer.js +2 -1
- package/dist/es5/adapter/resources/webgl-framebuffer.js.map +1 -1
- package/dist/es5/adapter/resources/webgl-render-pipeline.js +2 -38
- package/dist/es5/adapter/resources/webgl-render-pipeline.js.map +1 -1
- package/dist/es5/adapter/resources/webgl-sampler.js +5 -0
- package/dist/es5/adapter/resources/webgl-sampler.js.map +1 -1
- package/dist/es5/adapter/resources/webgl-shader.js.map +1 -1
- package/dist/es5/adapter/resources/webgl-texture.js +1 -7
- package/dist/es5/adapter/resources/webgl-texture.js.map +1 -1
- package/dist/es5/adapter/webgl-canvas-context.js +3 -4
- package/dist/es5/adapter/webgl-canvas-context.js.map +1 -1
- package/dist/es5/adapter/webgl-device.js +38 -27
- package/dist/es5/adapter/webgl-device.js.map +1 -1
- package/dist/es5/classic/buffer.js.map +1 -1
- package/dist/es5/context/debug/webgl-developer-tools.js +1 -7
- package/dist/es5/context/debug/webgl-developer-tools.js.map +1 -1
- package/dist/es5/context/parameters/unified-parameter-api.js.map +1 -1
- package/dist/es5/context/parameters/webgl-parameter-tables.js +10 -9
- package/dist/es5/context/parameters/webgl-parameter-tables.js.map +1 -1
- package/dist/es5/context/polyfill/context-data.js +21 -0
- package/dist/es5/context/polyfill/context-data.js.map +1 -0
- package/dist/es5/context/polyfill/get-parameter-polyfill.js.map +1 -1
- package/dist/es5/context/polyfill/polyfill-context.js +4 -4
- package/dist/es5/context/polyfill/polyfill-context.js.map +1 -1
- package/dist/es5/context/polyfill/polyfill-table.js +5 -4
- package/dist/es5/context/polyfill/polyfill-table.js.map +1 -1
- package/dist/es5/context/state-tracker/track-context-state.js +0 -1
- package/dist/es5/context/state-tracker/track-context-state.js.map +1 -1
- package/dist/es5/context/state-tracker/with-parameters.js +4 -2
- package/dist/es5/context/state-tracker/with-parameters.js.map +1 -1
- package/dist/es5/index.js +0 -14
- package/dist/es5/index.js.map +1 -1
- package/dist/esm/adapter/converters/device-parameters.js +1 -12
- package/dist/esm/adapter/converters/device-parameters.js.map +1 -1
- package/dist/esm/adapter/converters/texture-formats.js +0 -9
- package/dist/esm/adapter/converters/texture-formats.js.map +1 -1
- package/dist/esm/adapter/converters/vertex-formats.js +3 -0
- package/dist/esm/adapter/converters/vertex-formats.js.map +1 -1
- package/dist/esm/adapter/device-helpers/device-features.js.map +1 -1
- package/dist/esm/adapter/device-helpers/get-device-info.js +4 -0
- package/dist/esm/adapter/device-helpers/get-device-info.js.map +1 -1
- package/dist/esm/adapter/helpers/get-shader-layout.js +2 -4
- package/dist/esm/adapter/helpers/get-shader-layout.js.map +1 -1
- package/dist/esm/adapter/helpers/set-uniform.js +1 -1
- package/dist/esm/adapter/helpers/set-uniform.js.map +1 -1
- package/dist/esm/adapter/objects/constants-to-keys.js.map +1 -1
- package/dist/esm/adapter/objects/webgl-renderbuffer.js +1 -1
- package/dist/esm/adapter/objects/webgl-renderbuffer.js.map +1 -1
- package/dist/esm/adapter/objects/webgl-resource.js +1 -7
- package/dist/esm/adapter/objects/webgl-resource.js.map +1 -1
- package/dist/esm/adapter/objects/webgl-vertex-array-object.js.map +1 -1
- package/dist/esm/adapter/resources/webgl-buffer.js +0 -2
- package/dist/esm/adapter/resources/webgl-buffer.js.map +1 -1
- package/dist/esm/adapter/resources/webgl-command-encoder.js.map +1 -1
- package/dist/esm/adapter/resources/webgl-framebuffer.js +2 -2
- package/dist/esm/adapter/resources/webgl-framebuffer.js.map +1 -1
- package/dist/esm/adapter/resources/webgl-render-pipeline.js +4 -32
- package/dist/esm/adapter/resources/webgl-render-pipeline.js.map +1 -1
- package/dist/esm/adapter/resources/webgl-sampler.js +4 -0
- package/dist/esm/adapter/resources/webgl-sampler.js.map +1 -1
- package/dist/esm/adapter/resources/webgl-shader.js.map +1 -1
- package/dist/esm/adapter/resources/webgl-texture.js +1 -3
- package/dist/esm/adapter/resources/webgl-texture.js.map +1 -1
- package/dist/esm/adapter/webgl-canvas-context.js +4 -3
- package/dist/esm/adapter/webgl-canvas-context.js.map +1 -1
- package/dist/esm/adapter/webgl-device.js +37 -28
- package/dist/esm/adapter/webgl-device.js.map +1 -1
- package/dist/esm/classic/buffer.js.map +1 -1
- package/dist/esm/context/debug/webgl-developer-tools.js +1 -7
- package/dist/esm/context/debug/webgl-developer-tools.js.map +1 -1
- package/dist/esm/context/parameters/unified-parameter-api.js.map +1 -1
- package/dist/esm/context/parameters/webgl-parameter-tables.js +15 -14
- package/dist/esm/context/parameters/webgl-parameter-tables.js.map +1 -1
- package/dist/esm/context/polyfill/context-data.js +14 -0
- package/dist/esm/context/polyfill/context-data.js.map +1 -0
- package/dist/esm/context/polyfill/get-parameter-polyfill.js.map +1 -1
- package/dist/esm/context/polyfill/polyfill-context.js +4 -4
- package/dist/esm/context/polyfill/polyfill-context.js.map +1 -1
- package/dist/esm/context/polyfill/polyfill-table.js +5 -4
- package/dist/esm/context/polyfill/polyfill-table.js.map +1 -1
- package/dist/esm/context/state-tracker/track-context-state.js +0 -1
- package/dist/esm/context/state-tracker/track-context-state.js.map +1 -1
- package/dist/esm/context/state-tracker/with-parameters.js +1 -1
- package/dist/esm/context/state-tracker/with-parameters.js.map +1 -1
- package/dist/esm/index.js +0 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
- package/src/adapter/converters/device-parameters.ts +11 -11
- package/src/adapter/converters/texture-formats.ts +12 -12
- package/src/adapter/converters/vertex-formats.ts +1 -0
- package/src/adapter/device-helpers/device-features.ts +0 -1
- package/src/adapter/device-helpers/get-device-info.ts +5 -1
- package/src/adapter/helpers/get-shader-layout.ts +18 -15
- package/src/adapter/helpers/set-uniform.ts +1 -1
- package/src/adapter/objects/constants-to-keys.ts +4 -1
- package/src/adapter/objects/webgl-renderbuffer.ts +5 -5
- package/src/adapter/objects/webgl-resource.ts +7 -12
- package/src/adapter/objects/webgl-vertex-array-object.ts +4 -4
- package/src/adapter/resources/webgl-buffer.ts +4 -4
- package/src/adapter/resources/webgl-command-encoder.ts +4 -4
- package/src/adapter/resources/webgl-framebuffer.ts +6 -5
- package/src/adapter/resources/webgl-render-pipeline.ts +24 -23
- package/src/adapter/resources/webgl-sampler.ts +5 -1
- package/src/adapter/resources/webgl-shader.ts +1 -1
- package/src/adapter/resources/webgl-texture.ts +5 -7
- package/src/adapter/webgl-canvas-context.ts +2 -3
- package/src/adapter/webgl-device.ts +69 -59
- package/src/classic/buffer.ts +7 -4
- package/src/context/debug/webgl-developer-tools.ts +7 -7
- package/src/context/parameters/unified-parameter-api.ts +1 -1
- package/src/context/parameters/webgl-parameter-tables.ts +113 -94
- package/src/context/polyfill/context-data.ts +27 -0
- package/src/context/polyfill/get-parameter-polyfill.ts +7 -6
- package/src/context/polyfill/polyfill-context.ts +5 -5
- package/src/context/polyfill/polyfill-table.ts +14 -13
- package/src/context/state-tracker/track-context-state.ts +0 -1
- package/src/context/state-tracker/with-parameters.ts +2 -1
- package/src/index.ts +0 -3
- package/dist/context/context/context-state.d.ts +0 -18
- package/dist/context/context/context-state.d.ts.map +0 -1
- package/dist/context/context/context-state.js +0 -26
- package/dist/context/context/context-state.js.map +0 -1
- package/dist/context/context/device-pixels.d.ts +0 -25
- package/dist/context/context/device-pixels.d.ts.map +0 -1
- package/dist/context/context/device-pixels.js +0 -103
- package/dist/context/context/device-pixels.js.map +0 -1
- package/dist/es5/context/context/context-state.js +0 -31
- package/dist/es5/context/context/context-state.js.map +0 -1
- package/dist/es5/context/context/device-pixels.js +0 -121
- package/dist/es5/context/context/device-pixels.js.map +0 -1
- package/dist/esm/context/context/context-state.js +0 -26
- package/dist/esm/context/context/context-state.js.map +0 -1
- package/dist/esm/context/context/device-pixels.js +0 -103
- package/dist/esm/context/context/device-pixels.js.map +0 -1
- package/src/context/context/context-state.ts +0 -41
- package/src/context/context/device-pixels.ts +0 -158
|
@@ -91,11 +91,13 @@ export const GL_PARAMETER_DEFAULTS: GLParameters = {
|
|
|
91
91
|
|
|
92
92
|
// SETTER TABLES - ENABLES SETTING ANY PARAMETER WITH A COMMON API
|
|
93
93
|
|
|
94
|
-
const enable = (gl
|
|
95
|
-
|
|
96
|
-
const
|
|
94
|
+
const enable = (gl: WebGLRenderingContext, value: unknown, key: GL) =>
|
|
95
|
+
value ? gl.enable(key) : gl.disable(key);
|
|
96
|
+
const hint = (gl: WebGLRenderingContext, value: GL, key: GL) => gl.hint(key, value);
|
|
97
|
+
const pixelStorei = (gl: WebGLRenderingContext, value: number | boolean, key: GL) =>
|
|
98
|
+
gl.pixelStorei(key, value);
|
|
97
99
|
|
|
98
|
-
const bindFramebuffer = (gl, value, key) => {
|
|
100
|
+
const bindFramebuffer = (gl: WebGLRenderingContext, value: unknown, key: GL) => {
|
|
99
101
|
let target;
|
|
100
102
|
if (key === GL.FRAMEBUFFER_BINDING) {
|
|
101
103
|
target = isWebGL2(gl) ? GL.DRAW_FRAMEBUFFER : GL.FRAMEBUFFER;
|
|
@@ -106,21 +108,22 @@ const bindFramebuffer = (gl, value, key) => {
|
|
|
106
108
|
return gl.bindFramebuffer(target, value);
|
|
107
109
|
};
|
|
108
110
|
|
|
109
|
-
const bindBuffer = (gl, value, key) => {
|
|
110
|
-
const
|
|
111
|
-
[GL.ARRAY_BUFFER_BINDING]:
|
|
112
|
-
[GL.COPY_READ_BUFFER_BINDING]:
|
|
113
|
-
[GL.COPY_WRITE_BUFFER_BINDING]:
|
|
114
|
-
[GL.PIXEL_PACK_BUFFER_BINDING]:
|
|
115
|
-
[GL.PIXEL_UNPACK_BUFFER_BINDING]:
|
|
116
|
-
}
|
|
111
|
+
const bindBuffer = (gl: WebGLRenderingContext, value: unknown, key: GL) => {
|
|
112
|
+
const bindingMap: Partial<Record<GL, GL>> = {
|
|
113
|
+
[GL.ARRAY_BUFFER_BINDING]: GL.ARRAY_BUFFER,
|
|
114
|
+
[GL.COPY_READ_BUFFER_BINDING]: GL.COPY_READ_BUFFER,
|
|
115
|
+
[GL.COPY_WRITE_BUFFER_BINDING]: GL.COPY_WRITE_BUFFER,
|
|
116
|
+
[GL.PIXEL_PACK_BUFFER_BINDING]: GL.PIXEL_PACK_BUFFER,
|
|
117
|
+
[GL.PIXEL_UNPACK_BUFFER_BINDING]: GL.PIXEL_UNPACK_BUFFER
|
|
118
|
+
};
|
|
119
|
+
const target = bindingMap[key];
|
|
117
120
|
|
|
118
121
|
gl.bindBuffer(target, value);
|
|
119
122
|
};
|
|
120
123
|
|
|
121
124
|
// Utility
|
|
122
|
-
function isArray(array) {
|
|
123
|
-
return Array.isArray(array) || ArrayBuffer.isView(array);
|
|
125
|
+
function isArray(array: unknown): boolean {
|
|
126
|
+
return Array.isArray(array) || (ArrayBuffer.isView(array) && !(array instanceof DataView));
|
|
124
127
|
}
|
|
125
128
|
|
|
126
129
|
// Map from WebGL parameter names to corresponding WebGL setter functions
|
|
@@ -128,29 +131,34 @@ function isArray(array) {
|
|
|
128
131
|
// NOTE: When value type is a string, it will be handled by 'GL_COMPOSITE_PARAMETER_SETTERS'
|
|
129
132
|
export const GL_PARAMETER_SETTERS = {
|
|
130
133
|
[GL.BLEND]: enable,
|
|
131
|
-
[GL.BLEND_COLOR]: (gl, value) =>
|
|
134
|
+
[GL.BLEND_COLOR]: (gl: WebGLRenderingContext, value: [number, number, number, number]) =>
|
|
135
|
+
gl.blendColor(...value),
|
|
132
136
|
[GL.BLEND_EQUATION_RGB]: 'blendEquation',
|
|
133
137
|
[GL.BLEND_EQUATION_ALPHA]: 'blendEquation',
|
|
134
138
|
[GL.BLEND_SRC_RGB]: 'blendFunc',
|
|
135
139
|
[GL.BLEND_DST_RGB]: 'blendFunc',
|
|
136
140
|
[GL.BLEND_SRC_ALPHA]: 'blendFunc',
|
|
137
141
|
[GL.BLEND_DST_ALPHA]: 'blendFunc',
|
|
138
|
-
[GL.COLOR_CLEAR_VALUE]: (gl, value) =>
|
|
139
|
-
|
|
142
|
+
[GL.COLOR_CLEAR_VALUE]: (gl: WebGLRenderingContext, value: [number, number, number, number]) =>
|
|
143
|
+
gl.clearColor(...value),
|
|
144
|
+
[GL.COLOR_WRITEMASK]: (gl: WebGLRenderingContext, value: [boolean, boolean, boolean, boolean]) => gl.colorMask(...value),
|
|
140
145
|
[GL.CULL_FACE]: enable,
|
|
141
|
-
[GL.CULL_FACE_MODE]: (gl, value) => gl.cullFace(value),
|
|
146
|
+
[GL.CULL_FACE_MODE]: (gl: WebGLRenderingContext, value) => gl.cullFace(value),
|
|
142
147
|
[GL.DEPTH_TEST]: enable,
|
|
143
|
-
[GL.DEPTH_CLEAR_VALUE]: (gl, value) => gl.clearDepth(value),
|
|
144
|
-
[GL.DEPTH_FUNC]: (gl, value) => gl.depthFunc(value),
|
|
145
|
-
[GL.DEPTH_RANGE]: (gl, value) => gl.depthRange(...value),
|
|
146
|
-
[GL.DEPTH_WRITEMASK]: (gl, value) => gl.depthMask(value),
|
|
148
|
+
[GL.DEPTH_CLEAR_VALUE]: (gl: WebGLRenderingContext, value) => gl.clearDepth(value),
|
|
149
|
+
[GL.DEPTH_FUNC]: (gl: WebGLRenderingContext, value) => gl.depthFunc(value),
|
|
150
|
+
[GL.DEPTH_RANGE]: (gl: WebGLRenderingContext, value: [number, number]) => gl.depthRange(...value),
|
|
151
|
+
[GL.DEPTH_WRITEMASK]: (gl: WebGLRenderingContext, value) => gl.depthMask(value),
|
|
147
152
|
[GL.DITHER]: enable,
|
|
148
153
|
[GL.FRAGMENT_SHADER_DERIVATIVE_HINT]: hint,
|
|
149
154
|
|
|
150
|
-
[GL.CURRENT_PROGRAM]: (gl, value) => gl.useProgram(value),
|
|
151
|
-
[GL.RENDERBUFFER_BINDING]: (gl, value) =>
|
|
152
|
-
|
|
153
|
-
[GL.
|
|
155
|
+
[GL.CURRENT_PROGRAM]: (gl: WebGLRenderingContext, value) => gl.useProgram(value),
|
|
156
|
+
[GL.RENDERBUFFER_BINDING]: (gl: WebGLRenderingContext, value) =>
|
|
157
|
+
gl.bindRenderbuffer(GL.RENDERBUFFER, value),
|
|
158
|
+
[GL.TRANSFORM_FEEDBACK_BINDING]: (gl: WebGLRenderingContext, value) =>
|
|
159
|
+
(gl as WebGL2RenderingContext).bindTransformFeedback?.(GL.TRANSFORM_FEEDBACK, value),
|
|
160
|
+
[GL.VERTEX_ARRAY_BINDING]: (gl: WebGLRenderingContext, value) =>
|
|
161
|
+
(gl as WebGL2RenderingContext).bindVertexArray(value),
|
|
154
162
|
// NOTE: FRAMEBUFFER_BINDING and DRAW_FRAMEBUFFER_BINDING(WebGL2) refer same state.
|
|
155
163
|
[GL.FRAMEBUFFER_BINDING]: bindFramebuffer,
|
|
156
164
|
[GL.READ_FRAMEBUFFER_BINDING]: bindFramebuffer,
|
|
@@ -162,9 +170,9 @@ export const GL_PARAMETER_SETTERS = {
|
|
|
162
170
|
[GL.PIXEL_PACK_BUFFER_BINDING]: bindBuffer,
|
|
163
171
|
[GL.PIXEL_UNPACK_BUFFER_BINDING]: bindBuffer,
|
|
164
172
|
|
|
165
|
-
[GL.FRONT_FACE]: (gl, value) => gl.frontFace(value),
|
|
173
|
+
[GL.FRONT_FACE]: (gl: WebGLRenderingContext, value) => gl.frontFace(value),
|
|
166
174
|
[GL.GENERATE_MIPMAP_HINT]: hint,
|
|
167
|
-
[GL.LINE_WIDTH]: (gl, value) => gl.lineWidth(value),
|
|
175
|
+
[GL.LINE_WIDTH]: (gl: WebGLRenderingContext, value) => gl.lineWidth(value),
|
|
168
176
|
[GL.POLYGON_OFFSET_FILL]: enable,
|
|
169
177
|
[GL.POLYGON_OFFSET_FACTOR]: 'polygonOffset',
|
|
170
178
|
[GL.POLYGON_OFFSET_UNITS]: 'polygonOffset',
|
|
@@ -174,11 +182,13 @@ export const GL_PARAMETER_SETTERS = {
|
|
|
174
182
|
[GL.SAMPLE_COVERAGE_VALUE]: 'sampleCoverage',
|
|
175
183
|
[GL.SAMPLE_COVERAGE_INVERT]: 'sampleCoverage',
|
|
176
184
|
[GL.SCISSOR_TEST]: enable,
|
|
177
|
-
[GL.SCISSOR_BOX]: (gl, value) => gl.scissor(...value),
|
|
185
|
+
[GL.SCISSOR_BOX]: (gl: WebGLRenderingContext, value: [number, number, number, number]) => gl.scissor(...value),
|
|
178
186
|
[GL.STENCIL_TEST]: enable,
|
|
179
|
-
[GL.STENCIL_CLEAR_VALUE]: (gl, value) => gl.clearStencil(value),
|
|
180
|
-
[GL.STENCIL_WRITEMASK]: (gl, value) =>
|
|
181
|
-
|
|
187
|
+
[GL.STENCIL_CLEAR_VALUE]: (gl: WebGLRenderingContext, value) => gl.clearStencil(value),
|
|
188
|
+
[GL.STENCIL_WRITEMASK]: (gl: WebGLRenderingContext, value) =>
|
|
189
|
+
gl.stencilMaskSeparate(GL.FRONT, value),
|
|
190
|
+
[GL.STENCIL_BACK_WRITEMASK]: (gl: WebGLRenderingContext, value) =>
|
|
191
|
+
gl.stencilMaskSeparate(GL.BACK, value),
|
|
182
192
|
[GL.STENCIL_FUNC]: 'stencilFuncFront',
|
|
183
193
|
[GL.STENCIL_REF]: 'stencilFuncFront',
|
|
184
194
|
[GL.STENCIL_VALUE_MASK]: 'stencilFuncFront',
|
|
@@ -191,7 +201,7 @@ export const GL_PARAMETER_SETTERS = {
|
|
|
191
201
|
[GL.STENCIL_BACK_FAIL]: 'stencilOpBack',
|
|
192
202
|
[GL.STENCIL_BACK_PASS_DEPTH_FAIL]: 'stencilOpBack',
|
|
193
203
|
[GL.STENCIL_BACK_PASS_DEPTH_PASS]: 'stencilOpBack',
|
|
194
|
-
[GL.VIEWPORT]: (gl, value) => gl.viewport(...value),
|
|
204
|
+
[GL.VIEWPORT]: (gl: WebGLRenderingContext, value: [number, number, number, number]) => gl.viewport(...value),
|
|
195
205
|
|
|
196
206
|
// WEBGL1 PIXEL PACK/UNPACK MODES
|
|
197
207
|
[GL.PACK_ALIGNMENT]: pixelStorei,
|
|
@@ -212,80 +222,85 @@ export const GL_PARAMETER_SETTERS = {
|
|
|
212
222
|
[GL.UNPACK_SKIP_IMAGES]: pixelStorei,
|
|
213
223
|
|
|
214
224
|
// Function-style setters
|
|
215
|
-
framebuffer: (gl, framebuffer) => {
|
|
225
|
+
framebuffer: (gl: WebGLRenderingContext, framebuffer) => {
|
|
216
226
|
// accepts 1) a WebGLFramebuffer 2) null (default framebuffer), or 3) luma.gl Framebuffer class
|
|
217
227
|
// framebuffer is null when restoring to default framebuffer, otherwise use the WebGL handle.
|
|
218
228
|
const handle = framebuffer && 'handle' in framebuffer ? framebuffer.handle : framebuffer;
|
|
219
229
|
return gl.bindFramebuffer(GL.FRAMEBUFFER, handle);
|
|
220
230
|
},
|
|
221
|
-
blend: (gl, value) => (value ? gl.enable(GL.BLEND) : gl.disable(GL.BLEND)),
|
|
222
|
-
blendColor: (gl, value) => gl.blendColor(...value),
|
|
223
|
-
blendEquation: (gl, args) => {
|
|
224
|
-
|
|
225
|
-
gl.blendEquationSeparate(...
|
|
231
|
+
blend: (gl: WebGLRenderingContext, value) => (value ? gl.enable(GL.BLEND) : gl.disable(GL.BLEND)),
|
|
232
|
+
blendColor: (gl: WebGLRenderingContext, value: [number, number, number, number]) => gl.blendColor(...value),
|
|
233
|
+
blendEquation: (gl: WebGLRenderingContext, args: number | [number, number]) => {
|
|
234
|
+
const separateModes = typeof args === 'number' ? [args, args] as [number, number]: args;
|
|
235
|
+
gl.blendEquationSeparate(...separateModes);
|
|
226
236
|
},
|
|
227
|
-
blendFunc: (gl, args) => {
|
|
228
|
-
|
|
229
|
-
gl.blendFuncSeparate(...
|
|
237
|
+
blendFunc: (gl: WebGLRenderingContext, args: [number, number] | [number, number, number, number]) => {
|
|
238
|
+
const separateFuncs = args?.length === 2 ? [...args, ...args] as [number, number, number, number] : args;
|
|
239
|
+
gl.blendFuncSeparate(...separateFuncs);
|
|
230
240
|
},
|
|
231
241
|
|
|
232
|
-
clearColor: (gl, value) => gl.clearColor(...value),
|
|
233
|
-
clearDepth: (gl, value) => gl.clearDepth(value),
|
|
234
|
-
clearStencil: (gl, value) => gl.clearStencil(value),
|
|
242
|
+
clearColor: (gl: WebGLRenderingContext, value: [number, number, number, number]) => gl.clearColor(...value),
|
|
243
|
+
clearDepth: (gl: WebGLRenderingContext, value) => gl.clearDepth(value),
|
|
244
|
+
clearStencil: (gl: WebGLRenderingContext, value) => gl.clearStencil(value),
|
|
235
245
|
|
|
236
|
-
colorMask: (gl, value) => gl.colorMask(...value),
|
|
246
|
+
colorMask: (gl: WebGLRenderingContext, value: [boolean, boolean, boolean, boolean]) => gl.colorMask(...value),
|
|
237
247
|
|
|
238
|
-
cull: (gl, value) =>
|
|
239
|
-
|
|
248
|
+
cull: (gl: WebGLRenderingContext, value) =>
|
|
249
|
+
value ? gl.enable(GL.CULL_FACE) : gl.disable(GL.CULL_FACE),
|
|
250
|
+
cullFace: (gl: WebGLRenderingContext, value) => gl.cullFace(value),
|
|
240
251
|
|
|
241
|
-
depthTest: (gl, value) =>
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
252
|
+
depthTest: (gl: WebGLRenderingContext, value) =>
|
|
253
|
+
value ? gl.enable(GL.DEPTH_TEST) : gl.disable(GL.DEPTH_TEST),
|
|
254
|
+
depthFunc: (gl: WebGLRenderingContext, value) => gl.depthFunc(value),
|
|
255
|
+
depthMask: (gl: WebGLRenderingContext, value) => gl.depthMask(value),
|
|
256
|
+
depthRange: (gl: WebGLRenderingContext, value: [number, number]) => gl.depthRange(...value),
|
|
245
257
|
|
|
246
|
-
dither: (gl, value) =>
|
|
258
|
+
dither: (gl: WebGLRenderingContext, value) =>
|
|
259
|
+
value ? gl.enable(GL.DITHER) : gl.disable(GL.DITHER),
|
|
247
260
|
|
|
248
|
-
derivativeHint: (gl, value) => {
|
|
261
|
+
derivativeHint: (gl: WebGLRenderingContext, value) => {
|
|
249
262
|
// gl1: 'OES_standard_derivatives'
|
|
250
263
|
gl.hint(GL.FRAGMENT_SHADER_DERIVATIVE_HINT, value);
|
|
251
264
|
},
|
|
252
265
|
|
|
253
|
-
frontFace: (gl, value) => gl.frontFace(value),
|
|
266
|
+
frontFace: (gl: WebGLRenderingContext, value) => gl.frontFace(value),
|
|
254
267
|
|
|
255
|
-
mipmapHint: (gl, value) => gl.hint(GL.GENERATE_MIPMAP_HINT, value),
|
|
268
|
+
mipmapHint: (gl: WebGLRenderingContext, value) => gl.hint(GL.GENERATE_MIPMAP_HINT, value),
|
|
256
269
|
|
|
257
|
-
lineWidth: (gl, value) => gl.lineWidth(value),
|
|
270
|
+
lineWidth: (gl: WebGLRenderingContext, value) => gl.lineWidth(value),
|
|
258
271
|
|
|
259
|
-
polygonOffsetFill: (gl, value) =>
|
|
272
|
+
polygonOffsetFill: (gl: WebGLRenderingContext, value) =>
|
|
260
273
|
value ? gl.enable(GL.POLYGON_OFFSET_FILL) : gl.disable(GL.POLYGON_OFFSET_FILL),
|
|
261
|
-
polygonOffset: (gl, value) => gl.polygonOffset(...value),
|
|
274
|
+
polygonOffset: (gl: WebGLRenderingContext, value: [number, number]) => gl.polygonOffset(...value),
|
|
262
275
|
|
|
263
|
-
sampleCoverage: (gl, value) => gl.sampleCoverage(...value),
|
|
276
|
+
sampleCoverage: (gl: WebGLRenderingContext, value: [number, boolean?]) => gl.sampleCoverage(...value),
|
|
264
277
|
|
|
265
|
-
scissorTest: (gl, value) =>
|
|
266
|
-
|
|
278
|
+
scissorTest: (gl: WebGLRenderingContext, value) =>
|
|
279
|
+
value ? gl.enable(GL.SCISSOR_TEST) : gl.disable(GL.SCISSOR_TEST),
|
|
280
|
+
scissor: (gl: WebGLRenderingContext, value: [number, number, number, number]) => gl.scissor(...value),
|
|
267
281
|
|
|
268
|
-
stencilTest: (gl, value) =>
|
|
269
|
-
|
|
282
|
+
stencilTest: (gl: WebGLRenderingContext, value) =>
|
|
283
|
+
value ? gl.enable(GL.STENCIL_TEST) : gl.disable(GL.STENCIL_TEST),
|
|
284
|
+
stencilMask: (gl: WebGLRenderingContext, value) => {
|
|
270
285
|
value = isArray(value) ? value : [value, value];
|
|
271
286
|
const [mask, backMask] = value;
|
|
272
287
|
gl.stencilMaskSeparate(GL.FRONT, mask);
|
|
273
288
|
gl.stencilMaskSeparate(GL.BACK, backMask);
|
|
274
289
|
},
|
|
275
|
-
stencilFunc: (gl, args) => {
|
|
290
|
+
stencilFunc: (gl: WebGLRenderingContext, args) => {
|
|
276
291
|
args = isArray(args) && args.length === 3 ? [...args, ...args] : args;
|
|
277
292
|
const [func, ref, mask, backFunc, backRef, backMask] = args;
|
|
278
293
|
gl.stencilFuncSeparate(GL.FRONT, func, ref, mask);
|
|
279
294
|
gl.stencilFuncSeparate(GL.BACK, backFunc, backRef, backMask);
|
|
280
295
|
},
|
|
281
|
-
stencilOp: (gl, args) => {
|
|
296
|
+
stencilOp: (gl: WebGLRenderingContext, args) => {
|
|
282
297
|
args = isArray(args) && args.length === 3 ? [...args, ...args] : args;
|
|
283
298
|
const [sfail, dpfail, dppass, backSfail, backDpfail, backDppass] = args;
|
|
284
299
|
gl.stencilOpSeparate(GL.FRONT, sfail, dpfail, dppass);
|
|
285
300
|
gl.stencilOpSeparate(GL.BACK, backSfail, backDpfail, backDppass);
|
|
286
301
|
},
|
|
287
302
|
|
|
288
|
-
viewport: (gl, value) => gl.viewport(...value)
|
|
303
|
+
viewport: (gl: WebGLRenderingContext, value: [number, number, number, number]) => gl.viewport(...value)
|
|
289
304
|
};
|
|
290
305
|
|
|
291
306
|
function getValue(glEnum, values, cache) {
|
|
@@ -294,50 +309,50 @@ function getValue(glEnum, values, cache) {
|
|
|
294
309
|
|
|
295
310
|
// COMPOSITE_WEBGL_PARAMETER_
|
|
296
311
|
export const GL_COMPOSITE_PARAMETER_SETTERS = {
|
|
297
|
-
blendEquation: (gl, values, cache) =>
|
|
312
|
+
blendEquation: (gl: WebGLRenderingContext, values, cache) =>
|
|
298
313
|
gl.blendEquationSeparate(
|
|
299
314
|
getValue(GL.BLEND_EQUATION_RGB, values, cache),
|
|
300
315
|
getValue(GL.BLEND_EQUATION_ALPHA, values, cache)
|
|
301
316
|
),
|
|
302
|
-
blendFunc: (gl, values, cache) =>
|
|
317
|
+
blendFunc: (gl: WebGLRenderingContext, values, cache) =>
|
|
303
318
|
gl.blendFuncSeparate(
|
|
304
319
|
getValue(GL.BLEND_SRC_RGB, values, cache),
|
|
305
320
|
getValue(GL.BLEND_DST_RGB, values, cache),
|
|
306
321
|
getValue(GL.BLEND_SRC_ALPHA, values, cache),
|
|
307
322
|
getValue(GL.BLEND_DST_ALPHA, values, cache)
|
|
308
323
|
),
|
|
309
|
-
polygonOffset: (gl, values, cache) =>
|
|
324
|
+
polygonOffset: (gl: WebGLRenderingContext, values, cache) =>
|
|
310
325
|
gl.polygonOffset(
|
|
311
326
|
getValue(GL.POLYGON_OFFSET_FACTOR, values, cache),
|
|
312
327
|
getValue(GL.POLYGON_OFFSET_UNITS, values, cache)
|
|
313
328
|
),
|
|
314
|
-
sampleCoverage: (gl, values, cache) =>
|
|
329
|
+
sampleCoverage: (gl: WebGLRenderingContext, values, cache) =>
|
|
315
330
|
gl.sampleCoverage(
|
|
316
331
|
getValue(GL.SAMPLE_COVERAGE_VALUE, values, cache),
|
|
317
332
|
getValue(GL.SAMPLE_COVERAGE_INVERT, values, cache)
|
|
318
333
|
),
|
|
319
|
-
stencilFuncFront: (gl, values, cache) =>
|
|
334
|
+
stencilFuncFront: (gl: WebGLRenderingContext, values, cache) =>
|
|
320
335
|
gl.stencilFuncSeparate(
|
|
321
336
|
GL.FRONT,
|
|
322
337
|
getValue(GL.STENCIL_FUNC, values, cache),
|
|
323
338
|
getValue(GL.STENCIL_REF, values, cache),
|
|
324
339
|
getValue(GL.STENCIL_VALUE_MASK, values, cache)
|
|
325
340
|
),
|
|
326
|
-
stencilFuncBack: (gl, values, cache) =>
|
|
341
|
+
stencilFuncBack: (gl: WebGLRenderingContext, values, cache) =>
|
|
327
342
|
gl.stencilFuncSeparate(
|
|
328
343
|
GL.BACK,
|
|
329
344
|
getValue(GL.STENCIL_BACK_FUNC, values, cache),
|
|
330
345
|
getValue(GL.STENCIL_BACK_REF, values, cache),
|
|
331
346
|
getValue(GL.STENCIL_BACK_VALUE_MASK, values, cache)
|
|
332
347
|
),
|
|
333
|
-
stencilOpFront: (gl, values, cache) =>
|
|
348
|
+
stencilOpFront: (gl: WebGLRenderingContext, values, cache) =>
|
|
334
349
|
gl.stencilOpSeparate(
|
|
335
350
|
GL.FRONT,
|
|
336
351
|
getValue(GL.STENCIL_FAIL, values, cache),
|
|
337
352
|
getValue(GL.STENCIL_PASS_DEPTH_FAIL, values, cache),
|
|
338
353
|
getValue(GL.STENCIL_PASS_DEPTH_PASS, values, cache)
|
|
339
354
|
),
|
|
340
|
-
stencilOpBack: (gl, values, cache) =>
|
|
355
|
+
stencilOpBack: (gl: WebGLRenderingContext, values, cache) =>
|
|
341
356
|
gl.stencilOpSeparate(
|
|
342
357
|
GL.BACK,
|
|
343
358
|
getValue(GL.STENCIL_BACK_FAIL, values, cache),
|
|
@@ -352,36 +367,40 @@ type UpdateFunc = (params: Record<string, any>) => void;
|
|
|
352
367
|
export const GL_HOOKED_SETTERS = {
|
|
353
368
|
// GENERIC SETTERS
|
|
354
369
|
|
|
355
|
-
enable: (update: UpdateFunc, capability) =>
|
|
370
|
+
enable: (update: UpdateFunc, capability: GL) =>
|
|
356
371
|
update({
|
|
357
372
|
[capability]: true
|
|
358
373
|
}),
|
|
359
|
-
disable: (update: UpdateFunc, capability) =>
|
|
374
|
+
disable: (update: UpdateFunc, capability: GL) =>
|
|
360
375
|
update({
|
|
361
376
|
[capability]: false
|
|
362
377
|
}),
|
|
363
|
-
pixelStorei: (update: UpdateFunc, pname, value) =>
|
|
378
|
+
pixelStorei: (update: UpdateFunc, pname: GL, value) =>
|
|
364
379
|
update({
|
|
365
380
|
[pname]: value
|
|
366
381
|
}),
|
|
367
|
-
hint: (update: UpdateFunc, pname, hint) =>
|
|
382
|
+
hint: (update: UpdateFunc, pname: GL, hint: GL) =>
|
|
368
383
|
update({
|
|
369
384
|
[pname]: hint
|
|
370
385
|
}),
|
|
371
386
|
|
|
372
387
|
// SPECIFIC SETTERS
|
|
373
|
-
useProgram: (update: UpdateFunc, value) =>
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
388
|
+
useProgram: (update: UpdateFunc, value) =>
|
|
389
|
+
update({
|
|
390
|
+
[GL.CURRENT_PROGRAM]: value
|
|
391
|
+
}),
|
|
392
|
+
bindRenderbuffer: (update: UpdateFunc, target, value) =>
|
|
393
|
+
update({
|
|
394
|
+
[GL.RENDERBUFFER_BINDING]: value
|
|
395
|
+
}),
|
|
396
|
+
bindTransformFeedback: (update: UpdateFunc, target, value) =>
|
|
397
|
+
update({
|
|
398
|
+
[GL.TRANSFORM_FEEDBACK_BINDING]: value
|
|
399
|
+
}),
|
|
400
|
+
bindVertexArray: (update: UpdateFunc, value) =>
|
|
401
|
+
update({
|
|
402
|
+
[GL.VERTEX_ARRAY_BINDING]: value
|
|
403
|
+
}),
|
|
385
404
|
|
|
386
405
|
bindFramebuffer: (update: UpdateFunc, target, framebuffer) => {
|
|
387
406
|
switch (target) {
|
|
@@ -399,13 +418,13 @@ export const GL_HOOKED_SETTERS = {
|
|
|
399
418
|
}
|
|
400
419
|
},
|
|
401
420
|
bindBuffer: (update: UpdateFunc, target, buffer) => {
|
|
402
|
-
const pname =
|
|
421
|
+
const pname = {
|
|
403
422
|
[GL.ARRAY_BUFFER]: [GL.ARRAY_BUFFER_BINDING],
|
|
404
423
|
[GL.COPY_READ_BUFFER]: [GL.COPY_READ_BUFFER_BINDING],
|
|
405
424
|
[GL.COPY_WRITE_BUFFER]: [GL.COPY_WRITE_BUFFER_BINDING],
|
|
406
425
|
[GL.PIXEL_PACK_BUFFER]: [GL.PIXEL_PACK_BUFFER_BINDING],
|
|
407
426
|
[GL.PIXEL_UNPACK_BUFFER]: [GL.PIXEL_UNPACK_BUFFER_BINDING]
|
|
408
|
-
}
|
|
427
|
+
}[target];
|
|
409
428
|
|
|
410
429
|
if (pname) {
|
|
411
430
|
return update({[pname]: buffer});
|
|
@@ -567,7 +586,7 @@ export const GL_HOOKED_SETTERS = {
|
|
|
567
586
|
|
|
568
587
|
// GETTER TABLE - FOR READING OUT AN ENTIRE CONTEXT
|
|
569
588
|
|
|
570
|
-
const isEnabled = (gl, key) => gl.isEnabled(key);
|
|
589
|
+
const isEnabled = (gl: WebGLRenderingContext, key) => gl.isEnabled(key);
|
|
571
590
|
|
|
572
591
|
// Exceptions for any keys that cannot be queried by gl.getParameters
|
|
573
592
|
export const GL_PARAMETER_GETTERS = {
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stores luma.gl specific state associated with a context
|
|
3
|
+
*/
|
|
4
|
+
export interface WebGLContextData {
|
|
5
|
+
_polyfilled: boolean;
|
|
6
|
+
_extensions: Record<string, any>;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Gets luma.gl specific state from a context
|
|
11
|
+
* @returns context state
|
|
12
|
+
*/
|
|
13
|
+
export function getContextData(gl: WebGLRenderingContext): WebGLContextData {
|
|
14
|
+
// @ts-expect-error
|
|
15
|
+
const luma = gl.luma as WebGLContextData | null;
|
|
16
|
+
if (!luma) {
|
|
17
|
+
const contextState: WebGLContextData = {
|
|
18
|
+
_polyfilled: false,
|
|
19
|
+
_extensions: {}
|
|
20
|
+
};
|
|
21
|
+
// @ts-expect-error
|
|
22
|
+
gl.luma = contextState;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// @ts-expect-error
|
|
26
|
+
return gl.luma;
|
|
27
|
+
}
|
|
@@ -31,7 +31,7 @@ const WEBGL_PARAMETERS = {
|
|
|
31
31
|
[GL.SAMPLES]: getWebGL2ValueOrZero,
|
|
32
32
|
|
|
33
33
|
// WebGL2 extension context parameters
|
|
34
|
-
[GL_GPU_DISJOINT_EXT]: (gl, getParameter) => {
|
|
34
|
+
[GL_GPU_DISJOINT_EXT]: (gl: WebGLRenderingContext, getParameter) => {
|
|
35
35
|
const ext = isWebGL2(gl)
|
|
36
36
|
? gl.getExtension(EXT_disjoint_timer_query_webgl2)
|
|
37
37
|
: gl.getExtension(EXT_disjoint_timer_query);
|
|
@@ -39,18 +39,19 @@ const WEBGL_PARAMETERS = {
|
|
|
39
39
|
},
|
|
40
40
|
|
|
41
41
|
// Extension fixed values
|
|
42
|
-
[GL_UNMASKED_VENDOR_WEBGL]: (gl, getParameter) => {
|
|
42
|
+
[GL_UNMASKED_VENDOR_WEBGL]: (gl: WebGLRenderingContext, getParameter) => {
|
|
43
43
|
const ext = gl.getExtension(WEBGL_debug_renderer_info);
|
|
44
44
|
return getParameter((ext && ext.UNMASKED_VENDOR_WEBGL) || GL.VENDOR);
|
|
45
45
|
},
|
|
46
46
|
|
|
47
|
-
[GL_UNMASKED_RENDERER_WEBGL]: (gl, getParameter) => {
|
|
47
|
+
[GL_UNMASKED_RENDERER_WEBGL]: (gl: WebGLRenderingContext, getParameter) => {
|
|
48
48
|
const ext = gl.getExtension(WEBGL_debug_renderer_info);
|
|
49
49
|
return getParameter((ext && ext.UNMASKED_RENDERER_WEBGL) || GL.RENDERER);
|
|
50
50
|
},
|
|
51
51
|
|
|
52
52
|
// Extension LIMITS
|
|
53
|
-
[GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT]: (gl, getParameter) => {
|
|
53
|
+
[GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT]: (gl: WebGLRenderingContext, getParameter) => {
|
|
54
|
+
// @ts-ignore TODO - store these on the device instance instead...
|
|
54
55
|
const ext = gl.luma?.extensions?.[EXT_texture_filter_anisotropic] ||
|
|
55
56
|
gl.getExtension('EXT_texture_filter_anisotropic');
|
|
56
57
|
return ext ? getParameter(ext.MAX_TEXTURE_MAX_ANISOTROPY_EXT) : 1.0;
|
|
@@ -60,7 +61,7 @@ const WEBGL_PARAMETERS = {
|
|
|
60
61
|
[GL.MAX_3D_TEXTURE_SIZE]: getWebGL2ValueOrZero,
|
|
61
62
|
[GL.MAX_ARRAY_TEXTURE_LAYERS]: getWebGL2ValueOrZero,
|
|
62
63
|
[GL.MAX_CLIENT_WAIT_TIMEOUT_WEBGL]: getWebGL2ValueOrZero,
|
|
63
|
-
[GL.MAX_COLOR_ATTACHMENTS]: (gl, getParameter) => {
|
|
64
|
+
[GL.MAX_COLOR_ATTACHMENTS]: (gl: WebGLRenderingContext, getParameter) => {
|
|
64
65
|
if (!isWebGL2(gl)) {
|
|
65
66
|
const ext = gl.getExtension(WEBGL_draw_buffers);
|
|
66
67
|
return ext ? getParameter(ext.MAX_COLOR_ATTACHMENTS_WEBGL) : 0;
|
|
@@ -108,7 +109,7 @@ const WEBGL_PARAMETERS = {
|
|
|
108
109
|
|
|
109
110
|
// A "replacement" gl.getParameter that accepts "enums" from extensions and WebGL2
|
|
110
111
|
// and returns reasonably safe defaults
|
|
111
|
-
export function getParameterPolyfill(gl, originalGetParameter, pname) {
|
|
112
|
+
export function getParameterPolyfill(gl: WebGLRenderingContext, originalGetParameter, pname) {
|
|
112
113
|
// Return mock limits (usually 0) for WebGL2 constants to ensure these
|
|
113
114
|
// can be queries without error
|
|
114
115
|
const limit = WEBGL_PARAMETERS[pname];
|
|
@@ -11,13 +11,13 @@ import {assert} from '@luma.gl/api';
|
|
|
11
11
|
import {polyfillVertexArrayObject} from './polyfill-vertex-array-object';
|
|
12
12
|
|
|
13
13
|
import {WEBGL2_CONTEXT_POLYFILLS, WEBGL2_CONTEXT_OVERRIDES} from './polyfill-table';
|
|
14
|
-
import {
|
|
14
|
+
import {getContextData} from './context-data';
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
17
|
* Registers extensions, polyfills or mock functions for extensions in the polyfills list
|
|
18
18
|
*/
|
|
19
19
|
export function polyfillContext(gl: WebGLRenderingContext): WebGL2RenderingContext {
|
|
20
|
-
const contextState =
|
|
20
|
+
const contextState = getContextData(gl);
|
|
21
21
|
|
|
22
22
|
if (!contextState._polyfilled) {
|
|
23
23
|
polyfillVertexArrayObject(gl);
|
|
@@ -32,7 +32,7 @@ export function polyfillContext(gl: WebGLRenderingContext): WebGL2RenderingConte
|
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
function initializeExtensions(gl: WebGLRenderingContext): void {
|
|
35
|
-
const contextState =
|
|
35
|
+
const contextState = getContextData(gl);
|
|
36
36
|
// `getSupportedExtensions` can return null when context is lost.
|
|
37
37
|
const EXTENSIONS = gl.getSupportedExtensions() || [];
|
|
38
38
|
for (const extensionName of EXTENSIONS) {
|
|
@@ -42,7 +42,7 @@ function initializeExtensions(gl: WebGLRenderingContext): void {
|
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
function installPolyfills(gl: WebGLRenderingContext, polyfills): void {
|
|
45
|
-
const contextState =
|
|
45
|
+
const contextState = getContextData(gl);
|
|
46
46
|
for (const extension of Object.getOwnPropertyNames(polyfills)) {
|
|
47
47
|
if (extension !== 'overrides') {
|
|
48
48
|
polyfillExtension(gl, {extension, target: contextState, target2: gl});
|
|
@@ -84,7 +84,7 @@ function polyfillExtension(gl: WebGLRenderingContext, {extension, target, target
|
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
/** Install simple overrides (mostly get* functions) */
|
|
87
|
-
function installOverrides(gl, {target, target2}) {
|
|
87
|
+
function installOverrides(gl: WebGLRenderingContext, {target, target2}) {
|
|
88
88
|
Object.keys(WEBGL2_CONTEXT_OVERRIDES).forEach((key) => {
|
|
89
89
|
if (typeof WEBGL2_CONTEXT_OVERRIDES[key] === 'function') {
|
|
90
90
|
// install an override, if no implementation was detected
|
|
@@ -3,7 +3,7 @@ import GL from '@luma.gl/constants';
|
|
|
3
3
|
import {isWebGL2} from '../context/webgl-checks';
|
|
4
4
|
|
|
5
5
|
import {getParameterPolyfill} from './get-parameter-polyfill';
|
|
6
|
-
import {
|
|
6
|
+
import {getContextData} from './context-data';
|
|
7
7
|
|
|
8
8
|
const OES_vertex_array_object = 'OES_vertex_array_object';
|
|
9
9
|
const ANGLE_instanced_arrays = 'ANGLE_instanced_arrays';
|
|
@@ -14,14 +14,14 @@ const EXT_texture_filter_anisotropic = 'EXT_texture_filter_anisotropic';
|
|
|
14
14
|
const ERR_VAO_NOT_SUPPORTED = 'VertexArray requires WebGL2 or OES_vertex_array_object extension';
|
|
15
15
|
|
|
16
16
|
// Return object with webgl2 flag and an extension
|
|
17
|
-
function getExtensionData(gl, extension) {
|
|
17
|
+
function getExtensionData(gl: WebGLRenderingContext, extension: string) {
|
|
18
18
|
return {
|
|
19
19
|
webgl2: isWebGL2(gl),
|
|
20
20
|
ext: gl.getExtension(extension)
|
|
21
21
|
};
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
// function mapExtensionConstant(gl, constant) {
|
|
24
|
+
// function mapExtensionConstant(gl: WebGLRenderingContext, constant) {
|
|
25
25
|
// switch (constant) {
|
|
26
26
|
// case ext.FRAGMENT_SHADER_DERIVATIVE_HINT_OES: return GL.FRAGMENT_SHADER_DERIVATIVE_HINT;
|
|
27
27
|
// }
|
|
@@ -46,7 +46,7 @@ export const WEBGL2_CONTEXT_POLYFILLS = {
|
|
|
46
46
|
// VERTEX_ATTRIB_ARRAY_DIVISOR: 'VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE'
|
|
47
47
|
// }
|
|
48
48
|
},
|
|
49
|
-
vertexAttribDivisor(location, divisor) {
|
|
49
|
+
vertexAttribDivisor(location: number, divisor: number) {
|
|
50
50
|
// Accept divisor 0 even if instancing is not supported (0 = no instancing)
|
|
51
51
|
assert(divisor === 0, 'WebGL instanced rendering not supported');
|
|
52
52
|
},
|
|
@@ -74,11 +74,11 @@ export const WEBGL2_CONTEXT_POLYFILLS = {
|
|
|
74
74
|
assert(false);
|
|
75
75
|
},
|
|
76
76
|
endQuery: () => {},
|
|
77
|
-
getQuery(handle, pname) {
|
|
77
|
+
getQuery(handle, pname: string) {
|
|
78
78
|
return this.getQueryObject(handle, pname);
|
|
79
79
|
},
|
|
80
80
|
// The WebGL1 extension uses getQueryObject rather then getQueryParameter
|
|
81
|
-
getQueryParameter(handle, pname) {
|
|
81
|
+
getQueryParameter(handle, pname: string) {
|
|
82
82
|
return this.getQueryObject(handle, pname);
|
|
83
83
|
},
|
|
84
84
|
getQueryObject: (handle: unknown, pname: unknown) => {}
|
|
@@ -87,7 +87,7 @@ export const WEBGL2_CONTEXT_POLYFILLS = {
|
|
|
87
87
|
|
|
88
88
|
export const WEBGL2_CONTEXT_OVERRIDES = {
|
|
89
89
|
// Ensure readBuffer is a no-op
|
|
90
|
-
readBuffer: (gl, originalFunc, attachment) => {
|
|
90
|
+
readBuffer: (gl: WebGLRenderingContext, originalFunc, attachment) => {
|
|
91
91
|
if (isWebGL2(gl)) {
|
|
92
92
|
originalFunc(attachment);
|
|
93
93
|
} else {
|
|
@@ -95,7 +95,7 @@ export const WEBGL2_CONTEXT_OVERRIDES = {
|
|
|
95
95
|
}
|
|
96
96
|
},
|
|
97
97
|
// Override for getVertexAttrib that returns sane values for non-WebGL1 constants
|
|
98
|
-
getVertexAttrib: (gl, originalFunc, location, pname) => {
|
|
98
|
+
getVertexAttrib: (gl: WebGLRenderingContext, originalFunc, location, pname) => {
|
|
99
99
|
// const gl = this; // eslint-disable-line
|
|
100
100
|
const {webgl2, ext} = getExtensionData(gl, ANGLE_instanced_arrays);
|
|
101
101
|
|
|
@@ -115,7 +115,7 @@ export const WEBGL2_CONTEXT_OVERRIDES = {
|
|
|
115
115
|
return result !== undefined ? result : originalFunc(location, pname);
|
|
116
116
|
},
|
|
117
117
|
// Handle transform feedback and uniform block queries in WebGL1
|
|
118
|
-
getProgramParameter: (gl, originalFunc, program, pname) => {
|
|
118
|
+
getProgramParameter: (gl: WebGLRenderingContext, originalFunc, program, pname) => {
|
|
119
119
|
if (!isWebGL2(gl)) {
|
|
120
120
|
switch (pname) {
|
|
121
121
|
case GL.TRANSFORM_FEEDBACK_BUFFER_MODE:
|
|
@@ -129,7 +129,7 @@ export const WEBGL2_CONTEXT_OVERRIDES = {
|
|
|
129
129
|
}
|
|
130
130
|
return originalFunc(program, pname);
|
|
131
131
|
},
|
|
132
|
-
getInternalformatParameter: (gl, originalFunc, target, format, pname) => {
|
|
132
|
+
getInternalformatParameter: (gl: WebGLRenderingContext, originalFunc, target, format, pname) => {
|
|
133
133
|
if (!isWebGL2(gl)) {
|
|
134
134
|
switch (pname) {
|
|
135
135
|
case GL.SAMPLES:
|
|
@@ -137,13 +137,14 @@ export const WEBGL2_CONTEXT_OVERRIDES = {
|
|
|
137
137
|
default:
|
|
138
138
|
}
|
|
139
139
|
}
|
|
140
|
-
|
|
140
|
+
const gl2 = gl as WebGL2RenderingContext;
|
|
141
|
+
return gl2.getInternalformatParameter(target, format, pname);
|
|
141
142
|
},
|
|
142
143
|
getTexParameter(gl, originalFunc, target, pname) {
|
|
143
144
|
switch (pname) {
|
|
144
145
|
case GL.TEXTURE_MAX_ANISOTROPY_EXT:
|
|
145
|
-
const
|
|
146
|
-
const {_extensions} =
|
|
146
|
+
const contextData = getContextData(gl);
|
|
147
|
+
const {_extensions} = contextData;
|
|
147
148
|
const ext = _extensions[EXT_texture_filter_anisotropic];
|
|
148
149
|
pname = (ext && ext.TEXTURE_MAX_ANISOTROPY_EXT) || GL.TEXTURE_MAX_ANISOTROPY_EXT;
|
|
149
150
|
break;
|
|
@@ -108,7 +108,6 @@ function getContextState(gl: WebGLRenderingContext): GLState {
|
|
|
108
108
|
assert(copyState !== undefined);
|
|
109
109
|
// @ts-expect-error
|
|
110
110
|
if (!gl.state) {
|
|
111
|
-
const global_ = typeof global !== 'undefined' ? global : window;
|
|
112
111
|
// @ts-ignore
|
|
113
112
|
// const {polyfillContext} = global_;
|
|
114
113
|
// if (polyfillContext) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type {Device} from '@luma.gl/api';
|
|
2
|
-
import {WebGLDevice} from '
|
|
2
|
+
import {default as WebGLDevice} from '../../adapter/webgl-device';
|
|
3
3
|
import {GLParameters, setParameters} from '../parameters/unified-parameter-api';
|
|
4
4
|
import {pushContextState, popContextState} from './track-context-state';
|
|
5
5
|
|
|
@@ -48,6 +48,7 @@ import {pushContextState, popContextState} from './track-context-state';
|
|
|
48
48
|
|
|
49
49
|
// Returns true if given object is empty, false otherwise.
|
|
50
50
|
function isObjectEmpty(object) {
|
|
51
|
+
// @ts-ignore - dummy key variable
|
|
51
52
|
for (const key in object) {
|
|
52
53
|
return false;
|
|
53
54
|
}
|
package/src/index.ts
CHANGED
|
@@ -51,9 +51,6 @@ export {
|
|
|
51
51
|
assertWebGL2Context
|
|
52
52
|
} from './context/context/webgl-checks';
|
|
53
53
|
|
|
54
|
-
// Device ratio
|
|
55
|
-
export {cssToDeviceRatio, cssToDevicePixels} from './context/context/device-pixels';
|
|
56
|
-
|
|
57
54
|
// Unified parameter API
|
|
58
55
|
|
|
59
56
|
export {setDeviceParameters, withDeviceParameters} from './adapter/converters/device-parameters';
|