@luma.gl/webgl 9.2.5 → 9.3.0-alpha.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapter/converters/device-parameters.d.ts +1 -1
- package/dist/adapter/converters/device-parameters.d.ts.map +1 -1
- package/dist/adapter/converters/device-parameters.js +4 -1
- package/dist/adapter/converters/device-parameters.js.map +1 -1
- package/dist/adapter/converters/sampler-parameters.d.ts +1 -1
- package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
- package/dist/adapter/converters/sampler-parameters.js +1 -1
- package/dist/adapter/converters/sampler-parameters.js.map +1 -1
- package/dist/adapter/converters/shader-formats.d.ts +1 -64
- package/dist/adapter/converters/shader-formats.d.ts.map +1 -1
- package/dist/adapter/converters/shader-formats.js +1 -64
- package/dist/adapter/converters/shader-formats.js.map +1 -1
- package/dist/adapter/converters/webgl-shadertypes.d.ts +1 -3
- package/dist/adapter/converters/webgl-shadertypes.d.ts.map +1 -1
- package/dist/adapter/converters/webgl-shadertypes.js +1 -6
- package/dist/adapter/converters/webgl-shadertypes.js.map +1 -1
- package/dist/adapter/converters/webgl-texture-table.d.ts +8 -4
- package/dist/adapter/converters/webgl-texture-table.d.ts.map +1 -1
- package/dist/adapter/converters/webgl-texture-table.js +122 -58
- package/dist/adapter/converters/webgl-texture-table.js.map +1 -1
- package/dist/adapter/converters/webgl-vertex-formats.d.ts +1 -1
- package/dist/adapter/converters/webgl-vertex-formats.d.ts.map +1 -1
- package/dist/adapter/converters/webgl-vertex-formats.js +1 -1
- package/dist/adapter/converters/webgl-vertex-formats.js.map +1 -1
- package/dist/adapter/device-helpers/webgl-device-features.d.ts +1 -1
- package/dist/adapter/device-helpers/webgl-device-features.d.ts.map +1 -1
- package/dist/adapter/device-helpers/webgl-device-features.js +1 -2
- package/dist/adapter/device-helpers/webgl-device-features.js.map +1 -1
- package/dist/adapter/device-helpers/webgl-device-info.d.ts +1 -1
- package/dist/adapter/device-helpers/webgl-device-info.d.ts.map +1 -1
- package/dist/adapter/device-helpers/webgl-device-info.js +6 -1
- package/dist/adapter/device-helpers/webgl-device-info.js.map +1 -1
- package/dist/adapter/device-helpers/webgl-device-limits.d.ts +1 -1
- package/dist/adapter/device-helpers/webgl-device-limits.d.ts.map +1 -1
- package/dist/adapter/device-helpers/webgl-device-limits.js +1 -1
- package/dist/adapter/device-helpers/webgl-device-limits.js.map +1 -1
- package/dist/adapter/helpers/format-utils.d.ts +1 -1
- package/dist/adapter/helpers/format-utils.d.ts.map +1 -1
- package/dist/adapter/helpers/format-utils.js +1 -1
- package/dist/adapter/helpers/format-utils.js.map +1 -1
- package/dist/adapter/helpers/get-shader-layout-from-glsl.js +36 -22
- package/dist/adapter/helpers/get-shader-layout-from-glsl.js.map +1 -1
- package/dist/adapter/helpers/parse-shader-compiler-log.d.ts +1 -1
- package/dist/adapter/helpers/parse-shader-compiler-log.d.ts.map +1 -1
- package/dist/adapter/helpers/parse-shader-compiler-log.js +20 -0
- package/dist/adapter/helpers/parse-shader-compiler-log.js.map +1 -1
- 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 +1 -1
- package/dist/adapter/helpers/set-uniform.js.map +1 -1
- package/dist/adapter/helpers/webgl-texture-utils.d.ts +1 -1
- package/dist/adapter/helpers/webgl-texture-utils.d.ts.map +1 -1
- package/dist/adapter/helpers/webgl-texture-utils.js +4 -4
- package/dist/adapter/helpers/webgl-texture-utils.js.map +1 -1
- package/dist/adapter/helpers/webgl-topology-utils.d.ts +1 -1
- package/dist/adapter/helpers/webgl-topology-utils.d.ts.map +1 -1
- package/dist/adapter/helpers/webgl-topology-utils.js +1 -1
- package/dist/adapter/helpers/webgl-topology-utils.js.map +1 -1
- package/dist/adapter/resources/webgl-buffer.d.ts +1 -1
- package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-buffer.js +21 -5
- package/dist/adapter/resources/webgl-buffer.js.map +1 -1
- package/dist/adapter/resources/webgl-command-buffer.d.ts +3 -4
- package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-command-buffer.js +29 -39
- package/dist/adapter/resources/webgl-command-buffer.js.map +1 -1
- package/dist/adapter/resources/webgl-command-encoder.d.ts +6 -5
- package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-command-encoder.js +23 -8
- package/dist/adapter/resources/webgl-command-encoder.js.map +1 -1
- package/dist/adapter/resources/webgl-fence.d.ts +14 -0
- package/dist/adapter/resources/webgl-fence.d.ts.map +1 -0
- package/dist/adapter/resources/webgl-fence.js +49 -0
- package/dist/adapter/resources/webgl-fence.js.map +1 -0
- package/dist/adapter/resources/webgl-framebuffer.d.ts +3 -1
- package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-framebuffer.js +10 -1
- package/dist/adapter/resources/webgl-framebuffer.js.map +1 -1
- package/dist/adapter/resources/webgl-query-set.d.ts +37 -31
- package/dist/adapter/resources/webgl-query-set.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-query-set.js +247 -96
- package/dist/adapter/resources/webgl-query-set.js.map +1 -1
- package/dist/adapter/resources/webgl-render-pass.d.ts +1 -1
- package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-render-pass.js +28 -11
- package/dist/adapter/resources/webgl-render-pass.js.map +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.d.ts +17 -21
- package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.js +70 -169
- package/dist/adapter/resources/webgl-render-pipeline.js.map +1 -1
- package/dist/adapter/resources/webgl-sampler.d.ts +1 -1
- package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-sampler.js +1 -1
- package/dist/adapter/resources/webgl-sampler.js.map +1 -1
- package/dist/adapter/resources/webgl-shader.d.ts +1 -1
- package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-shader.js +15 -8
- package/dist/adapter/resources/webgl-shader.js.map +1 -1
- package/dist/adapter/resources/webgl-shared-render-pipeline.d.ts +24 -0
- package/dist/adapter/resources/webgl-shared-render-pipeline.d.ts.map +1 -0
- package/dist/adapter/resources/webgl-shared-render-pipeline.js +155 -0
- package/dist/adapter/resources/webgl-shared-render-pipeline.js.map +1 -0
- package/dist/adapter/resources/webgl-texture.d.ts +42 -4
- package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-texture.js +286 -62
- package/dist/adapter/resources/webgl-texture.js.map +1 -1
- package/dist/adapter/resources/webgl-transform-feedback.js +6 -6
- package/dist/adapter/resources/webgl-transform-feedback.js.map +1 -1
- package/dist/adapter/resources/webgl-vertex-array.d.ts +2 -2
- package/dist/adapter/resources/webgl-vertex-array.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-vertex-array.js +1 -1
- package/dist/adapter/resources/webgl-vertex-array.js.map +1 -1
- package/dist/adapter/webgl-adapter.d.ts.map +1 -1
- package/dist/adapter/webgl-adapter.js +22 -23
- package/dist/adapter/webgl-adapter.js.map +1 -1
- package/dist/adapter/webgl-canvas-context.d.ts +2 -2
- package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
- package/dist/adapter/webgl-canvas-context.js +16 -6
- package/dist/adapter/webgl-canvas-context.js.map +1 -1
- package/dist/adapter/webgl-device.d.ts +10 -5
- package/dist/adapter/webgl-device.d.ts.map +1 -1
- package/dist/adapter/webgl-device.js +75 -28
- package/dist/adapter/webgl-device.js.map +1 -1
- package/dist/adapter/webgl-presentation-context.d.ts +21 -0
- package/dist/adapter/webgl-presentation-context.d.ts.map +1 -0
- package/dist/adapter/webgl-presentation-context.js +64 -0
- package/dist/adapter/webgl-presentation-context.js.map +1 -0
- package/dist/constants/index.d.ts +3 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js +5 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/constants/webgl-constants.d.ts +822 -0
- package/dist/constants/webgl-constants.d.ts.map +1 -0
- package/dist/constants/webgl-constants.js +928 -0
- package/dist/constants/webgl-constants.js.map +1 -0
- package/dist/constants/webgl-types.d.ts +480 -0
- package/dist/constants/webgl-types.d.ts.map +1 -0
- package/dist/constants/webgl-types.js +6 -0
- package/dist/constants/webgl-types.js.map +1 -0
- package/dist/context/debug/spector.d.ts.map +1 -1
- package/dist/context/debug/spector.js +4 -4
- package/dist/context/debug/spector.js.map +1 -1
- package/dist/context/debug/webgl-developer-tools.js +7 -7
- package/dist/context/debug/webgl-developer-tools.js.map +1 -1
- package/dist/context/helpers/create-browser-context.d.ts.map +1 -1
- package/dist/context/helpers/create-browser-context.js +46 -36
- package/dist/context/helpers/create-browser-context.js.map +1 -1
- package/dist/context/helpers/webgl-context-data.d.ts +5 -1
- package/dist/context/helpers/webgl-context-data.d.ts.map +1 -1
- package/dist/context/helpers/webgl-context-data.js +9 -10
- package/dist/context/helpers/webgl-context-data.js.map +1 -1
- package/dist/context/helpers/webgl-extensions.d.ts +1 -1
- package/dist/context/helpers/webgl-extensions.d.ts.map +1 -1
- package/dist/context/parameters/unified-parameter-api.d.ts +2 -2
- package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
- package/dist/context/parameters/unified-parameter-api.js +2 -2
- package/dist/context/parameters/unified-parameter-api.js.map +1 -1
- package/dist/context/parameters/webgl-parameter-tables.d.ts +1 -1
- package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
- package/dist/context/parameters/webgl-parameter-tables.js +1 -1
- package/dist/context/parameters/webgl-parameter-tables.js.map +1 -1
- package/dist/context/polyfills/polyfill-webgl1-extensions.js +1 -1
- package/dist/context/polyfills/polyfill-webgl1-extensions.js.map +1 -1
- package/dist/context/state-tracker/webgl-state-tracker.js +2 -2
- package/dist/context/state-tracker/webgl-state-tracker.js.map +1 -1
- package/dist/dist.dev.js +1897 -999
- package/dist/dist.min.js +2 -2
- package/dist/index.cjs +3 -5255
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/utils/fill-array.js +1 -1
- package/dist/utils/fill-array.js.map +1 -1
- package/dist/webgl-constants.d.ts +2 -0
- package/dist/webgl-constants.d.ts.map +1 -0
- package/dist/webgl-constants.js +5 -0
- package/dist/webgl-constants.js.map +1 -0
- package/dist/webgl-types.d.ts +2 -0
- package/dist/webgl-types.d.ts.map +1 -0
- package/dist/{types.js → webgl-types.js} +1 -1
- package/dist/webgl-types.js.map +1 -0
- package/package.json +19 -5
- package/src/adapter/converters/device-parameters.ts +6 -2
- package/src/adapter/converters/sampler-parameters.ts +1 -1
- package/src/adapter/converters/shader-formats.ts +1 -66
- package/src/adapter/converters/webgl-shadertypes.ts +1 -9
- package/src/adapter/converters/webgl-texture-table.ts +160 -68
- package/src/adapter/converters/webgl-vertex-formats.ts +1 -1
- package/src/adapter/device-helpers/webgl-device-features.ts +2 -3
- package/src/adapter/device-helpers/webgl-device-info.ts +7 -1
- package/src/adapter/device-helpers/webgl-device-limits.ts +1 -1
- package/src/adapter/helpers/format-utils.ts +1 -1
- package/src/adapter/helpers/get-shader-layout-from-glsl.ts +44 -24
- package/src/adapter/helpers/parse-shader-compiler-log.ts +23 -1
- package/src/adapter/helpers/set-uniform.ts +1 -1
- package/src/adapter/helpers/webgl-texture-utils.ts +4 -4
- package/src/adapter/helpers/webgl-topology-utils.ts +1 -1
- package/src/adapter/resources/webgl-buffer.ts +18 -5
- package/src/adapter/resources/webgl-command-buffer.ts +44 -48
- package/src/adapter/resources/webgl-command-encoder.ts +28 -11
- package/src/adapter/resources/webgl-fence.ts +55 -0
- package/src/adapter/resources/webgl-framebuffer.ts +12 -1
- package/src/adapter/resources/webgl-query-set.ts +295 -101
- package/src/adapter/resources/webgl-render-pass.ts +30 -13
- package/src/adapter/resources/webgl-render-pipeline.ts +102 -198
- package/src/adapter/resources/webgl-sampler.ts +1 -1
- package/src/adapter/resources/webgl-shader.ts +15 -8
- package/src/adapter/resources/webgl-shared-render-pipeline.ts +211 -0
- package/src/adapter/resources/webgl-texture.ts +455 -81
- package/src/adapter/resources/webgl-transform-feedback.ts +6 -6
- package/src/adapter/resources/webgl-vertex-array.ts +1 -1
- package/src/adapter/webgl-adapter.ts +26 -24
- package/src/adapter/webgl-canvas-context.ts +19 -8
- package/src/adapter/webgl-device.ts +91 -35
- package/src/adapter/webgl-presentation-context.ts +93 -0
- package/src/constants/index.d.ts.map +1 -0
- package/src/constants/index.js.map +1 -0
- package/src/constants/index.ts +31 -0
- package/src/constants/webgl-constants.d.ts.map +1 -0
- package/src/constants/webgl-constants.js.map +1 -0
- package/src/constants/webgl-constants.ts +1051 -0
- package/src/constants/webgl-types.d.ts.map +1 -0
- package/src/constants/webgl-types.js.map +1 -0
- package/src/constants/webgl-types.ts +813 -0
- package/src/context/debug/spector.ts +4 -4
- package/src/context/debug/webgl-developer-tools.ts +16 -7
- package/src/context/helpers/create-browser-context.ts +54 -43
- package/src/context/helpers/webgl-context-data.ts +17 -11
- package/src/context/helpers/webgl-extensions.ts +1 -1
- package/src/context/parameters/unified-parameter-api.ts +3 -3
- package/src/context/parameters/webgl-parameter-tables.ts +1 -1
- package/src/context/polyfills/polyfill-webgl1-extensions.ts +1 -1
- package/src/context/state-tracker/webgl-state-tracker.ts +2 -2
- package/src/index.ts +27 -0
- package/src/utils/fill-array.ts +1 -1
- package/src/webgl-constants.d.ts.map +1 -0
- package/src/webgl-constants.js.map +1 -0
- package/src/webgl-constants.ts +5 -0
- package/src/webgl-types.d.ts.map +1 -0
- package/src/webgl-types.js.map +1 -0
- package/src/webgl-types.ts +29 -0
- package/dist/types.d.ts +0 -11
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- package/src/types.ts +0 -14
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import {log} from '@luma.gl/core';
|
|
6
6
|
import {loadScript} from '../../utils/load-script';
|
|
7
|
+
import {getWebGLContextData} from '../helpers/webgl-context-data';
|
|
7
8
|
|
|
8
9
|
import type {Spector} from './spector-types';
|
|
9
10
|
|
|
@@ -91,11 +92,10 @@ export function initializeSpectorJS(props: SpectorProps): Spector | null {
|
|
|
91
92
|
if (props.gl) {
|
|
92
93
|
// capture startup
|
|
93
94
|
const gl = props.gl;
|
|
94
|
-
|
|
95
|
-
const device =
|
|
95
|
+
const contextData = getWebGLContextData(gl);
|
|
96
|
+
const device = contextData.device;
|
|
96
97
|
spector?.startCapture(props.gl, 500); // 500 commands
|
|
97
|
-
|
|
98
|
-
gl.device = device;
|
|
98
|
+
contextData.device = device;
|
|
99
99
|
|
|
100
100
|
new Promise(resolve => setTimeout(resolve, 2000)).then(_ => {
|
|
101
101
|
log.info('Spector capture stopped after 2 seconds')();
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import {log} from '@luma.gl/core';
|
|
6
6
|
// Rename constant to prevent inlining. We need the full set of constants for generating debug strings.
|
|
7
|
-
import {GL as GLEnum} from '@luma.gl/constants';
|
|
7
|
+
import {GL as GLEnum} from '@luma.gl/webgl/constants';
|
|
8
8
|
import {isBrowser} from '@probe.gl/env';
|
|
9
9
|
import {loadScript} from '../../utils/load-script';
|
|
10
10
|
|
|
@@ -104,6 +104,8 @@ function getDebugContext(
|
|
|
104
104
|
// Store the debug context
|
|
105
105
|
data.realContext = gl;
|
|
106
106
|
data.debugContext = debugContext;
|
|
107
|
+
// Share the context metadata object with the debug context so lookups stay consistent.
|
|
108
|
+
(debugContext as {luma?: unknown}).luma = data;
|
|
107
109
|
debugContext.debug = true;
|
|
108
110
|
|
|
109
111
|
// Return it
|
|
@@ -132,9 +134,13 @@ function onGLError(
|
|
|
132
134
|
const functionArgs = globalThis.WebGLDebugUtils.glFunctionArgsToString(functionName, args);
|
|
133
135
|
const message = `${errorMessage} in gl.${functionName}(${functionArgs})`;
|
|
134
136
|
// TODO - call device.reportError
|
|
135
|
-
log.error(
|
|
137
|
+
log.error(
|
|
138
|
+
'%cWebGL',
|
|
139
|
+
'color: white; background: red; padding: 2px 6px; border-radius: 3px;',
|
|
140
|
+
message
|
|
141
|
+
)();
|
|
136
142
|
debugger; // eslint-disable-line
|
|
137
|
-
|
|
143
|
+
throw new Error(message);
|
|
138
144
|
}
|
|
139
145
|
|
|
140
146
|
// Don't generate function string until it is needed
|
|
@@ -144,11 +150,14 @@ function onValidateGLFunc(
|
|
|
144
150
|
functionArgs: unknown[]
|
|
145
151
|
): void {
|
|
146
152
|
let functionString: string = '';
|
|
147
|
-
if (log.level >= 1) {
|
|
153
|
+
if (props.traceWebGL && log.level >= 1) {
|
|
148
154
|
functionString = getFunctionString(functionName, functionArgs);
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
155
|
+
log.info(
|
|
156
|
+
1,
|
|
157
|
+
'%cWebGL',
|
|
158
|
+
'color: white; background: blue; padding: 2px 6px; border-radius: 3px;',
|
|
159
|
+
functionString
|
|
160
|
+
)();
|
|
152
161
|
}
|
|
153
162
|
|
|
154
163
|
for (const arg of functionArgs) {
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
|
+
import {getWebGLContextData} from './webgl-context-data';
|
|
6
|
+
|
|
5
7
|
/**
|
|
6
8
|
* ContextProps
|
|
7
9
|
* @param onContextLost
|
|
@@ -26,63 +28,72 @@ export function createBrowserContext(
|
|
|
26
28
|
): WebGL2RenderingContext {
|
|
27
29
|
// Try to extract any extra information about why context creation failed
|
|
28
30
|
let errorMessage = '';
|
|
29
|
-
|
|
31
|
+
const onCreateError = (event: Event) => {
|
|
32
|
+
const statusMessage = (event as WebGLContextEvent).statusMessage;
|
|
33
|
+
if (statusMessage) {
|
|
34
|
+
errorMessage ||= statusMessage;
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
canvas.addEventListener('webglcontextcreationerror', onCreateError, false);
|
|
30
38
|
|
|
31
|
-
|
|
32
|
-
// canvas.removeEventListener('webglcontextcreationerror', onCreateError, false);
|
|
33
|
-
// canvas.addEventListener('webglcontextcreationerror', onCreateError, false);
|
|
39
|
+
const allowSoftwareRenderer = webglContextAttributes.failIfMajorPerformanceCaveat !== true;
|
|
34
40
|
|
|
35
41
|
const webglProps: WebGLContextAttributes = {
|
|
36
42
|
preserveDrawingBuffer: true,
|
|
37
|
-
|
|
38
|
-
|
|
43
|
+
...webglContextAttributes,
|
|
44
|
+
// Always start by requesting a high-performance context.
|
|
45
|
+
failIfMajorPerformanceCaveat: true
|
|
39
46
|
};
|
|
40
47
|
|
|
41
48
|
// Create the desired context
|
|
42
49
|
let gl: WebGL2RenderingContext | null = null;
|
|
43
50
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
51
|
+
try {
|
|
52
|
+
// Create a webgl2 context
|
|
53
|
+
gl ||= canvas.getContext('webgl2', webglProps);
|
|
54
|
+
if (!gl && webglProps.failIfMajorPerformanceCaveat) {
|
|
55
|
+
errorMessage ||=
|
|
56
|
+
'Only software GPU is available. Set `failIfMajorPerformanceCaveat: false` to allow.';
|
|
57
|
+
}
|
|
50
58
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
gl.luma.softwareRenderer = true;
|
|
59
|
-
}
|
|
59
|
+
// Creation failed with failIfMajorPerformanceCaveat - Try a Software GPU
|
|
60
|
+
let softwareRenderer = false;
|
|
61
|
+
if (!gl && allowSoftwareRenderer) {
|
|
62
|
+
webglProps.failIfMajorPerformanceCaveat = false;
|
|
63
|
+
gl = canvas.getContext('webgl2', webglProps);
|
|
64
|
+
softwareRenderer = true;
|
|
65
|
+
}
|
|
60
66
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
67
|
+
if (!gl) {
|
|
68
|
+
gl = canvas.getContext('webgl', {}) as WebGL2RenderingContext;
|
|
69
|
+
if (gl) {
|
|
70
|
+
gl = null;
|
|
71
|
+
errorMessage ||= 'Your browser only supports WebGL1';
|
|
72
|
+
}
|
|
66
73
|
}
|
|
67
|
-
}
|
|
68
74
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
75
|
+
if (!gl) {
|
|
76
|
+
errorMessage ||= 'Your browser does not support WebGL';
|
|
77
|
+
throw new Error(`Failed to create WebGL context: ${errorMessage}`);
|
|
78
|
+
}
|
|
73
79
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
false
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
80
|
+
// Initialize luma.gl specific context data
|
|
81
|
+
const luma = getWebGLContextData(gl);
|
|
82
|
+
luma.softwareRenderer = softwareRenderer;
|
|
83
|
+
|
|
84
|
+
// Carefully extract and wrap callbacks to prevent addEventListener from rebinding them.
|
|
85
|
+
const {onContextLost, onContextRestored} = props;
|
|
86
|
+
canvas.addEventListener('webglcontextlost', (event: Event) => onContextLost(event), false);
|
|
87
|
+
canvas.addEventListener(
|
|
88
|
+
'webglcontextrestored',
|
|
89
|
+
(event: Event) => onContextRestored(event),
|
|
90
|
+
false
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
return gl;
|
|
94
|
+
} finally {
|
|
95
|
+
canvas.removeEventListener('webglcontextcreationerror', onCreateError, false);
|
|
96
|
+
}
|
|
86
97
|
}
|
|
87
98
|
|
|
88
99
|
/* TODO - can we call this asynchronously to catch the error events?
|
|
@@ -2,12 +2,17 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
|
+
import type {GLExtensions} from '@luma.gl/webgl/constants';
|
|
6
|
+
|
|
5
7
|
/**
|
|
6
8
|
* Stores luma.gl specific state associated with a context
|
|
7
9
|
*/
|
|
8
10
|
export interface WebGLContextData {
|
|
11
|
+
/** This type is used by lower level code that is not aware of the Device type */
|
|
12
|
+
device?: unknown;
|
|
9
13
|
_polyfilled: boolean;
|
|
10
|
-
|
|
14
|
+
extensions: GLExtensions;
|
|
15
|
+
softwareRenderer?: boolean;
|
|
11
16
|
}
|
|
12
17
|
|
|
13
18
|
/**
|
|
@@ -16,16 +21,17 @@ export interface WebGLContextData {
|
|
|
16
21
|
*/
|
|
17
22
|
export function getWebGLContextData(gl: WebGL2RenderingContext): WebGLContextData {
|
|
18
23
|
// @ts-expect-error
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
24
|
+
const contextData = (gl.luma as WebGLContextData | null) || {
|
|
25
|
+
_polyfilled: false,
|
|
26
|
+
extensions: {},
|
|
27
|
+
softwareRenderer: false
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
contextData._polyfilled ??= false;
|
|
31
|
+
contextData.extensions ||= {};
|
|
28
32
|
|
|
29
33
|
// @ts-expect-error
|
|
30
|
-
|
|
34
|
+
gl.luma = contextData;
|
|
35
|
+
|
|
36
|
+
return contextData;
|
|
31
37
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
|
-
import {GLExtensions} from '@luma.gl/constants';
|
|
5
|
+
import {GLExtensions} from '@luma.gl/webgl/constants';
|
|
6
6
|
|
|
7
7
|
/** Ensure extensions are only requested once */
|
|
8
8
|
export function getWebGLExtension(
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
// Provides a unified API for getting and setting any WebGL parameter
|
|
6
6
|
// Also knows default values of all parameters, enabling fast cache initialization
|
|
7
7
|
// Provides base functionality for the state caching.
|
|
8
|
-
import type {GLParameters} from '@luma.gl/constants';
|
|
8
|
+
import type {GLParameters} from '@luma.gl/webgl/constants';
|
|
9
9
|
import {
|
|
10
10
|
GL_PARAMETER_DEFAULTS,
|
|
11
11
|
GL_PARAMETER_SETTERS,
|
|
@@ -18,7 +18,7 @@ export type {GLParameters};
|
|
|
18
18
|
/**
|
|
19
19
|
* Sets any GL parameter regardless of function (gl.blendMode, ...)
|
|
20
20
|
*
|
|
21
|
-
* @note requires a `cache` object to be set on the context (
|
|
21
|
+
* @note requires a `cache` object to be set on the context (lumaState.cache)
|
|
22
22
|
* This object is used to fill in any missing values for composite setter functions
|
|
23
23
|
*/
|
|
24
24
|
export function setGLParameters(gl: WebGL2RenderingContext, parameters: GLParameters): void {
|
|
@@ -58,7 +58,7 @@ export function setGLParameters(gl: WebGL2RenderingContext, parameters: GLParame
|
|
|
58
58
|
// But it is too inconvenient to always require a cache parameter here.
|
|
59
59
|
// This is the ONLY external dependency in this module/
|
|
60
60
|
// @ts-expect-error
|
|
61
|
-
const cache = gl.
|
|
61
|
+
const cache = gl.lumaState?.cache;
|
|
62
62
|
if (cache) {
|
|
63
63
|
for (const key in compositeSetters) {
|
|
64
64
|
// TODO - avoid calling composite setters if values have not changed.
|
|
@@ -21,7 +21,7 @@ import {
|
|
|
21
21
|
export class WebGLStateTracker {
|
|
22
22
|
static get(gl: WebGL2RenderingContext): WebGLStateTracker {
|
|
23
23
|
// @ts-expect-error
|
|
24
|
-
return gl.
|
|
24
|
+
return gl.lumaState as WebGLStateTracker;
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
gl: WebGL2RenderingContext;
|
|
@@ -78,7 +78,7 @@ export class WebGLStateTracker {
|
|
|
78
78
|
this.initialized = true;
|
|
79
79
|
|
|
80
80
|
// @ts-expect-error
|
|
81
|
-
this.gl.
|
|
81
|
+
this.gl.lumaState = this;
|
|
82
82
|
|
|
83
83
|
installProgramSpy(gl);
|
|
84
84
|
|
package/src/index.ts
CHANGED
|
@@ -10,6 +10,32 @@
|
|
|
10
10
|
|
|
11
11
|
// Types
|
|
12
12
|
export type {WebGLDeviceLimits} from './adapter/device-helpers/webgl-device-limits';
|
|
13
|
+
export {GL} from './constants/webgl-constants';
|
|
14
|
+
export type {
|
|
15
|
+
GLTextureTarget,
|
|
16
|
+
GLTextureCubeMapTarget,
|
|
17
|
+
GLTexelDataFormat,
|
|
18
|
+
GLPrimitiveTopology,
|
|
19
|
+
GLPrimitive,
|
|
20
|
+
GLDataType,
|
|
21
|
+
GLPixelType,
|
|
22
|
+
GLUniformType,
|
|
23
|
+
GLSamplerType,
|
|
24
|
+
GLFunction,
|
|
25
|
+
GLBlendEquation,
|
|
26
|
+
GLBlendFunction,
|
|
27
|
+
GLStencilOp,
|
|
28
|
+
GLSamplerParameters,
|
|
29
|
+
GLValueParameters,
|
|
30
|
+
GLPackParameters,
|
|
31
|
+
GLUnpackParameters,
|
|
32
|
+
GLFunctionParameters,
|
|
33
|
+
GLParameters,
|
|
34
|
+
GLLimits,
|
|
35
|
+
GLExtensions,
|
|
36
|
+
GLPolygonMode,
|
|
37
|
+
GLProvokingVertex
|
|
38
|
+
} from './constants/webgl-types';
|
|
13
39
|
|
|
14
40
|
// WebGL adapter classes
|
|
15
41
|
export {webgl2Adapter} from './adapter/webgl-adapter';
|
|
@@ -26,6 +52,7 @@ export {WEBGLTexture} from './adapter/resources/webgl-texture';
|
|
|
26
52
|
export {WEBGLShader} from './adapter/resources/webgl-shader';
|
|
27
53
|
export {WEBGLSampler} from './adapter/resources/webgl-sampler';
|
|
28
54
|
export {WEBGLFramebuffer} from './adapter/resources/webgl-framebuffer';
|
|
55
|
+
export {WEBGLFence} from './adapter/resources/webgl-fence';
|
|
29
56
|
|
|
30
57
|
export {WEBGLRenderPipeline} from './adapter/resources/webgl-render-pipeline';
|
|
31
58
|
// export {WEBGLComputePipeline} from './adapter/resources/webgl-compute-pipeline';
|
package/src/utils/fill-array.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webgl-constants.d.ts","sourceRoot":"","sources":["webgl-constants.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,EAAE,EAAC,uCAAoC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webgl-constants.js","sourceRoot":"","sources":["webgl-constants.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC,OAAO,EAAC,EAAE,EAAC,uCAAoC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webgl-types.d.ts","sourceRoot":"","sources":["webgl-types.ts"],"names":[],"mappings":"AAIA,YAAY,EACV,eAAe,EACf,sBAAsB,EACtB,iBAAiB,EACjB,mBAAmB,EACnB,WAAW,EACX,UAAU,EACV,WAAW,EACX,aAAa,EACb,aAAa,EACb,UAAU,EACV,eAAe,EACf,eAAe,EACf,WAAW,EACX,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,iBAAiB,EAClB,mCAAgC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webgl-types.js","sourceRoot":"","sources":["webgl-types.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
export type {
|
|
6
|
+
GLTextureTarget,
|
|
7
|
+
GLTextureCubeMapTarget,
|
|
8
|
+
GLTexelDataFormat,
|
|
9
|
+
GLPrimitiveTopology,
|
|
10
|
+
GLPrimitive,
|
|
11
|
+
GLDataType,
|
|
12
|
+
GLPixelType,
|
|
13
|
+
GLUniformType,
|
|
14
|
+
GLSamplerType,
|
|
15
|
+
GLFunction,
|
|
16
|
+
GLBlendEquation,
|
|
17
|
+
GLBlendFunction,
|
|
18
|
+
GLStencilOp,
|
|
19
|
+
GLSamplerParameters,
|
|
20
|
+
GLValueParameters,
|
|
21
|
+
GLPackParameters,
|
|
22
|
+
GLUnpackParameters,
|
|
23
|
+
GLFunctionParameters,
|
|
24
|
+
GLParameters,
|
|
25
|
+
GLLimits,
|
|
26
|
+
GLExtensions,
|
|
27
|
+
GLPolygonMode,
|
|
28
|
+
GLProvokingVertex
|
|
29
|
+
} from './constants/webgl-types';
|
package/dist/types.d.ts
DELETED
package/dist/types.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC"}
|
package/dist/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC"}
|
package/src/types.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
// luma.gl
|
|
2
|
-
// SPDX-License-Identifier: MIT
|
|
3
|
-
// Copyright (c) vis.gl contributors
|
|
4
|
-
|
|
5
|
-
export type AccessorObject = {
|
|
6
|
-
size?: number;
|
|
7
|
-
index?: number;
|
|
8
|
-
type?: number;
|
|
9
|
-
divisor?: number;
|
|
10
|
-
offset?: number;
|
|
11
|
-
stride?: number;
|
|
12
|
-
normalized?: boolean;
|
|
13
|
-
integer?: boolean;
|
|
14
|
-
};
|