@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.
Files changed (247) hide show
  1. package/dist/adapter/converters/device-parameters.d.ts +1 -1
  2. package/dist/adapter/converters/device-parameters.d.ts.map +1 -1
  3. package/dist/adapter/converters/device-parameters.js +4 -1
  4. package/dist/adapter/converters/device-parameters.js.map +1 -1
  5. package/dist/adapter/converters/sampler-parameters.d.ts +1 -1
  6. package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
  7. package/dist/adapter/converters/sampler-parameters.js +1 -1
  8. package/dist/adapter/converters/sampler-parameters.js.map +1 -1
  9. package/dist/adapter/converters/shader-formats.d.ts +1 -64
  10. package/dist/adapter/converters/shader-formats.d.ts.map +1 -1
  11. package/dist/adapter/converters/shader-formats.js +1 -64
  12. package/dist/adapter/converters/shader-formats.js.map +1 -1
  13. package/dist/adapter/converters/webgl-shadertypes.d.ts +1 -3
  14. package/dist/adapter/converters/webgl-shadertypes.d.ts.map +1 -1
  15. package/dist/adapter/converters/webgl-shadertypes.js +1 -6
  16. package/dist/adapter/converters/webgl-shadertypes.js.map +1 -1
  17. package/dist/adapter/converters/webgl-texture-table.d.ts +8 -4
  18. package/dist/adapter/converters/webgl-texture-table.d.ts.map +1 -1
  19. package/dist/adapter/converters/webgl-texture-table.js +122 -58
  20. package/dist/adapter/converters/webgl-texture-table.js.map +1 -1
  21. package/dist/adapter/converters/webgl-vertex-formats.d.ts +1 -1
  22. package/dist/adapter/converters/webgl-vertex-formats.d.ts.map +1 -1
  23. package/dist/adapter/converters/webgl-vertex-formats.js +1 -1
  24. package/dist/adapter/converters/webgl-vertex-formats.js.map +1 -1
  25. package/dist/adapter/device-helpers/webgl-device-features.d.ts +1 -1
  26. package/dist/adapter/device-helpers/webgl-device-features.d.ts.map +1 -1
  27. package/dist/adapter/device-helpers/webgl-device-features.js +1 -2
  28. package/dist/adapter/device-helpers/webgl-device-features.js.map +1 -1
  29. package/dist/adapter/device-helpers/webgl-device-info.d.ts +1 -1
  30. package/dist/adapter/device-helpers/webgl-device-info.d.ts.map +1 -1
  31. package/dist/adapter/device-helpers/webgl-device-info.js +6 -1
  32. package/dist/adapter/device-helpers/webgl-device-info.js.map +1 -1
  33. package/dist/adapter/device-helpers/webgl-device-limits.d.ts +1 -1
  34. package/dist/adapter/device-helpers/webgl-device-limits.d.ts.map +1 -1
  35. package/dist/adapter/device-helpers/webgl-device-limits.js +1 -1
  36. package/dist/adapter/device-helpers/webgl-device-limits.js.map +1 -1
  37. package/dist/adapter/helpers/format-utils.d.ts +1 -1
  38. package/dist/adapter/helpers/format-utils.d.ts.map +1 -1
  39. package/dist/adapter/helpers/format-utils.js +1 -1
  40. package/dist/adapter/helpers/format-utils.js.map +1 -1
  41. package/dist/adapter/helpers/get-shader-layout-from-glsl.js +36 -22
  42. package/dist/adapter/helpers/get-shader-layout-from-glsl.js.map +1 -1
  43. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts +1 -1
  44. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts.map +1 -1
  45. package/dist/adapter/helpers/parse-shader-compiler-log.js +20 -0
  46. package/dist/adapter/helpers/parse-shader-compiler-log.js.map +1 -1
  47. package/dist/adapter/helpers/set-uniform.d.ts +1 -1
  48. package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
  49. package/dist/adapter/helpers/set-uniform.js +1 -1
  50. package/dist/adapter/helpers/set-uniform.js.map +1 -1
  51. package/dist/adapter/helpers/webgl-texture-utils.d.ts +1 -1
  52. package/dist/adapter/helpers/webgl-texture-utils.d.ts.map +1 -1
  53. package/dist/adapter/helpers/webgl-texture-utils.js +4 -4
  54. package/dist/adapter/helpers/webgl-texture-utils.js.map +1 -1
  55. package/dist/adapter/helpers/webgl-topology-utils.d.ts +1 -1
  56. package/dist/adapter/helpers/webgl-topology-utils.d.ts.map +1 -1
  57. package/dist/adapter/helpers/webgl-topology-utils.js +1 -1
  58. package/dist/adapter/helpers/webgl-topology-utils.js.map +1 -1
  59. package/dist/adapter/resources/webgl-buffer.d.ts +1 -1
  60. package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
  61. package/dist/adapter/resources/webgl-buffer.js +21 -5
  62. package/dist/adapter/resources/webgl-buffer.js.map +1 -1
  63. package/dist/adapter/resources/webgl-command-buffer.d.ts +3 -4
  64. package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
  65. package/dist/adapter/resources/webgl-command-buffer.js +29 -39
  66. package/dist/adapter/resources/webgl-command-buffer.js.map +1 -1
  67. package/dist/adapter/resources/webgl-command-encoder.d.ts +6 -5
  68. package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -1
  69. package/dist/adapter/resources/webgl-command-encoder.js +23 -8
  70. package/dist/adapter/resources/webgl-command-encoder.js.map +1 -1
  71. package/dist/adapter/resources/webgl-fence.d.ts +14 -0
  72. package/dist/adapter/resources/webgl-fence.d.ts.map +1 -0
  73. package/dist/adapter/resources/webgl-fence.js +49 -0
  74. package/dist/adapter/resources/webgl-fence.js.map +1 -0
  75. package/dist/adapter/resources/webgl-framebuffer.d.ts +3 -1
  76. package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
  77. package/dist/adapter/resources/webgl-framebuffer.js +10 -1
  78. package/dist/adapter/resources/webgl-framebuffer.js.map +1 -1
  79. package/dist/adapter/resources/webgl-query-set.d.ts +37 -31
  80. package/dist/adapter/resources/webgl-query-set.d.ts.map +1 -1
  81. package/dist/adapter/resources/webgl-query-set.js +247 -96
  82. package/dist/adapter/resources/webgl-query-set.js.map +1 -1
  83. package/dist/adapter/resources/webgl-render-pass.d.ts +1 -1
  84. package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
  85. package/dist/adapter/resources/webgl-render-pass.js +28 -11
  86. package/dist/adapter/resources/webgl-render-pass.js.map +1 -1
  87. package/dist/adapter/resources/webgl-render-pipeline.d.ts +17 -21
  88. package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
  89. package/dist/adapter/resources/webgl-render-pipeline.js +70 -169
  90. package/dist/adapter/resources/webgl-render-pipeline.js.map +1 -1
  91. package/dist/adapter/resources/webgl-sampler.d.ts +1 -1
  92. package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
  93. package/dist/adapter/resources/webgl-sampler.js +1 -1
  94. package/dist/adapter/resources/webgl-sampler.js.map +1 -1
  95. package/dist/adapter/resources/webgl-shader.d.ts +1 -1
  96. package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
  97. package/dist/adapter/resources/webgl-shader.js +15 -8
  98. package/dist/adapter/resources/webgl-shader.js.map +1 -1
  99. package/dist/adapter/resources/webgl-shared-render-pipeline.d.ts +24 -0
  100. package/dist/adapter/resources/webgl-shared-render-pipeline.d.ts.map +1 -0
  101. package/dist/adapter/resources/webgl-shared-render-pipeline.js +155 -0
  102. package/dist/adapter/resources/webgl-shared-render-pipeline.js.map +1 -0
  103. package/dist/adapter/resources/webgl-texture.d.ts +42 -4
  104. package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
  105. package/dist/adapter/resources/webgl-texture.js +286 -62
  106. package/dist/adapter/resources/webgl-texture.js.map +1 -1
  107. package/dist/adapter/resources/webgl-transform-feedback.js +6 -6
  108. package/dist/adapter/resources/webgl-transform-feedback.js.map +1 -1
  109. package/dist/adapter/resources/webgl-vertex-array.d.ts +2 -2
  110. package/dist/adapter/resources/webgl-vertex-array.d.ts.map +1 -1
  111. package/dist/adapter/resources/webgl-vertex-array.js +1 -1
  112. package/dist/adapter/resources/webgl-vertex-array.js.map +1 -1
  113. package/dist/adapter/webgl-adapter.d.ts.map +1 -1
  114. package/dist/adapter/webgl-adapter.js +22 -23
  115. package/dist/adapter/webgl-adapter.js.map +1 -1
  116. package/dist/adapter/webgl-canvas-context.d.ts +2 -2
  117. package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
  118. package/dist/adapter/webgl-canvas-context.js +16 -6
  119. package/dist/adapter/webgl-canvas-context.js.map +1 -1
  120. package/dist/adapter/webgl-device.d.ts +10 -5
  121. package/dist/adapter/webgl-device.d.ts.map +1 -1
  122. package/dist/adapter/webgl-device.js +75 -28
  123. package/dist/adapter/webgl-device.js.map +1 -1
  124. package/dist/adapter/webgl-presentation-context.d.ts +21 -0
  125. package/dist/adapter/webgl-presentation-context.d.ts.map +1 -0
  126. package/dist/adapter/webgl-presentation-context.js +64 -0
  127. package/dist/adapter/webgl-presentation-context.js.map +1 -0
  128. package/dist/constants/index.d.ts +3 -0
  129. package/dist/constants/index.d.ts.map +1 -0
  130. package/dist/constants/index.js +5 -0
  131. package/dist/constants/index.js.map +1 -0
  132. package/dist/constants/webgl-constants.d.ts +822 -0
  133. package/dist/constants/webgl-constants.d.ts.map +1 -0
  134. package/dist/constants/webgl-constants.js +928 -0
  135. package/dist/constants/webgl-constants.js.map +1 -0
  136. package/dist/constants/webgl-types.d.ts +480 -0
  137. package/dist/constants/webgl-types.d.ts.map +1 -0
  138. package/dist/constants/webgl-types.js +6 -0
  139. package/dist/constants/webgl-types.js.map +1 -0
  140. package/dist/context/debug/spector.d.ts.map +1 -1
  141. package/dist/context/debug/spector.js +4 -4
  142. package/dist/context/debug/spector.js.map +1 -1
  143. package/dist/context/debug/webgl-developer-tools.js +7 -7
  144. package/dist/context/debug/webgl-developer-tools.js.map +1 -1
  145. package/dist/context/helpers/create-browser-context.d.ts.map +1 -1
  146. package/dist/context/helpers/create-browser-context.js +46 -36
  147. package/dist/context/helpers/create-browser-context.js.map +1 -1
  148. package/dist/context/helpers/webgl-context-data.d.ts +5 -1
  149. package/dist/context/helpers/webgl-context-data.d.ts.map +1 -1
  150. package/dist/context/helpers/webgl-context-data.js +9 -10
  151. package/dist/context/helpers/webgl-context-data.js.map +1 -1
  152. package/dist/context/helpers/webgl-extensions.d.ts +1 -1
  153. package/dist/context/helpers/webgl-extensions.d.ts.map +1 -1
  154. package/dist/context/parameters/unified-parameter-api.d.ts +2 -2
  155. package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
  156. package/dist/context/parameters/unified-parameter-api.js +2 -2
  157. package/dist/context/parameters/unified-parameter-api.js.map +1 -1
  158. package/dist/context/parameters/webgl-parameter-tables.d.ts +1 -1
  159. package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
  160. package/dist/context/parameters/webgl-parameter-tables.js +1 -1
  161. package/dist/context/parameters/webgl-parameter-tables.js.map +1 -1
  162. package/dist/context/polyfills/polyfill-webgl1-extensions.js +1 -1
  163. package/dist/context/polyfills/polyfill-webgl1-extensions.js.map +1 -1
  164. package/dist/context/state-tracker/webgl-state-tracker.js +2 -2
  165. package/dist/context/state-tracker/webgl-state-tracker.js.map +1 -1
  166. package/dist/dist.dev.js +1897 -999
  167. package/dist/dist.min.js +2 -2
  168. package/dist/index.cjs +3 -5255
  169. package/dist/index.cjs.map +4 -4
  170. package/dist/index.d.ts +3 -0
  171. package/dist/index.d.ts.map +1 -1
  172. package/dist/index.js +2 -0
  173. package/dist/index.js.map +1 -1
  174. package/dist/utils/fill-array.js +1 -1
  175. package/dist/utils/fill-array.js.map +1 -1
  176. package/dist/webgl-constants.d.ts +2 -0
  177. package/dist/webgl-constants.d.ts.map +1 -0
  178. package/dist/webgl-constants.js +5 -0
  179. package/dist/webgl-constants.js.map +1 -0
  180. package/dist/webgl-types.d.ts +2 -0
  181. package/dist/webgl-types.d.ts.map +1 -0
  182. package/dist/{types.js → webgl-types.js} +1 -1
  183. package/dist/webgl-types.js.map +1 -0
  184. package/package.json +19 -5
  185. package/src/adapter/converters/device-parameters.ts +6 -2
  186. package/src/adapter/converters/sampler-parameters.ts +1 -1
  187. package/src/adapter/converters/shader-formats.ts +1 -66
  188. package/src/adapter/converters/webgl-shadertypes.ts +1 -9
  189. package/src/adapter/converters/webgl-texture-table.ts +160 -68
  190. package/src/adapter/converters/webgl-vertex-formats.ts +1 -1
  191. package/src/adapter/device-helpers/webgl-device-features.ts +2 -3
  192. package/src/adapter/device-helpers/webgl-device-info.ts +7 -1
  193. package/src/adapter/device-helpers/webgl-device-limits.ts +1 -1
  194. package/src/adapter/helpers/format-utils.ts +1 -1
  195. package/src/adapter/helpers/get-shader-layout-from-glsl.ts +44 -24
  196. package/src/adapter/helpers/parse-shader-compiler-log.ts +23 -1
  197. package/src/adapter/helpers/set-uniform.ts +1 -1
  198. package/src/adapter/helpers/webgl-texture-utils.ts +4 -4
  199. package/src/adapter/helpers/webgl-topology-utils.ts +1 -1
  200. package/src/adapter/resources/webgl-buffer.ts +18 -5
  201. package/src/adapter/resources/webgl-command-buffer.ts +44 -48
  202. package/src/adapter/resources/webgl-command-encoder.ts +28 -11
  203. package/src/adapter/resources/webgl-fence.ts +55 -0
  204. package/src/adapter/resources/webgl-framebuffer.ts +12 -1
  205. package/src/adapter/resources/webgl-query-set.ts +295 -101
  206. package/src/adapter/resources/webgl-render-pass.ts +30 -13
  207. package/src/adapter/resources/webgl-render-pipeline.ts +102 -198
  208. package/src/adapter/resources/webgl-sampler.ts +1 -1
  209. package/src/adapter/resources/webgl-shader.ts +15 -8
  210. package/src/adapter/resources/webgl-shared-render-pipeline.ts +211 -0
  211. package/src/adapter/resources/webgl-texture.ts +455 -81
  212. package/src/adapter/resources/webgl-transform-feedback.ts +6 -6
  213. package/src/adapter/resources/webgl-vertex-array.ts +1 -1
  214. package/src/adapter/webgl-adapter.ts +26 -24
  215. package/src/adapter/webgl-canvas-context.ts +19 -8
  216. package/src/adapter/webgl-device.ts +91 -35
  217. package/src/adapter/webgl-presentation-context.ts +93 -0
  218. package/src/constants/index.d.ts.map +1 -0
  219. package/src/constants/index.js.map +1 -0
  220. package/src/constants/index.ts +31 -0
  221. package/src/constants/webgl-constants.d.ts.map +1 -0
  222. package/src/constants/webgl-constants.js.map +1 -0
  223. package/src/constants/webgl-constants.ts +1051 -0
  224. package/src/constants/webgl-types.d.ts.map +1 -0
  225. package/src/constants/webgl-types.js.map +1 -0
  226. package/src/constants/webgl-types.ts +813 -0
  227. package/src/context/debug/spector.ts +4 -4
  228. package/src/context/debug/webgl-developer-tools.ts +16 -7
  229. package/src/context/helpers/create-browser-context.ts +54 -43
  230. package/src/context/helpers/webgl-context-data.ts +17 -11
  231. package/src/context/helpers/webgl-extensions.ts +1 -1
  232. package/src/context/parameters/unified-parameter-api.ts +3 -3
  233. package/src/context/parameters/webgl-parameter-tables.ts +1 -1
  234. package/src/context/polyfills/polyfill-webgl1-extensions.ts +1 -1
  235. package/src/context/state-tracker/webgl-state-tracker.ts +2 -2
  236. package/src/index.ts +27 -0
  237. package/src/utils/fill-array.ts +1 -1
  238. package/src/webgl-constants.d.ts.map +1 -0
  239. package/src/webgl-constants.js.map +1 -0
  240. package/src/webgl-constants.ts +5 -0
  241. package/src/webgl-types.d.ts.map +1 -0
  242. package/src/webgl-types.js.map +1 -0
  243. package/src/webgl-types.ts +29 -0
  244. package/dist/types.d.ts +0 -11
  245. package/dist/types.d.ts.map +0 -1
  246. package/dist/types.js.map +0 -1
  247. 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
