lygia
/v1.1.6
/math
/mmix
)expands mix to linearly mix more than two values
Use:
mix(<float|vec2|vec3|vec4> a, <float|vec2|vec3|vec4> b, <float|vec2|vec3|vec4> c [, <float|vec2|vec3|vec4> d], <float> pct)
#ifndef FNC_MIX
#define FNC_MIX
float mmix(const in float a, const in float b, const in float c) { return mix(a, b, c); }
vec2 mmix(const in vec2 a, const in vec2 b, const in float c) { return mix(a, b, c); }
vec2 mmix(const in vec2 a, const in vec2 b, const in vec2 c) { return mix(a, b, c); }
vec3 mmix(const in vec3 a, const in vec3 b, const in float c) { return mix(a, b, c); }
vec3 mmix(const in vec3 a, const in vec3 b, const in vec3 c) { return mix(a, b, c); }
vec4 mmix(const in vec4 a, const in vec4 b, const in float c) { return mix(a, b, c); }
vec4 mmix(const in vec4 a, const in vec4 b, const in vec4 c) { return mix(a, b, c); }
float mmix(const in float a, const in float b, const in float c, const in float pct) {
return mix(
mix(a, b, 2. * pct),
mix(b, c, 2. * (max(pct, .5) - .5)),
step(.5, pct)
);
}
vec2 mmix(vec2 a, vec2 b, vec2 c, float pct) {
return mix(
mix(a, b, 2. * pct),
mix(b, c, 2. * (max(pct, .5) - .5)),
step(.5, pct)
);
}
vec2 mmix(vec2 a, vec2 b, vec2 c, vec2 pct) {
return mix(
mix(a, b, 2. * pct),
mix(b, c, 2. * (max(pct, .5) - .5)),
step(.5, pct)
);
}
vec3 mmix(vec3 a, vec3 b, vec3 c, float pct) {
return mix(
mix(a, b, 2. * pct),
mix(b, c, 2. * (max(pct, .5) - .5)),
step(.5, pct)
);
}
vec3 mmix(vec3 a, vec3 b, vec3 c, vec3 pct) {
return mix(
mix(a, b, 2. * pct),
mix(b, c, 2. * (max(pct, .5) - .5)),
step(.5, pct)
);
}
vec4 mmix(vec4 a, vec4 b, vec4 c, float pct) {
return mix(
mix(a, b, 2. * pct),
mix(b, c, 2. * (max(pct, .5) - .5)),
step(.5, pct)
);
}
vec4 mmix(vec4 a, vec4 b, vec4 c, vec4 pct) {
return mix(
mix(a, b, 2. * pct),
mix(b, c, 2. * (max(pct, .5) - .5)),
step(.5, pct)
);
}
float mmix(in float a, in float b, in float c, in float d, in float pct) {
return mix(
mix(a, b, 3. * pct),
mix(b,
mix( c,
d,
3. * (max(pct, .66) - .66)),
3. * (clamp(pct, .33, .66) - .33)
),
step(.33, pct)
);
}
vec2 mmix(in vec2 a, in vec2 b, in vec2 c, in vec2 d, in float pct) {
return mix(
mix(a, b, 3. * pct),
mix(b,
mix( c,
d,
3. * (max(pct, .66) - .66)),
3. * (clamp(pct, .33, .66) - .33)
),
step(.33, pct)
);
}
vec2 mmix(in vec2 a, in vec2 b, in vec2 c, in vec2 d, in vec2 pct) {
return mix(
mix(a, b, 3. * pct),
mix(b,
mix( c,
d,
3. * (max(pct, .66) - .66)),
3. * (clamp(pct, .33, .66) - .33)
),
step(.33, pct)
);
}
vec3 mmix(in vec3 a, in vec3 b, in vec3 c, in vec3 d, in float pct) {
return mix(
mix(a, b, 3. * pct),
mix(b,
mix( c,
d,
3. * (max(pct, .66) - .66)),
3. * (clamp(pct, .33, .66) - .33)
),
step(.33, pct)
);
}
vec3 mmix(in vec3 a, in vec3 b, in vec3 c, in vec3 d, in vec3 pct) {
return mix(
mix(a, b, 3. * pct),
mix(b,
mix( c,
d,
3. * (max(pct, .66) - .66)),
3. * (clamp(pct, .33, .66) - .33)
),
step(.33, pct)
);
}
vec4 mmix(in vec4 a, in vec4 b, in vec4 c, in vec4 d, in float pct) {
return mix(
mix(a, b, 3. * pct),
mix(b,
mix( c,
d,
3. * (max(pct, .66) - .66)),
3. * (clamp(pct, .33, .66) - .33)
),
step(.33, pct)
);
}
vec4 mmix(in vec4 a, in vec4 b, in vec4 c, in vec4 d, in vec4 pct) {
return mix(
mix(a, b, 3. * pct),
mix(b,
mix( c,
d,
3. * (max(pct, .66) - .66)),
3. * (clamp(pct, .33, .66) - .33)
),
step(.33, pct)
);
}
#endif
LYGIA is dual-licensed under the Prosperity License and the Patron License for sponsors and contributors.
Sponsors and contributors are automatically added to the Patron License and they can ignore the any non-commercial rule of the Prosperity Licensed software (please take a look to the exception).
It's also possible to get a permanent comercial license hook to a single and specific version of LYGIA.
Sign up for the news letter bellow, joing the LYGIA's channel on Discord or follow the Github repository