@pixagram/renderart 0.1.3 → 0.2.1
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/README.md +92 -142
- package/dist/index.d.mts +33 -49
- package/dist/index.d.ts +33 -49
- package/dist/index.js +194 -915
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +190 -914
- package/dist/index.mjs.map +1 -1
- package/package.json +6 -22
- package/dist/wasm/renderart_wasm.d.ts +0 -289
- package/dist/wasm/renderart_wasm.js +0 -893
- package/dist/wasm/renderart_wasm_bg.wasm +0 -0
- package/dist/wasm/renderart_wasm_bg.wasm.d.ts +0 -70
package/README.md
CHANGED
|
@@ -4,15 +4,9 @@ High-performance pixel art rendering engines with GPU (WebGL2) and CPU (WASM) su
|
|
|
4
4
|
|
|
5
5
|
## Features
|
|
6
6
|
|
|
7
|
-
- **CRT Effect** (2-32x) - Classic CRT display simulation
|
|
8
|
-
- **HEX Upscaling** (2-32x) -
|
|
9
|
-
- **XBRZ Scaling** (2-6x) - Edge-preserving pixel art scaling
|
|
10
|
-
|
|
11
|
-
All engines support:
|
|
12
|
-
- ⚡ **GPU acceleration** via WebGL2 (CRT, HEX)
|
|
13
|
-
- 🦀 **CPU fallback** via Rust/WASM (all engines)
|
|
14
|
-
- 🎨 **Customizable presets** and fine-grained options
|
|
15
|
-
- 📦 **Zero dependencies** - everything bundled
|
|
7
|
+
- **CRT Effect** (2-32x) - Classic CRT display simulation
|
|
8
|
+
- **HEX Upscaling** (2-32x) - Hexagonal grid transformation
|
|
9
|
+
- **XBRZ Scaling** (2-6x) - Edge-preserving pixel art scaling
|
|
16
10
|
|
|
17
11
|
## Installation
|
|
18
12
|
|
|
@@ -22,174 +16,130 @@ npm install @pixagram/renderart
|
|
|
22
16
|
|
|
23
17
|
## Quick Start
|
|
24
18
|
|
|
25
|
-
|
|
26
|
-
import { RenderArt } from '@pixagram/renderart';
|
|
27
|
-
|
|
28
|
-
// Initialize (loads WASM if needed)
|
|
29
|
-
const renderer = await RenderArt.create();
|
|
30
|
-
|
|
31
|
-
// Get your image data
|
|
32
|
-
const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
|
|
33
|
-
|
|
34
|
-
// Apply CRT effect
|
|
35
|
-
const crtResult = await renderer.crt.render(imageData, { scale: 3 });
|
|
19
|
+
### GPU-Only (Simplest - No WASM needed)
|
|
36
20
|
|
|
37
|
-
|
|
38
|
-
|
|
21
|
+
```typescript
|
|
22
|
+
import { CrtGpuRenderer } from '@pixagram/renderart';
|
|
39
23
|
|
|
40
|
-
|
|
41
|
-
const
|
|
24
|
+
const crt = CrtGpuRenderer.create();
|
|
25
|
+
const result = crt.render(imageData, { scale: 3 });
|
|
42
26
|
|
|
43
27
|
// Use the result
|
|
44
|
-
ctx.putImageData(new ImageData(
|
|
28
|
+
ctx.putImageData(new ImageData(result.data, result.width, result.height), 0, 0);
|
|
45
29
|
```
|
|
46
30
|
|
|
47
|
-
|
|
31
|
+
### With CPU Fallback (Auto WASM loading)
|
|
48
32
|
|
|
49
|
-
|
|
33
|
+
```typescript
|
|
34
|
+
import { RenderArt, setWasmUrl } from '@pixagram/renderart';
|
|
50
35
|
|
|
51
|
-
|
|
36
|
+
// Configure WASM path (copy renderart_wasm.wasm to your public folder)
|
|
37
|
+
setWasmUrl('/wasm/renderart_wasm.wasm');
|
|
52
38
|
|
|
53
|
-
|
|
54
|
-
const renderer = await RenderArt.create();
|
|
39
|
+
const renderer = RenderArt.create();
|
|
55
40
|
|
|
56
|
-
//
|
|
57
|
-
|
|
58
|
-
// { gpu: true, cpu: true, maxTextureSize: 16384, recommendedBackend: 'gpu' }
|
|
41
|
+
// GPU when available, auto-loads WASM for CPU fallback
|
|
42
|
+
const result = await renderer.crt.render(imageData, { scale: 3 });
|
|
59
43
|
|
|
60
|
-
//
|
|
61
|
-
renderer.
|
|
44
|
+
// XBRZ is CPU-only (auto-loads WASM on first use)
|
|
45
|
+
const xbrzResult = await renderer.xbrz.render(imageData, { scale: 4 });
|
|
62
46
|
```
|
|
63
47
|
|
|
64
|
-
###
|
|
48
|
+
### Pre-load WASM
|
|
65
49
|
|
|
66
50
|
```typescript
|
|
67
|
-
|
|
68
|
-
const result = await renderer.crt.render(imageData, {
|
|
69
|
-
scale: 3, // 2-32 (default: 3)
|
|
70
|
-
warpX: 0.015, // Horizontal curvature (default: 0.015)
|
|
71
|
-
warpY: 0.02, // Vertical curvature (default: 0.02)
|
|
72
|
-
scanHardness: -4.0, // Scanline sharpness (default: -4.0)
|
|
73
|
-
scanOpacity: 0.5, // Scanline intensity (default: 0.5)
|
|
74
|
-
maskOpacity: 0.3, // Shadow mask intensity (default: 0.3)
|
|
75
|
-
enableWarp: true, // Enable barrel distortion
|
|
76
|
-
enableScanlines: true, // Enable scanlines
|
|
77
|
-
enableMask: true, // Enable shadow mask
|
|
78
|
-
backend: 'auto', // 'gpu', 'cpu', or 'auto'
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
// With preset
|
|
82
|
-
const result = await renderer.crt.render(imageData, 'authentic');
|
|
83
|
-
// Presets: 'default', 'authentic', 'subtle', 'flat'
|
|
51
|
+
import { initWasm, setWasmUrl } from '@pixagram/renderart';
|
|
84
52
|
|
|
85
|
-
//
|
|
86
|
-
|
|
53
|
+
// Pre-load WASM for faster first CPU render
|
|
54
|
+
setWasmUrl('/wasm/renderart_wasm.wasm');
|
|
55
|
+
await initWasm();
|
|
87
56
|
```
|
|
88
57
|
|
|
89
|
-
|
|
58
|
+
## WASM Setup
|
|
90
59
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
drawBorders: true, // Draw hexagon borders
|
|
97
|
-
borderColor: '#282828', // Border color (CSS or 0xRRGGBBAA)
|
|
98
|
-
borderThickness: 1, // Border thickness in pixels
|
|
99
|
-
backgroundColor: 'transparent', // Background color
|
|
100
|
-
backend: 'auto',
|
|
101
|
-
});
|
|
60
|
+
1. Build the WASM module:
|
|
61
|
+
```bash
|
|
62
|
+
cd node_modules/@pixagram/renderart
|
|
63
|
+
npm run build:wasm
|
|
64
|
+
```
|
|
102
65
|
|
|
103
|
-
|
|
104
|
-
const result = await renderer.hex.render(imageData, 'bordered');
|
|
105
|
-
// Presets: 'default', 'bordered', 'pointy'
|
|
66
|
+
2. Copy `wasm/renderart_wasm.wasm` to your public folder
|
|
106
67
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
68
|
+
3. Configure the path:
|
|
69
|
+
```typescript
|
|
70
|
+
import { setWasmUrl } from '@pixagram/renderart';
|
|
71
|
+
setWasmUrl('/your/path/renderart_wasm.wasm');
|
|
72
|
+
```
|
|
111
73
|
|
|
112
|
-
|
|
74
|
+
## API Reference
|
|
75
|
+
|
|
76
|
+
### CRT Options
|
|
113
77
|
|
|
114
78
|
```typescript
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
// Get output dimensions
|
|
129
|
-
const dims = renderer.xbrz.getDimensions(64, 64, 4);
|
|
130
|
-
// { width: 256, height: 256 }
|
|
79
|
+
{
|
|
80
|
+
scale: 3, // 2-32
|
|
81
|
+
warpX: 0.015, // Horizontal curvature
|
|
82
|
+
warpY: 0.02, // Vertical curvature
|
|
83
|
+
scanHardness: -4.0, // Scanline sharpness
|
|
84
|
+
scanOpacity: 0.5, // Scanline intensity
|
|
85
|
+
maskOpacity: 0.3, // Shadow mask intensity
|
|
86
|
+
enableWarp: true,
|
|
87
|
+
enableScanlines: true,
|
|
88
|
+
enableMask: true,
|
|
89
|
+
backend: 'auto', // 'gpu', 'cpu', or 'auto'
|
|
90
|
+
}
|
|
131
91
|
```
|
|
132
92
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
Each engine automatically selects the best available backend:
|
|
136
|
-
|
|
137
|
-
| Engine | GPU (WebGL2) | CPU (WASM) |
|
|
138
|
-
|--------|--------------|------------|
|
|
139
|
-
| CRT | ✅ Primary | ✅ Fallback |
|
|
140
|
-
| HEX | ✅ Primary | ✅ Fallback |
|
|
141
|
-
| XBRZ | ❌ N/A | ✅ Only |
|
|
93
|
+
### HEX Options
|
|
142
94
|
|
|
143
|
-
Force a specific backend:
|
|
144
95
|
```typescript
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
96
|
+
{
|
|
97
|
+
scale: 16, // 2-32
|
|
98
|
+
orientation: 'flat-top', // 'flat-top' or 'pointy-top'
|
|
99
|
+
drawBorders: false,
|
|
100
|
+
borderColor: '#282828',
|
|
101
|
+
borderThickness: 1,
|
|
102
|
+
backgroundColor: 'transparent',
|
|
103
|
+
backend: 'auto',
|
|
104
|
+
}
|
|
150
105
|
```
|
|
151
106
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
- Chrome 79+
|
|
155
|
-
- Firefox 75+
|
|
156
|
-
- Safari 15+
|
|
157
|
-
- Edge 79+
|
|
158
|
-
|
|
159
|
-
Requires:
|
|
160
|
-
- WebGL2 for GPU rendering
|
|
161
|
-
- WebAssembly for CPU rendering
|
|
162
|
-
|
|
163
|
-
## Performance Tips
|
|
164
|
-
|
|
165
|
-
1. **Reuse the renderer instance** - initialization is expensive
|
|
166
|
-
2. **Use GPU when available** - significantly faster for CRT and HEX
|
|
167
|
-
3. **Choose appropriate scale** - larger scales need more GPU memory
|
|
168
|
-
4. **Consider XBRZ scale limits** - 2-6x only, higher factors use more CPU
|
|
107
|
+
### XBRZ Options
|
|
169
108
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
# Build TypeScript
|
|
180
|
-
npm run build:ts
|
|
109
|
+
```typescript
|
|
110
|
+
{
|
|
111
|
+
scale: 4, // 2-6
|
|
112
|
+
luminanceWeight: 1.0,
|
|
113
|
+
equalColorTolerance: 30,
|
|
114
|
+
dominantDirectionThreshold: 4.4,
|
|
115
|
+
steepDirectionThreshold: 2.2,
|
|
116
|
+
}
|
|
117
|
+
```
|
|
181
118
|
|
|
182
|
-
|
|
183
|
-
npm run build
|
|
119
|
+
## Presets
|
|
184
120
|
|
|
185
|
-
|
|
186
|
-
|
|
121
|
+
```typescript
|
|
122
|
+
// CRT presets
|
|
123
|
+
renderer.crt.render(imageData, 'authentic'); // Strong CRT look
|
|
124
|
+
renderer.crt.render(imageData, 'subtle'); // Light CRT effect
|
|
125
|
+
renderer.crt.render(imageData, 'flat'); // No curvature
|
|
126
|
+
|
|
127
|
+
// HEX presets
|
|
128
|
+
renderer.hex.render(imageData, 'bordered'); // With borders
|
|
129
|
+
renderer.hex.render(imageData, 'pointy'); // Pointy-top orientation
|
|
130
|
+
|
|
131
|
+
// XBRZ presets
|
|
132
|
+
renderer.xbrz.render(imageData, 'sharp'); // Sharp edges
|
|
133
|
+
renderer.xbrz.render(imageData, 'smooth'); // Smoother output
|
|
187
134
|
```
|
|
188
135
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
136
|
+
## Backend Selection
|
|
137
|
+
|
|
138
|
+
| Engine | GPU | CPU |
|
|
139
|
+
|--------|-----|-----|
|
|
140
|
+
| CRT | ✅ | ✅ |
|
|
141
|
+
| HEX | ✅ | ✅ |
|
|
142
|
+
| XBRZ | ❌ | ✅ |
|
|
193
143
|
|
|
194
144
|
## License
|
|
195
145
|
|
package/dist/index.d.mts
CHANGED
|
@@ -190,55 +190,56 @@ declare const HEX_PRESETS: Record<string, Partial<HexOptions>>;
|
|
|
190
190
|
/**
|
|
191
191
|
* WASM Module Loader
|
|
192
192
|
*
|
|
193
|
-
*
|
|
193
|
+
* Auto-initializes WASM from URL. Works with any bundler.
|
|
194
194
|
*/
|
|
195
195
|
|
|
196
|
-
/**
|
|
197
|
-
|
|
196
|
+
/**
|
|
197
|
+
* Configure WASM loading path
|
|
198
|
+
* Call this before using any CPU renderer if you need a custom path.
|
|
199
|
+
*
|
|
200
|
+
* @param url - URL to the renderart_wasm_bg.wasm file
|
|
201
|
+
*
|
|
202
|
+
* @example
|
|
203
|
+
* ```typescript
|
|
204
|
+
* setWasmUrl('/static/wasm/renderart_wasm_bg.wasm');
|
|
205
|
+
* ```
|
|
206
|
+
*/
|
|
207
|
+
declare function setWasmUrl(url: string): void;
|
|
208
|
+
/**
|
|
209
|
+
* Initialize WASM module
|
|
210
|
+
* Called automatically on first CPU renderer use.
|
|
211
|
+
* Can be called manually for preloading.
|
|
212
|
+
*/
|
|
213
|
+
declare function initWasm(customUrl?: string): Promise<void>;
|
|
198
214
|
/** Check if WASM is loaded */
|
|
199
215
|
declare function isWasmLoaded(): boolean;
|
|
200
216
|
/** CRT CPU Renderer using WASM */
|
|
201
217
|
declare class CrtCpuRenderer {
|
|
202
218
|
private ready;
|
|
203
|
-
/** Create and initialize renderer */
|
|
219
|
+
/** Create and initialize renderer (auto-loads WASM) */
|
|
204
220
|
static create(): Promise<CrtCpuRenderer>;
|
|
205
|
-
private init;
|
|
206
|
-
/** Check if renderer is ready */
|
|
207
221
|
isReady(): boolean;
|
|
208
|
-
/** Render CRT effect */
|
|
209
222
|
render(input: ImageInput | ImageData, options?: CrtOptions): ImageOutput;
|
|
210
|
-
/** Dispose resources */
|
|
211
223
|
dispose(): void;
|
|
212
224
|
}
|
|
213
225
|
/** HEX CPU Renderer using WASM */
|
|
214
226
|
declare class HexCpuRenderer {
|
|
215
227
|
private ready;
|
|
216
|
-
/** Create and initialize renderer */
|
|
217
228
|
static create(): Promise<HexCpuRenderer>;
|
|
218
|
-
private init;
|
|
219
|
-
/** Check if renderer is ready */
|
|
220
229
|
isReady(): boolean;
|
|
221
|
-
/** Render hexagonal effect */
|
|
222
230
|
render(input: ImageInput | ImageData, options?: HexOptions): ImageOutput;
|
|
223
|
-
/** Get output dimensions */
|
|
224
231
|
getDimensions(srcWidth: number, srcHeight: number, scale: number, orientation?: HexOrientation): {
|
|
225
232
|
width: number;
|
|
226
233
|
height: number;
|
|
227
234
|
};
|
|
228
|
-
/** Dispose resources */
|
|
229
235
|
dispose(): void;
|
|
230
236
|
}
|
|
231
237
|
/** XBRZ CPU Renderer using WASM */
|
|
232
238
|
declare class XbrzCpuRenderer {
|
|
233
239
|
private ready;
|
|
234
|
-
/** Create and initialize renderer */
|
|
235
240
|
static create(): Promise<XbrzCpuRenderer>;
|
|
236
|
-
private init;
|
|
237
|
-
/** Check if renderer is ready */
|
|
238
241
|
isReady(): boolean;
|
|
239
|
-
/** Render xBRZ scaling */
|
|
240
242
|
render(input: ImageInput | ImageData, options?: XbrzOptions): ImageOutput;
|
|
241
|
-
/** Dispose resources */
|
|
242
243
|
dispose(): void;
|
|
243
244
|
}
|
|
244
245
|
/** XBRZ presets */
|
|
@@ -247,63 +248,47 @@ declare const XBRZ_PRESETS: Record<string, Partial<XbrzOptions>>;
|
|
|
247
248
|
/**
|
|
248
249
|
* RenderArt - Unified Pixel Art Rendering Engine
|
|
249
250
|
*
|
|
250
|
-
*
|
|
251
|
-
* with automatic backend selection (GPU/CPU).
|
|
251
|
+
* GPU renderers work standalone. CPU renderers auto-initialize WASM.
|
|
252
252
|
*/
|
|
253
253
|
|
|
254
|
-
/** CRT rendering engine
|
|
254
|
+
/** CRT rendering engine */
|
|
255
255
|
declare class CrtEngine {
|
|
256
256
|
private gpuRenderer;
|
|
257
257
|
private cpuRenderer;
|
|
258
258
|
private gpuAvailable;
|
|
259
|
-
|
|
260
|
-
constructor(gpuAvailable: boolean, cpuAvailable: boolean);
|
|
261
|
-
/** Initialize GPU renderer */
|
|
259
|
+
constructor(gpuAvailable: boolean);
|
|
262
260
|
private ensureGpu;
|
|
263
|
-
/** Initialize CPU renderer */
|
|
264
261
|
private ensureCpu;
|
|
265
262
|
/** Render with automatic backend selection */
|
|
266
263
|
render(input: ImageInput | ImageData, options?: CrtOptions): Promise<ImageOutput>;
|
|
267
|
-
/** Render with preset */
|
|
268
264
|
render(input: ImageInput | ImageData, preset: CrtPreset, overrides?: Partial<CrtOptions>): Promise<ImageOutput>;
|
|
269
265
|
/** Render synchronously (GPU only) */
|
|
270
266
|
renderSync(input: ImageInput | ImageData, options?: CrtOptions): ImageOutput;
|
|
271
|
-
/** Dispose resources */
|
|
272
267
|
dispose(): void;
|
|
273
268
|
}
|
|
274
|
-
/** HEX rendering engine
|
|
269
|
+
/** HEX rendering engine */
|
|
275
270
|
declare class HexEngine {
|
|
276
271
|
private gpuRenderer;
|
|
277
272
|
private cpuRenderer;
|
|
278
273
|
private gpuAvailable;
|
|
279
|
-
|
|
280
|
-
constructor(gpuAvailable: boolean, cpuAvailable: boolean);
|
|
274
|
+
constructor(gpuAvailable: boolean);
|
|
281
275
|
private ensureGpu;
|
|
282
276
|
private ensureCpu;
|
|
283
|
-
/** Render with automatic backend selection */
|
|
284
277
|
render(input: ImageInput | ImageData, options?: HexOptions): Promise<ImageOutput>;
|
|
285
|
-
/** Render with preset */
|
|
286
278
|
render(input: ImageInput | ImageData, preset: HexPreset, overrides?: Partial<HexOptions>): Promise<ImageOutput>;
|
|
287
|
-
/** Render synchronously (GPU only) */
|
|
288
279
|
renderSync(input: ImageInput | ImageData, options?: HexOptions): ImageOutput;
|
|
289
|
-
/** Get output dimensions */
|
|
290
280
|
getDimensions(srcWidth: number, srcHeight: number, options?: HexOptions): {
|
|
291
281
|
width: number;
|
|
292
282
|
height: number;
|
|
293
283
|
};
|
|
294
284
|
dispose(): void;
|
|
295
285
|
}
|
|
296
|
-
/** XBRZ rendering engine (CPU only
|
|
286
|
+
/** XBRZ rendering engine (CPU only) */
|
|
297
287
|
declare class XbrzEngine {
|
|
298
288
|
private cpuRenderer;
|
|
299
|
-
private cpuAvailable;
|
|
300
|
-
constructor(cpuAvailable: boolean);
|
|
301
289
|
private ensureCpu;
|
|
302
|
-
/** Render xBRZ scaling */
|
|
303
290
|
render(input: ImageInput | ImageData, options?: XbrzOptions): Promise<ImageOutput>;
|
|
304
|
-
/** Render with preset */
|
|
305
291
|
render(input: ImageInput | ImageData, preset: XbrzPreset, overrides?: Partial<XbrzOptions>): Promise<ImageOutput>;
|
|
306
|
-
/** Get output dimensions */
|
|
307
292
|
getDimensions(srcWidth: number, srcHeight: number, scale?: number): {
|
|
308
293
|
width: number;
|
|
309
294
|
height: number;
|
|
@@ -312,20 +297,19 @@ declare class XbrzEngine {
|
|
|
312
297
|
}
|
|
313
298
|
/** RenderArt - Unified Pixel Art Rendering Engine */
|
|
314
299
|
declare class RenderArt {
|
|
315
|
-
/** CRT effect renderer */
|
|
316
300
|
readonly crt: CrtEngine;
|
|
317
|
-
/** Hexagonal pixel renderer */
|
|
318
301
|
readonly hex: HexEngine;
|
|
319
|
-
/** xBRZ scaling renderer */
|
|
320
302
|
readonly xbrz: XbrzEngine;
|
|
321
303
|
private _capabilities;
|
|
322
304
|
private constructor();
|
|
323
|
-
/** Create
|
|
324
|
-
static create():
|
|
325
|
-
/**
|
|
305
|
+
/** Create RenderArt instance */
|
|
306
|
+
static create(): RenderArt;
|
|
307
|
+
/** Create GPU-only instance */
|
|
308
|
+
static createGpuOnly(): RenderArt;
|
|
309
|
+
/** Pre-initialize WASM for faster first CPU render */
|
|
310
|
+
preloadWasm(wasmUrl?: string): Promise<void>;
|
|
326
311
|
get capabilities(): RendererCapabilities;
|
|
327
|
-
/** Dispose all resources */
|
|
328
312
|
dispose(): void;
|
|
329
313
|
}
|
|
330
314
|
|
|
331
|
-
export { type Backend, CRT_PRESETS, CrtCpuRenderer, CrtGpuRenderer, type CrtOptions, type CrtPreset, HEX_PRESETS, HexCpuRenderer, HexGpuRenderer, type HexOptions, type HexOrientation, type HexPreset, type ImageInput, type ImageOutput, type PixelData, RenderArt, type RenderStats, type Renderer, type RendererCapabilities, XBRZ_PRESETS, XbrzCpuRenderer, type XbrzOptions, type XbrzPreset, hexGetDimensions, isWasmLoaded,
|
|
315
|
+
export { type Backend, CRT_PRESETS, CrtCpuRenderer, CrtEngine, CrtGpuRenderer, type CrtOptions, type CrtPreset, HEX_PRESETS, HexCpuRenderer, HexEngine, HexGpuRenderer, type HexOptions, type HexOrientation, type HexPreset, type ImageInput, type ImageOutput, type PixelData, RenderArt, type RenderStats, type Renderer, type RendererCapabilities, XBRZ_PRESETS, XbrzCpuRenderer, XbrzEngine, type XbrzOptions, type XbrzPreset, hexGetDimensions, initWasm, isWasmLoaded, setWasmUrl };
|
package/dist/index.d.ts
CHANGED
|
@@ -190,55 +190,56 @@ declare const HEX_PRESETS: Record<string, Partial<HexOptions>>;
|
|
|
190
190
|
/**
|
|
191
191
|
* WASM Module Loader
|
|
192
192
|
*
|
|
193
|
-
*
|
|
193
|
+
* Auto-initializes WASM from URL. Works with any bundler.
|
|
194
194
|
*/
|
|
195
195
|
|
|
196
|
-
/**
|
|
197
|
-
|
|
196
|
+
/**
|
|
197
|
+
* Configure WASM loading path
|
|
198
|
+
* Call this before using any CPU renderer if you need a custom path.
|
|
199
|
+
*
|
|
200
|
+
* @param url - URL to the renderart_wasm_bg.wasm file
|
|
201
|
+
*
|
|
202
|
+
* @example
|
|
203
|
+
* ```typescript
|
|
204
|
+
* setWasmUrl('/static/wasm/renderart_wasm_bg.wasm');
|
|
205
|
+
* ```
|
|
206
|
+
*/
|
|
207
|
+
declare function setWasmUrl(url: string): void;
|
|
208
|
+
/**
|
|
209
|
+
* Initialize WASM module
|
|
210
|
+
* Called automatically on first CPU renderer use.
|
|
211
|
+
* Can be called manually for preloading.
|
|
212
|
+
*/
|
|
213
|
+
declare function initWasm(customUrl?: string): Promise<void>;
|
|
198
214
|
/** Check if WASM is loaded */
|
|
199
215
|
declare function isWasmLoaded(): boolean;
|
|
200
216
|
/** CRT CPU Renderer using WASM */
|
|
201
217
|
declare class CrtCpuRenderer {
|
|
202
218
|
private ready;
|
|
203
|
-
/** Create and initialize renderer */
|
|
219
|
+
/** Create and initialize renderer (auto-loads WASM) */
|
|
204
220
|
static create(): Promise<CrtCpuRenderer>;
|
|
205
|
-
private init;
|
|
206
|
-
/** Check if renderer is ready */
|
|
207
221
|
isReady(): boolean;
|
|
208
|
-
/** Render CRT effect */
|
|
209
222
|
render(input: ImageInput | ImageData, options?: CrtOptions): ImageOutput;
|
|
210
|
-
/** Dispose resources */
|
|
211
223
|
dispose(): void;
|
|
212
224
|
}
|
|
213
225
|
/** HEX CPU Renderer using WASM */
|
|
214
226
|
declare class HexCpuRenderer {
|
|
215
227
|
private ready;
|
|
216
|
-
/** Create and initialize renderer */
|
|
217
228
|
static create(): Promise<HexCpuRenderer>;
|
|
218
|
-
private init;
|
|
219
|
-
/** Check if renderer is ready */
|
|
220
229
|
isReady(): boolean;
|
|
221
|
-
/** Render hexagonal effect */
|
|
222
230
|
render(input: ImageInput | ImageData, options?: HexOptions): ImageOutput;
|
|
223
|
-
/** Get output dimensions */
|
|
224
231
|
getDimensions(srcWidth: number, srcHeight: number, scale: number, orientation?: HexOrientation): {
|
|
225
232
|
width: number;
|
|
226
233
|
height: number;
|
|
227
234
|
};
|
|
228
|
-
/** Dispose resources */
|
|
229
235
|
dispose(): void;
|
|
230
236
|
}
|
|
231
237
|
/** XBRZ CPU Renderer using WASM */
|
|
232
238
|
declare class XbrzCpuRenderer {
|
|
233
239
|
private ready;
|
|
234
|
-
/** Create and initialize renderer */
|
|
235
240
|
static create(): Promise<XbrzCpuRenderer>;
|
|
236
|
-
private init;
|
|
237
|
-
/** Check if renderer is ready */
|
|
238
241
|
isReady(): boolean;
|
|
239
|
-
/** Render xBRZ scaling */
|
|
240
242
|
render(input: ImageInput | ImageData, options?: XbrzOptions): ImageOutput;
|
|
241
|
-
/** Dispose resources */
|
|
242
243
|
dispose(): void;
|
|
243
244
|
}
|
|
244
245
|
/** XBRZ presets */
|
|
@@ -247,63 +248,47 @@ declare const XBRZ_PRESETS: Record<string, Partial<XbrzOptions>>;
|
|
|
247
248
|
/**
|
|
248
249
|
* RenderArt - Unified Pixel Art Rendering Engine
|
|
249
250
|
*
|
|
250
|
-
*
|
|
251
|
-
* with automatic backend selection (GPU/CPU).
|
|
251
|
+
* GPU renderers work standalone. CPU renderers auto-initialize WASM.
|
|
252
252
|
*/
|
|
253
253
|
|
|
254
|
-
/** CRT rendering engine
|
|
254
|
+
/** CRT rendering engine */
|
|
255
255
|
declare class CrtEngine {
|
|
256
256
|
private gpuRenderer;
|
|
257
257
|
private cpuRenderer;
|
|
258
258
|
private gpuAvailable;
|
|
259
|
-
|
|
260
|
-
constructor(gpuAvailable: boolean, cpuAvailable: boolean);
|
|
261
|
-
/** Initialize GPU renderer */
|
|
259
|
+
constructor(gpuAvailable: boolean);
|
|
262
260
|
private ensureGpu;
|
|
263
|
-
/** Initialize CPU renderer */
|
|
264
261
|
private ensureCpu;
|
|
265
262
|
/** Render with automatic backend selection */
|
|
266
263
|
render(input: ImageInput | ImageData, options?: CrtOptions): Promise<ImageOutput>;
|
|
267
|
-
/** Render with preset */
|
|
268
264
|
render(input: ImageInput | ImageData, preset: CrtPreset, overrides?: Partial<CrtOptions>): Promise<ImageOutput>;
|
|
269
265
|
/** Render synchronously (GPU only) */
|
|
270
266
|
renderSync(input: ImageInput | ImageData, options?: CrtOptions): ImageOutput;
|
|
271
|
-
/** Dispose resources */
|
|
272
267
|
dispose(): void;
|
|
273
268
|
}
|
|
274
|
-
/** HEX rendering engine
|
|
269
|
+
/** HEX rendering engine */
|
|
275
270
|
declare class HexEngine {
|
|
276
271
|
private gpuRenderer;
|
|
277
272
|
private cpuRenderer;
|
|
278
273
|
private gpuAvailable;
|
|
279
|
-
|
|
280
|
-
constructor(gpuAvailable: boolean, cpuAvailable: boolean);
|
|
274
|
+
constructor(gpuAvailable: boolean);
|
|
281
275
|
private ensureGpu;
|
|
282
276
|
private ensureCpu;
|
|
283
|
-
/** Render with automatic backend selection */
|
|
284
277
|
render(input: ImageInput | ImageData, options?: HexOptions): Promise<ImageOutput>;
|
|
285
|
-
/** Render with preset */
|
|
286
278
|
render(input: ImageInput | ImageData, preset: HexPreset, overrides?: Partial<HexOptions>): Promise<ImageOutput>;
|
|
287
|
-
/** Render synchronously (GPU only) */
|
|
288
279
|
renderSync(input: ImageInput | ImageData, options?: HexOptions): ImageOutput;
|
|
289
|
-
/** Get output dimensions */
|
|
290
280
|
getDimensions(srcWidth: number, srcHeight: number, options?: HexOptions): {
|
|
291
281
|
width: number;
|
|
292
282
|
height: number;
|
|
293
283
|
};
|
|
294
284
|
dispose(): void;
|
|
295
285
|
}
|
|
296
|
-
/** XBRZ rendering engine (CPU only
|
|
286
|
+
/** XBRZ rendering engine (CPU only) */
|
|
297
287
|
declare class XbrzEngine {
|
|
298
288
|
private cpuRenderer;
|
|
299
|
-
private cpuAvailable;
|
|
300
|
-
constructor(cpuAvailable: boolean);
|
|
301
289
|
private ensureCpu;
|
|
302
|
-
/** Render xBRZ scaling */
|
|
303
290
|
render(input: ImageInput | ImageData, options?: XbrzOptions): Promise<ImageOutput>;
|
|
304
|
-
/** Render with preset */
|
|
305
291
|
render(input: ImageInput | ImageData, preset: XbrzPreset, overrides?: Partial<XbrzOptions>): Promise<ImageOutput>;
|
|
306
|
-
/** Get output dimensions */
|
|
307
292
|
getDimensions(srcWidth: number, srcHeight: number, scale?: number): {
|
|
308
293
|
width: number;
|
|
309
294
|
height: number;
|
|
@@ -312,20 +297,19 @@ declare class XbrzEngine {
|
|
|
312
297
|
}
|
|
313
298
|
/** RenderArt - Unified Pixel Art Rendering Engine */
|
|
314
299
|
declare class RenderArt {
|
|
315
|
-
/** CRT effect renderer */
|
|
316
300
|
readonly crt: CrtEngine;
|
|
317
|
-
/** Hexagonal pixel renderer */
|
|
318
301
|
readonly hex: HexEngine;
|
|
319
|
-
/** xBRZ scaling renderer */
|
|
320
302
|
readonly xbrz: XbrzEngine;
|
|
321
303
|
private _capabilities;
|
|
322
304
|
private constructor();
|
|
323
|
-
/** Create
|
|
324
|
-
static create():
|
|
325
|
-
/**
|
|
305
|
+
/** Create RenderArt instance */
|
|
306
|
+
static create(): RenderArt;
|
|
307
|
+
/** Create GPU-only instance */
|
|
308
|
+
static createGpuOnly(): RenderArt;
|
|
309
|
+
/** Pre-initialize WASM for faster first CPU render */
|
|
310
|
+
preloadWasm(wasmUrl?: string): Promise<void>;
|
|
326
311
|
get capabilities(): RendererCapabilities;
|
|
327
|
-
/** Dispose all resources */
|
|
328
312
|
dispose(): void;
|
|
329
313
|
}
|
|
330
314
|
|
|
331
|
-
export { type Backend, CRT_PRESETS, CrtCpuRenderer, CrtGpuRenderer, type CrtOptions, type CrtPreset, HEX_PRESETS, HexCpuRenderer, HexGpuRenderer, type HexOptions, type HexOrientation, type HexPreset, type ImageInput, type ImageOutput, type PixelData, RenderArt, type RenderStats, type Renderer, type RendererCapabilities, XBRZ_PRESETS, XbrzCpuRenderer, type XbrzOptions, type XbrzPreset, hexGetDimensions, isWasmLoaded,
|
|
315
|
+
export { type Backend, CRT_PRESETS, CrtCpuRenderer, CrtEngine, CrtGpuRenderer, type CrtOptions, type CrtPreset, HEX_PRESETS, HexCpuRenderer, HexEngine, HexGpuRenderer, type HexOptions, type HexOrientation, type HexPreset, type ImageInput, type ImageOutput, type PixelData, RenderArt, type RenderStats, type Renderer, type RendererCapabilities, XBRZ_PRESETS, XbrzCpuRenderer, XbrzEngine, type XbrzOptions, type XbrzPreset, hexGetDimensions, initWasm, isWasmLoaded, setWasmUrl };
|