Skip to content
18 changes: 17 additions & 1 deletion src/webgl/ShaderGenerator.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,12 @@ import { parse } from 'acorn';
import { ancestor } from 'acorn-walk';
import escodegen from 'escodegen';

const fn = {};
function shadergenerator(p5, fn) {
if (!fn || typeof fn !== 'object') {
throw new Error("fn is not defined or is not an object. Ensure it is passed correctly to shadergenerator.");
}

let GLOBAL_SHADER;
let BRANCH;

Expand Down Expand Up @@ -1620,8 +1625,19 @@ function shadergenerator(p5, fn) {
})
}

// Alias GLSL's mix function as lerp in p5.strands
// Bridging p5.js lerp and GLSL mix for consistency in shader expressions
const originalLerp = fn.lerp;
fn.lerp = function (...args) {
if (GLOBAL_SHADER?.isGenerating) {
return fn.mix(...args); // Use mix inside p5.strands
} else {
return originalLerp.apply(this, args); // Fallback to normal p5.js lerp
}
};

export default shadergenerator;

if (typeof p5 !== 'undefined') {
p5.registerAddon(shadergenerator)
p5.registerAddon((p5) => shadergenerator(p5, fn));
}