- // @ts-expect-error
95
- const device = gl.device;
95
+ const contextData = getWebGLContextData(gl);
96
+ const device = contextData.device;
96
97
  spector?.startCapture(props.gl, 500); // 500 commands
97
- // @ts-expect-error
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(message)();
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
- // throw new Error(message);
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
- if (props.traceWebGL) {
150
- log.log(1, functionString)();
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
- // const onCreateError = error => (errorMessage = error.statusMessage || errorMessage);
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
- // Avoid multiple listeners?
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
- // failIfMajorPerformanceCaveat: true,
38
- ...webglContextAttributes
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
- // Create a webgl2 context
45
- gl ||= canvas.getContext('webgl2', webglProps);
46
- if (webglProps.failIfMajorPerformanceCaveat) {
47
- errorMessage ||=
48
- 'Only software GPU is available. Set `failIfMajorPerformanceCaveat: false` to allow.';
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
- // Creation failed with failIfMajorPerformanceCaveat - Try a Software GPU
52
- if (!gl && !webglContextAttributes.failIfMajorPerformanceCaveat) {
53
- webglProps.failIfMajorPerformanceCaveat = false;
54
- gl = canvas.getContext('webgl2', webglProps);
55
- // @ts-expect-error
56
- gl.luma ||= {};
57
- // @ts-expect-error
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
- if (!gl) {
62
- gl = canvas.getContext('webgl', {}) as WebGL2RenderingContext;
63
- if (gl) {
64
- gl = null;
65
- errorMessage ||= 'Your browser only supports WebGL1';
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
- if (!gl) {
70
- errorMessage ||= 'Your browser does not support WebGL';
71
- throw new Error(`Failed to create WebGL context: ${errorMessage}`);
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
- // Carefully extract and wrap callbacks to prevent addEventListener from rebinding them.
75
- const {onContextLost, onContextRestored} = props;
76
- canvas.addEventListener('webglcontextlost', (event: Event) => onContextLost(event), false);
77
- canvas.addEventListener(
78
- 'webglcontextrestored',
79
- (event: Event) => onContextRestored(event),
80
- false
81
- );
82
-
83
- // @ts-expect-error
84
- gl.luma ||= {};
85
- return gl;
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
- _extensions: Record<string, any>;
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 luma = gl.luma as WebGLContextData | null;
20
- if (!luma) {
21
- const contextState: WebGLContextData = {
22
- _polyfilled: false,
23
- _extensions: {}
24
- };
25
- // @ts-expect-error
26
- gl.luma = contextState;
27
- }
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
- return gl.luma;
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 (gl.state.cache)
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.state && gl.state.cache;
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.
@@ -5,7 +5,7 @@
5
5
  // @ts-nocheck TODO fix
6
6
 
7
7
  // Tables describing WebGL parameters
8
- import {GL, GLParameters} from '@luma.gl/constants';
8
+ import {GL, GLParameters} from '@luma.gl/webgl/constants';
9
9
 
10
10
  // DEFAULT SETTINGS - FOR FAST CACHE INITIALIZATION AND CONTEXT RESETS
11
11
 
@@ -7,7 +7,7 @@
7
7
 
8
8
  /* eslint-disable camelcase */
9
9
 
10
- import {GL} from '@luma.gl/constants';
10
+ import {GL} from '@luma.gl/webgl/constants';
11
11
 
12
12
  // webgl1 extensions natively supported by webgl2
13
13
  const WEBGL1_STATIC_EXTENSIONS = {
@@ -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.state as WebGLStateTracker;
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.state = this;
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';
@@ -16,7 +16,7 @@ export function fillArray(options: {
16
16
  const total = count * length;
17
17
  let copied = 0;
18
18
  for (let i = start; copied < length; copied++) {
19
- target[i++] = source[copied];
19
+ target[i++] = source[copied] ?? 0;
20
20
  }
21
21
 
22
22
  while (copied < total) {
@@ -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,5 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ export {GL} from './constants/webgl-constants';
@@ -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
@@ -1,11 +0,0 @@
1
- export type AccessorObject = {
2
- size?: number;
3
- index?: number;
4
- type?: number;
5
- divisor?: number;
6
- offset?: number;
7
- stride?: number;
8
- normalized?: boolean;
9
- integer?: boolean;
10
- };
11
- //# sourceMappingURL=types.d.ts.map
@@ -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
- };