shaderpad 1.0.0-beta.79 → 1.0.0-beta.81

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 (93) hide show
  1. package/CHANGELOG.md +642 -0
  2. package/README.md +14 -14
  3. package/dist/chunk-BUZPU5IY.mjs +7 -0
  4. package/dist/chunk-BUZPU5IY.mjs.map +1 -0
  5. package/dist/chunk-FCURYXR7.mjs +10 -0
  6. package/dist/chunk-FCURYXR7.mjs.map +1 -0
  7. package/dist/dev/{chunk-QYD24S7K.mjs → chunk-OHG35H62.mjs} +150 -147
  8. package/dist/dev/chunk-OHG35H62.mjs.map +1 -0
  9. package/dist/dev/{chunk-ZVPQU2RM.mjs → chunk-W5VOJOKO.mjs} +13 -9
  10. package/dist/dev/chunk-W5VOJOKO.mjs.map +1 -0
  11. package/dist/dev/index.js +149 -146
  12. package/dist/dev/index.js.map +1 -1
  13. package/dist/dev/index.mjs +1 -1
  14. package/dist/dev/plugins/face.js +14 -11
  15. package/dist/dev/plugins/face.js.map +1 -1
  16. package/dist/dev/plugins/face.mjs +5 -4
  17. package/dist/dev/plugins/face.mjs.map +1 -1
  18. package/dist/dev/plugins/hands.js +14 -11
  19. package/dist/dev/plugins/hands.js.map +1 -1
  20. package/dist/dev/plugins/hands.mjs +5 -4
  21. package/dist/dev/plugins/hands.mjs.map +1 -1
  22. package/dist/dev/plugins/mediapipe-common.js +13 -8
  23. package/dist/dev/plugins/mediapipe-common.js.map +1 -1
  24. package/dist/dev/plugins/mediapipe-common.mjs +3 -1
  25. package/dist/dev/plugins/pose.js +163 -157
  26. package/dist/dev/plugins/pose.js.map +1 -1
  27. package/dist/dev/plugins/pose.mjs +6 -5
  28. package/dist/dev/plugins/pose.mjs.map +1 -1
  29. package/dist/dev/plugins/segmenter.js +163 -157
  30. package/dist/dev/plugins/segmenter.js.map +1 -1
  31. package/dist/dev/plugins/segmenter.mjs +6 -5
  32. package/dist/dev/plugins/segmenter.mjs.map +1 -1
  33. package/dist/dev/react.js +179 -160
  34. package/dist/dev/react.js.map +1 -1
  35. package/dist/dev/react.mjs +31 -15
  36. package/dist/dev/react.mjs.map +1 -1
  37. package/dist/dev/web-component.js +164 -155
  38. package/dist/dev/web-component.js.map +1 -1
  39. package/dist/dev/web-component.mjs +16 -10
  40. package/dist/dev/web-component.mjs.map +1 -1
  41. package/dist/index.d.mts +33 -31
  42. package/dist/index.d.ts +33 -31
  43. package/dist/index.js +3 -3
  44. package/dist/index.js.map +1 -1
  45. package/dist/index.mjs +1 -1
  46. package/dist/plugins/face.d.mts +1 -0
  47. package/dist/plugins/face.d.ts +1 -0
  48. package/dist/plugins/face.js +34 -34
  49. package/dist/plugins/face.js.map +1 -1
  50. package/dist/plugins/face.mjs +33 -33
  51. package/dist/plugins/face.mjs.map +1 -1
  52. package/dist/plugins/hands.d.mts +1 -0
  53. package/dist/plugins/hands.d.ts +1 -0
  54. package/dist/plugins/hands.js +13 -13
  55. package/dist/plugins/hands.js.map +1 -1
  56. package/dist/plugins/hands.mjs +5 -5
  57. package/dist/plugins/hands.mjs.map +1 -1
  58. package/dist/plugins/mediapipe-common.d.mts +3 -2
  59. package/dist/plugins/mediapipe-common.d.ts +3 -2
  60. package/dist/plugins/mediapipe-common.js +5 -5
  61. package/dist/plugins/mediapipe-common.js.map +1 -1
  62. package/dist/plugins/mediapipe-common.mjs +1 -1
  63. package/dist/plugins/pose.d.mts +1 -0
  64. package/dist/plugins/pose.d.ts +1 -0
  65. package/dist/plugins/pose.js +34 -34
  66. package/dist/plugins/pose.js.map +1 -1
  67. package/dist/plugins/pose.mjs +12 -12
  68. package/dist/plugins/pose.mjs.map +1 -1
  69. package/dist/plugins/segmenter.d.mts +1 -0
  70. package/dist/plugins/segmenter.d.ts +1 -0
  71. package/dist/plugins/segmenter.js +13 -13
  72. package/dist/plugins/segmenter.js.map +1 -1
  73. package/dist/plugins/segmenter.mjs +5 -5
  74. package/dist/plugins/segmenter.mjs.map +1 -1
  75. package/dist/react.d.mts +2 -2
  76. package/dist/react.d.ts +2 -2
  77. package/dist/react.js +3 -3
  78. package/dist/react.js.map +1 -1
  79. package/dist/react.mjs +1 -1
  80. package/dist/react.mjs.map +1 -1
  81. package/dist/web-component.d.mts +5 -4
  82. package/dist/web-component.d.ts +5 -4
  83. package/dist/web-component.js +4 -4
  84. package/dist/web-component.js.map +1 -1
  85. package/dist/web-component.mjs +2 -2
  86. package/dist/web-component.mjs.map +1 -1
  87. package/package.json +3 -2
  88. package/dist/chunk-PZ4UVAHU.mjs +0 -10
  89. package/dist/chunk-PZ4UVAHU.mjs.map +0 -1
  90. package/dist/chunk-RWGXFWIP.mjs +0 -7
  91. package/dist/chunk-RWGXFWIP.mjs.map +0 -1
  92. package/dist/dev/chunk-QYD24S7K.mjs.map +0 -1
  93. package/dist/dev/chunk-ZVPQU2RM.mjs.map +0 -1
