@tolokoban/tgd 2.0.135 → 2.0.137

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 (68) hide show
  1. package/README.md +19 -0
  2. package/lib/dist/context/context.d.ts +4 -1
  3. package/lib/dist/context/context.d.ts.map +1 -1
  4. package/lib/dist/context/context.js +22 -13
  5. package/lib/dist/context/extensions.d.ts +174 -0
  6. package/lib/dist/context/extensions.d.ts.map +1 -0
  7. package/lib/dist/context/extensions.js +41 -0
  8. package/lib/dist/controller/camera/orbit.js +3 -3
  9. package/lib/dist/dataset/dataset.d.ts +2 -0
  10. package/lib/dist/dataset/dataset.d.ts.map +1 -1
  11. package/lib/dist/dataset/dataset.js +16 -1
  12. package/lib/dist/filter/filter.d.ts +5 -4
  13. package/lib/dist/filter/filter.d.ts.map +1 -1
  14. package/lib/dist/filter/filter.js +7 -4
  15. package/lib/dist/geometry/geometry.d.ts +2 -0
  16. package/lib/dist/geometry/geometry.d.ts.map +1 -1
  17. package/lib/dist/geometry/geometry.js +16 -2
  18. package/lib/dist/geometry/tools/index.d.ts +1 -0
  19. package/lib/dist/geometry/tools/index.d.ts.map +1 -1
  20. package/lib/dist/geometry/tools/index.js +2 -1
  21. package/lib/dist/geometry/tools/join.d.ts +8 -0
  22. package/lib/dist/geometry/tools/join.d.ts.map +1 -0
  23. package/lib/dist/geometry/tools/join.js +134 -0
  24. package/lib/dist/input/pointer.d.ts.map +1 -1
  25. package/lib/dist/input/pointer.js +6 -5
  26. package/lib/dist/material/flat-texture.d.ts +1 -1
  27. package/lib/dist/material/flat-texture.d.ts.map +1 -1
  28. package/lib/dist/material/flat-texture.js +1 -1
  29. package/lib/dist/painter/filter/filter.d.ts +1 -0
  30. package/lib/dist/painter/filter/filter.d.ts.map +1 -1
  31. package/lib/dist/painter/filter/filter.js +29 -3
  32. package/lib/dist/painter/framebuffer.d.ts.map +1 -1
  33. package/lib/dist/painter/framebuffer.js +2 -3
  34. package/lib/dist/painter/group.d.ts.map +1 -1
  35. package/lib/dist/painter/group.js +11 -4
  36. package/lib/dist/painter/overlay/overlay.d.ts.map +1 -1
  37. package/lib/dist/painter/overlay/overlay.js +8 -10
  38. package/lib/dist/painter/painter.d.ts +3 -2
  39. package/lib/dist/painter/painter.d.ts.map +1 -1
  40. package/lib/dist/painter/painter.js +13 -5
  41. package/lib/dist/painter/particles/particles.d.ts +4 -1
  42. package/lib/dist/painter/particles/particles.d.ts.map +1 -1
  43. package/lib/dist/painter/particles/particles.js +27 -6
  44. package/lib/dist/painter/program.js +4 -19
  45. package/lib/dist/texture/texture-depth.d.ts +2 -2
  46. package/lib/dist/texture/texture-depth.d.ts.map +1 -1
  47. package/lib/dist/texture/texture-depth.js +11 -13
  48. package/lib/dist/texture/texture2d.d.ts +11 -7
  49. package/lib/dist/texture/texture2d.d.ts.map +1 -1
  50. package/lib/dist/texture/texture2d.js +141 -79
  51. package/lib/dist/types/elements.d.ts +1 -0
  52. package/lib/dist/types/elements.d.ts.map +1 -1
  53. package/lib/dist/types/elements.js +10 -1
  54. package/lib/dist/utils/id.d.ts +2 -0
  55. package/lib/dist/utils/id.d.ts.map +1 -0
  56. package/lib/dist/utils/id.js +5 -0
  57. package/lib/dist/utils/index.d.ts +5 -2
  58. package/lib/dist/utils/index.d.ts.map +1 -1
  59. package/lib/dist/utils/index.js +6 -3
  60. package/lib/dist/utils/texture.d.ts +5 -0
  61. package/lib/dist/utils/texture.d.ts.map +1 -0
  62. package/lib/dist/utils/texture.js +17 -0
  63. package/lib/dist/utils/value.d.ts +12 -0
  64. package/lib/dist/utils/value.d.ts.map +1 -0
  65. package/lib/dist/utils/value.js +31 -0
  66. package/lib/dist/version.d.ts +1 -1
  67. package/lib/dist/version.js +1 -1
  68. package/package.json +2 -2
