@absulit/points
Version:
A Generative Art library made in WebGPU
64 lines (62 loc) • 2.1 kB
JavaScript
/* @ts-self-types="./color.d.ts" */
const RED=`
const RED = vec4(1.,0.,0.,1.);
`;const GREEN=`
const GREEN = vec4(0.,1.,0.,1.);
`;const BLUE=`
const BLUE = vec4(0.,0.,1.,1.);
`;const YELLOW=`
const YELLOW = vec4(1.,1.,0.,1.);
`;const CYAN=`
const CYAN = vec4(0.,1.,1.,1.);
`;const MAGENTA=`
const MAGENTA = vec4(1.,0.,1.,1.);
`;const WHITE=`
const WHITE = vec4(1.,1.,1.,1.);
`;const BLACK=`
const BLACK = vec4(0.,0.,0.,1.);
`;const layer=`
// https://stackoverflow.com/a/24501192/507186
fn layer(back:vec4f, front: vec4f) -> vec4f {
return front * front.a + back * (1. - front.a);
}
`;const RGBAFromHSV=`
fn hsvAux(h:f32, s:f32, v:f32, n:f32) -> f32 {
let k:f32 = (n + h * 6.) % 6.;
return v - v * s * max(min(min(k, 4. - k), 1.), 0.);
};
fn RGBAFromHSV(h:f32, s:f32, v:f32) -> vec4f{
return vec4f(hsvAux(h, s, v, 5.), hsvAux(h, s, v, 3.), hsvAux(h, s, v, 1.), 1.);
}
`;const bloom=`
fn bloom(input:f32, iterations:i32, intensity:f32) -> f32 {
var output = 0.;
let iterationsF32 = f32(iterations);
for (var k = 0; k < iterations; k++) {
let kf32 = f32(k);
for (var n = 0; n < iterations; n++) {
let coef = cos(2. * PI * kf32 * f32(n) / iterationsF32 );
output += input * coef * intensity;
}
}
return output;
}
`;const brightness=`
fn brightness(color:vec4f) -> f32 {
// // Standard
// LuminanceA = (0.2126*R) + (0.7152*G) + (0.0722*B)
// // Percieved A
// LuminanceB = (0.299*R + 0.587*G + 0.114*B)
// // Perceived B, slower to calculate
// LuminanceC = sqrt(0.299*(R**2) + 0.587*(G**2) + 0.114*(B**2))
return (0.2126 * color.r) + (0.7152 * color.g) + (0.0722 * color.b);
}
`;const brightnessB=`
fn brightnessB(color:vec4f) -> f32 {
return (0.299 * color.r) + (0.587 * color.g) + (0.114 * color.b);
}
`;const brightnessC=`
fn brightnessC(color:vec4f) -> f32 {
return (0.2126 * pow(color.r, 2.)) + (0.7152 * pow(color.g, 2.)) + (0.0722 * pow(color.b, 2.));
}
`;export{BLACK,BLUE,CYAN,GREEN,MAGENTA,RED,RGBAFromHSV,WHITE,YELLOW,bloom,brightness,brightnessB,brightnessC,layer};