package/CHANGELOG.md ADDED
@@ -0,0 +1,642 @@
1
+ # shaderpad
2
+
3
+ ## 1.0.0-beta.81
4
+
5
+ ### Minor Changes
6
+
7
+ - Improve timing / lifecycle behavior
8
+
9
+ Pause `u_time` on `pause()`, so that `step()` and `play()` resume from the same timestamp after a pause.
10
+
11
+ Also renamed:
12
+ - `resetFrame()` => `rewind()`
13
+ - `beforeDraw` => `preDraw`
14
+ - `afterDraw` => `postDraw`
15
+ - `beforeStep` => `preStep`
16
+ - `afterStep` => `postStep`
17
+
18
+ ## 1.0.0-beta.80
19
+
20
+ ### Minor Changes
21
+
22
+ - Add configurable `wasmBaseUrl` option for MediaPipe plugins
23
+
24
+ ## 1.0.0-beta.79
25
+
26
+ ### Patch Changes
27
+
28
+ - Add package READMEs
29
+
30
+ ## 1.0.0-beta.78
31
+
32
+ ### Minor Changes
33
+
34
+ - Add `<shader-pad>` web component
35
+
36
+ ## 1.0.0-beta.77
37
+
38
+ ### Minor Changes
39
+
40
+ - Add default export to shaderpad/react
41
+
42
+ ## 1.0.0-beta.76
43
+
44
+ ### Minor Changes
45
+
46
+ - Add `shaderpad/react` export
47
+
48
+ ## 1.0.0-beta.75
49
+
50
+ ### Minor Changes
51
+
52
+ - Improve face plugin performance and simplify templates
53
+
54
+ ## 1.0.0-beta.74
55
+
56
+ ### Minor Changes
57
+
58
+ - API improvements for public release
59
+
60
+ ## 1.0.0-beta.73
61
+
62
+ ### Minor Changes
63
+
64
+ - Expand `create-shaderpad` starters and support modular GLSL includes
65
+
66
+ ## 1.0.0-beta.72
67
+
68
+ ### Minor Changes
69
+
70
+ - Simplify history writes and shared MediaPipe plugins
71
+
72
+ ## 1.0.0-beta.71
73
+
74
+ ### Minor Changes
75
+
76
+ - Publish development build
77
+
78
+ ## 1.0.0-beta.70
79
+
80
+ ### Minor Changes
81
+
82
+ - Update error shortlinks and enable texture historyWriteIndex
83
+
84
+ ## 1.0.0-beta.69
85
+
86
+ ### Minor Changes
87
+
88
+ - Improve runtime error handling
89
+
90
+ ## 1.0.0-beta.68
91
+
92
+ ### Minor Changes
93
+
94
+ - Autosize: replace `ignorePixelRatio` with `scale`
95
+
96
+ ## 1.0.0-beta.67
97
+
98
+ ### Patch Changes
99
+
100
+ - Fix eyebrow fill region
101
+
102
+ ## 1.0.0-beta.66
103
+
104
+ ### Minor Changes
105
+
106
+ - Improve eye/mouth geometry
107
+ - Reduces triangle count in face mesh by filling eyes/mouth
108
+ - Improves eye and inner-mouth masks by triangulating between contour curves instead of fan-filling across the opening
109
+
110
+ In practice, you’ll notice a better inner mouth shape with a
111
+ closed-mouth smile.
112
+
113
+ ## 1.0.0-beta.65
114
+
115
+ ### Patch Changes
116
+
117
+ - Fill eyes/mouth in face tessellation
118
+
119
+ ## 1.0.0-beta.64
120
+
121
+ ### Patch Changes
122
+
123
+ - Refactor face mask rendering to use overlap-safe scratch composition
124
+
125
+ ## 1.0.0-beta.63
126
+
127
+ ### Minor Changes
128
+
129
+ - Rename "outer mouth" to "mouth"
130
+
131
+ ## 1.0.0-beta.62
132
+
133
+ ### Minor Changes
134
+
135
+ - Misc fixes and improvements
136
+
137
+ ## 1.0.0-beta.61
138
+
139
+ ### Patch Changes
140
+
141
+ - Fix UNPACK_ALIGNMENT for non-RGBA formats
142
+
143
+ ## 1.0.0-beta.60
144
+
145
+ ### Patch Changes
146
+
147
+ - Release v60
148
+
149
+ ## 1.0.0-beta.59
150
+
151
+ ### Minor Changes
152
+
153
+ - Allow uint uniforms
154
+
155
+ ## 1.0.0-beta.58
156
+
157
+ ### Patch Changes
158
+
159
+ - Add a synchronous handleResize() during autosize init
160
+
161
+ ## 1.0.0-beta.57
162
+
163
+ ### Minor Changes
164
+
165
+ - Fix autosize target sizing
166
+
167
+ ## 1.0.0-beta.56
168
+
169
+ ### Patch Changes
170
+
171
+ - Improve ShaderPad chaining
172
+
173
+ ## 1.0.0-beta.55
174
+
175
+ ### Minor Changes
176
+
177
+ - Add preventShare option to save plugin
178
+
179
+ ## 1.0.0-beta.54
180
+
181
+ ### Patch Changes
182
+
183
+ - Fix formatString defaults and improve play/pause ergonomics
184
+
185
+ ## 1.0.0-beta.53
186
+
187
+ ### Minor Changes
188
+
189
+ - Improve integer format compatibility, perf, add cursorTarget option
190
+
191
+ ## 1.0.0-beta.52
192
+
193
+ ### Minor Changes
194
+
195
+ - Enable model choice for segmenter plugin
196
+
197
+ ## 1.0.0-beta.51
198
+
199
+ ### Patch Changes
200
+
201
+ - Bind framebuffer in step
202
+
203
+ ## 1.0.0-beta.50
204
+
205
+ ### Minor Changes
206
+
207
+ - Improve plugin history consistency and performance
208
+
209
+ ## 1.0.0-beta.49
210
+
211
+ ### Minor Changes
212
+
213
+ - Remove time as first arg for public step method
214
+
215
+ This version also fixes high-precision float formats, and handles a race condition between init and destroy in MediaPipe plugins.
216
+
217
+ ## 1.0.0-beta.48
218
+
219
+ ### Minor Changes
220
+
221
+ - Improve inX checks and add public clear method
222
+
223
+ ## 1.0.0-beta.47
224
+
225
+ ### Patch Changes
226
+
227
+ - Add precision qualifiers to mask uniforms
228
+
229
+ ## 1.0.0-beta.46
230
+
231
+ ### Minor Changes
232
+
233
+ - Enable headless ShaderPads
234
+
235
+ This version also migrates some canvas-specific code out of the core package into `plugins/autosize` and `util/createFullscreenCanvas`.
236
+
237
+ ## 1.0.0-beta.45
238
+
239
+ ### Patch Changes
240
+
241
+ - Improve destroy()
242
+
243
+ ## 1.0.0-beta.44
244
+
245
+ ### Minor Changes
246
+
247
+ - Swap play() arg order
248
+
249
+ ## 1.0.0-beta.43
250
+
251
+ ### Patch Changes
252
+
253
+ - Improve mobile save/dismiss behaviour
254
+
255
+ ## 1.0.0-beta.42
256
+
257
+ ### Minor Changes
258
+
259
+ - Allow ShaderPad texture sources, improve MediaPipe perf, add MediaPipe history
260
+
261
+ ## 1.0.0-beta.41
262
+
263
+ ### Minor Changes
264
+
265
+ - Overhaul hook system and MediaPipe init order
266
+
267
+ ## 1.0.0-beta.40
268
+
269
+ ### Patch Changes
270
+
271
+ - Improve save / dismiss behaviour on mobile
272
+
273
+ ## 1.0.0-beta.39
274
+
275
+ ### Patch Changes
276
+
277
+ - Bugfix: allocate storage for intermediate texture
278
+
279
+ ## 1.0.0-beta.38
280
+
281
+ ### Minor Changes
282
+
283
+ - Allow high-precision history
284
+
285
+ Also:
286
+ - Allow texture options to be passed during ShaderPad creation
287
+ - Add onReady callbacks to MediaPipe plugins
288
+ - Add an afterStep lifecycle method
289
+ - Add option to skip history writes
290
+ - Various bugfixes and performance improvements
291
+
292
+ ## 1.0.0-beta.37
293
+
294
+ ### Minor Changes
295
+
296
+ - Generate face mask with GL TRIANGLEs
297
+
298
+ ## 1.0.0-beta.36
299
+
300
+ ### Minor Changes
301
+
302
+ - Re-address antialiasing in face plugin
303
+
304
+ ## 1.0.0-beta.35
305
+
306
+ ### Patch Changes
307
+
308
+ - Fix bug in face plugin
309
+
310
+ ## 1.0.0-beta.34
311
+
312
+ ### Minor Changes
313
+
314
+ - Limit antialiasing on mask textures
315
+
316
+ ## 1.0.0-beta.33
317
+
318
+ ### Minor Changes
319
+
320
+ - Expand texture input types and improve MediaPipe plugins
321
+
322
+ ## 1.0.0-beta.32
323
+
324
+ ### Minor Changes
325
+
326
+ - Add segmenter plugin
327
+
328
+ ## 1.0.0-beta.31
329
+
330
+ ### Minor Changes
331
+
332
+ - Add onResults callbacks to MediaPipe plugins
333
+
334
+ ## 1.0.0-beta.30
335
+
336
+ ### Minor Changes
337
+
338
+ - Rewrite plugins to transfer landmark data as textures
339
+
340
+ Rewrite MediaPipe plugins (pose, face, hands) to transfer landmark data as textures instead of uniform arrays. Landmarks are now accessed via `texelFetch()` on `u_poseLandmarksTex`, `u_faceLandmarksTex`, and `u_handLandmarksTex` textures. The `poseLandmark()`, `faceLandmark()`, and `handLandmark()` functions now return `vec4` (x, y, z, visibility) instead of `vec2`. Function names updated: `getBody()` → `inBody()`, `getFace()` → `inFace()`, etc.
341
+
342
+ As part of this change, typed arrays (e.g., `Float32Array`) are now valid texture sources when provided with width and height.
343
+
344
+ Also:
345
+ - Updated examples for the new API
346
+ - Added debug option to reduce logging in production
347
+
348
+ ## 1.0.0-beta.29
349
+
350
+ ### Minor Changes
351
+
352
+ - Expose individual face landmarks in face plugin
353
+
354
+ ## 1.0.0-beta.28
355
+
356
+ ### Minor Changes
357
+
358
+ - Add share text as optional second argument to save()
359
+
360
+ ## 1.0.0-beta.27
361
+
362
+ ### Minor Changes
363
+
364
+ - Add u_mouth to face plugin
365
+
366
+ ## 1.0.0-beta.26
367
+
368
+ ### Minor Changes
369
+
370
+ - Improve MediaPipe media handling
371
+
372
+ ## 1.0.0-beta.25
373
+
374
+ ### Minor Changes
375
+
376
+ - Improve pose segmentation
377
+
378
+ ## 1.0.0-beta.24
379
+
380
+ ### Patch Changes
381
+
382
+ - Fix fitCover/fitContain function name swap
383
+
384
+ ## 1.0.0-beta.23
385
+
386
+ ### Patch Changes
387
+
388
+ - Include u_resolution definition in helpers plugin
389
+
390
+ ## 1.0.0-beta.22
391
+
392
+ ### Minor Changes
393
+
394
+ - Add fitContain and fitCover helper functions
395
+
396
+ ## 1.0.0-beta.21
397
+
398
+ ### Minor Changes
399
+
400
+ - Export all plugins as default exports
401
+
402
+ Also resolve deprecation warning for non-DOM textures
403
+
404
+ ## 1.0.0-beta.20
405
+
406
+ ### Minor Changes
407
+
408
+ - Add draw() method
409
+
410
+ ## 1.0.0-beta.19
411
+
412
+ ### Minor Changes
413
+
414
+ - Add hands and pose plugins
415
+
416
+ ### Minor Changes
417
+ - Add MediaPipe hands plugin
418
+
419
+ The `hands` plugin uses [MediaPipe Hand Landmarker](https://ai.google.dev/edge/mediapipe/solutions/vision/hand_landmarker) to detect and track hand landmarks in video or image textures. Each hand contributes 22 landmarks (21 standard landmarks plus hand center).
420
+
421
+ - Add MediaPipe pose plugin
422
+
423
+ The `pose` plugin uses [MediaPipe Pose Landmarker](https://ai.google.dev/edge/mediapipe/solutions/vision/pose_landmarker) to detect and track body pose landmarks. Each pose contributes 33 landmarks, and the plugin provides both landmark data and a mask texture showing the skeleton and body segmentation.
424
+
425
+ - Add documentation site
426
+
427
+ Added a new documentation site that showcases ShaderPad with a live shader example. The site is automatically deployed to GitHub Pages via a new GitHub Actions workflow.
428
+
429
+ - Add new example shaders
430
+
431
+ Added several new example shaders demonstrating the new plugins and various shader techniques:
432
+ - `hands.ts`: Hand tracking example
433
+ - `pose.ts`: Pose tracking example
434
+ - `god-rays.ts`: God rays effect example
435
+ - `fragmentum.ts`: Complex procedural shader example
436
+
437
+ ### Patch Changes
438
+ - Update package.json exports to include new plugins (hands, pose)
439
+ - Remove plugins/index.ts in favor of individual plugin exports (optimizes bundle size)
440
+ - Update README with comprehensive documentation for all MediaPipe plugins
441
+ - Add project logo
442
+
443
+ ## 1.0.0-beta.18
444
+
445
+ ### Minor Changes
446
+
447
+ - Add per-texture history
448
+
449
+ The history plugin now supports history tracking for individual textures, in addition to framebuffer history. When initializing a texture with `initializeTexture()`, you can now specify a historyDepth parameter to maintain a buffer of prior frames for that specific texture:
450
+
451
+ ```ts
452
+ // Store the last 30 webcam frames
453
+ // shader.initializeTexture('u_webcam', videoElement, 30);
454
+ ```
455
+
456
+ Added two new examples demonstrating per-texture history:
457
+ - history-webcam-channels
458
+ - history-webcam-grid
459
+
460
+ ## 1.0.0-beta.17
461
+
462
+ ### Minor Changes
463
+
464
+ - Add plugin system
465
+
466
+ Finally in beta! This version adds a new plugin system, and migrates history
467
+ and save functionality out of the main class into standalone plugins. This
468
+ reduces bundle size for the most common usecases, and ensures flexibility going
469
+ forward.
470
+
471
+ This commit also reorganizes the examples directory; now all demos can be
472
+ played without needing to edit any files.
473
+
474
+ Other significant changes:
475
+ - The `play` callback now runs after the next loop is requested, so
476
+ `shader.pause()` can be called from within the `play` callback.
477
+ - The constructor no-longer accepts a `history` option. That has moved to the
478
+ history plugin’s configuration.
479
+ - The constructor now accepts a `plugins` option.
480
+
481
+ ## 1.0.0-alpha.16
482
+
483
+ ### Minor Changes
484
+
485
+ - Prevent double play
486
+
487
+ ## 1.0.0-alpha.15
488
+
489
+ ### Patch Changes
490
+
491
+ - Improve iOS recognition on save
492
+
493
+ ## 1.0.0-alpha.14
494
+
495
+ ### Patch Changes
496
+
497
+ - Improve mobile save experience
498
+
499
+ ## 1.0.0-alpha.13
500
+
501
+ ### Minor Changes
502
+
503
+ - Improve save experience on mobile
504
+
505
+ ## 1.0.0-alpha.12
506
+
507
+ ### Minor Changes
508
+
509
+ - Improve resize behaviour
510
+
511
+ ## 1.0.0-alpha.11
512
+
513
+ ### Patch Changes
514
+
515
+ - Remove wheel position from u_cursor
516
+
517
+ ## 1.0.0-alpha.10
518
+
519
+ ### Minor Changes
520
+
521
+ - Add reset() and onResize
522
+
523
+ ## 1.0.0-alpha.9
524
+
525
+ ### Patch Changes
526
+
527
+ - Make initial history frames transparent
528
+
529
+ ## 1.0.0-alpha.8
530
+
531
+ ### Minor Changes
532
+
533
+ - Allow `initializeTexture` and `history` to exist in the same shader
534
+
535
+ ## 1.0.0-alpha.7
536
+
537
+ ### Minor Changes
538
+
539
+ - - **WebGL 2.0 upgrade** 🚀
540
+
541
+ ShaderPad now uses WebGL 2.0 and GLSL 3.00 ES. All shaders now use the `#version 300 es` directive with updated syntax:
542
+ - `attribute` → `in`
543
+ - `varying` → `out` (vertex) / `in` (fragment)
544
+ - `gl_FragColor` → custom `out` variables
545
+ - `texture2D` → `texture`
546
+
547
+ This is a breaking change - existing shaders will need to be updated to use the new syntax.
548
+
549
+ - **Frame history buffers**
550
+
551
+ Added support for frame history buffers, enabling shaders to reference prior frames. The `u_history` uniform provides access to previous frames as a `sampler2DArray`.
552
+
553
+ ```typescript
554
+ // 2-frame history (eg. for cellular automata)
555
+ const shader = new ShaderPad(fragmentShaderSrc, { history: 2 });
556
+ ```
557
+
558
+ - **Options object constructor**
559
+
560
+ The constructor now accepts an options object instead of just a canvas element:
561
+
562
+ ```typescript
563
+ // Old API
564
+ const shader = new ShaderPad(fragmentShaderSrc, canvas);
565
+
566
+ // New API
567
+ const shader = new ShaderPad(fragmentShaderSrc, { canvas });
568
+ ```
569
+
570
+ - **Resize throttling**
571
+
572
+ Added throttled resize handling to improve performance during window resizing.
573
+
574
+ - **Minor bugfixes around click handling**
575
+
576
+ ## 1.0.0-alpha.6
577
+
578
+ ### Minor Changes
579
+
580
+ - Update uniform names to use conventional u\_ prefix
581
+
582
+ ### Patch Changes
583
+
584
+ - b9bf4b1: npx changeset version
585
+
586
+ ## 1.0.0-alpha.5
587
+
588
+ ### Minor Changes
589
+
590
+ - Enhanced mouse interaction uniforms
591
+
592
+ Updated the mouse interaction uniforms to provide comprehensive input tracking:
593
+ - `u_cursor` is now a `vec4` with cursor position (x, y) and scroll position (z, w)
594
+ - `u_click` is now a `vec3` with click position (x, y) and left click state (z)
595
+
596
+ This allows shaders to respond to cursor movement, scrolling, and mouse clicks.
597
+
598
+ - Callbacks passed to `play` now receive `time` in seconds, not milliseconds.
599
+
600
+ This improves consistency with the `u_time` uniform.
601
+
602
+ ## 1.0.0-alpha.4
603
+
604
+ ### Minor Changes
605
+
606
+ - Add step method and frame counter
607
+
608
+ This release adds a `shaderPad.step` method, which enables finer-grained control over animation loops. The `shaderPad.play` callback now receives a `frame` parameter, which is the current frame number.
609
+
610
+ ## 1.0.0-alpha.3
611
+
612
+ ### Minor Changes
613
+
614
+ - Add texture and destroy methods
615
+
616
+ This release adds `shaderPad.initializeTexture` and `shaderPad.updateTextures` methods, which roughly map to how `initializeUniform` and `updateUniform` works. It also adds a `shaderPad.destroy` method, which runs some general cleanup.
617
+
618
+ This release also fixes a bug where a passed-in canvas would resize indefinitely on a retina display.
619
+
620
+ ## 1.0.0-alpha.2
621
+
622
+ ### Patch Changes
623
+
624
+ - Remove log from save()
625
+
626
+ ## 1.0.0-alpha.1
627
+
628
+ ### Minor Changes
629
+
630
+ - Add save() method
631
+
632
+ This method saves the current frame to a PNG file. The filename is optional; if not provided, it will be "export.png".
633
+
634
+ ## 1.0.0-alpha.0
635
+
636
+ ### Major Changes
637
+
638
+ - Initial alpha release 🎉
639
+
640
+ I’ve started using this on a few projects, and I’m pretty confident that the API will retain this general shape. I want to try adopting ShaderPad into a few more projects before officially moving this out of alpha.
641
+
642
+ Always open to suggestions!