package/README.md CHANGED
@@ -20,6 +20,25 @@ npm start
20
20
 
21
21
  ## Release notes
22
22
 
23
+ ### v2.0.137
24
+
25
+ - **TgdContext verbose defaults to `false`**: The `verbose` option now defaults to `false` instead of `true`, reducing console noise in production.
26
+ - **TgdContext deletion safety**: `actualPaint` now guards against painting after the context has been deleted; `delete()` cancels any pending animation frame.
27
+ - **TgdContext.isDeleted**: New getter to check whether the context has been deleted.
28
+ - **TgdPainter unique IDs**: Painter IDs are now human-readable strings (`[#0]`, `[#1]`, …) generated by the new `nextId()` utility; constructor accepts an optional `name` parameter; added `nameUniq` getter for guaranteed-unique display names.
29
+ - **TgdPainterGroup name forwarding**: Constructor now passes the `name` option to the parent `TgdPainter` constructor.
30
+ - **New utility `TgdValueWaitable<T>`**: Async-friendly value holder — call `waitUntilDefined()` to get a `Promise<T>` that resolves as soon as the value is set.
31
+ - **New utility `nextId()`**: Centralized incremental ID generator exported from `utils/id`.
32
+
33
+ ### v2.0.136
34
+
35
+ - **New TgdGeometry.join()**: Static method and standalone `tgdGeometryJoin()` function to merge multiple geometries into a single one, combining positions, normals, UVs, and elements with proper index offsetting.
36
+ - **TgdGeometry.fitElementsInTypeArray()**: New static helper that picks the smallest typed array (`Uint8Array`, `Uint16Array`, or `Uint32Array`) for a given elements array based on the maximum index value.
37
+ - **New isTgdTypeArrayForElements type guard**: Runtime check for valid element typed arrays (`Uint8Array | Uint16Array | Uint32Array`).
38
+ - **TgdDataset.get()**: New method to extract all values of a given attribute into a plain `number[]` array.
39
+ - **TgdTexture2D**: Better texture format. Only the compatible triplet of internal format, format and type are available.
40
+ - **TgdContext.extensions**: Access to all the WebGL2 extensions that are available on this hardware.
41
+
23
42
  ### v2.0.135
24
43
 
25
44
  - **New TgdPainterParticles**: Fully implemented GPU particle system using Transform Feedback with ping-pong buffers, configurable draw mode (`POINTS`, `LINES`, `TRIANGLES`), custom uniforms callback, and automatic attribute-to-varying mapping via `prefixAttribute`/`prefixVarying` options.
@@ -6,6 +6,7 @@ import { TgdEvent } from "../event";
6
6
  import { TgdPainterGroup } from "../painter/group";
7
7
  import type { TgdAnimation } from "../types/animation";
8
8
  import { Console } from "./console";
9
+ import { TgdExtensions } from "./extensions";
9
10
  import { UniformBufferObjectsManager } from "./ubo-manager";
10
11
  import { WebglParams } from "./webgl-params";
11
12
  /**
@@ -28,7 +29,6 @@ export type TgdContextOptions = WebGLContextAttributes & {
28
29
  onResize?(this: void, context: TgdContext, width: number, height: number): void;
29
30
  name?: string;
30
31
  camera?: TgdCamera;
31
- enableTextureFloatStorage?: boolean;
32
32
  /**
33
33
  * Function to initialize the context.
34
34
  *
@@ -84,6 +84,7 @@ export declare class TgdContext extends TgdPainterGroup {
84
84
  */
85
85
  static get devicePixelRatio(): number;
86
86
  readonly name: string;
87
+ readonly extensions: TgdExtensions;
87
88
  /**
88
89
  * TGD will write error and warning messages to the console
89
90
  * in case of problems and if `verbose` is set to `true`.
@@ -149,11 +150,13 @@ export declare class TgdContext extends TgdPainterGroup {
149
150
  private readonly readPixelColor;
150
151
  private readonly initialize?;
151
152
  private readonly oneTimePainters;
153
+ /** When the context has been deleted, this is `true` and you can read it with `context.isDeleted`. */
152
154
  /**
153
155
  * @param canvas The canvas to which attach a WebGL2 context.
154
156
  * @see {@link TgdContextOptions}
155
157
  */
