@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.
Files changed (249) hide show
  1. package/dist/adapter/converters/device-parameters.js +1 -12
  2. package/dist/adapter/converters/device-parameters.js.map +1 -1
  3. package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
  4. package/dist/adapter/converters/texture-formats.js +0 -9
  5. package/dist/adapter/converters/texture-formats.js.map +1 -1
  6. package/dist/adapter/converters/vertex-formats.d.ts.map +1 -1
  7. package/dist/adapter/converters/vertex-formats.js +3 -0
  8. package/dist/adapter/converters/vertex-formats.js.map +1 -1
  9. package/dist/adapter/device-helpers/device-features.d.ts.map +1 -1
  10. package/dist/adapter/device-helpers/device-features.js.map +1 -1
  11. package/dist/adapter/device-helpers/get-device-info.js +4 -0
  12. package/dist/adapter/device-helpers/get-device-info.js.map +1 -1
  13. package/dist/adapter/helpers/get-shader-layout.d.ts +1 -1
  14. package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
  15. package/dist/adapter/helpers/get-shader-layout.js +2 -4
  16. package/dist/adapter/helpers/get-shader-layout.js.map +1 -1
  17. package/dist/adapter/helpers/set-uniform.js +1 -1
  18. package/dist/adapter/helpers/set-uniform.js.map +1 -1
  19. package/dist/adapter/objects/constants-to-keys.d.ts.map +1 -1
  20. package/dist/adapter/objects/constants-to-keys.js.map +1 -1
  21. package/dist/adapter/objects/webgl-renderbuffer.d.ts.map +1 -1
  22. package/dist/adapter/objects/webgl-renderbuffer.js +1 -1
  23. package/dist/adapter/objects/webgl-renderbuffer.js.map +1 -1
  24. package/dist/adapter/objects/webgl-resource.d.ts +2 -4
  25. package/dist/adapter/objects/webgl-resource.d.ts.map +1 -1
  26. package/dist/adapter/objects/webgl-resource.js +1 -7
  27. package/dist/adapter/objects/webgl-resource.js.map +1 -1
  28. package/dist/adapter/objects/webgl-vertex-array-object.d.ts.map +1 -1
  29. package/dist/adapter/objects/webgl-vertex-array-object.js.map +1 -1
  30. package/dist/adapter/resources/webgl-buffer.d.ts +0 -1
  31. package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
  32. package/dist/adapter/resources/webgl-buffer.js +0 -2
  33. package/dist/adapter/resources/webgl-buffer.js.map +1 -1
  34. package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -1
  35. package/dist/adapter/resources/webgl-command-encoder.js.map +1 -1
  36. package/dist/adapter/resources/webgl-framebuffer.d.ts +0 -1
  37. package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
  38. package/dist/adapter/resources/webgl-framebuffer.js +2 -2
  39. package/dist/adapter/resources/webgl-framebuffer.js.map +1 -1
  40. package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
  41. package/dist/adapter/resources/webgl-render-pipeline.js +4 -32
  42. package/dist/adapter/resources/webgl-render-pipeline.js.map +1 -1
  43. package/dist/adapter/resources/webgl-sampler.d.ts +1 -0
  44. package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
  45. package/dist/adapter/resources/webgl-sampler.js +4 -0
  46. package/dist/adapter/resources/webgl-sampler.js.map +1 -1
  47. package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
  48. package/dist/adapter/resources/webgl-shader.js.map +1 -1
  49. package/dist/adapter/resources/webgl-texture.d.ts +2 -2
  50. package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
  51. package/dist/adapter/resources/webgl-texture.js +1 -3
  52. package/dist/adapter/resources/webgl-texture.js.map +1 -1
  53. package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
  54. package/dist/adapter/webgl-canvas-context.js +4 -3
  55. package/dist/adapter/webgl-canvas-context.js.map +1 -1
  56. package/dist/adapter/webgl-device.d.ts +34 -29
  57. package/dist/adapter/webgl-device.d.ts.map +1 -1
  58. package/dist/adapter/webgl-device.js +37 -28
  59. package/dist/adapter/webgl-device.js.map +1 -1
  60. package/dist/classic/buffer.d.ts.map +1 -1
  61. package/dist/classic/buffer.js.map +1 -1
  62. package/dist/context/debug/webgl-developer-tools.js +1 -7
  63. package/dist/context/debug/webgl-developer-tools.js.map +1 -1
  64. package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
  65. package/dist/context/parameters/unified-parameter-api.js.map +1 -1
  66. package/dist/context/parameters/webgl-parameter-tables.d.ts +103 -103
  67. package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
  68. package/dist/context/parameters/webgl-parameter-tables.js +15 -14
  69. package/dist/context/parameters/webgl-parameter-tables.js.map +1 -1
  70. package/dist/context/polyfill/context-data.d.ts +13 -0
  71. package/dist/context/polyfill/context-data.d.ts.map +1 -0
  72. package/dist/context/polyfill/context-data.js +14 -0
  73. package/dist/context/polyfill/context-data.js.map +1 -0
  74. package/dist/context/polyfill/get-parameter-polyfill.d.ts +1 -1
  75. package/dist/context/polyfill/get-parameter-polyfill.d.ts.map +1 -1
  76. package/dist/context/polyfill/get-parameter-polyfill.js.map +1 -1
  77. package/dist/context/polyfill/polyfill-context.js +4 -4
  78. package/dist/context/polyfill/polyfill-context.js.map +1 -1
  79. package/dist/context/polyfill/polyfill-table.d.ts +7 -7
  80. package/dist/context/polyfill/polyfill-table.d.ts.map +1 -1
  81. package/dist/context/polyfill/polyfill-table.js +5 -4
  82. package/dist/context/polyfill/polyfill-table.js.map +1 -1
  83. package/dist/context/state-tracker/track-context-state.d.ts.map +1 -1
  84. package/dist/context/state-tracker/track-context-state.js +0 -1
  85. package/dist/context/state-tracker/track-context-state.js.map +1 -1
  86. package/dist/context/state-tracker/with-parameters.js +1 -1
  87. package/dist/context/state-tracker/with-parameters.js.map +1 -1
  88. package/dist/es5/adapter/converters/device-parameters.js +1 -12
  89. package/dist/es5/adapter/converters/device-parameters.js.map +1 -1
  90. package/dist/es5/adapter/converters/texture-formats.js +1 -10
  91. package/dist/es5/adapter/converters/texture-formats.js.map +1 -1
  92. package/dist/es5/adapter/converters/vertex-formats.js +3 -0
  93. package/dist/es5/adapter/converters/vertex-formats.js.map +1 -1
  94. package/dist/es5/adapter/device-helpers/device-features.js.map +1 -1
  95. package/dist/es5/adapter/device-helpers/get-device-info.js +4 -0
  96. package/dist/es5/adapter/device-helpers/get-device-info.js.map +1 -1
  97. package/dist/es5/adapter/helpers/get-shader-layout.js +2 -4
  98. package/dist/es5/adapter/helpers/get-shader-layout.js.map +1 -1
  99. package/dist/es5/adapter/helpers/set-uniform.js +1 -1
  100. package/dist/es5/adapter/helpers/set-uniform.js.map +1 -1
  101. package/dist/es5/adapter/objects/constants-to-keys.js.map +1 -1
  102. package/dist/es5/adapter/objects/webgl-renderbuffer.js +1 -1
  103. package/dist/es5/adapter/objects/webgl-renderbuffer.js.map +1 -1
  104. package/dist/es5/adapter/objects/webgl-resource.js +1 -6
  105. package/dist/es5/adapter/objects/webgl-resource.js.map +1 -1
  106. package/dist/es5/adapter/objects/webgl-vertex-array-object.js.map +1 -1
  107. package/dist/es5/adapter/resources/webgl-buffer.js +0 -1
  108. package/dist/es5/adapter/resources/webgl-buffer.js.map +1 -1
  109. package/dist/es5/adapter/resources/webgl-command-encoder.js.map +1 -1
  110. package/dist/es5/adapter/resources/webgl-framebuffer.js +2 -1
  111. package/dist/es5/adapter/resources/webgl-framebuffer.js.map +1 -1
  112. package/dist/es5/adapter/resources/webgl-render-pipeline.js +2 -38
  113. package/dist/es5/adapter/resources/webgl-render-pipeline.js.map +1 -1
  114. package/dist/es5/adapter/resources/webgl-sampler.js +5 -0
  115. package/dist/es5/adapter/resources/webgl-sampler.js.map +1 -1
  116. package/dist/es5/adapter/resources/webgl-shader.js.map +1 -1
  117. package/dist/es5/adapter/resources/webgl-texture.js +1 -7
  118. package/dist/es5/adapter/resources/webgl-texture.js.map +1 -1
  119. package/dist/es5/adapter/webgl-canvas-context.js +3 -4
  120. package/dist/es5/adapter/webgl-canvas-context.js.map +1 -1
  121. package/dist/es5/adapter/webgl-device.js +38 -27
  122. package/dist/es5/adapter/webgl-device.js.map +1 -1
  123. package/dist/es5/classic/buffer.js.map +1 -1
  124. package/dist/es5/context/debug/webgl-developer-tools.js +1 -7
  125. package/dist/es5/context/debug/webgl-developer-tools.js.map +1 -1
  126. package/dist/es5/context/parameters/unified-parameter-api.js.map +1 -1
  127. package/dist/es5/context/parameters/webgl-parameter-tables.js +10 -9
  128. package/dist/es5/context/parameters/webgl-parameter-tables.js.map +1 -1
  129. package/dist/es5/context/polyfill/context-data.js +21 -0
  130. package/dist/es5/context/polyfill/context-data.js.map +1 -0
  131. package/dist/es5/context/polyfill/get-parameter-polyfill.js.map +1 -1
  132. package/dist/es5/context/polyfill/polyfill-context.js +4 -4
  133. package/dist/es5/context/polyfill/polyfill-context.js.map +1 -1
  134. package/dist/es5/context/polyfill/polyfill-table.js +5 -4
  135. package/dist/es5/context/polyfill/polyfill-table.js.map +1 -1
  136. package/dist/es5/context/state-tracker/track-context-state.js +0 -1
  137. package/dist/es5/context/state-tracker/track-context-state.js.map +1 -1
  138. package/dist/es5/context/state-tracker/with-parameters.js +4 -2
  139. package/dist/es5/context/state-tracker/with-parameters.js.map +1 -1
  140. package/dist/es5/index.js +0 -14
  141. package/dist/es5/index.js.map +1 -1
  142. package/dist/esm/adapter/converters/device-parameters.js +1 -12
  143. package/dist/esm/adapter/converters/device-parameters.js.map +1 -1
  144. package/dist/esm/adapter/converters/texture-formats.js +0 -9
  145. package/dist/esm/adapter/converters/texture-formats.js.map +1 -1
  146. package/dist/esm/adapter/converters/vertex-formats.js +3 -0
  147. package/dist/esm/adapter/converters/vertex-formats.js.map +1 -1
  148. package/dist/esm/adapter/device-helpers/device-features.js.map +1 -1
  149. package/dist/esm/adapter/device-helpers/get-device-info.js +4 -0
  150. package/dist/esm/adapter/device-helpers/get-device-info.js.map +1 -1
  151. package/dist/esm/adapter/helpers/get-shader-layout.js +2 -4
  152. package/dist/esm/adapter/helpers/get-shader-layout.js.map +1 -1
  153. package/dist/esm/adapter/helpers/set-uniform.js +1 -1
  154. package/dist/esm/adapter/helpers/set-uniform.js.map +1 -1
  155. package/dist/esm/adapter/objects/constants-to-keys.js.map +1 -1
  156. package/dist/esm/adapter/objects/webgl-renderbuffer.js +1 -1
  157. package/dist/esm/adapter/objects/webgl-renderbuffer.js.map +1 -1
  158. package/dist/esm/adapter/objects/webgl-resource.js +1 -7
  159. package/dist/esm/adapter/objects/webgl-resource.js.map +1 -1
  160. package/dist/esm/adapter/objects/webgl-vertex-array-object.js.map +1 -1
  161. package/dist/esm/adapter/resources/webgl-buffer.js +0 -2
  162. package/dist/esm/adapter/resources/webgl-buffer.js.map +1 -1
  163. package/dist/esm/adapter/resources/webgl-command-encoder.js.map +1 -1
  164. package/dist/esm/adapter/resources/webgl-framebuffer.js +2 -2
  165. package/dist/esm/adapter/resources/webgl-framebuffer.js.map +1 -1
  166. package/dist/esm/adapter/resources/webgl-render-pipeline.js +4 -32
  167. package/dist/esm/adapter/resources/webgl-render-pipeline.js.map +1 -1
  168. package/dist/esm/adapter/resources/webgl-sampler.js +4 -0
  169. package/dist/esm/adapter/resources/webgl-sampler.js.map +1 -1
  170. package/dist/esm/adapter/resources/webgl-shader.js.map +1 -1
  171. package/dist/esm/adapter/resources/webgl-texture.js +1 -3
  172. package/dist/esm/adapter/resources/webgl-texture.js.map +1 -1
  173. package/dist/esm/adapter/webgl-canvas-context.js +4 -3
  174. package/dist/esm/adapter/webgl-canvas-context.js.map +1 -1
  175. package/dist/esm/adapter/webgl-device.js +37 -28
  176. package/dist/esm/adapter/webgl-device.js.map +1 -1
  177. package/dist/esm/classic/buffer.js.map +1 -1
  178. package/dist/esm/context/debug/webgl-developer-tools.js +1 -7
  179. package/dist/esm/context/debug/webgl-developer-tools.js.map +1 -1
  180. package/dist/esm/context/parameters/unified-parameter-api.js.map +1 -1
  181. package/dist/esm/context/parameters/webgl-parameter-tables.js +15 -14
  182. package/dist/esm/context/parameters/webgl-parameter-tables.js.map +1 -1
  183. package/dist/esm/context/polyfill/context-data.js +14 -0
  184. package/dist/esm/context/polyfill/context-data.js.map +1 -0
  185. package/dist/esm/context/polyfill/get-parameter-polyfill.js.map +1 -1
  186. package/dist/esm/context/polyfill/polyfill-context.js +4 -4
  187. package/dist/esm/context/polyfill/polyfill-context.js.map +1 -1
  188. package/dist/esm/context/polyfill/polyfill-table.js +5 -4
  189. package/dist/esm/context/polyfill/polyfill-table.js.map +1 -1
  190. package/dist/esm/context/state-tracker/track-context-state.js +0 -1
  191. package/dist/esm/context/state-tracker/track-context-state.js.map +1 -1
  192. package/dist/esm/context/state-tracker/with-parameters.js +1 -1
  193. package/dist/esm/context/state-tracker/with-parameters.js.map +1 -1
  194. package/dist/esm/index.js +0 -1
  195. package/dist/esm/index.js.map +1 -1
  196. package/dist/index.d.ts +0 -1
  197. package/dist/index.d.ts.map +1 -1
  198. package/dist/index.js +0 -1
  199. package/dist/index.js.map +1 -1
  200. package/package.json +4 -4
  201. package/src/adapter/converters/device-parameters.ts +11 -11
  202. package/src/adapter/converters/texture-formats.ts +12 -12
  203. package/src/adapter/converters/vertex-formats.ts +1 -0
  204. package/src/adapter/device-helpers/device-features.ts +0 -1
  205. package/src/adapter/device-helpers/get-device-info.ts +5 -1
  206. package/src/adapter/helpers/get-shader-layout.ts +18 -15
  207. package/src/adapter/helpers/set-uniform.ts +1 -1
  208. package/src/adapter/objects/constants-to-keys.ts +4 -1
  209. package/src/adapter/objects/webgl-renderbuffer.ts +5 -5
  210. package/src/adapter/objects/webgl-resource.ts +7 -12
  211. package/src/adapter/objects/webgl-vertex-array-object.ts +4 -4
  212. package/src/adapter/resources/webgl-buffer.ts +4 -4
  213. package/src/adapter/resources/webgl-command-encoder.ts +4 -4
  214. package/src/adapter/resources/webgl-framebuffer.ts +6 -5
  215. package/src/adapter/resources/webgl-render-pipeline.ts +24 -23
  216. package/src/adapter/resources/webgl-sampler.ts +5 -1
  217. package/src/adapter/resources/webgl-shader.ts +1 -1
  218. package/src/adapter/resources/webgl-texture.ts +5 -7
  219. package/src/adapter/webgl-canvas-context.ts +2 -3
  220. package/src/adapter/webgl-device.ts +69 -59
  221. package/src/classic/buffer.ts +7 -4
  222. package/src/context/debug/webgl-developer-tools.ts +7 -7
  223. package/src/context/parameters/unified-parameter-api.ts +1 -1
  224. package/src/context/parameters/webgl-parameter-tables.ts +113 -94
  225. package/src/context/polyfill/context-data.ts +27 -0
  226. package/src/context/polyfill/get-parameter-polyfill.ts +7 -6
  227. package/src/context/polyfill/polyfill-context.ts +5 -5
  228. package/src/context/polyfill/polyfill-table.ts +14 -13
  229. package/src/context/state-tracker/track-context-state.ts +0 -1
  230. package/src/context/state-tracker/with-parameters.ts +2 -1
  231. package/src/index.ts +0 -3
  232. package/dist/context/context/context-state.d.ts +0 -18
  233. package/dist/context/context/context-state.d.ts.map +0 -1
  234. package/dist/context/context/context-state.js +0 -26
  235. package/dist/context/context/context-state.js.map +0 -1
  236. package/dist/context/context/device-pixels.d.ts +0 -25
  237. package/dist/context/context/device-pixels.d.ts.map +0 -1
  238. package/dist/context/context/device-pixels.js +0 -103
  239. package/dist/context/context/device-pixels.js.map +0 -1
  240. package/dist/es5/context/context/context-state.js +0 -31
  241. package/dist/es5/context/context/context-state.js.map +0 -1
  242. package/dist/es5/context/context/device-pixels.js +0 -121
  243. package/dist/es5/context/context/device-pixels.js.map +0 -1
  244. package/dist/esm/context/context/context-state.js +0 -26
  245. package/dist/esm/context/context/context-state.js.map +0 -1
  246. package/dist/esm/context/context/device-pixels.js +0 -103
  247. package/dist/esm/context/context/device-pixels.js.map +0 -1
  248. package/src/context/context/context-state.ts +0 -41
  249. package/src/context/context/device-pixels.ts +0 -158
