@luma.gl/webgl 9.0.0-beta.5 → 9.0.0-beta.6

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 (181) hide show
  1. package/dist/adapter/converters/device-parameters.d.ts.map +1 -1
  2. package/dist/adapter/converters/device-parameters.js +71 -11
  3. package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
  4. package/dist/adapter/converters/sampler-parameters.js +3 -2
  5. package/dist/adapter/converters/shader-formats.d.ts.map +1 -1
  6. package/dist/adapter/converters/shader-formats.js +40 -20
  7. package/dist/adapter/converters/texture-formats.d.ts +10 -7
  8. package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
  9. package/dist/adapter/converters/texture-formats.js +76 -64
  10. package/dist/adapter/converters/vertex-formats.d.ts.map +1 -1
  11. package/dist/adapter/converters/vertex-formats.js +2 -1
  12. package/dist/adapter/device-helpers/webgl-device-features.d.ts +18 -5
  13. package/dist/adapter/device-helpers/webgl-device-features.d.ts.map +1 -1
  14. package/dist/adapter/device-helpers/webgl-device-features.js +77 -43
  15. package/dist/adapter/device-helpers/webgl-device-info.d.ts +2 -1
  16. package/dist/adapter/device-helpers/webgl-device-info.d.ts.map +1 -1
  17. package/dist/adapter/device-helpers/webgl-device-info.js +17 -14
  18. package/dist/adapter/device-helpers/webgl-device-limits.d.ts +33 -48
  19. package/dist/adapter/device-helpers/webgl-device-limits.d.ts.map +1 -1
  20. package/dist/adapter/device-helpers/webgl-device-limits.js +42 -87
  21. package/dist/adapter/helpers/decode-webgl-types.d.ts.map +1 -1
  22. package/dist/adapter/helpers/decode-webgl-types.js +2 -1
  23. package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
  24. package/dist/adapter/helpers/get-shader-layout.js +6 -5
  25. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts.map +1 -1
  26. package/dist/adapter/helpers/parse-shader-compiler-log.js +3 -2
  27. package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
  28. package/dist/adapter/helpers/set-uniform.js +2 -1
  29. package/dist/adapter/helpers/webgl-topology-utils.d.ts.map +1 -1
  30. package/dist/adapter/helpers/webgl-topology-utils.js +2 -1
  31. package/dist/adapter/objects/constants-to-keys.d.ts.map +1 -1
  32. package/dist/adapter/objects/constants-to-keys.js +2 -1
  33. package/dist/adapter/objects/webgl-renderbuffer.d.ts +2 -2
  34. package/dist/adapter/objects/webgl-renderbuffer.d.ts.map +1 -1
  35. package/dist/adapter/objects/webgl-renderbuffer.js +24 -11
  36. package/dist/adapter/objects/webgl-resource.d.ts +2 -24
  37. package/dist/adapter/objects/webgl-resource.d.ts.map +1 -1
  38. package/dist/adapter/objects/webgl-resource.js +6 -100
  39. package/dist/adapter/resources/webgl-buffer.d.ts +1 -1
  40. package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
  41. package/dist/adapter/resources/webgl-buffer.js +2 -1
  42. package/dist/adapter/resources/webgl-command-buffer.d.ts +1 -1
  43. package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
  44. package/dist/adapter/resources/webgl-command-buffer.js +7 -6
  45. package/dist/adapter/resources/webgl-command-encoder.d.ts +8 -3
  46. package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -1
  47. package/dist/adapter/resources/webgl-command-encoder.js +4 -2
  48. package/dist/adapter/resources/webgl-external-texture.js +3 -2
  49. package/dist/adapter/resources/webgl-framebuffer.d.ts +6 -8
  50. package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
  51. package/dist/adapter/resources/webgl-framebuffer.js +25 -23
  52. package/dist/adapter/resources/webgl-query-set.d.ts +44 -0
  53. package/dist/adapter/resources/webgl-query-set.d.ts.map +1 -0
  54. package/dist/adapter/resources/webgl-query-set.js +136 -0
  55. package/dist/adapter/resources/webgl-render-pass.d.ts +3 -1
  56. package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
  57. package/dist/adapter/resources/webgl-render-pass.js +15 -7
  58. package/dist/adapter/resources/webgl-render-pipeline.d.ts +4 -5
  59. package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
  60. package/dist/adapter/resources/webgl-render-pipeline.js +34 -49
  61. package/dist/adapter/resources/webgl-sampler.d.ts +1 -1
  62. package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
  63. package/dist/adapter/resources/webgl-sampler.js +3 -2
  64. package/dist/adapter/resources/webgl-shader.d.ts +3 -2
  65. package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
  66. package/dist/adapter/resources/webgl-shader.js +12 -6
  67. package/dist/adapter/resources/webgl-texture-view.d.ts +14 -0
  68. package/dist/adapter/resources/webgl-texture-view.d.ts.map +1 -0
  69. package/dist/adapter/resources/webgl-texture-view.js +18 -0
  70. package/dist/adapter/resources/webgl-texture.d.ts +4 -3
  71. package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
  72. package/dist/adapter/resources/webgl-texture.js +12 -7
  73. package/dist/adapter/resources/webgl-transform-feedback.d.ts +1 -1
  74. package/dist/adapter/resources/webgl-transform-feedback.d.ts.map +1 -1
  75. package/dist/adapter/resources/webgl-transform-feedback.js +2 -2
  76. package/dist/adapter/resources/webgl-vertex-array.d.ts +3 -3
  77. package/dist/adapter/resources/webgl-vertex-array.d.ts.map +1 -1
  78. package/dist/adapter/resources/webgl-vertex-array.js +5 -4
  79. package/dist/adapter/webgl-canvas-context.d.ts +2 -2
  80. package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
  81. package/dist/adapter/webgl-canvas-context.js +3 -2
  82. package/dist/adapter/webgl-device.d.ts +29 -27
  83. package/dist/adapter/webgl-device.d.ts.map +1 -1
  84. package/dist/adapter/webgl-device.js +90 -94
  85. package/dist/classic/accessor.d.ts.map +1 -1
  86. package/dist/classic/accessor.js +4 -3
  87. package/dist/classic/clear.d.ts.map +1 -1
  88. package/dist/classic/clear.js +3 -2
  89. package/dist/classic/copy-and-blit.d.ts +1 -1
  90. package/dist/classic/copy-and-blit.d.ts.map +1 -1
  91. package/dist/classic/copy-and-blit.js +5 -4
  92. package/dist/classic/format-utils.d.ts +2 -2
  93. package/dist/classic/format-utils.d.ts.map +1 -1
  94. package/dist/classic/format-utils.js +2 -1
  95. package/dist/classic/typed-array-utils.d.ts.map +1 -1
  96. package/dist/classic/typed-array-utils.js +2 -1
  97. package/dist/context/debug/spector.d.ts.map +1 -1
  98. package/dist/context/debug/spector.js +2 -1
  99. package/dist/context/debug/webgl-developer-tools.d.ts.map +1 -1
  100. package/dist/context/debug/webgl-developer-tools.js +7 -6
  101. package/dist/context/helpers/create-browser-context.d.ts +35 -0
  102. package/dist/context/helpers/create-browser-context.d.ts.map +1 -0
  103. package/dist/context/helpers/create-browser-context.js +67 -0
  104. package/dist/context/helpers/webgl-context-data.d.ts +13 -0
  105. package/dist/context/helpers/webgl-context-data.d.ts.map +1 -0
  106. package/dist/context/helpers/webgl-context-data.js +21 -0
  107. package/dist/context/helpers/webgl-extensions.d.ts +4 -0
  108. package/dist/context/helpers/webgl-extensions.d.ts.map +1 -0
  109. package/dist/context/helpers/webgl-extensions.js +10 -0
  110. package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
  111. package/dist/context/parameters/unified-parameter-api.js +4 -3
  112. package/dist/context/parameters/webgl-parameter-tables.d.ts +10 -0
  113. package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
  114. package/dist/context/parameters/webgl-parameter-tables.js +29 -16
  115. package/dist/context/state-tracker/deep-array-equal.d.ts.map +1 -1
  116. package/dist/context/state-tracker/deep-array-equal.js +2 -1
  117. package/dist/context/state-tracker/track-context-state.d.ts.map +1 -1
  118. package/dist/context/state-tracker/track-context-state.js +5 -4
  119. package/dist/context/state-tracker/with-parameters.d.ts +1 -1
  120. package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
  121. package/dist/context/state-tracker/with-parameters.js +5 -4
  122. package/dist/dist.dev.js +941 -730
  123. package/dist/index.cjs +732 -565
  124. package/dist/index.cjs.map +4 -4
  125. package/dist/index.d.ts +25 -25
  126. package/dist/index.d.ts.map +1 -1
  127. package/dist/index.js +24 -23
  128. package/dist/types.d.ts.map +1 -1
  129. package/dist/types.js +2 -1
  130. package/dist.min.js +5 -5
  131. package/package.json +4 -4
  132. package/src/adapter/converters/device-parameters.ts +105 -16
  133. package/src/adapter/converters/sampler-parameters.ts +12 -3
  134. package/src/adapter/converters/shader-formats.ts +47 -22
  135. package/src/adapter/converters/texture-formats.ts +87 -66
  136. package/src/adapter/converters/vertex-formats.ts +3 -3
  137. package/src/adapter/device-helpers/webgl-device-features.ts +83 -51
  138. package/src/adapter/device-helpers/webgl-device-info.ts +28 -19
  139. package/src/adapter/device-helpers/webgl-device-limits.ts +46 -150
  140. package/src/adapter/helpers/decode-webgl-types.ts +13 -7
  141. package/src/adapter/helpers/get-shader-layout.ts +4 -3
  142. package/src/adapter/helpers/parse-shader-compiler-log.ts +10 -6
  143. package/src/adapter/helpers/set-uniform.ts +2 -1
  144. package/src/adapter/helpers/webgl-topology-utils.ts +10 -3
  145. package/src/adapter/objects/constants-to-keys.ts +2 -1
  146. package/src/adapter/objects/webgl-renderbuffer.ts +35 -13
  147. package/src/adapter/objects/webgl-resource.ts +6 -124
  148. package/src/adapter/resources/webgl-buffer.ts +4 -3
  149. package/src/adapter/resources/webgl-command-buffer.ts +5 -5
  150. package/src/adapter/resources/webgl-command-encoder.ts +14 -11
  151. package/src/adapter/resources/webgl-external-texture.ts +3 -2
  152. package/src/adapter/resources/webgl-framebuffer.ts +34 -29
  153. package/src/adapter/resources/webgl-query-set.ts +171 -0
  154. package/src/adapter/resources/webgl-render-pass.ts +17 -8
  155. package/src/adapter/resources/webgl-render-pipeline.ts +41 -48
  156. package/src/adapter/resources/webgl-sampler.ts +2 -1
  157. package/src/adapter/resources/webgl-shader.ts +12 -5
  158. package/src/adapter/resources/webgl-texture-view.ts +28 -0
  159. package/src/adapter/resources/webgl-texture.ts +9 -2
  160. package/src/adapter/resources/webgl-transform-feedback.ts +2 -7
  161. package/src/adapter/resources/webgl-vertex-array.ts +4 -3
  162. package/src/adapter/webgl-canvas-context.ts +6 -4
  163. package/src/adapter/webgl-device.ts +94 -90
  164. package/src/classic/accessor.ts +5 -4
  165. package/src/classic/clear.ts +12 -6
  166. package/src/classic/copy-and-blit.ts +11 -4
  167. package/src/classic/format-utils.ts +2 -1
  168. package/src/classic/typed-array-utils.ts +3 -7
  169. package/src/context/debug/spector.ts +9 -6
  170. package/src/context/debug/webgl-developer-tools.ts +27 -14
  171. package/src/context/{context → helpers}/create-browser-context.ts +3 -2
  172. package/src/context/helpers/webgl-context-data.ts +31 -0
  173. package/src/context/helpers/webgl-extensions.ts +17 -0
  174. package/src/context/parameters/unified-parameter-api.ts +2 -1
  175. package/src/context/parameters/webgl-parameter-tables.ts +69 -32
  176. package/src/context/state-tracker/deep-array-equal.ts +2 -1
  177. package/src/context/state-tracker/track-context-state.ts +11 -6
  178. package/src/context/state-tracker/with-parameters.ts +7 -2
  179. package/src/index.ts +3 -2
  180. package/src/types.ts +2 -1
  181. package/src/context/context/context-data.ts +0 -44
