textmode.synth.js 1.0.0-beta.3 → 1.0.0-beta.5
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 +0 -3
- package/dist/textmode.synth.esm.js +403 -358
- package/dist/textmode.synth.umd.js +24 -23
- package/dist/types/compiler/GLSLGenerator.d.ts +2 -0
- package/dist/types/compiler/GLSLGenerator.d.ts.map +1 -1
- package/dist/types/compiler/types.d.ts +2 -0
- package/dist/types/compiler/types.d.ts.map +1 -1
- package/dist/types/core/ISynthSource.d.ts +7 -6
- package/dist/types/core/ISynthSource.d.ts.map +1 -1
- package/dist/types/core/SynthSource.d.ts +1 -9
- package/dist/types/core/SynthSource.d.ts.map +1 -1
- package/dist/types/core/types.d.ts +8 -0
- package/dist/types/core/types.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/lifecycle/synthRender.d.ts +7 -2
- package/dist/types/lifecycle/synthRender.d.ts.map +1 -1
- package/dist/types/utils/SafeEvaluator.d.ts +59 -0
- package/dist/types/utils/SafeEvaluator.d.ts.map +1 -0
- package/dist/types/utils/index.d.ts +1 -5
- package/dist/types/utils/index.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
(function(g,
|
|
1
|
+
(function(g,L){typeof exports=="object"&&typeof module<"u"?L(exports):typeof define=="function"&&define.amd?define(["exports"],L):L((g=typeof globalThis<"u"?globalThis:g||self).TextmodeSynth={})})(this,function(g){"use strict";const L={src:{returnType:"vec4",args:[{type:"vec2",name:"_st"}]},coord:{returnType:"vec2",args:[{type:"vec2",name:"_st"}]},color:{returnType:"vec4",args:[{type:"vec4",name:"_c0"}]},combine:{returnType:"vec4",args:[{type:"vec4",name:"_c0"},{type:"vec4",name:"_c1"}]},combineCoord:{returnType:"vec2",args:[{type:"vec2",name:"_st"},{type:"vec4",name:"_c0"}]}},A=new class{_transforms=new Map;_processedCache=new Map;register(e){this._transforms.has(e.name)&&console.warn(`[TransformRegistry] Overwriting existing transform: ${e.name}`),this._transforms.set(e.name,e),this._processedCache.delete(e.name)}registerMany(e){for(const t of e)this.register(t)}get(e){return this._transforms.get(e)}getProcessed(e){let t=this._processedCache.get(e);if(!t){const r=this._transforms.get(e);r&&(t=(function(a){const n=L[a.type],o=[...n.args,...a.inputs.map(c=>({type:c.type,name:c.name}))].map(c=>`${c.type} ${c.name}`).join(", "),s=`
|
|
2
2
|
${n.returnType} ${a.name}(${o}) {
|
|
3
3
|
${a.glsl}
|
|
4
|
-
}`;return{...a,glslFunction:
|
|
4
|
+
}`;return{...a,glslFunction:s}})(r),this._processedCache.set(e,t))}return t}has(e){return this._transforms.has(e)}getByType(e){return Array.from(this._transforms.values()).filter(t=>t.type===e)}getNames(){return Array.from(this._transforms.keys())}getAll(){return Array.from(this._transforms.values())}getSourceTransforms(){return this.getByType("src")}remove(e){return this._processedCache.delete(e),this._transforms.delete(e)}clear(){this._transforms.clear(),this._processedCache.clear()}get size(){return this._transforms.size}},Y=new Set(["src"]),R=new class{_generatedFunctions={};_synthSourceClass=null;setSynthSourceClass(e){this._synthSourceClass=e}injectMethods(e){const t=A.getAll();for(const r of t)this._injectMethod(e,r)}_injectMethod(e,t){const{name:r,inputs:a,type:n}=t;e[r]=n==="combine"||n==="combineCoord"?function(o,...s){const c=a.map((l,f)=>s[f]??l.default);return this.addCombineTransform(r,o,c)}:function(...o){const s=a.map((c,l)=>o[l]??c.default);return this.addTransform(r,s)}}generateStandaloneFunctions(){if(!this._synthSourceClass)throw new Error("[TransformFactory] SynthSource class not set. Call setSynthSourceClass first.");const e={},t=A.getAll(),r=this._synthSourceClass;for(const a of t)if(Y.has(a.type)){const{name:n,inputs:o}=a;e[n]=(...s)=>{const c=new r,l=o.map((f,h)=>s[h]??f.default);return c.addTransform(n,l)}}return this._generatedFunctions=e,e}getGeneratedFunctions(){return this._generatedFunctions}addTransform(e,t){if(A.register(e),t&&this._injectMethod(t,e),Y.has(e.type)&&this._synthSourceClass){const r=this._synthSourceClass,{name:a,inputs:n}=e;this._generatedFunctions[a]=(...o)=>{const s=new r,c=n.map((l,f)=>o[f]??l.default);return s.addTransform(a,c)}}}},G=[{name:"osc",type:"src",inputs:[{name:"frequency",type:"float",default:60},{name:"sync",type:"float",default:.1},{name:"offset",type:"float",default:0}],glsl:`
|
|
5
5
|
vec2 st = _st;
|
|
6
6
|
float r = sin((st.x - offset/frequency + time*sync) * frequency) * 0.5 + 0.5;
|
|
7
7
|
float g = sin((st.x + time*sync) * frequency) * 0.5 + 0.5;
|
|
@@ -215,29 +215,29 @@ ${a.glsl}
|
|
|
215
215
|
return fract(st);
|
|
216
216
|
`,description:"Modulate Y repeat with another source"},{name:"modulateHue",type:"combineCoord",inputs:[{name:"amount",type:"float",default:1}],glsl:`
|
|
217
217
|
return _st + (vec2(_c0.g - _c0.r, _c0.b - _c0.g) * amount * 1.0 / resolution);
|
|
218
|
-
`,description:"Modulate coordinates based on hue differences"}];class
|
|
218
|
+
`,description:"Modulate coordinates based on hue differences"}];class T{_transforms;constructor(t){this._transforms=t}static empty(){return new T([])}static from(t){return new T([...t])}get transforms(){return this._transforms}push(t){this._transforms.push(t)}get length(){return this._transforms.length}get isEmpty(){return this._transforms.length===0}append(t){return new T([...this._transforms,t])}get(t){return this._transforms[t]}[Symbol.iterator](){return this._transforms[Symbol.iterator]()}}class S{_chain;_charMapping;_nestedSources;_externalLayerRefs;_colorSource;_cellColorSource;_charSource;constructor(t){this._chain=t?.chain??T.empty(),this._charMapping=t?.charMapping,this._colorSource=t?.colorSource,this._cellColorSource=t?.cellColorSource,this._charSource=t?.charSource,this._nestedSources=t?.nestedSources??new Map,this._externalLayerRefs=t?.externalLayerRefs??new Map}addTransform(t,r){const a={name:t,userArgs:r};return this._chain.push(a),this}addCombineTransform(t,r,a){const n=this._chain.length;return this._nestedSources.set(n,r),this.addTransform(t,a)}addExternalLayerRef(t){const r=this._chain.length;return this._externalLayerRefs.set(r,t),this.addTransform("src",[])}charMap(t){const r=Array.from(t),a=[];for(const n of r)a.push(n.codePointAt(0)??32);return this._charMapping={chars:t,indices:a},this}charColor(t){return this._colorSource=t,this}char(t){return this._charSource=t,this}cellColor(t){return this._cellColorSource=t,this}paint(t){return this._colorSource=t,this._cellColorSource=t,this}clone(){const t=new Map;for(const[a,n]of this._nestedSources)t.set(a,n.clone());const r=new Map;for(const[a,n]of this._externalLayerRefs)r.set(a,{...n});return new S({chain:T.from(this._chain.transforms),charMapping:this._charMapping,colorSource:this._colorSource?.clone(),cellColorSource:this._cellColorSource?.clone(),charSource:this._charSource?.clone(),nestedSources:t,externalLayerRefs:r})}get transforms(){return this._chain.transforms}get charMapping(){return this._charMapping}get colorSource(){return this._colorSource}get cellColorSource(){return this._cellColorSource}get charSource(){return this._charSource}get nestedSources(){return this._nestedSources}get externalLayerRefs(){return this._externalLayerRefs}}const j={linear:e=>e,easeInQuad:e=>e*e,easeOutQuad:e=>e*(2-e),easeInOutQuad:e=>e<.5?2*e*e:(4-2*e)*e-1,easeInCubic:e=>e*e*e,easeOutCubic:e=>--e*e*e+1,easeInOutCubic:e=>e<.5?4*e*e*e:(e-1)*(2*e-2)*(2*e-2)+1,easeInQuart:e=>e*e*e*e,easeOutQuart:e=>1- --e*e*e*e,easeInOutQuart:e=>e<.5?8*e*e*e*e:1-8*--e*e*e*e,easeInQuint:e=>e*e*e*e*e,easeOutQuint:e=>1+--e*e*e*e*e,easeInOutQuint:e=>e<.5?16*e*e*e*e*e:1+16*--e*e*e*e*e,sin:e=>(1+Math.sin(Math.PI*e-Math.PI/2))/2};function U(e,t){return(e%t+t)%t}"fast"in Array.prototype||(Array.prototype.fast=function(e=1){return this._speed=e,this},Array.prototype.smooth=function(e=1){return this._smooth=e,this},Array.prototype.ease=function(e="linear"){return typeof e=="function"?(this._smooth=1,this._ease=e):j[e]&&(this._smooth=1,this._ease=j[e]),this},Array.prototype.offset=function(e=.5){return this._offset=e%1,this},Array.prototype.fit=function(e=0,t=1){const r=Math.min(...this),a=Math.max(...this),n=this.map(o=>(function(s,c,l,f,h){return(s-c)*(h-f)/(l-c)+f})(o,r,a,e,t));return n._speed=this._speed,n._smooth=this._smooth,n._ease=this._ease,n._offset=this._offset,n}),A.registerMany(G),R.setSynthSourceClass(S),R.injectMethods(S.prototype);const P=R.generateStandaloneFunctions(),w="textmode.synth.js";class K{_usesFeedback=!1;_usesCharFeedback=!1;_usesCellColorFeedback=!1;trackUsage(t){switch(t){case"char":this._usesCharFeedback=!0;break;case"cellColor":this._usesCellColorFeedback=!0;break;default:this._usesFeedback=!0}}reset(){this._usesFeedback=!1,this._usesCharFeedback=!1,this._usesCellColorFeedback=!1}getUsage(){return{usesCharColorFeedback:this._usesFeedback,usesCharFeedback:this._usesCharFeedback,usesCellColorFeedback:this._usesCellColorFeedback}}get usesAnyFeedback(){return this._usesFeedback||this._usesCharFeedback||this._usesCellColorFeedback}get usesCharColorFeedback(){return this._usesFeedback}get usesCharFeedback(){return this._usesCharFeedback}get usesCellColorFeedback(){return this._usesCellColorFeedback}}class Q{_externalLayers=new Map;_counter=0;_layerIdToPrefix=new Map;getPrefix(t){let r=this._layerIdToPrefix.get(t);return r||(r="extLayer"+this._counter++,this._layerIdToPrefix.set(t,r)),r}trackUsage(t,r){const a=this.getPrefix(t.layerId);let n=this._externalLayers.get(t.layerId);switch(n||(n={layerId:t.layerId,uniformPrefix:a,usesChar:!1,usesCharColor:!1,usesCellColor:!1},this._externalLayers.set(t.layerId,n)),r){case"char":n.usesChar=!0;break;case"cellColor":n.usesCellColor=!0;break;default:n.usesCharColor=!0}}hasLayer(t){return this._externalLayers.has(t)}getLayerInfo(t){return this._externalLayers.get(t)}getExternalLayers(){return new Map(this._externalLayers)}get hasExternalLayers(){return this._externalLayers.size>0}get count(){return this._externalLayers.size}reset(){this._externalLayers.clear(),this._counter=0,this._layerIdToPrefix.clear()}}const H={char:"prevCharBuffer",charColor:"prevCharColorBuffer",cellColor:"prevCellColorBuffer",main:"prevCharColorBuffer"};class W{getContextAwareGlslFunction(t,r,a,n,o){return r!=="src"?t.glslFunction:n&&o?this._generateExternalSrcFunction(n,a,o):this._generateSelfFeedbackSrcFunction(a)}getFunctionName(t,r,a,n){return t.name!=="src"?t.name:a&&n?`src_ext_${n(a.layerId)}_${r}`:`src_${r}`}generateTransformCode(t,r,a,n,o,s,c,l,f,h,y,v,C){const _=this.getFunctionName(r,h,v,C),p=(...d)=>[...d,...f].join(", ");let i=o,u=s,m=c,b=l;switch(r.type){case"src":{const d=`c${a}`;t.push(` vec4 ${d} = ${_}(${p(n)});`),i=d;break}case"coord":{const d=`st${a}`;t.push(` vec2 ${d} = ${_}(${p(n)});`),t.push(` ${n} = ${d};`);break}case"color":{const d=`c${a}`;t.push(` vec4 ${d} = ${_}(${p(o)});`),i=d;break}case"combine":{const d=`c${a}`;t.push(` vec4 ${d} = ${_}(${p(o,y??"vec4(0.0)")});`),i=d;break}case"combineCoord":{const d=`st${a}`;t.push(` vec2 ${d} = ${_}(${p(n,y??"vec4(0.0)")});`),t.push(` ${n} = ${d};`);break}}return{colorVar:i,charVar:u,flagsVar:m,rotationVar:b}}_generateExternalSrcFunction(t,r,a){const n=a(t.layerId);return`
|
|
219
219
|
vec4 ${`src_ext_${n}_${r}`}(vec2 _st) {
|
|
220
220
|
return texture(${{char:`${n}_char`,charColor:`${n}_primary`,cellColor:`${n}_cell`,main:`${n}_primary`}[r]}, fract(_st));
|
|
221
221
|
}
|
|
222
|
-
`}_generateSelfFeedbackSrcFunction(
|
|
223
|
-
vec4 ${`src_${
|
|
224
|
-
return texture(${
|
|
222
|
+
`}_generateSelfFeedbackSrcFunction(t){return`
|
|
223
|
+
vec4 ${`src_${t}`}(vec2 _st) {
|
|
224
|
+
return texture(${H[t]}, fract(_st));
|
|
225
225
|
}
|
|
226
|
-
`}}class
|
|
226
|
+
`}}class J{_uniforms=new Map;_dynamicUpdaters=new Map;processArgument(t,r,a){if((function(n){return Array.isArray(n)&&n.length>0&&typeof n[0]=="number"})(t)){const n=`${a}_${r.name}`,o={name:n,type:r.type,value:r.default??0,isDynamic:!0},s=c=>(function(l,f){const h=l._speed??1,y=l._smooth??0;let v=f.time*h*(f.bpm/60)+(l._offset??0);if(y!==0){const C=l._ease??j.linear,_=v-y/2,p=l[Math.floor(U(_,l.length))],i=l[Math.floor(U(_+1,l.length))];return C(Math.min(U(_,1)/y,1))*(i-p)+p}return l[Math.floor(U(v,l.length))]})(t,c);return this._uniforms.set(n,o),this._dynamicUpdaters.set(n,s),{glslValue:n,uniform:o,updater:s}}if(typeof t=="function"){const n=`${a}_${r.name}`,o={name:n,type:r.type,value:r.default??0,isDynamic:!0};return this._uniforms.set(n,o),this._dynamicUpdaters.set(n,t),{glslValue:n,uniform:o,updater:t}}if(typeof t=="number")return{glslValue:x(t)};if(Array.isArray(t)&&typeof t[0]=="number"){const n=t;if(n.length===2)return{glslValue:`vec2(${x(n[0])}, ${x(n[1])})`};if(n.length===3)return{glslValue:`vec3(${x(n[0])}, ${x(n[1])}, ${x(n[2])})`};if(n.length===4)return{glslValue:`vec4(${x(n[0])}, ${x(n[1])}, ${x(n[2])}, ${x(n[3])})`}}return this.processDefault(r)}processDefault(t){const r=t.default;return typeof r=="number"?{glslValue:x(r)}:Array.isArray(r)?{glslValue:`vec${r.length}(${r.map(x).join(", ")})`}:{glslValue:"0.0"}}getUniforms(){return new Map(this._uniforms)}getDynamicUpdaters(){return new Map(this._dynamicUpdaters)}clear(){this._uniforms.clear(),this._dynamicUpdaters.clear()}}function x(e){const t=e.toString();return t.includes(".")?t:t+".0"}function X(e){return new Z().compile(e)}class Z{_uniformManager=new J;_feedbackTracker=new K;_externalLayerManager=new Q;_codeGenerator=new W;_glslFunctions=new Set;_mainCode=[];_varCounter=0;_currentTarget="main";_usesCharSource=!1;compile(t){this._reset();const r=this._compileChain(t,"main","vec4(1.0, 1.0, 1.0, 1.0)","v_uv","main");let a=r.charVar;t.charSource&&(a=this._compileCharSource(t));let n=r.colorVar;t.colorSource&&(n=this._compileChain(t.colorSource,"charColor","vec4(1.0, 1.0, 1.0, 1.0)","v_uv","charColor").colorVar);let o="vec4(0.0, 0.0, 0.0, 0.0)";t.cellColorSource&&(o=this._compileChain(t.cellColorSource,"cellColor","vec4(0.0, 0.0, 0.0, 0.0)","v_uv","cellColor").colorVar);const s=(function(f,h,y){return f?`
|
|
227
227
|
// Character output from generator
|
|
228
|
-
vec4 charOutput = ${
|
|
228
|
+
vec4 charOutput = ${h};`:`
|
|
229
229
|
// Derive character from color luminance
|
|
230
|
-
float lum = _luminance(${
|
|
230
|
+
float lum = _luminance(${y}.rgb);
|
|
231
231
|
int charIdx = int(lum * 255.0);
|
|
232
|
-
vec4 charOutput = vec4(float(charIdx % 256) / 255.0, float(charIdx / 256) / 255.0, 0.0, 0.0);`})(!!a,a??"vec4(0.0)",r.colorVar),
|
|
233
|
-
`);let
|
|
234
|
-
uniform int u_charMapSize
|
|
232
|
+
vec4 charOutput = vec4(float(charIdx % 256) / 255.0, float(charIdx / 256) / 255.0, 0.0, 0.0);`})(!!a,a??"vec4(0.0)",r.colorVar),c=this._feedbackTracker.getUsage();return{fragmentSource:(function(f){const{uniforms:h,glslFunctions:y,mainCode:v,charOutputCode:C,primaryColorVar:_,cellColorVar:p,charMapping:i,usesFeedback:u,usesCharFeedback:m,usesCellColorFeedback:b,usesCharSource:d,externalLayers:M}=f,B=Array.from(h.values()).map(F=>`uniform ${F.type} ${F.name};`).join(`
|
|
233
|
+
`);let z="",$="";i&&(z=`uniform int u_charMap[${i.indices.length}];
|
|
234
|
+
uniform int u_charMapSize;`,$=`
|
|
235
235
|
// Apply character mapping
|
|
236
236
|
int rawCharIdx = int(charOutput.r * 255.0 + charOutput.g * 255.0 * 256.0);
|
|
237
237
|
int mappedCharIdx = u_charMap[int(mod(float(rawCharIdx), float(u_charMapSize)))];
|
|
238
238
|
charOutput.r = float(mappedCharIdx % 256) / 255.0;
|
|
239
|
-
charOutput.g = float(mappedCharIdx / 256) / 255.0;`);const
|
|
240
|
-
`),V=[];if(
|
|
239
|
+
charOutput.g = float(mappedCharIdx / 256) / 255.0;`);const k=[];u&&k.push("uniform sampler2D prevCharColorBuffer;"),m&&k.push("uniform sampler2D prevCharBuffer;"),b&&k.push("uniform sampler2D prevCellColorBuffer;");const oe=k.join(`
|
|
240
|
+
`),se=d?"uniform float u_charSourceCount;":"",V=[];if(M)for(const[,F]of M)F.usesChar&&V.push(`uniform sampler2D ${F.uniformPrefix}_char;`),F.usesCharColor&&V.push(`uniform sampler2D ${F.uniformPrefix}_primary;`),F.usesCellColor&&V.push(`uniform sampler2D ${F.uniformPrefix}_cell;`);return`#version 300 es
|
|
241
241
|
precision highp float;
|
|
242
242
|
|
|
243
243
|
// Varyings
|
|
@@ -251,14 +251,15 @@ layout(location = 2) out vec4 o_secondaryColor;
|
|
|
251
251
|
// Standard uniforms
|
|
252
252
|
uniform float time;
|
|
253
253
|
uniform vec2 resolution;
|
|
254
|
-
${
|
|
254
|
+
${oe}
|
|
255
255
|
${V.length>0?`// External layer samplers
|
|
256
256
|
${V.join(`
|
|
257
257
|
`)}`:""}
|
|
258
|
-
${
|
|
258
|
+
${z}
|
|
259
|
+
${se}
|
|
259
260
|
|
|
260
261
|
// Dynamic uniforms
|
|
261
|
-
${
|
|
262
|
+
${B}
|
|
262
263
|
|
|
263
264
|
|
|
264
265
|
// Utility functions
|
|
@@ -359,7 +360,7 @@ float _noise(vec3 v) {
|
|
|
359
360
|
|
|
360
361
|
|
|
361
362
|
// Transform functions
|
|
362
|
-
${Array.from(
|
|
363
|
+
${Array.from(y).join(`
|
|
363
364
|
`)}
|
|
364
365
|
|
|
365
366
|
void main() {
|
|
@@ -367,12 +368,12 @@ void main() {
|
|
|
367
368
|
${v.join(`
|
|
368
369
|
`)}
|
|
369
370
|
|
|
370
|
-
${
|
|
371
|
-
${
|
|
371
|
+
${C}
|
|
372
|
+
${$}
|
|
372
373
|
|
|
373
374
|
// Output to MRT
|
|
374
375
|
o_character = charOutput;
|
|
375
|
-
o_primaryColor = ${
|
|
376
|
-
o_secondaryColor = ${
|
|
376
|
+
o_primaryColor = ${_};
|
|
377
|
+
o_secondaryColor = ${p};
|
|
377
378
|
}
|
|
378
|
-
`})({uniforms:this._uniformManager.getUniforms(),glslFunctions:this._glslFunctions,mainCode:this._mainCode,charOutputCode:c,primaryColorVar:n,cellColorVar:o,charMapping:e.charMapping,usesFeedback:s.usesCharColorFeedback,usesCharFeedback:s.usesCharFeedback,usesCellColorFeedback:s.usesCellColorFeedback,externalLayers:this._externalLayerManager.getExternalLayers()}),uniforms:this._uniformManager.getUniforms(),dynamicUpdaters:this._uniformManager.getDynamicUpdaters(),charMapping:e.charMapping,usesCharColorFeedback:s.usesCharColorFeedback,usesCharFeedback:s.usesCharFeedback,usesCellColorFeedback:s.usesCellColorFeedback,externalLayers:this._externalLayerManager.getExternalLayers()}}_reset(){this._varCounter=0,this._uniformManager.clear(),this._feedbackTracker.reset(),this._externalLayerManager.reset(),this._glslFunctions.clear(),this._mainCode.length=0,this._currentTarget="main"}_compileCharSource(e){const r=this._compileChain(e.charSource,"charSrc","vec4(1.0, 1.0, 1.0, 1.0)","v_uv","char"),a="charFromSource_"+this._varCounter++,n=e.charCount??256;return this._mainCode.push(" // Convert charSource color to character index"),this._mainCode.push(` float charLum_${a} = _luminance(${r.colorVar}.rgb);`),this._mainCode.push(` int charIdx_${a} = int(charLum_${a} * ${n.toFixed(1)});`),this._mainCode.push(` vec4 ${a} = vec4(float(charIdx_${a} % 256) / 255.0, float(charIdx_${a} / 256) / 255.0, 0.0, 0.0);`),a}_compileChain(e,r,a,n="v_uv",o="main"){const c=this._currentTarget;this._currentTarget=o;const s=`${r}_st`;let l,f,m,h=`${r}_c`;this._mainCode.push(` vec2 ${s} = ${n};`),this._mainCode.push(` vec4 ${h} = ${a};`);const v=e.transforms,x=v.map(i=>this._getProcessedTransform(i.name)),d=this._identifyCoordTransforms(x),y=i=>{const p=v[i],_=x[i];if(!_)return void console.warn(`[SynthCompiler] Unknown transform: ${p.name}`);const M=e.externalLayerRefs.get(i);p.name==="src"&&this._trackSrcUsage(M);const u=this._codeGenerator.getContextAwareGlslFunction(_,p.name,this._currentTarget,M,A=>this._externalLayerManager.getPrefix(A));this._glslFunctions.add(u);const X=this._processArguments(p.userArgs,_.inputs,`${r}_${i}_${p.name}`),I=e.nestedSources.get(i);let z;I&&(_.type==="combine"||_.type==="combineCoord")&&(z=this._compileChain(I,`${r}_nested_${i}`,a,s,o).colorVar);const b=this._codeGenerator.generateTransformCode(this._mainCode,_,this._varCounter++,s,h,l,f,m,X,this._currentTarget,z,M,A=>this._externalLayerManager.getPrefix(A));h=b.colorVar,b.charVar&&(l=b.charVar),b.flagsVar&&(f=b.flagsVar),b.rotationVar&&(m=b.rotationVar)};for(let i=d.length-1;i>=0;i--)y(d[i]);for(let i=0;i<v.length;i++){const p=x[i];(!p||p.type!=="coord"&&p.type!=="combineCoord")&&y(i)}return this._currentTarget=c,{coordVar:s,colorVar:h,charVar:l,flagsVar:f,rotationVar:m}}_identifyCoordTransforms(e){const r=[];for(let a=0;a<e.length;a++){const n=e[a];n&&(n.type!=="coord"&&n.type!=="combineCoord"||r.push(a))}return r}_trackSrcUsage(e){e?this._externalLayerManager.trackUsage(e,this._currentTarget):this._feedbackTracker.trackUsage(this._currentTarget)}_getProcessedTransform(e){return L.getProcessed(e)}_processArguments(e,r,a){const n=[];for(let o=0;o<r.length;o++){const c=r[o],s=e[o]??c.default,l=this._uniformManager.processArgument(s,c,a);n.push(l.glslValue)}return n}}class W{_resolvedIndices;_lastFontCharacterCount=0;_lastChars="";resolve(e,r){const a=r.characters.length;if(this._resolvedIndices&&this._lastFontCharacterCount===a&&this._lastChars===e)return this._resolvedIndices;const n=Array.from(e),o=new Int32Array(n.length),c=r.characterMap,s=r.characters;for(let l=0;l<n.length;l++){const f=n[l],m=c.get(f);if(m!==void 0)o[l]=s.indexOf(m);else{const h=c.get(" ");o[l]=h!==void 0?s.indexOf(h):0}}return this._resolvedIndices=o,this._lastFontCharacterCount=a,this._lastChars=e,o}invalidate(){this._resolvedIndices=void 0,this._lastFontCharacterCount=0,this._lastChars=""}}function O(t={}){return{source:t.source??new S,compiled:t.compiled,shader:t.shader,characterResolver:t.characterResolver??new W,needsCompile:t.needsCompile??!1,pingPongBuffers:t.pingPongBuffers,pingPongIndex:t.pingPongIndex??0,externalLayerMap:t.externalLayerMap,bpm:t.bpm}}let D=60;function J(t){t.bpm=function(e){return(function(r){D=r})(e),e}}function P(t){const e=new Map;for(const[,r]of t.externalLayerRefs)e.set(r.layerId,r.layer);for(const[,r]of t.nestedSources){const a=P(r);for(const[n,o]of a)e.set(n,o)}if(t.charSource){const r=P(t.charSource);for(const[a,n]of r)e.set(a,n)}if(t.colorSource){const r=P(t.colorSource);for(const[a,n]of r)e.set(a,n)}if(t.cellColorSource){const r=P(t.cellColorSource);for(const[a,n]of r)e.set(a,n)}return e}function Z(t){const e=t.getPluginState(w);e&&(e.shader?.dispose&&e.shader.dispose(),e.pingPongBuffers&&(e.pingPongBuffers[0].dispose?.(),e.pingPongBuffers[1].dispose?.()))}const ee={name:w,version:"1.0.0",install(t,e){J(t),(function(r){r.extendLayer("synth",function(a){const n=this.grid!==void 0&&this.drawFramebuffer!==void 0;let o=this.getPluginState(w);o?(o.source=a,o.needsCompile=!0,o.characterResolver.invalidate(),n&&(o.compiled=j(a))):o=O({source:a,compiled:n?j(a):void 0,needsCompile:!0}),this.setPluginState(w,o)})})(e),(function(r){r.extendLayer("bpm",function(a){let n=this.getPluginState(w);n?n.bpm=a:n=O({bpm:a}),this.setPluginState(w,n)})})(e),(function(r){r.extendLayer("clearSynth",function(){const a=this.getPluginState(w);a&&(a.shader?.dispose&&a.shader.dispose(),a.pingPongBuffers&&(a.pingPongBuffers[0].dispose?.(),a.pingPongBuffers[1].dispose?.()),this.setPluginState(w,void 0))})})(e),e.registerLayerPreRenderHook(r=>(async function(a,n){const o=a.getPluginState(w);if(!o)return;const c=a.grid,s=a.drawFramebuffer;if(!c||!s||(o.compiled||(o.compiled=j(o.source),o.externalLayerMap=P(o.source),o.needsCompile=!0),o.needsCompile&&o.compiled&&(o.shader?.dispose&&o.shader.dispose(),o.externalLayerMap=P(o.source),o.shader=await n.createFilterShader(o.compiled.fragmentSource),o.needsCompile=!1),!o.shader||!o.compiled))return;const l=o.compiled.usesCharColorFeedback,f=o.compiled.usesCharFeedback,m=o.compiled.usesCellColorFeedback,h=l||f||m;h&&!o.pingPongBuffers&&(o.pingPongBuffers=[n.createFramebuffer({width:c.cols,height:c.rows,attachments:3}),n.createFramebuffer({width:c.cols,height:c.rows,attachments:3})],o.pingPongIndex=0);const v={time:n.secs,frameCount:n.frameCount,width:c.width,height:c.height,cols:c.cols,rows:c.rows,bpm:o.bpm??D},x=d=>{n.setUniform("time",n.secs),n.setUniform("resolution",[v.cols,v.rows]);for(const[i,p]of o.compiled.dynamicUpdaters)n.setUniform(i,p(v));for(const[i,p]of o.compiled.uniforms)p.isDynamic||typeof p.value=="function"||n.setUniform(i,p.value);if(o.compiled.charMapping){const i=o.characterResolver.resolve(o.compiled.charMapping.chars,a.font);n.setUniform("u_charMap",i),n.setUniform("u_charMapSize",i.length)}d&&(l&&n.setUniform("prevCharColorBuffer",d.textures[1]),f&&n.setUniform("prevCharBuffer",d.textures[0]),m&&n.setUniform("prevCellColorBuffer",d.textures[2]));const y=o.compiled.externalLayers;if(y&&y.size>0&&o.externalLayerMap)for(const[i,p]of y){const _=o.externalLayerMap.get(i);if(!_){console.warn(`[textmode.synth.js] External layer not found: ${i}`);continue}const M=_.getPluginState(w);let u;M?.pingPongBuffers?u=M.pingPongBuffers[M.pingPongIndex].textures:_.drawFramebuffer&&(u=_.drawFramebuffer.textures),u&&(p.usesChar&&n.setUniform(`${p.uniformPrefix}_char`,u[0]),p.usesCharColor&&n.setUniform(`${p.uniformPrefix}_primary`,u[1]),p.usesCellColor&&n.setUniform(`${p.uniformPrefix}_cell`,u[2]))}};if(h&&o.pingPongBuffers){const d=o.pingPongBuffers[o.pingPongIndex],y=o.pingPongBuffers[1-o.pingPongIndex];y.begin(),n.clear(),n.shader(o.shader),x(d),n.rect(c.cols,c.rows),y.end(),s.begin(),n.clear(),n.shader(o.shader),x(d),n.rect(c.cols,c.rows),s.end(),o.pingPongIndex=1-o.pingPongIndex}else s.begin(),n.clear(),n.shader(o.shader),x(null),n.rect(c.cols,c.rows),s.end()})(r,t)),e.registerLayerDisposedHook(Z)},uninstall(t,e){const r=[e.layerManager.base,...e.layerManager.all];for(const a of r){const n=a.getPluginState(w);n&&(n.shader?.dispose&&n.shader.dispose(),n.pingPongBuffers&&(n.pingPongBuffers[0].dispose?.(),n.pingPongBuffers[1].dispose?.()))}delete t.bpm,e.removeLayerExtension("synth"),e.removeLayerExtension("bpm"),e.removeLayerExtension("clearSynth")}};g.SynthPlugin=ee,g.SynthSource=S,g.cellColor=t=>{const e=new S;return e._colorSource=t,e},g.char=(t,e)=>{const r=new S;return r._charSource=t,r._charCount=e,r},g.charColor=t=>{const e=new S;return e._colorSource=t,e},g.gradient=function(t){return F.gradient(t)},g.noise=function(t,e){return F.noise(t,e)},g.osc=function(t,e,r){return F.osc(t,e,r)},g.paint=t=>{const e=new S;return e._colorSource=t,e._cellColorSource=t,e},g.shape=function(t,e,r){return F.shape(t,e,r)},g.solid=function(t,e,r,a){return F.solid(t,e,r,a)},g.src=t=>{const e=F.src;if(!t)return e();const r=new S,a=t.id??`layer_${Date.now()}_${Math.random().toString(36).slice(2,9)}`;return r.addExternalLayerRef({layerId:a,layer:t}),r},g.voronoi=function(t,e,r){return F.voronoi(t,e,r)},Object.defineProperty(g,Symbol.toStringTag,{value:"Module"})});
|
|
379
|
+
`})({uniforms:this._uniformManager.getUniforms(),glslFunctions:this._glslFunctions,mainCode:this._mainCode,charOutputCode:s,primaryColorVar:n,cellColorVar:o,charMapping:t.charMapping,usesFeedback:c.usesCharColorFeedback,usesCharFeedback:c.usesCharFeedback,usesCellColorFeedback:c.usesCellColorFeedback,usesCharSource:this._usesCharSource,externalLayers:this._externalLayerManager.getExternalLayers()}),uniforms:this._uniformManager.getUniforms(),dynamicUpdaters:this._uniformManager.getDynamicUpdaters(),charMapping:t.charMapping,usesCharColorFeedback:c.usesCharColorFeedback,usesCharFeedback:c.usesCharFeedback,usesCellColorFeedback:c.usesCellColorFeedback,usesCharSource:this._usesCharSource,externalLayers:this._externalLayerManager.getExternalLayers()}}_reset(){this._varCounter=0,this._uniformManager.clear(),this._feedbackTracker.reset(),this._externalLayerManager.reset(),this._glslFunctions.clear(),this._mainCode.length=0,this._currentTarget="main",this._usesCharSource=!1}_compileCharSource(t){this._usesCharSource=!0;const r=this._compileChain(t.charSource,"charSrc","vec4(1.0, 1.0, 1.0, 1.0)","v_uv","char"),a="charFromSource_"+this._varCounter++;return this._mainCode.push(" // Convert charSource color to character index"),this._mainCode.push(` float charLum_${a} = _luminance(${r.colorVar}.rgb);`),this._mainCode.push(` int charIdx_${a} = int(charLum_${a} * u_charSourceCount);`),this._mainCode.push(` vec4 ${a} = vec4(float(charIdx_${a} % 256) / 255.0, float(charIdx_${a} / 256) / 255.0, 0.0, 0.0);`),a}_compileChain(t,r,a,n="v_uv",o="main"){const s=this._currentTarget;this._currentTarget=o;const c=`${r}_st`;let l,f,h,y=`${r}_c`;this._mainCode.push(` vec2 ${c} = ${n};`),this._mainCode.push(` vec4 ${y} = ${a};`);const v=t.transforms,C=v.map(i=>this._getProcessedTransform(i.name)),_=this._identifyCoordTransforms(C),p=i=>{const u=v[i],m=C[i];if(!m)return void console.warn(`[SynthCompiler] Unknown transform: ${u.name}`);const b=t.externalLayerRefs.get(i);u.name==="src"&&this._trackSrcUsage(b);const d=this._codeGenerator.getContextAwareGlslFunction(m,u.name,this._currentTarget,b,k=>this._externalLayerManager.getPrefix(k));this._glslFunctions.add(d);const M=this._processArguments(u.userArgs,m.inputs,`${r}_${i}_${u.name}`),B=t.nestedSources.get(i);let z;B&&(m.type==="combine"||m.type==="combineCoord")&&(z=this._compileChain(B,`${r}_nested_${i}`,a,c,o).colorVar);const $=this._codeGenerator.generateTransformCode(this._mainCode,m,this._varCounter++,c,y,l,f,h,M,this._currentTarget,z,b,k=>this._externalLayerManager.getPrefix(k));y=$.colorVar,$.charVar&&(l=$.charVar),$.flagsVar&&(f=$.flagsVar),$.rotationVar&&(h=$.rotationVar)};for(let i=_.length-1;i>=0;i--)p(_[i]);for(let i=0;i<v.length;i++){const u=C[i];(!u||u.type!=="coord"&&u.type!=="combineCoord")&&p(i)}return this._currentTarget=s,{coordVar:c,colorVar:y,charVar:l,flagsVar:f,rotationVar:h}}_identifyCoordTransforms(t){const r=[];for(let a=0;a<t.length;a++){const n=t[a];n&&(n.type!=="coord"&&n.type!=="combineCoord"||r.push(a))}return r}_trackSrcUsage(t){t?this._externalLayerManager.trackUsage(t,this._currentTarget):this._feedbackTracker.trackUsage(this._currentTarget)}_getProcessedTransform(t){return A.getProcessed(t)}_processArguments(t,r,a){const n=[];for(let o=0;o<r.length;o++){const s=r[o],c=t[o]??s.default,l=this._uniformManager.processArgument(c,s,a);n.push(l.glslValue)}return n}}class ee{_resolvedIndices;_lastFontCharacterCount=0;_lastChars="";resolve(t,r){const a=r.characters.length;if(this._resolvedIndices&&this._lastFontCharacterCount===a&&this._lastChars===t)return this._resolvedIndices;const n=Array.from(t),o=new Int32Array(n.length),s=r.characterMap,c=r.characters;for(let l=0;l<n.length;l++){const f=n[l],h=s.get(f);if(h!==void 0)o[l]=c.indexOf(h);else{const y=s.get(" ");o[l]=y!==void 0?c.indexOf(y):0}}return this._resolvedIndices=o,this._lastFontCharacterCount=a,this._lastChars=t,o}invalidate(){this._resolvedIndices=void 0,this._lastFontCharacterCount=0,this._lastChars=""}}function E(e={}){return{source:e.source??new S,compiled:e.compiled,shader:e.shader,characterResolver:e.characterResolver??new ee,needsCompile:e.needsCompile??!1,pingPongBuffers:e.pingPongBuffers,pingPongIndex:e.pingPongIndex??0,externalLayerMap:e.externalLayerMap,bpm:e.bpm}}let D=60;function te(e){e.bpm=function(t){return(function(r){D=r})(t),t}}function I(e){const t=new Map;for(const[,r]of e.externalLayerRefs)t.set(r.layerId,r.layer);for(const[,r]of e.nestedSources){const a=I(r);for(const[n,o]of a)t.set(n,o)}if(e.charSource){const r=I(e.charSource);for(const[a,n]of r)t.set(a,n)}if(e.colorSource){const r=I(e.colorSource);for(const[a,n]of r)t.set(a,n)}if(e.cellColorSource){const r=I(e.cellColorSource);for(const[a,n]of r)t.set(a,n)}return t}let O=null;function q(e,t,r){const a=r??O;if(a)try{a(e,t)}catch{}}function ne(e,t,r,a={}){let n;try{n=e()}catch(o){return q(o,t,a.onError),r}return(function(o){return o==null?!1:typeof o=="number"?Number.isFinite(o):Array.isArray(o)?o.length>0&&o.every(s=>typeof s=="number"&&Number.isFinite(s)):!1})(n)?n:(q(new Error(`[textmode.synth.js] Invalid dynamic parameter value for "${t}": ${N(n)}`),t,a.onError),r)}function N(e){if(e===void 0)return"undefined";if(e===null)return"null";if(typeof e=="number"){if(Number.isNaN(e))return"NaN";if(!Number.isFinite(e))return e>0?"Infinity":"-Infinity"}if(Array.isArray(e)){const t=e.findIndex(r=>typeof r!="number"||!Number.isFinite(r));if(t>=0)return`array with invalid element at index ${t}: ${N(e[t])}`}return String(e)}function re(e){const t=e.getPluginState(w);t&&(t.shader?.dispose&&t.shader.dispose(),t.pingPongBuffers&&(t.pingPongBuffers[0].dispose?.(),t.pingPongBuffers[1].dispose?.()))}const ae={name:w,version:"1.0.0",install(e,t){te(e),(function(r){r.extendLayer("synth",function(a){const n=this.grid!==void 0&&this.drawFramebuffer!==void 0;let o=this.getPluginState(w);o?(o.source=a,o.needsCompile=!0,o.characterResolver.invalidate(),n&&(o.compiled=X(a))):o=E({source:a,compiled:n?X(a):void 0,needsCompile:!0}),this.setPluginState(w,o)})})(t),(function(r){r.extendLayer("bpm",function(a){let n=this.getPluginState(w);n?n.bpm=a:n=E({bpm:a}),this.setPluginState(w,n)})})(t),(function(r){r.extendLayer("clearSynth",function(){const a=this.getPluginState(w);a&&(a.shader?.dispose&&a.shader.dispose(),a.pingPongBuffers&&(a.pingPongBuffers[0].dispose?.(),a.pingPongBuffers[1].dispose?.()),this.setPluginState(w,void 0))})})(t),t.registerLayerPreRenderHook(r=>(async function(a,n){const o=a.getPluginState(w);if(!o)return;const s=a.grid,c=a.drawFramebuffer;if(!s||!c||(o.compiled||(o.compiled=X(o.source),o.externalLayerMap=I(o.source),o.needsCompile=!0),o.needsCompile&&o.compiled&&(o.shader?.dispose&&o.shader.dispose(),o.externalLayerMap=I(o.source),o.shader=await n.createFilterShader(o.compiled.fragmentSource),o.needsCompile=!1),!o.shader||!o.compiled))return;const l=o.compiled.usesCharColorFeedback,f=o.compiled.usesCharFeedback,h=o.compiled.usesCellColorFeedback,y=l||f||h;y&&!o.pingPongBuffers&&(o.pingPongBuffers=[n.createFramebuffer({width:s.cols,height:s.rows,attachments:3}),n.createFramebuffer({width:s.cols,height:s.rows,attachments:3})],o.pingPongIndex=0);const v={time:n.secs,frameCount:n.frameCount,width:s.width,height:s.height,cols:s.cols,rows:s.rows,bpm:o.bpm??D},C=new Map;for(const[p,i]of o.compiled.dynamicUpdaters){const u=o.compiled.uniforms.get(p),m=ne(()=>i(v),p,u?.value??0,{onError:o.onDynamicError});C.set(p,m)}const _=p=>{n.setUniform("time",n.secs),n.setUniform("resolution",[v.cols,v.rows]);for(const[u,m]of C)n.setUniform(u,m);for(const[u,m]of o.compiled.uniforms)m.isDynamic||typeof m.value=="function"||n.setUniform(u,m.value);if(o.compiled.charMapping){const u=o.characterResolver.resolve(o.compiled.charMapping.chars,a.font);n.setUniform("u_charMap",u),n.setUniform("u_charMapSize",u.length)}if(o.compiled.usesCharSource){const u=o.compiled.charMapping?o.compiled.charMapping.chars.length:a.font.characters.length;n.setUniform("u_charSourceCount",u)}p&&(l&&n.setUniform("prevCharColorBuffer",p.textures[1]),f&&n.setUniform("prevCharBuffer",p.textures[0]),h&&n.setUniform("prevCellColorBuffer",p.textures[2]));const i=o.compiled.externalLayers;if(i&&i.size>0&&o.externalLayerMap)for(const[u,m]of i){const b=o.externalLayerMap.get(u);if(!b){console.warn(`[textmode.synth.js] External layer not found: ${u}`);continue}const d=b.getPluginState(w);let M;d?.pingPongBuffers?M=d.pingPongBuffers[d.pingPongIndex].textures:b.drawFramebuffer&&(M=b.drawFramebuffer.textures),M&&(m.usesChar&&n.setUniform(`${m.uniformPrefix}_char`,M[0]),m.usesCharColor&&n.setUniform(`${m.uniformPrefix}_primary`,M[1]),m.usesCellColor&&n.setUniform(`${m.uniformPrefix}_cell`,M[2]))}};if(y&&o.pingPongBuffers){const p=o.pingPongBuffers[o.pingPongIndex],i=o.pingPongBuffers[1-o.pingPongIndex];i.begin(),n.clear(),n.shader(o.shader),_(p),n.rect(s.cols,s.rows),i.end(),c.begin(),n.clear(),n.shader(o.shader),_(p),n.rect(s.cols,s.rows),c.end(),o.pingPongIndex=1-o.pingPongIndex}else c.begin(),n.clear(),n.shader(o.shader),_(null),n.rect(s.cols,s.rows),c.end()})(r,e)),t.registerLayerDisposedHook(re)},uninstall(e,t){const r=[t.layerManager.base,...t.layerManager.all];for(const a of r){const n=a.getPluginState(w);n&&(n.shader?.dispose&&n.shader.dispose(),n.pingPongBuffers&&(n.pingPongBuffers[0].dispose?.(),n.pingPongBuffers[1].dispose?.()))}delete e.bpm,t.removeLayerExtension("synth"),t.removeLayerExtension("bpm"),t.removeLayerExtension("clearSynth")}};g.SynthPlugin=ae,g.SynthSource=S,g.cellColor=e=>{const t=new S;return t._colorSource=e,t},g.char=(e,t)=>{const r=new S;return r._charSource=e,r._charCount=t,r},g.charColor=e=>{const t=new S;return t._colorSource=e,t},g.gradient=function(e){return P.gradient(e)},g.noise=function(e,t){return P.noise(e,t)},g.osc=function(e,t,r){return P.osc(e,t,r)},g.paint=e=>{const t=new S;return t._colorSource=e,t._cellColorSource=e,t},g.setGlobalErrorCallback=function(e){O=e},g.shape=function(e,t,r){return P.shape(e,t,r)},g.solid=function(e,t,r,a){return P.solid(e,t,r,a)},g.src=e=>{const t=P.src;if(!e)return t();const r=new S,a=e.id??`layer_${Date.now()}_${Math.random().toString(36).slice(2,9)}`;return r.addExternalLayerRef({layerId:a,layer:e}),r},g.voronoi=function(e,t,r){return P.voronoi(e,t,r)},Object.defineProperty(g,Symbol.toStringTag,{value:"Module"})});
|
|
@@ -30,6 +30,8 @@ export interface ShaderGenerationOptions {
|
|
|
30
30
|
usesCharFeedback?: boolean;
|
|
31
31
|
/** Whether cell color feedback (src) is used */
|
|
32
32
|
usesCellColorFeedback?: boolean;
|
|
33
|
+
/** Whether char() function is used */
|
|
34
|
+
usesCharSource?: boolean;
|
|
33
35
|
/** External layer references used in this shader */
|
|
34
36
|
externalLayers?: Map<string, ExternalLayerInfo>;
|
|
35
37
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GLSLGenerator.d.ts","sourceRoot":"","sources":["../../../src/compiler/GLSLGenerator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACvC,2BAA2B;IAC3B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACpC,gCAAgC;IAChC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,4BAA4B;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,kCAAkC;IAClC,eAAe,EAAE,MAAM,CAAC;IACxB,+BAA+B;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,iCAAiC;IACjC,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,mDAAmD;IACnD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,+CAA+C;IAC/C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gDAAgD;IAChD,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,oDAAoD;IACpD,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;CAChD;AAuGD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,uBAAuB,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"GLSLGenerator.d.ts","sourceRoot":"","sources":["../../../src/compiler/GLSLGenerator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACvC,2BAA2B;IAC3B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACpC,gCAAgC;IAChC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,4BAA4B;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,kCAAkC;IAClC,eAAe,EAAE,MAAM,CAAC;IACxB,+BAA+B;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,iCAAiC;IACjC,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,mDAAmD;IACnD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,+CAA+C;IAC/C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gDAAgD;IAChD,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,sCAAsC;IACtC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,oDAAoD;IACpD,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;CAChD;AAuGD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,uBAAuB,GAAG,MAAM,CA8G/E;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAC1C,UAAU,EAAE,OAAO,EACnB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACd,MAAM,CAaR"}
|
|
@@ -45,6 +45,8 @@ export interface CompiledSynthShader {
|
|
|
45
45
|
usesCharFeedback: boolean;
|
|
46
46
|
/** Whether this shader uses cell color feedback (src) - reads from prevCellColorBuffer */
|
|
47
47
|
usesCellColorFeedback: boolean;
|
|
48
|
+
/** Whether this shader uses char() function for character indices */
|
|
49
|
+
usesCharSource: boolean;
|
|
48
50
|
/** External layer references used in this shader, keyed by layer ID */
|
|
49
51
|
externalLayers: Map<string, ExternalLayerInfo>;
|
|
50
52
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/compiler/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAElF;;;;;;;GAOG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,WAAW,GAAG,WAAW,GAAG,MAAM,CAAC;AAE5E;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IACjC,8DAA8D;IAC9D,OAAO,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,aAAa,EAAE,MAAM,CAAC;IACtB,+CAA+C;IAC/C,QAAQ,EAAE,OAAO,CAAC;IAClB,mDAAmD;IACnD,aAAa,EAAE,OAAO,CAAC;IACvB,gDAAgD;IAChD,aAAa,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,sCAAsC;IACtC,cAAc,EAAE,MAAM,CAAC;IACvB,qDAAqD;IACrD,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACpC,qDAAqD;IACrD,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IACvE,4CAA4C;IAC5C,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,+FAA+F;IAC/F,qBAAqB,EAAE,OAAO,CAAC;IAC/B,oFAAoF;IACpF,gBAAgB,EAAE,OAAO,CAAC;IAC1B,0FAA0F;IAC1F,qBAAqB,EAAE,OAAO,CAAC;IAC/B,uEAAuE;IACvE,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;CAC/C;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACtB,qBAAqB;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,qBAAqB;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACtC,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,kCAAkC;IAClC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,yBAAyB;IACzB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACpC,+BAA+B;IAC/B,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;CACvE"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/compiler/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAElF;;;;;;;GAOG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,WAAW,GAAG,WAAW,GAAG,MAAM,CAAC;AAE5E;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IACjC,8DAA8D;IAC9D,OAAO,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,aAAa,EAAE,MAAM,CAAC;IACtB,+CAA+C;IAC/C,QAAQ,EAAE,OAAO,CAAC;IAClB,mDAAmD;IACnD,aAAa,EAAE,OAAO,CAAC;IACvB,gDAAgD;IAChD,aAAa,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,sCAAsC;IACtC,cAAc,EAAE,MAAM,CAAC;IACvB,qDAAqD;IACrD,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACpC,qDAAqD;IACrD,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IACvE,4CAA4C;IAC5C,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,+FAA+F;IAC/F,qBAAqB,EAAE,OAAO,CAAC;IAC/B,oFAAoF;IACpF,gBAAgB,EAAE,OAAO,CAAC;IAC1B,0FAA0F;IAC1F,qBAAqB,EAAE,OAAO,CAAC;IAC/B,qEAAqE;IACrE,cAAc,EAAE,OAAO,CAAC;IACxB,uEAAuE;IACvE,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;CAC/C;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACtB,qBAAqB;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,qBAAqB;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACtC,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,kCAAkC;IAClC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,yBAAyB;IACzB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACpC,+BAA+B;IAC/B,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;CACvE"}
|
|
@@ -63,21 +63,22 @@ export interface ISynthSource {
|
|
|
63
63
|
cellColor(source: ISynthSource): this;
|
|
64
64
|
/**
|
|
65
65
|
* Set the character indices using a character source chain.
|
|
66
|
+
* The number of characters is determined by `charMap()` if defined,
|
|
67
|
+
* otherwise falls back to the total characters in the layer's font.
|
|
66
68
|
*
|
|
67
69
|
* @param source A synth source producing character indices
|
|
68
|
-
* @param charCount Number of different characters to use from the character mapping
|
|
69
70
|
* @returns The SynthSource for chaining
|
|
70
71
|
*
|
|
71
72
|
* @example
|
|
72
73
|
* ```ts
|
|
73
|
-
* // Use noise to select characters
|
|
74
|
-
* char(noise(10)
|
|
74
|
+
* // Use noise to select characters from charMap
|
|
75
|
+
* char(noise(10)).charMap('@#%*+=-:. ')
|
|
75
76
|
*
|
|
76
|
-
* // Use oscillator
|
|
77
|
-
* char(osc(5)
|
|
77
|
+
* // Use oscillator with default font characters
|
|
78
|
+
* char(osc(5))
|
|
78
79
|
* ```
|
|
79
80
|
*/
|
|
80
|
-
char(source: ISynthSource
|
|
81
|
+
char(source: ISynthSource): this;
|
|
81
82
|
/**
|
|
82
83
|
* Set both character foreground and cell background color using the same source chain.
|
|
83
84
|
* This is a convenience method that combines `.charColor()` and `.cellColor()` in one call.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ISynthSource.d.ts","sourceRoot":"","sources":["../../../src/core/ISynthSource.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnD;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC5B;;;;;;;;;;;;;;;;;;OAkBG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAE7B;;;;;;;;;;;;;;;;;OAiBG;IACH,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;IAEtC;;;;;;;;;;;;;;OAcG;IACH,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;IAEtC
|
|
1
|
+
{"version":3,"file":"ISynthSource.d.ts","sourceRoot":"","sources":["../../../src/core/ISynthSource.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,7 +12,6 @@ interface SynthSourceCreateOptions {
|
|
|
12
12
|
colorSource?: SynthSource;
|
|
13
13
|
cellColorSource?: SynthSource;
|
|
14
14
|
charSource?: SynthSource;
|
|
15
|
-
charCount?: number;
|
|
16
15
|
nestedSources?: Map<number, SynthSource>;
|
|
17
16
|
externalLayerRefs?: Map<number, ExternalLayerReference>;
|
|
18
17
|
}
|
|
@@ -51,8 +50,6 @@ export declare class SynthSource {
|
|
|
51
50
|
private _cellColorSource?;
|
|
52
51
|
/** Reference to the character source chain (if any) - used by char() function */
|
|
53
52
|
private _charSource?;
|
|
54
|
-
/** Number of unique characters when using char() function */
|
|
55
|
-
private _charCount?;
|
|
56
53
|
/**
|
|
57
54
|
* Create a new SynthSource.
|
|
58
55
|
* @param options Optional initialization options
|
|
@@ -78,7 +75,7 @@ export declare class SynthSource {
|
|
|
78
75
|
addExternalLayerRef(ref: ExternalLayerReference): this;
|
|
79
76
|
charMap(chars: string): this;
|
|
80
77
|
charColor(source: SynthSource): this;
|
|
81
|
-
char(source: SynthSource
|
|
78
|
+
char(source: SynthSource): this;
|
|
82
79
|
cellColor(source: SynthSource): this;
|
|
83
80
|
paint(source: SynthSource): this;
|
|
84
81
|
clone(): SynthSource;
|
|
@@ -107,11 +104,6 @@ export declare class SynthSource {
|
|
|
107
104
|
* @ignore
|
|
108
105
|
*/
|
|
109
106
|
get charSource(): SynthSource | undefined;
|
|
110
|
-
/**
|
|
111
|
-
* Get the character count if defined (from char() function).
|
|
112
|
-
* @ignore
|
|
113
|
-
*/
|
|
114
|
-
get charCount(): number | undefined;
|
|
115
107
|
/**
|
|
116
108
|
* Get all nested sources for combine operations.
|
|
117
109
|
* @ignore
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SynthSource.d.ts","sourceRoot":"","sources":["../../../src/core/SynthSource.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAC7F,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAInD,MAAM,WAAW,WAAY,SAAQ,YAAY;
|
|
1
|
+
{"version":3,"file":"SynthSource.d.ts","sourceRoot":"","sources":["../../../src/core/SynthSource.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAC7F,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAInD,MAAM,WAAW,WAAY,SAAQ,YAAY;CAAI;AAErD;;GAEG;AACH,UAAU,wBAAwB;IACjC,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,eAAe,CAAC,EAAE,WAAW,CAAC;IAC9B,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACzC,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;CACxD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,WAAW;IACvB,wCAAwC;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;IAEpC,8CAA8C;IAC9C,OAAO,CAAC,YAAY,CAAC,CAAmB;IAExC,4EAA4E;IAC5E,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA2B;IAE1D,yFAAyF;IACzF,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAsC;IAEzE,mDAAmD;IACnD,OAAO,CAAC,YAAY,CAAC,CAAc;IAEnC,wDAAwD;IACxD,OAAO,CAAC,gBAAgB,CAAC,CAAc;IAEvC,iFAAiF;IACjF,OAAO,CAAC,WAAW,CAAC,CAAc;IAElC;;;;OAIG;gBACS,OAAO,CAAC,EAAE,wBAAwB;IAU9C;;;;OAIG;IACI,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,mBAAmB,EAAE,GAAG,IAAI;IASxE;;;OAGG;IACI,mBAAmB,CACzB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,mBAAmB,EAAE,GAC7B,IAAI;IAMP;;;;OAIG;IACI,mBAAmB,CAAC,GAAG,EAAE,sBAAsB,GAAG,IAAI;IAMtD,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAa5B,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAKpC,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAK/B,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAKpC,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAMhC,KAAK,IAAI,WAAW;IAwB3B;;;OAGG;IACH,IAAW,UAAU,IAAI,SAAS,eAAe,EAAE,CAElD;IAED;;;OAGG;IACH,IAAW,WAAW,IAAI,gBAAgB,GAAG,SAAS,CAErD;IAED;;;OAGG;IACH,IAAW,WAAW,IAAI,WAAW,GAAG,SAAS,CAEhD;IAED;;;OAGG;IACH,IAAW,eAAe,IAAI,WAAW,GAAG,SAAS,CAEpD;IAED;;;OAGG;IACH,IAAW,UAAU,IAAI,WAAW,GAAG,SAAS,CAE/C;IAID;;;OAGG;IACH,IAAW,aAAa,IAAI,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAEnD;IAED;;;OAGG;IACH,IAAW,iBAAiB,IAAI,GAAG,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAElE;CACD"}
|
|
@@ -113,6 +113,14 @@ export interface LayerSynthState {
|
|
|
113
113
|
* If set, this overrides the global BPM for this layer's array modulation.
|
|
114
114
|
*/
|
|
115
115
|
bpm?: number;
|
|
116
|
+
/**
|
|
117
|
+
* Optional callback invoked when dynamic parameter evaluation fails.
|
|
118
|
+
* Live coding environments can use this to display errors without crashing.
|
|
119
|
+
*
|
|
120
|
+
* @param error - The error that was caught
|
|
121
|
+
* @param uniformName - Name of the uniform whose evaluation failed
|
|
122
|
+
*/
|
|
123
|
+
onDynamicError?: (error: unknown, uniformName: string) => void;
|
|
116
124
|
}
|
|
117
125
|
/**
|
|
118
126
|
* Character set mapping for charMap transform.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEpE;;;;;;;;;GASG;AACH,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,cAAc,CAAC;AAExF;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,WAAW,CAAC;AAEhF;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB;IAChB,IAAI,EAAE,QAAQ,CAAC;IACf,oCAAoC;IACpC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;CAClC;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,mBAAmB,GAC5B,MAAM,GACN,MAAM,EAAE,GACR,MAAM,GACN,CAAC,CAAC,GAAG,EAAE,YAAY,KAAK,MAAM,CAAC,GAC/B,CAAC,CAAC,GAAG,EAAE,YAAY,KAAK,MAAM,EAAE,CAAC,GACjC,WAAW,GACX,IAAI,CAAC;AAER;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,YAAY;IAC5B,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,0BAA0B;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,4BAA4B;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,GAAG,EAAE,MAAM,CAAC;CACZ;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B,+BAA+B;IAC/B,MAAM,EAAE,WAAW,CAAC;IACpB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,qCAAqC;IACrC,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,gDAAgD;IAChD,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,gDAAgD;IAChD,YAAY,EAAE,OAAO,CAAC;IACtB;;;OAGG;IACH,eAAe,CAAC,EAAE,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,CAAC;IAC7D;;;OAGG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC9C;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -39,4 +39,6 @@ export { SynthSource } from './core/SynthSource';
|
|
|
39
39
|
export type { SynthParameterValue, SynthContext } from './core/types';
|
|
40
40
|
export { cellColor, char, charColor, gradient, noise, osc, paint, shape, solid, src, voronoi, } from './api';
|
|
41
41
|
export type { ModulatedArray, EasingFunction } from './utils/ArrayUtils';
|
|
42
|
+
export { setGlobalErrorCallback } from './utils/SafeEvaluator';
|
|
43
|
+
export type { DynamicErrorCallback } from './utils/SafeEvaluator';
|
|
42
44
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAGH,OAAO,aAAa,CAAC;AAGrB,OAAO,iBAAiB,CAAC;AAEzB,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,YAAY,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEtE,OAAO,EACN,SAAS,EACT,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,KAAK,EACL,GAAG,EACH,KAAK,EACL,KAAK,EACL,KAAK,EACL,GAAG,EACH,OAAO,GACP,MAAM,OAAO,CAAC;AAEf,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAGH,OAAO,aAAa,CAAC;AAGrB,OAAO,iBAAiB,CAAC;AAEzB,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,YAAY,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEtE,OAAO,EACN,SAAS,EACT,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,KAAK,EACL,GAAG,EACH,KAAK,EACL,KAAK,EACL,KAAK,EACL,GAAG,EACH,OAAO,GACP,MAAM,OAAO,CAAC;AAEf,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,YAAY,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Synth render lifecycle callback.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Handles rendering of synth sources with atomic parameter validation
|
|
5
|
+
* to prevent WebGL errors from incomplete uniform state.
|
|
5
6
|
*/
|
|
6
7
|
import type { TextmodeLayer } from 'textmode.js/layering';
|
|
7
8
|
/**
|
|
8
|
-
* Render synth
|
|
9
|
+
* Render synth source to layer framebuffers.
|
|
10
|
+
*
|
|
11
|
+
* Uses an atomic render pattern: all dynamic parameters are validated
|
|
12
|
+
* BEFORE any WebGL operations. If any parameter fails, the entire frame
|
|
13
|
+
* is skipped and the error propagates for the environment to handle.
|
|
9
14
|
*/
|
|
10
15
|
export declare function synthRender(layer: TextmodeLayer, textmodifier: any): Promise<void>;
|
|
11
16
|
//# sourceMappingURL=synthRender.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"synthRender.d.ts","sourceRoot":"","sources":["../../../src/lifecycle/synthRender.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"synthRender.d.ts","sourceRoot":"","sources":["../../../src/lifecycle/synthRender.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAS1D;;;;;;GAMG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,iBA+LxE"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DynamicEvaluator - Dynamic parameter evaluation for live coding environments.
|
|
3
|
+
*
|
|
4
|
+
* Provides graceful error handling for user-provided dynamic parameter functions.
|
|
5
|
+
* When evaluation fails, errors are reported via callback and a fallback value
|
|
6
|
+
* is returned, allowing rendering to continue with safe defaults.
|
|
7
|
+
*/
|
|
8
|
+
import type { SynthContext } from '../core/types';
|
|
9
|
+
/**
|
|
10
|
+
* Callback signature for dynamic parameter evaluation errors.
|
|
11
|
+
* Live coding environments can use this to display errors without interrupting rendering.
|
|
12
|
+
*/
|
|
13
|
+
export type DynamicErrorCallback = (error: unknown, uniformName: string) => void;
|
|
14
|
+
/**
|
|
15
|
+
* Options for dynamic parameter evaluation.
|
|
16
|
+
*/
|
|
17
|
+
export interface EvalOptions {
|
|
18
|
+
/** Callback invoked when an error occurs (overrides global callback) */
|
|
19
|
+
onError?: DynamicErrorCallback;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Set a global error callback for dynamic parameter evaluation errors.
|
|
23
|
+
*
|
|
24
|
+
* Provides a centralized way for live coding environments to receive
|
|
25
|
+
* notifications whenever a dynamic parameter fails to evaluate.
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```typescript
|
|
29
|
+
* import { setGlobalErrorCallback } from 'textmode.synth.js';
|
|
30
|
+
*
|
|
31
|
+
* setGlobalErrorCallback((error, uniformName) => {
|
|
32
|
+
* console.error(`[Synth] Parameter "${uniformName}" error:`, error);
|
|
33
|
+
* });
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export declare function setGlobalErrorCallback(callback: DynamicErrorCallback | null): void;
|
|
37
|
+
/**
|
|
38
|
+
* Get the current global error callback.
|
|
39
|
+
*/
|
|
40
|
+
export declare function getGlobalErrorCallback(): DynamicErrorCallback | null;
|
|
41
|
+
/**
|
|
42
|
+
* Evaluate a dynamic parameter with graceful error handling.
|
|
43
|
+
*
|
|
44
|
+
* When evaluation fails (exception or invalid value), the error is reported
|
|
45
|
+
* via callback and the fallback value is returned. This allows rendering to
|
|
46
|
+
* continue with safe defaults rather than aborting the frame.
|
|
47
|
+
*
|
|
48
|
+
* @param fn - The dynamic parameter function to evaluate
|
|
49
|
+
* @param uniformName - Name of the uniform (for error reporting)
|
|
50
|
+
* @param fallback - Value to return if evaluation fails
|
|
51
|
+
* @param options - Evaluation options including error callback
|
|
52
|
+
* @returns The evaluated value, or fallback on error
|
|
53
|
+
*/
|
|
54
|
+
export declare function evaluateDynamic(fn: () => number | number[], uniformName: string, fallback: number | number[], options?: EvalOptions): number | number[];
|
|
55
|
+
/**
|
|
56
|
+
* Create a wrapped updater function with graceful error handling.
|
|
57
|
+
*/
|
|
58
|
+
export declare function createDynamicUpdater(updater: (ctx: SynthContext) => number | number[], uniformName: string, fallback: number | number[], onError?: DynamicErrorCallback): (ctx: SynthContext) => number | number[];
|
|
59
|
+
//# sourceMappingURL=SafeEvaluator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SafeEvaluator.d.ts","sourceRoot":"","sources":["../../../src/utils/SafeEvaluator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;AAEjF;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB,wEAAwE;IACxE,OAAO,CAAC,EAAE,oBAAoB,CAAC;CAClC;AAOD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI,GAAG,IAAI,CAElF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,oBAAoB,GAAG,IAAI,CAEpE;AAoBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAC3B,EAAE,EAAE,MAAM,MAAM,GAAG,MAAM,EAAE,EAC3B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,EAC3B,OAAO,GAAE,WAAgB,GAC1B,MAAM,GAAG,MAAM,EAAE,CAmBnB;AAqCD;;GAEG;AACH,wBAAgB,oBAAoB,CAChC,OAAO,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,MAAM,GAAG,MAAM,EAAE,EACjD,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,EAC3B,OAAO,CAAC,EAAE,oBAAoB,GAC/B,CAAC,GAAG,EAAE,YAAY,KAAK,MAAM,GAAG,MAAM,EAAE,CAG1C"}
|
|
@@ -1,12 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Utilities module exports.
|
|
3
|
-
*
|
|
4
|
-
* This module provides utility classes and functions used throughout
|
|
5
|
-
* the synth engine.
|
|
6
|
-
*
|
|
7
|
-
* @module
|
|
8
3
|
*/
|
|
9
4
|
export { EASING_FUNCTIONS, initArrayUtils, getArrayValue, isModulatedArray, type EasingFunction, type ModulatedArray, } from './ArrayUtils';
|
|
10
5
|
export { CharacterResolver } from './CharacterResolver';
|
|
11
6
|
export { collectExternalLayerRefs } from './collectExternalLayerRefs';
|
|
7
|
+
export { evaluateDynamic, createDynamicUpdater, setGlobalErrorCallback, getGlobalErrorCallback, type DynamicErrorCallback, type EvalOptions, } from './SafeEvaluator';
|
|
12
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACN,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,KAAK,cAAc,EACnB,KAAK,cAAc,GACnB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAGtE,OAAO,EACN,eAAe,EACf,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EACtB,KAAK,oBAAoB,EACzB,KAAK,WAAW,GAChB,MAAM,iBAAiB,CAAC"}
|