@@ -7,11 +7,10 @@ import type {
7
7
  CanvasContextProps,
8
8
  TextureFormat
9
9
  } from '@luma.gl/api';
10
- import {Device, CanvasContext, log, assert} from '@luma.gl/api';
10
+ import {Device, CanvasContext, log, uid} from '@luma.gl/api';
11
11
  import {isBrowser} from '@probe.gl/env';
12
12
  import {polyfillContext} from '../context/polyfill/polyfill-context';
13
- import {trackContextState} from '../context/state-tracker/track-context-state';
14
- import {ContextState} from '../context/context/context-state';
13
+ import {popContextState, pushContextState, trackContextState} from '../context/state-tracker/track-context-state';
15
14
  import {createBrowserContext} from '../context/context/create-browser-context';
16
15
  import {
17
16
  createHeadlessContext,
@@ -33,17 +32,17 @@ import {
33
32
  import type {
34
33
  BufferProps,
35
34
  ShaderProps,
36
- Sampler,
35
+ // Sampler,
37
36
  SamplerProps,
38
37
  TextureProps,
39
38
  ExternalTexture,
40
39
  ExternalTextureProps,
41
40
  FramebufferProps,
42
- RenderPipeline,
41
+ // RenderPipeline,
43
42
  RenderPipelineProps,
44
43
  ComputePipeline,
45
44
  ComputePipelineProps,
46
- RenderPass,
45
+ // RenderPass,
47
46
  RenderPassProps,
48
47
  ComputePass,
49
48
  ComputePassProps
@@ -60,10 +59,8 @@ import WEBGLRenderPipeline from './resources/webgl-render-pipeline';
60
59
 
61
60
  const LOG_LEVEL = 1;
62
61
 
63
- let counter = 0;
64
-
65
62
  /** WebGPU style Device API for a WebGL context */
66
- export default class WebGLDevice extends Device implements ContextState {
63
+ export default class WebGLDevice extends Device {
67
64
  //
68
65
  // Public `Device` API
69
66
  //
@@ -95,37 +92,6 @@ export default class WebGLDevice extends Device implements ContextState {
95
92
  private _features?: Set<DeviceFeature>;
96
93
  private _limits?: DeviceLimits;
97
94
 
98
- //
99
- // WebGL-only API (not part of `Device` API)
100
- //
101
-
102
- /** WebGL1 typed context. Can always be used. */
103
- readonly gl: WebGLRenderingContext;
104
- /** WebGL2 typed context. Need to check isWebGL2 or isWebGL1 before using. */
105
- readonly gl2: WebGL2RenderingContext | null = null;
106
- readonly debug: boolean = false;
107
-
108
- /** `true` if this is a WebGL1 context. @note `false` if WebGL2 */
109
- readonly isWebGL1: boolean;
110
- /** `true` if this is a WebGL2 context. @note `false` if WebGL1 */
111
- readonly isWebGL2: boolean;
112
-
113
- get webglLimits(): WebGLLimits {
114
- this._webglLimits = this._webglLimits || getWebGLLimits(this.gl);
115
- return this._webglLimits;
116
- }
117
-
118
- private _webglLimits?: WebGLLimits;
119
-
120
- /** State used by luma.gl classes: TODO - move to canvasContext*/
121
- readonly _canvasSizeInfo = {clientWidth: 0, clientHeight: 0, devicePixelRatio: 1};
122
- /** State used by luma.gl classes */
123
- readonly _extensions: Record<string, any> = {};
124
- _polyfilled: boolean = false;
125
-
126
- /** Instance of Spector.js (if initialized) */
127
- spector;
128
-
129
95
  //
130
96
  // Static methods, expected to be present by `luma.createDevice()`
131
97
  //
@@ -184,7 +150,7 @@ export default class WebGLDevice extends Device implements ContextState {
184
150
  //
185
151
 
186
152
  constructor(props: DeviceProps) {
187
- super(props);
153
+ super({...props, id: props.id || uid('webgl-device')});
188
154
 
189
155
  // If attaching to an already attached context, return the attached device
190
156
  // @ts-expect-error device is attached to context
@@ -206,7 +172,7 @@ export default class WebGLDevice extends Device implements ContextState {
206
172
  message: 'Computer entered sleep mode, or too many apps or browser tabs are using the GPU.'
207
173
  });
208
174
 
209
- let gl: WebGLRenderingContext | WebGL2RenderingContext | null = props.gl;
175
+ let gl: WebGLRenderingContext | WebGL2RenderingContext | null = props.gl || null;
210
176
  gl =
211
177
  gl ||
212
178
  (isBrowser() ? createBrowserContext(this.canvasContext.canvas, {...props, onContextLost}) : null);
@@ -270,29 +236,13 @@ ${this.info.vendor}, ${this.info.renderer} for canvas: ${this.canvasContext.id}`
270
236
  * Destroys the context
271
237
  * @note Has no effect for browser contexts, there is no browser API for destroying contexts
272
238
  */
273
- destroy() {
239
+ destroy(): void {
274
240
  const ext = this.gl.getExtension('STACKGL_destroy_context');
275
241
  if (ext) {
276
242
  ext.destroy();
277
243
  }
278
244
  }
279
245
 
280
- /**
281
- * Loses the context
282
- * @note Triggers context loss, mainly for testing
283
- */
284
- loseDevice() {
285
- const ext = this.gl.getExtension('WEBGL_lose_context');
286
- if (ext) {
287
- ext.loseContext();
288
- }
289
- // loseContext should trigger context loss callback but
290
- this._resolveContextLost?.({
291
- reason: 'destroyed',
292
- message: 'Application triggered context loss'
293
- });
294
- }
295
-
296
246
  get isLost(): boolean {
297
247
  return this.gl.isContextLost();
298
248
  }
@@ -390,6 +340,66 @@ ${this.info.vendor}, ${this.info.renderer} for canvas: ${this.canvasContext.id}`
390
340
  this.renderPass = null;
391
341
  // this.canvasContext.commit();
392
342
  }
343
+
344
+ //
345
+ // WebGL-only API (not part of `Device` API)
346
+ //
347
+
348
+ /** WebGL1 typed context. Can always be used. */
349
+ readonly gl: WebGLRenderingContext;
350
+ /** WebGL2 typed context. Need to check isWebGL2 or isWebGL1 before using. */
351
+ readonly gl2: WebGL2RenderingContext | null = null;
352
+ readonly debug: boolean = false;
353
+
354
+ /** `true` if this is a WebGL1 context. @note `false` if WebGL2 */
355
+ readonly isWebGL1: boolean;
356
+ /** `true` if this is a WebGL2 context. @note `false` if WebGL1 */
357
+ readonly isWebGL2: boolean;
358
+
359
+ /** State used by luma.gl classes: TODO - move to canvasContext*/
360
+ readonly _canvasSizeInfo = {clientWidth: 0, clientHeight: 0, devicePixelRatio: 1};
361
+
362
+ /** State used by luma.gl classes - TODO - not used? */
363
+ readonly _extensions: Record<string, any> = {};
364
+ _polyfilled: boolean = false;
365
+
366
+ /** Instance of Spector.js (if initialized) */
367
+ spector;
368
+
369
+ private _webglLimits?: WebGLLimits;
370
+
371
+ /** Return WebGL specific limits */
372
+ get webglLimits() : WebGLLimits {
373
+ this._webglLimits = this._webglLimits || getWebGLLimits(this.gl);
374
+ return this._webglLimits;
375
+ }
376
+
377
+ /**
378
+ * Loses the context
379
+ * @note Triggers context loss, mainly for testing
380
+ * @todo Promote to `Device` API?
381
+ */
382
+ loseDevice(): void {
383
+ const ext = this.gl.getExtension('WEBGL_lose_context');
384
+ if (ext) {
385
+ ext.loseContext();
386
+ }
387
+ // loseContext should trigger context loss callback but
388
+ this._resolveContextLost?.({
389
+ reason: 'destroyed',
390
+ message: 'Application triggered context loss'
391
+ });
392
+ }
393
+
394
+ /** Save current WebGL context state onto an internal stack */
395
+ pushState(): void {
396
+ pushContextState(this.gl);
397
+ }
398
+
399
+ /** Restores previously saved context state */
400
+ popState(): void {
401
+ popContextState(this.gl);
402
+ }
393
403
  }
394
404
 
395
405
  /** Check if supplied parameter is a WebGLRenderingContext */
@@ -1,5 +1,7 @@
1
+ // luma.gl, MIT license
2
+
1
3
  import type {Device, BufferProps, TypedArray} from '@luma.gl/api';
2
- import {Buffer, log, assert, checkProps} from '@luma.gl/api';
4
+ import {assert, checkProps} from '@luma.gl/api';
3
5
  import GL from '@luma.gl/constants';
4
6
  import {assertWebGL2Context} from '../context/context/webgl-checks';
5
7
  import {AccessorObject} from '../types';
@@ -106,7 +108,7 @@ export default class ClassicBuffer extends WEBGLBuffer {
106
108
  Object.seal(this);
107
109
  }
108
110
 
109
- destroy(): void {
111
+ override destroy(): void {
110
112
  if (this.handle) {
111
113
  this.removeStats();
112
114
  this.trackDeallocatedMemory();
@@ -116,9 +118,10 @@ export default class ClassicBuffer extends WEBGLBuffer {
116
118
  }
117
119
  }
118
120
 
119
- write(data: TypedArray, byteOffset?: number): void {
121
+ override write(data: TypedArray, byteOffset?: number): void {
120
122
  this.subData({data, offset: byteOffset});
121
123
  }
124
+
122
125
  // returns number of elements in the buffer (assuming that the full buffer is used)
123
126
  getElementCount(accessor: AccessorObject = this.accessor): number {
124
127
  return Math.round(this.byteLength / Accessor.getBytesPerElement(accessor));
@@ -278,7 +281,7 @@ export default class ClassicBuffer extends WEBGLBuffer {
278
281
  * Reads data from buffer into an ArrayBufferView or SharedArrayBuffer.
279
282
  * @note WEBGL2 ONLY
280
283
  */
281
- getData(options?: {
284
+ override getData(options?: {
282
285
  dstData?: any;
283
286
  srcByteOffset?: number;
284
287
  dstOffset?: number;
@@ -1,5 +1,5 @@
1
1
  // luma.gl, MIT license
2
- import {log, loadScript} from '@luma.gl/api/';
2
+ import {log, loadScript} from '@luma.gl/api';
3
3
  import GL from '@luma.gl/constants';
4
4
 
5
5
  const WEBGL_DEBUG_CDN_URL = 'https://unpkg.com/webgl-debug@2.0.1/index.js';
@@ -11,12 +11,12 @@ type DebugContextProps = {
11
11
  webgl2?: boolean;
12
12
  };
13
13
 
14
- const DEFAULT_DEBUG_CONTEXT_PROPS: Required<DebugContextProps> = {
15
- debug: true,
16
- throwOnError: false,
17
- break: [],
18
- webgl2: false,
19
- }
14
+ // const DEFAULT_DEBUG_CONTEXT_PROPS: Required<DebugContextProps> = {
15
+ // debug: true,
16
+ // throwOnError: false,
17
+ // break: [],
18
+ // webgl2: false,
19
+ // }
20
20
 
21
21
  // Helper to get shared context data
22
22
  function getContextData(gl: any) {
@@ -10,7 +10,6 @@ import {
10
10
  GL_PARAMETER_GETTERS
11
11
  } from './webgl-parameter-tables';
12
12
 
13
- import {isWebGL} from '../context/webgl-checks';
14
13
  import WebGLDevice from '../../adapter/webgl-device';
15
14
 
16
15
  export type {GLParameters};
@@ -129,6 +128,7 @@ export function resetParameters(device: Device | WebGLRenderingContext): void {
129
128
 
130
129
  // Returns true if given object is empty, false otherwise.
131
130
  function isObjectEmpty(object) {
131
+ // @ts-ignore dummy key variable
132
132
  for (const key in object) {
133
133
  return false;
134
134
  }