@@ -1,4 +1,5 @@
1
- // luma.gl, MIT license
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
2
3
  // Copyright (c) vis.gl contributors
3
4
 
4
5
  import {RenderPass, RenderPassProps, NumberArray, RenderPassParameters} from '@luma.gl/core';
@@ -7,6 +8,7 @@ import {GL, GLParameters} from '@luma.gl/constants';
7
8
  import {withGLParameters} from '../../context/state-tracker/with-parameters';
8
9
  import {setGLParameters} from '../../context/parameters/unified-parameter-api';
9
10
  import {pushContextState, popContextState} from '../../context/state-tracker/track-context-state';
11
+ import {WEBGLQuerySet} from './webgl-query-set';
10
12
 
11
13
  // Should collapse during minification
12
14
  const GL_DEPTH_BUFFER_BIT = 0x00000100;
@@ -45,8 +47,6 @@ export class WEBGLRenderPass extends RenderPass {
45
47
  popDebugGroup(): void {}
46
48
  insertDebugMarker(markerLabel: string): void {}
47
49
 
48
- // writeTimestamp(querySet: GPUQuerySet, queryIndex: number): void;
49
-
50
50
  // beginOcclusionQuery(queryIndex: number): void;
51
51
  // endOcclusionQuery(): void;
52
52
 
@@ -102,7 +102,17 @@ export class WEBGLRenderPass extends RenderPass {
102
102
  setGLParameters(this.device, glParameters);
103
103
  }
104
104
 
105
- // Internal
105
+ beginOcclusionQuery(queryIndex: number): void {
106
+ const webglQuerySet = this.props.occlusionQuerySet as WEBGLQuerySet;
107
+ webglQuerySet?.beginOcclusionQuery();
108
+ }
109
+
110
+ override endOcclusionQuery(): void {
111
+ const webglQuerySet = this.props.occlusionQuerySet as WEBGLQuerySet;
112
+ webglQuerySet?.endOcclusionQuery();
113
+ }
114
+
115
+ // PRIVATE
106
116
 
107
117
  /**
108
118
  * Optionally clears depth, color and stencil buffers based on parameters
@@ -133,13 +143,13 @@ export class WEBGLRenderPass extends RenderPass {
133
143
 
134
144
  // TODO - clear multiple color attachments
135
145
  // for (attachment of this.framebuffer.colorAttachments) {
136
- // this.clearColorBuffer
146
+ // this.clearColorBuffer
137
147
  // }
138
148
  }
139
149
  }
140
150
 
141
- /**
142
- * WebGL2 - clear a specific color buffer
151
+ /**
152
+ * WebGL2 - clear a specific color buffer
143
153
  */
144
154
  protected clearColorBuffer(drawBuffer: number = 0, value: NumberArray = [0, 0, 0, 0]) {
145
155
  withGLParameters(this.device.gl, {framebuffer: this.props.framebuffer}, () => {
@@ -182,4 +192,3 @@ export class WEBGLRenderPass extends RenderPass {
182
192
  // }
183
193
  // });
184
194
  }
185
-
@@ -1,4 +1,5 @@
1
- // luma.gl, MIT license
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
2
3
  // Copyright (c) vis.gl contributors
3
4
 
4
5
  import type {UniformValue, RenderPipelineProps, Binding} from '@luma.gl/core';
@@ -19,7 +20,7 @@ import {WEBGLBuffer} from './webgl-buffer';
19
20
  import {WEBGLShader} from './webgl-shader';
20
21
  import {WEBGLFramebuffer} from './webgl-framebuffer';
21
22
  import {WEBGLTexture} from './webgl-texture';
22
- // import {WEBGLVertexArray} from './webgl-vertex-array';
23
+ import {WEBGLTextureView} from './webgl-texture-view';
23
24
  import {WEBGLRenderPass} from './webgl-render-pass';
24
25
  import {WEBGLTransformFeedback} from './webgl-transform-feedback';
25
26
  import {getGLDrawMode} from '../helpers/webgl-topology-utils';
@@ -71,7 +72,10 @@ export class WEBGLRenderPipeline extends RenderPipeline {
71
72
 
72
73
  this._linkShaders();
73
74
 
75
+ log.time(0, `RenderPipeline ${this.id} - shaderLayout introspection`)();
74
76
  this.introspectedLayout = getShaderLayout(this.device.gl, this.handle);
77
+ log.timeEnd(0, `RenderPipeline ${this.id} - shaderLayout introspection`)();
78
+
75
79
  // Merge provided layout with introspected layout
76
80
  this.shaderLayout = mergeShaderLayout(this.introspectedLayout, props.shaderLayout);
77
81
 
@@ -133,7 +137,13 @@ export class WEBGLRenderPipeline extends RenderPipeline {
133
137
  }
134
138
  break;
135
139
  case 'texture':
136
- if (!(value instanceof WEBGLTexture || value instanceof WEBGLFramebuffer)) {
140
+ if (
141
+ !(
142
+ value instanceof WEBGLTextureView ||
143
+ value instanceof WEBGLTexture ||
144
+ value instanceof WEBGLFramebuffer
145
+ )
146
+ ) {
137
147
  throw new Error('texture value');
138
148
  }
139
149
  break;
@@ -148,20 +158,6 @@ export class WEBGLRenderPipeline extends RenderPipeline {
148
158
  }
149
159
  }
150
160
 
151
- /** This function is @deprecated, use uniform buffers */
152
- setUniforms(uniforms: Record<string, UniformValue>) {
153
- const {bindings} = splitUniformsAndBindings(uniforms);
154
- Object.keys(bindings).forEach(name => {
155
- log.warn(
156
- `Unsupported value "${JSON.stringify(
157
- bindings[name]
158
- )}" used in setUniforms() for key ${name}. Use setBindings() instead?`
159
- )();
160
- });
161
- // TODO - check against layout
162
- Object.assign(this.uniforms, uniforms);
163
- }
164
-
165
161
  /** @todo needed for portable model
166
162
  * @note The WebGL API is offers many ways to draw things
167
163
  * This function unifies those ways into a single call using common parameters with sane defaults
@@ -225,31 +221,6 @@ export class WEBGLRenderPipeline extends RenderPipeline {
225
221
  this._applyUniforms();
226
222
 
227
223
  const webglRenderPass = renderPass as WEBGLRenderPass;
228
- // // TODO - Use polyfilled WebGL2RenderingContext instead of ANGLE extension
229
- // if (isIndexed && isInstanced) {
230
- // // ANGLE_instanced_arrays extension
231
- // this.device.gl.drawElementsInstanced(
232
- // drawMode,
233
- // vertexCount || 0, // indexCount?
234
- // indexType,
235
- // firstVertex,
236
- // instanceCount || 0
237
- // );
238
- // // } else if (isIndexed && this.device.isWebGL2 && !isNaN(start) && !isNaN(end)) {
239
- // // this.device.gldrawRangeElements(drawMode, start, end, vertexCount, indexType, offset);
240
- // } else if (isIndexed) {
241
- // this.device.gl.drawElements(drawMode, vertexCount || 0, indexType, firstVertex); // indexCount?
242
- // } else if (isInstanced) {
243
- // this.device.gl.drawArraysInstanced(
244
- // drawMode,
245
- // firstVertex,
246
- // vertexCount || 0,
247
- // instanceCount || 0
248
- // );
249
- // } else {
250
- // this.device.gl.drawArrays(drawMode, firstVertex, vertexCount || 0);
251
- // }
252
- // });
253
224
 
254
225
  withDeviceAndGLParameters(
255
226
  this.device,
@@ -257,7 +228,6 @@ export class WEBGLRenderPipeline extends RenderPipeline {
257
228
  webglRenderPass.glParameters,
258
229
  () => {
259
230
  if (isIndexed && isInstanced) {
260
- // ANGLE_instanced_arrays extension
261
231
  this.device.gl.drawElementsInstanced(
262
232
  glDrawMode,
263
233
  vertexCount || 0, // indexCount?
@@ -291,6 +261,21 @@ export class WEBGLRenderPipeline extends RenderPipeline {
291
261
  return true;
292
262
  }
293
263
 
264
+ // DEPRECATED METHODS
265
+
266
+ override setUniformsWebGL(uniforms: Record<string, UniformValue>) {
267
+ const {bindings} = splitUniformsAndBindings(uniforms);
268
+ Object.keys(bindings).forEach(name => {
269
+ log.warn(
270
+ `Unsupported value "${JSON.stringify(
271
+ bindings[name]
272
+ )}" used in setUniforms() for key ${name}. Use setBindings() instead?`
273
+ )();
274
+ });
275
+ // TODO - check against layout
276
+ Object.assign(this.uniforms, uniforms);
277
+ }
278
+
294
279
  // PRIVATE METHODS
295
280
 
296
281
  // setAttributes(attributes: Record<string, Buffer>): void {}
@@ -309,7 +294,7 @@ export class WEBGLRenderPipeline extends RenderPipeline {
309
294
  // return;
310
295
  }
311
296
 
312
- if (!this.device.features.has('shader-status-async-webgl')) {
297
+ if (!this.device.features.has('compilation-status-async-webgl')) {
313
298
  const status = this._getLinkStatus();
314
299
  this._reportLinkStatus(status);
315
300
  return;
@@ -373,14 +358,14 @@ export class WEBGLRenderPipeline extends RenderPipeline {
373
358
  const DELAY_MS = 10; // Shader compilation is typically quite fast (with some exceptions)
374
359
 
375
360
  // If status polling is not available, we can't wait for completion. Just wait a little to minimize blocking
376
- if (!this.device.features.has('shader-status-async-webgl')) {
361
+ if (!this.device.features.has('compilation-status-async-webgl')) {
377
362
  await waitMs(DELAY_MS);
378
363
  return;
379
364
  }
380
365
 
381
366
  const {gl} = this.device;
382
367
  for (;;) {
383
- const complete = gl.getProgramParameter(this.handle, GL.COMPLETION_STATUS);
368
+ const complete = gl.getProgramParameter(this.handle, GL.COMPLETION_STATUS_KHR);
384
369
  if (complete) {
385
370
  return;
386
371
  }
@@ -453,11 +438,19 @@ export class WEBGLRenderPipeline extends RenderPipeline {
453
438
  break;
454
439
 
455
440
  case 'texture':
456
- if (!(value instanceof WEBGLTexture || value instanceof WEBGLFramebuffer)) {
441
+ if (
442
+ !(
443
+ value instanceof WEBGLTextureView ||
444
+ value instanceof WEBGLTexture ||
445
+ value instanceof WEBGLFramebuffer
446
+ )
447
+ ) {
457
448
  throw new Error('texture');
458
449
  }
459
450
  let texture: WEBGLTexture;
460
- if (value instanceof WEBGLTexture) {
451
+ if (value instanceof WEBGLTextureView) {
452
+ texture = value.texture;
453
+ } else if (value instanceof WEBGLTexture) {
461
454
  texture = value;
462
455
  } else if (
463
456
  value instanceof WEBGLFramebuffer &&
@@ -1,4 +1,5 @@
1
- // luma.gl, MIT license
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
2
3
  // Copyright (c) vis.gl contributors
3
4
 
4
5
  import {Sampler, SamplerProps} from '@luma.gl/core';
@@ -1,4 +1,5 @@
1
- // luma.gl, MIT license
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
2
3
  // Copyright (c) vis.gl contributors
3
4
 
4
5
  import {Shader, ShaderProps, CompilerMessage, log} from '@luma.gl/core';
@@ -48,6 +49,12 @@ export class WEBGLShader extends Shader {
48
49
  return parseShaderCompilerLog(log);
49
50
  }
50
51
 
52
+ override getTranslatedSource(): string | null {
53
+ const extensions = this.device.getExtension('WEBGL_debug_shaders');
54
+ const ext = extensions.WEBGL_debug_shaders;
55
+ return ext?.getTranslatedShaderSource(this.handle);
56
+ }
57
+
51
58
  // PRIVATE METHODS
52
59
 
53
60
  /** Compile a shader and get compilation status */
@@ -67,7 +74,7 @@ export class WEBGLShader extends Shader {
67
74
  }
68
75
 
69
76
  // Sync case - slower, but advantage is that it throws in the constructor, making break on error more useful
70
- if (!this.device.features.has('shader-status-async-webgl')) {
77
+ if (!this.device.features.has('compilation-status-async-webgl')) {
71
78
  this._getCompilationStatus();
72
79
  if (this.compilationStatus === 'error') {
73
80
  throw new Error(`GLSL compilation errors in ${this.props.stage} shader ${this.props.id}`);
@@ -93,14 +100,14 @@ export class WEBGLShader extends Shader {
93
100
  const DELAY_MS = 10; // Shader compilation is typically quite fast (with some exceptions)
94
101
 
95
102
  // If status polling is not available, we can't wait for completion. Just wait a little to minimize blocking
96
- if (!this.device.features.has('shader-status-async-webgl')) {
103
+ if (!this.device.features.has('compilation-status-async-webgl')) {
97
104
  await waitMs(DELAY_MS);
98
105
  return;
99
106
  }
100
107
 
101
108
  const {gl} = this.device;
102
109
  for (;;) {
103
- const complete = gl.getShaderParameter(this.handle, GL.COMPLETION_STATUS);
110
+ const complete = gl.getShaderParameter(this.handle, GL.COMPLETION_STATUS_KHR);
104
111
  if (complete) {
105
112
  return;
106
113
  }
@@ -112,7 +119,7 @@ export class WEBGLShader extends Shader {
112
119
  * Get the shader compilation status
113
120
  * TODO - Load log even when no error reported, to catch warnings?
114
121
  * https://gamedev.stackexchange.com/questions/30429/how-to-detect-glsl-warnings
115
- */
122
+ */
116
123
  protected _getCompilationStatus() {
117
124
  this.compilationStatus = this.device.gl.getShaderParameter(this.handle, GL.COMPILE_STATUS)
118
125
  ? 'success'
@@ -0,0 +1,28 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ import type {Device, TextureViewProps} from '@luma.gl/core';
6
+ // import {decodeTextureFormat} from '@luma.gl/core';
7
+ import {TextureView, Texture} from '@luma.gl/core';
8
+
9
+ import {WebGLDevice} from '../webgl-device';
10
+ import {WEBGLTexture} from './webgl-texture';
11
+
12
+ export class WEBGLTextureView extends TextureView {
13
+ readonly device: WebGLDevice;
14
+ readonly gl: WebGL2RenderingContext;
15
+ readonly handle: WebGLTexture;
16
+
17
+ readonly texture: WEBGLTexture;
18
+
19
+ constructor(device: Device, props: TextureViewProps & {texture: WEBGLTexture}) {
20
+ super(device, {...Texture.defaultProps, ...props});
21
+
22
+ this.device = device as WebGLDevice;
23
+ this.gl = this.device.gl;
24
+ this.handle = null;
25
+
26
+ this.texture = props.texture;
27
+ }
28
+ }
@@ -1,4 +1,5 @@
1
- // luma.gl, MIT license
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
2
3
  // Copyright (c) vis.gl contributors
3
4
 
4
5
  // Texture class.
@@ -26,6 +27,7 @@ import {convertSamplerParametersToWebGL} from '../converters/sampler-parameters'
26
27
  import {WebGLDevice} from '../webgl-device';
27
28
  import {WEBGLBuffer} from './webgl-buffer';
28
29
  import {WEBGLSampler} from './webgl-sampler';
30
+ import {WEBGLTextureView} from './webgl-texture-view';
29
31
 
30
32
  export type WEBGLTextureProps = TextureProps & {
31
33
  /** @deprecated use props.sampler */
@@ -151,9 +153,11 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
151
153
  readonly gl: WebGL2RenderingContext;
152
154
  readonly handle: WebGLTexture;
153
155
 
154
- /** Sampler object (currently unused) */
156
+ // (TODO - currently unused in WebGL, but WebGL 2 does support sampler objects) */
155
157
  sampler: WEBGLSampler = undefined;
156
158
 
159
+ view: WEBGLTextureView = undefined;
160
+
157
161
  // data;
158
162
 
159
163
  glFormat: GL = undefined;
@@ -314,6 +318,9 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
314
318
  this.setSampler(props.sampler);
315
319
  this._setSamplerParameters(parameters);
316
320
 
321
+ // @ts-ignore
322
+ this.view = new WEBGLTextureView(this.device, {...this.props, texture: this});
323
+
317
324
  if (mipmaps) {
318
325
  this.generateMipmap();
319
326
  }
@@ -2,7 +2,7 @@ import type {PrimitiveTopology, ShaderLayout, TransformFeedbackProps} from '@lum
2
2
  import {log, TransformFeedback, Buffer, BufferRange} from '@luma.gl/core';
3
3
  import {GL} from '@luma.gl/constants';
4
4
  import {WebGLDevice} from '../webgl-device';
5
- import {WEBGLBuffer} from '../..';
5
+ import {WEBGLBuffer} from '../../index';
6
6
  import {getGLPrimitive} from '../helpers/webgl-topology-utils';
7
7
 
8
8
  export class WEBGLTransformFeedback extends TransformFeedback {
@@ -174,12 +174,7 @@ export class WEBGLTransformFeedback extends TransformFeedback {
174
174
  }
175
175
  }
176
176
 
177
- protected _bindBuffer(
178
- index: number,
179
- buffer: Buffer,
180
- byteOffset = 0,
181
- byteLength?: number
182
- ): void {
177
+ protected _bindBuffer(index: number, buffer: Buffer, byteOffset = 0, byteLength?: number): void {
183
178
  const handle = buffer && (buffer as WEBGLBuffer).handle;
184
179
  if (!handle || byteLength === undefined) {
185
180
  this.gl.bindBufferBase(GL.TRANSFORM_FEEDBACK_BUFFER, index, handle);
@@ -1,4 +1,5 @@
1
- // luma.gl, MIT license
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
2
3
  // Copyright (c) vis.gl contributors
3
4
 
4
5
  import type {Device, Buffer, VertexArrayProps, TypedArray, NumberArray} from '@luma.gl/core';
@@ -106,7 +107,7 @@ export class WEBGLVertexArray extends VertexArray {
106
107
  }
107
108
 
108
109
  /** Set a location in vertex attributes array to a constant value, disables the location */
109
- override setConstant(location: number, value: TypedArray): void {
110
+ override setConstantWebGL(location: number, value: TypedArray): void {
110
111
  this._enable(location, false);
111
112
  this.attributes[location] = value;
112
113
  }
@@ -146,7 +147,7 @@ export class WEBGLVertexArray extends VertexArray {
146
147
  const constant = this.attributes[location];
147
148
  // A typed array means this is a constant
148
149
  if (ArrayBuffer.isView(constant)) {
149
- this.device.setConstantAttribute(location, constant);
150
+ this.device.setConstantAttributeWebGL(location, constant);
150
151
  }
151
152
  }
152
153
  }
@@ -1,4 +1,5 @@
1
- // luma.gl, MIT license
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
2
3
  // Copyright (c) vis.gl contributors
3
4
 
4
5
  import type {CanvasContextProps} from '@luma.gl/core';
@@ -6,8 +7,8 @@ import {CanvasContext} from '@luma.gl/core';
6
7
  import {WebGLDevice} from './webgl-device';
7
8
  import {WEBGLFramebuffer} from './resources/webgl-framebuffer';
8
9
 
9
- /**
10
- * A WebGL Canvas Context which manages the canvas and handles drawing buffer resizing etc
10
+ /**
11
+ * A WebGL Canvas Context which manages the canvas and handles drawing buffer resizing etc
11
12
  */
12
13
  export class WebGLCanvasContext extends CanvasContext {
13
14
  readonly device: WebGLDevice;
@@ -33,7 +34,8 @@ export class WebGLCanvasContext extends CanvasContext {
33
34
  /** Resizes and updates render targets if necessary */
34
35
  update() {
35
36
  const size = this.getPixelSize();
36
- const sizeChanged = size[0] !== this.presentationSize[0] || size[1] !== this.presentationSize[1];
37
+ const sizeChanged =
38
+ size[0] !== this.presentationSize[0] || size[1] !== this.presentationSize[1];
37
39
  if (sizeChanged) {
38
40
  this.presentationSize = size;
39
41
  this.resize();