156
158
  constructor(canvas: HTMLCanvasElement | OffscreenCanvas, options?: Readonly<TgdContextOptions>);
159
+ get isDeleted(): boolean;
157
160
  viewportExec(action: () => void, viewport: Partial<{
158
161
  x: number;
159
162
  y: number;
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/context/context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/context/context.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ import { TgdPainterGroup } from "../painter/group.js";
7
7
  import { webglLookup } from "../utils/index.js";
8
8
  import { TgdManagerAnimation } from "./animation/animation-manager.js";
9
9
  import { Console } from "./console.js";
10
+ import { TgdExtensions } from "./extensions.js";
10
11
  import { UniformBufferObjectsManager } from "./ubo-manager.js";
11
12
  import { WebglParams } from "./webgl-params.js";
12
13
  /**
@@ -36,12 +37,13 @@ export class TgdContext extends TgdPainterGroup {
36
37
  static get devicePixelRatio() {
37
38
  return globalThis.devicePixelRatio ?? 1;
38
39
  }
40
+ /** When the context has been deleted, this is `true` and you can read it with `context.isDeleted`. */
39
41
  /**
40
42
  * @param canvas The canvas to which attach a WebGL2 context.
41
43
  * @see {@link TgdContextOptions}
42
44
  */
43
45
  constructor(canvas, options = {}) {
44
- super();
46
+ super({ name: options.name });
45
47
  this.canvas = canvas;
46
48
  this.options = options;
47
49
  /**
@@ -136,6 +138,8 @@ export class TgdContext extends TgdPainterGroup {
136
138
  }
137
139
  };
138
140
  this.actualPaint = (time) => {
141
+ if (this.isDeleted)
142
+ return;
139
143
  const timeInSec = time * 1e-3;
140
144
  if (this.lastTimeInSec < 0) {
141
145
  this.lastTimeInSec = timeInSec;
@@ -158,7 +162,9 @@ export class TgdContext extends TgdPainterGroup {
158
162
  }
159
163
  this.oneTimePainters.clear();
160
164
  super.paint(timeInSec, delayInSec);
161
- if (this.animationManager.paint(timeInSec) || this.paintingIsQueued || this.isPlaying) {
165
+ if (this.animationManager.paint(timeInSec) ||
166
+ this.paintingIsQueued ||
167
+ this.isPlaying) {
162
168
  this.paintingIsOngoing = false;
163
169
  this.paint();
164
170
  }
@@ -197,14 +203,12 @@ export class TgdContext extends TgdPainterGroup {
197
203
  if (this.resolution <= 0) {
198
204
  this.resolution = TgdContext.devicePixelRatio ?? 1;
199
205
  }
200
- if (options.enableTextureFloatStorage) {
201
- gl.getExtension("EXT_color_buffer_float");
202
- }
203
206
  this.stateReset();
204
207
  return gl;
205
208
  };
206
- this.verbose = options.verbose ?? true;
209
+ this.verbose = options.verbose ?? false;
207
210
  const gl = this.createWebGLContext();
211
+ this.extensions = new TgdExtensions(gl);
208
212
  this.initialize = options.initialize;
209
213
  canvas.addEventListener("webglcontextlost", (evt) => {
210
214
  TgdConsole.debug({
@@ -235,15 +239,16 @@ export class TgdContext extends TgdPainterGroup {
235
239
  if (this.resolution <= 0) {
236
240
  this.resolution = TgdContext.devicePixelRatio ?? 1;
237
241
  }
238
- if (options.enableTextureFloatStorage) {
239
- gl.getExtension("EXT_color_buffer_float");
240
- }
241
242
  this.implementationColorReadFormat = gl.getParameter(gl.IMPLEMENTATION_COLOR_READ_FORMAT);
242
243
  this.implementationColorReadType = gl.getParameter(gl.IMPLEMENTATION_COLOR_READ_TYPE);
243
244
  this._gl = gl;
244
245
  this.observer = new ResizeObserver(() => {
245
- const width = isOffscreen(canvas) ? canvas.width : canvas.clientWidth * this.resolution;
246
- const height = isOffscreen(canvas) ? canvas.width : canvas.clientHeight * this.resolution;
246
+ const width = isOffscreen(canvas)
247
+ ? canvas.width
248
+ : canvas.clientWidth * this.resolution;
249
+ const height = isOffscreen(canvas)
250
+ ? canvas.width
251
+ : canvas.clientHeight * this.resolution;
247
252
  const { onResize } = options;
248
253
  if (onResize) {
249
254
  if (!isOffscreen(canvas)) {
@@ -274,6 +279,9 @@ export class TgdContext extends TgdPainterGroup {
274
279
  this.virtualTime = new TgdTime();
275
280
  this.console.debug(`[TgdContext/${this.name}] New:`, options);
276
281
  }
282
+ get isDeleted() {
283
+ return !!this._gl;
284
+ }
277
285
  viewportExec(action, viewport) {
278
286
  const { webglParams, camera } = this;
279
287
  const savedWidth = this.width;
@@ -477,7 +485,7 @@ export class TgdContext extends TgdPainterGroup {
477
485
  * @param restorationDelayInMilliseconds Time, in milliseconds, before the context is restored.
478
486
  */
479
487
  loseContext(restorationDelayInMilliseconds = 1000) {
480
- const ext = this.gl.getExtension("WEBGL_lose_context");
488
+ const ext = this.extensions.WEBGL_lose_context;
481
489
  if (ext) {
482
490
  ext.loseContext();
483
491
  globalThis.setTimeout(() => {
@@ -543,6 +551,7 @@ export class TgdContext extends TgdPainterGroup {
543
551
  super.delete();
544
552
  this._gl = null;
545
553
  this.console.debug(`[TgdContext/${this.name}] Delete`);
554
+ globalThis.cancelAnimationFrame(this.requestAnimationFrame);
546
555
  }
547
556
  stateReset() {
548
557
  const { gl } = this;
@@ -605,4 +614,4 @@ TgdContext.incrementalId = 1;
605
614
  function isOffscreen(canvas) {
606
615
  return canvas instanceof OffscreenCanvas;
607
616
  }
608
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2NvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFrQixvQkFBb0IsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUNsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ3ZDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDdEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUVuQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ25DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUVsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ3RDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFBO0FBQ25FLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDbkMsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzNELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQWtENUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBQ0gsTUFBTSxPQUFPLFVBQVcsU0FBUSxlQUFlO0lBRTNDOzs7O09BSUc7SUFDSSxNQUFNLEtBQUssZ0JBQWdCO1FBQzlCLE9BQU8sVUFBVSxDQUFDLGdCQUFnQixJQUFJLENBQUMsQ0FBQTtJQUMzQyxDQUFDO0lBNkVEOzs7T0FHRztJQUNILFlBQ29CLE1BQTJDLEVBQzNDLFVBQXVDLEVBQUU7UUFFekQsS0FBSyxFQUFFLENBQUE7UUFIUyxXQUFNLEdBQU4sTUFBTSxDQUFxQztRQUMzQyxZQUFPLEdBQVAsT0FBTyxDQUFrQztRQWhGN0Q7OztXQUdHO1FBQ0ksWUFBTyxHQUFHLElBQUksQ0FBQTtRQUNMLFlBQU8sR0FB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
617
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2NvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFrQixvQkFBb0IsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUNsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ3ZDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDdEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUduQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ25DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUVsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ3RDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFBO0FBQ25FLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDbkMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUM1QyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDM0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBc0Q1Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxNQUFNLE9BQU8sVUFBVyxTQUFRLGVBQWU7SUFFOUM7Ozs7T0FJRztJQUNJLE1BQU0sS0FBSyxnQkFBZ0I7UUFDakMsT0FBTyxVQUFVLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxDQUFBO0lBQ3hDLENBQUM7SUFnRkQsc0dBQXNHO0lBRXRHOzs7T0FHRztJQUNILFlBQ2lCLE1BQTJDLEVBQzNDLFVBQXVDLEVBQUU7UUFFekQsS0FBSyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFBO1FBSGIsV0FBTSxH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
@@ -0,0 +1,174 @@
1
+ export declare class TgdExtensions {
2
+ readonly gl: WebGL2RenderingContext;
3
+ /**
4
+ * Render to 32-bit float color buffers
5
+ *
6
+ * Enables rendering to textures with 32-bit floating-point components
7
+ * (R32F, RG32F, RGBA32F, R16F, RG16F, RGBA16F) as color-renderable formats in framebuffers.
8
+ */
9
+ readonly EXT_color_buffer_float: EXT_color_buffer_float | null;
10
+ /**
11
+ * Render to 16-bit float color buffers
12
+ *
13
+ * Enables rendering to textures with 16-bit half-float components
14
+ * (R16F, RG16F, RGBA16F) as color-renderable formats in framebuffers.
15
+ */
16
+ readonly EXT_color_buffer_half_float: EXT_color_buffer_half_float | null;
17
+ /**
18
+ * Blending with float textures
19
+ *
20
+ * Allows blending operations on framebuffer attachments that use
21
+ * 32-bit or 16-bit floating-point formats. Without this extension,
22
+ * blending is disabled when rendering to float targets.
23
+ */
24
+ readonly EXT_float_blend: EXT_float_blend | null;
25
+ /**
26
+ * BC6H/BC7 compressed texture formats
27
+ *
28
+ * Exposes BC6H (HDR) and BC7 (high-quality LDR) block compression
29
+ * formats, commonly used on desktop GPUs for high-fidelity textures
30
+ * with a fixed 8:1 compression ratio.
31
+ */
32
+ readonly EXT_texture_compression_bptc: EXT_texture_compression_bptc | null;
33
+ /**
34
+ * BC4/BC5 compressed texture formats
35
+ *
36
+ * Exposes BC4 (single-channel) and BC5 (two-channel) block compression
37
+ * formats, ideal for normal maps and grayscale data where only one or
38
+ * two components are needed.
39
+ */
40
+ readonly EXT_texture_compression_rgtc: EXT_texture_compression_rgtc | null;
41
+ /**
42
+ * Anisotropic texture filtering
43
+ *
44
+ * Improves texture quality at oblique viewing angles by sampling
45
+ * more texels along the axis of maximum distortion. Controlled via
46
+ * the TEXTURE_MAX_ANISOTROPY_EXT parameter on texture objects.
47
+ */
48
+ readonly EXT_texture_filter_anisotropic: EXT_texture_filter_anisotropic | null;
49
+ /**
50
+ * Non-blocking shader compilation status query
51
+ *
52
+ * Allows querying COMPLETION_STATUS_KHR to check if a shader or
53
+ * program has finished compiling/linking without blocking the main
54
+ * thread, enabling asynchronous shader pipelines.
55
+ */
56
+ readonly KHR_parallel_shader_compile: KHR_parallel_shader_compile | null;
57
+ /**
58
+ * Linear filtering for 32-bit float textures
59
+ *
60
+ * Enables LINEAR and LINEAR_MIPMAP_* filtering modes on textures
61
+ * with 32-bit float components. Without this extension, only NEAREST
62
+ * filtering is guaranteed for float textures.
63
+ */
64
+ readonly OES_texture_float_linear: OES_texture_float_linear | null;
65
+ /**
66
+ * Linear filtering for 16-bit half-float textures
67
+ *
68
+ * Enables LINEAR and LINEAR_MIPMAP_* filtering modes on textures
69
+ * with 16-bit half-float components. Without this extension, only
70
+ * NEAREST filtering is guaranteed for half-float textures.
71
+ */
72
+ readonly OES_texture_half_float_linear: OES_texture_half_float_linear | null;
73
+ /**
74
+ * Multi-view rendering for VR/AR
75
+ *
76
+ * Renders to multiple views (e.g. left/right eye) in a single draw
77
+ * call using gl_ViewID_OVR in the shader, significantly reducing
78
+ * CPU overhead for stereoscopic rendering.
79
+ */
80
+ readonly OVR_multiview2: OVR_multiview2 | null;
81
+ /**
82
+ * Render to 32-bit float color buffers (WebGL1 variant)
83
+ *
84
+ * WebGL1-era extension that enables float color-renderable formats.
85
+ * In WebGL2 contexts, prefer EXT_color_buffer_float instead; this
86
+ * is kept for broader compatibility.
87
+ */
88
+ readonly WEBGL_color_buffer_float: WEBGL_color_buffer_float | null;
89
+ /**
90
+ * ASTC compressed texture formats
91
+ *
92
+ * Exposes Adaptive Scalable Texture Compression with variable block
93
+ * sizes (4x4 to 12x12), supporting LDR and HDR content. Widely
94
+ * available on mobile GPUs (ARM Mali, Qualcomm Adreno).
95
+ */
96
+ readonly WEBGL_compressed_texture_astc: WEBGL_compressed_texture_astc | null;
97
+ /**
98
+ * ETC2/EAC compressed texture formats
99
+ *
100
+ * Exposes ETC2 (RGB/RGBA) and EAC (1-2 channel) compression formats
101
+ * mandated by OpenGL ES 3.0. Guaranteed on conformant mobile GPUs
102
+ * but may use software decompression on desktop.
103
+ */
104
+ readonly WEBGL_compressed_texture_etc: WEBGL_compressed_texture_etc | null;
105
+ /**
106
+ * ETC1 compressed texture format
107
+ *
108
+ * Exposes the legacy ETC1 RGB-only compression format. Superseded
109
+ * by ETC2 but still useful for older Android devices that lack
110
+ * OpenGL ES 3.0 support.
111
+ */
112
+ readonly WEBGL_compressed_texture_etc1: WEBGL_compressed_texture_etc1 | null;
113
+ /**
114
+ * PVRTC compressed texture formats (iOS)
115
+ *
116
+ * Exposes PowerVR Texture Compression (2bpp and 4bpp, RGB/RGBA)
117
+ * used primarily on Apple iOS devices with Imagination Technologies
118
+ * GPUs. Not available on most Android or desktop hardware.
119
+ */
120
+ readonly WEBGL_compressed_texture_pvrtc: WEBGL_compressed_texture_pvrtc | null;
121
+ /**
122
+ * S3TC/DXT compressed texture formats
123
+ *
124
+ * Exposes DXT1 (BC1), DXT3 (BC2), and DXT5 (BC3) block compression
125
+ * formats. Ubiquitous on desktop GPUs (NVIDIA, AMD, Intel) but
126
+ * rarely supported on mobile.
127
+ */
128
+ readonly WEBGL_compressed_texture_s3tc: WEBGL_compressed_texture_s3tc | null;
129
+ /**
130
+ * S3TC compressed textures with sRGB encoding
131
+ *
132
+ * Same as WEBGL_compressed_texture_s3tc but with sRGB color space
133
+ * decoding, enabling hardware gamma-correct sampling without
134
+ * manual conversion in the shader.
135
+ */
136
+ readonly WEBGL_compressed_texture_s3tc_srgb: WEBGL_compressed_texture_s3tc_srgb | null;
137
+ /**
138
+ * Expose GPU vendor/renderer strings
139
+ *
140
+ * Provides UNMASKED_VENDOR_WEBGL and UNMASKED_RENDERER_WEBGL
141
+ * parameters for getParameter(), revealing the actual GPU driver
142
+ * identity. Useful for analytics and GPU-specific workarounds.
143
+ */
144
+ readonly WEBGL_debug_renderer_info: WEBGL_debug_renderer_info | null;
145
+ /**
146
+ * Access translated shader source
147
+ *
148
+ * Exposes getTranslatedShaderSource() to retrieve the platform-
149
+ * specific shader code (e.g. HLSL, Metal) that the driver actually
150
+ * compiles, useful for debugging shader translation issues.
151
+ */
152
+ readonly WEBGL_debug_shaders: WEBGL_debug_shaders | null;
153
+ /**
154
+ * Simulate context loss/restore for testing
155
+ *
156
+ * Provides loseContext() and restoreContext() methods to manually
157
+ * trigger WebGL context loss and restoration events, enabling
158
+ * robust testing of resource recovery logic.
159
+ */
160
+ readonly WEBGL_lose_context: WEBGL_lose_context | null;
161
+ /**
162
+ * Batch multiple draw calls into one
163
+ *
164
+ * Provides multiDrawArrays and multiDrawElements to submit multiple
165
+ * draw commands in a single API call, reducing driver overhead when
166
+ * rendering many independent meshes with the same state.
167
+ */
168
+ readonly WEBGL_multi_draw: WEBGL_multi_draw | null;
169
+ private readonly logs;
170
+ constructor(gl: WebGL2RenderingContext);
171
+ activate(extensionName: string): any;
172
+ debug(): void;
173
+ }
174
+ //# sourceMappingURL=extensions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extensions.d.ts","sourceRoot":"","sources":["../../src/context/extensions.ts"],"names":[],"mappings":"AAAA,qBAAa,aAAa;aA0KM,EAAE,EAAE,sBAAsB;IAzKtD;;;;;OAKG;IACH,SAAgB,sBAAsB,EAAE,sBAAsB,GAAG,IAAI,CAAA;IACrE;;;;;OAKG;IACH,SAAgB,2BAA2B,EAAE,2BAA2B,GAAG,IAAI,CAAA;IAC/E;;;;;;OAMG;IACH,SAAgB,eAAe,EAAE,eAAe,GAAG,IAAI,CAAA;IACvD;;;;;;OAMG;IACH,SAAgB,4BAA4B,EAAE,4BAA4B,GAAG,IAAI,CAAA;IACjF;;;;;;OAMG;IACH,SAAgB,4BAA4B,EAAE,4BAA4B,GAAG,IAAI,CAAA;IACjF;;;;;;OAMG;IACH,SAAgB,8BAA8B,EAAE,8BAA8B,GAAG,IAAI,CAAA;IACrF;;;;;;OAMG;IACH,SAAgB,2BAA2B,EAAE,2BAA2B,GAAG,IAAI,CAAA;IAC/E;;;;;;OAMG;IACH,SAAgB,wBAAwB,EAAE,wBAAwB,GAAG,IAAI,CAAA;IACzE;;;;;;OAMG;IACH,SAAgB,6BAA6B,EAAE,6BAA6B,GAAG,IAAI,CAAA;IACnF;;;;;;OAMG;IACH,SAAgB,cAAc,EAAE,cAAc,GAAG,IAAI,CAAA;IACrD;;;;;;OAMG;IACH,SAAgB,wBAAwB,EAAE,wBAAwB,GAAG,IAAI,CAAA;IACzE;;;;;;OAMG;IACH,SAAgB,6BAA6B,EAAE,6BAA6B,GAAG,IAAI,CAAA;IACnF;;;;;;OAMG;IACH,SAAgB,4BAA4B,EAAE,4BAA4B,GAAG,IAAI,CAAA;IACjF;;;;;;OAMG;IACH,SAAgB,6BAA6B,EAAE,6BAA6B,GAAG,IAAI,CAAA;IACnF;;;;;;OAMG;IACH,SAAgB,8BAA8B,EAAE,8BAA8B,GAAG,IAAI,CAAA;IACrF;;;;;;OAMG;IACH,SAAgB,6BAA6B,EAAE,6BAA6B,GAAG,IAAI,CAAA;IACnF;;;;;;OAMG;IACH,SAAgB,kCAAkC,EAAE,kCAAkC,GAAG,IAAI,CAAA;IAC7F;;;;;;OAMG;IACH,SAAgB,yBAAyB,EAAE,yBAAyB,GAAG,IAAI,CAAA;IAC3E;;;;;;OAMG;IACH,SAAgB,mBAAmB,EAAE,mBAAmB,GAAG,IAAI,CAAA;IAC/D;;;;;;OAMG;IACH,SAAgB,kBAAkB,EAAE,kBAAkB,GAAG,IAAI,CAAA;IAC7D;;;;;;OAMG;IACH,SAAgB,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAA;IAEzD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA4C;gBAErC,EAAE,EAAE,sBAAsB;IAgDtD,QAAQ,CAAC,aAAa,EAAE,MAAM;IAS9B,KAAK;CAKR"}
@@ -0,0 +1,41 @@
1
+ export class TgdExtensions {
2
+ constructor(gl) {
3
+ this.gl = gl;
4
+ this.logs = [];
5
+ this.EXT_color_buffer_float = this.activate("EXT_color_buffer_float");
6
+ this.EXT_color_buffer_half_float = this.activate("EXT_color_buffer_half_float");
7
+ this.EXT_float_blend = this.activate("EXT_float_blend");
8
+ this.EXT_texture_compression_bptc = this.activate("EXT_texture_compression_bptc");
9
+ this.EXT_texture_compression_rgtc = this.activate("EXT_texture_compression_rgtc");
10
+ this.EXT_texture_filter_anisotropic = this.activate("EXT_texture_filter_anisotropic");
11
+ this.KHR_parallel_shader_compile = this.activate("KHR_parallel_shader_compile");
12
+ this.OES_texture_float_linear = this.activate("OES_texture_float_linear");
13
+ this.OES_texture_half_float_linear = this.activate("OES_texture_half_float_linear");
14
+ this.OVR_multiview2 = this.activate("OVR_multiview2");
15
+ this.WEBGL_color_buffer_float = this.activate("WEBGL_color_buffer_float");
16
+ this.WEBGL_compressed_texture_astc = this.activate("WEBGL_compressed_texture_astc");
17
+ this.WEBGL_compressed_texture_etc = this.activate("WEBGL_compressed_texture_etc");
18
+ this.WEBGL_compressed_texture_etc1 = this.activate("WEBGL_compressed_texture_etc1");
19
+ this.WEBGL_compressed_texture_pvrtc = this.activate("WEBGL_compressed_texture_pvrtc");
20
+ this.WEBGL_compressed_texture_s3tc = this.activate("WEBGL_compressed_texture_s3tc");
21
+ this.WEBGL_compressed_texture_s3tc_srgb = this.activate("WEBGL_compressed_texture_s3tc_srgb");
22
+ this.WEBGL_debug_renderer_info = this.activate("WEBGL_debug_renderer_info");
23
+ this.WEBGL_debug_shaders = this.activate("WEBGL_debug_shaders");
24
+ this.WEBGL_lose_context = this.activate("WEBGL_lose_context");
25
+ this.WEBGL_multi_draw = this.activate("WEBGL_multi_draw");
26
+ }
27
+ activate(extensionName) {
28
+ const ext = this.gl.getExtension(extensionName);
29
+ this.logs.push([
30
+ `WebGL2 extension %c${extensionName}%c: %c${ext ? "ENABLED" : "DISABLED"}`,
31
+ ["font-weight:900", "font-weight:300", ext ? "color:#0f0" : "color:#f00"],
32
+ ]);
33
+ return ext;
34
+ }
35
+ debug() {
36
+ for (const [caption, styles] of this.logs) {
37
+ console.debug(caption, ...styles);
38
+ }
39
+ }
40
+ }
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZW5zaW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2V4dGVuc2lvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLGFBQWE7SUEwS3RCLFlBQTRCLEVBQTBCO1FBQTFCLE9BQUUsR0FBRixFQUFFLENBQXdCO1FBRnJDLFNBQUksR0FBMEMsRUFBRSxDQUFBO1FBRzdELElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLHdCQUF3QixDQUFrQyxDQUFBO1FBQ3RHLElBQUksQ0FBQywyQkFBMkIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUM1Qyw2QkFBNkIsQ0FDTSxDQUFBO1FBQ3ZDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBMkIsQ0FBQTtRQUNqRixJQUFJLENBQUMsNEJBQTRCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FDN0MsOEJBQThCLENBQ00sQ0FBQTtRQUN4QyxJQUFJLENBQUMsNEJBQTRCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FDN0MsOEJBQThCLENBQ00sQ0FBQTtRQUN4QyxJQUFJLENBQUMsOEJBQThCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FDL0MsZ0NBQWdDLENBQ00sQ0FBQTtRQUMxQyxJQUFJLENBQUMsMkJBQTJCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FDNUMsNkJBQTZCLENBQ00sQ0FBQTtRQUN2QyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQywwQkFBMEIsQ0FBb0MsQ0FBQTtRQUM1RyxJQUFJLENBQUMsNkJBQTZCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FDOUMsK0JBQStCLENBQ00sQ0FBQTtRQUN6QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQTBCLENBQUE7UUFDOUUsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsMEJBQTBCLENBQW9DLENBQUE7UUFDNUcsSUFBSSxDQUFDLDZCQUE2QixHQUFHLElBQUksQ0FBQyxRQUFRLENBQzlDLCtCQUErQixDQUNNLENBQUE7UUFDekMsSUFBSSxDQUFDLDRCQUE0QixHQUFHLElBQUksQ0FBQyxRQUFRLENBQzdDLDhCQUE4QixDQUNNLENBQUE7UUFDeEMsSUFBSSxDQUFDLDZCQUE2QixHQUFHLElBQUksQ0FBQyxRQUFRLENBQzlDLCtCQUErQixDQUNNLENBQUE7UUFDekMsSUFBSSxDQUFDLDhCQUE4QixHQUFHLElBQUksQ0FBQyxRQUFRLENBQy9DLGdDQUFnQyxDQUNNLENBQUE7UUFDMUMsSUFBSSxDQUFDLDZCQUE2QixHQUFHLElBQUksQ0FBQyxRQUFRLENBQzlDLCtCQUErQixDQUNNLENBQUE7UUFDekMsSUFBSSxDQUFDLGtDQUFrQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQ25ELG9DQUFvQyxDQUNNLENBQUE7UUFDOUMsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsMkJBQTJCLENBQXFDLENBQUE7UUFDL0csSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQStCLENBQUE7UUFDN0YsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQThCLENBQUE7UUFDMUYsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQTRCLENBQUE7SUFDeEYsQ0FBQztJQUVELFFBQVEsQ0FBQyxhQUFxQjtRQUMxQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNYLHNCQUFzQixhQUFhLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRTtZQUMxRSxDQUFDLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7U0FDNUUsQ0FBQyxDQUFBO1FBQ0YsT0FBTyxHQUFHLENBQUE7SUFDZCxDQUFDO0lBRUQsS0FBSztRQUNELEtBQUssTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDeEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQTtRQUNyQyxDQUFDO0lBQ0wsQ0FBQztDQUNKIn0=