textmode.js 0.7.1 → 0.8.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/textmode.esm.js +2042 -2108
- package/dist/textmode.umd.js +16 -16
- package/dist/types/Textmode.d.ts +11 -11
- package/dist/types/errors/index.d.ts +1 -1
- package/dist/types/index.d.ts +11 -3
- package/dist/types/rendering/webgl/core/Framebuffer.d.ts +0 -6
- package/dist/types/rendering/webgl/core/Renderer.d.ts +7 -6
- package/dist/types/rendering/webgl/core/interfaces/IFramebuffer.d.ts +6 -6
- package/dist/types/rendering/webgl/core/interfaces/IRenderer.d.ts +3 -3
- package/dist/types/rendering/webgl/index.d.ts +2 -2
- package/dist/types/rendering/webgl/pipeline/MaterialBatchPipeline.d.ts +1 -1
- package/dist/types/textmode/Canvas.d.ts +2 -2
- package/dist/types/textmode/Grid.d.ts +32 -3
- package/dist/types/textmode/Textmodifier.d.ts +14 -72
- package/dist/types/textmode/conversion/ConversionManager.d.ts +73 -0
- package/dist/types/textmode/conversion/ConversionRegistry.d.ts +61 -18
- package/dist/types/textmode/conversion/index.d.ts +3 -1
- package/dist/types/textmode/filters/FilterManager.d.ts +0 -4
- package/dist/types/textmode/filters/index.d.ts +1 -1
- package/dist/types/textmode/interfaces/ITextmodifier.d.ts +165 -50
- package/dist/types/textmode/layers/Layer2DCompositor.d.ts +13 -20
- package/dist/types/textmode/layers/LayerManager.d.ts +31 -20
- package/dist/types/textmode/layers/TextmodeLayer.d.ts +58 -20
- package/dist/types/textmode/layers/interfaces/ILayerManager.d.ts +7 -0
- package/dist/types/textmode/layers/interfaces/ITextmodeLayer.d.ts +49 -28
- package/dist/types/textmode/layers/types.d.ts +16 -21
- package/dist/types/textmode/loadables/ITextmodeSource.d.ts +123 -0
- package/dist/types/textmode/loadables/TextmodeImage.d.ts +2 -2
- package/dist/types/textmode/loadables/TextmodeSource.d.ts +10 -118
- package/dist/types/textmode/loadables/font/CharacterExtractor.d.ts +1 -1
- package/dist/types/textmode/loadables/font/TextmodeFont.d.ts +3 -0
- package/dist/types/textmode/loadables/font/index.d.ts +2 -2
- package/dist/types/textmode/loadables/index.d.ts +0 -2
- package/dist/types/textmode/loadables/video/ITextmodeVideo.d.ts +75 -0
- package/dist/types/textmode/loadables/video/TextmodeVideo.d.ts +23 -126
- package/dist/types/textmode/loading/LoadingPhase.d.ts +26 -0
- package/dist/types/textmode/loading/LoadingScreenManager.d.ts +91 -93
- package/dist/types/textmode/loading/index.d.ts +3 -2
- package/dist/types/textmode/loading/types.d.ts +57 -57
- package/dist/types/textmode/managers/MouseManager.d.ts +24 -14
- package/dist/types/textmode/managers/TouchManager.d.ts +25 -13
- package/dist/types/textmode/mixins/index.d.ts +1 -2
- package/dist/types/textmode/mixins/interfaces/IAnimationMixin.d.ts +87 -87
- package/dist/types/textmode/mixins/interfaces/IKeyboardMixin.d.ts +128 -128
- package/dist/types/textmode/mixins/interfaces/IMouseMixin.d.ts +96 -105
- package/dist/types/textmode/mixins/interfaces/IRenderingMixin.d.ts +271 -370
- package/dist/types/textmode/mixins/interfaces/ITouchMixin.d.ts +1 -1
- package/dist/types/textmode/types.d.ts +2 -6
- package/package.json +5 -2
- package/dist/types/textmode/layers/filters/index.d.ts +0 -6
- package/dist/types/textmode/loadables/video/TextmodeVideoPreloader.d.ts +0 -29
- package/dist/types/textmode/loadables/video/types.d.ts +0 -43
- package/dist/types/textmode/mixins/FontMixin.d.ts +0 -8
- package/dist/types/textmode/mixins/interfaces/IFontMixin.d.ts +0 -46
package/dist/types/Textmode.d.ts
CHANGED
|
@@ -13,17 +13,17 @@ export declare class Textmode {
|
|
|
13
13
|
* @param opts Configuration options for the Textmodifier instance
|
|
14
14
|
* @returns A new Textmodifier instance
|
|
15
15
|
*
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
16
|
+
* @example
|
|
17
|
+
* ```javascript
|
|
18
|
+
* const t = textmode.create({ width: 800, height: 600, fontSize: 16 });
|
|
19
|
+
*
|
|
20
|
+
* t.draw(() => {
|
|
21
|
+
* t.background(0);
|
|
22
|
+
* t.char("x");
|
|
23
|
+
* t.rotateZ(t.frameCount);
|
|
24
|
+
* t.rect(10, 10);
|
|
25
|
+
* });
|
|
26
|
+
* ```
|
|
27
27
|
*/
|
|
28
28
|
static create(opts?: TextmodeOptions): Textmodifier;
|
|
29
29
|
/**
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { TextmodeError } from './Error';
|
|
2
|
-
export { TextmodeErrorHandler, errorHandler, TextmodeErrorLevel, type ErrorHandlerOptions
|
|
2
|
+
export { TextmodeErrorHandler, errorHandler, TextmodeErrorLevel, type ErrorHandlerOptions } from './ErrorHandler';
|
package/dist/types/index.d.ts
CHANGED
|
@@ -6,9 +6,17 @@ export { TextmodeCanvas } from './textmode/Canvas';
|
|
|
6
6
|
export { TextmodeGrid } from './textmode/Grid';
|
|
7
7
|
export type { TextmodeOptions } from './textmode/types';
|
|
8
8
|
export type { TextmodeFramebufferOptions } from './rendering/webgl';
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
/**
|
|
10
|
+
* All media conversion related modules and types.
|
|
11
|
+
*
|
|
12
|
+
* Responsible for converting images and videos into textmode-renderable formats,
|
|
13
|
+
* using various conversion strategies, like brightness- or edge-detection-based conversion.
|
|
14
|
+
*
|
|
15
|
+
* `textmode.js` only comes with a built-in `'brightness'`-based conversion strategy,
|
|
16
|
+
* but custom strategies can be registered via {@link TextmodeConversionManager.register}.
|
|
17
|
+
*/
|
|
18
|
+
export * as conversion from './textmode/conversion';
|
|
19
|
+
export type { TextmodePlugin, TextmodePluginAPI } from './textmode/managers/PluginManager';
|
|
12
20
|
/** All filter related modules and types. */
|
|
13
21
|
export * as filters from './textmode/filters';
|
|
14
22
|
export { TextmodeErrorLevel } from './errors/ErrorHandler';
|
|
@@ -69,13 +69,7 @@ export declare class GLFramebuffer implements IFramebuffer {
|
|
|
69
69
|
$update(source: HTMLCanvasElement | HTMLVideoElement): void;
|
|
70
70
|
resize(width: number, height: number): void;
|
|
71
71
|
readPixels(attachmentIndex: number): Uint8Array;
|
|
72
|
-
/**
|
|
73
|
-
* Begin rendering to this framebuffer.
|
|
74
|
-
*/
|
|
75
72
|
begin(): void;
|
|
76
|
-
/**
|
|
77
|
-
* End rendering to this framebuffer and restore previous state.
|
|
78
|
-
*/
|
|
79
73
|
end(): void;
|
|
80
74
|
/**
|
|
81
75
|
* Get or create the material for rendering this framebuffer.
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { GLFramebuffer } from
|
|
1
|
+
import { GLFramebuffer } from './Framebuffer';
|
|
2
2
|
import type { FramebufferOptions } from './Framebuffer';
|
|
3
|
-
import { GLShader } from
|
|
4
|
-
import { RenderState } from
|
|
3
|
+
import { GLShader } from './Shader';
|
|
4
|
+
import { RenderState } from '../state/RenderState';
|
|
5
5
|
import type { TextmodeSource } from '../../../textmode/loadables/TextmodeSource';
|
|
6
|
-
import type {
|
|
6
|
+
import type { TextmodeFont } from '../../../textmode/loadables/font/TextmodeFont';
|
|
7
|
+
import type { IRenderer } from './interfaces/IRenderer';
|
|
7
8
|
import { MaterialManager } from '../materials/MaterialManager';
|
|
8
9
|
export declare class GLRenderer implements IRenderer {
|
|
9
10
|
private _gl;
|
|
@@ -45,7 +46,7 @@ export declare class GLRenderer implements IRenderer {
|
|
|
45
46
|
$setUniform(name: string, value: any): void;
|
|
46
47
|
$setUserUniforms(uniforms: Record<string, any>): void;
|
|
47
48
|
$createFilterShader(fragmentSource: string): GLShader;
|
|
48
|
-
$image(source: GLFramebuffer | TextmodeSource, width?: number, height?: number): void;
|
|
49
|
+
$image(source: GLFramebuffer | TextmodeSource, width?: number, height?: number, activeFont?: TextmodeFont): void;
|
|
49
50
|
$quad(x: number, y: number, width: number, height: number): void;
|
|
50
51
|
$rect(width: number, height: number): void;
|
|
51
52
|
$line(x1: number, y1: number, x2: number, y2: number): void;
|
|
@@ -68,7 +69,7 @@ export declare class GLRenderer implements IRenderer {
|
|
|
68
69
|
$resetViewport(): void;
|
|
69
70
|
$flushInstances(): void;
|
|
70
71
|
$dispose(): void;
|
|
71
|
-
get context():
|
|
72
|
+
get context(): WebGL2RenderingContext;
|
|
72
73
|
get state(): RenderState;
|
|
73
74
|
get materialManager(): MaterialManager;
|
|
74
75
|
}
|
|
@@ -24,11 +24,11 @@ export interface IFramebuffer {
|
|
|
24
24
|
*
|
|
25
25
|
* Useful for binding textures for reading in shaders.
|
|
26
26
|
*
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
27
|
+
* Textmode framebuffers allocate 4 attachments by default:
|
|
28
|
+
* - 0: Character data encoded in red and green channels
|
|
29
|
+
* - 1: Character colors
|
|
30
|
+
* - 2: Cell background colors
|
|
31
|
+
* - 3: Inversion, horizontal/flip flags, and rotation encoded in red, green, blue, alpha channels
|
|
32
32
|
*/
|
|
33
33
|
readonly textures: WebGLTexture[];
|
|
34
34
|
/**
|
|
@@ -59,7 +59,7 @@ export interface IFramebuffer {
|
|
|
59
59
|
* 0. Character data and transform info<br/>
|
|
60
60
|
* 1. Character colors<br/>
|
|
61
61
|
* 2. Cell background colors<br/>
|
|
62
|
-
|
|
62
|
+
* @returns A Uint8Array containing the pixel data in RGBA format
|
|
63
63
|
*/
|
|
64
64
|
readPixels(attachmentIndex: number): Uint8Array;
|
|
65
65
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { GLFramebuffer, FramebufferOptions } from
|
|
2
|
-
import type { GLShader } from
|
|
3
|
-
import type { RenderState } from
|
|
1
|
+
import type { GLFramebuffer, FramebufferOptions } from '../Framebuffer';
|
|
2
|
+
import type { GLShader } from '../Shader';
|
|
3
|
+
import type { RenderState } from '../../state/RenderState';
|
|
4
4
|
/**
|
|
5
5
|
* Interface for the core WebGL renderer that manages the WebGL context and provides high-level rendering operations.
|
|
6
6
|
*
|
|
@@ -5,8 +5,8 @@ export * from './utils/ViewportCache';
|
|
|
5
5
|
export * from './geometries/immediate/ImmediateQuad';
|
|
6
6
|
export * from './pipeline';
|
|
7
7
|
export { GeometryType } from './types/GeometryTypes';
|
|
8
|
-
export type { IGeometry as IInstancedGeometry, UnitGeometryData, RectangleParams, LineParams, EllipseParams, ArcParams, TriangleParams, BezierCurveParams, GeometryParams } from './types/GeometryTypes';
|
|
9
|
-
export type { RenderContext
|
|
8
|
+
export type { IGeometry as IInstancedGeometry, UnitGeometryData, RectangleParams, LineParams, EllipseParams, ArcParams, TriangleParams, BezierCurveParams, GeometryParams, } from './types/GeometryTypes';
|
|
9
|
+
export type { RenderContext } from './types/RenderTypes';
|
|
10
10
|
export type { InstanceData } from './batching/InstanceData';
|
|
11
11
|
export { PackedInstanceData, InstanceAttributeLayout } from './batching/InstanceData';
|
|
12
12
|
export { InstanceBatch } from './batching/InstanceBatch';
|
|
@@ -53,7 +53,7 @@ export declare class MaterialBatchPipeline {
|
|
|
53
53
|
* Render a single batch of commands with the same material and geometry type.
|
|
54
54
|
* Uses instanced rendering for maximum efficiency.
|
|
55
55
|
*
|
|
56
|
-
|
|
56
|
+
* @param batch - Batch to render
|
|
57
57
|
*/
|
|
58
58
|
private _renderBatch;
|
|
59
59
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { TextmodeOptions } from
|
|
2
|
-
import { type RGBA } from
|
|
1
|
+
import type { TextmodeOptions } from './types';
|
|
2
|
+
import { type RGBA } from './utils/cssColor';
|
|
3
3
|
/**
|
|
4
4
|
* Manages a `HTMLCanvasElement` for textmode rendering.
|
|
5
5
|
* @ignore
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Manages the grid of
|
|
3
|
-
*
|
|
4
|
-
* Can be accessed via {@link Textmodifier.grid}.
|
|
2
|
+
* Manages the grid of each `TextmodeLayer` instance.
|
|
5
3
|
*/
|
|
6
4
|
export declare class TextmodeGrid {
|
|
7
5
|
/** The number of columns in the grid. */
|
|
@@ -22,6 +20,12 @@ export declare class TextmodeGrid {
|
|
|
22
20
|
private _cellWidth;
|
|
23
21
|
/** The height of each cell in the grid. */
|
|
24
22
|
private _cellHeight;
|
|
23
|
+
/** Tracks whether cols/rows were manually overridden. */
|
|
24
|
+
private _manualDimensionsSet;
|
|
25
|
+
/** Hooks to notify listeners when grid dimensions change. */
|
|
26
|
+
private _dimensionChangeListeners;
|
|
27
|
+
/** Updates derived metrics (width/height/offset) from current cols/rows. */
|
|
28
|
+
private _syncDerivedDimensions;
|
|
25
29
|
/**
|
|
26
30
|
* Create a new grid instance.
|
|
27
31
|
* @param canvas The canvas element used to determine the grid dimensions.
|
|
@@ -30,6 +34,18 @@ export declare class TextmodeGrid {
|
|
|
30
34
|
* @ignore
|
|
31
35
|
*/
|
|
32
36
|
constructor(canvas: HTMLCanvasElement, cellWidth: number, cellHeight: number);
|
|
37
|
+
/**
|
|
38
|
+
* Register a listener invoked whenever grid dimensions change.
|
|
39
|
+
* @param handler The callback function to invoke on dimension changes.
|
|
40
|
+
* @ignore
|
|
41
|
+
*/
|
|
42
|
+
$addOnDimensionsChange(handler: () => void): void;
|
|
43
|
+
/**
|
|
44
|
+
* Remove a previously registered dimensions change listener.
|
|
45
|
+
* @param handler The callback function to remove.
|
|
46
|
+
* @ignore
|
|
47
|
+
*/
|
|
48
|
+
$removeOnDimensionsChange(handler: () => void): void;
|
|
33
49
|
/**
|
|
34
50
|
* Reset the grid to the default number of columns and rows based on the current canvas dimensions, and the grid cell dimensions.
|
|
35
51
|
* @ignore
|
|
@@ -48,8 +64,12 @@ export declare class TextmodeGrid {
|
|
|
48
64
|
get cellHeight(): number;
|
|
49
65
|
/** Returns the number of columns in the grid. */
|
|
50
66
|
get cols(): number;
|
|
67
|
+
/** Sets the number of columns and locks grid sizing until `responsive()` is called. */
|
|
68
|
+
set cols(newCols: number);
|
|
51
69
|
/** Returns the number of rows in the grid. */
|
|
52
70
|
get rows(): number;
|
|
71
|
+
/** Sets the number of rows and locks grid sizing until `responsive()` is called. */
|
|
72
|
+
set rows(newRows: number);
|
|
53
73
|
/** Returns the total width of the grid. */
|
|
54
74
|
get width(): number;
|
|
55
75
|
/** Returns the total height of the grid. */
|
|
@@ -58,4 +78,13 @@ export declare class TextmodeGrid {
|
|
|
58
78
|
get offsetX(): number;
|
|
59
79
|
/** Returns the offset to the outer canvas borders on the y-axis when centering the grid. */
|
|
60
80
|
get offsetY(): number;
|
|
81
|
+
/**
|
|
82
|
+
* Restores responsive sizing so subsequent `t.resizeCanvas` calls recompute cols/rows.
|
|
83
|
+
*/
|
|
84
|
+
responsive(): void;
|
|
85
|
+
/**
|
|
86
|
+
* Dispose the grid and remove all listeners.
|
|
87
|
+
* @ignore
|
|
88
|
+
*/
|
|
89
|
+
$dispose(): void;
|
|
61
90
|
}
|
|
@@ -3,16 +3,14 @@ import { TextmodeFont } from './loadables/font';
|
|
|
3
3
|
import { TextmodeGrid } from './Grid';
|
|
4
4
|
import { TextmodeCanvas } from './Canvas';
|
|
5
5
|
import { TextmodeImage } from './loadables/TextmodeImage';
|
|
6
|
-
import type { TextmodeSource } from './loadables/TextmodeSource';
|
|
7
6
|
import { AnimationController } from './AnimationController';
|
|
8
7
|
import { MouseManager } from './managers/MouseManager';
|
|
9
8
|
import { KeyboardManager } from './managers/KeyboardManager';
|
|
10
9
|
import { TouchManager } from './managers/TouchManager';
|
|
11
10
|
import type { ITextmodifier } from './interfaces';
|
|
12
|
-
import type {
|
|
11
|
+
import type { GLShader } from '../rendering';
|
|
13
12
|
import type { TextmodeOptions } from './types';
|
|
14
13
|
import type { IAnimationMixin } from './mixins/interfaces/IAnimationMixin';
|
|
15
|
-
import type { IFontMixin } from './mixins/interfaces/IFontMixin';
|
|
16
14
|
import type { IRenderingMixin } from './mixins/interfaces/IRenderingMixin';
|
|
17
15
|
import type { IKeyboardMixin } from './mixins/interfaces/IKeyboardMixin';
|
|
18
16
|
import type { ITouchMixin } from './mixins/interfaces/ITouchMixin';
|
|
@@ -22,12 +20,13 @@ import { LayerManager } from './layers/LayerManager';
|
|
|
22
20
|
import type { TextmodeLayerManager } from './layers';
|
|
23
21
|
import { TextmodeFilterManager } from './filters';
|
|
24
22
|
import type { FilterName, BuiltInFilterName, BuiltInFilterParams } from './filters';
|
|
23
|
+
import { TextmodeConversionManager } from './conversion';
|
|
25
24
|
declare const Textmodifier_base: {
|
|
26
25
|
new (): {};
|
|
27
26
|
};
|
|
28
27
|
/**
|
|
29
28
|
* Manages textmode rendering on a [`HTMLCanvasElement`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement) and provides methods for drawing,
|
|
30
|
-
* font management, event handling,
|
|
29
|
+
* font management, event handling, layer management, animation control, and more. The heart of the `textmode.js` library.
|
|
31
30
|
*
|
|
32
31
|
* If the `Textmodifier` instance is created without a canvas parameter,
|
|
33
32
|
* it creates a new `HTMLCanvasElement` to draw on using the `textmode.js` drawing API.
|
|
@@ -35,21 +34,19 @@ declare const Textmodifier_base: {
|
|
|
35
34
|
*/
|
|
36
35
|
export declare class Textmodifier extends Textmodifier_base implements ITextmodifier {
|
|
37
36
|
_renderer: GLRenderer;
|
|
38
|
-
_font: TextmodeFont;
|
|
39
37
|
_canvas: TextmodeCanvas;
|
|
40
|
-
_grid: TextmodeGrid;
|
|
41
38
|
_animationController: AnimationController;
|
|
42
39
|
_mouseManager: MouseManager;
|
|
43
40
|
_touchManager: TouchManager;
|
|
44
41
|
_keyboardManager: KeyboardManager;
|
|
45
42
|
_loading: LoadingScreenManager;
|
|
46
|
-
_textmodeDrawFramebuffer: GLFramebuffer;
|
|
47
43
|
_textmodeConversionShader: GLShader;
|
|
48
|
-
_textmodeFramebuffer: GLFramebuffer;
|
|
49
44
|
_presentShader: GLShader;
|
|
50
45
|
_layerManager: TextmodeLayerManager;
|
|
51
|
-
|
|
46
|
+
_activeFont?: TextmodeFont;
|
|
47
|
+
_activeGrid?: TextmodeGrid;
|
|
52
48
|
_filterManager: TextmodeFilterManager;
|
|
49
|
+
_conversionManager: TextmodeConversionManager;
|
|
53
50
|
private _globalFilterQueue;
|
|
54
51
|
private _preFilterFramebuffer;
|
|
55
52
|
private _postFilterFramebuffer;
|
|
@@ -65,7 +62,6 @@ export declare class Textmodifier extends Textmodifier_base implements ITextmodi
|
|
|
65
62
|
private _resizeObserver?;
|
|
66
63
|
private _isOverlay;
|
|
67
64
|
private _targetCanvasImage?;
|
|
68
|
-
_sources: Set<TextmodeSource>;
|
|
69
65
|
/**
|
|
70
66
|
* Create a new Textmodifier instance.
|
|
71
67
|
* @param opts Configuration options for the Textmodifier instance.
|
|
@@ -82,79 +78,25 @@ export declare class Textmodifier extends Textmodifier_base implements ITextmodi
|
|
|
82
78
|
resizeCanvas(width: number, height: number): void;
|
|
83
79
|
destroy(): void;
|
|
84
80
|
private _performDestroy;
|
|
85
|
-
|
|
81
|
+
filter<T extends BuiltInFilterName>(name: T, params?: BuiltInFilterParams[T]): void;
|
|
82
|
+
filter(name: FilterName, params?: unknown): void;
|
|
83
|
+
loadFont(fontSource: string): Promise<TextmodeFont>;
|
|
84
|
+
fontSize(size: number): void;
|
|
85
|
+
setup(callback: () => void | Promise<void>): Promise<void>;
|
|
86
86
|
draw(callback: () => void): void;
|
|
87
87
|
windowResized(callback: () => void): void;
|
|
88
|
-
get grid(): TextmodeGrid;
|
|
88
|
+
get grid(): TextmodeGrid | undefined;
|
|
89
89
|
get font(): TextmodeFont;
|
|
90
90
|
get width(): number;
|
|
91
91
|
get height(): number;
|
|
92
92
|
get canvas(): HTMLCanvasElement;
|
|
93
|
-
get drawFramebuffer(): GLFramebuffer;
|
|
94
93
|
get isDisposed(): boolean;
|
|
95
94
|
get overlay(): TextmodeImage | undefined;
|
|
96
95
|
get loading(): LoadingScreenManager;
|
|
97
96
|
get layers(): LayerManager;
|
|
98
|
-
/**
|
|
99
|
-
* Access the filter manager for this Textmodifier instance.
|
|
100
|
-
*
|
|
101
|
-
* Use this to register custom filters that can be applied both globally
|
|
102
|
-
* (via {@link filter}) and on individual layers (via {@link TextmodeLayer.filter}).
|
|
103
|
-
* Filters only need to be registered once and are available everywhere.
|
|
104
|
-
*
|
|
105
|
-
* @example
|
|
106
|
-
* ```typescript
|
|
107
|
-
* // Register a custom filter once
|
|
108
|
-
* await t.filters.register('vignette', vignetteShader, {
|
|
109
|
-
* u_intensity: ['intensity', 0.5]
|
|
110
|
-
* });
|
|
111
|
-
*
|
|
112
|
-
* t.draw(() => {
|
|
113
|
-
* t.background(0);
|
|
114
|
-
* t.char('A');
|
|
115
|
-
* t.rect(10, 10);
|
|
116
|
-
*
|
|
117
|
-
* // Apply filter globally to final output
|
|
118
|
-
* t.filter('vignette', { intensity: 0.8 });
|
|
119
|
-
*
|
|
120
|
-
* // Or apply to a specific layer
|
|
121
|
-
* t.layers.base.filter('vignette', 0.5);
|
|
122
|
-
* });
|
|
123
|
-
* ```
|
|
124
|
-
*/
|
|
125
97
|
get filters(): TextmodeFilterManager;
|
|
126
|
-
|
|
127
|
-
* Apply a filter to the final composited output.
|
|
128
|
-
*
|
|
129
|
-
* Filters are applied after all layers are composited but before
|
|
130
|
-
* the result is presented to the canvas. Multiple filters can be
|
|
131
|
-
* queued per frame and will be applied in order.
|
|
132
|
-
*
|
|
133
|
-
* @param name The name of the filter to apply (built-in or custom)
|
|
134
|
-
* @param params Optional parameters for the filter
|
|
135
|
-
*
|
|
136
|
-
* @example
|
|
137
|
-
* ```typescript
|
|
138
|
-
* t.draw(() => {
|
|
139
|
-
* t.background(0);
|
|
140
|
-
* t.charColor(255);
|
|
141
|
-
* t.char('A');
|
|
142
|
-
* t.rect(10, 10);
|
|
143
|
-
*
|
|
144
|
-
* // Apply built-in filters
|
|
145
|
-
* t.filter('grayscale', 0.5);
|
|
146
|
-
* t.filter('invert');
|
|
147
|
-
*
|
|
148
|
-
* // Chain multiple filters
|
|
149
|
-
* t.filter('sepia', { amount: 0.3 });
|
|
150
|
-
* t.filter('threshold', 0.5);
|
|
151
|
-
* });
|
|
152
|
-
* ```
|
|
153
|
-
*/
|
|
154
|
-
filter<T extends BuiltInFilterName>(name: T, params?: BuiltInFilterParams[T]): void;
|
|
155
|
-
filter(name: FilterName, params?: unknown): void;
|
|
156
|
-
$registerSource(source: TextmodeSource): void;
|
|
98
|
+
get conversions(): TextmodeConversionManager;
|
|
157
99
|
}
|
|
158
|
-
export interface Textmodifier extends IRenderingMixin,
|
|
100
|
+
export interface Textmodifier extends IRenderingMixin, IAnimationMixin, IMouseMixin, ITouchMixin, IKeyboardMixin {
|
|
159
101
|
}
|
|
160
102
|
export {};
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type { TextmodeConversionMode, TextmodeConversionStrategy } from './ConversionRegistry';
|
|
2
|
+
/**
|
|
3
|
+
* Manages conversion strategy registration and retrieval.
|
|
4
|
+
*
|
|
5
|
+
* This class provides:
|
|
6
|
+
* - A registry for custom and built-in conversion strategies
|
|
7
|
+
* - Instance-scoped conversion strategies per Textmodifier
|
|
8
|
+
*
|
|
9
|
+
* Used for image-to-ASCII conversion modes.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* // Register a custom conversion strategy
|
|
14
|
+
* t.conversions.register({
|
|
15
|
+
* id: 'custom',
|
|
16
|
+
* createShader: (ctx) => shader,
|
|
17
|
+
* createUniforms: (ctx) => ({ u_image: ctx.source.texture })
|
|
18
|
+
* });
|
|
19
|
+
*
|
|
20
|
+
* // Use the conversion mode on an image
|
|
21
|
+
* img.conversionMode('custom');
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export declare class TextmodeConversionManager {
|
|
25
|
+
private readonly _conversionRegistry;
|
|
26
|
+
/**
|
|
27
|
+
* Create a new TextmodeConversionManager.
|
|
28
|
+
* @param renderer The WebGL renderer instance
|
|
29
|
+
* @ignore
|
|
30
|
+
*/
|
|
31
|
+
constructor();
|
|
32
|
+
/**
|
|
33
|
+
* Register a custom conversion strategy.
|
|
34
|
+
*
|
|
35
|
+
* @param strategy The conversion strategy to register
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```typescript
|
|
39
|
+
* t.conversions.register({
|
|
40
|
+
* id: 'custom',
|
|
41
|
+
* createShader: (ctx) => shader,
|
|
42
|
+
* createUniforms: (ctx) => ({ u_image: ctx.source.texture })
|
|
43
|
+
* });
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
register(strategy: TextmodeConversionStrategy): void;
|
|
47
|
+
/**
|
|
48
|
+
* Unregister a conversion strategy by its ID.
|
|
49
|
+
*
|
|
50
|
+
* @param id The conversion strategy ID to unregister
|
|
51
|
+
* @returns true if the strategy was unregistered, false if it wasn't found
|
|
52
|
+
*/
|
|
53
|
+
unregister(id: TextmodeConversionMode): boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Check if a conversion strategy with the given ID is registered.
|
|
56
|
+
*
|
|
57
|
+
* @param id The conversion strategy ID to check
|
|
58
|
+
* @returns true if the strategy exists
|
|
59
|
+
*/
|
|
60
|
+
has(id: TextmodeConversionMode): boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Get a registered conversion strategy by its ID.
|
|
63
|
+
* @param id The ID of the conversion strategy
|
|
64
|
+
* @returns The conversion strategy, or undefined if not found
|
|
65
|
+
* @ignore
|
|
66
|
+
*/
|
|
67
|
+
$get(id: TextmodeConversionMode): TextmodeConversionStrategy | undefined;
|
|
68
|
+
/**
|
|
69
|
+
* Dispose of all resources.
|
|
70
|
+
* @ignore
|
|
71
|
+
*/
|
|
72
|
+
$dispose(): void;
|
|
73
|
+
}
|
|
@@ -2,11 +2,14 @@ import type { GLShader } from '../../rendering';
|
|
|
2
2
|
import type { GLRenderer } from '../../rendering/webgl/core/Renderer';
|
|
3
3
|
import type { TextmodeFont } from '../loadables/font/TextmodeFont';
|
|
4
4
|
import type { TextmodeSource } from '../loadables/TextmodeSource';
|
|
5
|
+
/**
|
|
6
|
+
* Built-in conversion mode names provided by textmode.js
|
|
7
|
+
*/
|
|
8
|
+
export type BuiltInConversionMode = 'brightness';
|
|
5
9
|
/**
|
|
6
10
|
* Type representing the available textmode conversion modes
|
|
7
|
-
* @ignore
|
|
8
11
|
*/
|
|
9
|
-
export type TextmodeConversionMode =
|
|
12
|
+
export type TextmodeConversionMode = BuiltInConversionMode | (string & {});
|
|
10
13
|
/**
|
|
11
14
|
* Interface for the context provided to conversion strategies
|
|
12
15
|
* @ignore
|
|
@@ -29,21 +32,61 @@ export interface TextmodeConversionStrategy {
|
|
|
29
32
|
createUniforms(context: TextmodeConversionContext): Record<string, any>;
|
|
30
33
|
}
|
|
31
34
|
/**
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
* @
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
*
|
|
39
|
-
*
|
|
35
|
+
* Instance-based registry for conversion strategies.
|
|
36
|
+
*
|
|
37
|
+
* Each {@link ConversionManager} instance has its own ConversionRegistry, allowing
|
|
38
|
+
* conversion strategies to be scoped to a specific Textmodifier instance rather than registered globally.
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```typescript
|
|
42
|
+
* // Register a custom conversion strategy
|
|
43
|
+
* t.conversions.register(myCustomStrategy);
|
|
44
|
+
*
|
|
45
|
+
* // Use the conversion mode on an image
|
|
46
|
+
* img.conversionMode('myCustomMode');
|
|
47
|
+
* ```
|
|
48
|
+
*
|
|
40
49
|
* @ignore
|
|
41
50
|
*/
|
|
42
|
-
export declare
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
51
|
+
export declare class ConversionRegistry {
|
|
52
|
+
private readonly _strategies;
|
|
53
|
+
private readonly _shaderCache;
|
|
54
|
+
/**
|
|
55
|
+
* Create a new ConversionRegistry.
|
|
56
|
+
* @param renderer The WebGL renderer instance
|
|
57
|
+
*/
|
|
58
|
+
constructor();
|
|
59
|
+
/**
|
|
60
|
+
* Register a conversion strategy.
|
|
61
|
+
* @param strategy The conversion strategy to register
|
|
62
|
+
*/
|
|
63
|
+
$register(strategy: TextmodeConversionStrategy): void;
|
|
64
|
+
/**
|
|
65
|
+
* Unregister a conversion strategy by its ID.
|
|
66
|
+
*
|
|
67
|
+
* @param id The conversion strategy ID to unregister
|
|
68
|
+
* @returns true if the strategy was unregistered, false if it wasn't found
|
|
69
|
+
*/
|
|
70
|
+
$unregister(id: TextmodeConversionMode): boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Get a conversion strategy by ID.
|
|
73
|
+
* @internal
|
|
74
|
+
*/
|
|
75
|
+
$get(id: TextmodeConversionMode): TextmodeConversionStrategy | undefined;
|
|
76
|
+
/**
|
|
77
|
+
* Check if a conversion strategy with the given ID is registered.
|
|
78
|
+
*
|
|
79
|
+
* @param id The conversion strategy ID to check
|
|
80
|
+
* @returns true if the strategy exists
|
|
81
|
+
*/
|
|
82
|
+
$has(id: TextmodeConversionMode): boolean;
|
|
83
|
+
/**
|
|
84
|
+
* Dispose all resources.
|
|
85
|
+
* @internal
|
|
86
|
+
*/
|
|
87
|
+
$dispose(): void;
|
|
88
|
+
/**
|
|
89
|
+
* Register all built-in conversion strategies.
|
|
90
|
+
*/
|
|
91
|
+
private _registerBuiltInStrategies;
|
|
92
|
+
}
|
|
@@ -1 +1,3 @@
|
|
|
1
|
-
export
|
|
1
|
+
export type { BuiltInConversionMode, TextmodeConversionMode, TextmodeConversionContext, TextmodeConversionStrategy, } from './ConversionRegistry';
|
|
2
|
+
export { ConversionRegistry } from './ConversionRegistry';
|
|
3
|
+
export { TextmodeConversionManager } from './ConversionManager';
|
|
@@ -56,10 +56,6 @@ export declare class TextmodeFilterManager {
|
|
|
56
56
|
* await t.filters.register('vignette', './vignette.frag', {
|
|
57
57
|
* u_intensity: ['intensity', 0.5]
|
|
58
58
|
* });
|
|
59
|
-
*
|
|
60
|
-
* // Register with pre-compiled shader
|
|
61
|
-
* const shader = await t.createShader(vertSrc, fragSrc);
|
|
62
|
-
* await t.filters.register('custom', shader, {});
|
|
63
59
|
* ```
|
|
64
60
|
*/
|
|
65
61
|
register(id: FilterName, shader: GLShader | string, uniformDefs?: Record<string, [paramName: string, defaultValue: unknown]>): Promise<void>;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export type { FilterName, BuiltInFilterName, BuiltInFilterParams, QueuedFilter, FilterContext, TextmodeFilterStrategy } from './types';
|
|
1
|
+
export type { FilterName, BuiltInFilterName, BuiltInFilterParams, QueuedFilter, FilterContext, TextmodeFilterStrategy, } from './types';
|
|
2
2
|
export { FilterRegistry } from './FilterRegistry';
|
|
3
3
|
export { TextmodeFilterManager } from './FilterManager';
|