textmode.js 0.7.0-beta.1 → 0.7.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 +1372 -1349
- package/dist/textmode.umd.js +18 -18
- package/dist/types/index.d.ts +1 -1
- package/dist/types/textmode/layers/LayerManager.d.ts +24 -0
- package/dist/types/textmode/layers/filters/FilterRegistry.d.ts +71 -75
- package/dist/types/textmode/layers/filters/LayerFilterManager.d.ts +5 -2
- package/dist/types/textmode/layers/filters/index.d.ts +1 -2
- package/dist/types/textmode/layers/index.d.ts +1 -1
- package/package.json +1 -1
package/dist/types/index.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ export type { TextmodeFramebufferOptions } from './rendering/webgl';
|
|
|
9
9
|
export { registerConversionStrategy, unregisterConversionStrategy, getConversionStrategy, } from './textmode/conversion';
|
|
10
10
|
export type { TextmodeConversionStrategy, TextmodeConversionContext, TextmodeConversionMode, } from './textmode/conversion';
|
|
11
11
|
export type { TextmodePlugin, TextmodePluginAPI, } from './textmode/managers/PluginManager';
|
|
12
|
-
export {
|
|
12
|
+
export { FilterRegistry } from './textmode/layers';
|
|
13
13
|
export type { FilterName, BuiltInFilterName, BuiltInFilterParams, FilterContext, TextmodeFilterStrategy, } from './textmode/layers';
|
|
14
14
|
export { TextmodeErrorLevel } from './errors/ErrorHandler';
|
|
15
15
|
export { Textmode as textmode } from './Textmode';
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { GLFramebuffer } from '../../rendering';
|
|
2
2
|
import type { Textmodifier } from '../Textmodifier';
|
|
3
3
|
import { TextmodeLayer } from './TextmodeLayer';
|
|
4
|
+
import { LayerFilterManager } from './filters';
|
|
4
5
|
import type { TextmodeLayerOptions } from './types';
|
|
5
6
|
import type { ILayerManager } from './ILayerManager';
|
|
6
7
|
/**
|
|
@@ -69,6 +70,29 @@ export declare class LayerManager implements ILayerManager {
|
|
|
69
70
|
$dispose(): void;
|
|
70
71
|
get all(): readonly TextmodeLayer[];
|
|
71
72
|
get base(): TextmodeLayer;
|
|
73
|
+
/**
|
|
74
|
+
* Access the filter registry for this Textmodifier instance.
|
|
75
|
+
*
|
|
76
|
+
* Use this to define or register custom filters scoped to this instance.
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```typescript
|
|
80
|
+
* // Define a filter using the simplified API
|
|
81
|
+
* const shader = await t.createShader(vertSrc, fragSrc);
|
|
82
|
+
* t.layers.filters.define('brightness', shader, { amount: 1.0 });
|
|
83
|
+
*
|
|
84
|
+
* // Register a custom filter strategy
|
|
85
|
+
* t.layers.filters.register({
|
|
86
|
+
* id: 'custom',
|
|
87
|
+
* createShader() { return shader; },
|
|
88
|
+
* createUniforms(params, ctx) { return { ... }; }
|
|
89
|
+
* });
|
|
90
|
+
*
|
|
91
|
+
* // Use the filter
|
|
92
|
+
* t.layers.base.filter('brightness', 1.5);
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
get filters(): LayerFilterManager;
|
|
72
96
|
/**
|
|
73
97
|
* Initialize a single layer with required dependencies.
|
|
74
98
|
*/
|
|
@@ -1,87 +1,83 @@
|
|
|
1
|
+
import type { GLRenderer, GLShader } from '../../../rendering';
|
|
1
2
|
import type { TextmodeFilterStrategy, FilterName } from './types';
|
|
2
3
|
/**
|
|
3
|
-
*
|
|
4
|
+
* Instance-based registry for filter strategies.
|
|
4
5
|
*
|
|
5
|
-
*
|
|
6
|
+
* Each {@link Textmodifier} instance has its own FilterRegistry, allowing
|
|
7
|
+
* filters to be scoped to a specific instance rather than registered globally.
|
|
6
8
|
*
|
|
7
|
-
*
|
|
8
|
-
* @throws Error if a filter with the same ID is already registered
|
|
9
|
+
* Access via `t.layers.filters`.
|
|
9
10
|
*
|
|
10
11
|
* @example
|
|
11
12
|
* ```typescript
|
|
12
|
-
*
|
|
13
|
+
* // Define a simple filter with the declarative API
|
|
14
|
+
* t.layers.filters.define('blur', blurShader, { radius: 5.0 });
|
|
13
15
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* }
|
|
19
|
-
* createUniforms(params, context) {
|
|
20
|
-
* return {
|
|
21
|
-
* u_intensity: params?.intensity ?? 1.0,
|
|
22
|
-
* u_color: params?.color ?? [1, 1, 1],
|
|
23
|
-
* u_resolution: [context.width, context.height]
|
|
24
|
-
* };
|
|
25
|
-
* }
|
|
16
|
+
* // Register a custom filter strategy
|
|
17
|
+
* t.layers.filters.register({
|
|
18
|
+
* id: 'custom',
|
|
19
|
+
* createShader(ctx) { ... },
|
|
20
|
+
* createUniforms(params, ctx) { ... }
|
|
26
21
|
* });
|
|
27
22
|
*
|
|
28
|
-
* //
|
|
29
|
-
*
|
|
30
|
-
* // ... drawing code
|
|
31
|
-
* this.filter('customGlow', { intensity: 0.8, color: [1, 0.5, 0] });
|
|
32
|
-
* });
|
|
33
|
-
* ```
|
|
34
|
-
*/
|
|
35
|
-
export declare function registerFilterStrategy(strategy: TextmodeFilterStrategy): void;
|
|
36
|
-
/**
|
|
37
|
-
* Unregister a previously registered filter strategy.
|
|
38
|
-
*
|
|
39
|
-
* @param id The ID of the filter to unregister
|
|
40
|
-
* @returns true if the filter was unregistered, false if it wasn't registered
|
|
41
|
-
*
|
|
42
|
-
* @example
|
|
43
|
-
* ```typescript
|
|
44
|
-
* import { unregisterFilterStrategy } from 'textmode.js';
|
|
45
|
-
*
|
|
46
|
-
* unregisterFilterStrategy('customGlow');
|
|
47
|
-
* ```
|
|
48
|
-
*/
|
|
49
|
-
export declare function unregisterFilterStrategy(id: FilterName): boolean;
|
|
50
|
-
/**
|
|
51
|
-
* Get a registered filter strategy by its ID.
|
|
52
|
-
*
|
|
53
|
-
* @param id The ID of the filter
|
|
54
|
-
* @returns The filter strategy, or undefined if not found
|
|
55
|
-
* @internal
|
|
56
|
-
*/
|
|
57
|
-
export declare function getFilterStrategy(id: FilterName): TextmodeFilterStrategy | undefined;
|
|
58
|
-
/**
|
|
59
|
-
* Check if a filter is registered.
|
|
60
|
-
*
|
|
61
|
-
* @param id The ID of the filter to check
|
|
62
|
-
* @returns true if the filter is registered
|
|
63
|
-
*
|
|
64
|
-
* @example
|
|
65
|
-
* ```typescript
|
|
66
|
-
* import { isFilterRegistered } from 'textmode.js';
|
|
67
|
-
*
|
|
68
|
-
* if (isFilterRegistered('myFilter')) {
|
|
69
|
-
* layer.filter('myFilter');
|
|
70
|
-
* }
|
|
71
|
-
* ```
|
|
72
|
-
*/
|
|
73
|
-
export declare function isFilterRegistered(id: FilterName): boolean;
|
|
74
|
-
/**
|
|
75
|
-
* Get a list of all registered filter IDs.
|
|
76
|
-
*
|
|
77
|
-
* @returns An array of all registered filter IDs
|
|
78
|
-
*
|
|
79
|
-
* @example
|
|
80
|
-
* ```typescript
|
|
81
|
-
* import { getRegisteredFilters } from 'textmode.js';
|
|
82
|
-
*
|
|
83
|
-
* console.log('Available filters:', getRegisteredFilters());
|
|
84
|
-
* // ['invert', 'grayscale', 'sepia', 'hueRotate', ...]
|
|
23
|
+
* // Use the filter
|
|
24
|
+
* t.layers.base.filter('blur', { radius: 10 });
|
|
85
25
|
* ```
|
|
86
26
|
*/
|
|
87
|
-
export declare
|
|
27
|
+
export declare class FilterRegistry {
|
|
28
|
+
private readonly _renderer;
|
|
29
|
+
private readonly _filters;
|
|
30
|
+
private readonly _shaderCache;
|
|
31
|
+
/**
|
|
32
|
+
* Create a new FilterRegistry.
|
|
33
|
+
* @param renderer The WebGL renderer instance
|
|
34
|
+
* @internal
|
|
35
|
+
*/
|
|
36
|
+
constructor(renderer: GLRenderer);
|
|
37
|
+
/**
|
|
38
|
+
* Define a filter using a simplified declarative syntax.
|
|
39
|
+
*
|
|
40
|
+
* This is the easiest way to create filters for add-on libraries.
|
|
41
|
+
* The shader is compiled immediately and cached.
|
|
42
|
+
*
|
|
43
|
+
* @param id Unique filter identifier
|
|
44
|
+
* @param shader Pre-compiled GLShader, fragment shader source string, or path to a fragment shader file (.frag or .glsl)
|
|
45
|
+
* @param uniforms Default uniform values. Keys map uniform names to [paramName, defaultValue] tuples.
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```typescript
|
|
49
|
+
* // With pre-compiled shader (recommended for add-ons)
|
|
50
|
+
* const shader = await t.createShader(vertSrc, fragSrc);
|
|
51
|
+
* t.layers.filters.define('brightness', shader, { u_amount: ['amount', 1.0] });
|
|
52
|
+
*
|
|
53
|
+
* // With a path to a fragment shader file
|
|
54
|
+
* await t.layers.filters.define('brightness', './brightness.frag', { u_amount: ['amount', 1.0] });
|
|
55
|
+
*
|
|
56
|
+
* // Usage:
|
|
57
|
+
* t.layers.base.filter('brightness', 1.5);
|
|
58
|
+
* t.layers.base.filter('brightness', { amount: 1.5 });
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
$register(id: FilterName, shader: GLShader | string, defs?: Record<string, [paramName: string, defaultValue: unknown]>): Promise<void>;
|
|
62
|
+
/**
|
|
63
|
+
* Unregister a filter by its ID.
|
|
64
|
+
*
|
|
65
|
+
* @param id The filter ID to unregister
|
|
66
|
+
* @returns true if the filter was unregistered, false if it wasn't found
|
|
67
|
+
*/
|
|
68
|
+
$unregister(id: FilterName): boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Get a filter strategy by ID.
|
|
71
|
+
* @internal
|
|
72
|
+
*/
|
|
73
|
+
$get(id: FilterName): TextmodeFilterStrategy | undefined;
|
|
74
|
+
/**
|
|
75
|
+
* Dispose all resources.
|
|
76
|
+
* @internal
|
|
77
|
+
*/
|
|
78
|
+
$dispose(): void;
|
|
79
|
+
/**
|
|
80
|
+
* Register all built-in filters.
|
|
81
|
+
*/
|
|
82
|
+
private _registerBuiltInFilters;
|
|
83
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { GLRenderer, GLFramebuffer } from '../../../rendering';
|
|
2
|
-
import type { QueuedFilter } from './types';
|
|
1
|
+
import type { GLRenderer, GLShader, GLFramebuffer } from '../../../rendering';
|
|
2
|
+
import type { QueuedFilter, FilterName } from './types';
|
|
3
3
|
/**
|
|
4
4
|
* Manages filter shader compilation and application for layers.
|
|
5
5
|
*
|
|
@@ -17,11 +17,14 @@ export declare class LayerFilterManager {
|
|
|
17
17
|
private _pingPongBuffers;
|
|
18
18
|
private _currentBufferIndex;
|
|
19
19
|
private _isInitialized;
|
|
20
|
+
private _filterRegistry;
|
|
20
21
|
/**
|
|
21
22
|
* Create a new LayerFilterManager.
|
|
22
23
|
* @param renderer The WebGL renderer instance
|
|
23
24
|
*/
|
|
24
25
|
constructor(renderer: GLRenderer);
|
|
26
|
+
register(id: FilterName, shader: GLShader | string, uniformDefs?: Record<string, [paramName: string, defaultValue: unknown]>): Promise<void>;
|
|
27
|
+
unregister(id: FilterName): boolean;
|
|
25
28
|
/**
|
|
26
29
|
* Initialize ping-pong buffers for filter chain processing.
|
|
27
30
|
* @param width Buffer width in pixels
|
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
export type { FilterName, BuiltInFilterName, BuiltInFilterParams, QueuedFilter, FilterContext, TextmodeFilterStrategy } from './types';
|
|
2
|
-
export {
|
|
3
|
-
export { getFilterStrategy } from './FilterRegistry';
|
|
2
|
+
export { FilterRegistry } from './FilterRegistry';
|
|
4
3
|
export { LayerFilterManager } from './LayerFilterManager';
|
|
@@ -2,5 +2,5 @@ export { TextmodeLayer } from './TextmodeLayer';
|
|
|
2
2
|
export { LayerManager as TextmodeLayerManager } from './LayerManager';
|
|
3
3
|
export { Layer2DCompositor as LayerCompositor } from './Layer2DCompositor';
|
|
4
4
|
export type { TextmodeLayerOptions, TextmodeLayerBlendMode } from './types';
|
|
5
|
-
export {
|
|
5
|
+
export { FilterRegistry } from './filters';
|
|
6
6
|
export type { FilterName, BuiltInFilterName, BuiltInFilterParams, FilterContext, TextmodeFilterStrategy } from './filters';
|
package/package.json
CHANGED